From db20f3f1bb8595633a7e16c8900fd401a453a6b5 Mon Sep 17 00:00:00 2001 From: Jiyoung Yun Date: Tue, 27 Dec 2016 16:46:08 +0900 Subject: Imported Upstream version 1.0.0.9127 --- tests/arm64/Tests.lst | 84 +- tests/build.proj | 1 + .../ConfigFilesGenerators/ConfigTemplate.txt | 32 + .../ConfigFilesGenerators/GenerateConfig.cmd | 53 + .../ConfigFilesGenerators/GenerateConfig.sh | 65 + tests/debugger_tests/ScriptGenerator/Program.cs | Bin 0 -> 8256 bytes tests/debugger_tests/ScriptGenerator/project.json | Bin 0 -> 1106 bytes tests/debugger_tests/setup-debuggertests.cmd | 119 + tests/debugger_tests/setup-debuggertests.sh | Bin 0 -> 6494 bytes tests/dir.props | 3 +- tests/helix.targets | 78 - tests/issues.targets | 65 +- tests/override.targets | 2 - tests/publishdependency.targets | 189 +- tests/runtest.cmd | 58 +- tests/runtest.proj | 50 +- tests/runtest.sh | 72 +- tests/scripts/arm32_ci_script.sh | 66 +- tests/scripts/arm64_post_build.py | 311 + tests/scripts/format.py | 46 +- tests/scripts/perf-prep.sh | 78 + tests/scripts/project.json | 23 +- tests/scripts/run-xunit-perf.cmd | 52 +- tests/scripts/run-xunit-perf.sh | 70 +- tests/setup-runtime-dependencies.cmd | 2 +- tests/setup-runtime-dependencies.sh | 4 + tests/src/CLRTest.Execute.Bash.targets | 11 +- tests/src/CLRTest.Execute.Batch.targets | 11 +- tests/src/CLRTest.Execute.targets | 1 + tests/src/CLRTest.Jit.targets | 86 + tests/src/Common/Platform/platformdefines.cpp | 4 +- tests/src/Common/Platform/platformdefines.h | 6 +- .../build_against_pkg_dependencies.csproj | 15 + .../build_against_pkg_dependencies/project.json | 32 + tests/src/Common/empty/project.json | 2 +- tests/src/Common/netcoreapp/project.json | 74 + tests/src/Common/targeting_pack_ref/project.json | 22 + .../targeting_pack_ref/targeting_pack_ref.csproj | 12 + tests/src/Common/test_dependencies/project.json | 136 +- .../test_dependencies/test_dependencies.csproj | 4 +- tests/src/Common/test_runtime/project.json | 5 +- tests/src/Common/test_runtime/test_runtime.csproj | 4 +- .../cti/system/datetime/datetimeparse1.cs | 8 +- tests/src/CoreMangLib/system/span/BasicSpanTest.cs | 804 + tests/src/GC/API/GC/GetGenerationWR2.csproj | 1 + tests/src/GC/API/GCHandleCollector/Usage.cs | 3 +- .../src/GC/Features/HeapExpansion/pluggaps.csproj | 1 + .../Framework/GCPerfTestFramework.csproj | 31 +- tests/src/GC/Performance/Framework/packages.config | 24 +- .../GC/Regressions/v2.0-rtm/494226/494226.csproj | 3 +- tests/src/GC/Scenarios/DoublinkList/dlcollect.cs | 6 + tests/src/GC/Scenarios/DoublinkList/dlstack.cs | 6 + tests/src/GC/Scenarios/DoublinkList/doublinkgen.cs | 6 + .../Scenarios/FinalizeTimeout/FinalizeTimeout.cs | 7 +- .../GC/Scenarios/ServerModel/servermodel.csproj | 1 + .../Stress/Framework/ReliabilityFramework.csproj | 2 +- tests/src/GC/Stress/Tests/dir.targets | 6 + .../ByValArray/MarshalArrayByValNative.cpp | 130 +- .../PrimitiveMarshalling/Bool/BoolNative.cpp | 2 + .../Interop/RefCharArray/RefCharArrayNative.cpp | 2 +- .../Interop/SimpleStruct/SimpleStructNative.cpp | 4 +- .../StringMarshalling/UTF8/UTF8TestNative.cpp | 4 +- .../PInvoke/MarshalStructAsParamDLL.cpp | 53 +- .../PInvoke/MarshalStructAsParamDLL.h | 173 +- tests/src/Interop/common/types.h | 4 +- tests/src/JIT/CodeGenBringUpTests/Rotate.cs | 96 +- tests/src/JIT/CodeGenBringUpTests/Shift.cs | 86 + tests/src/JIT/CodeGenBringUpTests/Shift.csproj | 40 + tests/src/JIT/Directed/pinvoke/pinvoke-examples.cs | 223 + .../JIT/Directed/pinvoke/pinvoke-examples.csproj | 44 + .../src/JIT/Methodical/fp/exgen/10w5d_cs_d.csproj | 5 +- .../src/JIT/Methodical/fp/exgen/10w5d_cs_r.csproj | 5 +- .../structs/systemvbringup/structpinvoketests.cs | 1096 +- tests/src/JIT/Methodical/structs/valuetuple.cs | 95 + tests/src/JIT/Methodical/structs/valuetuple.csproj | 41 + .../Performance/CodeQuality/BenchF/Adams/Adams.cs | 9 +- .../CodeQuality/BenchF/BenchMk2/BenchMk2.cs | 3 + .../CodeQuality/BenchF/BenchMrk/BenchMrk.cs | 3 + .../CodeQuality/BenchF/Bisect/Bisect.cs | 3 + .../Performance/CodeQuality/BenchF/DMath/DMath.cs | 3 + .../JIT/Performance/CodeQuality/BenchF/FFT/FFT.cs | 3 + .../CodeQuality/BenchF/InProd/InProd.cs | 3 + .../Performance/CodeQuality/BenchF/InvMt/InvMt.cs | 3 + .../CodeQuality/BenchF/LLoops/LLoops.cs | 3 + .../CodeQuality/BenchF/Lorenz/Lorenz.cs | 3 + .../CodeQuality/BenchF/MatInv4/MatInv4.cs | 17 +- .../Performance/CodeQuality/BenchF/NewtE/NewtE.cs | 3 + .../Performance/CodeQuality/BenchF/NewtR/NewtR.cs | 3 + .../CodeQuality/BenchF/Regula/Regula.cs | 3 + .../CodeQuality/BenchF/Romber/Romber.cs | 3 + .../CodeQuality/BenchF/Secant/Secant.cs | 3 + .../CodeQuality/BenchF/Simpsn/Simpsn.cs | 3 + .../Performance/CodeQuality/BenchF/SqMtx/SqMtx.cs | 3 + .../Performance/CodeQuality/BenchF/Trap/Trap.cs | 3 + .../CodeQuality/BenchF/Whetsto/Whetsto.cs | 3 + .../CodeQuality/BenchI/8Queens/8Queens.cs | 7 +- .../CodeQuality/BenchI/Ackermann/Ackermann.cs | 7 +- .../CodeQuality/BenchI/AddArray/AddArray.cs | 9 +- .../CodeQuality/BenchI/AddArray2/AddArray2.cs | 3 + .../CodeQuality/BenchI/Array1/Array1.cs | 3 + .../CodeQuality/BenchI/Array2/Array2.cs | 7 +- .../CodeQuality/BenchI/BenchE/BenchE.cs | 3 + .../CodeQuality/BenchI/BubbleSort/BubbleSort.cs | 7 +- .../CodeQuality/BenchI/BubbleSort2/BubbleSort2.cs | 5 +- .../CodeQuality/BenchI/CSieve/CSieve.cs | 5 +- .../JIT/Performance/CodeQuality/BenchI/Fib/Fib.cs | 7 +- .../CodeQuality/BenchI/HeapSort/HeapSort.cs | 7 +- .../CodeQuality/BenchI/IniArray/IniArray.cs | 5 +- .../CodeQuality/BenchI/LogicArray/LogicArray.cs | 5 +- .../CodeQuality/BenchI/Midpoint/Midpoint.cs | 5 +- .../CodeQuality/BenchI/MulMatrix/MulMatrix.cs | 7 +- .../CodeQuality/BenchI/NDhrystone/NDhrystone.cs | 45 +- .../CodeQuality/BenchI/Permutate/Permutate.cs | 3 + .../JIT/Performance/CodeQuality/BenchI/Pi/Pi.cs | 5 +- .../CodeQuality/BenchI/Puzzle/Puzzle.cs | 3 + .../CodeQuality/BenchI/QuickSort/QuickSort.cs | 7 +- .../CodeQuality/BenchI/TreeInsert/TreeInsert.cs | 3 + .../CodeQuality/BenchI/TreeSort/TreeSort.cs | 9 +- .../CodeQuality/BenchI/XposMatrix/XposMatrix.cs | 7 +- .../binarytrees/binarytrees.csharp.cs | 7 +- .../BenchmarksGame/fasta/fasta.csharp-2.cs | 3 + .../BenchmarksGame/fastaredux/fastaredux.csharp.cs | 3 + .../BenchmarksGame/nbody/nbody.csharp-3.cs | 3 + .../BenchmarksGame/pidigits/pi-digits.cs | 5 +- .../BenchmarksGame/spectralnorm/spectralnorm.cs | 9 +- .../CodeQuality/Inlining/ConstantArgsByte.cs | 3 + .../CodeQuality/Inlining/ConstantArgsChar.cs | 3 + .../CodeQuality/Inlining/ConstantArgsDouble.cs | 3 + .../CodeQuality/Inlining/ConstantArgsFloat.cs | 3 + .../CodeQuality/Inlining/ConstantArgsInt.cs | 3 + .../CodeQuality/Inlining/ConstantArgsLong.cs | 3 + .../CodeQuality/Inlining/ConstantArgsSByte.cs | 3 + .../CodeQuality/Inlining/ConstantArgsShort.cs | 3 + .../CodeQuality/Inlining/ConstantArgsString.cs | 3 + .../CodeQuality/Inlining/ConstantArgsUInt.cs | 3 + .../CodeQuality/Inlining/ConstantArgsULong.cs | 3 + .../CodeQuality/Inlining/ConstantArgsUShort.cs | 3 + .../CodeQuality/Inlining/InlineGCStruct.cs | 148 + .../CodeQuality/Inlining/InlineGCStruct.csproj | 44 + .../CodeQuality/Inlining/NoThrowInline.cs | 5 +- .../SIMD/ConsoleMandel/ConsoleMandel.cs | 4 +- .../CodeQuality/SIMD/RayTracer/RayTracerBench.cs | 7 +- .../CodeQuality/SIMD/SeekUnroll/SeekUnroll.cs | 159 + .../CodeQuality/SIMD/SeekUnroll/SeekUnroll.csproj | 43 + .../CodeQuality/Serialization/Deserialize.cs | 7 +- .../CodeQuality/Serialization/Serialize.cs | 5 +- .../Performance/CodeQuality/V8/Crypto/Crypto.cs | 2 +- .../CodeQuality/V8/DeltaBlue/DeltaBlue.cs | 5 +- .../CodeQuality/V8/Richards/Richards.cs | 18 +- .../Performance/RunBenchmarks/RunBenchmarks.cmd | 2 +- .../JIT/Performance/RunBenchmarks/RunBenchmarks.sh | 53 + .../CLR-x86-JIT/V2.0-RTM/b475589/b475589.il | 71 - .../CLR-x86-JIT/V2.0-RTM/b475589/b475589.ilproj | 40 - .../JitBlue/DevDiv_142976/DevDiv_142976.cs | 56 + .../JitBlue/DevDiv_142976/DevDiv_142976.csproj | 46 + .../JitBlue/DevDiv_255294/DevDiv_255294.cs | 62374 +++++++++++++++++++ .../JitBlue/DevDiv_255294/DevDiv_255294.csproj | 46 + .../JitBlue/DevDiv_278365/DevDiv_278365.cs | 49 + .../JitBlue/DevDiv_278365/DevDiv_278365.csproj | 46 + .../JitBlue/DevDiv_278369/DevDiv_278369.il | 58 + .../JitBlue/DevDiv_278369/DevDiv_278369.ilproj | 41 + .../JitBlue/DevDiv_278371/DevDiv_278371.il | 88 + .../JitBlue/DevDiv_278371/DevDiv_278371.ilproj | 41 + .../JitBlue/DevDiv_278372/DevDiv_278372.il | 156 + .../JitBlue/DevDiv_278372/DevDiv_278372.ilproj | 51 + .../JitBlue/DevDiv_278375/DevDiv_278375.cs | 131 + .../JitBlue/DevDiv_278375/DevDiv_278375.csproj | 46 + .../JitBlue/DevDiv_278376/DevDiv_278376.cs | 36 + .../JitBlue/DevDiv_278376/DevDiv_278376.csproj | 46 + .../JitBlue/DevDiv_278523/DevDiv_278523.il | 113 + .../JitBlue/DevDiv_278523/DevDiv_278523.ilproj | 41 + .../JitBlue/DevDiv_278526/DevDiv_278526.cs | 47 + .../JitBlue/DevDiv_278526/DevDiv_278526.csproj | 46 + .../JitBlue/DevDiv_279396/DevDiv_279396.il | 39 + .../JitBlue/DevDiv_279396/DevDiv_279396.ilproj | 41 + .../JitBlue/DevDiv_279829/DevDiv_279829.il | 36 + .../JitBlue/DevDiv_279829/DevDiv_279829.ilproj | 46 + .../JitBlue/DevDiv_280120/DevDiv_280120.cs | 22 + .../JitBlue/DevDiv_280120/DevDiv_280120.csproj | 56 + .../JitBlue/DevDiv_280123/DevDiv_280123.cs | 42 + .../JitBlue/DevDiv_280123/DevDiv_280123.csproj | 46 + .../JitBlue/DevDiv_280127/DevDiv_280127.cs | 37 + .../JitBlue/DevDiv_280127/DevDiv_280127.csproj | 46 + .../JitBlue/DevDiv_283795/DevDiv_283795.cs | 55 + .../JitBlue/DevDiv_283795/DevDiv_283795.csproj | 46 + .../JitBlue/DevDiv_284785/DevDiv_284785.cs | 39 + .../JitBlue/DevDiv_284785/DevDiv_284785.csproj | 46 + .../JitBlue/DevDiv_288222/DevDiv_288222.cs | 50 + .../JitBlue/DevDiv_288222/DevDiv_288222.csproj | 46 + .../JitBlue/DevDiv_359734/DevDiv_359734.il | 118 + .../JitBlue/DevDiv_359734/DevDiv_359734.ilproj | 41 + .../JitBlue/DevDiv_359736/DevDiv_359736.cs | 42 + .../JitBlue/DevDiv_359736/DevDiv_359736_d.csproj | 45 + .../JitBlue/DevDiv_359736/DevDiv_359736_do.csproj | 45 + .../JitBlue/DevDiv_359736/DevDiv_359736_r.csproj | 45 + .../JitBlue/DevDiv_359736/DevDiv_359736_ro.csproj | 45 + .../Regression/JitBlue/GitHub_7906/GitHub_7906.cs | 47 + .../JitBlue/GitHub_7906/GitHub_7906.csproj | 44 + .../Regression/JitBlue/GitHub_7907/GitHub_7907.cs | 53 + .../JitBlue/GitHub_7907/GitHub_7907.csproj | 46 + .../Regression/JitBlue/GitHub_8133/GitHub_8133.il | 112 + .../JitBlue/GitHub_8133/GitHub_8133.ilproj | 41 + .../Regression/JitBlue/GitHub_8170/GitHub_8170.cs | 23 + .../JitBlue/GitHub_8170/GitHub_8170.csproj | 46 + .../Regression/JitBlue/GitHub_8220/GitHub_8220.cs | 170 + .../JitBlue/GitHub_8220/GitHub_8220.csproj | 45 + .../Regression/JitBlue/GitHub_8231/GitHub_8231.cs | 62 + .../JitBlue/GitHub_8231/GitHub_8231.csproj | 39 + .../Regression/JitBlue/GitHub_8460/GitHub_8460.cs | 38 + .../JitBlue/GitHub_8460/GitHub_8460.csproj | 46 + .../Regression/JitBlue/GitHub_8599/GitHub_8599.cs | 42 + .../JitBlue/GitHub_8599/GitHub_8599.csproj | 46 + .../GitHub_CoreRT_2073/GitHub_CoreRT_2073.il | 55 + .../GitHub_CoreRT_2073/GitHub_CoreRT_2073.ilproj | 38 + .../VS-ia64-JIT/V2.0-Beta2/b311420/b311420.csproj | 5 +- tests/src/JIT/SIMD/Vector3Interop.cs | 6 +- tests/src/JIT/SIMD/VectorDot.cs | 7 +- tests/src/JIT/SIMD/VectorIntEquals.cs | 61 +- tests/src/JIT/SIMD/VectorUtil.cs | 2 +- tests/src/JIT/config/benchmark+roslyn/project.json | 46 +- .../JIT/config/benchmark+serialize/project.json | 43 +- tests/src/JIT/config/benchmark/project.json | 51 +- tests/src/JIT/config/extra/project.json | 34 +- tests/src/JIT/config/minimal/project.json | 12 +- tests/src/JIT/config/threading+thread/project.json | 16 +- tests/src/JIT/config/threading/project.json | 12 +- tests/src/JIT/jit64/opt/cse/HugeArray.csproj | 5 +- tests/src/JIT/jit64/verif/sniff/fg/ver_fg_13.il | 7 +- .../opt/Inline/regression/mismatch32/mismatch32.il | 6 +- .../opt/Inline/regression/mismatch64/mismatch64.il | 6 +- .../JIT/opt/Tailcall/TailcallVerifyWithPrefix.il | 30 + .../bigvtbl/bigvtbl_cs_d.csproj | 3 + .../bigvtbl/bigvtbl_cs_r.csproj | 3 + .../InterfaceFolding/Nested_I/TestCase0.il | 21 +- .../InterfaceFolding/Nested_I/TestCase1.il | 20 +- .../InterfaceFolding/Nested_I/TestCase2.il | 20 +- .../InterfaceFolding/Nested_I/TestCase3.il | 20 +- .../InterfaceFolding/Nested_I/TestCase4.il | 22 +- .../InterfaceFolding/Nested_I/TestCase5.il | 20 +- .../InterfaceFolding/Nested_I/TestCase6.il | 20 +- .../Nested_I_Nested_J/TestCase0.il | 21 +- .../Nested_I_Nested_J/TestCase1.il | 20 +- .../Nested_I_Nested_J/TestCase2.il | 20 +- .../Nested_I_Nested_J/TestCase3.il | 20 +- .../Nested_I_Nested_J/TestCase4.il | 20 +- .../Nested_I_Nested_J/TestCase5.il | 19 +- .../Nested_I_Nested_J/TestCase6.il | 18 +- .../InterfaceFolding/Nested_J/TestCase0.il | 21 +- .../InterfaceFolding/Nested_J/TestCase1.il | 20 +- .../InterfaceFolding/Nested_J/TestCase2.il | 20 +- .../InterfaceFolding/Nested_J/TestCase3.il | 20 +- .../InterfaceFolding/Nested_J/TestCase4.il | 20 +- .../InterfaceFolding/Nested_J/TestCase5.il | 20 +- .../InterfaceFolding/Nested_J/TestCase6.il | 20 +- .../Nested_J_Nested_I/TestCase0.il | 21 +- .../Nested_J_Nested_I/TestCase1.il | 20 +- .../Nested_J_Nested_I/TestCase2.il | 20 +- .../Nested_J_Nested_I/TestCase3.il | 20 +- .../Nested_J_Nested_I/TestCase4.il | 20 +- .../Nested_J_Nested_I/TestCase5.il | 20 +- .../Nested_J_Nested_I/TestCase6.il | 20 +- .../classloader/InterfaceFolding/TestCase0.il | 15 +- .../classloader/InterfaceFolding/TestCase1.il | 18 +- .../classloader/InterfaceFolding/TestCase2.il | 18 +- .../classloader/InterfaceFolding/TestCase3.il | 18 +- .../classloader/InterfaceFolding/TestCase4.il | 18 +- .../classloader/InterfaceFolding/TestCase5.il | 18 +- .../classloader/InterfaceFolding/TestCase6.il | 18 +- .../classloader/InterfaceFolding/TestCase7.il | 19 +- .../Test2_NonFriendPriInterface.csproj | 35 - .../classloader/generics/Visibility/A_Types.csproj | 35 - .../classloader/generics/Visibility/B_Types.csproj | 35 - .../regressions/549411/exploit.csproj | 1 + .../regressions/dev10_710121/dev10_710121.il | 15 +- tests/src/TestWrappersConfig/project.json | 13 +- .../FixedAddressValueType/FixedAddressValueType.cs | 60 + .../FixedAddressValueType.csproj | 44 + .../ExecuteCodeWithGuaranteedCleanup.cs | 62 + .../ExecuteCodeWithGuaranteedCleanup.csproj | 42 + .../RuntimeWrappedException.cs | 63 + .../RuntimeWrappedException.csproj | 45 + .../RuntimeWrappedException/StringThrower.il | 40 + .../RuntimeWrappedException/StringThrower.ilproj | 40 + .../compilerservices/modulector/moduleCctor.il | 110 + .../compilerservices/modulector/moduleCctor.ilproj | 40 + .../modulector/runmoduleconstructor.cs | 38 + .../modulector/runmoduleconstructor.csproj | 45 + tests/src/dir.common.props | 7 +- tests/src/dir.props | 13 +- tests/src/dir.targets | 28 +- tests/src/jit/Directed/pinvoke/pinvoke-bug.cs | 60 + tests/src/jit/Directed/pinvoke/pinvoke-bug.csproj | 44 + tests/src/performance/perflab/BlockCopyPerf.cs | 29 +- tests/src/performance/perflab/CastingPerf.cs | 644 +- tests/src/performance/perflab/CastingPerf2.cs | 34 +- tests/src/performance/perflab/DelegatePerf.cs | 144 +- tests/src/performance/perflab/EnumPerf.cs | 109 +- tests/src/performance/perflab/LowLevelPerf.cs | 1283 +- tests/src/performance/perflab/ReflectionPerf.cs | 6317 +- tests/src/performance/perflab/StackWalk.cs | 129 +- tests/src/performance/perflab/ThreadingPerf.cs | 111 +- tests/src/performance/project.json | 54 +- tests/src/readytorun/generics.cs | 92 +- tests/src/readytorun/main.cs | 14 +- tests/src/reflection/ldtoken/byrefs.il | 88 + tests/src/reflection/ldtoken/byrefs.ilproj | 35 + tests/tests.targets | 4 +- tests/testsFailingOutsideWindows.txt | 3 +- tests/testsUnsupportedOnARM32.txt | 9 +- tests/testsUnsupportedOutsideWindows.txt | 1 + tests/x86/compatjit_x86_testenv.cmd | 8 + tests/x86/legacyjit_x86_testenv.cmd | 52 + tests/x86/ryujit_x86_testenv.cmd | 58 +- tests/x86_jit32_issues.targets | 8 +- tests/x86_legacy_backend_issues.targets | 23 +- tests/xunitwrapper.targets | 2 +- 316 files changed, 76375 insertions(+), 6369 deletions(-) create mode 100644 tests/debugger_tests/ConfigFilesGenerators/ConfigTemplate.txt create mode 100644 tests/debugger_tests/ConfigFilesGenerators/GenerateConfig.cmd create mode 100644 tests/debugger_tests/ConfigFilesGenerators/GenerateConfig.sh create mode 100644 tests/debugger_tests/ScriptGenerator/Program.cs create mode 100644 tests/debugger_tests/ScriptGenerator/project.json create mode 100644 tests/debugger_tests/setup-debuggertests.cmd create mode 100644 tests/debugger_tests/setup-debuggertests.sh delete mode 100644 tests/helix.targets create mode 100644 tests/scripts/arm64_post_build.py create mode 100755 tests/scripts/perf-prep.sh mode change 100644 => 100755 tests/scripts/run-xunit-perf.sh create mode 100644 tests/src/CLRTest.Jit.targets create mode 100644 tests/src/Common/build_against_pkg_dependencies/build_against_pkg_dependencies.csproj create mode 100644 tests/src/Common/build_against_pkg_dependencies/project.json create mode 100644 tests/src/Common/netcoreapp/project.json create mode 100644 tests/src/Common/targeting_pack_ref/project.json create mode 100644 tests/src/Common/targeting_pack_ref/targeting_pack_ref.csproj create mode 100644 tests/src/CoreMangLib/system/span/BasicSpanTest.cs create mode 100644 tests/src/GC/Stress/Tests/dir.targets create mode 100644 tests/src/JIT/CodeGenBringUpTests/Shift.cs create mode 100644 tests/src/JIT/CodeGenBringUpTests/Shift.csproj create mode 100644 tests/src/JIT/Directed/pinvoke/pinvoke-examples.cs create mode 100644 tests/src/JIT/Directed/pinvoke/pinvoke-examples.csproj create mode 100644 tests/src/JIT/Methodical/structs/valuetuple.cs create mode 100644 tests/src/JIT/Methodical/structs/valuetuple.csproj create mode 100644 tests/src/JIT/Performance/CodeQuality/Inlining/InlineGCStruct.cs create mode 100644 tests/src/JIT/Performance/CodeQuality/Inlining/InlineGCStruct.csproj create mode 100644 tests/src/JIT/Performance/CodeQuality/SIMD/SeekUnroll/SeekUnroll.cs create mode 100644 tests/src/JIT/Performance/CodeQuality/SIMD/SeekUnroll/SeekUnroll.csproj create mode 100755 tests/src/JIT/Performance/RunBenchmarks/RunBenchmarks.sh delete mode 100644 tests/src/JIT/Regression/CLR-x86-JIT/V2.0-RTM/b475589/b475589.il delete mode 100644 tests/src/JIT/Regression/CLR-x86-JIT/V2.0-RTM/b475589/b475589.ilproj create mode 100644 tests/src/JIT/Regression/JitBlue/DevDiv_142976/DevDiv_142976.cs create mode 100644 tests/src/JIT/Regression/JitBlue/DevDiv_142976/DevDiv_142976.csproj create mode 100644 tests/src/JIT/Regression/JitBlue/DevDiv_255294/DevDiv_255294.cs create mode 100644 tests/src/JIT/Regression/JitBlue/DevDiv_255294/DevDiv_255294.csproj create mode 100644 tests/src/JIT/Regression/JitBlue/DevDiv_278365/DevDiv_278365.cs create mode 100644 tests/src/JIT/Regression/JitBlue/DevDiv_278365/DevDiv_278365.csproj create mode 100644 tests/src/JIT/Regression/JitBlue/DevDiv_278369/DevDiv_278369.il create mode 100644 tests/src/JIT/Regression/JitBlue/DevDiv_278369/DevDiv_278369.ilproj create mode 100644 tests/src/JIT/Regression/JitBlue/DevDiv_278371/DevDiv_278371.il create mode 100644 tests/src/JIT/Regression/JitBlue/DevDiv_278371/DevDiv_278371.ilproj create mode 100644 tests/src/JIT/Regression/JitBlue/DevDiv_278372/DevDiv_278372.il create mode 100644 tests/src/JIT/Regression/JitBlue/DevDiv_278372/DevDiv_278372.ilproj create mode 100644 tests/src/JIT/Regression/JitBlue/DevDiv_278375/DevDiv_278375.cs create mode 100644 tests/src/JIT/Regression/JitBlue/DevDiv_278375/DevDiv_278375.csproj create mode 100644 tests/src/JIT/Regression/JitBlue/DevDiv_278376/DevDiv_278376.cs create mode 100644 tests/src/JIT/Regression/JitBlue/DevDiv_278376/DevDiv_278376.csproj create mode 100644 tests/src/JIT/Regression/JitBlue/DevDiv_278523/DevDiv_278523.il create mode 100644 tests/src/JIT/Regression/JitBlue/DevDiv_278523/DevDiv_278523.ilproj create mode 100644 tests/src/JIT/Regression/JitBlue/DevDiv_278526/DevDiv_278526.cs create mode 100644 tests/src/JIT/Regression/JitBlue/DevDiv_278526/DevDiv_278526.csproj create mode 100644 tests/src/JIT/Regression/JitBlue/DevDiv_279396/DevDiv_279396.il create mode 100644 tests/src/JIT/Regression/JitBlue/DevDiv_279396/DevDiv_279396.ilproj create mode 100644 tests/src/JIT/Regression/JitBlue/DevDiv_279829/DevDiv_279829.il create mode 100644 tests/src/JIT/Regression/JitBlue/DevDiv_279829/DevDiv_279829.ilproj create mode 100644 tests/src/JIT/Regression/JitBlue/DevDiv_280120/DevDiv_280120.cs create mode 100644 tests/src/JIT/Regression/JitBlue/DevDiv_280120/DevDiv_280120.csproj create mode 100644 tests/src/JIT/Regression/JitBlue/DevDiv_280123/DevDiv_280123.cs create mode 100644 tests/src/JIT/Regression/JitBlue/DevDiv_280123/DevDiv_280123.csproj create mode 100644 tests/src/JIT/Regression/JitBlue/DevDiv_280127/DevDiv_280127.cs create mode 100644 tests/src/JIT/Regression/JitBlue/DevDiv_280127/DevDiv_280127.csproj create mode 100644 tests/src/JIT/Regression/JitBlue/DevDiv_283795/DevDiv_283795.cs create mode 100644 tests/src/JIT/Regression/JitBlue/DevDiv_283795/DevDiv_283795.csproj create mode 100644 tests/src/JIT/Regression/JitBlue/DevDiv_284785/DevDiv_284785.cs create mode 100644 tests/src/JIT/Regression/JitBlue/DevDiv_284785/DevDiv_284785.csproj create mode 100644 tests/src/JIT/Regression/JitBlue/DevDiv_288222/DevDiv_288222.cs create mode 100644 tests/src/JIT/Regression/JitBlue/DevDiv_288222/DevDiv_288222.csproj create mode 100644 tests/src/JIT/Regression/JitBlue/DevDiv_359734/DevDiv_359734.il create mode 100644 tests/src/JIT/Regression/JitBlue/DevDiv_359734/DevDiv_359734.ilproj create mode 100644 tests/src/JIT/Regression/JitBlue/DevDiv_359736/DevDiv_359736.cs create mode 100644 tests/src/JIT/Regression/JitBlue/DevDiv_359736/DevDiv_359736_d.csproj create mode 100644 tests/src/JIT/Regression/JitBlue/DevDiv_359736/DevDiv_359736_do.csproj create mode 100644 tests/src/JIT/Regression/JitBlue/DevDiv_359736/DevDiv_359736_r.csproj create mode 100644 tests/src/JIT/Regression/JitBlue/DevDiv_359736/DevDiv_359736_ro.csproj create mode 100644 tests/src/JIT/Regression/JitBlue/GitHub_7906/GitHub_7906.cs create mode 100644 tests/src/JIT/Regression/JitBlue/GitHub_7906/GitHub_7906.csproj create mode 100644 tests/src/JIT/Regression/JitBlue/GitHub_7907/GitHub_7907.cs create mode 100644 tests/src/JIT/Regression/JitBlue/GitHub_7907/GitHub_7907.csproj create mode 100644 tests/src/JIT/Regression/JitBlue/GitHub_8133/GitHub_8133.il create mode 100644 tests/src/JIT/Regression/JitBlue/GitHub_8133/GitHub_8133.ilproj create mode 100644 tests/src/JIT/Regression/JitBlue/GitHub_8170/GitHub_8170.cs create mode 100644 tests/src/JIT/Regression/JitBlue/GitHub_8170/GitHub_8170.csproj create mode 100644 tests/src/JIT/Regression/JitBlue/GitHub_8220/GitHub_8220.cs create mode 100644 tests/src/JIT/Regression/JitBlue/GitHub_8220/GitHub_8220.csproj create mode 100644 tests/src/JIT/Regression/JitBlue/GitHub_8231/GitHub_8231.cs create mode 100644 tests/src/JIT/Regression/JitBlue/GitHub_8231/GitHub_8231.csproj create mode 100644 tests/src/JIT/Regression/JitBlue/GitHub_8460/GitHub_8460.cs create mode 100644 tests/src/JIT/Regression/JitBlue/GitHub_8460/GitHub_8460.csproj create mode 100644 tests/src/JIT/Regression/JitBlue/GitHub_8599/GitHub_8599.cs create mode 100644 tests/src/JIT/Regression/JitBlue/GitHub_8599/GitHub_8599.csproj create mode 100644 tests/src/JIT/Regression/JitBlue/GitHub_CoreRT_2073/GitHub_CoreRT_2073.il create mode 100644 tests/src/JIT/Regression/JitBlue/GitHub_CoreRT_2073/GitHub_CoreRT_2073.ilproj delete mode 100644 tests/src/Loader/classloader/PrivateInterfaceImpl/Test2_NonFriendPriInterface.csproj delete mode 100644 tests/src/Loader/classloader/generics/Visibility/A_Types.csproj delete mode 100644 tests/src/Loader/classloader/generics/Visibility/B_Types.csproj create mode 100644 tests/src/baseservices/compilerservices/FixedAddressValueType/FixedAddressValueType.cs create mode 100644 tests/src/baseservices/compilerservices/FixedAddressValueType/FixedAddressValueType.csproj create mode 100644 tests/src/baseservices/compilerservices/RuntimeHelpers/ExecuteCodeWithGuaranteedCleanup.cs create mode 100644 tests/src/baseservices/compilerservices/RuntimeHelpers/ExecuteCodeWithGuaranteedCleanup.csproj create mode 100644 tests/src/baseservices/compilerservices/RuntimeWrappedException/RuntimeWrappedException.cs create mode 100644 tests/src/baseservices/compilerservices/RuntimeWrappedException/RuntimeWrappedException.csproj create mode 100644 tests/src/baseservices/compilerservices/RuntimeWrappedException/StringThrower.il create mode 100644 tests/src/baseservices/compilerservices/RuntimeWrappedException/StringThrower.ilproj create mode 100644 tests/src/baseservices/compilerservices/modulector/moduleCctor.il create mode 100644 tests/src/baseservices/compilerservices/modulector/moduleCctor.ilproj create mode 100644 tests/src/baseservices/compilerservices/modulector/runmoduleconstructor.cs create mode 100644 tests/src/baseservices/compilerservices/modulector/runmoduleconstructor.csproj create mode 100644 tests/src/jit/Directed/pinvoke/pinvoke-bug.cs create mode 100644 tests/src/jit/Directed/pinvoke/pinvoke-bug.csproj create mode 100644 tests/src/reflection/ldtoken/byrefs.il create mode 100644 tests/src/reflection/ldtoken/byrefs.ilproj create mode 100644 tests/x86/compatjit_x86_testenv.cmd create mode 100644 tests/x86/legacyjit_x86_testenv.cmd (limited to 'tests') diff --git a/tests/arm64/Tests.lst b/tests/arm64/Tests.lst index 15c0d1718e..5b2792b0c0 100644 --- a/tests/arm64/Tests.lst +++ b/tests/arm64/Tests.lst @@ -2412,7 +2412,7 @@ RelativePath=baseservices\threading\interlocked\compareexchange\CompareExchangeT WorkingDir=baseservices\threading\interlocked\compareexchange\CompareExchangeTClass Expected=0 MaxAllowedDurationSeconds=600 -Categories=NEW;EXPECTED_PASS;UNSTABLE +Categories=NEW;EXPECTED_FAIL;UNSTABLE HostStyle=0 [CompareExchangeTClass_1.cmd_345] RelativePath=baseservices\threading\interlocked\compareexchange\CompareExchangeTClass_1\CompareExchangeTClass_1.cmd @@ -10532,7 +10532,7 @@ RelativePath=CoreMangLib\cti\system\globalization\regioninfo\RegionInfoCurrentRe WorkingDir=CoreMangLib\cti\system\globalization\regioninfo\RegionInfoCurrentRegion Expected=0 MaxAllowedDurationSeconds=600 -Categories=Pri1;RT;EXPECTED_PASS +Categories=Pri1;RT;EXPECTED_FAIL HostStyle=0 [RegionInfoEquals.cmd_1505] RelativePath=CoreMangLib\cti\system\globalization\regioninfo\RegionInfoEquals\RegionInfoEquals.cmd @@ -20990,7 +20990,7 @@ RelativePath=GC\Scenarios\FinalizeTimeout\FinalizeTimeout\FinalizeTimeout.cmd WorkingDir=GC\Scenarios\FinalizeTimeout\FinalizeTimeout Expected=0 MaxAllowedDurationSeconds=600 -Categories=Pri0;EXPECTED_PASS +Categories=Pri0;EXPECTED_FAIL HostStyle=0 [finalnstruct.cmd_3013] RelativePath=GC\Scenarios\FinalNStruct\finalnstruct\finalnstruct.cmd @@ -23930,7 +23930,7 @@ RelativePath=GC\Scenarios\GCSimulator\GCSimulator_81\GCSimulator_81.cmd WorkingDir=GC\Scenarios\GCSimulator\GCSimulator_81 Expected=0 MaxAllowedDurationSeconds=600 -Categories=NEW;EXPECTED_PASS +Categories=NEW;EXPECTED_FAIL HostStyle=0 [GCSimulator_82.cmd_3433] RelativePath=GC\Scenarios\GCSimulator\GCSimulator_82\GCSimulator_82.cmd @@ -42592,7 +42592,7 @@ RelativePath=JIT\Methodical\divrem\div\decimaldiv_cs_do\decimaldiv_cs_do.cmd WorkingDir=JIT\Methodical\divrem\div\decimaldiv_cs_do Expected=0 MaxAllowedDurationSeconds=600 -Categories=Pri0;JIT;EXPECTED_PASS +Categories=Pri0;JIT;EXPECTED_FAIL HostStyle=0 [decimaldiv_cs_r.cmd_6168] RelativePath=JIT\Methodical\divrem\div\decimaldiv_cs_r\decimaldiv_cs_r.cmd @@ -42606,7 +42606,7 @@ RelativePath=JIT\Methodical\divrem\div\decimaldiv_cs_ro\decimaldiv_cs_ro.cmd WorkingDir=JIT\Methodical\divrem\div\decimaldiv_cs_ro Expected=0 MaxAllowedDurationSeconds=600 -Categories=Pri0;JIT;EXPECTED_PASS +Categories=Pri0;JIT;EXPECTED_FAIL HostStyle=0 [i4div_cs_d.cmd_6170] RelativePath=JIT\Methodical\divrem\div\i4div_cs_d\i4div_cs_d.cmd @@ -42620,7 +42620,7 @@ RelativePath=JIT\Methodical\divrem\div\i4div_cs_do\i4div_cs_do.cmd WorkingDir=JIT\Methodical\divrem\div\i4div_cs_do Expected=0 MaxAllowedDurationSeconds=600 -Categories=Pri0;JIT;EXPECTED_PASS +Categories=Pri0;JIT;EXPECTED_FAIL HostStyle=0 [i4div_cs_r.cmd_6172] RelativePath=JIT\Methodical\divrem\div\i4div_cs_r\i4div_cs_r.cmd @@ -42634,7 +42634,7 @@ RelativePath=JIT\Methodical\divrem\div\i4div_cs_ro\i4div_cs_ro.cmd WorkingDir=JIT\Methodical\divrem\div\i4div_cs_ro Expected=0 MaxAllowedDurationSeconds=600 -Categories=Pri0;JIT;EXPECTED_PASS +Categories=Pri0;JIT;EXPECTED_FAIL HostStyle=0 [i8div_cs_d.cmd_6174] RelativePath=JIT\Methodical\divrem\div\i8div_cs_d\i8div_cs_d.cmd @@ -42648,7 +42648,7 @@ RelativePath=JIT\Methodical\divrem\div\i8div_cs_do\i8div_cs_do.cmd WorkingDir=JIT\Methodical\divrem\div\i8div_cs_do Expected=0 MaxAllowedDurationSeconds=600 -Categories=Pri0;JIT;EXPECTED_PASS +Categories=Pri0;JIT;EXPECTED_FAIL HostStyle=0 [i8div_cs_r.cmd_6176] RelativePath=JIT\Methodical\divrem\div\i8div_cs_r\i8div_cs_r.cmd @@ -42662,7 +42662,7 @@ RelativePath=JIT\Methodical\divrem\div\i8div_cs_ro\i8div_cs_ro.cmd WorkingDir=JIT\Methodical\divrem\div\i8div_cs_ro Expected=0 MaxAllowedDurationSeconds=600 -Categories=Pri0;JIT;EXPECTED_PASS +Categories=Pri0;JIT;EXPECTED_FAIL HostStyle=0 [negSignedMod.cmd_6178] RelativePath=JIT\Methodical\divrem\div\negSignedMod\negSignedMod.cmd @@ -42683,7 +42683,7 @@ RelativePath=JIT\Methodical\divrem\div\overlddiv_cs_do\overlddiv_cs_do.cmd WorkingDir=JIT\Methodical\divrem\div\overlddiv_cs_do Expected=0 MaxAllowedDurationSeconds=600 -Categories=Pri0;JIT;EXPECTED_PASS +Categories=Pri0;JIT;EXPECTED_FAIL HostStyle=0 [overlddiv_cs_r.cmd_6181] RelativePath=JIT\Methodical\divrem\div\overlddiv_cs_r\overlddiv_cs_r.cmd @@ -42697,7 +42697,7 @@ RelativePath=JIT\Methodical\divrem\div\overlddiv_cs_ro\overlddiv_cs_ro.cmd WorkingDir=JIT\Methodical\divrem\div\overlddiv_cs_ro Expected=0 MaxAllowedDurationSeconds=600 -Categories=Pri0;JIT;EXPECTED_PASS +Categories=Pri0;JIT;EXPECTED_FAIL HostStyle=0 [r4div_cs_d.cmd_6183] RelativePath=JIT\Methodical\divrem\div\r4div_cs_d\r4div_cs_d.cmd @@ -42711,7 +42711,7 @@ RelativePath=JIT\Methodical\divrem\div\r4div_cs_do\r4div_cs_do.cmd WorkingDir=JIT\Methodical\divrem\div\r4div_cs_do Expected=0 MaxAllowedDurationSeconds=600 -Categories=Pri0;JIT;EXPECTED_PASS +Categories=Pri0;JIT;EXPECTED_FAIL HostStyle=0 [r4div_cs_r.cmd_6185] RelativePath=JIT\Methodical\divrem\div\r4div_cs_r\r4div_cs_r.cmd @@ -42725,7 +42725,7 @@ RelativePath=JIT\Methodical\divrem\div\r4div_cs_ro\r4div_cs_ro.cmd WorkingDir=JIT\Methodical\divrem\div\r4div_cs_ro Expected=0 MaxAllowedDurationSeconds=600 -Categories=Pri0;JIT;EXPECTED_PASS +Categories=Pri0;JIT;EXPECTED_FAIL HostStyle=0 [r8div_cs_d.cmd_6187] RelativePath=JIT\Methodical\divrem\div\r8div_cs_d\r8div_cs_d.cmd @@ -42739,7 +42739,7 @@ RelativePath=JIT\Methodical\divrem\div\r8div_cs_do\r8div_cs_do.cmd WorkingDir=JIT\Methodical\divrem\div\r8div_cs_do Expected=0 MaxAllowedDurationSeconds=600 -Categories=Pri0;JIT;EXPECTED_PASS +Categories=Pri0;JIT;EXPECTED_FAIL HostStyle=0 [r8div_cs_r.cmd_6189] RelativePath=JIT\Methodical\divrem\div\r8div_cs_r\r8div_cs_r.cmd @@ -42753,7 +42753,7 @@ RelativePath=JIT\Methodical\divrem\div\r8div_cs_ro\r8div_cs_ro.cmd WorkingDir=JIT\Methodical\divrem\div\r8div_cs_ro Expected=0 MaxAllowedDurationSeconds=600 -Categories=Pri0;JIT;EXPECTED_PASS +Categories=Pri0;JIT;EXPECTED_FAIL HostStyle=0 [u4div_cs_d.cmd_6191] RelativePath=JIT\Methodical\divrem\div\u4div_cs_d\u4div_cs_d.cmd @@ -42767,7 +42767,7 @@ RelativePath=JIT\Methodical\divrem\div\u4div_cs_do\u4div_cs_do.cmd WorkingDir=JIT\Methodical\divrem\div\u4div_cs_do Expected=0 MaxAllowedDurationSeconds=600 -Categories=Pri0;JIT;EXPECTED_PASS +Categories=Pri0;JIT;EXPECTED_FAIL HostStyle=0 [u4div_cs_r.cmd_6193] RelativePath=JIT\Methodical\divrem\div\u4div_cs_r\u4div_cs_r.cmd @@ -42781,7 +42781,7 @@ RelativePath=JIT\Methodical\divrem\div\u4div_cs_ro\u4div_cs_ro.cmd WorkingDir=JIT\Methodical\divrem\div\u4div_cs_ro Expected=0 MaxAllowedDurationSeconds=600 -Categories=Pri0;JIT;EXPECTED_PASS +Categories=Pri0;JIT;EXPECTED_FAIL HostStyle=0 [u8div_cs_d.cmd_6195] RelativePath=JIT\Methodical\divrem\div\u8div_cs_d\u8div_cs_d.cmd @@ -42795,7 +42795,7 @@ RelativePath=JIT\Methodical\divrem\div\u8div_cs_do\u8div_cs_do.cmd WorkingDir=JIT\Methodical\divrem\div\u8div_cs_do Expected=0 MaxAllowedDurationSeconds=600 -Categories=Pri0;JIT;EXPECTED_PASS +Categories=Pri0;JIT;EXPECTED_FAIL HostStyle=0 [u8div_cs_r.cmd_6197] RelativePath=JIT\Methodical\divrem\div\u8div_cs_r\u8div_cs_r.cmd @@ -42809,7 +42809,7 @@ RelativePath=JIT\Methodical\divrem\div\u8div_cs_ro\u8div_cs_ro.cmd WorkingDir=JIT\Methodical\divrem\div\u8div_cs_ro Expected=0 MaxAllowedDurationSeconds=600 -Categories=Pri0;JIT;EXPECTED_PASS +Categories=Pri0;JIT;EXPECTED_FAIL HostStyle=0 [decimalrem_cs_d.cmd_6199] RelativePath=JIT\Methodical\divrem\rem\decimalrem_cs_d\decimalrem_cs_d.cmd @@ -42823,7 +42823,7 @@ RelativePath=JIT\Methodical\divrem\rem\decimalrem_cs_do\decimalrem_cs_do.cmd WorkingDir=JIT\Methodical\divrem\rem\decimalrem_cs_do Expected=0 MaxAllowedDurationSeconds=600 -Categories=Pri0;JIT;EXPECTED_PASS +Categories=Pri0;JIT;EXPECTED_FAIL HostStyle=0 [decimalrem_cs_r.cmd_6201] RelativePath=JIT\Methodical\divrem\rem\decimalrem_cs_r\decimalrem_cs_r.cmd @@ -42837,7 +42837,7 @@ RelativePath=JIT\Methodical\divrem\rem\decimalrem_cs_ro\decimalrem_cs_ro.cmd WorkingDir=JIT\Methodical\divrem\rem\decimalrem_cs_ro Expected=0 MaxAllowedDurationSeconds=600 -Categories=Pri0;JIT;EXPECTED_PASS +Categories=Pri0;JIT;EXPECTED_FAIL HostStyle=0 [i4rem_cs_d.cmd_6203] RelativePath=JIT\Methodical\divrem\rem\i4rem_cs_d\i4rem_cs_d.cmd @@ -42851,7 +42851,7 @@ RelativePath=JIT\Methodical\divrem\rem\i4rem_cs_do\i4rem_cs_do.cmd WorkingDir=JIT\Methodical\divrem\rem\i4rem_cs_do Expected=0 MaxAllowedDurationSeconds=600 -Categories=Pri0;JIT;EXPECTED_PASS +Categories=Pri0;JIT;EXPECTED_FAIL HostStyle=0 [i4rem_cs_r.cmd_6205] RelativePath=JIT\Methodical\divrem\rem\i4rem_cs_r\i4rem_cs_r.cmd @@ -42865,7 +42865,7 @@ RelativePath=JIT\Methodical\divrem\rem\i4rem_cs_ro\i4rem_cs_ro.cmd WorkingDir=JIT\Methodical\divrem\rem\i4rem_cs_ro Expected=0 MaxAllowedDurationSeconds=600 -Categories=Pri0;JIT;EXPECTED_PASS +Categories=Pri0;JIT;EXPECTED_FAIL HostStyle=0 [i8rem_cs_d.cmd_6207] RelativePath=JIT\Methodical\divrem\rem\i8rem_cs_d\i8rem_cs_d.cmd @@ -42879,7 +42879,7 @@ RelativePath=JIT\Methodical\divrem\rem\i8rem_cs_do\i8rem_cs_do.cmd WorkingDir=JIT\Methodical\divrem\rem\i8rem_cs_do Expected=0 MaxAllowedDurationSeconds=600 -Categories=Pri0;JIT;EXPECTED_PASS +Categories=Pri0;JIT;EXPECTED_FAIL HostStyle=0 [i8rem_cs_r.cmd_6209] RelativePath=JIT\Methodical\divrem\rem\i8rem_cs_r\i8rem_cs_r.cmd @@ -42893,7 +42893,7 @@ RelativePath=JIT\Methodical\divrem\rem\i8rem_cs_ro\i8rem_cs_ro.cmd WorkingDir=JIT\Methodical\divrem\rem\i8rem_cs_ro Expected=0 MaxAllowedDurationSeconds=600 -Categories=Pri0;JIT;EXPECTED_PASS +Categories=Pri0;JIT;EXPECTED_FAIL HostStyle=0 [overldrem_cs_d.cmd_6211] RelativePath=JIT\Methodical\divrem\rem\overldrem_cs_d\overldrem_cs_d.cmd @@ -42907,7 +42907,7 @@ RelativePath=JIT\Methodical\divrem\rem\overldrem_cs_do\overldrem_cs_do.cmd WorkingDir=JIT\Methodical\divrem\rem\overldrem_cs_do Expected=0 MaxAllowedDurationSeconds=600 -Categories=Pri0;JIT;EXPECTED_PASS +Categories=Pri0;JIT;EXPECTED_FAIL HostStyle=0 [overldrem_cs_r.cmd_6213] RelativePath=JIT\Methodical\divrem\rem\overldrem_cs_r\overldrem_cs_r.cmd @@ -42921,7 +42921,7 @@ RelativePath=JIT\Methodical\divrem\rem\overldrem_cs_ro\overldrem_cs_ro.cmd WorkingDir=JIT\Methodical\divrem\rem\overldrem_cs_ro Expected=0 MaxAllowedDurationSeconds=600 -Categories=Pri0;JIT;EXPECTED_PASS +Categories=Pri0;JIT;EXPECTED_FAIL HostStyle=0 [r4rem_cs_d.cmd_6215] RelativePath=JIT\Methodical\divrem\rem\r4rem_cs_d\r4rem_cs_d.cmd @@ -42935,7 +42935,7 @@ RelativePath=JIT\Methodical\divrem\rem\r4rem_cs_do\r4rem_cs_do.cmd WorkingDir=JIT\Methodical\divrem\rem\r4rem_cs_do Expected=0 MaxAllowedDurationSeconds=600 -Categories=Pri0;JIT;EXPECTED_PASS +Categories=Pri0;JIT;EXPECTED_FAIL HostStyle=0 [r4rem_cs_r.cmd_6217] RelativePath=JIT\Methodical\divrem\rem\r4rem_cs_r\r4rem_cs_r.cmd @@ -42949,7 +42949,7 @@ RelativePath=JIT\Methodical\divrem\rem\r4rem_cs_ro\r4rem_cs_ro.cmd WorkingDir=JIT\Methodical\divrem\rem\r4rem_cs_ro Expected=0 MaxAllowedDurationSeconds=600 -Categories=Pri0;JIT;EXPECTED_PASS +Categories=Pri0;JIT;EXPECTED_FAIL HostStyle=0 [r8rem_cs_d.cmd_6219] RelativePath=JIT\Methodical\divrem\rem\r8rem_cs_d\r8rem_cs_d.cmd @@ -42963,7 +42963,7 @@ RelativePath=JIT\Methodical\divrem\rem\r8rem_cs_do\r8rem_cs_do.cmd WorkingDir=JIT\Methodical\divrem\rem\r8rem_cs_do Expected=0 MaxAllowedDurationSeconds=600 -Categories=Pri0;JIT;EXPECTED_PASS +Categories=Pri0;JIT;EXPECTED_FAIL HostStyle=0 [r8rem_cs_r.cmd_6221] RelativePath=JIT\Methodical\divrem\rem\r8rem_cs_r\r8rem_cs_r.cmd @@ -42977,7 +42977,7 @@ RelativePath=JIT\Methodical\divrem\rem\r8rem_cs_ro\r8rem_cs_ro.cmd WorkingDir=JIT\Methodical\divrem\rem\r8rem_cs_ro Expected=0 MaxAllowedDurationSeconds=600 -Categories=Pri0;JIT;EXPECTED_PASS +Categories=Pri0;JIT;EXPECTED_FAIL HostStyle=0 [u4rem_cs_d.cmd_6223] RelativePath=JIT\Methodical\divrem\rem\u4rem_cs_d\u4rem_cs_d.cmd @@ -42991,7 +42991,7 @@ RelativePath=JIT\Methodical\divrem\rem\u4rem_cs_do\u4rem_cs_do.cmd WorkingDir=JIT\Methodical\divrem\rem\u4rem_cs_do Expected=0 MaxAllowedDurationSeconds=600 -Categories=Pri0;JIT;EXPECTED_PASS +Categories=Pri0;JIT;EXPECTED_FAIL HostStyle=0 [u4rem_cs_r.cmd_6225] RelativePath=JIT\Methodical\divrem\rem\u4rem_cs_r\u4rem_cs_r.cmd @@ -43005,7 +43005,7 @@ RelativePath=JIT\Methodical\divrem\rem\u4rem_cs_ro\u4rem_cs_ro.cmd WorkingDir=JIT\Methodical\divrem\rem\u4rem_cs_ro Expected=0 MaxAllowedDurationSeconds=600 -Categories=Pri0;JIT;EXPECTED_PASS +Categories=Pri0;JIT;EXPECTED_FAIL HostStyle=0 [u8rem_cs_d.cmd_6227] RelativePath=JIT\Methodical\divrem\rem\u8rem_cs_d\u8rem_cs_d.cmd @@ -43019,7 +43019,7 @@ RelativePath=JIT\Methodical\divrem\rem\u8rem_cs_do\u8rem_cs_do.cmd WorkingDir=JIT\Methodical\divrem\rem\u8rem_cs_do Expected=0 MaxAllowedDurationSeconds=600 -Categories=Pri0;JIT;EXPECTED_PASS +Categories=Pri0;JIT;EXPECTED_FAIL HostStyle=0 [u8rem_cs_r.cmd_6229] RelativePath=JIT\Methodical\divrem\rem\u8rem_cs_r\u8rem_cs_r.cmd @@ -43033,7 +43033,7 @@ RelativePath=JIT\Methodical\divrem\rem\u8rem_cs_ro\u8rem_cs_ro.cmd WorkingDir=JIT\Methodical\divrem\rem\u8rem_cs_ro Expected=0 MaxAllowedDurationSeconds=600 -Categories=Pri0;JIT;EXPECTED_PASS +Categories=Pri0;JIT;EXPECTED_FAIL HostStyle=0 [dblarray1_cs_d.cmd_6231] RelativePath=JIT\Methodical\doublearray\dblarray1_cs_d\dblarray1_cs_d.cmd @@ -47086,14 +47086,14 @@ RelativePath=JIT\Methodical\explicit\coverage\seq_byte_1_d\seq_byte_1_d.cmd WorkingDir=JIT\Methodical\explicit\coverage\seq_byte_1_d Expected=0 MaxAllowedDurationSeconds=600 -Categories=Pri0;EXPECTED_PASS +Categories=Pri0;EXPECTED_FAIL HostStyle=0 [seq_byte_1_r.cmd_6812] RelativePath=JIT\Methodical\explicit\coverage\seq_byte_1_r\seq_byte_1_r.cmd WorkingDir=JIT\Methodical\explicit\coverage\seq_byte_1_r Expected=0 MaxAllowedDurationSeconds=600 -Categories=Pri0;EXPECTED_PASS +Categories=Pri0;EXPECTED_FAIL HostStyle=0 [seq_double_1_d.cmd_6813] RelativePath=JIT\Methodical\explicit\coverage\seq_double_1_d\seq_double_1_d.cmd @@ -48059,7 +48059,7 @@ RelativePath=JIT\Methodical\fp\exgen\1000w1d_cs_do\1000w1d_cs_do.cmd WorkingDir=JIT\Methodical\fp\exgen\1000w1d_cs_do Expected=0 MaxAllowedDurationSeconds=600 -Categories=Pri0;EXPECTED_PASS +Categories=Pri0;EXPECTED_FAIL HostStyle=0 [1000w1d_cs_r.cmd_6951] RelativePath=JIT\Methodical\fp\exgen\1000w1d_cs_r\1000w1d_cs_r.cmd @@ -48073,7 +48073,7 @@ RelativePath=JIT\Methodical\fp\exgen\1000w1d_cs_ro\1000w1d_cs_ro.cmd WorkingDir=JIT\Methodical\fp\exgen\1000w1d_cs_ro Expected=0 MaxAllowedDurationSeconds=600 -Categories=Pri0;EXPECTED_PASS +Categories=Pri0;EXPECTED_FAIL HostStyle=0 [10w250d_cs_d.cmd_6953] RelativePath=JIT\Methodical\fp\exgen\10w250d_cs_d\10w250d_cs_d.cmd @@ -52560,7 +52560,7 @@ RelativePath=JIT\Methodical\tailcall\Desktop\_il_relthread-race\_il_relthread-ra WorkingDir=JIT\Methodical\tailcall\Desktop\_il_relthread-race Expected=0 MaxAllowedDurationSeconds=600 -Categories=Pri0;EXPECTED_PASS +Categories=Pri0;EXPECTED_FAIL HostStyle=0 [_il_dbgcompat_enum.cmd_7596] RelativePath=JIT\Methodical\tailcall\_il_dbgcompat_enum\_il_dbgcompat_enum.cmd @@ -64754,7 +64754,7 @@ RelativePath=Loader\classloader\generics\GenericMethods\VSW491668\VSW491668.cmd WorkingDir=Loader\classloader\generics\GenericMethods\VSW491668 Expected=0 MaxAllowedDurationSeconds=600 -Categories=NEW;EXPECTED_PASS +Categories=NEW;EXPECTED_FAIL HostStyle=0 [abstract01.cmd_9373] RelativePath=Loader\classloader\generics\Instantiation\Negative\abstract01\abstract01.cmd diff --git a/tests/build.proj b/tests/build.proj index 0dfd84d47b..63db903219 100644 --- a/tests/build.proj +++ b/tests/build.proj @@ -38,6 +38,7 @@ + diff --git a/tests/debugger_tests/ConfigFilesGenerators/ConfigTemplate.txt b/tests/debugger_tests/ConfigFilesGenerators/ConfigTemplate.txt new file mode 100644 index 0000000000..d674a72698 --- /dev/null +++ b/tests/debugger_tests/ConfigFilesGenerators/ConfigTemplate.txt @@ -0,0 +1,32 @@ + + ..\.. + x64 + $(TestRoot)\Scripts + $(TestRoot)\Debuggees + $(DebuggeeRootDir)\Source + ##Insert_Runtime_Root## + ##Insert_Nuget_Cache_Root## + ProjectK + $(RuntimeRoot)\corerun.exe + $(RuntimeRoot)\dbgshim.dll + $(RuntimeRoot) + cli + 1.0.0-preview1-002702 + $(DebuggeeRootDir)\native + $(DebuggeeRootDir)\dotnet.$(CliVersion) + 1.0.0-rc2-23811 + 4.0.0-rc2-24027 + 4.0.1-rc2-23811 + ##Cli_Path## + $(NugetCacheRoot) + + myget.org dotnet-core=https://dotnet.myget.org/F/dotnet-core/api/v3/index.json; + myget.org=https://www.nuget.org/api/v2/ + + $(RuntimeRoot)\sos.dll + $(TestRoot)\mdbg + $(WorkingDir)\dumps\$(TestProduct) + $(DebuggeeDumpOutputRootDir) + $(TestRoot)\logs_$(Timestamp) + $(TestRoot)\Debuggers\cdb\cdb.exe + diff --git a/tests/debugger_tests/ConfigFilesGenerators/GenerateConfig.cmd b/tests/debugger_tests/ConfigFilesGenerators/GenerateConfig.cmd new file mode 100644 index 0000000000..635df958c6 --- /dev/null +++ b/tests/debugger_tests/ConfigFilesGenerators/GenerateConfig.cmd @@ -0,0 +1,53 @@ +@echo off +setlocal EnableDelayedExpansion + +:: Set the default arguments for script generation. +set __RuntimeRoot=`$(TestRoot)\Runtimes\Coreclr1 +set __NugetCacheDir=`$(WorkingDir)\packages +set __CliPath= +set __ConfigFileName=Debugger.Tests.Config.txt +set __TemplateFileName=%~dp0\ConfigTemplate.txt + +:Arg_Loop +if "%1" == "" goto ArgsDone +if /i "%1" == "/?" goto Usage + +if /i "%1" == "rt" (set "__RuntimeRoot=%2"&shift&shift&goto Arg_Loop) +if /i "%1" == "nc" (set "__NugetCacheDir=%2"&shift&shift&goto Arg_Loop) +if /i "%1" == "cli" (set "__CliPath=%2"&shift&shift&goto Arg_Loop) + +echo Invalid commandline argument: %1 +goto Usage + +:ArgsDone + +if not exist %__TemplateFileName% ( + echo Template file %__TemplateFileName% doesn't exist. + exit /b 1 +) + +:: Delete previous config file. +if exist %__ConfigFileName% ( + echo Deleting current config file. + del %__ConfigFileName% +) + +:: powershell "Get-Content %__TemplateFileName% -replace (""##Insert_Runtime_Root##"", ""%__RuntimeRoot%"") | Output-File %__ConfigFileName% " +powershell "(Get-Content \"%__TemplateFileName%\")`"^ + "-replace \"##Insert_Runtime_Root##\", \"%__RuntimeRoot%\" `"^ + "|ForEach-Object{$_ -replace \"##Insert_Nuget_Cache_Root##\", \"%__NugetCacheDir%\"} `"^ + "|ForEach-Object{$_ -replace \"##Cli_Path##\", \"%__CliPath%\"} `"^ + "| Out-File \"%__ConfigFileName%\"" + +exit /b 0 + +:Usage +echo. +echo Usage: +echo %0 [rt ^] [nc ^] [cli ^] where: +echo. +echo ^: path to the runtime that you want to use for testing. +echo ^: path to the nuget cache. +echo ^: path to the cli tool. +exit /b 1 +endlocal diff --git a/tests/debugger_tests/ConfigFilesGenerators/GenerateConfig.sh b/tests/debugger_tests/ConfigFilesGenerators/GenerateConfig.sh new file mode 100644 index 0000000000..38834ed6a5 --- /dev/null +++ b/tests/debugger_tests/ConfigFilesGenerators/GenerateConfig.sh @@ -0,0 +1,65 @@ +#!/bin/bash + +function print_usage { + echo '' + echo 'Usage:' + echo '[rt=] [nc=] [cli=] where:' + echo ' : path to the runtime that you want to use for testing.' + echo ' : path to the nuget cache.' + echo ' : path to the cli tool.' + echo '' + echo '' +} + +# Argument variables +__RuntimeRoot='$(TestRoot)\Runtimes\Coreclr1' +__NugetCacheDir='$(WorkingDir)\packages' +__CliPath= +__ConfigFileName='Debugger.Tests.Config.txt' +__TemplateFileName='ConfigTemplate.txt' + +for i in "$@" +do + case $i in + -h|--help) + print_usage + exit $EXIT_CODE_SUCCESS + ;; + rt=*) + __RuntimeRoot=${i#*=} + ;; + nc=*) + __NugetCacheDir=${i#*=} + ;; + cli=*) + __CliPath=${i#*=} + ;; + *) + echo "Unknown switch: $i" + print_usage + exit $EXIT_CODE_SUCCESS + ;; + esac +done + +if ! -e "$__TemplateFileName" +then + echo '$__TemplateFileName does not exist' + exit 1 +fi + +if -e "$__ConfigFileName" +then + rm "$__ConfigFileName" +fi + +cp "$__TemplateFileName" "$__ConfigFileName" + +sed -i \ + 's/##Insert_Runtime_Root##/$__RuntimeRoot/g;' \ + 's/##Insert_Nuget_Cache_Root##/$__NugetCacheDir/g'\ + 's/##Cli_Path##/$__CliPath/g'\ + 's/corerun.exe/corerun/g'\ + "$__ConfigFileName" + +exit 0 \ No newline at end of file diff --git a/tests/debugger_tests/ScriptGenerator/Program.cs b/tests/debugger_tests/ScriptGenerator/Program.cs new file mode 100644 index 0000000000..1e9586d63e Binary files /dev/null and b/tests/debugger_tests/ScriptGenerator/Program.cs differ diff --git a/tests/debugger_tests/ScriptGenerator/project.json b/tests/debugger_tests/ScriptGenerator/project.json new file mode 100644 index 0000000000..25c7a269c6 Binary files /dev/null and b/tests/debugger_tests/ScriptGenerator/project.json differ diff --git a/tests/debugger_tests/setup-debuggertests.cmd b/tests/debugger_tests/setup-debuggertests.cmd new file mode 100644 index 0000000000..6507f0e8a2 --- /dev/null +++ b/tests/debugger_tests/setup-debuggertests.cmd @@ -0,0 +1,119 @@ +@if not defined __echo @echo off +setlocal + +set __ThisScriptShort=%0 +set __ThisScriptFull=%~f0 +set __ThisScriptPath=%~dp0 + +REM ========================================================================================= +REM === +REM === Parse arguments +REM === +REM ========================================================================================= + +set __OutputDir= +set __Arch= +set __CoreclrBinPath= +set __NugetCacheDir= +set __CliPath= + +:Arg_Loop +if "%1" == "" goto ArgsDone + +if /i "%1" == "/?" goto Usage +if /i "%1" == "-?" goto Usage +if /i "%1" == "/h" goto Usage +if /i "%1" == "-h" goto Usage +if /i "%1" == "/help" goto Usage +if /i "%1" == "-help" goto Usage + +if /i "%1" == "/outputDir" (set __OutputDir=%2&shift&shift&goto Arg_Loop) +if /i "%1" == "/coreclrBinDir" (set __CoreclrBinPath=%2&shift&shift&goto Arg_Loop) +if /i "%1" == "/nugetCacheDir" (set __NugetCacheDir=%2&shift&shift&goto Arg_Loop) +if /i "%1" == "/cliPath" (set __CliPath=%2&shift&shift&goto Arg_Loop) + + +echo Invalid command-line argument: %1 +goto Usage + +:ArgsDone + +if not defined __OutputDir goto Usage +if not defined __Arch goto Usage + +REM Create directories needed +if exist "%__OutputDir%\debuggertests" rmdir /S /Q "%__OutputDir%\debuggertests" +md "%__OutputDir%\debuggertests" +set __InstallDir=%__OutputDir%\debuggertests + +REM ========================================================================================= +REM === +REM === download debuggertests package +REM === +REM ========================================================================================= +set DEBUGGERTESTS_URL=https://dotnetbuilddrops.blob.core.windows.net/debugger-container/Windows.DebuggerTests.zip +set LOCAL_ZIP_PATH=%__InstallDir%\debuggertests.zip +if exist "%LOCAL_ZIP_PATH%" del "%LOCAL_ZIP_PATH%" +set DEBUGGERTESTS_INSTALL_LOG="%__ThisScriptPath%debuggerinstall.log" +REM Download the package +echo Download and unzip debuggertests package to %LOCAL_ZIP_PATH% +powershell -NoProfile -ExecutionPolicy unrestricted -Command "$retryCount = 0; $success = $false; do { try { (New-Object Net.WebClient).DownloadFile('%DEBUGGERTESTS_URL%', '%LOCAL_ZIP_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('%LOCAL_ZIP_PATH%', '%__InstallDir%') } else { (New-Object -com shell.application).namespace('%LOCAL_ZIP_PATH%').CopyHere((new-object -com shell.application).namespace('%__InstallDir%').Items(),16) }" >> %DEBUGGERTESTS_INSTALL_LOG% + +if errorlevel 1 ( + echo Failed to install debuggertests to %__InstallDir% + goto Fail +) + +REM ========================================================================================= +REM === +REM === Setting up the right config file. +REM === +REM ========================================================================================= +echo Generating config file. + +call %__ThisScriptPath%\ConfigFilesGenerators\GenerateConfig.cmd rt %__CoreclrBinPath% nc %__NugetCacheDir% cli %__CliPath% +move Debugger.Tests.Config.txt %__InstallDir%\\Debugger.Tests\dotnet\Debugger.Tests.Config.txt + +REM ========================================================================================= +REM === +REM === Scripts generation. +REM === +REM ========================================================================================= +mkdir %__InstallDir%\ScriptGenerator +copy %__ThisScriptPath%\ScriptGenerator\* %__InstallDir%\ScriptGenerator\ +pushd %__InstallDir%\ScriptGenerator +%__CliPath%\dotnet restore +%__CliPath%\dotnet build +popd + +%__CliPath%\dotnet run --project %__InstallDir%\ScriptGenerator %__InstallDir% %__CoreclrBinPath% %__InstallDir%\Dotnet.Tests\dotnet + +REM Deleting runtests.cmd to avoid double test-running. +del %__InstallDir%\runtests.cmd + +if errorlevel 1 ( + echo Failed to build and run script generation. + goto Fail +) + + + +exit /b 0 + +:Fail +exit /b 1 + +REM ========================================================================================= +REM === +REM === Helper routines +REM === +REM ========================================================================================= + +:Usage +echo. +echo install debugger tests +echo. +echo Usage: +echo %__ThisScriptShort% /coreclrBinDir ^ /outputDir ^ /nugetCacheDir ^ +echo. +exit /b 1 diff --git a/tests/debugger_tests/setup-debuggertests.sh b/tests/debugger_tests/setup-debuggertests.sh new file mode 100644 index 0000000000..315359c373 Binary files /dev/null and b/tests/debugger_tests/setup-debuggertests.sh differ diff --git a/tests/dir.props b/tests/dir.props index 9d93e93b7d..43026caed2 100644 --- a/tests/dir.props +++ b/tests/dir.props @@ -54,7 +54,8 @@ - + + diff --git a/tests/helix.targets b/tests/helix.targets deleted file mode 100644 index 16acf01ca4..0000000000 --- a/tests/helix.targets +++ /dev/null @@ -1,78 +0,0 @@ - - - - - $(PackagesDir)test.Microsoft.NETCore.Runtime.CoreClr\1.1.1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <_TestCopyLocalByFileNameWithoutDuplicates Remove="@(ToRemove)" /> - - <_TestCopyLocalByFileNameWithoutDuplicates Include="@(ToReplace)"> - test.Microsoft.NETCore.Runtime.CoreClr - %(ToReplace.Identity) - - - <_TestCopyLocalByFileNameWithoutDuplicates Include="@(XunitConsoleExe)"> - xunit.runner.console - %(XunitConsoleExe.Identity) - - - - - diff --git a/tests/issues.targets b/tests/issues.targets index ee45e589de..d1f3dc22b8 100644 --- a/tests/issues.targets +++ b/tests/issues.targets @@ -40,6 +40,9 @@ 3392 + + 6553 + 2414 @@ -181,75 +184,37 @@ 6707 + + 8418 + - + - 3392 + 3392, test is useful to have because it can be run manually when making changes to the GC that can have effects in OOM scenarios, but not appropriate to run on our current test infrastructure. - 3392 + 3392, test is useful to have because it can be run manually when making changes to the GC that can have effects in OOM scenarios, but not appropriate to run on our current test infrastructure. - 3392 + 3392, test is useful to have because it can be run manually when making changes to the GC that can have effects in OOM scenarios, but not appropriate to run on our current test infrastructure. - 3392 - - - needs triage - - - needs triage - - - needs triage - - - needs triage + 3392, test is useful to have because it can be run manually when making changes to the GC that can have effects in OOM scenarios, but not appropriate to run on our current test infrastructure. tail. call pop ret is only supported on amd64 - - needs triage - - - needs triage - - - needs triage - - x86 JIT doesn't support implicit tail call optimization or tail. call pop ret sequence - - - 6844 + 2420. x86 JIT doesn't support implicit tail call optimization or tail. call pop ret sequence - needs triage - - - needs triage - - - - - - - - 6778 - - - 6778 - - - 6553 + 7163, fails on both legacy backend and RyuJIT - - 7008 + + The test is too large for x86 and causes OutOfMemory exception. diff --git a/tests/override.targets b/tests/override.targets index 8bdff51b63..36a9615e73 100644 --- a/tests/override.targets +++ b/tests/override.targets @@ -3,8 +3,6 @@ Overrides for all other targets (including build tools) can go in this file. --> - - diff --git a/tests/publishdependency.targets b/tests/publishdependency.targets index 554b1eee78..9e286fc3ba 100644 --- a/tests/publishdependency.targets +++ b/tests/publishdependency.targets @@ -3,18 +3,50 @@ - - netcoreapp1.0 + + netcoreapp1.1 + + + $(__BuildArch) + x64 + win7 + win8 + win10 + + + + + + + + + + + + + + + + + + + + - - + + + $(ProjectDir)\..\bin\Product\$(BuildOS).$(BuildArch).$(BuildType) + $(ProductDestination)\ref + $(CORE_ROOT)\..\coreoverlay + + @@ -23,12 +55,12 @@ - @@ -58,4 +90,147 @@ + + + + + + + + + + + + + + + + + + + + + %(Identity) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/runtest.cmd b/tests/runtest.cmd index 5620789575..23b4bb5f42 100644 --- a/tests/runtest.cmd +++ b/tests/runtest.cmd @@ -1,10 +1,11 @@ -@if not defined __echo @echo off +@if not defined _echo @echo off setlocal EnableDelayedExpansion :: Set the default arguments set __BuildArch=x64 set __BuildType=Debug set __BuildOS=Windows_NT +set __MSBuildBuildArch=x64 :: Default to highest Visual Studio version available set __VSVersion=vs2015 @@ -30,6 +31,8 @@ set __Sequential= set __msbuildExtraArgs= set __LongGCTests= set __GCSimulatorTests= +set __AgainstPackages= +set __JitDisasm= :Arg_Loop if "%1" == "" goto ArgsDone @@ -43,6 +46,7 @@ if /i "%1" == "-help" goto Usage if /i "%1" == "x64" (set __BuildArch=x64&set __MSBuildBuildArch=x64&shift&goto Arg_Loop) if /i "%1" == "x86" (set __BuildArch=x86&set __MSBuildBuildArch=x86&shift&goto Arg_Loop) +if /i "%1" == "arm" (set __BuildArch=arm&set __MSBuildBuildArch=arm&shift&goto Arg_Loop) if /i "%1" == "debug" (set __BuildType=Debug&shift&goto Arg_Loop) if /i "%1" == "release" (set __BuildType=Release&shift&goto Arg_Loop) @@ -55,6 +59,7 @@ if /i "%1" == "SkipWrapperGeneration" (set __SkipWrapperGeneration=true&shift&go 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) if /i "%1" == "crossgen" (set __DoCrossgen=1&shift&goto Arg_Loop) if /i "%1" == "longgc" (set __LongGCTests=1&shift&goto Arg_Loop) @@ -63,11 +68,12 @@ if /i "%1" == "jitstress" (set COMPlus_JitStress=%2&shift&shift&goto if /i "%1" == "jitstressregs" (set COMPlus_JitStressRegs=%2&shift&shift&goto Arg_Loop) 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" == "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) +if /i "%1" == "gcstresslevel" (set __GCSTRESSLEVEL=%2&set __TestTimeout=1800000&shift&shift&goto Arg_Loop) if /i not "%1" == "msbuildargs" goto SkipMsbuildArgs :: All the rest of the args will be collected and passed directly to msbuild. @@ -142,6 +148,10 @@ if not defined __Sequential ( set __msbuildCommonArgs=%__msbuildCommonArgs% /p:ParallelRun=false ) +if defined __AgainstPackages ( + set __msbuildCommonArgs=%__msbuildCommonArgs% /p:BuildTestsAgainstPackages=true +) + 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" @@ -160,8 +170,8 @@ xcopy /s "%__BinDir%" "%CORE_ROOT%" :SkipCoreRootSetup -if defined __Exclude (if not exist %__Exclude% echo %__MsgPrefix%Error: Exclusion .targets file not found && exit /b 1) -if defined __TestEnv (if not exist %__TestEnv% echo %__MsgPrefix%Error: Test Environment script not found && exit /b 1) +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? set __TestRunHtmlLog=%__LogsDir%\TestRun_%__BuildOS%__%__BuildArch%__%__BuildType%.html @@ -185,7 +195,7 @@ call :PrecompileFX :SkipPrecompileFX if defined __GenerateLayoutOnly ( - exit /b 1 + exit /b 0 ) if not exist %CORE_ROOT%\coreclr.dll ( @@ -248,6 +258,8 @@ REM ============================================================================ REM Compile the managed assemblies in Core_ROOT before running the tests :PrecompileAssembly +if defined __JitDisasm goto :jitdisasm + REM Skip mscorlib since it is already precompiled. if /I "%3" == "mscorlib.dll" exit /b 0 if /I "%3" == "mscorlib.ni.dll" exit /b 0 @@ -267,6 +279,27 @@ if %__exitCode% neq 0 ( echo Successfully precompiled %2 exit /b 0 +:jitdisasm + +if /I "%3" == "mscorlib.ni.dll" exit /b 0 + +echo "%1\corerun" "%1\jit-dasm.dll" --crossgen %1\crossgen.exe --platform %CORE_ROOT% --output %__TestWorkingDir%\dasm "%2" +"%1\corerun" "%1\jit-dasm.dll" --crossgen %1\crossgen.exe --platform %CORE_ROOT% --output %__TestWorkingDir%\dasm "%2" +set /a __exitCode = %errorlevel% + +if "%__exitCode%" == "-2146230517" ( + echo %2 is not a managed assembly. + exit /b 0 +) + +if %__exitCode% neq 0 ( + echo Unable to precompile %2 + exit /b 0 +) + +echo Successfully precompiled and generated dasm for %2 +exit /b 0 + :PrecompileFX for %%F in (%CORE_ROOT%\*.dll) do call :PrecompileAssembly "%CORE_ROOT%" "%%F" %%~nF%%~xF exit /b 0 @@ -297,6 +330,7 @@ set __msbuildLogArgs=^ set __msbuildArgs=%* %__msbuildCommonArgs% %__msbuildLogArgs% @REM The next line will overwrite the existing log file, if any. +echo %_msbuildexe% %__msbuildArgs% echo Invoking: %_msbuildexe% %__msbuildArgs% > "%__BuildLog%" %_msbuildexe% %__msbuildArgs% @@ -334,13 +368,23 @@ if defined __GCSimulatorTests ( set RunningGCSimulatorTests=1 ) +if defined __JitDisasm ( + if defined __DoCrossgen ( + echo Running jit disasm on framework and test assemblies + ) + if not defined __DoCrossgen ( + echo Running jit disasm on test assemblies only + ) + set RunningJitDisasm=1 +) + set __BuildLogRootName=Tests_GenerateRuntimeLayout call :msbuild "%__ProjectFilesDir%\runtest.proj" /p:GenerateRuntimeLayout=true if errorlevel 1 ( echo Test Dependency Resolution Failed exit /b 1 ) -echo %__MsgPrefix% Created the runtime layout with all dependencies in %CORE_ROOT% +echo %__MsgPrefix%Created the runtime layout with all dependencies in %CORE_ROOT% exit /b 0 @@ -360,12 +404,14 @@ 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 echo GenerateLayoutOnly - If specified will not run the tests and will only create the Runtime Dependency Layout echo RunCrossgenTests - Runs ReadytoRun tests echo jitstress n - Runs the tests with COMPlus_JitStress=n echo jitstressregs n - Runs the tests with COMPlus_JitStressRegs=n echo jitminopts - Runs the tests with COMPlus_JITMinOpts=1 echo jitforcerelocs - Runs the tests with COMPlus_ForceRelocs=1 +echo jitdisasm - Runs jit-dasm on the tests echo gcstresslevel n - Runs the tests with COMPlus_GCStress=n echo 0: None 1: GC on all allocs and 'easy' places echo 2: GC on transitions to preemptive GC 4: GC on every allowable JITed instr diff --git a/tests/runtest.proj b/tests/runtest.proj index c02b8c8f9f..acc4545d92 100644 --- a/tests/runtest.proj +++ b/tests/runtest.proj @@ -64,7 +64,6 @@ $(_XunitEpilog) ]]> - 2.1.0 @@ -120,7 +119,6 @@ $(_XunitEpilog) %24(TestWrappersPackagesConfigFileDirectory)project.lock.json - $(XunitTestBinBase)\$(Category)\ @@ -307,31 +305,7 @@ namespace $([System.String]::Copy($(Category)).Replace(".","_").Replace("\",""). - - - - - { "dependencies": { "xunit.runner.msbuild": "$(XunitPackageVersion)" }, "frameworks": { "net45": {} } } - $(BaseOutputPath)\tempRestoreProject - $(XunitRunnerRestoreProjectDir)\project.json - - - - - - - - + @@ -349,6 +323,28 @@ namespace $([System.String]::Copy($(Category)).Replace(".","_").Replace("\",""). Properties="Language=C#" /> + + + + + + + + + + + + + + + + + + + $([MSBuild]::MakeRelative($(OutputPath), $(_CLRTestToRunFileFullPath)).Replace("\","/")) + $(MSBuildProjectName).exe + $(BaseOutputPathWithConfig.Replace("\","/"))dasm/$(BuildProjectRelativeDir.Replace("\","/")) + + + + + + + + + $([MSBuild]::MakeRelative($(OutputPath), $(_CLRTestToRunFileFullPath))) + $(MSBuildProjectName).exe + $(BaseOutputPathWithConfig)dasm\$(BuildProjectRelativeDir) + + + + + + + + + + + + + + + + + diff --git a/tests/src/Common/Platform/platformdefines.cpp b/tests/src/Common/Platform/platformdefines.cpp index 4caead59ea..82061ac90d 100644 --- a/tests/src/Common/Platform/platformdefines.cpp +++ b/tests/src/Common/Platform/platformdefines.cpp @@ -89,7 +89,7 @@ int TP_slen(LPWSTR str) return len; } -int TP_scmp_s(LPSTR str1, LPSTR str2) +int TP_scmp_s(LPCSTR str1, LPCSTR str2) { // < 0 str1 less than str2 // 0 str1 identical to str2 @@ -277,7 +277,7 @@ DWORD TP_GetFullPathName(LPWSTR fileName, DWORD nBufferLength, LPWSTR lpBuffer) return GetFullPathNameW(fileName, nBufferLength, lpBuffer, NULL); #else char nativeFullPath[MAX_PATH]; - realpath(HackyConvertToSTR(fileName), nativeFullPath); + (void)realpath(HackyConvertToSTR(fileName), nativeFullPath); LPWSTR fullPathForCLR = HackyConvertToWSTR(nativeFullPath); wcscpy_s(lpBuffer, MAX_PATH, fullPathForCLR); return wcslen(lpBuffer); diff --git a/tests/src/Common/Platform/platformdefines.h b/tests/src/Common/Platform/platformdefines.h index d0760fd6ae..0961e86b2d 100644 --- a/tests/src/Common/Platform/platformdefines.h +++ b/tests/src/Common/Platform/platformdefines.h @@ -72,7 +72,7 @@ LPWSTR HackyConvertToWSTR(char* pszInput); typedef pthread_t THREAD_ID; typedef void* (*MacWorker)(void*); -typedef DWORD (*LPTHREAD_START_ROUTINE)(void*); +typedef DWORD __stdcall (*LPTHREAD_START_ROUTINE)(void*); #ifdef UNICODE typedef WCHAR TCHAR; #else // ANSI @@ -87,7 +87,7 @@ typedef void* HMODULE; typedef void* ULONG_PTR; typedef unsigned error_t; typedef void* LPVOID; -typedef char BYTE; +typedef unsigned char BYTE; typedef WCHAR OLECHAR; #endif @@ -97,7 +97,7 @@ typedef WCHAR OLECHAR; error_t TP_scpy_s(LPWSTR strDestination, size_t sizeInWords, LPCWSTR strSource); error_t TP_scat_s(LPWSTR strDestination, size_t sizeInWords, LPCWSTR strSource); int TP_slen(LPWSTR str); -int TP_scmp_s(LPSTR str1, LPSTR str2); +int TP_scmp_s(LPCSTR str1, LPCSTR str2); int TP_wcmp_s(LPWSTR str1, LPWSTR str2); error_t TP_getenv_s(size_t* pReturnValue, LPWSTR buffer, size_t sizeInWords, LPCWSTR varname); error_t TP_putenv_s(LPTSTR name, LPTSTR value); diff --git a/tests/src/Common/build_against_pkg_dependencies/build_against_pkg_dependencies.csproj b/tests/src/Common/build_against_pkg_dependencies/build_against_pkg_dependencies.csproj new file mode 100644 index 0000000000..63c54488f2 --- /dev/null +++ b/tests/src/Common/build_against_pkg_dependencies/build_against_pkg_dependencies.csproj @@ -0,0 +1,15 @@ + + + + + Debug + AnyCPU + BuildOnly + + + + + + + diff --git a/tests/src/Common/build_against_pkg_dependencies/project.json b/tests/src/Common/build_against_pkg_dependencies/project.json new file mode 100644 index 0000000000..562485594f --- /dev/null +++ b/tests/src/Common/build_against_pkg_dependencies/project.json @@ -0,0 +1,32 @@ +{ + "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" + }, + "frameworks": { + "netcoreapp1.1": { + "imports": [ + "dnxcore50", + "portable-net45+win8" + ] + } + }, + "runtimes": { + "win7-x86": {}, + "win7-x64": {}, + "win10-arm64": {}, + "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": {}, + "fedora.23-x64": {}, + "opensuse.13.2-x64": {}, + "opensuse.42.1-x64": {} + } +} diff --git a/tests/src/Common/empty/project.json b/tests/src/Common/empty/project.json index c6d5104033..1954111901 100644 --- a/tests/src/Common/empty/project.json +++ b/tests/src/Common/empty/project.json @@ -2,7 +2,7 @@ "dependencies": { }, "frameworks": { - "netcoreapp1.0": {} + "netcoreapp1.1": {} }, "runtimes": { "win7-x86": {}, diff --git a/tests/src/Common/netcoreapp/project.json b/tests/src/Common/netcoreapp/project.json new file mode 100644 index 0000000000..51193fc015 --- /dev/null +++ b/tests/src/Common/netcoreapp/project.json @@ -0,0 +1,74 @@ +{ + "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" + }, + "frameworks": { + "netcoreapp1.1": { + "dependencies": { + "Microsoft.NETCore.Runtime.CoreCLR": "1.2.0-beta-24820-02" + } + } + }, + "runtimes": { + "win7-x64": {} + } +} diff --git a/tests/src/Common/targeting_pack_ref/project.json b/tests/src/Common/targeting_pack_ref/project.json new file mode 100644 index 0000000000..c1f033b946 --- /dev/null +++ b/tests/src/Common/targeting_pack_ref/project.json @@ -0,0 +1,22 @@ +{ + "dependencies": { + "Microsoft.TargetingPack.Private.CoreCLR": "1.2.0-beta-24820-02" + }, + "frameworks": { + "netcoreapp1.1": { + "imports": [ + "dnxcore50", + "portable-net45+win8" + ] + } + }, + "runtimes": { + "win7-x86": {}, + "win7-x64": {}, + "ubuntu.14.04-x64": {}, + "osx.10.10-x64": {}, + "centos.7-x64": {}, + "rhel.7-x64": {}, + "debian.8-x64": {} + } +} diff --git a/tests/src/Common/targeting_pack_ref/targeting_pack_ref.csproj b/tests/src/Common/targeting_pack_ref/targeting_pack_ref.csproj new file mode 100644 index 0000000000..65e37c03c3 --- /dev/null +++ b/tests/src/Common/targeting_pack_ref/targeting_pack_ref.csproj @@ -0,0 +1,12 @@ + + + + + Debug + AnyCPU + BuildOnly + + + + diff --git a/tests/src/Common/test_dependencies/project.json b/tests/src/Common/test_dependencies/project.json index 46e2601eeb..5f059148b8 100644 --- a/tests/src/Common/test_dependencies/project.json +++ b/tests/src/Common/test_dependencies/project.json @@ -1,76 +1,76 @@ { "dependencies": { - "xunit": "2.1.0", - "xunit.console.netcore": "1.0.2-prerelease-00101", - "xunit.runner.utility": "2.1.0", + "xunit": "2.2.0-beta2-build3300", + "xunit.console.netcore": "1.0.2-prerelease-00177", + "xunit.runner.utility": "2.2.0-beta2-build3300", "Microsoft.CodeAnalysis.Compilers": "1.1.1", - "Microsoft.DotNet.xunit.performance": "1.0.0-alpha-build0035", - "Microsoft.DotNet.xunit.performance.analysis": "1.0.0-alpha-build0035", - "Microsoft.DotNet.xunit.performance.runner.Windows": "1.0.0-alpha-build0035", - "Microsoft.Win32.Primitives": "4.3.0", - "Newtonsoft.Json": "7.0.1", - "Microsoft.NETCore.Platforms": "1.1.0", - "Microsoft.NETCore.Targets": "1.1.0", - "System.Collections.Immutable": "1.3.0", - "System.Threading.Thread": "4.3.0", - "System.Collections": "4.3.0", - "System.Xml.XmlSerializer": "4.3.0", - "System.Collections.Concurrent": "4.3.0", - "System.ObjectModel": "4.3.0", - "System.Runtime.Numerics": "4.3.0", - "System.Collections.NonGeneric": "4.3.0", - "System.Collections.Specialized": "4.3.0", - "System.ComponentModel": "4.3.0", - "System.Reflection.Emit.Lightweight": "4.3.0", - "System.Reflection.TypeExtensions": "4.3.0", - "System.Console": "4.3.0", - "System.Diagnostics.Contracts": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Diagnostics.Process": "4.3.0", - "System.Diagnostics.Tools": "4.3.0", - "System.Diagnostics.Tracing": "4.3.0", - "System.Dynamic.Runtime": "4.3.0", - "System.Globalization": "4.3.0", - "System.Globalization.Calendars": "4.3.0", - "System.IO": "4.3.0", - "System.IO.FileSystem": "4.3.0", - "System.IO.FileSystem.Primitives": "4.3.0", - "System.Linq": "4.3.0", - "System.Linq.Queryable": "4.3.0", - "System.Linq.Expressions": "4.3.0", - "System.Reflection": "4.3.0", - "System.Reflection.Extensions": "4.3.0", - "System.Resources.ResourceManager": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.CompilerServices.Unsafe": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.Handles": "4.3.0", - "System.Runtime.InteropServices": "4.3.0", - "System.Runtime.InteropServices.RuntimeInformation": "4.3.0", - "System.Runtime.Loader": "4.3.0", - "System.Runtime.Serialization.Json": "4.3.0", - "System.Runtime.Serialization.Primitives": "4.1.1", - "System.Runtime.Serialization.Xml": "4.3.0", - "System.Security.Cryptography.Algorithms": "4.3.0", - "System.Text.Encoding": "4.3.0", - "System.Text.Encoding.Extensions": "4.3.0", - "System.Text.RegularExpressions": "4.3.0", - "System.Threading": "4.3.0", - "System.Threading.AccessControl": "4.3.0", - "System.Threading.Overlapped": "4.3.0", - "System.Threading.Tasks": "4.3.0", - "System.Threading.Tasks.Parallel": "4.3.0", - "System.Threading.ThreadPool": "4.3.0", - "System.Threading.Timer": "4.3.0", - "System.Xml.ReaderWriter": "4.3.0", - "System.Xml.XDocument": "4.3.0", - "System.Xml.XmlDocument": "4.3.0", - "System.Xml.XPath": "4.3.0", - "System.Xml.XPath.XmlDocument": "4.3.0", - "System.Numerics.Vectors": "4.3.0" + "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", + "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" }, "frameworks": { - "netcoreapp1.0": { + "netcoreapp1.1": { "imports": [ "dnxcore50", "portable-net45+win8" diff --git a/tests/src/Common/test_dependencies/test_dependencies.csproj b/tests/src/Common/test_dependencies/test_dependencies.csproj index f4757725c6..0649d2b1e7 100644 --- a/tests/src/Common/test_dependencies/test_dependencies.csproj +++ b/tests/src/Common/test_dependencies/test_dependencies.csproj @@ -5,10 +5,10 @@ Debug AnyCPU BuildOnly - $(CORE_ROOT)\.nuget\pkg + .NETCoreApp,Version=v1.1 - + - $(CORE_ROOT)\.nuget\pkg + .NETCoreApp,Version=v1.1 - + diff --git a/tests/src/CoreMangLib/cti/system/datetime/datetimeparse1.cs b/tests/src/CoreMangLib/cti/system/datetime/datetimeparse1.cs index ee92958220..d759d4fa3e 100644 --- a/tests/src/CoreMangLib/cti/system/datetime/datetimeparse1.cs +++ b/tests/src/CoreMangLib/cti/system/datetime/datetimeparse1.cs @@ -472,7 +472,7 @@ public class DateTimeParse1 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 -> PST conversion + 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); @@ -489,10 +489,9 @@ public class DateTimeParse1 || day != dateAfter.Day || year != dateAfter.Year || (DayOfWeek)dayOfWeek != dateAfter.DayOfWeek - || minute != dateAfter.Minute || 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 + " GMT)"); + 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; } } @@ -683,10 +682,9 @@ public class DateTimeParse1 if (month != dateAfter.Month || day != dateAfter.Day || year != dateAfter.Year - || minute != dateAfter.Minute || 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 + "Z)"); + 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; } } diff --git a/tests/src/CoreMangLib/system/span/BasicSpanTest.cs b/tests/src/CoreMangLib/system/span/BasicSpanTest.cs new file mode 100644 index 0000000000..18ec6f8474 --- /dev/null +++ b/tests/src/CoreMangLib/system/span/BasicSpanTest.cs @@ -0,0 +1,804 @@ +using System; +using System.Collections.Generic; + +class ReferenceType +{ + internal byte Value; + public ReferenceType(byte value) { Value = value; } +} + +struct ValueTypeWithoutPointers +{ + internal byte Value; + public ValueTypeWithoutPointers(byte value) { Value = value; } +} + +struct ValueTypeWithPointers +{ + internal object Reference; + public ValueTypeWithPointers(object reference) { Reference = reference; } +} + +struct SevenBytesStruct +{ +#pragma warning disable 0169 + byte b1, b2, b3, b4, b5, b6, b7; +#pragma warning restore 0169 +} + +class My +{ + static int Sum(Span span) + { + int sum = 0; + for (int i = 0; i < span.Length; i++) + sum += span[i]; + return sum; + } + + static void Main() + { + int failedTestsCount = 0; + + Test(CanAccessItemsViaIndexer, "CanAccessItemsViaIndexer", ref failedTestsCount); + Test(CanAccessItemsViaIndexerStartCtor, "CanAccessItemsViaIndexerStartCtor", ref failedTestsCount); + Test(CanAccessItemsViaIndexerStartLengthCtor, "CanAccessItemsViaIndexerStartLengthCtor", ref failedTestsCount); + + Test(TestBoundaryEmptySpanStartCtor, "TestBoundaryEmptySpanStartCtor", ref failedTestsCount); + Test(TestBoundaryEmptySpanStartLengthCtor, "TestBoundaryEmptySpanStartLengthCtor", ref failedTestsCount); + + Test(ReferenceTypesAreSupported, "ReferenceTypesAreSupported", ref failedTestsCount); + + Test(CanUpdateUnderlyingArray, "CanUpdateUnderlyingArray", ref failedTestsCount); + + Test(MustNotMoveGcTypesToUnmanagedMemory, "MustNotMoveGcTypesToUnmanagedMemory", ref failedTestsCount); + + Test(TestArrayCoVariance, "TestArrayCoVariance", ref failedTestsCount); + Test(TestArrayCoVarianceStartCtor, "TestArrayCoVarianceStartCtor", ref failedTestsCount); + Test(TestArrayCoVarianceStartLengthCtor, "TestArrayCoVarianceStartLengthCtor", ref failedTestsCount); + + Test(TestArrayCoVarianceReadOnly, "TestArrayCoVarianceReadOnly", ref failedTestsCount); + + Test(CanCopyValueTypesWithoutPointersToSlice, "CanCopyValueTypesWithoutPointersToSlice", ref failedTestsCount); + Test(CanCopyValueTypesWithoutPointersToArray, "CanCopyValueTypesWithoutPointersToArray", ref failedTestsCount); + + Test(CanCopyReferenceTypesToSlice, "CanCopyReferenceTypesToSlice", ref failedTestsCount); + Test(CanCopyReferenceTypesToArray, "CanCopyReferenceTypesToArray", ref failedTestsCount); + + Test(CanCopyValueTypesWithPointersToSlice, "CanCopyValueTypesWithPointersToSlice", ref failedTestsCount); + Test(CanCopyValueTypesWithPointersToArray, "CanCopyValueTypesWithPointersToArray", ref failedTestsCount); + + Test(CanCopyValueTypesWithoutPointersToUnmanagedMemory, "CanCopyValueTypesWithoutPointersToUnmanagedMemory", ref failedTestsCount); + + Test(CanCopyOverlappingSlicesOfValueTypeWithoutPointers, "CanCopyOverlappingSlicesOfValueTypeWithoutPointers", ref failedTestsCount); + Test(CanCopyOverlappingSlicesOfValueTypeWithPointers, "CanCopyOverlappingSlicesOfValueTypeWithPointers", ref failedTestsCount); + Test(CanCopyOverlappingSlicesOfReferenceTypes, "CanCopyOverlappingSlicesOfReferenceTypes", ref failedTestsCount); + + Test(MustNotCastSpanOfValueTypesWithPointers, "MustNotCastSpanOfValueTypesWithPointers", ref failedTestsCount); + Test(IntArraySpanCastedToByteArraySpanHasSameBytesAsOriginalArray, "IntArraySpanCastedToByteArraySpanHasSameBytesAsOriginalArray", ref failedTestsCount); + Test(ByteArraySpanCastedToIntArraySpanHasSameBytesAsOriginalArray, "ByteArraySpanCastedToIntArraySpanHasSameBytesAsOriginalArray", ref failedTestsCount); + Test(SourceTypeLargerThanTargetOneCorrectlyCalcsTargetsLength, "SourceTypeLargerThanTargetOneCorrectlyCalcsTargetsLength", ref failedTestsCount); + Test(WhenSourceDoesntFitIntoTargetLengthIsZero, "WhenSourceDoesntFitIntoTargetLengthIsZero", ref failedTestsCount); + Test(WhenSourceFitsIntoTargetOnceLengthIsOne, "WhenSourceFitsIntoTargetOnceLengthIsOne", ref failedTestsCount); + Test(WhenSourceTypeLargerThanTargetAndOverflowsInt32ThrowsException, "WhenSourceTypeLargerThanTargetAndOverflowsInt32ThrowsException", ref failedTestsCount); + Test(CanCreateSpanFromString, "CanCreateSpanFromString", ref failedTestsCount); + + Test(WhenStartLargerThanLengthThrowsExceptionStartCtor, "WhenStartLargerThanLengthThrowsExceptionStartCtor", ref failedTestsCount); + Test(WhenStartLargerThanLengthThrowsExceptionStartLengthCtor, "WhenStartLargerThanLengthThrowsExceptionStartLengthCtor", ref failedTestsCount); + Test(WhenStartAndLengthLargerThanLengthThrowsExceptionStartLengthCtor, "WhenStartAndLengthLargerThanLengthThrowsExceptionStartLengthCtor", ref failedTestsCount); + + Console.WriteLine(string.Format("{0} tests has failed", failedTestsCount)); + Environment.Exit(failedTestsCount); + } + + static void CanAccessItemsViaIndexer() + { + int[] a = new int[] { 1, 2, 3 }; + Span slice = new Span(a); + AssertTrue(Sum(slice) == 6, "Failed to sum slice"); + + Span subslice = slice.Slice(1, 2); + AssertTrue(Sum(subslice) == 5, "Failed to sum subslice"); + } + + static void CanAccessItemsViaIndexerStartCtor() + { + int[] a = new int[] { 1, 2, 3 }; + Span slice = new Span(a, start: 1); + AssertTrue(Sum(slice) == 5, "Failed to sum slice"); + } + + static void CanAccessItemsViaIndexerStartLengthCtor() + { + int[] a = new int[] { 1, 2, 3 }; + Span slice = new Span(a, start: 1, length: 1); + AssertTrue(Sum(slice) == 2, "Failed to sum slice"); + } + + static void TestBoundaryEmptySpanStartCtor() + { + int[] a = new int[5]; + + Span slice = new Span(a, start: a.Length); + AssertEqual(slice.Length, 0); + } + + static void TestBoundaryEmptySpanStartLengthCtor() + { + int[] a = new int[5]; + + Span slice = new Span(a, a.Length, 0); + AssertEqual(slice.Length, 0); + + Span subSlice = new Span(a).Slice(a.Length, 0); + AssertEqual(subSlice.Length, 0); + } + + static void ReferenceTypesAreSupported() + { + var underlyingArray = new ReferenceType[] { new ReferenceType(0), new ReferenceType(1), new ReferenceType(2) }; + var slice = new Span(underlyingArray); + + for (int i = 0; i < underlyingArray.Length; i++) + { + AssertTrue(underlyingArray[i].Value == slice[i].Value, "Values are different"); + AssertTrue(object.ReferenceEquals(underlyingArray[i], slice[i]), "References are broken"); + } + } + + static unsafe void MustNotMoveGcTypesToUnmanagedMemory() + { + byte* pointerToStack = stackalloc byte[256]; + + try + { + new Span(pointerToStack, 1); + AssertTrue(false, "Expected exception for value types with references not thrown"); + } + catch (System.ArgumentException ex) + { + AssertTrue(ex.Message == "Cannot use type 'ValueTypeWithPointers'. Only value types without pointers or references are supported.", + "Exception message is incorrect"); + } + + try + { + new Span(pointerToStack, 1); + AssertTrue(false, "Expected exception for reference types not thrown"); + } + catch (System.ArgumentException ex) + { + AssertTrue(ex.Message == "Cannot use type 'ReferenceType'. Only value types without pointers or references are supported.", + "Exception message is incorrect"); + } + } + + static void TestArrayCoVariance() + { + var array = new ReferenceType[1]; + var objArray = (object[])array; + try + { + new Span(objArray); + AssertTrue(false, "Expected exception not thrown"); + } + catch (ArrayTypeMismatchException) + { + } + + var objEmptyArray = Array.Empty(); + try + { + new Span(objEmptyArray); + AssertTrue(false, "Expected exception not thrown"); + } + catch (ArrayTypeMismatchException) + { + } + } + + static void TestArrayCoVarianceStartCtor() + { + var array = new ReferenceType[1]; + var objArray = (object[])array; + try + { + new Span(objArray, start: 0); + AssertTrue(false, "Expected exception not thrown"); + } + catch (ArrayTypeMismatchException) + { + } + + var objEmptyArray = Array.Empty(); + try + { + new Span(objEmptyArray, start: 0); + AssertTrue(false, "Expected exception not thrown"); + } + catch (ArrayTypeMismatchException) + { + } + } + + static void TestArrayCoVarianceStartLengthCtor() + { + var array = new ReferenceType[1]; + var objArray = (object[])array; + try + { + new Span(objArray, start: 0, length: 1); + AssertTrue(false, "Expected exception not thrown"); + } + catch (ArrayTypeMismatchException) + { + } + + var objEmptyArray = Array.Empty(); + try + { + new Span(objEmptyArray, start: 0, length: 1); + AssertTrue(false, "Expected exception not thrown"); + } + catch (ArrayTypeMismatchException) + { + } + } + + static void TestArrayCoVarianceReadOnly() + { + var array = new ReferenceType[1]; + var objArray = (object[])array; + AssertTrue(new ReadOnlySpan(objArray).Length == 1, "Unexpected length"); + + var objEmptyArray = Array.Empty(); + AssertTrue(new ReadOnlySpan(objEmptyArray).Length == 0, "Unexpected length"); + } + + static void CanUpdateUnderlyingArray() + { + var underlyingArray = new int[] { 1, 2, 3 }; + var slice = new Span(underlyingArray); + + slice[0] = 0; + slice[1] = 1; + slice[2] = 2; + + AssertTrue(underlyingArray[0] == 0, "Failed to update underlying array"); + AssertTrue(underlyingArray[1] == 1, "Failed to update underlying array"); + AssertTrue(underlyingArray[2] == 2, "Failed to update underlying array"); + } + + static void CanCopyValueTypesWithoutPointersToSlice() + { + var source = new Span( + new[] + { + new ValueTypeWithoutPointers(0), + new ValueTypeWithoutPointers(1), + new ValueTypeWithoutPointers(2), + new ValueTypeWithoutPointers(3) + }); + var underlyingArray = new ValueTypeWithoutPointers[4]; + var slice = new Span(underlyingArray); + + var result = source.TryCopyTo(slice); + + AssertTrue(result, "Failed to copy value types without pointers"); + for (int i = 0; i < 4; i++) + { + AssertTrue(source[i].Value == slice[i].Value, "Failed to copy value types without pointers, values were not equal"); + AssertTrue(source[i].Value == underlyingArray[i].Value, "Failed to copy value types without pointers to underlying array, values were not equal"); + } + } + + static void CanCopyValueTypesWithoutPointersToArray() + { + var source = new Span( + new[] + { + new ValueTypeWithoutPointers(0), + new ValueTypeWithoutPointers(1), + new ValueTypeWithoutPointers(2), + new ValueTypeWithoutPointers(3) + }); + var array = new ValueTypeWithoutPointers[4]; + + var result = source.TryCopyTo(array); + + AssertTrue(result, "Failed to copy value types without pointers"); + for (int i = 0; i < 4; i++) + { + AssertTrue(source[i].Value == array[i].Value, "Failed to copy value types without pointers, values were not equal"); + } + } + + static void CanCopyReferenceTypesToSlice() + { + var source = new Span( + new[] + { + new ReferenceType(0), + new ReferenceType(1), + new ReferenceType(2), + new ReferenceType(3) + }); + var underlyingArray = new ReferenceType[4]; + var slice = new Span(underlyingArray); + + var result = source.TryCopyTo(slice); + + AssertTrue(result, "Failed to copy reference types"); + for (int i = 0; i < 4; i++) + { + AssertTrue(source[i] != null && slice[i] != null, "Failed to copy reference types, references were null"); + AssertTrue(object.ReferenceEquals(source[i], slice[i]), "Failed to copy reference types, references were not equal"); + AssertTrue(source[i].Value == slice[i].Value, "Failed to copy reference types, values were not equal"); + + AssertTrue(underlyingArray[i] != null, "Failed to copy reference types to underlying array, references were null"); + AssertTrue(object.ReferenceEquals(source[i], underlyingArray[i]), "Failed to copy reference types to underlying array, references were not equal"); + AssertTrue(source[i].Value == underlyingArray[i].Value, "Failed to copy reference types to underlying array, values were not equal"); + } + } + + static void CanCopyReferenceTypesToArray() + { + var source = new Span( + new[] + { + new ReferenceType(0), + new ReferenceType(1), + new ReferenceType(2), + new ReferenceType(3) + }); + var array = new ReferenceType[4]; + + var result = source.TryCopyTo(array); + + AssertTrue(result, "Failed to copy reference types"); + for (int i = 0; i < 4; i++) + { + AssertTrue(source[i] != null && array[i] != null, "Failed to copy reference types, references were null"); + AssertTrue(object.ReferenceEquals(source[i], array[i]), "Failed to copy reference types, references were not equal"); + AssertTrue(source[i].Value == array[i].Value, "Failed to copy reference types, values were not equal"); + } + } + + static void CanCopyValueTypesWithPointersToSlice() + { + var source = new Span( + new[] + { + new ValueTypeWithPointers(new object()), + new ValueTypeWithPointers(new object()), + new ValueTypeWithPointers(new object()), + new ValueTypeWithPointers(new object()) + }); + var underlyingArray = new ValueTypeWithPointers[4]; + var slice = new Span(underlyingArray); + + var result = source.TryCopyTo(slice); + + AssertTrue(result, "Failed to copy value types with pointers"); + for (int i = 0; i < 4; i++) + { + AssertTrue(object.ReferenceEquals(source[i].Reference, slice[i].Reference), "Failed to copy value types with pointers, references were not the same"); + AssertTrue(object.ReferenceEquals(source[i].Reference, underlyingArray[i].Reference), "Failed to copy value types with pointers to underlying array, references were not the same"); + } + } + + static void CanCopyValueTypesWithPointersToArray() + { + var source = new Span( + new[] + { + new ValueTypeWithPointers(new object()), + new ValueTypeWithPointers(new object()), + new ValueTypeWithPointers(new object()), + new ValueTypeWithPointers(new object()) + }); + var array = new ValueTypeWithPointers[4]; + + var result = source.TryCopyTo(array); + + AssertTrue(result, "Failed to copy value types with pointers"); + for (int i = 0; i < 4; i++) + { + AssertTrue(object.ReferenceEquals(source[i].Reference, array[i].Reference), "Failed to copy value types with pointers, references were not the same"); + } + } + + static unsafe void CanCopyValueTypesWithoutPointersToUnmanagedMemory() + { + var source = new Span( + new byte[] + { + 0, + 1, + 2, + 3 + }); + byte* pointerToStack = stackalloc byte[256]; + + var result = source.TryCopyTo(new Span(pointerToStack, 4)); + + AssertTrue(result, "Failed to copy value types without pointers to unamanaged memory"); + for (int i = 0; i < 4; i++) + { + AssertTrue(source[i] == pointerToStack[i], "Failed to copy value types without pointers to unamanaged memory, values were not equal"); + } + } + + static void CanCopyOverlappingSlicesOfValueTypeWithoutPointers() + { + var sourceArray = new[] + { + new ValueTypeWithoutPointers(0), + new ValueTypeWithoutPointers(1), + new ValueTypeWithoutPointers(2) + }; + var firstAndSecondElements = new Span(sourceArray, 0, 2); // 0, 1 + var secondAndThirdElements = new Span(sourceArray, 1, 2); // 1, 2 + + // 0 1 2 sourceArray + // 0 1 - firstAndSecondElements + // - 1 2 secondAndThirdElements + var result = firstAndSecondElements.TryCopyTo(secondAndThirdElements); // to avoid overlap we should copy backward now + // - 0 1 secondAndThirdElements + // 0 0 - firstAndSecondElements + // 0 0 1 sourceArray + + AssertTrue(result, "Failed to copy overlapping value types without pointers"); + + AssertTrue(secondAndThirdElements[1].Value == 1, "secondAndThirdElements[1] should get replaced by 1"); + AssertTrue(secondAndThirdElements[0].Value == 0 && firstAndSecondElements[1].Value == 0, "secondAndThirdElements[0] and firstAndSecondElements[1] point to the same element, should get replaced by 0"); + AssertTrue(firstAndSecondElements[0].Value == 0, "firstAndSecondElements[0] should remain the same"); + + // let's try the other direction to make sure it works as well! + + sourceArray = new[] + { + new ValueTypeWithoutPointers(0), + new ValueTypeWithoutPointers(1), + new ValueTypeWithoutPointers(2) + }; + firstAndSecondElements = new Span(sourceArray, 0, 2); // 0, 1 + secondAndThirdElements = new Span(sourceArray, 1, 2); // 1, 2 + + // 0 1 2 sourceArray + // 0 1 - firstAndSecondElements + // - 1 2 secondAndThirdElements + result = secondAndThirdElements.TryCopyTo(firstAndSecondElements); // to avoid overlap we should copy forward now + // 1 2 - firstAndSecondElements + // - 2 2 secondAndThirdElements + // 1 2 2 sourceArray + + AssertTrue(result, "Failed to copy overlapping value types without pointers"); + + AssertTrue(secondAndThirdElements[1].Value == 2, "secondAndThirdElements[1] should remain the same"); + AssertTrue(firstAndSecondElements[1].Value == 2 && secondAndThirdElements[0].Value == 2, "secondAndThirdElements[0] && firstAndSecondElements[1] point to the same element, should get replaced by 2"); + AssertTrue(firstAndSecondElements[0].Value == 1, "firstAndSecondElements[0] should get replaced by 1"); + } + + static void CanCopyOverlappingSlicesOfValueTypeWithPointers() + { + string zero = "0", one = "1", two = "2"; + var sourceArray = new[] + { + new ValueTypeWithPointers(zero), + new ValueTypeWithPointers(one), + new ValueTypeWithPointers(two) + }; + var firstAndSecondElements = new Span(sourceArray, 0, 2); // 0, 1 + var secondAndThirdElements = new Span(sourceArray, 1, 2); // 1, 2 + + // 0 1 2 sourceArray + // 0 1 - firstAndSecondElements + // - 1 2 secondAndThirdElements + var result = firstAndSecondElements.TryCopyTo(secondAndThirdElements); // to avoid overlap we should copy backward now + // - 0 1 secondAndThirdElements + // 0 0 - firstAndSecondElements + // 0 0 1 sourceArray + + AssertTrue(result, "Failed to copy overlapping value types with pointers"); + + AssertTrue(object.ReferenceEquals(secondAndThirdElements[1].Reference, one), "secondAndThirdElements[1] should get replaced by 1"); + AssertTrue(object.ReferenceEquals(secondAndThirdElements[0].Reference, zero) && object.ReferenceEquals(firstAndSecondElements[1].Reference, zero), "secondAndThirdElements[0] and firstAndSecondElements[1] point to the same element, should get replaced by 0"); + AssertTrue(object.ReferenceEquals(firstAndSecondElements[0].Reference, zero), "firstAndSecondElements[0] should remain the same"); + + // let's try the other direction to make sure it works as well! + + sourceArray = new[] + { + new ValueTypeWithPointers(zero), + new ValueTypeWithPointers(one), + new ValueTypeWithPointers(two) + }; + firstAndSecondElements = new Span(sourceArray, 0, 2); // 0, 1 + secondAndThirdElements = new Span(sourceArray, 1, 2); // 1, 2 + + // 0 1 2 sourceArray + // 0 1 - firstAndSecondElements + // - 1 2 secondAndThirdElements + result = secondAndThirdElements.TryCopyTo(firstAndSecondElements); // to avoid overlap we should copy forward now + // 1 2 - firstAndSecondElements + // - 2 2 secondAndThirdElements + // 1 2 2 sourceArray + + AssertTrue(result, "Failed to copy overlapping value types with pointers"); + + AssertTrue(object.ReferenceEquals(secondAndThirdElements[1].Reference, two), "secondAndThirdElements[1] should remain the same"); + AssertTrue(object.ReferenceEquals(firstAndSecondElements[1].Reference, two) && object.ReferenceEquals(secondAndThirdElements[0].Reference, two), "secondAndThirdElements[0] && firstAndSecondElements[1] point to the same element, should get replaced by 2"); + AssertTrue(object.ReferenceEquals(firstAndSecondElements[0].Reference, one), "firstAndSecondElements[0] should get replaced by 1"); + } + + static void CanCopyOverlappingSlicesOfReferenceTypes() + { + var sourceArray = new ReferenceType[] { new ReferenceType(0), new ReferenceType(1), new ReferenceType(2) }; + + var firstAndSecondElements = new Span(sourceArray, 0, 2); // 0, 1 + var secondAndThirdElements = new Span(sourceArray, 1, 2); // 1, 2 + + // 0 1 2 sourceArray + // 0 1 - firstAndSecondElements + // - 1 2 secondAndThirdElements + var result = firstAndSecondElements.TryCopyTo(secondAndThirdElements); // to avoid overlap we should copy backward now + // - 0 1 secondAndThirdElements + // 0 0 - firstAndSecondElements + // 0 0 1 sourceArray + + AssertTrue(result, "Failed to copy overlapping reference types"); + + AssertTrue(secondAndThirdElements[1].Value == 1, "secondAndThirdElements[1] should get replaced by 1"); + AssertTrue(secondAndThirdElements[0].Value == 0 && firstAndSecondElements[1].Value == 0, "secondAndThirdElements[0] and firstAndSecondElements[1] point to the same element, should get replaced by 0"); + AssertTrue(firstAndSecondElements[0].Value == 0, "firstAndSecondElements[0] should remain the same"); + + // let's try the other direction to make sure it works as well! + + sourceArray = new[] + { + new ReferenceType(0), + new ReferenceType(1), + new ReferenceType(2) + }; + firstAndSecondElements = new Span(sourceArray, 0, 2); // 0, 1 + secondAndThirdElements = new Span(sourceArray, 1, 2); // 1, 2 + + // 0 1 2 sourceArray + // 0 1 - firstAndSecondElements + // - 1 2 secondAndThirdElements + result = secondAndThirdElements.TryCopyTo(firstAndSecondElements); // to avoid overlap we should copy forward now + // 1 2 - firstAndSecondElements + // - 2 2 secondAndThirdElements + // 1 2 2 sourceArray + + AssertTrue(result, "Failed to copy overlapping reference types"); + + AssertTrue(secondAndThirdElements[1].Value == 2, "secondAndThirdElements[1] should remain the same"); + AssertTrue(firstAndSecondElements[1].Value == 2 && secondAndThirdElements[0].Value == 2, "secondAndThirdElements[0] && firstAndSecondElements[1] point to the same element, should get replaced by 2"); + AssertTrue(firstAndSecondElements[0].Value == 1, "firstAndSecondElements[0] should get replaced by 1"); + } + + static void MustNotCastSpanOfValueTypesWithPointers() + { + var spanOfValueTypeWithPointers = new Span(new[] { new ValueTypeWithPointers(new object()) }); + + try + { + var impossible = spanOfValueTypeWithPointers.AsBytes(); + AssertTrue(false, "Expected exception for wrong type not thrown"); + } + catch (System.ArgumentException ex) + { + AssertTrue(ex.Message == "Cannot use type 'ValueTypeWithPointers'. Only value types without pointers or references are supported.", + "Exception message is incorrect"); + } + + try + { + var impossible = spanOfValueTypeWithPointers.NonPortableCast(); + AssertTrue(false, "Expected exception for wrong type not thrown"); + } + catch (System.ArgumentException ex) + { + AssertTrue(ex.Message == "Cannot use type 'ValueTypeWithPointers'. Only value types without pointers or references are supported.", + "Exception message is incorrect"); + } + + var spanOfBytes = new Span(new byte[10]); + try + { + var impossible = spanOfBytes.NonPortableCast(); + AssertTrue(false, "Expected exception for wrong type not thrown"); + } + catch (System.ArgumentException ex) + { + AssertTrue(ex.Message == "Cannot use type 'ValueTypeWithPointers'. Only value types without pointers or references are supported.", + "Exception message is incorrect"); + } + } + + static void IntArraySpanCastedToByteArraySpanHasSameBytesAsOriginalArray() + { + var ints = new int[100000]; + Random r = new Random(42324232); + for (int i = 0; i < ints.Length; i++) { ints[i] = r.Next(); } + var bytes = new Span(ints).AsBytes(); + AssertEqual(bytes.Length, ints.Length * sizeof(int)); + for (int i = 0; i < ints.Length; i++) + { + AssertEqual(bytes[i * 4], (ints[i] & 0xff)); + AssertEqual(bytes[i * 4 + 1], (ints[i] >> 8 & 0xff)); + AssertEqual(bytes[i * 4 + 2], (ints[i] >> 16 & 0xff)); + AssertEqual(bytes[i * 4 + 3], (ints[i] >> 24 & 0xff)); + } + } + + static void ByteArraySpanCastedToIntArraySpanHasSameBytesAsOriginalArray() + { + var bytes = new byte[100000]; + Random r = new Random(541345); + for (int i = 0; i < bytes.Length; i++) { bytes[i] = (byte)r.Next(256); } + var ints = new Span(bytes).NonPortableCast(); + AssertEqual(ints.Length, bytes.Length / sizeof(int)); + for (int i = 0; i < ints.Length; i++) + { + AssertEqual(BitConverter.ToInt32(bytes, i * 4), ints[i]); + } + } + + static void SourceTypeLargerThanTargetOneCorrectlyCalcsTargetsLength() + { + for (int sourceLength = 0; sourceLength <= 4; sourceLength++) + { + var sourceSlice = new Span(new SevenBytesStruct[sourceLength]); + + var targetSlice = sourceSlice.NonPortableCast(); + + AssertEqual((sourceLength * 7) / sizeof(short), targetSlice.Length); + } + } + + static void WhenSourceDoesntFitIntoTargetLengthIsZero() + { + for (int sourceLength = 0; sourceLength <= 3; sourceLength++) + { + var sourceSlice = new Span(new short[sourceLength]); + + var targetSlice = sourceSlice.NonPortableCast(); + + AssertEqual(0, targetSlice.Length); + } + } + + static void WhenSourceFitsIntoTargetOnceLengthIsOne() + { + foreach (var sourceLength in new int[] { 4, 6 }) + { + var sourceSlice = new Span(new short[sourceLength]); + + var targetSlice = sourceSlice.NonPortableCast(); + + AssertEqual(1, targetSlice.Length); + } + } + + static void WhenSourceTypeLargerThanTargetAndOverflowsInt32ThrowsException() + { + unsafe + { + byte dummy; + int sourceLength = 620000000; + var sourceSlice = new Span(&dummy, sourceLength); + + try + { + var targetSlice = sourceSlice.NonPortableCast(); + AssertTrue(false, "Expected exception for overflow not thrown"); + } + catch (System.OverflowException) + { + } + } + } + + static void CanCreateSpanFromString() + { + const string fullText = "new Span()"; + var spanFromFull = fullText.Slice(); + AssertEqualContent(fullText, spanFromFull); + + string firstHalfOfString = fullText.Substring(0, fullText.Length / 2); + var spanFromFirstHalf = fullText.Slice(0, fullText.Length / 2); + AssertEqualContent(firstHalfOfString, spanFromFirstHalf); + + string secondHalfOfString = fullText.Substring(fullText.Length / 2); + var spanFromSecondHalf = fullText.Slice(fullText.Length / 2); + AssertEqualContent(secondHalfOfString, spanFromSecondHalf); + } + + static void WhenStartLargerThanLengthThrowsExceptionStartCtor() + { + try + { + var data = new byte[10]; + var slice = new Span(data, start: 11); + AssertTrue(false, "Expected exception for Argument Out of Range not thrown"); + } + catch (System.ArgumentOutOfRangeException) + { + } + } + + static void WhenStartLargerThanLengthThrowsExceptionStartLengthCtor() + { + try + { + var data = new byte[10]; + var slice = new Span(data, start: 11, length: 0); + AssertTrue(false, "Expected exception for Argument Out of Range not thrown"); + } + catch (System.ArgumentOutOfRangeException) + { + } + } + + static void WhenStartAndLengthLargerThanLengthThrowsExceptionStartLengthCtor() + { + try + { + var data = new byte[10]; + var slice = new Span(data, start: 1, length: 10); + AssertTrue(false, "Expected exception for Argument Out of Range not thrown"); + } + catch (System.ArgumentOutOfRangeException) + { + } + } + + static void Test(Action test, string testName, ref int failedTestsCount) + { + try + { + test(); + + Console.WriteLine(testName + " test has passed"); + } + catch (System.Exception ex) + { + Console.WriteLine(testName + " test has failed with exception: " + ex.Message); + + ++failedTestsCount; + } + finally + { + Console.WriteLine("-------------------"); + } + } + + static void AssertTrue(bool condition, string errorMessage) + { + if (condition == false) + { + throw new Exception(errorMessage); + } + } + + static void AssertEqual(T left, T right) + where T : IEquatable + { + if (left.Equals(right) == false) + { + throw new Exception(string.Format("Values were not equal! {0} and {1}", left, right)); + } + } + + static void AssertEqualContent(string text, ReadOnlySpan span) + { + AssertEqual(text.Length, span.Length); + for (int i = 0; i < text.Length; i++) + { + AssertEqual(text[i], span[i]); + } + } +} diff --git a/tests/src/GC/API/GC/GetGenerationWR2.csproj b/tests/src/GC/API/GC/GetGenerationWR2.csproj index 35a05a68bf..6b109e9c8c 100644 --- a/tests/src/GC/API/GC/GetGenerationWR2.csproj +++ b/tests/src/GC/API/GC/GetGenerationWR2.csproj @@ -13,6 +13,7 @@ {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} $(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages ..\..\ + true 7a9bfb7d diff --git a/tests/src/GC/API/GCHandleCollector/Usage.cs b/tests/src/GC/API/GCHandleCollector/Usage.cs index 14088f03de..b78271b243 100644 --- a/tests/src/GC/API/GCHandleCollector/Usage.cs +++ b/tests/src/GC/API/GCHandleCollector/Usage.cs @@ -146,7 +146,8 @@ public class Usage // ensure threshold is increasing if (!CheckPercentageIncrease(handleCount, prevHandleCount)) { - Console.WriteLine("Case 3 failed: threshold not increasing!"); + // see github#4093 for the rationale for fail-fast in this test. + Environment.FailFast(string.Empty); return false; } prevHandleCount = handleCount; diff --git a/tests/src/GC/Features/HeapExpansion/pluggaps.csproj b/tests/src/GC/Features/HeapExpansion/pluggaps.csproj index cbeab565fe..42ba45a58f 100644 --- a/tests/src/GC/Features/HeapExpansion/pluggaps.csproj +++ b/tests/src/GC/Features/HeapExpansion/pluggaps.csproj @@ -14,6 +14,7 @@ ..\..\ 7a9bfb7d true + true diff --git a/tests/src/GC/Performance/Framework/GCPerfTestFramework.csproj b/tests/src/GC/Performance/Framework/GCPerfTestFramework.csproj index cc8261f26e..d013349cc9 100644 --- a/tests/src/GC/Performance/Framework/GCPerfTestFramework.csproj +++ b/tests/src/GC/Performance/Framework/GCPerfTestFramework.csproj @@ -35,11 +35,12 @@ x64 - - packages\Microsoft.Diagnostics.Tracing.TraceEvent.1.0.39\lib\net40\Microsoft.Diagnostics.Tracing.TraceEvent.dll + + packages\Microsoft.Diagnostics.Tracing.TraceEvent.1.0.41\lib\net40\Microsoft.Diagnostics.Tracing.TraceEvent.dll True + packages\System.IO.FileSystem.4.0.0\lib\net46\System.IO.FileSystem.dll @@ -56,27 +57,27 @@ - packages\Microsoft.DotNet.xunit.performance.metrics.1.0.0-alpha-build0030\lib\net46\xunit.abstractions.dll + packages\Microsoft.DotNet.xunit.performance.metrics.1.0.0-alpha-build0040\lib\net46\xunit.abstractions.dll True - - packages\xunit.extensibility.core.2.1.0\lib\dotnet\xunit.core.dll + + packages\xunit.extensibility.core.2.2.0-beta2-build3300\lib\netstandard1.0\xunit.core.dll True - - packages\xunit.extensibility.execution.2.1.0\lib\net45\xunit.execution.desktop.dll + + packages\xunit.extensibility.execution.2.2.0-beta2-build3300\lib\net45\xunit.execution.desktop.dll True - - packages\Microsoft.DotNet.xunit.performance.metrics.1.0.0-alpha-build0030\lib\net46\xunit.performance.core.dll + + packages\Microsoft.DotNet.xunit.performance.metrics.1.0.0-alpha-build0040\lib\net46\xunit.performance.core.dll True - - packages\Microsoft.DotNet.xunit.performance.1.0.0-alpha-build0030\lib\net46\xunit.performance.execution.desktop.dll + + packages\Microsoft.DotNet.xunit.performance.1.0.0-alpha-build0040\lib\net46\xunit.performance.execution.desktop.dll True - - packages\Microsoft.DotNet.xunit.performance.metrics.1.0.0-alpha-build0030\lib\net46\xunit.performance.metrics.dll + + packages\Microsoft.DotNet.xunit.performance.metrics.1.0.0-alpha-build0040\lib\net46\xunit.performance.metrics.dll True @@ -102,12 +103,12 @@ - + This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - + @@ -36,4 +37,4 @@ - \ No newline at end of file + diff --git a/tests/src/GC/Scenarios/DoublinkList/dlcollect.cs b/tests/src/GC/Scenarios/DoublinkList/dlcollect.cs index a3a0c53dac..a17e95a270 100644 --- a/tests/src/GC/Scenarios/DoublinkList/dlcollect.cs +++ b/tests/src/GC/Scenarios/DoublinkList/dlcollect.cs @@ -77,6 +77,12 @@ namespace DoubLink { GC.WaitForPendingFinalizers(); + if (DLinkNode.FinalCount != iRep * iObj * 10) + { + // see github#4093 for the rationale for fail-fast in this test. + Environment.FailFast(string.Empty); + } + Console.WriteLine("{0} DLinkNodes finalized", DLinkNode.FinalCount); return (DLinkNode.FinalCount==iRep*iObj*10); } diff --git a/tests/src/GC/Scenarios/DoublinkList/dlstack.cs b/tests/src/GC/Scenarios/DoublinkList/dlstack.cs index 5aea9586c4..5e207bec52 100644 --- a/tests/src/GC/Scenarios/DoublinkList/dlstack.cs +++ b/tests/src/GC/Scenarios/DoublinkList/dlstack.cs @@ -85,6 +85,12 @@ namespace DoubLink { curTotalMemory = GC.GetTotalMemory(false); } + if (DLinkNode.FinalCount != iRep * iObj * 10) + { + // see github#4093 for the rationale for fail-fast in this test. + Environment.FailFast(string.Empty); + } + Console.WriteLine("{0} DLinkNodes finalized", DLinkNode.FinalCount); return (DLinkNode.FinalCount==iRep*iObj*10); diff --git a/tests/src/GC/Scenarios/DoublinkList/doublinkgen.cs b/tests/src/GC/Scenarios/DoublinkList/doublinkgen.cs index 9c5e4b6b04..76436ea7fe 100644 --- a/tests/src/GC/Scenarios/DoublinkList/doublinkgen.cs +++ b/tests/src/GC/Scenarios/DoublinkList/doublinkgen.cs @@ -71,6 +71,12 @@ namespace DoubLink { GC.WaitForPendingFinalizers(); GC.Collect(); + if (DLinkNode.FinalCount != iRep * iObj) + { + // see github#4093 for the rationale for fail-fast in this test. + Environment.FailFast(string.Empty); + } + Console.Write(DLinkNode.FinalCount); Console.WriteLine(" DLinkNodes finalized"); return (DLinkNode.FinalCount==iRep*iObj); diff --git a/tests/src/GC/Scenarios/FinalizeTimeout/FinalizeTimeout.cs b/tests/src/GC/Scenarios/FinalizeTimeout/FinalizeTimeout.cs index 0fda8172e4..60a6861734 100644 --- a/tests/src/GC/Scenarios/FinalizeTimeout/FinalizeTimeout.cs +++ b/tests/src/GC/Scenarios/FinalizeTimeout/FinalizeTimeout.cs @@ -17,6 +17,7 @@ public class FinalizeTimeout do { finalizableObject = new BlockingFinalizerOnShutdown(); + GC.KeepAlive(finalizableObject); } while (!BlockingFinalizerOnShutdown.finalizerCompletedOnce); // Start a bunch of threads that allocate continuously, to increase the chance that when Main returns, one of the @@ -42,12 +43,15 @@ public class FinalizeTimeout { byte[] b; while (true) + { b = new byte[1024]; + GC.KeepAlive(b); + } } private class BlockingFinalizerOnShutdown { - public static bool finalizerCompletedOnce = false; + public volatile static bool finalizerCompletedOnce = false; public bool isLastObject = false; ~BlockingFinalizerOnShutdown() @@ -68,6 +72,7 @@ public class FinalizeTimeout do { o = new object(); + GC.KeepAlive(o); } while ((++i & 0xff) != 0 || (elapsed = DateTime.Now - start) < timeout); Console.WriteLine("Finalizer end"); diff --git a/tests/src/GC/Scenarios/ServerModel/servermodel.csproj b/tests/src/GC/Scenarios/ServerModel/servermodel.csproj index 33fc4efbc8..dff52fc6ad 100644 --- a/tests/src/GC/Scenarios/ServerModel/servermodel.csproj +++ b/tests/src/GC/Scenarios/ServerModel/servermodel.csproj @@ -15,6 +15,7 @@ 7a9bfb7d /numrequests:100 true + true diff --git a/tests/src/GC/Stress/Framework/ReliabilityFramework.csproj b/tests/src/GC/Stress/Framework/ReliabilityFramework.csproj index 9288e52ffe..9dd878b8db 100644 --- a/tests/src/GC/Stress/Framework/ReliabilityFramework.csproj +++ b/tests/src/GC/Stress/Framework/ReliabilityFramework.csproj @@ -52,6 +52,6 @@ - + diff --git a/tests/src/GC/Stress/Tests/dir.targets b/tests/src/GC/Stress/Tests/dir.targets new file mode 100644 index 0000000000..d4f8bf9251 --- /dev/null +++ b/tests/src/GC/Stress/Tests/dir.targets @@ -0,0 +1,6 @@ + + + true + + + \ No newline at end of file diff --git a/tests/src/Interop/ArrayMarshalling/ByValArray/MarshalArrayByValNative.cpp b/tests/src/Interop/ArrayMarshalling/ByValArray/MarshalArrayByValNative.cpp index bf3d66d41c..27de41a826 100644 --- a/tests/src/Interop/ArrayMarshalling/ByValArray/MarshalArrayByValNative.cpp +++ b/tests/src/Interop/ArrayMarshalling/ByValArray/MarshalArrayByValNative.cpp @@ -185,84 +185,84 @@ Function /*---------------------------------------------------------------------------- marshal sequential strut ----------------------------------------------------------------------------*/ -extern "C" DLL_EXPORT BOOL TakeIntArraySeqStructByVal( S_INTArray s, int size ) +extern "C" DLL_EXPORT BOOL WINAPI TakeIntArraySeqStructByVal( S_INTArray s, int size ) { CHECK_PARAM_NOT_EMPTY( s.arr ); INIT_EXPECTED( INT, ARRAY_SIZE ); return Equals( s.arr, size, expected, ARRAY_SIZE ); } -extern "C" DLL_EXPORT BOOL TakeUIntArraySeqStructByVal( S_UINTArray s, int size ) +extern "C" DLL_EXPORT BOOL WINAPI TakeUIntArraySeqStructByVal( S_UINTArray s, int size ) { CHECK_PARAM_NOT_EMPTY( s.arr ); INIT_EXPECTED( UINT, ARRAY_SIZE ); return Equals( s.arr, size, expected, ARRAY_SIZE ); } -extern "C" DLL_EXPORT BOOL TakeShortArraySeqStructByVal( S_SHORTArray s, int size ) +extern "C" DLL_EXPORT BOOL WINAPI TakeShortArraySeqStructByVal( S_SHORTArray s, int size ) { CHECK_PARAM_NOT_EMPTY( s.arr ); INIT_EXPECTED( SHORT, ARRAY_SIZE ); return Equals( s.arr, size, expected, ARRAY_SIZE ); } -extern "C" DLL_EXPORT BOOL TakeWordArraySeqStructByVal( S_WORDArray s, int size ) +extern "C" DLL_EXPORT BOOL WINAPI TakeWordArraySeqStructByVal( S_WORDArray s, int size ) { CHECK_PARAM_NOT_EMPTY( s.arr ); INIT_EXPECTED( WORD, ARRAY_SIZE ); return Equals( s.arr, size, expected, ARRAY_SIZE ); } -extern "C" DLL_EXPORT BOOL TakeLong64ArraySeqStructByVal( S_LONG64Array s, int size ) +extern "C" DLL_EXPORT BOOL WINAPI TakeLong64ArraySeqStructByVal( S_LONG64Array s, int size ) { CHECK_PARAM_NOT_EMPTY( s.arr ); INIT_EXPECTED( LONG64, ARRAY_SIZE ); return Equals( s.arr, size, expected, ARRAY_SIZE ); } -extern "C" DLL_EXPORT BOOL TakeULong64ArraySeqStructByVal( S_ULONG64Array s, int size ) +extern "C" DLL_EXPORT BOOL WINAPI TakeULong64ArraySeqStructByVal( S_ULONG64Array s, int size ) { CHECK_PARAM_NOT_EMPTY( s.arr ); INIT_EXPECTED( ULONG64, ARRAY_SIZE ); return Equals( s.arr, size, expected, ARRAY_SIZE ); } -extern "C" DLL_EXPORT BOOL TakeDoubleArraySeqStructByVal( S_DOUBLEArray s, int size ) +extern "C" DLL_EXPORT BOOL WINAPI TakeDoubleArraySeqStructByVal( S_DOUBLEArray s, int size ) { CHECK_PARAM_NOT_EMPTY( s.arr ); INIT_EXPECTED( DOUBLE, ARRAY_SIZE ); return Equals( s.arr, size, expected, ARRAY_SIZE ); } -extern "C" DLL_EXPORT BOOL TakeFloatArraySeqStructByVal( S_FLOATArray s, int size ) +extern "C" DLL_EXPORT BOOL WINAPI TakeFloatArraySeqStructByVal( S_FLOATArray s, int size ) { CHECK_PARAM_NOT_EMPTY( s.arr ); INIT_EXPECTED( FLOAT, ARRAY_SIZE ); return Equals( s.arr, size, expected, ARRAY_SIZE ); } -extern "C" DLL_EXPORT BOOL TakeByteArraySeqStructByVal( S_BYTEArray s, int size ) +extern "C" DLL_EXPORT BOOL WINAPI TakeByteArraySeqStructByVal( S_BYTEArray s, int size ) { CHECK_PARAM_NOT_EMPTY( s.arr ); INIT_EXPECTED( BYTE, ARRAY_SIZE ); return Equals( s.arr, size, expected, ARRAY_SIZE ); } -extern "C" DLL_EXPORT BOOL TakeCharArraySeqStructByVal( S_CHARArray s, int size ) +extern "C" DLL_EXPORT BOOL WINAPI TakeCharArraySeqStructByVal( S_CHARArray s, int size ) { CHECK_PARAM_NOT_EMPTY( s.arr ); INIT_EXPECTED( CHAR, ARRAY_SIZE ); return Equals( s.arr, size, expected, ARRAY_SIZE ); } -extern "C" DLL_EXPORT BOOL TakeIntPtrArraySeqStructByVal(S_DWORD_PTRArray s, int size) +extern "C" DLL_EXPORT BOOL WINAPI TakeIntPtrArraySeqStructByVal(S_DWORD_PTRArray s, int size) { CHECK_PARAM_NOT_EMPTY(s.arr); INIT_EXPECTED( DWORD_PTR, ARRAY_SIZE); return Equals(s.arr, size, expected, ARRAY_SIZE); } -extern "C" DLL_EXPORT BOOL TakeLPSTRArraySeqStructByVal( S_LPSTRArray s, int size ) +extern "C" DLL_EXPORT BOOL WINAPI TakeLPSTRArraySeqStructByVal( S_LPSTRArray s, int size ) { CHECK_PARAM_NOT_EMPTY( s.arr ); @@ -273,7 +273,7 @@ extern "C" DLL_EXPORT BOOL TakeLPSTRArraySeqStructByVal( S_LPSTRArray s, int siz return Equals( s.arr, size, expected, ARRAY_SIZE ); } -extern "C" DLL_EXPORT BOOL TakeLPCSTRArraySeqStructByVal( S_LPCSTRArray s, int size ) +extern "C" DLL_EXPORT BOOL WINAPI TakeLPCSTRArraySeqStructByVal( S_LPCSTRArray s, int size ) { CHECK_PARAM_NOT_EMPTY( s.arr ); @@ -286,7 +286,7 @@ extern "C" DLL_EXPORT BOOL TakeLPCSTRArraySeqStructByVal( S_LPCSTRArray s, int s -extern "C" DLL_EXPORT BOOL TakeStructArraySeqStructByVal( S_StructArray s, int size ) +extern "C" DLL_EXPORT BOOL WINAPI TakeStructArraySeqStructByVal( S_StructArray s, int size ) { CHECK_PARAM_NOT_EMPTY( s.arr ); @@ -297,69 +297,69 @@ extern "C" DLL_EXPORT BOOL TakeStructArraySeqStructByVal( S_StructArray s, int s /*---------------------------------------------------------------------------- marshal sequential class ----------------------------------------------------------------------------*/ -extern "C" DLL_EXPORT BOOL TakeIntArraySeqClassByVal( S_INTArray *s, int size ) +extern "C" DLL_EXPORT BOOL WINAPI TakeIntArraySeqClassByVal( S_INTArray *s, int size ) { return TakeIntArraySeqStructByVal( *s, size ); } -extern "C" DLL_EXPORT BOOL TakeUIntArraySeqClassByVal( S_UINTArray *s, int size ) +extern "C" DLL_EXPORT BOOL WINAPI TakeUIntArraySeqClassByVal( S_UINTArray *s, int size ) { return TakeUIntArraySeqStructByVal( *s, size ); } -extern "C" DLL_EXPORT BOOL TakeShortArraySeqClassByVal( S_SHORTArray *s, int size ) +extern "C" DLL_EXPORT BOOL WINAPI TakeShortArraySeqClassByVal( S_SHORTArray *s, int size ) { return TakeShortArraySeqStructByVal( *s, size ); } -extern "C" DLL_EXPORT BOOL TakeWordArraySeqClassByVal( S_WORDArray *s, int size ) +extern "C" DLL_EXPORT BOOL WINAPI TakeWordArraySeqClassByVal( S_WORDArray *s, int size ) { return TakeWordArraySeqStructByVal( *s, size ); } -extern "C" DLL_EXPORT BOOL TakeLong64ArraySeqClassByVal( S_LONG64Array *s, int size ) +extern "C" DLL_EXPORT BOOL WINAPI TakeLong64ArraySeqClassByVal( S_LONG64Array *s, int size ) { return TakeLong64ArraySeqStructByVal( *s, size ); } -extern "C" DLL_EXPORT BOOL TakeULong64ArraySeqClassByVal( S_ULONG64Array *s, int size ) +extern "C" DLL_EXPORT BOOL WINAPI TakeULong64ArraySeqClassByVal( S_ULONG64Array *s, int size ) { return TakeULong64ArraySeqStructByVal( *s, size ); } -extern "C" DLL_EXPORT BOOL TakeDoubleArraySeqClassByVal( S_DOUBLEArray *s, int size ) +extern "C" DLL_EXPORT BOOL WINAPI TakeDoubleArraySeqClassByVal( S_DOUBLEArray *s, int size ) { return TakeDoubleArraySeqStructByVal( *s, size ); } -extern "C" DLL_EXPORT BOOL TakeFloatArraySeqClassByVal( S_FLOATArray *s, int size ) +extern "C" DLL_EXPORT BOOL WINAPI TakeFloatArraySeqClassByVal( S_FLOATArray *s, int size ) { return TakeFloatArraySeqStructByVal( *s, size ); } -extern "C" DLL_EXPORT BOOL TakeByteArraySeqClassByVal( S_BYTEArray *s, int size ) +extern "C" DLL_EXPORT BOOL WINAPI TakeByteArraySeqClassByVal( S_BYTEArray *s, int size ) { return TakeByteArraySeqStructByVal( *s, size ); } -extern "C" DLL_EXPORT BOOL TakeCharArraySeqClassByVal( S_CHARArray *s, int size ) +extern "C" DLL_EXPORT BOOL WINAPI TakeCharArraySeqClassByVal( S_CHARArray *s, int size ) { return TakeCharArraySeqStructByVal( *s, size ); } -extern "C" DLL_EXPORT BOOL TakeLPSTRArraySeqClassByVal( S_LPSTRArray *s, int size ) +extern "C" DLL_EXPORT BOOL WINAPI TakeLPSTRArraySeqClassByVal( S_LPSTRArray *s, int size ) { return TakeLPSTRArraySeqStructByVal( *s, size ); } -extern "C" DLL_EXPORT BOOL TakeLPCSTRArraySeqClassByVal( S_LPCSTRArray *s, int size ) +extern "C" DLL_EXPORT BOOL WINAPI TakeLPCSTRArraySeqClassByVal( S_LPCSTRArray *s, int size ) { return TakeLPCSTRArraySeqStructByVal( *s, size ); } -extern "C" DLL_EXPORT BOOL TakeStructArraySeqClassByVal( S_StructArray *s, int size ) +extern "C" DLL_EXPORT BOOL WINAPI TakeStructArraySeqClassByVal( S_StructArray *s, int size ) { return TakeStructArraySeqStructByVal( *s, size ); } @@ -367,69 +367,69 @@ extern "C" DLL_EXPORT BOOL TakeStructArraySeqClassByVal( S_StructArray *s, int s /*---------------------------------------------------------------------------- marshal explicit struct ----------------------------------------------------------------------------*/ -extern "C" DLL_EXPORT BOOL TakeIntArrayExpStructByVal( S_INTArray s, int size ) +extern "C" DLL_EXPORT BOOL WINAPI TakeIntArrayExpStructByVal( S_INTArray s, int size ) { return TakeIntArraySeqStructByVal( s, size ); } -extern "C" DLL_EXPORT BOOL TakeUIntArrayExpStructByVal( S_UINTArray s, int size ) +extern "C" DLL_EXPORT BOOL WINAPI TakeUIntArrayExpStructByVal( S_UINTArray s, int size ) { return TakeUIntArraySeqStructByVal( s, size ); } -extern "C" DLL_EXPORT BOOL TakeShortArrayExpStructByVal( S_SHORTArray s, int size ) +extern "C" DLL_EXPORT BOOL WINAPI TakeShortArrayExpStructByVal( S_SHORTArray s, int size ) { return TakeShortArraySeqStructByVal( s, size ); } -extern "C" DLL_EXPORT BOOL TakeWordArrayExpStructByVal( S_WORDArray s, int size ) +extern "C" DLL_EXPORT BOOL WINAPI TakeWordArrayExpStructByVal( S_WORDArray s, int size ) { return TakeWordArraySeqStructByVal( s, size ); } -extern "C" DLL_EXPORT BOOL TakeLong64ArrayExpStructByVal( S_LONG64Array s, int size ) +extern "C" DLL_EXPORT BOOL WINAPI TakeLong64ArrayExpStructByVal( S_LONG64Array s, int size ) { return TakeLong64ArraySeqStructByVal( s, size ); } -extern "C" DLL_EXPORT BOOL TakeULong64ArrayExpStructByVal( S_ULONG64Array s, int size ) +extern "C" DLL_EXPORT BOOL WINAPI TakeULong64ArrayExpStructByVal( S_ULONG64Array s, int size ) { return TakeULong64ArraySeqStructByVal( s, size ); } -extern "C" DLL_EXPORT BOOL TakeDoubleArrayExpStructByVal( S_DOUBLEArray s, int size ) +extern "C" DLL_EXPORT BOOL WINAPI TakeDoubleArrayExpStructByVal( S_DOUBLEArray s, int size ) { return TakeDoubleArraySeqStructByVal( s, size ); } -extern "C" DLL_EXPORT BOOL TakeFloatArrayExpStructByVal( S_FLOATArray s, int size ) +extern "C" DLL_EXPORT BOOL WINAPI TakeFloatArrayExpStructByVal( S_FLOATArray s, int size ) { return TakeFloatArraySeqStructByVal( s, size ); } -extern "C" DLL_EXPORT BOOL TakeByteArrayExpStructByVal( S_BYTEArray s, int size ) +extern "C" DLL_EXPORT BOOL WINAPI TakeByteArrayExpStructByVal( S_BYTEArray s, int size ) { return TakeByteArraySeqStructByVal( s, size ); } -extern "C" DLL_EXPORT BOOL TakeCharArrayExpStructByVal( S_CHARArray s, int size ) +extern "C" DLL_EXPORT BOOL WINAPI TakeCharArrayExpStructByVal( S_CHARArray s, int size ) { return TakeCharArraySeqStructByVal( s, size ); } -extern "C" DLL_EXPORT BOOL TakeLPSTRArrayExpStructByVal( S_LPSTRArray s, int size ) +extern "C" DLL_EXPORT BOOL WINAPI TakeLPSTRArrayExpStructByVal( S_LPSTRArray s, int size ) { return TakeLPSTRArraySeqStructByVal( s, size ); } -extern "C" DLL_EXPORT BOOL TakeLPCSTRArrayExpStructByVal( S_LPCSTRArray s, int size ) +extern "C" DLL_EXPORT BOOL WINAPI TakeLPCSTRArrayExpStructByVal( S_LPCSTRArray s, int size ) { return TakeLPCSTRArraySeqStructByVal( s, size ); } -extern "C" DLL_EXPORT BOOL TakeStructArrayExpStructByVal( S_StructArray s, int size ) +extern "C" DLL_EXPORT BOOL WINAPI TakeStructArrayExpStructByVal( S_StructArray s, int size ) { return TakeStructArraySeqStructByVal( s, size ); } @@ -437,69 +437,69 @@ extern "C" DLL_EXPORT BOOL TakeStructArrayExpStructByVal( S_StructArray s, int s /*---------------------------------------------------------------------------- marshal explicit class ----------------------------------------------------------------------------*/ -extern "C" DLL_EXPORT BOOL TakeIntArrayExpClassByVal( S_INTArray *s, int size ) +extern "C" DLL_EXPORT BOOL WINAPI TakeIntArrayExpClassByVal( S_INTArray *s, int size ) { return TakeIntArraySeqStructByVal( *s, size ); } -extern "C" DLL_EXPORT BOOL TakeUIntArrayExpClassByVal( S_UINTArray *s, int size ) +extern "C" DLL_EXPORT BOOL WINAPI TakeUIntArrayExpClassByVal( S_UINTArray *s, int size ) { return TakeUIntArraySeqStructByVal( *s, size ); } -extern "C" DLL_EXPORT BOOL TakeShortArrayExpClassByVal( S_SHORTArray *s, int size ) +extern "C" DLL_EXPORT BOOL WINAPI TakeShortArrayExpClassByVal( S_SHORTArray *s, int size ) { return TakeShortArraySeqStructByVal( *s, size ); } -extern "C" DLL_EXPORT BOOL TakeWordArrayExpClassByVal( S_WORDArray *s, int size ) +extern "C" DLL_EXPORT BOOL WINAPI TakeWordArrayExpClassByVal( S_WORDArray *s, int size ) { return TakeWordArraySeqStructByVal( *s, size ); } -extern "C" DLL_EXPORT BOOL TakeLong64ArrayExpClassByVal( S_LONG64Array *s, int size ) +extern "C" DLL_EXPORT BOOL WINAPI TakeLong64ArrayExpClassByVal( S_LONG64Array *s, int size ) { return TakeLong64ArraySeqStructByVal( *s, size ); } -extern "C" DLL_EXPORT BOOL TakeULong64ArrayExpClassByVal( S_ULONG64Array *s, int size ) +extern "C" DLL_EXPORT BOOL WINAPI TakeULong64ArrayExpClassByVal( S_ULONG64Array *s, int size ) { return TakeULong64ArraySeqStructByVal( *s, size ); } -extern "C" DLL_EXPORT BOOL TakeDoubleArrayExpClassByVal( S_DOUBLEArray *s, int size ) +extern "C" DLL_EXPORT BOOL WINAPI TakeDoubleArrayExpClassByVal( S_DOUBLEArray *s, int size ) { return TakeDoubleArraySeqStructByVal( *s, size ); } -extern "C" DLL_EXPORT BOOL TakeFloatArrayExpClassByVal( S_FLOATArray *s, int size ) +extern "C" DLL_EXPORT BOOL WINAPI TakeFloatArrayExpClassByVal( S_FLOATArray *s, int size ) { return TakeFloatArraySeqStructByVal( *s, size ); } -extern "C" DLL_EXPORT BOOL TakeByteArrayExpClassByVal( S_BYTEArray *s, int size ) +extern "C" DLL_EXPORT BOOL WINAPI TakeByteArrayExpClassByVal( S_BYTEArray *s, int size ) { return TakeByteArraySeqStructByVal( *s, size ); } -extern "C" DLL_EXPORT BOOL TakeCharArrayExpClassByVal( S_CHARArray *s, int size ) +extern "C" DLL_EXPORT BOOL WINAPI TakeCharArrayExpClassByVal( S_CHARArray *s, int size ) { return TakeCharArraySeqStructByVal( *s, size ); } -extern "C" DLL_EXPORT BOOL TakeLPSTRArrayExpClassByVal( S_LPSTRArray *s, int size ) +extern "C" DLL_EXPORT BOOL WINAPI TakeLPSTRArrayExpClassByVal( S_LPSTRArray *s, int size ) { return TakeLPSTRArraySeqStructByVal( *s, size ); } -extern "C" DLL_EXPORT BOOL TakeLPCSTRArrayExpClassByVal( S_LPCSTRArray *s, int size ) +extern "C" DLL_EXPORT BOOL WINAPI TakeLPCSTRArrayExpClassByVal( S_LPCSTRArray *s, int size ) { return TakeLPCSTRArraySeqStructByVal( *s, size ); } -extern "C" DLL_EXPORT BOOL TakeStructArrayExpClassByVal( S_StructArray *s, int size ) +extern "C" DLL_EXPORT BOOL WINAPI TakeStructArrayExpClassByVal( S_StructArray *s, int size ) { return TakeStructArraySeqStructByVal( *s, size ); } @@ -507,77 +507,77 @@ extern "C" DLL_EXPORT BOOL TakeStructArrayExpClassByVal( S_StructArray *s, int s /*---------------------------------------------------------------------------- return a struct including a C array ----------------------------------------------------------------------------*/ -extern "C" DLL_EXPORT S_INTArray* S_INTArray_Ret() +extern "C" DLL_EXPORT S_INTArray* WINAPI S_INTArray_Ret() { INIT_EXPECTED_STRUCT( S_INTArray, ARRAY_SIZE, INT ); return expected; } -extern "C" DLL_EXPORT S_UINTArray* S_UINTArray_Ret() +extern "C" DLL_EXPORT S_UINTArray* WINAPI S_UINTArray_Ret() { INIT_EXPECTED_STRUCT( S_UINTArray, ARRAY_SIZE, UINT ); return expected; } -extern "C" DLL_EXPORT S_SHORTArray* S_SHORTArray_Ret() +extern "C" DLL_EXPORT S_SHORTArray* WINAPI S_SHORTArray_Ret() { INIT_EXPECTED_STRUCT( S_SHORTArray, ARRAY_SIZE, SHORT ); return expected; } -extern "C" DLL_EXPORT S_WORDArray* S_WORDArray_Ret() +extern "C" DLL_EXPORT S_WORDArray* WINAPI S_WORDArray_Ret() { INIT_EXPECTED_STRUCT( S_WORDArray, ARRAY_SIZE, WORD ); return expected; } -extern "C" DLL_EXPORT S_LONG64Array* S_LONG64Array_Ret() +extern "C" DLL_EXPORT S_LONG64Array* WINAPI S_LONG64Array_Ret() { INIT_EXPECTED_STRUCT( S_LONG64Array, ARRAY_SIZE, LONG64 ); return expected; } -extern "C" DLL_EXPORT S_ULONG64Array* S_ULONG64Array_Ret() +extern "C" DLL_EXPORT S_ULONG64Array* WINAPI S_ULONG64Array_Ret() { INIT_EXPECTED_STRUCT( S_ULONG64Array, ARRAY_SIZE, ULONG64 ); return expected; } -extern "C" DLL_EXPORT S_DOUBLEArray* S_DOUBLEArray_Ret() +extern "C" DLL_EXPORT S_DOUBLEArray* WINAPI S_DOUBLEArray_Ret() { INIT_EXPECTED_STRUCT( S_DOUBLEArray, ARRAY_SIZE, DOUBLE ); return expected; } -extern "C" DLL_EXPORT S_FLOATArray* S_FLOATArray_Ret() +extern "C" DLL_EXPORT S_FLOATArray* WINAPI S_FLOATArray_Ret() { INIT_EXPECTED_STRUCT( S_FLOATArray, ARRAY_SIZE, FLOAT ); return expected; } -extern "C" DLL_EXPORT S_BYTEArray* S_BYTEArray_Ret() +extern "C" DLL_EXPORT S_BYTEArray* WINAPI S_BYTEArray_Ret() { INIT_EXPECTED_STRUCT( S_BYTEArray, ARRAY_SIZE, BYTE ); return expected; } -extern "C" DLL_EXPORT S_CHARArray* S_CHARArray_Ret() +extern "C" DLL_EXPORT S_CHARArray* WINAPI S_CHARArray_Ret() { INIT_EXPECTED_STRUCT( S_CHARArray, ARRAY_SIZE, CHAR ); return expected; } -extern "C" DLL_EXPORT S_LPSTRArray* S_LPSTRArray_Ret() +extern "C" DLL_EXPORT S_LPSTRArray* WINAPI S_LPSTRArray_Ret() { S_LPSTRArray *expected = (S_LPSTRArray *)::CoTaskMemAlloc( sizeof(S_LPSTRArray) ); for ( int i = 0; i < ARRAY_SIZE; ++i ) @@ -587,7 +587,7 @@ extern "C" DLL_EXPORT S_LPSTRArray* S_LPSTRArray_Ret() } -extern "C" DLL_EXPORT S_StructArray* S_StructArray_Ret() +extern "C" DLL_EXPORT S_StructArray* WINAPI S_StructArray_Ret() { S_StructArray *expected = (S_StructArray *)::CoTaskMemAlloc( sizeof(S_StructArray) ); for ( int i = 0; i < ARRAY_SIZE; ++i ) diff --git a/tests/src/Interop/PrimitiveMarshalling/Bool/BoolNative.cpp b/tests/src/Interop/PrimitiveMarshalling/Bool/BoolNative.cpp index ba8c10bd77..79ab5c9a8f 100644 --- a/tests/src/Interop/PrimitiveMarshalling/Bool/BoolNative.cpp +++ b/tests/src/Interop/PrimitiveMarshalling/Bool/BoolNative.cpp @@ -116,8 +116,10 @@ extern "C" DLL_EXPORT BOOL __stdcall MarshalPointer_Out(/*[out]*/ BOOL *pboolVal } #pragma warning(push) +#if _MSC_VER <= 1900 // 'BOOL' forcing value to bool 'true' or 'false' #pragma warning(disable: 4800) +#endif extern "C" DLL_EXPORT bool __stdcall Marshal_As_In(/*[in]*/bool boolValue) { diff --git a/tests/src/Interop/RefCharArray/RefCharArrayNative.cpp b/tests/src/Interop/RefCharArray/RefCharArrayNative.cpp index 09f4671858..0d0af27412 100755 --- a/tests/src/Interop/RefCharArray/RefCharArrayNative.cpp +++ b/tests/src/Interop/RefCharArray/RefCharArrayNative.cpp @@ -6,7 +6,7 @@ #include #include -size_t LEN = 10; +const int LEN = 10; extern "C" BOOL DLL_EXPORT _cdecl MarshalRefCharArray_Cdecl(char ** pstr) { //Check the Input diff --git a/tests/src/Interop/SimpleStruct/SimpleStructNative.cpp b/tests/src/Interop/SimpleStruct/SimpleStructNative.cpp index 5fe82146b8..fb855a42e8 100644 --- a/tests/src/Interop/SimpleStruct/SimpleStructNative.cpp +++ b/tests/src/Interop/SimpleStruct/SimpleStructNative.cpp @@ -30,7 +30,7 @@ DLL_EXPORT BOOL _cdecl CdeclSimpleStructByRef(Sstr *p) { p->a = 100; p->b=1; - strncpy(p->str,"after",6); + strcpy_s(p->str, 7, "after"); return TRUE; } @@ -81,7 +81,7 @@ DLL_EXPORT ExplStruct* _cdecl CdeclSimpleExplStruct(ExplStruct p,BOOL *result) } extern "C" -DLL_EXPORT voidPtr _cdecl GetFptr(int i) +DLL_EXPORT voidPtr __stdcall GetFptr(int i) { switch(i) { diff --git a/tests/src/Interop/StringMarshalling/UTF8/UTF8TestNative.cpp b/tests/src/Interop/StringMarshalling/UTF8/UTF8TestNative.cpp index f4e0f2f950..700765143c 100644 --- a/tests/src/Interop/StringMarshalling/UTF8/UTF8TestNative.cpp +++ b/tests/src/Interop/StringMarshalling/UTF8/UTF8TestNative.cpp @@ -6,7 +6,7 @@ const int NSTRINGS = 6; #ifdef _WIN32 -wchar_t *utf8strings[] = { L"Managed", +const wchar_t *utf8strings[] = { L"Managed", L"S\x00EEne kl\x00E2wen durh die wolken sint geslagen" , L"\x0915\x093E\x091A\x0902 \x0936\x0915\x094D\x0928\x094B\x092E\x094D\x092F\x0924\x094D\x0924\x0941\x092E\x094D \x0964 \x0928\x094B\x092A\x0939\x093F\x0928\x0938\x094D\x0924\x093F \x092E\x093E\x092E\x094D", L"\x6211\x80FD\x541E\x4E0B\x73BB\x7483\x800C\x4E0D\x4F24\x8EAB\x4F53", @@ -17,7 +17,7 @@ L"\0" -char* utf16_to_utf8(wchar_t *srcstring) +char* utf16_to_utf8(const wchar_t *srcstring) { if ((srcstring == NULL) || (*srcstring == L'\0')) { return 0; diff --git a/tests/src/Interop/StructMarshalling/PInvoke/MarshalStructAsParamDLL.cpp b/tests/src/Interop/StructMarshalling/PInvoke/MarshalStructAsParamDLL.cpp index fe9ceeaa40..08954434ae 100644 --- a/tests/src/Interop/StructMarshalling/PInvoke/MarshalStructAsParamDLL.cpp +++ b/tests/src/Interop/StructMarshalling/PInvoke/MarshalStructAsParamDLL.cpp @@ -167,22 +167,10 @@ extern "C" DLL_EXPORT BOOL WINAPI MarshalStructAsParam_AsSeqByValOut3(CharSetAns } extern "C" DLL_EXPORT BOOL WINAPI MarshalStructAsParam_AsSeqByRefOut3(CharSetAnsiSequential* str1) { - char const* strSource = "change string"; - int len = strlen(strSource); - LPCSTR temp = (LPCSTR)TP_CoTaskMemAlloc((sizeof(char)*len)+1); - if(temp != NULL) - { - TP_CoTaskMemFree((void*)(str1->f1)); - strcpy((char*)temp,strSource); - str1->f1 = temp; - str1->f2 = 'n'; - return TRUE; - } - else - { - printf("Memory Allocated Failed !"); - return FALSE; - } + TP_CoTaskMemFree((void*)(str1->f1)); + str1->f1 = CoStrDup("change string"); + str1->f2 = 'n'; + return TRUE; } //////////////////////////////////////////////////////////////////////////////////////////////// @@ -663,7 +651,7 @@ extern "C" DLL_EXPORT BOOL WINAPI MarshalStructAsParam_AsSeqByVal14(S11 str1) { if( str1.i32 != 0 || str1.i != 32 ) return FALSE; - str1.i32 = (LPINT)(long)(str1.i); + str1.i32 = reinterpret_cast(static_cast(str1.i)); str1.i = 64; return TRUE; } @@ -673,7 +661,7 @@ extern "C" DLL_EXPORT BOOL WINAPI MarshalStructAsParam_AsSeqByRef14(S11* str1) return FALSE; else { - str1->i32 = (LPINT)(long)(str1->i); + str1->i32 = reinterpret_cast(static_cast(str1->i)); str1->i = 64; return TRUE; } @@ -684,7 +672,7 @@ extern "C" DLL_EXPORT BOOL WINAPI MarshalStructAsParam_AsSeqByRefIn14(S11* str1) return FALSE; else { - str1->i32 = (LPINT)(long)(str1->i); + str1->i32 = reinterpret_cast(static_cast(str1->i)); str1->i = 64; return TRUE; } @@ -698,7 +686,7 @@ extern "C" DLL_EXPORT BOOL WINAPI MarshalStructAsParam_AsSeqByValOut14(S11 str1) } extern "C" DLL_EXPORT BOOL WINAPI MarshalStructAsParam_AsSeqByRefOut14(S11* str1) { - str1->i32 = (LPINT)(long)(str1->i); + str1->i32 = reinterpret_cast(static_cast(str1->i)); str1->i = 64; return TRUE; } @@ -817,7 +805,7 @@ extern "C" DLL_EXPORT BOOL WINAPI MarshalStructAsParam_AsExpByValInnerArrayExpli return FALSE; } } - if(memcmp((&outer2)->f4,"some string2",12) != 0) + if(memcmp((&outer2)->s.f4,"some string2",12) != 0) { printf("\tMarshalStructAsParam_AsExpByVal3:InnerArrayExplicit param f4 not as expected\n"); return FALSE; @@ -835,7 +823,7 @@ extern "C" DLL_EXPORT BOOL WINAPI MarshalStructAsParam_AsExpByRefInnerArrayExpli return FALSE; } } - if(memcmp(outer2->f4,"some string2",12) != 0) + if(memcmp(outer2->s.f4,"some string2",12) != 0) { printf("\tMarshalStructAsParam_AsExpByRef3:InnerArrayExplicit param f4 not as expected\n"); return FALSE; @@ -844,11 +832,8 @@ extern "C" DLL_EXPORT BOOL WINAPI MarshalStructAsParam_AsExpByRefInnerArrayExpli { outer2->arr[i].f1 = 77; } - char const * temp = "change string2"; - size_t len = strlen(temp); - LPCSTR str = (LPCSTR)TP_CoTaskMemAlloc( sizeof(char)*(len+1) ); - strcpy((char*)str,temp); - outer2->f4 = str; + + outer2->s.f4 = CoStrDup("change string2"); return TRUE; } @@ -862,7 +847,7 @@ extern "C" DLL_EXPORT BOOL WINAPI MarshalStructAsParam_AsExpByRefInInnerArrayExp return FALSE; } } - if(memcmp(outer2->f4, "some string2",12*(sizeof(char))) != 0) + if(memcmp(outer2->s.f4, "some string2",12*(sizeof(char))) != 0) { printf("\tMarshalStructAsParam_AsExpByRefIn3:InnerArrayExplicit param f4 not as expected\n"); return FALSE; @@ -871,11 +856,7 @@ extern "C" DLL_EXPORT BOOL WINAPI MarshalStructAsParam_AsExpByRefInInnerArrayExp { outer2->arr[i].f1 = 77; } - char const * temp = "change string2"; - size_t len = strlen(temp); - LPCSTR str = (LPCSTR)TP_CoTaskMemAlloc( sizeof(char)*(len+1) ); - strcpy((char*)str,temp); - outer2->f4 = str; + outer2->s.f4 = CoStrDup("change string2"); return TRUE; } extern "C" DLL_EXPORT BOOL WINAPI MarshalStructAsParam_AsExpByRefOutInnerArrayExplicit(InnerArrayExplicit* outer2) @@ -884,11 +865,7 @@ extern "C" DLL_EXPORT BOOL WINAPI MarshalStructAsParam_AsExpByRefOutInnerArrayEx { outer2->arr[i].f1 = 77; } - char const * temp = "change string2"; - size_t len = strlen(temp); - LPCSTR str = (LPCSTR)TP_CoTaskMemAlloc( sizeof(char)*(len+1) ); - strcpy((char*)str,temp); - outer2->f4 = str; + outer2->s.f4 = CoStrDup("change string2"); return TRUE; } diff --git a/tests/src/Interop/StructMarshalling/PInvoke/MarshalStructAsParamDLL.h b/tests/src/Interop/StructMarshalling/PInvoke/MarshalStructAsParamDLL.h index bf767271fb..22ad037a6a 100644 --- a/tests/src/Interop/StructMarshalling/PInvoke/MarshalStructAsParamDLL.h +++ b/tests/src/Interop/StructMarshalling/PInvoke/MarshalStructAsParamDLL.h @@ -1,6 +1,17 @@ #include "platformdefines.cpp" #include +inline char* CoStrDup(const char* str) +{ + size_t size = strlen(str) + 1; + char* dup = (char *)TP_CoTaskMemAlloc(size); + if (dup != nullptr) + { + strcpy_s(dup, size, str); + } + return dup; +} + const int NumArrElements = 2; struct InnerSequential { @@ -19,20 +30,7 @@ void ChangeInnerSequential(InnerSequential* p) { p->f1 = 77; p->f2 = 77.0; - - char const * lpstr = "changed string"; - size_t size = sizeof(char) * (strlen(lpstr) + 1); - LPSTR temp = (LPSTR)TP_CoTaskMemAlloc( size ); - memset(temp, 0, size); - if(temp) - { - strcpy( (char*)temp, lpstr ); - p->f3 = temp; - } - else - { - printf("Memory Allocated Failed!"); - } + p->f3 = CoStrDup("changed string"); } bool IsCorrectInnerSequential(InnerSequential* p) @@ -41,13 +39,7 @@ bool IsCorrectInnerSequential(InnerSequential* p) return false; if(p->f2 != 1.0) return false; - - char const * lpstr = "some string"; - size_t size = sizeof(char) * (strlen(lpstr) + 1); - LPSTR temp = (LPSTR)TP_CoTaskMemAlloc( size ); - memset(temp, 0, size); - - if( strcmp((char*)p->f3, temp) != 0 ) + if(strcmp(p->f3, "") != 0) return false; return true; @@ -62,6 +54,7 @@ typedef unsigned short WORD; typedef short SHORT; typedef float FLOAT; typedef double DOUBLE; +typedef long INT_PTR; #endif struct INNER2 // size = 12 bytes @@ -74,11 +67,7 @@ void ChangeINNER2(INNER2* p) { p->f1 = 77; p->f2 = 77.0; - char const * temp = "changed string"; - size_t len = strlen(temp); - LPCSTR str = (LPCSTR)TP_CoTaskMemAlloc( sizeof(char)*(len+1) ); - strcpy((char*)str,temp); - p->f3 = str; + p->f3 = CoStrDup("changed string"); } void PrintINNER2(INNER2* p, char const * name) { @@ -132,12 +121,7 @@ void PrintInnerExplicit(InnerExplicit* p, char const * name) void ChangeInnerExplicit(InnerExplicit* p) { p->f1 = 77; - - char const * temp = "changed string"; - size_t len = strlen(temp); - LPCSTR str = (LPCSTR)TP_CoTaskMemAlloc( sizeof(char)*(len+1) ); - strcpy((char*)str,temp); - p->f3 = str; + p->f3 = CoStrDup("changed string"); } struct InnerArraySequential @@ -157,25 +141,11 @@ void PrintInnerArraySequential(InnerArraySequential* p, char const * name) void ChangeInnerArraySequential(InnerArraySequential* p) { - char const * lpstr = "changed string"; - LPSTR temp; for(int i = 0; i < NumArrElements; i++) { (p->arr)[i].f1 = 77; (p->arr)[i].f2 = 77.0; - - size_t size = sizeof(char) * (strlen(lpstr) + 1); - temp = (LPSTR)TP_CoTaskMemAlloc( size ); - memset(temp, 0, size); - if(temp) - { - strcpy( (char*)temp, lpstr ); - (p->arr)[i].f3 = temp; - } - else - { - printf("Memory Allocated Failed!"); - } + (p->arr)[i].f3 = CoStrDup("changed string"); } } @@ -199,13 +169,14 @@ union InnerArrayExplicit // size = 32 bytes { LONG64 _unused0; LPCSTR f4; - }; - + } s; }; #ifdef WINDOWS #ifdef _WIN64 + #pragma warning(push) + #pragma warning(disable: 4201) // nonstandard extension used: nameless struct/union union OUTER3 // size = 32 bytes { struct InnerSequential arr[2]; @@ -215,6 +186,7 @@ union InnerArrayExplicit // size = 32 bytes LPCSTR f4; }; }; + #pragma warning(pop) #else struct OUTER3 // size = 28 bytes { @@ -244,22 +216,14 @@ void PrintOUTER3(OUTER3* p, char const * name) } void ChangeOUTER3(OUTER3* p) { - char const * temp = "changed string"; - size_t len = strlen(temp); - LPCSTR str = NULL; for(int i = 0; i < NumArrElements; i++) { (p->arr)[i].f1 = 77; (p->arr)[i].f2 = 77.0; - - str = (LPCSTR)TP_CoTaskMemAlloc( sizeof(char)*(len+1) ); - strcpy((char*)str,temp); - (p->arr)[i].f3 = str; + (p->arr)[i].f3 = CoStrDup("changed string"); } - str = (LPCSTR)TP_CoTaskMemAlloc( sizeof(char)*(len+1) ); - strcpy((char*)str,temp); - p->f4 = str; + p->f4 = CoStrDup("changed string"); } bool IsCorrectOUTER3(OUTER3* p) { @@ -293,19 +257,8 @@ void PrintCharSetAnsiSequential(CharSetAnsiSequential* p, char const * name) void ChangeCharSetAnsiSequential(CharSetAnsiSequential* p) { - char const * strSource = "change string"; - size_t size = strlen(strSource) + 1; - LPSTR temp = (LPSTR)TP_CoTaskMemAlloc(size); - if(temp != NULL) - { - strcpy((char*)temp,strSource); - p->f1 = temp; - p->f2 = 'n'; - } - else - { - printf("Memory Allocated Failed!"); - } + p->f1 = CoStrDup("change string"); + p->f2 = 'n'; } bool IsCorrectCharSetAnsiSequential(CharSetAnsiSequential* p) @@ -325,7 +278,11 @@ struct CharSetUnicodeSequential }; void PrintCharSetUnicodeSequential(CharSetUnicodeSequential* p, char const * name) { +#ifdef _WIN32 + wprintf(L"\t%S.f1 = %s\n", name, p->f1); +#else wprintf(L"\t%s.f1 = %S\n", name, p->f1); +#endif printf("\t%s.f2 = %c\n", name, p->f2); } @@ -336,7 +293,7 @@ void ChangeCharSetUnicodeSequential(CharSetUnicodeSequential* p) #else LPCWSTR strSource = u"change string"; #endif - int len = wcslen(strSource); + size_t len = wcslen(strSource); LPCWSTR temp = (LPCWSTR)TP_CoTaskMemAlloc(sizeof(WCHAR)*(len+1)); if(temp != NULL) { @@ -418,7 +375,7 @@ void ChangeNumberSequential(NumberSequential* p) bool IsCorrectNumberSequential(NumberSequential* p) { - if(p->i32 != -0x80000000 || p->ui32 != 0xffffffff || p->s1 != -0x8000 || p->us1 != 0xffff || p->b != 0 || + if(p->i32 != (-0x7fffffff - 1) || p->ui32 != 0xffffffff || p->s1 != -0x8000 || p->us1 != 0xffff || p->b != 0 || p->sb != 0x7f ||p->i16 != -0x8000 || p->ui16 != 0xffff || p->i64 != -1234567890 || p->ui64 != 1234567890 || (p->sgl) != 32.0 || p->d != 3.2) { @@ -448,17 +405,10 @@ void ChangeS3(S3* p) { p->flag = false; - char const * strSource = "change string"; - int len = strlen(strSource); - - LPCSTR temp = (LPCSTR)TP_CoTaskMemAlloc((sizeof(char)*len) + 1); - if(temp != NULL) - { - /*TP_CoTaskMemFree((void *)p->str);*/ - strcpy((char*)temp,strSource); - p->str = temp; - } - for(int i = 1;i<257;i++) + /*TP_CoTaskMemFree((void *)p->str);*/ + p->str = CoStrDup("change string"); + + for(int i = 1;i<257;i++) { p->vals[i-1] = i; } @@ -468,12 +418,7 @@ bool IsCorrectS3(S3* p) { int iflag = 0; - char const * lpstr = "some string"; - size_t size = sizeof(char) * (strlen(lpstr) + 1); - LPSTR temp = (LPSTR)TP_CoTaskMemAlloc( size ); - memset(temp, 0, size); - - if(!p->flag || strcmp((char*)p->str, temp) != 0) + if (!p->flag || strcmp(p->str, "") != 0) return false; for (int i = 0; i < 256; i++) { @@ -514,33 +459,16 @@ void PrintS5(S5* str, char const * name) } void ChangeS5(S5* str) { - Enum1 eInstance = e2; - char const * strSource = "change string"; - int len = strlen(strSource); - LPCSTR temp = (LPCSTR)TP_CoTaskMemAlloc(sizeof(char)*(len+1)); - if(temp != NULL) - { - strcpy((char*)temp,strSource); - str->s4.name = temp; - } + str->s4.name = CoStrDup("change string"); str->s4.age = 64; - str->ef = eInstance; + str->ef = e2; } bool IsCorrectS5(S5* str) { - Enum1 eInstance = e1; - - char const * lpstr = "some string"; - size_t size = sizeof(char) * (strlen(lpstr) + 1); - LPSTR temp = (LPSTR)TP_CoTaskMemAlloc( size ); - memset(temp, 0, size); - - if(str->s4.age != 32 || strcmp((char*)str->s4.name, temp) != 0) + if(str->s4.age != 32 || strcmp(str->s4.name, "") != 0) return false; - if(str->ef != eInstance) - { + if(str->ef != e1) return false; - } return true; } @@ -599,8 +527,13 @@ struct StringStructSequentialUnicode // size = 8 bytes void PrintStringStructSequentialUnicode(StringStructSequentialUnicode* str, char const * name) { +#ifdef _WIN32 + wprintf(L"\t%S.first = %s\n", name, str->first); + wprintf(L"\t%S.last = %s\n", name, str->last); +#else wprintf(L"\t%s.first = %s\n", name, str->first); wprintf(L"\t%s.last = %s\n", name, str->last); +#endif } bool IsCorrectStringStructSequentialUnicode(StringStructSequentialUnicode* str) @@ -674,19 +607,7 @@ bool IsCorrectS8(S8* str) void ChangeS8(S8* str) { - char const * lpstr = "world"; - size_t size = sizeof(char) * (strlen(lpstr) + 1); - LPSTR temp = (LPSTR)TP_CoTaskMemAlloc( size ); - memset(temp, 0, size); - if(temp) - { - strcpy( (char*)temp, lpstr ); - str->name = temp; - } - else - { - printf("Memory Allocated Failed!"); - } + str->name = CoStrDup("world"); str->gender = false; str->jobNum = 1; str->i32 = 256; @@ -787,7 +708,7 @@ void ChangeU(U* p) p->uiPtr = (LPVOID)(64); p->s = 32767; p->us = 0; - p->b = -1; + p->b = 255; p->sb = -128; p->l = -1234567890; p->ul = 0; diff --git a/tests/src/Interop/common/types.h b/tests/src/Interop/common/types.h index 7d7f7768a6..cb59c42e9d 100755 --- a/tests/src/Interop/common/types.h +++ b/tests/src/Interop/common/types.h @@ -28,7 +28,7 @@ typedef void* HMODULE; typedef void* ULONG_PTR; typedef unsigned error_t; typedef void* LPVOID; -typedef char BYTE; +typedef unsigned char BYTE; typedef WCHAR OLECHAR; typedef unsigned int UINT_PTR; @@ -54,4 +54,4 @@ typedef int* DWORD_PTR; #define FALSE 0 #endif -#endif //_INTEROP_TYPES__H \ No newline at end of file +#endif //_INTEROP_TYPES__H diff --git a/tests/src/JIT/CodeGenBringUpTests/Rotate.cs b/tests/src/JIT/CodeGenBringUpTests/Rotate.cs index 74a936ef13..9c5d9599a6 100644 --- a/tests/src/JIT/CodeGenBringUpTests/Rotate.cs +++ b/tests/src/JIT/CodeGenBringUpTests/Rotate.cs @@ -102,11 +102,37 @@ public class Test [MethodImpl(MethodImplOptions.NoInlining)] static ulong rol64const() { - ulong value = flag() ? (ulong)0x123456789abcdef : (ulong)0x123456789abcdef; + ulong value = flag() ? (ulong)0x123456789abcdef : (ulong)0xabcdef123456789; int amount = 16; return (value >> (64 - amount)) | (value << amount); } + [MethodImpl(MethodImplOptions.NoInlining)] + static ulong rol64_16(ulong value) + { + return (value >> (64 - 16)) | (value << 16); + } + + [MethodImpl(MethodImplOptions.NoInlining)] + static ulong rol64_32(ulong value) + { + return (value >> (64 - 32)) | (value << 32); + } + + [MethodImpl(MethodImplOptions.NoInlining)] + static ulong rol64_32_inplace(ulong value, ulong added) + { + ulong x = value + added; + x = (x >> (64 - 32)) | (x << 32); + return x; + } + + [MethodImpl(MethodImplOptions.NoInlining)] + static ulong rol64_33(ulong value) + { + return (value >> (64 - 33)) | (value << 33); + } + [MethodImpl(MethodImplOptions.NoInlining)] ulong rol64field(int amount) { @@ -128,11 +154,37 @@ public class Test [MethodImpl(MethodImplOptions.NoInlining)] static ulong ror64const() { - ulong value = flag() ? (ulong)0x123456789abcdef : (ulong)0x123456789abcdef; + ulong value = flag() ? (ulong)0x123456789abcdef : (ulong)0xabcdef123456789; int amount = flag() ? 5 : 5; return (value << (64 - amount)) | (value >> amount); } + [MethodImpl(MethodImplOptions.NoInlining)] + static ulong ror64_5(ulong value) + { + return (value << (64 - 5)) | (value >> 5); + } + + [MethodImpl(MethodImplOptions.NoInlining)] + static ulong ror64_32(ulong value) + { + return (value << (64 - 32)) | (value >> 32); + } + + [MethodImpl(MethodImplOptions.NoInlining)] + static ulong ror64_33(ulong value) + { + return (value << (64 - 33)) | (value >> 33); + } + + [MethodImpl(MethodImplOptions.NoInlining)] + static ulong ror64_32_inplace(ulong value, ulong added) + { + ulong x = value + added; + x = (x << (64 - 32)) | (x >> 32); + return x; + } + [MethodImpl(MethodImplOptions.NoInlining)] static ulong ror64sfield(int amount) { @@ -244,6 +296,26 @@ public class Test return Fail; } + if (rol64_16(0x123456789abcdef) != 0x456789abcdef0123) + { + return Fail; + } + + if (rol64_32(0x123456789abcdef) != rol64(0x123456789abcdef, 32)) + { + return Fail; + } + + if (rol64_33(0x123456789abcdef) != rol64(0x123456789abcdef, 33)) + { + return Fail; + } + + if (rol64_32_inplace(0x123456789abcdef, 0) != rol64(0x123456789abcdef, 32)) + { + return Fail; + } + if (ror64(0x123456789abcdef, 0) != 0x123456789abcdef) { return Fail; @@ -259,6 +331,26 @@ public class Test return Fail; } + if (ror64_5(0x123456789abcdef) != 0x78091a2b3c4d5e6f) + { + return Fail; + } + + if (ror64_32(0x123456789abcdef) != ror64(0x123456789abcdef, 32)) + { + return Fail; + } + + if (ror64_33(0x123456789abcdef) != ror64(0x123456789abcdef, 33)) + { + return Fail; + } + + if (ror64_32_inplace(0x123456789abcdef, 0) != ror64(0x123456789abcdef, 32)) + { + return Fail; + } + if (rol32_call(0x12345678, 16) != 0x56781234) { return Fail; diff --git a/tests/src/JIT/CodeGenBringUpTests/Shift.cs b/tests/src/JIT/CodeGenBringUpTests/Shift.cs new file mode 100644 index 0000000000..085ad3f31f --- /dev/null +++ b/tests/src/JIT/CodeGenBringUpTests/Shift.cs @@ -0,0 +1,86 @@ +// Licensed to the .NET Foundation under one or more 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.CompilerServices; + +public class Test +{ + [MethodImpl(MethodImplOptions.NoInlining)] + static ulong shl64(ulong shift, int count) + { + return shift << count; + } + + [MethodImpl(MethodImplOptions.NoInlining)] + static ulong shl64_32_inplace(ulong shift, ulong addit) + { + ulong x = shift + addit; + x = x << 32; + return x; + } + + [MethodImpl(MethodImplOptions.NoInlining)] + static ulong shl64_33_inplace(ulong shift, ulong addit) + { + ulong x = shift + addit; + x = x << 33; + return x; + } + + [MethodImpl(MethodImplOptions.NoInlining)] + static ulong shr64(ulong shift, int count) + { + return shift >> count; + } + + [MethodImpl(MethodImplOptions.NoInlining)] + static ulong shr64_32_inplace(ulong shift, ulong addit) + { + ulong x = shift + addit; + x = x >> 32; + return x; + } + + [MethodImpl(MethodImplOptions.NoInlining)] + static ulong shr1_32_add(ulong shift, ulong addit) + { + ulong x = (addit + (shift >> 1)) >> 31; + return x; + } + + public static int Main() + { + const int Pass = 100; + const int Fail = -1; + + if (shl64_32_inplace(0x123456789abcdef, 0) != shl64(0x123456789abcdef, 32)) + { + Console.WriteLine("shl64_32"); + return Fail; + } + + if (shl64_33_inplace(0x123456789abcdef, 0) != shl64(0x123456789abcdef, 33)) + { + Console.WriteLine("shl64_33"); + return Fail; + } + + if (shr64_32_inplace(0x123456789abcdef, 0) != shr64(0x123456789abcdef, 32)) + { + Console.WriteLine("shr64_32 {0:X} {1:X}", shr64_32_inplace(0x123456789abcdef, 0), shr64(0x123456789abcdef, 32)); + return Fail; + } + + if (shr1_32_add(0x123456789abcdef, 0) != shr64(0x123456789abcdef, 32)) + { + Console.WriteLine("HAHAHAHAHAHAHA {0:X}", shr1_32_add(0x123456789abcdef, 0)); + return Fail; + } + + return Pass; + } +} diff --git a/tests/src/JIT/CodeGenBringUpTests/Shift.csproj b/tests/src/JIT/CodeGenBringUpTests/Shift.csproj new file mode 100644 index 0000000000..2189ed3dd5 --- /dev/null +++ b/tests/src/JIT/CodeGenBringUpTests/Shift.csproj @@ -0,0 +1,40 @@ + + + + + Debug + AnyCPU + 2.0 + {AF7F2478-9B49-4776-BEAF-0BF8916E2D79} + Exe + Properties + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + $(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages + ..\..\ + 7a9bfb7d + + + + + + + + + False + + + + + + + + + + $(JitPackagesConfigFileDirectory)threading+thread\project.json + $(JitPackagesConfigFileDirectory)threading+thread\project.lock.json + + + + + diff --git a/tests/src/JIT/Directed/pinvoke/pinvoke-examples.cs b/tests/src/JIT/Directed/pinvoke/pinvoke-examples.cs new file mode 100644 index 0000000000..26080d8d71 --- /dev/null +++ b/tests/src/JIT/Directed/pinvoke/pinvoke-examples.cs @@ -0,0 +1,223 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +// Test cases showing interaction of inlining and inline pinvoke, +// along with the impact of EH. + +using System; +using System.Runtime.CompilerServices; + + +namespace PInvokeTest +{ + internal class Test + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + static int AsForceInline() + { + return Environment.ProcessorCount; + } + + static int AsNormalInline() + { + return Environment.ProcessorCount; + } + + [MethodImpl(MethodImplOptions.NoInlining)] + static int AsNoInline() + { + return Environment.ProcessorCount; + } + + static bool FromTryCatch() + { + bool result = false; + try + { + // All pinvokes should be inline, except on x64 + result = (Environment.ProcessorCount == AsNormalInline()); + } + catch (Exception) + { + result = false; + } + return result; + } + + static bool FromTryFinally() + { + bool result = false; + bool result1 = false; + bool result2 = false; + try + { + // All pinvokes should be inline, except on x64 + result1 = (Environment.ProcessorCount == AsNormalInline()); + result2 = (Environment.ProcessorCount == AsNormalInline()); + } + finally + { + result = result1 && result2; + } + return result; + } + + static bool FromTryFinally2() + { + bool result = false; + bool result1 = false; + bool result2 = false; + + try + { + // These two pinvokes should be inline, except on x64 + result1 = (Environment.ProcessorCount == AsNormalInline()); + } + finally + { + // These two pinvokes should *not* be inline (finally) + result2 = (Environment.ProcessorCount == AsNormalInline()); + result = result1 && result2; + } + + return result; + } + + static bool FromTryFinally3() + { + bool result = false; + bool result1 = false; + bool result2 = false; + + try + { + // These two pinvokes should be inline, except on x64 + result1 = (Environment.ProcessorCount == AsNormalInline()); + } + finally + { + try + { + // These two pinvokes should *not* be inline (finally) + result2 = (Environment.ProcessorCount == AsNormalInline()); + } + catch (Exception) + { + result2 = false; + } + + result = result1 && result2; + } + + return result; + } + + [MethodImpl(MethodImplOptions.NoInlining)] + static bool FromInline() + { + // These two pinvokes should be inline + bool result = (Environment.ProcessorCount == AsForceInline()); + return result; + } + + [MethodImpl(MethodImplOptions.NoInlining)] + static bool FromInline2() + { + // These four pinvokes should be inline + bool result1 = (Environment.ProcessorCount == AsNormalInline()); + bool result2 = (Environment.ProcessorCount == AsForceInline()); + return result1 && result2; + } + + [MethodImpl(MethodImplOptions.NoInlining)] + static bool FromNoInline() + { + // The only pinvoke should be inline + bool result = (Environment.ProcessorCount == AsNoInline()); + return result; + } + + [MethodImpl(MethodImplOptions.NoInlining)] + static bool FromNoInline2() + { + // Three pinvokes should be inline + bool result1 = (Environment.ProcessorCount == AsNormalInline()); + bool result2 = (Environment.ProcessorCount == AsNoInline()); + return result1 && result2; + } + + static bool FromFilter() + { + bool result = false; + + try + { + throw new Exception("expected"); + } + // These two pinvokes should *not* be inline (filter) + // + // For the first call the jit won't inline the wrapper, so + // it just calls get_ProcessorCount. + // + // For the second call, the force inline works, and the + // subsequent inline of get_ProcessorCount exposes a call + // to the pinvoke GetProcessorCount. This pinvoke will + // not be inline. + catch (Exception) when (Environment.ProcessorCount == AsForceInline()) + { + result = true; + } + + return result; + } + + static bool FromColdCode() + { + int pc = 0; + bool result1 = false; + bool result2 = false; + + try + { + // This pinvoke should not be inline (cold) + pc = Environment.ProcessorCount; + throw new Exception("expected"); + } + catch (Exception) + { + // These two pinvokes should not be inline (catch) + // + // For the first call the jit won't inline the + // wrapper, so it just calls get_ProcessorCount. + // + // For the second call, the force inline works, and + // the subsequent inline of get_ProcessorCount exposes + // a call to the pinvoke GetProcessorCount. This + // pinvoke will not be inline. + result1 = (pc == Environment.ProcessorCount); + result2 = (pc == AsForceInline()); + } + + return result1 && result2; + } + + private static int Main() + { + bool result = true; + + result &= FromTryCatch(); + result &= FromTryFinally(); + result &= FromTryFinally2(); + result &= FromTryFinally3(); + result &= FromInline(); + result &= FromInline2(); + result &= FromNoInline(); + result &= FromNoInline2(); + result &= FromFilter(); + result &= FromColdCode(); + + return (result ? 100 : -1); + } + } +} diff --git a/tests/src/JIT/Directed/pinvoke/pinvoke-examples.csproj b/tests/src/JIT/Directed/pinvoke/pinvoke-examples.csproj new file mode 100644 index 0000000000..78cf4471fe --- /dev/null +++ b/tests/src/JIT/Directed/pinvoke/pinvoke-examples.csproj @@ -0,0 +1,44 @@ + + + + + Debug + AnyCPU + $(MSBuildProjectName) + 2.0 + {95DFC527-4DC1-495E-97D7-E94EE1F7140D} + Exe + Properties + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + $(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages + ..\..\ + 7a9bfb7d + + + + + + + + + False + + + + PdbOnly + + + + + + + + + $(JitPackagesConfigFileDirectory)minimal\project.json + $(JitPackagesConfigFileDirectory)minimal\project.lock.json + + + + + \ 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 fed9ead2ac..a4054021e7 100644 --- a/tests/src/JIT/Methodical/fp/exgen/10w5d_cs_d.csproj +++ b/tests/src/JIT/Methodical/fp/exgen/10w5d_cs_d.csproj @@ -14,6 +14,9 @@ $(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages ..\..\ 7a9bfb7d + + + true @@ -43,4 +46,4 @@ - \ No newline at end of file + 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 7d311bfb47..bd5ae97d4b 100644 --- a/tests/src/JIT/Methodical/fp/exgen/10w5d_cs_r.csproj +++ b/tests/src/JIT/Methodical/fp/exgen/10w5d_cs_r.csproj @@ -14,6 +14,9 @@ $(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages ..\..\ 7a9bfb7d + + + true @@ -43,4 +46,4 @@ - \ No newline at end of file + diff --git a/tests/src/JIT/Methodical/structs/systemvbringup/structpinvoketests.cs b/tests/src/JIT/Methodical/structs/systemvbringup/structpinvoketests.cs index 7fc52039e5..8eae60686f 100644 --- a/tests/src/JIT/Methodical/structs/systemvbringup/structpinvoketests.cs +++ b/tests/src/JIT/Methodical/structs/systemvbringup/structpinvoketests.cs @@ -364,650 +364,698 @@ namespace structinreg s1.y = 2; s1.z = 3; s1.w = 4; - - InvokeCallback1((par) => { - Console.WriteLine("S1: {0}, {1}, {2}, {3}", par.x, par.y, par.z, par.w); - if (par.x != 1 || par.y != 2 || par.z != 3 || par.w != 4) - { - throw new System.Exception(); - } - }, s1); - S2 s2; - s2.x = 1; - s2.y = 2; - s2.z = 3; - InvokeCallback2((par) => { - Console.WriteLine("S2: {0}, {1}, {2}", par.x, par.y, par.z); - if (par.x != 1 || par.y != 2 || par.z != 3) + try + { + InvokeCallback1((par) => { - throw new System.Exception(); - } - }, s2); - - S3 s3; - s3.x = 1; - s3.y = 2; - s3.z = 3; - InvokeCallback3((par) => { - Console.WriteLine("S3: {0}, {1}, {2}", par.x, par.y, par.z); - if (par.x != 1 || par.y != 2 || par.z != 3) + Console.WriteLine("S1: {0}, {1}, {2}, {3}", par.x, par.y, par.z, par.w); + if (par.x != 1 || par.y != 2 || par.z != 3 || par.w != 4) + { + throw new System.Exception(); + } + }, s1); + + S2 s2; + s2.x = 1; + s2.y = 2; + s2.z = 3; + InvokeCallback2((par) => { - throw new System.Exception(); - } - }, s3); - - S4 s4; - s4.x = 1; - s4.y = 2; - InvokeCallback4((par) => { - Console.WriteLine("S4: {0}, {1}", par.x, par.y); - if (par.x != 1 || par.y != 2) + Console.WriteLine("S2: {0}, {1}, {2}", par.x, par.y, par.z); + if (par.x != 1 || par.y != 2 || par.z != 3) + { + throw new System.Exception(); + } + }, s2); + + S3 s3; + s3.x = 1; + s3.y = 2; + s3.z = 3; + InvokeCallback3((par) => { - throw new System.Exception(); - } - }, s4); - - S5 s5; - s5.x = 1; - s5.y = 2; - InvokeCallback5((par) => { - Console.WriteLine("S5: {0}, {1}", par.x, par.y); - if (par.x != 1 || par.y != 2) + Console.WriteLine("S3: {0}, {1}, {2}", par.x, par.y, par.z); + if (par.x != 1 || par.y != 2 || par.z != 3) + { + throw new System.Exception(); + } + }, s3); + + S4 s4; + s4.x = 1; + s4.y = 2; + InvokeCallback4((par) => { - throw new System.Exception(); - } - }, s5); - - S6 s6; - s6.x = 1; - s6.y = 2; - s6.z = 3; - s6.w = 4; - InvokeCallback6((par) => { - Console.WriteLine("S6: {0}, {1}, {2}, {3}", par.x, par.y, par.z, par.w); - if (par.x != 1 || par.y != 2 || par.z != 3 || par.w != 4) + Console.WriteLine("S4: {0}, {1}", par.x, par.y); + if (par.x != 1 || par.y != 2) + { + throw new System.Exception(); + } + }, s4); + + S5 s5; + s5.x = 1; + s5.y = 2; + InvokeCallback5((par) => { - throw new System.Exception(); - } - }, s6); - - S7 s7; - s7.x = 1; - s7.y = 2; - s7.z = 3; - InvokeCallback7((par) => { - Console.WriteLine("S7: {0}, {1}, {2}", par.x, par.y, par.z); - if (par.x != 1 || par.y != 2 || par.z != 3) + Console.WriteLine("S5: {0}, {1}", par.x, par.y); + if (par.x != 1 || par.y != 2) + { + throw new System.Exception(); + } + }, s5); + + S6 s6; + s6.x = 1; + s6.y = 2; + s6.z = 3; + s6.w = 4; + InvokeCallback6((par) => { - throw new System.Exception(); - } - }, s7); - - S8 s8; - s8.x = 1; - s8.y = 2; - InvokeCallback8((par) => { - Console.WriteLine("S8: {0}, {1}", par.x, par.y); - if (par.x != 1 || par.y != 2) + Console.WriteLine("S6: {0}, {1}, {2}, {3}", par.x, par.y, par.z, par.w); + if (par.x != 1 || par.y != 2 || par.z != 3 || par.w != 4) + { + throw new System.Exception(); + } + }, s6); + + S7 s7; + s7.x = 1; + s7.y = 2; + s7.z = 3; + InvokeCallback7((par) => { - throw new System.Exception(); - } - }, s8); - - S9 s9; - s9.x = 1; - s9.y = 2; - s9.z = 3; - s9.w = 4; - InvokeCallback9((par) => { - Console.WriteLine("S9: {0}, {1}, {2}, {3}", par.x, par.y, par.z, par.w); - if (par.x != 1 || par.y != 2 || par.z != 3 || par.w != 4) + Console.WriteLine("S7: {0}, {1}, {2}", par.x, par.y, par.z); + if (par.x != 1 || par.y != 2 || par.z != 3) + { + throw new System.Exception(); + } + }, s7); + + S8 s8; + s8.x = 1; + s8.y = 2; + InvokeCallback8((par) => { - throw new System.Exception(); - } - }, s9); - - S10 s10; - s10.a = 1; - s10.b = 2; - s10.c = 3; - s10.d = 4; - s10.e = 5; - s10.f = 6; - s10.g = 7; - s10.h = 8; - InvokeCallback10((par) => { - Console.WriteLine("S10: {0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}", par.a, par.b, par.c, par.d, par.e, par.f, par.g, par.h); - if (par.a != 1 || par.b != 2 || par.c != 3 || par.d != 4 || - par.e != 5 || par.f != 6 || par.g != 7 || par.h != 8) + Console.WriteLine("S8: {0}, {1}", par.x, par.y); + if (par.x != 1 || par.y != 2) + { + throw new System.Exception(); + } + }, s8); + + S9 s9; + s9.x = 1; + s9.y = 2; + s9.z = 3; + s9.w = 4; + InvokeCallback9((par) => { - throw new System.Exception(); - } - }, s10); - - S11 s11; - s11.a = 1; - s11.b = 2; - s11.c = 3; - s11.d = 4; - s11.e = 5; - InvokeCallback11((par) => { - Console.WriteLine("S11: {0}, {1}, {2}, {3}, {4}", par.a, par.b, par.c, par.d, par.e); - if (par.a != 1 || par.b != 2 || par.c != 3 || par.d != 4 || par.e != 5) + Console.WriteLine("S9: {0}, {1}, {2}, {3}", par.x, par.y, par.z, par.w); + if (par.x != 1 || par.y != 2 || par.z != 3 || par.w != 4) + { + throw new System.Exception(); + } + }, s9); + + S10 s10; + s10.a = 1; + s10.b = 2; + s10.c = 3; + s10.d = 4; + s10.e = 5; + s10.f = 6; + s10.g = 7; + s10.h = 8; + InvokeCallback10((par) => { - throw new System.Exception(); - } - }, s11); - - S12 s12; - s12.a = 1; - s12.b = 2; - s12.c = 3; - s12.d = 4; - s12.e = 5; - s12.f = 6; - s12.g = 7; - s12.h = 8; - s12.i = 9; - InvokeCallback12((par) => { - Console.WriteLine("S12: {0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}, {8}", par.a, par.b, par.c, par.d, par.e, par.f, par.g, par.h, par.i); - if (par.a != 1 || par.b != 2 || par.c != 3 || par.d != 4 || - par.e != 5 || par.f != 6 || par.g != 7 || par.h != 8 || par.i != 9) + Console.WriteLine("S10: {0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}", par.a, par.b, par.c, par.d, par.e, par.f, par.g, par.h); + if (par.a != 1 || par.b != 2 || par.c != 3 || par.d != 4 || + par.e != 5 || par.f != 6 || par.g != 7 || par.h != 8) + { + throw new System.Exception(); + } + }, s10); + + S11 s11; + s11.a = 1; + s11.b = 2; + s11.c = 3; + s11.d = 4; + s11.e = 5; + InvokeCallback11((par) => { - throw new System.Exception(); - } - }, s12); - - S13 s13; - s13.hasValue = 1; - s13.x = 2; - InvokeCallback13((par) => { - Console.WriteLine("S13: {0}, {1}", par.hasValue, par.x); - if (par.hasValue != 1 || par.x != 2) + Console.WriteLine("S11: {0}, {1}, {2}, {3}, {4}", par.a, par.b, par.c, par.d, par.e); + if (par.a != 1 || par.b != 2 || par.c != 3 || par.d != 4 || par.e != 5) + { + throw new System.Exception(); + } + }, s11); + + S12 s12; + s12.a = 1; + s12.b = 2; + s12.c = 3; + s12.d = 4; + s12.e = 5; + s12.f = 6; + s12.g = 7; + s12.h = 8; + s12.i = 9; + InvokeCallback12((par) => { - throw new System.Exception(); - } - }, s13); - - S14 s14; - s14.x = 1; - s14.y = 2; - InvokeCallback14((par) => { - Console.WriteLine("S14: {0}, {1}", par.x, par.y); - if (par.x != 1 || par.y != 2) + Console.WriteLine("S12: {0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}, {8}", par.a, par.b, par.c, par.d, par.e, par.f, par.g, par.h, par.i); + if (par.a != 1 || par.b != 2 || par.c != 3 || par.d != 4 || + par.e != 5 || par.f != 6 || par.g != 7 || par.h != 8 || par.i != 9) + { + throw new System.Exception(); + } + }, s12); + + S13 s13; + s13.hasValue = 1; + s13.x = 2; + InvokeCallback13((par) => { - throw new System.Exception(); - } - }, s14); - - S15 s15; - s15.a = 1; - s15.b = 2; - s15.c = 3; - s15.d = 4; - s15.e = 5; - s15.f = 6; - s15.g = 7; - s15.h = 8; - s15.i = 9; - InvokeCallback15((par) => { - Console.WriteLine("S15: {0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}, {8}", par.a, par.b, par.c, par.d, par.e, par.f, par.g, par.h, par.i); - if (par.a != 1 || par.b != 2 || par.c != 3 || par.d != 4 || - par.e != 5 || par.f != 6 || par.g != 7 || par.h != 8 || par.i != 9) + Console.WriteLine("S13: {0}, {1}", par.hasValue, par.x); + if (par.hasValue != 1 || par.x != 2) + { + throw new System.Exception(); + } + }, s13); + + S14 s14; + s14.x = 1; + s14.y = 2; + InvokeCallback14((par) => { - throw new System.Exception(); - } - }, s15); - - S16 s16; - s16.x = 1; - s16.y = 2; - InvokeCallback16((par) => { - Console.WriteLine("S16: {0}, {1}", par.x, par.y); - if (par.x != 1 || par.y != 2) + Console.WriteLine("S14: {0}, {1}", par.x, par.y); + if (par.x != 1 || par.y != 2) + { + throw new System.Exception(); + } + }, s14); + + S15 s15; + s15.a = 1; + s15.b = 2; + s15.c = 3; + s15.d = 4; + s15.e = 5; + s15.f = 6; + s15.g = 7; + s15.h = 8; + s15.i = 9; + InvokeCallback15((par) => { - throw new System.Exception(); - } - }, s16); - - S17 s17; - s17.x = 1; - s17.y = 2; - InvokeCallback17((par) => { - Console.WriteLine("S17: {0}, {1}", par.x, par.y); - if (par.x != 1 || par.y != 2) + Console.WriteLine("S15: {0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}, {8}", par.a, par.b, par.c, par.d, par.e, par.f, par.g, par.h, par.i); + if (par.a != 1 || par.b != 2 || par.c != 3 || par.d != 4 || + par.e != 5 || par.f != 6 || par.g != 7 || par.h != 8 || par.i != 9) + { + throw new System.Exception(); + } + }, s15); + + S16 s16; + s16.x = 1; + s16.y = 2; + InvokeCallback16((par) => { - throw new System.Exception(); - } - }, s17); - - S18 s18; - s18.x = 1; - s18.y = 2; - s18.z = 3; - InvokeCallback18((par) => { - Console.WriteLine("S18: {0}, {1}, {2}", par.x, par.y, par.z); - if (par.x != 1 || par.y != 2 || par.z != 3) + Console.WriteLine("S16: {0}, {1}", par.x, par.y); + if (par.x != 1 || par.y != 2) + { + throw new System.Exception(); + } + }, s16); + + S17 s17; + s17.x = 1; + s17.y = 2; + InvokeCallback17((par) => { - throw new System.Exception(); - } - }, s18); - - S19 s19; - s19.x = 1; - s19.y = 2; - s19.z = 3; - s19.w = 4; - InvokeCallback19((par) => { - Console.WriteLine("S19: {0}, {1}, {2}, {3}", par.x, par.y, par.z, par.w); - if (par.x != 1 || par.y != 2 || par.z != 3 || par.w != 4) + Console.WriteLine("S17: {0}, {1}", par.x, par.y); + if (par.x != 1 || par.y != 2) + { + throw new System.Exception(); + } + }, s17); + + S18 s18; + s18.x = 1; + s18.y = 2; + s18.z = 3; + InvokeCallback18((par) => { - throw new System.Exception(); - } - }, s19); - - S20 s20; - s20.x = 1; - s20.y = 2; - s20.z = 3; - s20.w = 4; - InvokeCallback20((par) => { - Console.WriteLine("S20: {0}, {1}, {2}, {3}", par.x, par.y, par.z, par.w); - if (par.x != 1 || par.y != 2 || par.z != 3 || par.w != 4) + Console.WriteLine("S18: {0}, {1}, {2}", par.x, par.y, par.z); + if (par.x != 1 || par.y != 2 || par.z != 3) + { + throw new System.Exception(); + } + }, s18); + + S19 s19; + s19.x = 1; + s19.y = 2; + s19.z = 3; + s19.w = 4; + InvokeCallback19((par) => { - throw new System.Exception(); - } - }, s20); - -/* These tests are not working on non Windows CoreCLR. Enable this when GH Issue #2076 is resolved. - TestClass testClass = new TestClass(); - S28 s28; - s28.x = null; - s28.y = 1; - - InvokeCallback28((par) => { - Console.WriteLine("S28: {0}, {1}", par.x == null ? "Null" : "Not null", par.y); - if (par.x != null || par.y != 1) + Console.WriteLine("S19: {0}, {1}, {2}, {3}", par.x, par.y, par.z, par.w); + if (par.x != 1 || par.y != 2 || par.z != 3 || par.w != 4) + { + throw new System.Exception(); + } + }, s19); + + S20 s20; + s20.x = 1; + s20.y = 2; + s20.z = 3; + s20.w = 4; + InvokeCallback20((par) => { - throw new System.Exception(); - } - }, s28); - - s28.x = testClass; - s28.y = 5; - - InvokeCallback28((par) => { - Console.WriteLine("S28: {0}, {1}", par.x == null ? "Null" : "Not null", par.y); - if (par.x != testClass || par.y != 5) + Console.WriteLine("S20: {0}, {1}, {2}, {3}", par.x, par.y, par.z, par.w); + if (par.x != 1 || par.y != 2 || par.z != 3 || par.w != 4) + { + throw new System.Exception(); + } + }, s20); + + /* These tests are not working on non Windows CoreCLR. Enable this when GH Issue #2076 is resolved. + TestClass testClass = new TestClass(); + S28 s28; + s28.x = null; + s28.y = 1; + + InvokeCallback28((par) => { + Console.WriteLine("S28: {0}, {1}", par.x == null ? "Null" : "Not null", par.y); + if (par.x != null || par.y != 1) + { + throw new System.Exception(); + } + }, s28); + + s28.x = testClass; + s28.y = 5; + + InvokeCallback28((par) => { + Console.WriteLine("S28: {0}, {1}", par.x == null ? "Null" : "Not null", par.y); + if (par.x != testClass || par.y != 5) + { + throw new System.Exception(); + } + }, s28); + + S29 s29; + s29.x = 1; + s29.y = null; + + InvokeCallback29((par) => { + Console.WriteLine("S29: {0}, {1}", par.x, par.y == null ? "Null" : "Not null"); + if (par.x != 1 || par.y != null) + { + throw new System.Exception(); + } + }, s29); + + s29.x = 5; + s29.y = testClass; + + InvokeCallback29((par) => { + Console.WriteLine("S29: {0}, {1}", par.x, par.y == null ? "Null" : "Not null"); + if (par.x != 5 || par.y != testClass) + { + throw new System.Exception(); + } + }, s29); + Enable this when GH Issue #2076 is resolved. */ + S30 s30; + s30.x = 1; + s30.y = 2; + + S30 s30_2; + s30_2.x = 3; + s30_2.y = 4; + + S30 s30_3; + s30_3.x = 5; + s30_3.y = 6; + + // Program p = new Program(); + InvokeCallback30(p.Test30, s30, s30_2, s30_3); + S1 s1r = InvokeCallback1R((par) => { - throw new System.Exception(); - } - }, s28); - - S29 s29; - s29.x = 1; - s29.y = null; - - InvokeCallback29((par) => { - Console.WriteLine("S29: {0}, {1}", par.x, par.y == null ? "Null" : "Not null"); - if (par.x != 1 || par.y != null) + Console.WriteLine("S1: {0}, {1}, {2}, {3}", par.x, par.y, par.z, par.w); + if (par.x != 1 || par.y != 2 || par.z != 3 || par.w != 4) + { + throw new System.Exception(); + } + + }, s1); + Console.WriteLine("S1R: {0}, {1}, {2}, {3}", s1r.x, s1r.y, s1r.z, s1r.w); + if (s1r.x != 1 || s1r.y != 2 || s1r.z != 3 || s1r.w != 4) { throw new System.Exception(); } - }, s29); - s29.x = 5; - s29.y = testClass; - - InvokeCallback29((par) => { - Console.WriteLine("S29: {0}, {1}", par.x, par.y == null ? "Null" : "Not null"); - if (par.x != 5 || par.y != testClass) + S2 s2r = InvokeCallback2R((par) => { - throw new System.Exception(); - } - }, s29); - Enable this when GH Issue #2076 is resolved. */ - S30 s30; - s30.x = 1; - s30.y = 2; - - S30 s30_2; - s30_2.x = 3; - s30_2.y = 4; - - S30 s30_3; - s30_3.x = 5; - s30_3.y = 6; - - // Program p = new Program(); - InvokeCallback30(p.Test30, s30, s30_2, s30_3); - S1 s1r = InvokeCallback1R((par) => { - Console.WriteLine("S1: {0}, {1}, {2}, {3}", par.x, par.y, par.z, par.w); - if (par.x != 1 || par.y != 2 || par.z != 3 || par.w != 4) + Console.WriteLine("S2: {0}, {1}, {2}", par.x, par.y, par.z); + if (par.x != 1 || par.y != 2 || par.z != 3) + { + throw new System.Exception(); + } + }, s2); + Console.WriteLine("S2R: {0}, {1}, {2}", s2r.x, s2r.y, s2r.z); + if (s2r.x != 1 || s2r.y != 2 || s2r.z != 3) { throw new System.Exception(); } - }, s1); - Console.WriteLine("S1R: {0}, {1}, {2}, {3}", s1r.x, s1r.y, s1r.z, s1r.w); - if (s1r.x != 1 || s1r.y != 2 || s1r.z != 3 || s1r.w != 4) - { - throw new System.Exception(); - } - - S2 s2r = InvokeCallback2R((par) => { - Console.WriteLine("S2: {0}, {1}, {2}", par.x, par.y, par.z); - if (par.x != 1 || par.y != 2 || par.z != 3) + S3 s3r = InvokeCallback3R((par) => + { + Console.WriteLine("S3: {0}, {1}, {2}", par.x, par.y, par.z); + if (par.x != 1 || par.y != 2 || par.z != 3) + { + throw new System.Exception(); + } + }, s3); + Console.WriteLine("S3R: {0}, {1}, {2}", s3r.x, s3r.y, s3r.z); + if (s3r.x != 1 || s3r.y != 2 || s3r.z != 3) { throw new System.Exception(); } - }, s2); - Console.WriteLine("S2R: {0}, {1}, {2}", s2r.x, s2r.y, s2r.z); - if (s2r.x != 1 || s2r.y != 2 || s2r.z != 3) - { - throw new System.Exception(); - } - S3 s3r = InvokeCallback3R((par) => { - Console.WriteLine("S3: {0}, {1}, {2}", par.x, par.y, par.z); - if (par.x != 1 || par.y != 2 || par.z != 3) + S4 s4r = InvokeCallback4R((par) => + { + Console.WriteLine("S4: {0}, {1}", par.x, par.y); + if (par.x != 1 || par.y != 2) + { + throw new System.Exception(); + } + }, s4); + Console.WriteLine("S4R: {0}, {1}", s4r.x, s4r.y); + if (s4r.x != 1 || s4r.y != 2) { throw new System.Exception(); } - }, s3); - Console.WriteLine("S3R: {0}, {1}, {2}", s3r.x, s3r.y, s3r.z); - if (s3r.x != 1 || s3r.y != 2 || s3r.z != 3) - { - throw new System.Exception(); - } - S4 s4r = InvokeCallback4R((par) => { - Console.WriteLine("S4: {0}, {1}", par.x, par.y); - if (par.x != 1 || par.y != 2) + S5 s5r = InvokeCallback5R((par) => + { + Console.WriteLine("S5: {0}, {1}", par.x, par.y); + if (par.x != 1 || par.y != 2) + { + throw new System.Exception(); + } + }, s5); + Console.WriteLine("S5R: {0}, {1}", s5r.x, s5r.y); + if (s5r.x != 1 || s5r.y != 2) { throw new System.Exception(); } - }, s4); - Console.WriteLine("S4R: {0}, {1}", s4r.x, s4r.y); - if (s4r.x != 1 || s4r.y != 2) - { - throw new System.Exception(); - } - S5 s5r = InvokeCallback5R((par) => { - Console.WriteLine("S5: {0}, {1}", par.x, par.y); - if (par.x != 1 || par.y != 2) + S6 s6r = InvokeCallback6R((par) => + { + Console.WriteLine("S6: {0}, {1}, {2}, {3}", par.x, par.y, par.z, par.w); + if (par.x != 1 || par.y != 2 || par.z != 3 || par.w != 4) + { + throw new System.Exception(); + } + }, s6); + Console.WriteLine("S6R: {0}, {1}, {2}, {3}", s6r.x, s6r.y, s6r.z, s6r.w); + if (s6r.x != 1 || s6r.y != 2 || s6r.z != 3 || s6r.w != 4) { throw new System.Exception(); } - }, s5); - Console.WriteLine("S5R: {0}, {1}", s5r.x, s5r.y); - if (s5r.x != 1 || s5r.y != 2) - { - throw new System.Exception(); - } - S6 s6r = InvokeCallback6R((par) => { - Console.WriteLine("S6: {0}, {1}, {2}, {3}", par.x, par.y, par.z, par.w); - if (par.x != 1 || par.y != 2 || par.z != 3 || par.w != 4) + S7 s7r = InvokeCallback7R((par) => + { + Console.WriteLine("S7: {0}, {1}, {2}", par.x, par.y, par.z); + if (par.x != 1 || par.y != 2 || par.z != 3) + { + throw new System.Exception(); + } + }, s7); + Console.WriteLine("S7R: {0}, {1}, {2}", s7r.x, s7r.y, s7r.z); + if (s7r.x != 1 || s7r.y != 2 || s7r.z != 3) { throw new System.Exception(); } - }, s6); - Console.WriteLine("S6R: {0}, {1}, {2}, {3}", s6r.x, s6r.y, s6r.z, s6r.w); - if (s6r.x != 1 || s6r.y != 2 || s6r.z != 3 || s6r.w != 4) - { - throw new System.Exception(); - } - S7 s7r = InvokeCallback7R((par) => { - Console.WriteLine("S7: {0}, {1}, {2}", par.x, par.y, par.z); - if (par.x != 1 || par.y != 2 || par.z != 3) + S8 s8r = InvokeCallback8R((par) => + { + Console.WriteLine("S8: {0}, {1}", par.x, par.y); + if (par.x != 1 || par.y != 2) + { + throw new System.Exception(); + } + }, s8); + Console.WriteLine("S8R: {0}, {1}", s8r.x, s8r.y); + if (s8r.x != 1 || s8r.y != 2) { throw new System.Exception(); } - }, s7); - Console.WriteLine("S7R: {0}, {1}, {2}", s7r.x, s7r.y, s7r.z); - if (s7r.x != 1 || s7r.y != 2 || s7r.z != 3) - { - throw new System.Exception(); - } - S8 s8r = InvokeCallback8R((par) => { - Console.WriteLine("S8: {0}, {1}", par.x, par.y); - if (par.x != 1 || par.y != 2) + S9 s9r = InvokeCallback9R((par) => + { + Console.WriteLine("S9: {0}, {1}, {2}, {3}", par.x, par.y, par.z, par.w); + if (par.x != 1 || par.y != 2 || par.z != 3 || par.w != 4) + { + throw new System.Exception(); + } + }, s9); + Console.WriteLine("S9R: {0}, {1}, {2}, {3}", s9r.x, s9r.y, s9r.z, s9r.w); + if (s9r.x != 1 || s9r.y != 2 || s9r.z != 3 || s9r.w != 4) { throw new System.Exception(); } - }, s8); - Console.WriteLine("S8R: {0}, {1}", s8r.x, s8r.y); - if (s8r.x != 1 || s8r.y != 2) - { - throw new System.Exception(); - } - S9 s9r = InvokeCallback9R((par) => { - Console.WriteLine("S9: {0}, {1}, {2}, {3}", par.x, par.y, par.z, par.w); - if (par.x != 1 || par.y != 2 || par.z != 3 || par.w != 4) + S10 s10r = InvokeCallback10R((par) => { - throw new System.Exception(); - } - }, s9); - Console.WriteLine("S9R: {0}, {1}, {2}, {3}", s9r.x, s9r.y, s9r.z, s9r.w); - if (s9r.x != 1 || s9r.y != 2 || s9r.z != 3 || s9r.w != 4) - { - throw new System.Exception(); - } - - S10 s10r = InvokeCallback10R((par) => { - Console.WriteLine("S10: {0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}", par.a, par.b, par.c, par.d, par.e, par.f, par.g, par.h); - if (par.a != 1 || par.b != 2 || par.c != 3 || par.d != 4 || - par.e != 5 || par.f != 6 || par.g != 7 || par.h != 8) + Console.WriteLine("S10: {0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}", par.a, par.b, par.c, par.d, par.e, par.f, par.g, par.h); + if (par.a != 1 || par.b != 2 || par.c != 3 || par.d != 4 || + par.e != 5 || par.f != 6 || par.g != 7 || par.h != 8) + { + throw new System.Exception(); + } + }, s10); + Console.WriteLine("S10R: {0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}", s10r.a, s10r.b, s10r.c, s10r.d, s10r.e, s10r.f, s10r.g, s10r.h); + if (s10r.a != 1 || s10r.b != 2 || s10r.c != 3 || s10r.d != 4 || + s10r.e != 5 || s10r.f != 6 || s10r.g != 7 || s10r.h != 8) { throw new System.Exception(); } - }, s10); - Console.WriteLine("S10R: {0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}", s10r.a, s10r.b, s10r.c, s10r.d, s10r.e, s10r.f, s10r.g, s10r.h); - if (s10r.a != 1 || s10r.b != 2 || s10r.c != 3 || s10r.d != 4 || - s10r.e != 5 || s10r.f != 6 || s10r.g != 7 || s10r.h != 8) - { - throw new System.Exception(); - } - S11 s11r = InvokeCallback11R((par) => { - Console.WriteLine("S11: {0}, {1}, {2}, {3}, {4}", par.a, par.b, par.c, par.d, par.e); - if (par.a != 1 || par.b != 2 || par.c != 3 || par.d != 4 || par.e != 5) + S11 s11r = InvokeCallback11R((par) => + { + Console.WriteLine("S11: {0}, {1}, {2}, {3}, {4}", par.a, par.b, par.c, par.d, par.e); + if (par.a != 1 || par.b != 2 || par.c != 3 || par.d != 4 || par.e != 5) + { + throw new System.Exception(); + } + }, s11); + Console.WriteLine("S11R: {0}, {1}, {2}, {3}, {4}", s11r.a, s11r.b, s11r.c, s11r.d, s11r.e); + if (s11r.a != 1 || s11r.b != 2 || s11r.c != 3 || s11r.d != 4 || s11r.e != 5) { throw new System.Exception(); } - }, s11); - Console.WriteLine("S11R: {0}, {1}, {2}, {3}, {4}", s11r.a, s11r.b, s11r.c, s11r.d, s11r.e); - if (s11r.a != 1 || s11r.b != 2 || s11r.c != 3 || s11r.d != 4 || s11r.e != 5) - { - throw new System.Exception(); - } - S12 s12r = InvokeCallback12R((par) => { - Console.WriteLine("S12: {0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}, {8}", par.a, par.b, par.c, par.d, par.e, par.f, par.g, par.h, par.i); - if (par.a != 1 || par.b != 2 || par.c != 3 || par.d != 4 || - par.e != 5 || par.f != 6 || par.g != 7 || par.h != 8 || par.i != 9) + S12 s12r = InvokeCallback12R((par) => + { + Console.WriteLine("S12: {0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}, {8}", par.a, par.b, par.c, par.d, par.e, par.f, par.g, par.h, par.i); + if (par.a != 1 || par.b != 2 || par.c != 3 || par.d != 4 || + par.e != 5 || par.f != 6 || par.g != 7 || par.h != 8 || par.i != 9) + { + throw new System.Exception(); + } + }, s12); + Console.WriteLine("S12R: {0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}, {8}", s12r.a, s12r.b, s12r.c, s12r.d, s12r.e, s12r.f, s12r.g, s12r.h, s12r.i); + if (s12r.a != 1 || s12r.b != 2 || s12r.c != 3 || s12r.d != 4 || + s12r.e != 5 || s12r.f != 6 || s12r.g != 7 || s12r.h != 8 || s12r.i != 9) { throw new System.Exception(); } - }, s12); - Console.WriteLine("S12R: {0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}, {8}", s12r.a, s12r.b, s12r.c, s12r.d, s12r.e, s12r.f, s12r.g, s12r.h, s12r.i); - if (s12r.a != 1 || s12r.b != 2 || s12r.c != 3 || s12r.d != 4 || - s12r.e != 5 || s12r.f != 6 || s12r.g != 7 || s12r.h != 8 || s12r.i != 9) - { - throw new System.Exception(); - } - S13 s13r = InvokeCallback13R((par) => { - Console.WriteLine("S13: {0}, {1}", par.hasValue, par.x); - if (par.hasValue != 1 || par.x != 2) + S13 s13r = InvokeCallback13R((par) => + { + Console.WriteLine("S13: {0}, {1}", par.hasValue, par.x); + if (par.hasValue != 1 || par.x != 2) + { + throw new System.Exception(); + } + }, s13); + Console.WriteLine("S13R: {0}, {1}", s13r.hasValue, s13r.x); + if (s13r.hasValue != 1 || s13r.x != 2) { throw new System.Exception(); } - }, s13); - Console.WriteLine("S13R: {0}, {1}", s13r.hasValue, s13r.x); - if (s13r.hasValue != 1 || s13r.x != 2) - { - throw new System.Exception(); - } - S14 s14r = InvokeCallback14R((par) => { - Console.WriteLine("S14: {0}, {1}", par.x, par.y); - if (par.x != 1 || par.y != 2) + S14 s14r = InvokeCallback14R((par) => + { + Console.WriteLine("S14: {0}, {1}", par.x, par.y); + if (par.x != 1 || par.y != 2) + { + throw new System.Exception(); + } + }, s14); + Console.WriteLine("S14R: {0}, {1}", s14r.x, s14r.y); + if (s14r.x != 1 || s14r.y != 2) { throw new System.Exception(); } - }, s14); - Console.WriteLine("S14R: {0}, {1}", s14r.x, s14r.y); - if (s14r.x != 1 || s14r.y != 2) - { - throw new System.Exception(); - } - S15 s15r = InvokeCallback15R((par) => { - Console.WriteLine("S15: {0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}, {8}", par.a, par.b, par.c, par.d, par.e, par.f, par.g, par.h, par.i); - if (par.a != 1 || par.b != 2 || par.c != 3 || par.d != 4 || - par.e != 5 || par.f != 6 || par.g != 7 || par.h != 8 || par.i != 9) + S15 s15r = InvokeCallback15R((par) => + { + Console.WriteLine("S15: {0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}, {8}", par.a, par.b, par.c, par.d, par.e, par.f, par.g, par.h, par.i); + if (par.a != 1 || par.b != 2 || par.c != 3 || par.d != 4 || + par.e != 5 || par.f != 6 || par.g != 7 || par.h != 8 || par.i != 9) + { + throw new System.Exception(); + } + }, s15); + Console.WriteLine("S15R: {0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}, {8}", s15r.a, s15r.b, s15r.c, s15r.d, s15r.e, s15r.f, s15r.g, s15r.h, s15r.i); + if (s15r.a != 1 || s15r.b != 2 || s15r.c != 3 || s15r.d != 4 || + s15r.e != 5 || s15r.f != 6 || s15r.g != 7 || s15r.h != 8 || s15r.i != 9) { throw new System.Exception(); } - }, s15); - Console.WriteLine("S15R: {0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}, {8}", s15r.a, s15r.b, s15r.c, s15r.d, s15r.e, s15r.f, s15r.g, s15r.h, s15r.i); - if (s15r.a != 1 || s15r.b != 2 || s15r.c != 3 || s15r.d != 4 || - s15r.e != 5 || s15r.f != 6 || s15r.g != 7 || s15r.h != 8 || s15r.i != 9) - { - throw new System.Exception(); - } - S16 s16r = InvokeCallback16R((par) => { - Console.WriteLine("S16: {0}, {1}", par.x, par.y); - if (par.x != 1 || par.y != 2) + S16 s16r = InvokeCallback16R((par) => + { + Console.WriteLine("S16: {0}, {1}", par.x, par.y); + if (par.x != 1 || par.y != 2) + { + throw new System.Exception(); + } + }, s16); + Console.WriteLine("S16R: {0}, {1}", s16r.x, s16r.y); + if (s16r.x != 1 || s16r.y != 2) { throw new System.Exception(); } - }, s16); - Console.WriteLine("S16R: {0}, {1}", s16r.x, s16r.y); - if (s16r.x != 1 || s16r.y != 2) - { - throw new System.Exception(); - } - S17 s17r = InvokeCallback17R((par) => { - Console.WriteLine("S17: {0}, {1}", par.x, par.y); - if (par.x != 1 || par.y!= 2) + S17 s17r = InvokeCallback17R((par) => + { + Console.WriteLine("S17: {0}, {1}", par.x, par.y); + if (par.x != 1 || par.y != 2) + { + throw new System.Exception(); + } + }, s17); + Console.WriteLine("S17R: {0}, {1}", s17r.x, s17r.y); + if (s17r.x != 1 || s17r.y != 2) { throw new System.Exception(); } - }, s17); - Console.WriteLine("S17R: {0}, {1}", s17r.x, s17r.y); - if (s17r.x != 1 || s17r.y != 2) - { - throw new System.Exception(); - } - S18 s18r = InvokeCallback18R((par) => { - Console.WriteLine("S18: {0}, {1}, {2}", par.x, par.y, par.z); - if (par.x != 1 || par.y != 2 || par.z != 3) + S18 s18r = InvokeCallback18R((par) => + { + Console.WriteLine("S18: {0}, {1}, {2}", par.x, par.y, par.z); + if (par.x != 1 || par.y != 2 || par.z != 3) + { + throw new System.Exception(); + } + }, s18); + Console.WriteLine("S18R: {0}, {1}, {2}", s18r.x, s18r.y, s18r.z); + if (s18r.x != 1 || s18r.y != 2 || s18r.z != 3) { throw new System.Exception(); } - }, s18); - Console.WriteLine("S18R: {0}, {1}, {2}", s18r.x, s18r.y, s18r.z); - if (s18r.x != 1 || s18r.y != 2 || s18r.z != 3) - { - throw new System.Exception(); - } - S19 s19r = InvokeCallback19R((par) => { - Console.WriteLine("S19: {0}, {1}, {2}, {3}", par.x, par.y, par.z, par.w); - if (par.x != 1 || par.y != 2 || par.z != 3 || par.w != 4) + S19 s19r = InvokeCallback19R((par) => + { + Console.WriteLine("S19: {0}, {1}, {2}, {3}", par.x, par.y, par.z, par.w); + if (par.x != 1 || par.y != 2 || par.z != 3 || par.w != 4) + { + throw new System.Exception(); + } + }, s19); + Console.WriteLine("S19R: {0}, {1}, {2}, {3}", s19r.x, s19r.y, s19r.z, s19r.w); + if (s19r.x != 1 || s19r.y != 2 || s19r.z != 3 || s19r.w != 4) { throw new System.Exception(); } - }, s19); - Console.WriteLine("S19R: {0}, {1}, {2}, {3}", s19r.x, s19r.y, s19r.z, s19r.w); - if (s19r.x != 1 || s19r.y != 2 || s19r.z != 3 || s19r.w != 4) - { - throw new System.Exception(); - } - S20 s20r = InvokeCallback20R((par) => { - Console.WriteLine("S20: {0}, {1}, {2}, {3}", par.x, par.y, par.z, par.w); - if (par.x != 1 || par.y != 2 || par.z != 3 || par.w != 4) + S20 s20r = InvokeCallback20R((par) => + { + Console.WriteLine("S20: {0}, {1}, {2}, {3}", par.x, par.y, par.z, par.w); + if (par.x != 1 || par.y != 2 || par.z != 3 || par.w != 4) + { + throw new System.Exception(); + } + }, s20); + Console.WriteLine("S20R: {0}, {1}, {2}, {3}", s20r.x, s20r.y, s20r.z, s20r.w); + if (s20r.x != 1 || s20r.y != 2 || s20r.z != 3 || s20r.w != 4) { throw new System.Exception(); } - }, s20); - Console.WriteLine("S20R: {0}, {1}, {2}, {3}", s20r.x, s20r.y, s20r.z, s20r.w); - if (s20r.x != 1 || s20r.y != 2 || s20r.z != 3 || s20r.w != 4) - { - throw new System.Exception(); - } -/* These tests are not working on non Windows CoreCLR. Enable this when GH Issue #2076 is resolved. - s28.x = null; - S28 s28r = InvokeCallback28R((par) => { - Console.WriteLine("S28: {0}, {1}", par.x == null ? "Null" : "Not null", par.y); - if (par.x == null || par.y != 5) + /* These tests are not working on non Windows CoreCLR. Enable this when GH Issue #2076 is resolved. + s28.x = null; + S28 s28r = InvokeCallback28R((par) => { + Console.WriteLine("S28: {0}, {1}", par.x == null ? "Null" : "Not null", par.y); + if (par.x == null || par.y != 5) + { + throw new System.Exception(); + } + }, s28); + Console.WriteLine("S28R: {0}, {1}", s28r.x == null ? "Null" : "Not null", s28r.y); + if (s28r.x == null || s28r.y != 5) { throw new System.Exception(); } - }, s28); - Console.WriteLine("S28R: {0}, {1}", s28r.x == null ? "Null" : "Not null", s28r.y); - if (s28r.x == null || s28r.y != 5) - { - throw new System.Exception(); - } - s28.x = testClass; - s28.y = 5; - - s28r = InvokeCallback28R((par) => { - Console.WriteLine("S28: {0}, {1}", par.x == null ? "Null" : "Not null", par.y); - if (par.x != testClass || par.y != 5) + s28.x = testClass; + s28.y = 5; + + s28r = InvokeCallback28R((par) => { + Console.WriteLine("S28: {0}, {1}", par.x == null ? "Null" : "Not null", par.y); + if (par.x != testClass || par.y != 5) + { + throw new System.Exception(); + } + }, s28); + Console.WriteLine("S28R: {0}, {1}", s28r.x == null ? "Null" : "Not null", s28r.y); + if (s28r.x != testClass || s28r.y != 5) { throw new System.Exception(); } - }, s28); - Console.WriteLine("S28R: {0}, {1}", s28r.x == null ? "Null" : "Not null", s28r.y); - if (s28r.x != testClass || s28r.y != 5) - { - throw new System.Exception(); - } - s29.y = null; - S29 s29r = InvokeCallback29R((par) => { - Console.WriteLine("S29: {0}, {1}", par.x, par.y == null ? "Null" : "Not null"); - if (par.x != 5 || par.y == null) + s29.y = null; + S29 s29r = InvokeCallback29R((par) => { + Console.WriteLine("S29: {0}, {1}", par.x, par.y == null ? "Null" : "Not null"); + if (par.x != 5 || par.y == null) + { + throw new System.Exception(); + } + }, s29); + Console.WriteLine("S29R: {0}, {1}", s29r.x, s29r.y == null ? "Null" : "Not null"); + if (s29r.x != 5 || s29r.y == null) { throw new System.Exception(); } - }, s29); - Console.WriteLine("S29R: {0}, {1}", s29r.x, s29r.y == null ? "Null" : "Not null"); - if (s29r.x != 5 || s29r.y == null) - { - throw new System.Exception(); - } - s29.x = 5; - s29.y = testClass; - s29r = InvokeCallback29R((par) => { - Console.WriteLine("S29: {0}, {1}", par.x, par.y == null ? "Null" : "Not null"); - if (par.x != 5 || par.y != testClass) + s29.x = 5; + s29.y = testClass; + s29r = InvokeCallback29R((par) => { + Console.WriteLine("S29: {0}, {1}", par.x, par.y == null ? "Null" : "Not null"); + if (par.x != 5 || par.y != testClass) + { + throw new System.Exception(); + } + }, s29); + Console.WriteLine("S29R: {0}, {1}", s29r.x, s29r.y == null ? "Null" : "Not null"); + if (s29r.x != 5 || s29r.y != testClass) { throw new System.Exception(); } - }, s29); - Console.WriteLine("S29R: {0}, {1}", s29r.x, s29r.y == null ? "Null" : "Not null"); - if (s29r.x != 5 || s29r.y != testClass) + Enable this when GH Issue #2076 is resolved. */ + } + catch (Exception e) { - throw new System.Exception(); + Console.WriteLine(e.Message); + return -1; } - Enable this when GH Issue #2076 is resolved. */ return 100; } diff --git a/tests/src/JIT/Methodical/structs/valuetuple.cs b/tests/src/JIT/Methodical/structs/valuetuple.cs new file mode 100644 index 0000000000..9e8af5e20c --- /dev/null +++ b/tests/src/JIT/Methodical/structs/valuetuple.cs @@ -0,0 +1,95 @@ +// Licensed to the .NET Foundation under one or more 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 is extracted and simplified from the corefx tests for the ValueTuple class. +// It exposed an issue with assertion propagation not validating the assertions +// for a containing struct when a field lclVar is defined. + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Runtime.InteropServices; + +[StructLayout(LayoutKind.Auto)] +public struct ValueTuple +{ + public T1 Item1; + public T2 Item2; + public T3 Item3; + public ValueTuple(T1 item1, T2 item2, T3 item3) + { + Item1 = item1; + Item2 = item2; + Item3 = item3; + } + + public static ValueTuple Create(T1 item1, T2 item2, T3 item3) => + new ValueTuple(item1, item2, item3); + + public override bool Equals(object obj) + { + return obj is ValueTuple && Equals((ValueTuple)obj); + } + + public bool Equals(ValueTuple other) + { + return Item1.Equals(other.Item1) && Item2.Equals(other.Item2) && Item3.Equals(other.Item3); + } + public override int GetHashCode() + { + return 0; + } +} + +public static class TupleExtensions +{ + public static ValueTuple + ToValueTuple( + this Tuple value) + { + return ValueTuple.Create(value.Item1, value.Item2, value.Item3); + } + public static Tuple + ToTuple( + this ValueTuple value) + { + return Tuple.Create(value.Item1, value.Item2, value.Item3); + } +} + +public class StructOptsTest +{ + const int Pass = 100; + const int Fail = -1; + + public static int ConvertToRef3() + { + var refTuple = Tuple.Create(-1, -1, -1); + var valueTuple = ValueTuple.Create(1, 2, 3); + + refTuple = valueTuple.ToTuple(); + if (!String.Equals("(1, 2, 3)", refTuple.ToString())) + { + Console.WriteLine("Expected (1, 2, 3); got " + refTuple.ToString()); + return Fail; + } + return Pass; + } + + public static int Main() + { + int returnVal = Fail; + try + { + returnVal = ConvertToRef3(); + } + catch (Exception e) + { + Console.WriteLine("Unexpected exception " + e.Message); + returnVal = Fail; + } + return returnVal; + } +} diff --git a/tests/src/JIT/Methodical/structs/valuetuple.csproj b/tests/src/JIT/Methodical/structs/valuetuple.csproj new file mode 100644 index 0000000000..486744bb36 --- /dev/null +++ b/tests/src/JIT/Methodical/structs/valuetuple.csproj @@ -0,0 +1,41 @@ + + + + + Debug + AnyCPU + 2.0 + {0B8F1AF4-9355-4307-BC68-08A2947AD3B9} + Exe + Properties + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + $(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages + ..\..\ + 7a9bfb7d + true + + + + + + + + + False + + + + + + + + + + $(JitPackagesConfigFileDirectory)threading+thread\project.json + $(JitPackagesConfigFileDirectory)threading+thread\project.lock.json + + + + + diff --git a/tests/src/JIT/Performance/CodeQuality/BenchF/Adams/Adams.cs b/tests/src/JIT/Performance/CodeQuality/BenchF/Adams/Adams.cs index 427ec9269e..431d857f16 100644 --- a/tests/src/JIT/Performance/CodeQuality/BenchF/Adams/Adams.cs +++ b/tests/src/JIT/Performance/CodeQuality/BenchF/Adams/Adams.cs @@ -18,6 +18,8 @@ using Microsoft.Xunit.Performance; [assembly: MeasureInstructionsRetired] #endif // XUNIT_PERF +namespace Benchstone.BenchF +{ public static class Adams { #if DEBUG @@ -41,7 +43,7 @@ public static class Adams #if VERBOSE Console.WriteLine(" ADAMS-MOULTON METHOD "); -#endif // VERBOSE +#endif // VERBOSE n = 4; h = 1.0 / 32.0; @@ -67,7 +69,7 @@ public static class Adams f[i] = xn + yn; #if VERBOSE Console.WriteLine("{0}, {1}, {2}, {3}, {4}", k, xn, yn, dn, en); -#endif // VERBOSE +#endif // VERBOSE } for (k = 4; k <= nstep; k++) @@ -137,7 +139,7 @@ public static class Adams bool result = true; // Note: we can't check xn or yn better because of the precision - // with which original results are given + // with which original results are given result &= System.Math.Abs(g_xn_base - g_xn) <= 1.5e-7; result &= System.Math.Abs(g_yn_base - g_yn) <= 1.5e-7; result &= System.Math.Abs(g_dn) <= 2.5e-9; @@ -161,3 +163,4 @@ public static class Adams return (result ? 100 : -1); } } +} diff --git a/tests/src/JIT/Performance/CodeQuality/BenchF/BenchMk2/BenchMk2.cs b/tests/src/JIT/Performance/CodeQuality/BenchF/BenchMk2/BenchMk2.cs index 970164405b..c4cfc0b217 100644 --- a/tests/src/JIT/Performance/CodeQuality/BenchF/BenchMk2/BenchMk2.cs +++ b/tests/src/JIT/Performance/CodeQuality/BenchF/BenchMk2/BenchMk2.cs @@ -11,6 +11,8 @@ using Xunit; [assembly: OptimizeForBenchmarks] [assembly: MeasureInstructionsRetired] +namespace Benchstone.BenchF +{ public static class BenchMk2 { #if DEBUG @@ -64,3 +66,4 @@ public static class BenchMk2 return (result ? 100 : -1); } } +} diff --git a/tests/src/JIT/Performance/CodeQuality/BenchF/BenchMrk/BenchMrk.cs b/tests/src/JIT/Performance/CodeQuality/BenchF/BenchMrk/BenchMrk.cs index 27a5fe617c..f342b2d84e 100644 --- a/tests/src/JIT/Performance/CodeQuality/BenchF/BenchMrk/BenchMrk.cs +++ b/tests/src/JIT/Performance/CodeQuality/BenchF/BenchMrk/BenchMrk.cs @@ -11,6 +11,8 @@ using Xunit; [assembly: OptimizeForBenchmarks] [assembly: MeasureInstructionsRetired] +namespace Benchstone.BenchF +{ public static class BenchMrk { #if DEBUG @@ -64,3 +66,4 @@ public static class BenchMrk return (result ? 100 : -1); } } +} diff --git a/tests/src/JIT/Performance/CodeQuality/BenchF/Bisect/Bisect.cs b/tests/src/JIT/Performance/CodeQuality/BenchF/Bisect/Bisect.cs index 1c27003567..724416a626 100644 --- a/tests/src/JIT/Performance/CodeQuality/BenchF/Bisect/Bisect.cs +++ b/tests/src/JIT/Performance/CodeQuality/BenchF/Bisect/Bisect.cs @@ -12,6 +12,8 @@ using Xunit; [assembly: OptimizeForBenchmarks] [assembly: MeasureInstructionsRetired] +namespace Benchstone.BenchF +{ public static class Bisect { #if DEBUG @@ -161,3 +163,4 @@ public static class Bisect return (result ? 100 : -1); } } +} diff --git a/tests/src/JIT/Performance/CodeQuality/BenchF/DMath/DMath.cs b/tests/src/JIT/Performance/CodeQuality/BenchF/DMath/DMath.cs index a2c3a385cd..47c5e20285 100644 --- a/tests/src/JIT/Performance/CodeQuality/BenchF/DMath/DMath.cs +++ b/tests/src/JIT/Performance/CodeQuality/BenchF/DMath/DMath.cs @@ -11,6 +11,8 @@ using Xunit; [assembly: OptimizeForBenchmarks] [assembly: MeasureInstructionsRetired] +namespace Benchstone.BenchF +{ public static class DMath { #if DEBUG @@ -110,4 +112,5 @@ public static class DMath return (result ? 100 : -1); } } +} diff --git a/tests/src/JIT/Performance/CodeQuality/BenchF/FFT/FFT.cs b/tests/src/JIT/Performance/CodeQuality/BenchF/FFT/FFT.cs index 3e853273fb..8881eae6c6 100644 --- a/tests/src/JIT/Performance/CodeQuality/BenchF/FFT/FFT.cs +++ b/tests/src/JIT/Performance/CodeQuality/BenchF/FFT/FFT.cs @@ -13,6 +13,8 @@ using Xunit; [assembly: OptimizeForBenchmarks] [assembly: MeasureInstructionsRetired] +namespace Benchstone.BenchF +{ public static class FFT { #if DEBUG @@ -151,3 +153,4 @@ public static class FFT return (result ? 100 : -1); } } +} diff --git a/tests/src/JIT/Performance/CodeQuality/BenchF/InProd/InProd.cs b/tests/src/JIT/Performance/CodeQuality/BenchF/InProd/InProd.cs index ff54ea7acd..26096b736e 100644 --- a/tests/src/JIT/Performance/CodeQuality/BenchF/InProd/InProd.cs +++ b/tests/src/JIT/Performance/CodeQuality/BenchF/InProd/InProd.cs @@ -11,6 +11,8 @@ using Xunit; [assembly: OptimizeForBenchmarks] [assembly: MeasureInstructionsRetired] +namespace Benchstone.BenchF +{ public static class InProd { #if DEBUG @@ -132,3 +134,4 @@ public static class InProd return (result ? 100 : -1); } } +} diff --git a/tests/src/JIT/Performance/CodeQuality/BenchF/InvMt/InvMt.cs b/tests/src/JIT/Performance/CodeQuality/BenchF/InvMt/InvMt.cs index a5f387b7f5..6ecfb62d91 100644 --- a/tests/src/JIT/Performance/CodeQuality/BenchF/InvMt/InvMt.cs +++ b/tests/src/JIT/Performance/CodeQuality/BenchF/InvMt/InvMt.cs @@ -12,6 +12,8 @@ using Xunit; [assembly: OptimizeForBenchmarks] [assembly: MeasureInstructionsRetired] +namespace Benchstone.BenchF +{ public static class InvMt { #if DEBUG @@ -135,3 +137,4 @@ public static class InvMt return (result ? 100 : -1); } } +} diff --git a/tests/src/JIT/Performance/CodeQuality/BenchF/LLoops/LLoops.cs b/tests/src/JIT/Performance/CodeQuality/BenchF/LLoops/LLoops.cs index 6dcb6c435c..73ec09aa04 100644 --- a/tests/src/JIT/Performance/CodeQuality/BenchF/LLoops/LLoops.cs +++ b/tests/src/JIT/Performance/CodeQuality/BenchF/LLoops/LLoops.cs @@ -60,6 +60,8 @@ using Xunit; [assembly: OptimizeForBenchmarks] [assembly: MeasureInstructionsRetired] +namespace Benchstone.BenchF +{ public class LLoops { #if DEBUG @@ -648,3 +650,4 @@ public class LLoops return (result ? 100 : -1); } } +} diff --git a/tests/src/JIT/Performance/CodeQuality/BenchF/Lorenz/Lorenz.cs b/tests/src/JIT/Performance/CodeQuality/BenchF/Lorenz/Lorenz.cs index bff6398d3b..5819446bf0 100644 --- a/tests/src/JIT/Performance/CodeQuality/BenchF/Lorenz/Lorenz.cs +++ b/tests/src/JIT/Performance/CodeQuality/BenchF/Lorenz/Lorenz.cs @@ -12,6 +12,8 @@ using Xunit; [assembly: OptimizeForBenchmarks] [assembly: MeasureInstructionsRetired] +namespace Benchstone.BenchF +{ public static class Lorenz { #if DEBUG @@ -132,3 +134,4 @@ public static class Lorenz return (result ? 100 : -1); } } +} diff --git a/tests/src/JIT/Performance/CodeQuality/BenchF/MatInv4/MatInv4.cs b/tests/src/JIT/Performance/CodeQuality/BenchF/MatInv4/MatInv4.cs index eb5e33b130..a00c29b843 100644 --- a/tests/src/JIT/Performance/CodeQuality/BenchF/MatInv4/MatInv4.cs +++ b/tests/src/JIT/Performance/CodeQuality/BenchF/MatInv4/MatInv4.cs @@ -10,6 +10,8 @@ using Xunit; [assembly: OptimizeForBenchmarks] [assembly: MeasureInstructionsRetired] +namespace Benchstone.BenchF +{ public static class MatInv4 { #if DEBUG @@ -217,11 +219,11 @@ public static class MatInv4 // 0 < ik <= n^2 ik = nk + i; hold = a[ik - 1]; - // -n < ij <= 0 + // -n < ij <= 0 ij = i - n; for (j = 1; j <= n; ++j) { - // i <= n, ij <= n + n + ... + n (n times) or ij <= n * n + // i <= n, ij <= n + n + ... + n (n times) or ij <= n * n ij = ij + n; if (j == k) { @@ -237,7 +239,7 @@ public static class MatInv4 kj = k - n; for (j = 1; j <= n; ++j) { - // k <= n, kj <= n + n + ... + n (n times) or kj <= n * n + // k <= n, kj <= n + n + ... + n (n times) or kj <= n * n kj = kj + n; if (j == k) { @@ -268,11 +270,11 @@ public static class MatInv4 jr = n * (i - 1); for (j = 1; j <= n; ++j) { - // jk <= n^2 - n + n + // jk <= n^2 - n + n // jk <= n^2 jk = jq + j; hold = a[jk - 1]; - // ji <= n^2 - n + n + // ji <= n^2 - n + n // ji <= n^2 ji = jr + j; a[jk - 1] = -a[ji - 1]; @@ -288,7 +290,7 @@ public static class MatInv4 ki = k - n; for (i = 1; i <= n; ++i) { - // ki <= n + n + ... + n (n times) or ki <= n * n + // ki <= n + n + ... + n (n times) or ki <= n * n ki = ki + n; hold = a[ki - 1]; // if i=1, ji = (1 + (n-1) * n) - 1 + n ==> ij = n^2 @@ -378,7 +380,7 @@ public static class MatInv4 { if (j != k) { - // Accessing upto n^2 - n + n - 1 ==> n^2 - 1 + // Accessing upto n^2 - n + n - 1 ==> n^2 - 1 a[(i - 1) * n + (j - 1)] = a[(i - 1) * n + (k - 1)] * a[(k - 1) * n + (j - 1)] + a[(i - 1) * n + (j - 1)]; } } @@ -493,3 +495,4 @@ public static class MatInv4 return (result ? 100 : -1); } } +} diff --git a/tests/src/JIT/Performance/CodeQuality/BenchF/NewtE/NewtE.cs b/tests/src/JIT/Performance/CodeQuality/BenchF/NewtE/NewtE.cs index 0fc14132f1..47f90d8616 100644 --- a/tests/src/JIT/Performance/CodeQuality/BenchF/NewtE/NewtE.cs +++ b/tests/src/JIT/Performance/CodeQuality/BenchF/NewtE/NewtE.cs @@ -13,6 +13,8 @@ using Xunit; [assembly: OptimizeForBenchmarks] [assembly: MeasureInstructionsRetired] +namespace Benchstone.BenchF +{ public static class NewtE { #if DEBUG @@ -133,3 +135,4 @@ public static class NewtE return (result ? 100 : -1); } } +} diff --git a/tests/src/JIT/Performance/CodeQuality/BenchF/NewtR/NewtR.cs b/tests/src/JIT/Performance/CodeQuality/BenchF/NewtR/NewtR.cs index cf945bc110..c590f6e570 100644 --- a/tests/src/JIT/Performance/CodeQuality/BenchF/NewtR/NewtR.cs +++ b/tests/src/JIT/Performance/CodeQuality/BenchF/NewtR/NewtR.cs @@ -12,6 +12,8 @@ using Xunit; [assembly: OptimizeForBenchmarks] [assembly: MeasureInstructionsRetired] +namespace Benchstone.BenchF +{ public static class NewtR { #if DEBUG @@ -129,3 +131,4 @@ public static class NewtR return (result ? 100 : -1); } } +} diff --git a/tests/src/JIT/Performance/CodeQuality/BenchF/Regula/Regula.cs b/tests/src/JIT/Performance/CodeQuality/BenchF/Regula/Regula.cs index 9743ab698c..0011288e55 100644 --- a/tests/src/JIT/Performance/CodeQuality/BenchF/Regula/Regula.cs +++ b/tests/src/JIT/Performance/CodeQuality/BenchF/Regula/Regula.cs @@ -12,6 +12,8 @@ using Xunit; [assembly: OptimizeForBenchmarks] [assembly: MeasureInstructionsRetired] +namespace Benchstone.BenchF +{ public static class Regula { #if DEBUG @@ -191,3 +193,4 @@ public static class Regula return (result ? 100 : -1); } } +} diff --git a/tests/src/JIT/Performance/CodeQuality/BenchF/Romber/Romber.cs b/tests/src/JIT/Performance/CodeQuality/BenchF/Romber/Romber.cs index 5824cd43cc..a4d56f7b0f 100644 --- a/tests/src/JIT/Performance/CodeQuality/BenchF/Romber/Romber.cs +++ b/tests/src/JIT/Performance/CodeQuality/BenchF/Romber/Romber.cs @@ -12,6 +12,8 @@ using Xunit; [assembly: OptimizeForBenchmarks] [assembly: MeasureInstructionsRetired] +namespace Benchstone.BenchF +{ public static class Romber { #if DEBUG @@ -167,3 +169,4 @@ public static class Romber return (result ? 100 : -1); } } +} diff --git a/tests/src/JIT/Performance/CodeQuality/BenchF/Secant/Secant.cs b/tests/src/JIT/Performance/CodeQuality/BenchF/Secant/Secant.cs index e7d1ace2e6..060fb5b0a4 100644 --- a/tests/src/JIT/Performance/CodeQuality/BenchF/Secant/Secant.cs +++ b/tests/src/JIT/Performance/CodeQuality/BenchF/Secant/Secant.cs @@ -12,6 +12,8 @@ using Xunit; [assembly: OptimizeForBenchmarks] [assembly: MeasureInstructionsRetired] +namespace Benchstone.BenchF +{ public static class Secant { #if DEBUG @@ -140,3 +142,4 @@ public static class Secant return (result ? 100 : -1); } } +} diff --git a/tests/src/JIT/Performance/CodeQuality/BenchF/Simpsn/Simpsn.cs b/tests/src/JIT/Performance/CodeQuality/BenchF/Simpsn/Simpsn.cs index e1e9f0eb1f..5b2df292af 100644 --- a/tests/src/JIT/Performance/CodeQuality/BenchF/Simpsn/Simpsn.cs +++ b/tests/src/JIT/Performance/CodeQuality/BenchF/Simpsn/Simpsn.cs @@ -12,6 +12,8 @@ using Xunit; [assembly: OptimizeForBenchmarks] [assembly: MeasureInstructionsRetired] +namespace Benchstone.BenchF +{ public static class Simpsn { #if DEBUG @@ -91,3 +93,4 @@ public static class Simpsn return (result ? 100 : -1); } } +} diff --git a/tests/src/JIT/Performance/CodeQuality/BenchF/SqMtx/SqMtx.cs b/tests/src/JIT/Performance/CodeQuality/BenchF/SqMtx/SqMtx.cs index 673757cedf..b22aad88b7 100644 --- a/tests/src/JIT/Performance/CodeQuality/BenchF/SqMtx/SqMtx.cs +++ b/tests/src/JIT/Performance/CodeQuality/BenchF/SqMtx/SqMtx.cs @@ -11,6 +11,8 @@ using Xunit; [assembly: OptimizeForBenchmarks] [assembly: MeasureInstructionsRetired] +namespace Benchstone.BenchF +{ public static class SqMtx { #if DEBUG @@ -101,3 +103,4 @@ public static class SqMtx return (result ? 100 : -1); } } +} diff --git a/tests/src/JIT/Performance/CodeQuality/BenchF/Trap/Trap.cs b/tests/src/JIT/Performance/CodeQuality/BenchF/Trap/Trap.cs index a5e3e5c0d6..3a0de102ed 100644 --- a/tests/src/JIT/Performance/CodeQuality/BenchF/Trap/Trap.cs +++ b/tests/src/JIT/Performance/CodeQuality/BenchF/Trap/Trap.cs @@ -12,6 +12,8 @@ using Xunit; [assembly: OptimizeForBenchmarks] [assembly: MeasureInstructionsRetired] +namespace Benchstone.BenchF +{ public static class Trap { #if DEBUG @@ -94,3 +96,4 @@ public static class Trap return (result ? 100 : -1); } } +} diff --git a/tests/src/JIT/Performance/CodeQuality/BenchF/Whetsto/Whetsto.cs b/tests/src/JIT/Performance/CodeQuality/BenchF/Whetsto/Whetsto.cs index 2ab0b61ee0..ffe3fa5d8b 100644 --- a/tests/src/JIT/Performance/CodeQuality/BenchF/Whetsto/Whetsto.cs +++ b/tests/src/JIT/Performance/CodeQuality/BenchF/Whetsto/Whetsto.cs @@ -12,6 +12,8 @@ using Xunit; [assembly: OptimizeForBenchmarks] [assembly: MeasureInstructionsRetired] +namespace Benchstone.BenchF +{ public static class Whetsto { #if DEBUG @@ -240,3 +242,4 @@ public static class Whetsto return (result ? 100 : -1); } } +} diff --git a/tests/src/JIT/Performance/CodeQuality/BenchI/8Queens/8Queens.cs b/tests/src/JIT/Performance/CodeQuality/BenchI/8Queens/8Queens.cs index 76ed0c8e71..e641ee0a74 100644 --- a/tests/src/JIT/Performance/CodeQuality/BenchI/8Queens/8Queens.cs +++ b/tests/src/JIT/Performance/CodeQuality/BenchI/8Queens/8Queens.cs @@ -11,6 +11,8 @@ using Xunit; [assembly: OptimizeForBenchmarks] [assembly: MeasureInstructionsRetired] +namespace Benchstone.BenchI +{ public static class EightQueens { @@ -68,7 +70,7 @@ public static class EightQueens } i = i + 1; } - + TryMe(1, ref q, b, a); return (q == 1); @@ -92,9 +94,10 @@ public static class EightQueens } return result; } - + public static int Main() { bool result = TestBase(); return (result ? 100 : -1); } } +} diff --git a/tests/src/JIT/Performance/CodeQuality/BenchI/Ackermann/Ackermann.cs b/tests/src/JIT/Performance/CodeQuality/BenchI/Ackermann/Ackermann.cs index 512f35f82d..5bfa196527 100644 --- a/tests/src/JIT/Performance/CodeQuality/BenchI/Ackermann/Ackermann.cs +++ b/tests/src/JIT/Performance/CodeQuality/BenchI/Ackermann/Ackermann.cs @@ -11,6 +11,8 @@ using Xunit; [assembly: OptimizeForBenchmarks] [assembly: MeasureInstructionsRetired] +namespace Benchstone.BenchI +{ public static class Ackermann { @@ -40,7 +42,7 @@ public static class Ackermann int a33 = Acker(3, 3); return (a00 == 1) && (a11 == 3) && (a22 == 7) & (a33 == 61); } - + [Benchmark] public static void Test() { foreach (var iteration in Benchmark.Iterations) { @@ -59,9 +61,10 @@ public static class Ackermann } return result; } - + public static int Main() { bool result = TestBase(); return (result ? 100 : -1); } } +} diff --git a/tests/src/JIT/Performance/CodeQuality/BenchI/AddArray/AddArray.cs b/tests/src/JIT/Performance/CodeQuality/BenchI/AddArray/AddArray.cs index 0fa2ff90eb..d38e6b4475 100644 --- a/tests/src/JIT/Performance/CodeQuality/BenchI/AddArray/AddArray.cs +++ b/tests/src/JIT/Performance/CodeQuality/BenchI/AddArray/AddArray.cs @@ -11,6 +11,8 @@ using Xunit; [assembly: OptimizeForBenchmarks] [assembly: MeasureInstructionsRetired] +namespace Benchstone.BenchI +{ public static class AddArray { @@ -48,14 +50,14 @@ public static class AddArray m = j; flags4[m] = flags3[l] + m + m + m + m; } - + for (j = 0; j <= Size; j++) { k = j; l = j; m = j; flags1[j] = flags1[j] + flags2[k] + flags3[l] + flags4[m] - flags2[k - j + l]; } - + // Escape each flags array so that their elements will appear live-out Escape(flags1); Escape(flags2); @@ -83,9 +85,10 @@ public static class AddArray } return result; } - + public static int Main() { bool result = TestBase(); return (result ? 100 : -1); } } +} diff --git a/tests/src/JIT/Performance/CodeQuality/BenchI/AddArray2/AddArray2.cs b/tests/src/JIT/Performance/CodeQuality/BenchI/AddArray2/AddArray2.cs index 865b9445f6..a6004f0309 100644 --- a/tests/src/JIT/Performance/CodeQuality/BenchI/AddArray2/AddArray2.cs +++ b/tests/src/JIT/Performance/CodeQuality/BenchI/AddArray2/AddArray2.cs @@ -11,6 +11,8 @@ using Xunit; [assembly: OptimizeForBenchmarks] [assembly: MeasureInstructionsRetired] +namespace Benchstone.BenchI +{ public static class AddArray2 { #if DEBUG @@ -129,3 +131,4 @@ public static class AddArray2 return (result ? 100 : -1); } } +} diff --git a/tests/src/JIT/Performance/CodeQuality/BenchI/Array1/Array1.cs b/tests/src/JIT/Performance/CodeQuality/BenchI/Array1/Array1.cs index 8d5dbd6153..780b7ce66f 100644 --- a/tests/src/JIT/Performance/CodeQuality/BenchI/Array1/Array1.cs +++ b/tests/src/JIT/Performance/CodeQuality/BenchI/Array1/Array1.cs @@ -18,6 +18,8 @@ using Xunit; [assembly: OptimizeForBenchmarks] [assembly: MeasureInstructionsRetired] +namespace Benchstone.BenchI +{ public static class Array1 { #if DEBUG @@ -152,3 +154,4 @@ public static class Array1 return (result ? 100 : -1); } } +} diff --git a/tests/src/JIT/Performance/CodeQuality/BenchI/Array2/Array2.cs b/tests/src/JIT/Performance/CodeQuality/BenchI/Array2/Array2.cs index 1b720b94fa..dac100c5a7 100644 --- a/tests/src/JIT/Performance/CodeQuality/BenchI/Array2/Array2.cs +++ b/tests/src/JIT/Performance/CodeQuality/BenchI/Array2/Array2.cs @@ -11,6 +11,8 @@ using Xunit; [assembly: OptimizeForBenchmarks] [assembly: MeasureInstructionsRetired] +namespace Benchstone.BenchI +{ public static class Array2 { @@ -75,7 +77,7 @@ public static class Array2 } bool result = VerifyCopy(s, d); - + return result; } @@ -92,9 +94,10 @@ public static class Array2 bool result = Bench(Iterations); return result; } - + public static int Main() { bool result = TestBase(); return (result ? 100 : -1); } } +} diff --git a/tests/src/JIT/Performance/CodeQuality/BenchI/BenchE/BenchE.cs b/tests/src/JIT/Performance/CodeQuality/BenchI/BenchE/BenchE.cs index 9cf7d770dc..b16c48280b 100644 --- a/tests/src/JIT/Performance/CodeQuality/BenchI/BenchE/BenchE.cs +++ b/tests/src/JIT/Performance/CodeQuality/BenchI/BenchE/BenchE.cs @@ -11,6 +11,8 @@ using Xunit; [assembly: OptimizeForBenchmarks] [assembly: MeasureInstructionsRetired] +namespace Benchstone.BenchI +{ public static class BenchE { #if DEBUG @@ -115,3 +117,4 @@ public static class BenchE return (result ? 100 : -1); } } +} diff --git a/tests/src/JIT/Performance/CodeQuality/BenchI/BubbleSort/BubbleSort.cs b/tests/src/JIT/Performance/CodeQuality/BenchI/BubbleSort/BubbleSort.cs index 78626fffc9..558484d3d6 100644 --- a/tests/src/JIT/Performance/CodeQuality/BenchI/BubbleSort/BubbleSort.cs +++ b/tests/src/JIT/Performance/CodeQuality/BenchI/BubbleSort/BubbleSort.cs @@ -11,6 +11,8 @@ using Xunit; [assembly: OptimizeForBenchmarks] [assembly: MeasureInstructionsRetired] +namespace Benchstone.BenchI +{ public static class BubbleSort { @@ -43,7 +45,7 @@ public static class BubbleSort return false; } } - + return true; } @@ -79,9 +81,10 @@ public static class BubbleSort } return result; } - + public static int Main() { bool result = TestBase(); return (result ? 100 : -1); } } +} diff --git a/tests/src/JIT/Performance/CodeQuality/BenchI/BubbleSort2/BubbleSort2.cs b/tests/src/JIT/Performance/CodeQuality/BenchI/BubbleSort2/BubbleSort2.cs index 55e5a5f8c5..8c2e63a954 100644 --- a/tests/src/JIT/Performance/CodeQuality/BenchI/BubbleSort2/BubbleSort2.cs +++ b/tests/src/JIT/Performance/CodeQuality/BenchI/BubbleSort2/BubbleSort2.cs @@ -11,6 +11,8 @@ using Xunit; [assembly: OptimizeForBenchmarks] [assembly: MeasureInstructionsRetired] +namespace Benchstone.BenchI +{ public static class BubbleSort2 { @@ -82,9 +84,10 @@ public static class BubbleSort2 } return result; } - + public static int Main() { bool result = TestBase(); return (result ? 100 : -1); } } +} diff --git a/tests/src/JIT/Performance/CodeQuality/BenchI/CSieve/CSieve.cs b/tests/src/JIT/Performance/CodeQuality/BenchI/CSieve/CSieve.cs index 606f740fb6..aca263711d 100644 --- a/tests/src/JIT/Performance/CodeQuality/BenchI/CSieve/CSieve.cs +++ b/tests/src/JIT/Performance/CodeQuality/BenchI/CSieve/CSieve.cs @@ -12,6 +12,8 @@ using Xunit; [assembly: OptimizeForBenchmarks] [assembly: MeasureInstructionsRetired] +namespace Benchstone.BenchI +{ public static class CSieve { @@ -74,9 +76,10 @@ public static class CSieve } return result; } - + public static int Main() { bool result = TestBase(); return (result ? 100 : -1); } } +} diff --git a/tests/src/JIT/Performance/CodeQuality/BenchI/Fib/Fib.cs b/tests/src/JIT/Performance/CodeQuality/BenchI/Fib/Fib.cs index 01064bb168..ee028db20f 100644 --- a/tests/src/JIT/Performance/CodeQuality/BenchI/Fib/Fib.cs +++ b/tests/src/JIT/Performance/CodeQuality/BenchI/Fib/Fib.cs @@ -11,6 +11,8 @@ using Xunit; [assembly: OptimizeForBenchmarks] [assembly: MeasureInstructionsRetired] +namespace Benchstone.BenchI +{ public static class Fib { @@ -30,7 +32,7 @@ public static class Fib return 1; } } - + [MethodImpl(MethodImplOptions.NoInlining)] static bool Bench() { int fib = Fibonacci(Number); @@ -55,9 +57,10 @@ public static class Fib } return result; } - + public static int Main() { bool result = TestBase(); return (result ? 100 : -1); } } +} diff --git a/tests/src/JIT/Performance/CodeQuality/BenchI/HeapSort/HeapSort.cs b/tests/src/JIT/Performance/CodeQuality/BenchI/HeapSort/HeapSort.cs index 9fd7aa32e0..64b5c8f33b 100644 --- a/tests/src/JIT/Performance/CodeQuality/BenchI/HeapSort/HeapSort.cs +++ b/tests/src/JIT/Performance/CodeQuality/BenchI/HeapSort/HeapSort.cs @@ -11,6 +11,8 @@ using Xunit; [assembly: OptimizeForBenchmarks] [assembly: MeasureInstructionsRetired] +namespace Benchstone.BenchI +{ public static class HeapSort { @@ -32,7 +34,7 @@ public static class HeapSort j = i; k = j / 2; m = x[i]; - + // 0 < k <= (n / 2) // 1 <= j <= n while (k > 0) { @@ -113,9 +115,10 @@ public static class HeapSort } return result; } - + public static int Main() { bool result = TestBase(); return (result ? 100 : -1); } } +} diff --git a/tests/src/JIT/Performance/CodeQuality/BenchI/IniArray/IniArray.cs b/tests/src/JIT/Performance/CodeQuality/BenchI/IniArray/IniArray.cs index 78fa233dbf..268af7b779 100644 --- a/tests/src/JIT/Performance/CodeQuality/BenchI/IniArray/IniArray.cs +++ b/tests/src/JIT/Performance/CodeQuality/BenchI/IniArray/IniArray.cs @@ -11,6 +11,8 @@ using Xunit; [assembly: OptimizeForBenchmarks] [assembly: MeasureInstructionsRetired] +namespace Benchstone.BenchI +{ public static class IniArray { @@ -52,9 +54,10 @@ public static class IniArray bool result = Bench(); return result; } - + public static int Main() { bool result = TestBase(); return (result ? 100 : -1); } } +} diff --git a/tests/src/JIT/Performance/CodeQuality/BenchI/LogicArray/LogicArray.cs b/tests/src/JIT/Performance/CodeQuality/BenchI/LogicArray/LogicArray.cs index f5ff746b86..c5b4e3b0d8 100644 --- a/tests/src/JIT/Performance/CodeQuality/BenchI/LogicArray/LogicArray.cs +++ b/tests/src/JIT/Performance/CodeQuality/BenchI/LogicArray/LogicArray.cs @@ -11,6 +11,8 @@ using Xunit; [assembly: OptimizeForBenchmarks] [assembly: MeasureInstructionsRetired] +namespace Benchstone.BenchI +{ public static class LogicArray { @@ -89,9 +91,10 @@ public static class LogicArray bool result = Bench(); return result; } - + public static int Main() { bool result = TestBase(); return (result ? 100 : -1); } } +} diff --git a/tests/src/JIT/Performance/CodeQuality/BenchI/Midpoint/Midpoint.cs b/tests/src/JIT/Performance/CodeQuality/BenchI/Midpoint/Midpoint.cs index 6e4f193746..9146874358 100644 --- a/tests/src/JIT/Performance/CodeQuality/BenchI/Midpoint/Midpoint.cs +++ b/tests/src/JIT/Performance/CodeQuality/BenchI/Midpoint/Midpoint.cs @@ -11,6 +11,8 @@ using Xunit; [assembly: OptimizeForBenchmarks] [assembly: MeasureInstructionsRetired] +namespace Benchstone.BenchI +{ public static class Midpoint { @@ -96,9 +98,10 @@ public static class Midpoint bool result = Bench(); return result; } - + public static int Main() { bool result = TestBase(); return (result ? 100 : -1); } } +} diff --git a/tests/src/JIT/Performance/CodeQuality/BenchI/MulMatrix/MulMatrix.cs b/tests/src/JIT/Performance/CodeQuality/BenchI/MulMatrix/MulMatrix.cs index 3f9c224d3d..a45c012984 100644 --- a/tests/src/JIT/Performance/CodeQuality/BenchI/MulMatrix/MulMatrix.cs +++ b/tests/src/JIT/Performance/CodeQuality/BenchI/MulMatrix/MulMatrix.cs @@ -11,6 +11,8 @@ using Xunit; [assembly: OptimizeForBenchmarks] [assembly: MeasureInstructionsRetired] +namespace Benchstone.BenchI +{ public static class MulMatrix { @@ -19,7 +21,7 @@ public static class MulMatrix #else public const int Iterations = 100; #endif - + const int Size = 75; static volatile object VolatileObject; @@ -132,9 +134,10 @@ public static class MulMatrix bool result = Bench(); return result; } - + public static int Main() { bool result = TestBase(); return (result ? 100 : -1); } } +} diff --git a/tests/src/JIT/Performance/CodeQuality/BenchI/NDhrystone/NDhrystone.cs b/tests/src/JIT/Performance/CodeQuality/BenchI/NDhrystone/NDhrystone.cs index c2526748ce..33effcbf40 100644 --- a/tests/src/JIT/Performance/CodeQuality/BenchI/NDhrystone/NDhrystone.cs +++ b/tests/src/JIT/Performance/CodeQuality/BenchI/NDhrystone/NDhrystone.cs @@ -7,7 +7,7 @@ // Dhrystone: a synthetic systems programming benchmark // Reinhold P. Weicker // Communications of the ACM, Volume 27 Issue 10, Oct 1984, Pages 1013-1030 - + using Microsoft.Xunit.Performance; using System; using System.Runtime.CompilerServices; @@ -16,6 +16,8 @@ using Xunit; [assembly: OptimizeForBenchmarks] [assembly: MeasureInstructionsRetired] +namespace Benchstone.BenchI +{ public static class NDhrystone { @@ -63,9 +65,9 @@ public static class NDhrystone int intLoc2; int intLoc3 = 0; Enumeration enumLoc; - + int i; /* modification */ - + m_ptrGlb.PtrComp = m_ptrGlbNext; m_ptrGlb.Discr = Enumeration.Ident1; m_ptrGlb.EnumComp = Enumeration.Ident3; @@ -117,12 +119,12 @@ public static class NDhrystone ptrParIn = ptrParIn.PtrComp; } } - + static void Proc2(ref int intParIO) { int intLoc; Enumeration enumLoc = Enumeration.Ident2; intLoc = intParIO + 10; - + for (;;) { if (s_char1Glob == 'A') { --intLoc; @@ -142,17 +144,17 @@ public static class NDhrystone else { s_intGlob = 100; } - + Proc7(10, s_intGlob, ref m_ptrGlb.IntComp); } - + static void Proc4() { bool boolLoc; boolLoc = s_char1Glob == 'A'; boolLoc |= s_boolGlob; s_char2Glob = 'B'; } - + static void Proc5() { s_char1Glob = 'A'; s_boolGlob = false; @@ -163,12 +165,12 @@ public static class NDhrystone if (!Func3(enumParIn)) { enumParOut = Enumeration.Ident4; } - + switch (enumParIn) { - case Enumeration.Ident1: + case Enumeration.Ident1: enumParOut = Enumeration.Ident1; break; - case Enumeration.Ident2: + case Enumeration.Ident2: if (s_intGlob > 100) { enumParOut = Enumeration.Ident1; } @@ -176,12 +178,12 @@ public static class NDhrystone enumParOut = Enumeration.Ident4; } break; - case Enumeration.Ident3: + case Enumeration.Ident3: enumParOut = Enumeration.Ident2; break; - case Enumeration.Ident4: + case Enumeration.Ident4: break; - case Enumeration.Ident5: + case Enumeration.Ident5: enumParOut = Enumeration.Ident3; break; } @@ -192,7 +194,7 @@ public static class NDhrystone intLoc = intParI1 + 2; intParOut = intParI2 + intLoc; } - + static void Proc8(int[] array1Par, int[][] array2Par, int intParI1, int intParI2) { int intLoc; intLoc = intParI1 + 5; @@ -206,7 +208,7 @@ public static class NDhrystone array2Par[intLoc + 20][intLoc] = array1Par[intLoc]; s_intGlob = 5; } - + static Enumeration Func1(char charPar1, char charPar2) { char charLoc1; char charLoc2; @@ -219,7 +221,7 @@ public static class NDhrystone return (Enumeration.Ident2); } } - + static bool Func2(char[] strParI1, char[] strParI2) { int intLoc; char charLoc = '\0'; @@ -243,18 +245,18 @@ public static class NDhrystone return true; } } - + return false; } } - + static bool Func3(Enumeration enumParIn) { Enumeration enumLoc; enumLoc = enumParIn; if (enumLoc == Enumeration.Ident3) { return true; } - + return false; } @@ -278,9 +280,10 @@ public static class NDhrystone bool result = Bench(); return result; } - + public static int Main() { bool result = TestBase(); return (result ? 100 : -1); } } +} diff --git a/tests/src/JIT/Performance/CodeQuality/BenchI/Permutate/Permutate.cs b/tests/src/JIT/Performance/CodeQuality/BenchI/Permutate/Permutate.cs index d7457cdbc1..43fc28b370 100644 --- a/tests/src/JIT/Performance/CodeQuality/BenchI/Permutate/Permutate.cs +++ b/tests/src/JIT/Performance/CodeQuality/BenchI/Permutate/Permutate.cs @@ -11,6 +11,8 @@ using Xunit; [assembly: OptimizeForBenchmarks] [assembly: MeasureInstructionsRetired] +namespace Benchstone.BenchI +{ public class Permutate { #if DEBUG @@ -114,3 +116,4 @@ public class Permutate return (result ? 100 : -1); } } +} diff --git a/tests/src/JIT/Performance/CodeQuality/BenchI/Pi/Pi.cs b/tests/src/JIT/Performance/CodeQuality/BenchI/Pi/Pi.cs index 112ff6df9b..2fe0918784 100644 --- a/tests/src/JIT/Performance/CodeQuality/BenchI/Pi/Pi.cs +++ b/tests/src/JIT/Performance/CodeQuality/BenchI/Pi/Pi.cs @@ -11,6 +11,8 @@ using Xunit; [assembly: OptimizeForBenchmarks] [assembly: MeasureInstructionsRetired] +namespace Benchstone.BenchI +{ public static class Pi { @@ -78,9 +80,10 @@ public static class Pi } return result; } - + public static int Main() { bool result = TestBase(); return (result ? 100 : -1); } } +} diff --git a/tests/src/JIT/Performance/CodeQuality/BenchI/Puzzle/Puzzle.cs b/tests/src/JIT/Performance/CodeQuality/BenchI/Puzzle/Puzzle.cs index 2b1c2847f4..2271e02455 100644 --- a/tests/src/JIT/Performance/CodeQuality/BenchI/Puzzle/Puzzle.cs +++ b/tests/src/JIT/Performance/CodeQuality/BenchI/Puzzle/Puzzle.cs @@ -11,6 +11,8 @@ using Xunit; [assembly: OptimizeForBenchmarks] [assembly: MeasureInstructionsRetired] +namespace Benchstone.BenchI +{ public class Puzzle { #if DEBUG @@ -391,3 +393,4 @@ public class Puzzle return (result ? 100 : -1); } } +} diff --git a/tests/src/JIT/Performance/CodeQuality/BenchI/QuickSort/QuickSort.cs b/tests/src/JIT/Performance/CodeQuality/BenchI/QuickSort/QuickSort.cs index 191211aaa8..7cdac96a69 100644 --- a/tests/src/JIT/Performance/CodeQuality/BenchI/QuickSort/QuickSort.cs +++ b/tests/src/JIT/Performance/CodeQuality/BenchI/QuickSort/QuickSort.cs @@ -11,6 +11,8 @@ using Xunit; [assembly: OptimizeForBenchmarks] [assembly: MeasureInstructionsRetired] +namespace Benchstone.BenchI +{ public static class QuickSort { @@ -52,7 +54,7 @@ public static class QuickSort arr[j] = temp; } } - + // need to swap the pivot and a[i](or a[j] as i==j) so // that the pivot will be at its final place in the sorted array @@ -108,9 +110,10 @@ public static class QuickSort } return result; } - + public static int Main() { bool result = TestBase(); return (result ? 100 : -1); } } +} diff --git a/tests/src/JIT/Performance/CodeQuality/BenchI/TreeInsert/TreeInsert.cs b/tests/src/JIT/Performance/CodeQuality/BenchI/TreeInsert/TreeInsert.cs index 8a24240538..2867abc4d4 100644 --- a/tests/src/JIT/Performance/CodeQuality/BenchI/TreeInsert/TreeInsert.cs +++ b/tests/src/JIT/Performance/CodeQuality/BenchI/TreeInsert/TreeInsert.cs @@ -11,6 +11,8 @@ using Xunit; [assembly: OptimizeForBenchmarks] [assembly: MeasureInstructionsRetired] +namespace Benchstone.BenchI +{ public class TreeInsert { #if DEBUG @@ -136,3 +138,4 @@ public class TreeInsert return (result ? 100 : -1); } } +} diff --git a/tests/src/JIT/Performance/CodeQuality/BenchI/TreeSort/TreeSort.cs b/tests/src/JIT/Performance/CodeQuality/BenchI/TreeSort/TreeSort.cs index 68b5c965f7..e0971346cf 100644 --- a/tests/src/JIT/Performance/CodeQuality/BenchI/TreeSort/TreeSort.cs +++ b/tests/src/JIT/Performance/CodeQuality/BenchI/TreeSort/TreeSort.cs @@ -11,6 +11,8 @@ using Xunit; [assembly: OptimizeForBenchmarks] [assembly: MeasureInstructionsRetired] +namespace Benchstone.BenchI +{ public static class TreeSort { @@ -74,7 +76,7 @@ public static class TreeSort else { Insert(n, t.Left); } - } + } else if (n < t.Val) { if (t.Right == null) { t.Right = new Node(n); @@ -117,7 +119,7 @@ public static class TreeSort bool result = CheckTree(tree); return result; } - + [MethodImpl(MethodImplOptions.NoInlining)] static bool Bench() { int[] sortList = new int[SortElements + 1]; @@ -143,9 +145,10 @@ public static class TreeSort } return result; } - + public static int Main() { bool result = TestBase(); return (result ? 100 : -1); } } +} diff --git a/tests/src/JIT/Performance/CodeQuality/BenchI/XposMatrix/XposMatrix.cs b/tests/src/JIT/Performance/CodeQuality/BenchI/XposMatrix/XposMatrix.cs index 0bb17b8cc5..de8b486049 100644 --- a/tests/src/JIT/Performance/CodeQuality/BenchI/XposMatrix/XposMatrix.cs +++ b/tests/src/JIT/Performance/CodeQuality/BenchI/XposMatrix/XposMatrix.cs @@ -11,6 +11,8 @@ using Xunit; [assembly: OptimizeForBenchmarks] [assembly: MeasureInstructionsRetired] +namespace Benchstone.BenchI +{ public static class XposMatrix { public const int ArraySize = 100; @@ -48,11 +50,11 @@ public static class XposMatrix matrix[i][j] = 1; } } - + if (matrix[n][n] != 1) { return false; } - + Inner(matrix, n); if (matrix[n][n] != 1) { @@ -88,3 +90,4 @@ public static class XposMatrix return (result ? 100 : -1); } } +} 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 e4118b2963..c77e802989 100644 --- a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/binarytrees/binarytrees.csharp.cs +++ b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/binarytrees/binarytrees.csharp.cs @@ -2,9 +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. /* The Computer Language Benchmarks Game - http://benchmarksgame.alioth.debian.org/ + http://benchmarksgame.alioth.debian.org/ - contributed by Marek Safar + contributed by Marek Safar modified for use with xunit-performance */ @@ -17,6 +17,8 @@ using Xunit; [assembly: OptimizeForBenchmarks] [assembly: MeasureInstructionsRetired] +namespace BenchmarksGame +{ public class BinaryTrees { private const int minDepth = 4; @@ -149,3 +151,4 @@ public class BinaryTrees return (result ? 100 : -1); } } +} diff --git a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/fasta/fasta.csharp-2.cs b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/fasta/fasta.csharp-2.cs index c58ce0bd97..92fbceb692 100644 --- a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/fasta/fasta.csharp-2.cs +++ b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/fasta/fasta.csharp-2.cs @@ -18,6 +18,8 @@ using System.Text; [assembly: OptimizeForBenchmarks] [assembly: MeasureInstructionsRetired] +namespace BenchmarksGame +{ public class Fasta { #if DEBUG @@ -218,3 +220,4 @@ public class Fasta s.Write(s_buf, 0, s_index); } } +} diff --git a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/fastaredux/fastaredux.csharp.cs b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/fastaredux/fastaredux.csharp.cs index 7128e326fc..df8999a2de 100644 --- a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/fastaredux/fastaredux.csharp.cs +++ b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/fastaredux/fastaredux.csharp.cs @@ -18,6 +18,8 @@ using System.Text; [assembly: OptimizeForBenchmarks] [assembly: MeasureInstructionsRetired] +namespace BenchmarksGame +{ public static class FastaRedux { #if DEBUG @@ -181,4 +183,5 @@ public static class FastaRedux if (br < BUF_LEN) s.Write(s_buf, 0, BUF_LEN - br); } } +} diff --git a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/nbody/nbody.csharp-3.cs b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/nbody/nbody.csharp-3.cs index 70c87095ad..2124cf4d9e 100644 --- a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/nbody/nbody.csharp-3.cs +++ b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/nbody/nbody.csharp-3.cs @@ -15,6 +15,8 @@ using System; [assembly: OptimizeForBenchmarks] [assembly: MeasureInstructionsRetired] +namespace BenchmarksGame +{ public class NBody { public static int Main(String[] args) @@ -153,4 +155,5 @@ internal class NBodySystem return e; } } +} diff --git a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/pidigits/pi-digits.cs b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/pidigits/pi-digits.cs index 3395e29a55..7e36f0e424 100644 --- a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/pidigits/pi-digits.cs +++ b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/pidigits/pi-digits.cs @@ -6,7 +6,7 @@ * * Port of the C code that uses GMP * Just switched it to use C#'s BigInteger instead - * + * * To compile use csc /o+ /r:System.Numerics.dll * * modified for use with xunit-performance @@ -20,6 +20,8 @@ using System.Text; [assembly: OptimizeForBenchmarks] [assembly: MeasureInstructionsRetired] +namespace BenchmarksGame +{ public class pidigits { #if DEBUG @@ -111,4 +113,5 @@ public class pidigits } } } +} diff --git a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/spectralnorm/spectralnorm.cs b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/spectralnorm/spectralnorm.cs index 9e984864a7..01eeea07bf 100644 --- a/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/spectralnorm/spectralnorm.cs +++ b/tests/src/JIT/Performance/CodeQuality/BenchmarksGame/spectralnorm/spectralnorm.cs @@ -3,8 +3,8 @@ // See the LICENSE file in the project root for more information. /* The Computer Language Benchmarks Game http://benchmarksgame.alioth.debian.org/ - - contributed by Isaac Gouy + + contributed by Isaac Gouy modified for use with xunit-performance */ @@ -15,6 +15,8 @@ using System; [assembly: OptimizeForBenchmarks] [assembly: MeasureInstructionsRetired] +namespace BenchmarksGame +{ public class SpectralNorm { #if DEBUG @@ -78,7 +80,7 @@ public class SpectralNorm } // B=AtA A multiplied by A transposed - // v.Bv /(v.v) eigenvalue of v + // v.Bv /(v.v) eigenvalue of v double vBv = 0, vv = 0; for (int i = 0; i < n; i++) { @@ -124,3 +126,4 @@ public class SpectralNorm MultiplyAtv(n, u, AtAv); } } +} diff --git a/tests/src/JIT/Performance/CodeQuality/Inlining/ConstantArgsByte.cs b/tests/src/JIT/Performance/CodeQuality/Inlining/ConstantArgsByte.cs index 8271c40a43..3b28f87fe5 100644 --- a/tests/src/JIT/Performance/CodeQuality/Inlining/ConstantArgsByte.cs +++ b/tests/src/JIT/Performance/CodeQuality/Inlining/ConstantArgsByte.cs @@ -13,6 +13,8 @@ using Xunit; [assembly: OptimizeForBenchmarks] [assembly: MeasureInstructionsRetired] +namespace Inlining +{ public static class ConstantArgsByte { @@ -928,3 +930,4 @@ public static class ConstantArgsByte return (result ? 100 : -1); } } +} diff --git a/tests/src/JIT/Performance/CodeQuality/Inlining/ConstantArgsChar.cs b/tests/src/JIT/Performance/CodeQuality/Inlining/ConstantArgsChar.cs index 0d1f9284ba..0cc4b9c558 100644 --- a/tests/src/JIT/Performance/CodeQuality/Inlining/ConstantArgsChar.cs +++ b/tests/src/JIT/Performance/CodeQuality/Inlining/ConstantArgsChar.cs @@ -13,6 +13,8 @@ using Xunit; [assembly: OptimizeForBenchmarks] [assembly: MeasureInstructionsRetired] +namespace Inlining +{ public static class ConstantArgsChar { @@ -928,3 +930,4 @@ public static class ConstantArgsChar return (result ? 100 : -1); } } +} diff --git a/tests/src/JIT/Performance/CodeQuality/Inlining/ConstantArgsDouble.cs b/tests/src/JIT/Performance/CodeQuality/Inlining/ConstantArgsDouble.cs index 6c95d482d5..4bd5683f0c 100644 --- a/tests/src/JIT/Performance/CodeQuality/Inlining/ConstantArgsDouble.cs +++ b/tests/src/JIT/Performance/CodeQuality/Inlining/ConstantArgsDouble.cs @@ -13,6 +13,8 @@ using Xunit; [assembly: OptimizeForBenchmarks] [assembly: MeasureInstructionsRetired] +namespace Inlining +{ public static class ConstantArgsDouble { @@ -808,3 +810,4 @@ public static class ConstantArgsDouble return (result ? 100 : -1); } } +} diff --git a/tests/src/JIT/Performance/CodeQuality/Inlining/ConstantArgsFloat.cs b/tests/src/JIT/Performance/CodeQuality/Inlining/ConstantArgsFloat.cs index bbd65a4004..f609a4bb44 100644 --- a/tests/src/JIT/Performance/CodeQuality/Inlining/ConstantArgsFloat.cs +++ b/tests/src/JIT/Performance/CodeQuality/Inlining/ConstantArgsFloat.cs @@ -13,6 +13,8 @@ using Xunit; [assembly: OptimizeForBenchmarks] [assembly: MeasureInstructionsRetired] +namespace Inlining +{ public static class ConstantArgsFloat { @@ -808,3 +810,4 @@ public static class ConstantArgsFloat return (result ? 100 : -1); } } +} diff --git a/tests/src/JIT/Performance/CodeQuality/Inlining/ConstantArgsInt.cs b/tests/src/JIT/Performance/CodeQuality/Inlining/ConstantArgsInt.cs index 03d59f93d0..f54e800d17 100644 --- a/tests/src/JIT/Performance/CodeQuality/Inlining/ConstantArgsInt.cs +++ b/tests/src/JIT/Performance/CodeQuality/Inlining/ConstantArgsInt.cs @@ -13,6 +13,8 @@ using Xunit; [assembly: OptimizeForBenchmarks] [assembly: MeasureInstructionsRetired] +namespace Inlining +{ public static class ConstantArgsInt { @@ -928,3 +930,4 @@ public static class ConstantArgsInt return (result ? 100 : -1); } } +} diff --git a/tests/src/JIT/Performance/CodeQuality/Inlining/ConstantArgsLong.cs b/tests/src/JIT/Performance/CodeQuality/Inlining/ConstantArgsLong.cs index f4e45f50db..e5679f1638 100644 --- a/tests/src/JIT/Performance/CodeQuality/Inlining/ConstantArgsLong.cs +++ b/tests/src/JIT/Performance/CodeQuality/Inlining/ConstantArgsLong.cs @@ -13,6 +13,8 @@ using Xunit; [assembly: OptimizeForBenchmarks] [assembly: MeasureInstructionsRetired] +namespace Inlining +{ public static class ConstantArgsLong { @@ -928,3 +930,4 @@ public static class ConstantArgsLong return (result ? 100 : -1); } } +} diff --git a/tests/src/JIT/Performance/CodeQuality/Inlining/ConstantArgsSByte.cs b/tests/src/JIT/Performance/CodeQuality/Inlining/ConstantArgsSByte.cs index b329122967..0ec29b8341 100644 --- a/tests/src/JIT/Performance/CodeQuality/Inlining/ConstantArgsSByte.cs +++ b/tests/src/JIT/Performance/CodeQuality/Inlining/ConstantArgsSByte.cs @@ -13,6 +13,8 @@ using Xunit; [assembly: OptimizeForBenchmarks] [assembly: MeasureInstructionsRetired] +namespace Inlining +{ public static class ConstantArgsSByte { @@ -928,3 +930,4 @@ public static class ConstantArgsSByte return (result ? 100 : -1); } } +} diff --git a/tests/src/JIT/Performance/CodeQuality/Inlining/ConstantArgsShort.cs b/tests/src/JIT/Performance/CodeQuality/Inlining/ConstantArgsShort.cs index 8718111a72..f8cf23e8da 100644 --- a/tests/src/JIT/Performance/CodeQuality/Inlining/ConstantArgsShort.cs +++ b/tests/src/JIT/Performance/CodeQuality/Inlining/ConstantArgsShort.cs @@ -13,6 +13,8 @@ using Xunit; [assembly: OptimizeForBenchmarks] [assembly: MeasureInstructionsRetired] +namespace Inlining +{ public static class ConstantArgsShort { @@ -928,3 +930,4 @@ public static class ConstantArgsShort return (result ? 100 : -1); } } +} diff --git a/tests/src/JIT/Performance/CodeQuality/Inlining/ConstantArgsString.cs b/tests/src/JIT/Performance/CodeQuality/Inlining/ConstantArgsString.cs index b7319086d7..38a3f7e6b9 100644 --- a/tests/src/JIT/Performance/CodeQuality/Inlining/ConstantArgsString.cs +++ b/tests/src/JIT/Performance/CodeQuality/Inlining/ConstantArgsString.cs @@ -16,6 +16,8 @@ using Xunit; [assembly: OptimizeForBenchmarks] [assembly: MeasureInstructionsRetired] +namespace Inlining +{ public static class ConstantArgsString { @@ -328,3 +330,4 @@ public static class ConstantArgsString return (result ? 100 : -1); } } +} diff --git a/tests/src/JIT/Performance/CodeQuality/Inlining/ConstantArgsUInt.cs b/tests/src/JIT/Performance/CodeQuality/Inlining/ConstantArgsUInt.cs index db3316ea32..e3f6e2aae8 100644 --- a/tests/src/JIT/Performance/CodeQuality/Inlining/ConstantArgsUInt.cs +++ b/tests/src/JIT/Performance/CodeQuality/Inlining/ConstantArgsUInt.cs @@ -13,6 +13,8 @@ using Xunit; [assembly: OptimizeForBenchmarks] [assembly: MeasureInstructionsRetired] +namespace Inlining +{ public static class ConstantArgsUInt { @@ -888,3 +890,4 @@ public static class ConstantArgsUInt return (result ? 100 : -1); } } +} diff --git a/tests/src/JIT/Performance/CodeQuality/Inlining/ConstantArgsULong.cs b/tests/src/JIT/Performance/CodeQuality/Inlining/ConstantArgsULong.cs index 72087077e2..7585a3e1fc 100644 --- a/tests/src/JIT/Performance/CodeQuality/Inlining/ConstantArgsULong.cs +++ b/tests/src/JIT/Performance/CodeQuality/Inlining/ConstantArgsULong.cs @@ -13,6 +13,8 @@ using Xunit; [assembly: OptimizeForBenchmarks] [assembly: MeasureInstructionsRetired] +namespace Inlining +{ public static class ConstantArgsULong { @@ -888,3 +890,4 @@ public static class ConstantArgsULong return (result ? 100 : -1); } } +} diff --git a/tests/src/JIT/Performance/CodeQuality/Inlining/ConstantArgsUShort.cs b/tests/src/JIT/Performance/CodeQuality/Inlining/ConstantArgsUShort.cs index 249e985496..c96274e424 100644 --- a/tests/src/JIT/Performance/CodeQuality/Inlining/ConstantArgsUShort.cs +++ b/tests/src/JIT/Performance/CodeQuality/Inlining/ConstantArgsUShort.cs @@ -13,6 +13,8 @@ using Xunit; [assembly: OptimizeForBenchmarks] [assembly: MeasureInstructionsRetired] +namespace Inlining +{ public static class ConstantArgsUShort { @@ -928,3 +930,4 @@ public static class ConstantArgsUShort return (result ? 100 : -1); } } +} diff --git a/tests/src/JIT/Performance/CodeQuality/Inlining/InlineGCStruct.cs b/tests/src/JIT/Performance/CodeQuality/Inlining/InlineGCStruct.cs new file mode 100644 index 0000000000..660627cc72 --- /dev/null +++ b/tests/src/JIT/Performance/CodeQuality/Inlining/InlineGCStruct.cs @@ -0,0 +1,148 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +// In CoreCLR String.Format(ref, ref) is small and readily inlined. +// The inline introduces a System.Parms GC struct local which is +// untracked and must be zero initialized in the prolog. When the +// inlined callsite is in a cold path, the inline hurts performance. +// +// There are two test methods below, one of which calls String.Format +// on a cold path and the other which has similar structure but +// does not call String.Format. Expectation is that they will have +// similar performance. +// +// See https://github.com/dotnet/coreclr/issues/7569 for context. + +using Microsoft.Xunit.Performance; +using System; +using System.Runtime.CompilerServices; +using Xunit; + +[assembly: OptimizeForBenchmarks] +[assembly: MeasureInstructionsRetired] + +namespace Inlining +{ +public class InlineGCStruct +{ +#if DEBUG + public const int Iterations = 1; +#else + public const int Iterations = 2500000; +#endif + + [MethodImpl(MethodImplOptions.NoInlining)] + public static int FastFunctionNotCallingStringFormat(int param) + { + if (param < 0) + { + throw new Exception(String.Format("We do not like the value {0:N0}.", param)); + } + + if (param == int.MaxValue) + { + throw new Exception(String.Format("{0:N0} is maxed out.", param)); + } + + if (param > int.MaxValue / 2) + { + throw new Exception(String.Format("We do not like the value {0:N0} either.", param)); + } + + return param * 2; + } + + [MethodImpl(MethodImplOptions.NoInlining)] + public static int FastFunctionNotHavingStringFormat(int param) + { + if (param < 0) + { + throw new ArgumentOutOfRangeException("param", "We do not like this value."); + } + + if (param == int.MaxValue) + { + throw new ArgumentOutOfRangeException("param", "Maxed out."); + } + + if (param > int.MaxValue / 2) + { + throw new ArgumentOutOfRangeException("param", "We do not like this value either."); + } + + return param * 2; + } + + [Benchmark] + public static bool WithFormat() + { + int result = 0; + + foreach (var iteration in Benchmark.Iterations) + { + using (iteration.StartMeasurement()) + { + for (int i = 0; i < Iterations; i++) + { + result |= FastFunctionNotCallingStringFormat(11); + } + } + } + + return (result == 22); + } + + [Benchmark] + public static bool WithoutFormat() + { + int result = 0; + + foreach (var iteration in Benchmark.Iterations) + { + using (iteration.StartMeasurement()) + { + for (int i = 0; i < Iterations; i++) + { + result |= FastFunctionNotHavingStringFormat(11); + } + } + } + + return (result == 22); + } + + public static bool WithoutFormatBase() + { + int result = 0; + + for (int i = 0; i < Iterations; i++) + { + result |= FastFunctionNotHavingStringFormat(11); + } + + return (result == 22); + } + + public static bool WithFormatBase() + { + int result = 0; + + for (int i = 0; i < Iterations; i++) + { + result |= FastFunctionNotCallingStringFormat(11); + } + + return (result == 22); + } + + public static int Main() + { + bool withFormat = WithFormatBase(); + bool withoutFormat = WithoutFormatBase(); + + return (withFormat && withoutFormat ? 100 : -1); + } +} +} + diff --git a/tests/src/JIT/Performance/CodeQuality/Inlining/InlineGCStruct.csproj b/tests/src/JIT/Performance/CodeQuality/Inlining/InlineGCStruct.csproj new file mode 100644 index 0000000000..cb3381638c --- /dev/null +++ b/tests/src/JIT/Performance/CodeQuality/Inlining/InlineGCStruct.csproj @@ -0,0 +1,44 @@ + + + + + Debug + AnyCPU + 2.0 + {95DFC527-4DC1-495E-97D7-E94EE1F7140D} + Exe + Properties + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + $(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages + ..\..\ + 7a9bfb7d + + + + pdbonly + true + + + pdbonly + true + + + + False + + + + + + + + + + $(JitPackagesConfigFileDirectory)benchmark\project.json + $(JitPackagesConfigFileDirectory)benchmark\project.lock.json + + + + + diff --git a/tests/src/JIT/Performance/CodeQuality/Inlining/NoThrowInline.cs b/tests/src/JIT/Performance/CodeQuality/Inlining/NoThrowInline.cs index 9b689ce376..dc05f44b33 100644 --- a/tests/src/JIT/Performance/CodeQuality/Inlining/NoThrowInline.cs +++ b/tests/src/JIT/Performance/CodeQuality/Inlining/NoThrowInline.cs @@ -13,6 +13,8 @@ using Xunit; [assembly: OptimizeForBenchmarks] [assembly: MeasureInstructionsRetired] +namespace Inlining +{ public static class NoThrowInline { #if DEBUG @@ -34,7 +36,7 @@ public static class NoThrowInline // // We expect ThrowArgumentNullException to not be inlined into Bench, the throw code is pretty - // large and throws are extremly slow. However, we need to be careful not to degrade the + // large and throws are extremly slow. However, we need to be careful not to degrade the // non-exception path performance by preserving registers across the call. For this the compiler // will have to understand that ThrowArgumentNullException never returns and omit the register // preservation code. @@ -73,3 +75,4 @@ public static class NoThrowInline return (Bench("a", "bc", "def", "ghij") == 10) ? 100 : -1; } } +} diff --git a/tests/src/JIT/Performance/CodeQuality/SIMD/ConsoleMandel/ConsoleMandel.cs b/tests/src/JIT/Performance/CodeQuality/SIMD/ConsoleMandel/ConsoleMandel.cs index ed7f675700..5ab08202b6 100644 --- a/tests/src/JIT/Performance/CodeQuality/SIMD/ConsoleMandel/ConsoleMandel.cs +++ b/tests/src/JIT/Performance/CodeQuality/SIMD/ConsoleMandel/ConsoleMandel.cs @@ -11,9 +11,9 @@ using Xunit; [assembly: OptimizeForBenchmarks] [assembly: MeasureInstructionsRetired] -namespace ConsoleMandel +namespace SIMD { - public static class Program + public static class ConsoleMandel { private const int Pass = 100; private const int Fail = -1; diff --git a/tests/src/JIT/Performance/CodeQuality/SIMD/RayTracer/RayTracerBench.cs b/tests/src/JIT/Performance/CodeQuality/SIMD/RayTracer/RayTracerBench.cs index 064f860611..254672b462 100644 --- a/tests/src/JIT/Performance/CodeQuality/SIMD/RayTracer/RayTracerBench.cs +++ b/tests/src/JIT/Performance/CodeQuality/SIMD/RayTracer/RayTracerBench.cs @@ -2,8 +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. // -// Based on the Raytracer example from -// Samples for Parallel Programming with the .NET Framework +// Based on the Raytracer example from +// Samples for Parallel Programming with the .NET Framework // https://code.msdn.microsoft.com/windowsdesktop/Samples-for-Parallel-b4b76364 using Microsoft.Xunit.Performance; @@ -16,6 +16,8 @@ using System.Collections.Concurrent; [assembly: OptimizeForBenchmarks] [assembly: MeasureInstructionsRetired] +namespace SIMD +{ public class RayTracerBench { #if DEBUG @@ -142,3 +144,4 @@ public class RayTracerBench return (result ? 100 : -1); } } +} diff --git a/tests/src/JIT/Performance/CodeQuality/SIMD/SeekUnroll/SeekUnroll.cs b/tests/src/JIT/Performance/CodeQuality/SIMD/SeekUnroll/SeekUnroll.cs new file mode 100644 index 0000000000..34c0ab888d --- /dev/null +++ b/tests/src/JIT/Performance/CodeQuality/SIMD/SeekUnroll/SeekUnroll.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 Microsoft.Xunit.Performance; +using System; +using System.Numerics; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Reflection; +using System.Collections.Generic; +using Xunit; + +[assembly: OptimizeForBenchmarks] +[assembly: MeasureInstructionsRetired] + +public static class SeekUnroll +{ + + // The purpose of this micro-benchmark is to measure the effect of unrolling + // on this loop (taken from https://github.com/aspnet/KestrelHttpServer/pull/1138) + [MethodImpl(MethodImplOptions.AggressiveInlining)] + static int FindByte(ref Vector byteEquals) + { + var vector64 = Vector.AsVectorInt64(byteEquals); + long longValue = 0; + var i = 0; + for (; i < Vector.Count; i++) + { + longValue = vector64[i]; + if (longValue == 0) continue; + break; + } + + // Flag least significant power of two bit + var powerOfTwoFlag = (ulong)(longValue ^ (longValue - 1)); + // Shift all powers of two into the high byte and extract + var foundByteIndex = (int)((powerOfTwoFlag * _xorPowerOfTwoToHighByte) >> 57); + // Single LEA instruction with jitted const (using function result) + return i * 8 + foundByteIndex; + } + + // Magic constant used in FindByte + const ulong _xorPowerOfTwoToHighByte = (0x07ul | + 0x06ul << 8 | + 0x05ul << 16 | + 0x04ul << 24 | + 0x03ul << 32 | + 0x02ul << 40 | + 0x01ul << 48) + 1; + + // Inner loop to repeatedly call FindByte + [MethodImpl(MethodImplOptions.AggressiveInlining)] + static void InnerLoop(ref int foundIndex, ref Vector vector) + { + for (int i = 0; i < InnerIterations; i++) + { + foundIndex = FindByte(ref vector); + } + } + + // 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; +#else + const int InnerIterations = 1000000000; +#endif + + // Function to meaure InnerLoop using the xunit-perf benchmark measurement facilities + [MethodImpl(MethodImplOptions.AggressiveInlining)] + static void XunitBenchmarkLoop(ref int foundIndex, ref Vector vector) + { + foreach (var iteration in Benchmark.Iterations) + { + using (iteration.StartMeasurement()) + { + InnerLoop(ref foundIndex, ref vector); + } + } + } + + // Function to measure InnerLoop with manual use of a stopwatch timer + [MethodImpl(MethodImplOptions.AggressiveInlining)] + static void ManualTimerLoop(ref int foundIndex, ref Vector vector) + { + for (int iteration = 0; iteration < ManualLoopTimes.Length; ++iteration) + { + var timer = System.Diagnostics.Stopwatch.StartNew(); + InnerLoop(ref foundIndex, ref vector); + timer.Stop(); + ManualLoopTimes[iteration] = timer.ElapsedMilliseconds; + } + } + static long[] ManualLoopTimes; + + // Function that tests one input, dispatching to either the xunit-perf + // loop or the manual timer loop + static bool Test(int index, bool isXunitBenchmark) + { + if (index >= Vector.Count) + { + // FindByte assumes index is in range + index = 0; + } + var bytes = new Byte[Vector.Count]; + bytes[index] = 255; + Vector vector = new Vector(bytes); + + int foundIndex = -1; + + if (isXunitBenchmark) + { + XunitBenchmarkLoop(ref foundIndex, ref vector); + } + else + { + ManualTimerLoop(ref foundIndex, ref vector); + } + + Assert.Equal(index, foundIndex); + return (index == foundIndex); + } + + // Set of indices to pass to Test(int, bool) + static int[] IndicesToTest = new int[] { 1, 3, 11, 19, 27 }; + + // Entrypoint for xunit-perf to call the benchmark + [Benchmark] + [MemberData(nameof(ArrayedBoxedIndicesToTest))] + public static bool Test(object boxedIndex) + { + return Test((int)boxedIndex, true); + } + + // IndicesToTest wrapped up in arrays of boxes since that's + // what xunit-perf needs + public static IEnumerable ArrayedBoxedIndicesToTest = + IndicesToTest.Select((int index) => new object[] { index }); + + + // Main method entrypoint runs the manual timer loop + public static int Main() + { + int failures = 0; + foreach(int index in IndicesToTest) + { + ManualLoopTimes = new long[10]; + bool passed = Test(index, false); + if (!passed) + { + ++failures; + } + Console.WriteLine("Index {0}, times (ms) [{1}]", index, String.Join(", ", ManualLoopTimes)); + } + + return 100 + failures; + } +} diff --git a/tests/src/JIT/Performance/CodeQuality/SIMD/SeekUnroll/SeekUnroll.csproj b/tests/src/JIT/Performance/CodeQuality/SIMD/SeekUnroll/SeekUnroll.csproj new file mode 100644 index 0000000000..53cfe42001 --- /dev/null +++ b/tests/src/JIT/Performance/CodeQuality/SIMD/SeekUnroll/SeekUnroll.csproj @@ -0,0 +1,43 @@ + + + + + Debug + AnyCPU + 2.0 + {9AE6E18D-B3F9-4216-9809-125824387175} + Exe + Properties + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + $(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages + ..\..\ + + + + pdbonly + true + + + pdbonly + true + + + + False + + + + + + + + + + $(JitPackagesConfigFileDirectory)benchmark\project.json + $(JitPackagesConfigFileDirectory)benchmark\project.lock.json + + + + + diff --git a/tests/src/JIT/Performance/CodeQuality/Serialization/Deserialize.cs b/tests/src/JIT/Performance/CodeQuality/Serialization/Deserialize.cs index b0ed00d40b..56fc2665ad 100644 --- a/tests/src/JIT/Performance/CodeQuality/Serialization/Deserialize.cs +++ b/tests/src/JIT/Performance/CodeQuality/Serialization/Deserialize.cs @@ -15,6 +15,8 @@ using Microsoft.Xunit.Performance; [assembly: OptimizeForBenchmarks] [assembly: MeasureInstructionsRetired] +namespace Serialization +{ public class JsonBenchmarks { @@ -26,7 +28,7 @@ public class JsonBenchmarks public const int JsonNetIterations = 90000; #endif - const string DataContractXml = @"33SqMtx101.399.899.6100.42015-01-01T00:00:00-08:00"; + const string DataContractXml = @"33SqMtx101.399.899.6100.42015-01-01T00:00:00-08:00"; const string DataContractJson = @"{""Id"":33,""Name"":""SqMtx"",""Results"":[101.3,99.8,99.6,100.4],""WhenRun"":""\/Date(1420099200000-0800)\/""}"; @@ -83,7 +85,7 @@ public class JsonBenchmarks } [Benchmark] - private void DeserializeDataContract() + private void DeserializeDataContract() { foreach (var iteration in Benchmark.Iterations) { using (iteration.StartMeasurement()) { @@ -199,3 +201,4 @@ public class JsonBenchmarks return result ? 100 : -1; } } +} diff --git a/tests/src/JIT/Performance/CodeQuality/Serialization/Serialize.cs b/tests/src/JIT/Performance/CodeQuality/Serialization/Serialize.cs index 905cf56584..39ab5876c9 100644 --- a/tests/src/JIT/Performance/CodeQuality/Serialization/Serialize.cs +++ b/tests/src/JIT/Performance/CodeQuality/Serialization/Serialize.cs @@ -14,6 +14,8 @@ using Microsoft.Xunit.Performance; [assembly: OptimizeForBenchmarks] [assembly: MeasureInstructionsRetired] +namespace Serialization +{ public class JsonBenchmarks { @@ -72,7 +74,7 @@ public class JsonBenchmarks } [Benchmark] - private void SerializeDataContract() + private void SerializeDataContract() { foreach (var iteration in Benchmark.Iterations) { using (iteration.StartMeasurement()) { @@ -186,3 +188,4 @@ public class JsonBenchmarks return result ? 100 : -1; } } +} diff --git a/tests/src/JIT/Performance/CodeQuality/V8/Crypto/Crypto.cs b/tests/src/JIT/Performance/CodeQuality/V8/Crypto/Crypto.cs index 23eab8db5b..620e012848 100644 --- a/tests/src/JIT/Performance/CodeQuality/V8/Crypto/Crypto.cs +++ b/tests/src/JIT/Performance/CodeQuality/V8/Crypto/Crypto.cs @@ -46,7 +46,7 @@ using System.Globalization; [assembly: OptimizeForBenchmarks] [assembly: MeasureInstructionsRetired] -namespace Crypto +namespace V8.Crypto { public class Support { diff --git a/tests/src/JIT/Performance/CodeQuality/V8/DeltaBlue/DeltaBlue.cs b/tests/src/JIT/Performance/CodeQuality/V8/DeltaBlue/DeltaBlue.cs index ee14b8b1b1..27f77182b2 100644 --- a/tests/src/JIT/Performance/CodeQuality/V8/DeltaBlue/DeltaBlue.cs +++ b/tests/src/JIT/Performance/CodeQuality/V8/DeltaBlue/DeltaBlue.cs @@ -24,13 +24,15 @@ using System.Collections; [assembly: OptimizeForBenchmarks] [assembly: MeasureInstructionsRetired] -/* +/* Strengths are used to measure the relative importance of constraints. New strengths may be inserted in the strength hierarchy without disrupting current constraints. Strengths cannot be created outside this class, so pointer comparison can be used for value comparison. */ +namespace V8 +{ internal class Strength { private int _strengthValue; @@ -1066,3 +1068,4 @@ public class deltablue throw new Exception(s); } } +} diff --git a/tests/src/JIT/Performance/CodeQuality/V8/Richards/Richards.cs b/tests/src/JIT/Performance/CodeQuality/V8/Richards/Richards.cs index 6d26593e2f..5095d22ad7 100644 --- a/tests/src/JIT/Performance/CodeQuality/V8/Richards/Richards.cs +++ b/tests/src/JIT/Performance/CodeQuality/V8/Richards/Richards.cs @@ -20,7 +20,7 @@ using System.Collections.Generic; // using System.Diagnostics; // using System.Text.RegularExpressions; -namespace Richards +namespace V8.Richards { /// /// Support is used for a place to generate any 'miscellaneous' methods generated as part @@ -501,7 +501,7 @@ namespace Richards public #if !INTF_FOR_TASK - override + override #endif TaskControlBlock run(Packet packet) { @@ -521,7 +521,7 @@ namespace Richards public #if !INTF_FOR_TASK - override + override #endif String toString() { @@ -548,7 +548,7 @@ namespace Richards public #if !INTF_FOR_TASK - override + override #endif TaskControlBlock run(Packet packet) { @@ -568,7 +568,7 @@ namespace Richards public #if !INTF_FOR_TASK - override + override #endif String toString() { @@ -598,7 +598,7 @@ namespace Richards public #if !INTF_FOR_TASK - override + override #endif TaskControlBlock run(Packet packet) { @@ -630,7 +630,7 @@ namespace Richards public #if !INTF_FOR_TASK - override + override #endif String toString() { @@ -658,7 +658,7 @@ namespace Richards public #if !INTF_FOR_TASK - override + override #endif TaskControlBlock run(Packet packet) { @@ -700,7 +700,7 @@ namespace Richards public #if !INTF_FOR_TASK - override + override #endif String toString() { diff --git a/tests/src/JIT/Performance/RunBenchmarks/RunBenchmarks.cmd b/tests/src/JIT/Performance/RunBenchmarks/RunBenchmarks.cmd index e85e226392..e7b8917757 100644 --- a/tests/src/JIT/Performance/RunBenchmarks/RunBenchmarks.cmd +++ b/tests/src/JIT/Performance/RunBenchmarks/RunBenchmarks.cmd @@ -9,7 +9,7 @@ @rem of the enlistment(repo). It also requires that CoreCLR has been built, @rem and that all CoreCLR tests have been built. @rem -@rem The preformance harness "RunBencchmarks.exe" is built as a test case +@rem The preformance harness "RunBenchmarks.exe" is built as a test case @rem as are all the performance tests it runs. @rem @rem For the ByteMark tests, it must copy the command scripts to the diff --git a/tests/src/JIT/Performance/RunBenchmarks/RunBenchmarks.sh b/tests/src/JIT/Performance/RunBenchmarks/RunBenchmarks.sh new file mode 100755 index 0000000000..ee709164c9 --- /dev/null +++ b/tests/src/JIT/Performance/RunBenchmarks/RunBenchmarks.sh @@ -0,0 +1,53 @@ +# *************************************************************************** +# RunBenchmarks.sh +# +# This is a sample script for how to run benchmarks on Unix-like system. +# +# It requires the user to set CORECLR_ROOT to the root directory +# of the enlistment(repo). It also requires that CoreCLR has been built, +# and that all CoreCLR tests have been built. +# +# The preformance harness "RunBenchmarks.exe" is built as a test case +# as are all the performance tests it runs. +# +# For the ByteMark tests, it must copy the command scripts to the +# binary directory for the tests. +# +# By default, the performance harness is run on top of CoreCLR. There +# is a commented out section that can be used to run on top of DesktopCLR. +# +# A standard benchmark run is done with one warmup run, and five iterations +# of the benchmark. +# +# *************************************************************************** + +ARCH=${1:-x64} +BUILD=${2:-Release} + +CORERUN=${CORERUN:-corerun} + +# *** set this appropriately for enlistment you are running benchmarks in + +if [ -z "$CORECLR_ROOT" ]; then + echo "You must set CORECLR_ROOT to be the root of your coreclr repo (e.g. /git/repos/coreclr)" + exit 1 +fi + +# *** Currently we can build test cases only on Windows, so "Windows_NT" is hard-coded in the variables. +BENCHMARK_ROOT_DIR="$CORECLR_ROOT/bin/tests/Windows_NT.$ARCH.$BUILD/JIT/Performance/CodeQuality" +BENCHMARK_SRC_DIR="$CORECLR_ROOT/tests/src/JIT/Performance/RunBenchmarks" +BENCHMARK_HOST="$CORERUN $CORECLR_ROOT/bin/tests/Windows_NT.$ARCH.$BUILD/JIT/Performance/RunBenchmarks/RunBenchmarks/RunBenchmarks.exe" +BENCHMARK_RUNNER="-runner $CORERUN" + +# *** need to copy command files for Bytemark +mkdir -p ${BENCHMARK_ROOT_DIR}/Bytemark/Bytemark +cp -rf $CORECLR_ROOT/tests/src/JIT/Performance/CodeQuality/Bytemark/commands ${BENCHMARK_ROOT_DIR}/Bytemark/Bytemark/commands + +BENCHMARK_CONTROLS="-run -v -w -n 5" +BENCHMARK_SET="-f $BENCHMARK_SRC_DIR/coreclr_benchmarks.xml -notags broken" +BENCHMARK_OUTPUT="-csvfile $BENCHMARK_SRC_DIR/coreclr_benchmarks.csv" +BENCHMARK_SWITCHES="$BENCHMARK_CONTROLS -r $BENCHMARK_ROOT_DIR" + +echo "$BENCHMARK_HOST $BENCHMARK_RUNNER $BENCHMARK_SET $BENCHMARK_OUTPUT $BENCHMARK_SWITCHES" +$BENCHMARK_HOST $BENCHMARK_RUNNER $BENCHMARK_SET $BENCHMARK_OUTPUT $BENCHMARK_SWITCHES + diff --git a/tests/src/JIT/Regression/CLR-x86-JIT/V2.0-RTM/b475589/b475589.il b/tests/src/JIT/Regression/CLR-x86-JIT/V2.0-RTM/b475589/b475589.il deleted file mode 100644 index dce3d692f8..0000000000 --- a/tests/src/JIT/Regression/CLR-x86-JIT/V2.0-RTM/b475589/b475589.il +++ /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. - -.assembly extern System.Console -{ - .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) - .ver 4:0:0:0 -} - -.assembly extern mscorlib { auto } -.assembly b475598 {} -.module b475589.exe - -.class Program -{ - .method static void Nasty() - { - .maxstack 2 - - call void [mscorlib]System.Runtime.CompilerServices.RuntimeHelpers::PrepareConstrainedRegions() - br start_try - - start_catch: - ldstr "Cathed!" - call void [System.Console]System.Console::WriteLine(string) - leave.s end - end_catch: - - start_try: - newobj instance void [mscorlib]System.Exception::.ctor() - throw - end_try: - - end: - ret - - .try start_try to end_try catch [mscorlib]System.Exception handler start_catch to end_catch - } - .method static int32 Main(string[] args) - { - .maxstack 2 - .entrypoint - - - start_try: - - call void Program::Nasty() - leave.s end_failure - - end_try: - start_catch: - - leave.s end_success - end_catch: - - end_success: - ldstr "Test SUCCESS" - call void [System.Console]System.Console::WriteLine(string) - ldc.i4 100 - ret - - end_failure: - ldstr "Test FAILURE" - call void [System.Console]System.Console::WriteLine(string) - ldc.i4 -1 - ret - - .try start_try to end_try catch [mscorlib]System.NotSupportedException handler start_catch to end_catch - } -} \ No newline at end of file diff --git a/tests/src/JIT/Regression/CLR-x86-JIT/V2.0-RTM/b475589/b475589.ilproj b/tests/src/JIT/Regression/CLR-x86-JIT/V2.0-RTM/b475589/b475589.ilproj deleted file mode 100644 index 14ed64f690..0000000000 --- a/tests/src/JIT/Regression/CLR-x86-JIT/V2.0-RTM/b475589/b475589.ilproj +++ /dev/null @@ -1,40 +0,0 @@ - - - - - Debug - AnyCPU - $(MSBuildProjectName) - 2.0 - {95DFC527-4DC1-495E-97D7-E94EE1F7140D} - Exe - Properties - 512 - {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - $(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages - ..\..\ - 7a9bfb7d - - - - - - - - - False - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/tests/src/JIT/Regression/JitBlue/DevDiv_142976/DevDiv_142976.cs b/tests/src/JIT/Regression/JitBlue/DevDiv_142976/DevDiv_142976.cs new file mode 100644 index 0000000000..7b0151793b --- /dev/null +++ b/tests/src/JIT/Regression/JitBlue/DevDiv_142976/DevDiv_142976.cs @@ -0,0 +1,56 @@ +// Licensed to the .NET Foundation under one or more 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.CompilerServices; + +// This test case is meant to test an optimization in morph that +// transforms helper call JIT_Stelem_Ref(a, null, i) to a[i] = null, +// which further gets transformed into an array address and bounds +// check nodes with references to the array local and the index +// local. It is expected while doing such a transform, array +// local and index local are appropriately ref counted and Value +// number is updated post-global-morph and jit compilation +// won't run into any asserts. +class DevDiv_142976 +{ + [MethodImpl(MethodImplOptions.NoInlining)] + public static String Foo() + { + return null; + } + + [MethodImpl(MethodImplOptions.NoInlining)] + public static void Bar() + { + String[] args = new String[10]; + if (args != null) + { + throw new Exception(); + } + + String s = Foo(); + if (s == null) + { + // This will result in JIT_Stelem_Ref(args, null, 0) call + // which gets re-morphed into args[0] = null. + args[0] = s; + } + } + + public static int Main() + { + try + { + Bar(); + } + catch (Exception) + { + } + + Console.WriteLine("Pass"); + return 100; + } +} \ No newline at end of file diff --git a/tests/src/JIT/Regression/JitBlue/DevDiv_142976/DevDiv_142976.csproj b/tests/src/JIT/Regression/JitBlue/DevDiv_142976/DevDiv_142976.csproj new file mode 100644 index 0000000000..0c1a10eb95 --- /dev/null +++ b/tests/src/JIT/Regression/JitBlue/DevDiv_142976/DevDiv_142976.csproj @@ -0,0 +1,46 @@ + + + + + Debug + AnyCPU + $(MSBuildProjectName) + 2.0 + {95DFC527-4DC1-495E-97D7-E94EE1F7140D} + Exe + Properties + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + $(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages + ..\..\ + + 7a9bfb7d + + + + + + + + + False + + + + + True + + + + + + + + + $(JitPackagesConfigFileDirectory)minimal\project.json + $(JitPackagesConfigFileDirectory)minimal\project.lock.json + + + + + diff --git a/tests/src/JIT/Regression/JitBlue/DevDiv_255294/DevDiv_255294.cs b/tests/src/JIT/Regression/JitBlue/DevDiv_255294/DevDiv_255294.cs new file mode 100644 index 0000000000..05f1d90aac --- /dev/null +++ b/tests/src/JIT/Regression/JitBlue/DevDiv_255294/DevDiv_255294.cs @@ -0,0 +1,62374 @@ +// Licensed to the .NET Foundation under one or more 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.CompilerServices; + +public class Test +{ + static bool f; + + public static int Main() + { + f = true; + Test test = new Test(); + return test.HugeMethod(); + } + + [MethodImpl(MethodImplOptions.NoInlining)] + public int HugeMethod() + { + int i = 0; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + if (f) i++; + + return i - 62248; + } +} diff --git a/tests/src/JIT/Regression/JitBlue/DevDiv_255294/DevDiv_255294.csproj b/tests/src/JIT/Regression/JitBlue/DevDiv_255294/DevDiv_255294.csproj new file mode 100644 index 0000000000..9027bb5c54 --- /dev/null +++ b/tests/src/JIT/Regression/JitBlue/DevDiv_255294/DevDiv_255294.csproj @@ -0,0 +1,46 @@ + + + + + Debug + AnyCPU + $(MSBuildProjectName) + 2.0 + {95DFC527-4DC1-495E-97D7-E94EE1F7140D} + Exe + Properties + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + $(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages + ..\..\ + + 7a9bfb7d + + + + + + + + + False + + + + + True + + + + + + + + + $(JitPackagesConfigFileDirectory)minimal\project.json + $(JitPackagesConfigFileDirectory)minimal\project.lock.json + + + + + diff --git a/tests/src/JIT/Regression/JitBlue/DevDiv_278365/DevDiv_278365.cs b/tests/src/JIT/Regression/JitBlue/DevDiv_278365/DevDiv_278365.cs new file mode 100644 index 0000000000..631175a38e --- /dev/null +++ b/tests/src/JIT/Regression/JitBlue/DevDiv_278365/DevDiv_278365.cs @@ -0,0 +1,49 @@ +// Licensed to the .NET Foundation under one or more 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.CompilerServices; + +// This test is a reduced repro case for DevDiv VSO bug 278365. +// The failure mode is that the RyuJIT/x86 backend changed call to ROUND intrinsic +// with double return type to ROUND intrinsic with int return type, that is not supported. + +internal class Program +{ + [MethodImpl(MethodImplOptions.NoInlining)] + public static int Bar() + { + int sum = 0; + for (int i = 0; i < 100; ++i) + { + int v = (int)Math.Round(4.4 + i); + sum += v; + } + sum -= 4 * 100; + if (sum != 100 * 99 / 2) + { + return 0; + } + else + { + return 100; + } + } + + private static int Main(string[] args) + { + try + { + if (Bar() != 100) + return 0; + } + catch (Exception) + { + } + + Console.WriteLine("Pass"); + return 100; + } +} diff --git a/tests/src/JIT/Regression/JitBlue/DevDiv_278365/DevDiv_278365.csproj b/tests/src/JIT/Regression/JitBlue/DevDiv_278365/DevDiv_278365.csproj new file mode 100644 index 0000000000..0abcfd8a28 --- /dev/null +++ b/tests/src/JIT/Regression/JitBlue/DevDiv_278365/DevDiv_278365.csproj @@ -0,0 +1,46 @@ + + + + + Debug + AnyCPU + $(MSBuildProjectName) + 2.0 + {95DFC527-4DC1-495E-97D7-E94EE1F7140D} + Exe + Properties + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + $(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages + ..\..\ + + 7a9bfb7d + + + + + + + + + False + + + + + True + + + + + + + + + $(JitPackagesConfigFileDirectory)minimal\project.json + $(JitPackagesConfigFileDirectory)minimal\project.lock.json + + + + + diff --git a/tests/src/JIT/Regression/JitBlue/DevDiv_278369/DevDiv_278369.il b/tests/src/JIT/Regression/JitBlue/DevDiv_278369/DevDiv_278369.il new file mode 100644 index 0000000000..cf077786d9 --- /dev/null +++ b/tests/src/JIT/Regression/JitBlue/DevDiv_278369/DevDiv_278369.il @@ -0,0 +1,58 @@ +// Licensed to the .NET Foundation under one or more 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 checks that value numbering does not incorrectly propagate the value number for an operand to its +// consuming operator unless the type of the operand and the operator agree. +// +// In particular, in the body of method N, the optimizer will fold the two `ceq` conditions together using a logical +// or of type int32. Value numbering will then determine that one operand to the logical or is a constant `0` (namely, +// the result of `ldloc.0` and attempt to propagate the value number of the logical or's other operand to the logical +// or itself. This should not succeed, as the type of the logical or is int32 and the type of its non-zero operand is +// `ref`. + +.assembly extern mscorlib {} + +.assembly r {} + +.class private auto ansi beforefieldinit C extends [mscorlib]System.Object +{ + .method private hidebysig static int32 N(object o) cil managed noinlining + { + .locals (int32) + + ldc.i4.0 + stloc.0 + ldarg.0 + isinst C + ldnull + ceq + brfalse.s label + ldloc.0 + ldc.i4.0 + ceq + brfalse.s label + ldc.i4.s 0 + ret + +label: + ldc.i4 100 + ret + } + + .method private hidebysig static int32 Main(string[] args) cil managed + { + .entrypoint + + newobj instance void C::.ctor() + call int32 C::N(object) + ret + } + + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ldarg.0 + call instance void [mscorlib]System.Object::.ctor() + ret + } +} diff --git a/tests/src/JIT/Regression/JitBlue/DevDiv_278369/DevDiv_278369.ilproj b/tests/src/JIT/Regression/JitBlue/DevDiv_278369/DevDiv_278369.ilproj new file mode 100644 index 0000000000..deebeec0d1 --- /dev/null +++ b/tests/src/JIT/Regression/JitBlue/DevDiv_278369/DevDiv_278369.ilproj @@ -0,0 +1,41 @@ + + + + + Debug + AnyCPU + $(MSBuildProjectName) + 2.0 + {95DFC527-4DC1-495E-97D7-E94EE1F7140D} + Exe + Properties + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + $(ProgramFiles)\Common Files\microsoft shared\VSTT .0\UITestExtensionPackages + ..\..\ + 7a9bfb7d + + + + + + + + + False + + + + None + True + + + + + + + + + + + diff --git a/tests/src/JIT/Regression/JitBlue/DevDiv_278371/DevDiv_278371.il b/tests/src/JIT/Regression/JitBlue/DevDiv_278371/DevDiv_278371.il new file mode 100644 index 0000000000..447392e1fd --- /dev/null +++ b/tests/src/JIT/Regression/JitBlue/DevDiv_278371/DevDiv_278371.il @@ -0,0 +1,88 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +// Test for a bug involving an initblk with a non-constant size, +// which uses rep movs on x86 (x64 uses a helper call). + +.assembly extern legacy library mscorlib {} +.assembly extern System.Console +{ + .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) + .ver 4:0:0:0 +} + +.assembly DevDiv_278371 {} + +.class public sequential ansi sealed beforefieldinit S + extends [mscorlib]System.ValueType +{ + .field public uint32 val +} // end of class S + +.class private auto ansi beforefieldinit Program + extends [mscorlib]System.Object +{ + .method public hidebysig static void Init(valuetype S& s, + int32 size) cil managed noinlining + { + nop + ldarg.0 + ldc.i4 0xaa + ldarg.1 + initblk + ret + } // end of method Program::Init + + .method private hidebysig static int32 + Main() cil managed + { + .entrypoint + .locals init (valuetype S V_0, + bool V_1, + int32 V_2) + ldloca.s V_0 + initobj S + ldloca.s V_0 + ldc.i4 4 + call void Program::Init(valuetype S&, int32) + ldloc.0 + ldfld uint32 S::val + ldc.i4 0xaaaaaaaa + ceq + ldc.i4.0 + ceq + stloc.1 + ldloc.1 + brfalse.s L1 + + ldstr "Fail" + call void [mscorlib]System.Console::WriteLine(string) + nop + ldc.i4.m1 + stloc.2 + br.s L2 + + L1: ldstr "Pass" + call void [mscorlib]System.Console::WriteLine(string) + nop + ldc.i4.s 100 + stloc.2 + + L2: ldloc.2 + ret + } // end of method Program::Main + + .method public hidebysig specialname rtspecialname + instance void .ctor() cil managed + { + // Code size 8 (0x8) + .maxstack 8 + ldarg.0 + call instance void [mscorlib]System.Object::.ctor() + nop + ret + } // end of method Program::.ctor + +} // end of class Program + diff --git a/tests/src/JIT/Regression/JitBlue/DevDiv_278371/DevDiv_278371.ilproj b/tests/src/JIT/Regression/JitBlue/DevDiv_278371/DevDiv_278371.ilproj new file mode 100644 index 0000000000..11cfb62342 --- /dev/null +++ b/tests/src/JIT/Regression/JitBlue/DevDiv_278371/DevDiv_278371.ilproj @@ -0,0 +1,41 @@ + + + + + Debug + AnyCPU + $(MSBuildProjectName) + 2.0 + {95DFC527-4DC1-495E-97D7-E94EE1F7140D} + Exe + Properties + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + $(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages + ..\..\ + 7a9bfb7d + + + + + + + + + False + + + + None + True + + + + + + + + + + + diff --git a/tests/src/JIT/Regression/JitBlue/DevDiv_278372/DevDiv_278372.il b/tests/src/JIT/Regression/JitBlue/DevDiv_278372/DevDiv_278372.il new file mode 100644 index 0000000000..1081877171 --- /dev/null +++ b/tests/src/JIT/Regression/JitBlue/DevDiv_278372/DevDiv_278372.il @@ -0,0 +1,156 @@ +// Licensed to the .NET Foundation under one or more 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 is a reduced repro case for DevDiv VSO bug 278372. +// The failure mode is that the RyuJIT/x86 backend was not correctly +// handling the case of a variable involving a variable V such that: +// - V is lvMustInit (therefore it must be undefined on some path) +// - V lives in multiple registers, but never on the stack +// - there is at least one other variable that is also lvMustInit, but that +// has a stack location. +// +// In this case, genFnProlog was attempting to zero-init V on the stack. +// +// It was difficult to construct a repro; this repro requires that the test +// be run with COMPlus_JitStressRegs=0x200 (which changes the location of +// variables at block boundaries). + + +// Metadata version: v4.0.30319 +.assembly extern System.Runtime +{ + .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: + .ver 4:1:0:0 +} +.assembly extern System.Console +{ + .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....: + .ver 4:0:0:0 +} +.assembly DevDiv_278372 +{ +} + +// =============== CLASS MEMBERS DECLARATION =================== + +.class private auto ansi beforefieldinit DevDiv_278372 + extends [System.Runtime]System.Object +{ + .method public hidebysig static bool check(int32& dummy) cil managed noinlining + { + ldc.i4.1 + ret + } // end of method DevDiv_278372::check + + .method public hidebysig static int32 getX() cil managed noinlining + { + ldc.i4.s 25 + ret + } // end of method DevDiv_278372::getX + + .method public hidebysig static int32 getY() cil managed noinlining + { + ldc.i4.5 + ret + } // end of method DevDiv_278372::getY + + .method public hidebysig static int32 Test(int32 x, + int32 y, + int32 x2, + int32 y2, + int32 x3, + int32 y3) cil managed noinlining + { + .maxstack 2 + .locals init ([0] int32 z, + [1] int32 returnVal, + [2] int32 dummy, + [3] int32 z2) + + // Initialize returnVal to 100 + ldc.i4.s 100 + stloc.1 + + // Here we pass the address of "dummy" to ensure that we have a must-init on-stack variable. + ldloca.s dummy + call bool DevDiv_278372::check(int32&) + brfalse.s L1 + + // Here we are conditionally defining "z", so that it will be must-init + ldarg.0 + ldarg.1 + rem + stloc.0 + L1: ldloc.0 + brfalse.s L2 + + ldc.i4.m1 + stloc.1 + L2: ldarg.2 + ldarg.3 + rem + stloc.3 + ldarg.0 + ldarg.1 + add + stloc.0 + ldloc.0 + ldc.i4.s 30 + beq.s L3 + + ldc.i4.m1 + stloc.1 + L3: ldloc.3 + brfalse.s L4 + + ldc.i4.m1 + stloc.1 + L4: ldloc.1 + ldc.i4.s 100 + bne.un.s L5 + + ldstr "Pass" + call void [System.Console]System.Console::WriteLine(string) + br.s L6 + + L5: ldstr "Fail" + call void [System.Console]System.Console::WriteLine(string) + L6: ldloc.1 + ret + } // end of method DevDiv_278372::Test + + .method public hidebysig static int32 Main() cil managed + { + .entrypoint + // Code size 16 (0x10) + .maxstack 8 + ldc.i4.s 25 + ldc.i4.5 + ldc.i4.s 25 + ldc.i4.5 + ldc.i4.s 25 + ldc.i4.5 + call int32 DevDiv_278372::Test(int32, + int32, + int32, + int32, + int32, + int32) + ret + } // end of method DevDiv_278372::Main + + .method public hidebysig specialname rtspecialname + instance void .ctor() cil managed + { + // Code size 7 (0x7) + .maxstack 8 + ldarg.0 + call instance void [System.Runtime]System.Object::.ctor() + ret + } // end of method DevDiv_278372::.ctor + +} // end of class DevDiv_278372 + + +// ============================================================= diff --git a/tests/src/JIT/Regression/JitBlue/DevDiv_278372/DevDiv_278372.ilproj b/tests/src/JIT/Regression/JitBlue/DevDiv_278372/DevDiv_278372.ilproj new file mode 100644 index 0000000000..f3da12d5f0 --- /dev/null +++ b/tests/src/JIT/Regression/JitBlue/DevDiv_278372/DevDiv_278372.ilproj @@ -0,0 +1,51 @@ + + + + + Debug + AnyCPU + $(MSBuildProjectName) + 2.0 + {95DFC527-4DC1-495E-97D7-E94EE1F7140D} + Exe + Properties + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + $(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages + ..\..\ + 7a9bfb7d + + + + + + + + + False + + + + None + True + + + + + + + + + + + + + + + diff --git a/tests/src/JIT/Regression/JitBlue/DevDiv_278375/DevDiv_278375.cs b/tests/src/JIT/Regression/JitBlue/DevDiv_278375/DevDiv_278375.cs new file mode 100644 index 0000000000..ecd7e7fa38 --- /dev/null +++ b/tests/src/JIT/Regression/JitBlue/DevDiv_278375/DevDiv_278375.cs @@ -0,0 +1,131 @@ +// Licensed to the .NET Foundation under one or more 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.CompilerServices; + +struct MyStruct +{ + // Struct containing 4 fields, 3 of which are longs that will be decomposed. + // The bug was that this resulted in 7 input registers to the GT_FIELD_LIST + // parameter, which can't be accommodated by the register allocator. + + public MyStruct(long l1, long l2, long l3, int i) + { + f1 = l1; + f2 = l2; + f3 = l3; + f4 = new int[i]; + f4[0] = i; + } + + [MethodImpl(MethodImplOptions.NoInlining)] + public static MyStruct newMyStruct(long l1, long l2, long l3, int i) + { + return new MyStruct(l1, l2, l3, i); + } + + public long f1; + public long f2; + public long f3; + public int[] f4; +} + +struct MyStruct2 +{ + // This is a variation that includes a double field, to ensure that a mix of + // field types are supported. + public MyStruct2(long l1, long l2, double d, int i) + { + f1 = l1; + f2 = l2; + f3 = d; + f4 = new int[i]; + f4[0] = i; + } + + public long f1; + public long f2; + public double f3; + public int[] f4; +} + +struct MyStruct3 +{ + // And finally one that includes longs and a double, but no ref. + public MyStruct3(long l1, long l2, double d, int i) + { + f1 = l1; + f2 = l2; + f3 = d; + f4 = i; + } + + public long f1; + public long f2; + public double f3; + public int f4; +} + +class Program +{ + + static int Pass = 100; + static int Fail = -1; + + [MethodImpl(MethodImplOptions.NoInlining)] + static int AddFields(MyStruct s) + { + return (int)(s.f1 + s.f2 + s.f3 + s.f4[0]); + } + + [MethodImpl(MethodImplOptions.NoInlining)] + static int AddFields2(MyStruct2 s) + { + return (int)(s.f1 + s.f2 + (int)s.f3 + s.f4[0]); + } + + [MethodImpl(MethodImplOptions.NoInlining)] + static int AddFields3(MyStruct3 s) + { + return (int)(s.f1 + s.f2 + (int)s.f3 + s.f4); + } + + static int Main(string[] args) + { + int returnVal = Pass; + MyStruct s = new MyStruct(1, 2, 3, 4); + int sum = AddFields(s); + if (sum != 10) + { + Console.WriteLine("Failed first call"); + returnVal = Fail; + } + s = MyStruct.newMyStruct(1, 2, 3, 4); + sum = AddFields(s); + if (sum != 10) + { + Console.WriteLine("Failed second call"); + returnVal = Fail; + } + MyStruct2 s2 = new MyStruct2(1, 2, 3.0, 4); + sum = AddFields2(s2); + if (sum != 10) + { + Console.WriteLine("Failed third call"); + returnVal = Fail; + } + MyStruct3 s3 = new MyStruct3(1, 2, 3.0, 4); + sum = AddFields3(s3); + if (sum != 10) + { + Console.WriteLine("Failed fourth call"); + returnVal = Fail; + } + if (returnVal == Pass) + { + Console.WriteLine("Pass"); + } + return returnVal; + } +} \ No newline at end of file diff --git a/tests/src/JIT/Regression/JitBlue/DevDiv_278375/DevDiv_278375.csproj b/tests/src/JIT/Regression/JitBlue/DevDiv_278375/DevDiv_278375.csproj new file mode 100644 index 0000000000..9477984ab9 --- /dev/null +++ b/tests/src/JIT/Regression/JitBlue/DevDiv_278375/DevDiv_278375.csproj @@ -0,0 +1,46 @@ + + + + + Debug + AnyCPU + $(MSBuildProjectName) + 2.0 + {95DFC527-4DC1-495E-97D7-E94EE1F7140D} + Exe + Properties + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + $(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages + ..\..\ + + 7a9bfb7d + + + + + + + + + False + + + + + True + + + + + + + + + $(JitPackagesConfigFileDirectory)minimal\project.json + $(JitPackagesConfigFileDirectory)minimal\project.lock.json + + + + + diff --git a/tests/src/JIT/Regression/JitBlue/DevDiv_278376/DevDiv_278376.cs b/tests/src/JIT/Regression/JitBlue/DevDiv_278376/DevDiv_278376.cs new file mode 100644 index 0000000000..63e3d29f7a --- /dev/null +++ b/tests/src/JIT/Regression/JitBlue/DevDiv_278376/DevDiv_278376.cs @@ -0,0 +1,36 @@ +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// NOTE: the bug for this test was an assertion in RyuJIT/x86 when generating code for a double-returning call that +// was spilled by the RA and subsequently used. The call in question is the call to `C.GetDouble` in `C.Test`. +// To ensure that its return value is spilled, `C.GetDouble` is implemented as a P/Invoke method: the return +// value ends up spilled because there is a call to `TrapReturningThreads` between the call and the use of the +// return value by the cast. Because the bug is a simple assert, there is no need for the problematic code to +// actually run, so the implementation of `GetDouble` does not need to actually exist. + +sealed class C +{ + [DllImport("nonexistent.dll")] + extern static double GetDouble(); + + [MethodImpl(MethodImplOptions.NoInlining)] + static void UseDouble(double d) + { + } + + [MethodImpl(MethodImplOptions.NoInlining)] + static int Test(bool condition) + { + if (condition) + { + UseDouble((double)GetDouble()); + } + + return 100; + } + + static int Main(string[] args) + { + return Test(false); + } +} diff --git a/tests/src/JIT/Regression/JitBlue/DevDiv_278376/DevDiv_278376.csproj b/tests/src/JIT/Regression/JitBlue/DevDiv_278376/DevDiv_278376.csproj new file mode 100644 index 0000000000..90327b2a5d --- /dev/null +++ b/tests/src/JIT/Regression/JitBlue/DevDiv_278376/DevDiv_278376.csproj @@ -0,0 +1,46 @@ + + + + + Debug + AnyCPU + $(MSBuildProjectName) + 2.0 + {95DFC527-4DC1-495E-97D7-E94EE1F7140D} + Exe + Properties + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + $(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages + ..\..\ + + 7a9bfb7d + + + + + + + + + False + + + + + True + + + + + + + + + $(JitPackagesConfigFileDirectory)minimal\project.json + $(JitPackagesConfigFileDirectory)minimal\project.lock.json + + + + + diff --git a/tests/src/JIT/Regression/JitBlue/DevDiv_278523/DevDiv_278523.il b/tests/src/JIT/Regression/JitBlue/DevDiv_278523/DevDiv_278523.il new file mode 100644 index 0000000000..9c9ba4946c --- /dev/null +++ b/tests/src/JIT/Regression/JitBlue/DevDiv_278523/DevDiv_278523.il @@ -0,0 +1,113 @@ +// Licensed to the .NET Foundation under one or more 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 a {} +.module a.exe + +// This test originally triggered an assert when computing the value number for a block assignment. In particular, the +// VN framework expected any block assignments to a tracked lclVar to have a destination address of the form +// `(addr (lclVar))` or `(addr (lclFld))`. The check that it was using to determine whether or not a block assignment +// targets a lclVar also admitted addresses formed by some combination of adds of constants to these patterns (e.g. +// `(add (const 4) (add (addr lclVar) (const 4)))`. The bits of IL that trigger the assert are called out in the method +// bodies below. They differ for 32- and 64-bit targets because on 64-bit targets, the importer will insert an +// int->long conversion when adding a constant int to any long. Due to the cast, the resulting IR is not considered to +// be an add of a constant and a lclVar address. In order to repro the bug on a 64-bit target, the input IL must +// directly produce a long constant. + +.class private sequential ansi sealed beforefieldinit S extends [mscorlib]System.ValueType +{ + .field public uint8 m_fld + .field public uint8 m_fld1 + .field public uint8 m_fld2 + .field public uint8 m_fld3 + .field public uint8 m_fld4 + .field public uint8 m_fld5 + .field public uint8 m_fld6 +} + +.class private sequential ansi sealed beforefieldinit T extends [mscorlib]System.ValueType +{ + .field public int32 m_int + .field public valuetype S m_fld +} + +.class private abstract auto ansi sealed beforefieldinit C extends [mscorlib]System.Object +{ + .method private static int32 Test32Bit(int32 i) noinlining + { + .locals init (valuetype S V_0, valuetype T V_1) + + ldloca.s V_0 + ldarg.0 + conv.u1 + stfld uint8 S::m_fld6 + + // This sequence of IL repros the issue. + ldloca.s V_1 + ldc.i4.4 + add + ldloc.0 + stobj S + + ldloca.s V_1 + ldfld valuetype S T::m_fld + ldfld uint8 S::m_fld6 + conv.i4 + ret + } + + .method private static int32 Test64Bit(int32 i) noinlining + { + .locals init (valuetype S V_0, valuetype T V_1) + + ldloca.s V_0 + ldarg.0 + conv.u1 + stfld uint8 S::m_fld6 + + // This sequence of IL repros the issue. Note that the `ldc.i8` is necessary (rather than an `ldc.i4` that is + // implicitly converted to a long byt the `add`). + ldloca.s V_1 + ldc.i8 4 + add + ldloc.0 + stobj S + + ldloca.s V_1 + ldfld valuetype S T::m_fld + ldfld uint8 S::m_fld6 + conv.i4 + ret + } + + .method private static int32 Main() + { + .entrypoint + .locals init (int32 V_0) + + ldc.i4 100 + dup + + sizeof [mscorlib]System.IntPtr + ldc.i4 8 + beq.s _64bit + + call int32 C::Test32Bit(int32) + bne.un.s fail + br.s success + +_64bit: + call int32 C::Test64Bit(int32) + bne.un.s fail + +success: + ldc.i4 100 + ret + +fail: + ldc.i4 101 + ret + } +} diff --git a/tests/src/JIT/Regression/JitBlue/DevDiv_278523/DevDiv_278523.ilproj b/tests/src/JIT/Regression/JitBlue/DevDiv_278523/DevDiv_278523.ilproj new file mode 100644 index 0000000000..d4cfe45c95 --- /dev/null +++ b/tests/src/JIT/Regression/JitBlue/DevDiv_278523/DevDiv_278523.ilproj @@ -0,0 +1,41 @@ + + + + + Debug + AnyCPU + $(MSBuildProjectName) + 2.0 + {95DFC527-4DC1-495E-97D7-E94EE1F7140D} + Exe + Properties + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + $(ProgramFiles)\Common Files\microsoft shared\VSTT .0\UITestExtensionPackages + ..\..\ + 7a9bfb7d + + + + + + + + + False + + + + None + True + + + + + + + + + + + diff --git a/tests/src/JIT/Regression/JitBlue/DevDiv_278526/DevDiv_278526.cs b/tests/src/JIT/Regression/JitBlue/DevDiv_278526/DevDiv_278526.cs new file mode 100644 index 0000000000..e3c494b66d --- /dev/null +++ b/tests/src/JIT/Regression/JitBlue/DevDiv_278526/DevDiv_278526.cs @@ -0,0 +1,47 @@ +// Licensed to the .NET Foundation under one or more 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 was originally a repro for an assertion regarding incorrect value number of the tree in cse. +// The repro requires that the tree and its child are considered by cse and child is binary sub (a - b). +// Cse calls morph of the parent tree and morphs child to (a + (-b)) and sets the clean VN state to the child. +// It causes assert when cse processes the child with the clean vn state. + + +using System; + + +class Program +{ + public sealed class Variables + { + public static byte[] decryptedApplicationData + { + get; + set; + } + } + + private static bool VerifyMacvalueSSlV2(string sourceIP) + { + if (sourceIP == "skip") + return false; + + byte[] array3 = new byte[0]; + + // Assert happens on the next two statements. + int l = Variables.decryptedApplicationData.Length - array3.Length - 16; + byte[] array2 = new byte[l]; + + if (array3[0] != array2[0]) + return false; + return true; + } + + public static int Main(string[] args) + { + string s = "skip"; // Test checks commpilation process. + VerifyMacvalueSSlV2(s); + return 100; + } +} diff --git a/tests/src/JIT/Regression/JitBlue/DevDiv_278526/DevDiv_278526.csproj b/tests/src/JIT/Regression/JitBlue/DevDiv_278526/DevDiv_278526.csproj new file mode 100644 index 0000000000..b1bd003732 --- /dev/null +++ b/tests/src/JIT/Regression/JitBlue/DevDiv_278526/DevDiv_278526.csproj @@ -0,0 +1,46 @@ + + + + + Debug + AnyCPU + $(MSBuildProjectName) + 2.0 + {95DFC527-4DC1-495E-97D7-E94EE1F7140D} + Exe + Properties + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + $(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages + ..\..\ + + 7a9bfb7d + + + + + + + + + False + + + + + True + + + + + + + + + $(JitPackagesConfigFileDirectory)minimal\project.json + $(JitPackagesConfigFileDirectory)minimal\project.lock.json + + + + + diff --git a/tests/src/JIT/Regression/JitBlue/DevDiv_279396/DevDiv_279396.il b/tests/src/JIT/Regression/JitBlue/DevDiv_279396/DevDiv_279396.il new file mode 100644 index 0000000000..70e02027fc --- /dev/null +++ b/tests/src/JIT/Regression/JitBlue/DevDiv_279396/DevDiv_279396.il @@ -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. + +.assembly extern mscorlib {} +.assembly DevDiv_279396 {} +.module DevDiv_279396.exe + +// This test originally triggered an assertion in the emitter that ensured that no lclVar or lclFld access exceeded the +// bounds of its containing method's frame. The problematic access was created during morphing by folding +// `(ind long (addr int (lclVar int V0)))` into `(lclFld long V0 0)`. This corresponds to the body of `C::Test` below. + +.class private abstract auto ansi sealed beforefieldinit C extends [mscorlib]System.Object +{ + .method private static int64 Test(int32 i) noinlining + { + ldarga.s i + ldind.i8 + ret + } + + .method private static int32 Main() + { + .entrypoint + + ldc.i4 100 + dup + call int64 C::Test(int32) + conv.i4 + bne.un.s fail + + ldc.i4 100 + ret + +fail: + ldc.i4 101 + ret + } +} diff --git a/tests/src/JIT/Regression/JitBlue/DevDiv_279396/DevDiv_279396.ilproj b/tests/src/JIT/Regression/JitBlue/DevDiv_279396/DevDiv_279396.ilproj new file mode 100644 index 0000000000..2a9f58bf7d --- /dev/null +++ b/tests/src/JIT/Regression/JitBlue/DevDiv_279396/DevDiv_279396.ilproj @@ -0,0 +1,41 @@ + + + + + Debug + AnyCPU + $(MSBuildProjectName) + 2.0 + {95DFC527-4DC1-495E-97D7-E94EE1F7140D} + Exe + Properties + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + $(ProgramFiles)\Common Files\microsoft shared\VSTT .0\UITestExtensionPackages + ..\..\ + 7a9bfb7d + + + + + + + + + False + + + + None + True + + + + + + + + + + + diff --git a/tests/src/JIT/Regression/JitBlue/DevDiv_279829/DevDiv_279829.il b/tests/src/JIT/Regression/JitBlue/DevDiv_279829/DevDiv_279829.il new file mode 100644 index 0000000000..96c22d24d6 --- /dev/null +++ b/tests/src/JIT/Regression/JitBlue/DevDiv_279829/DevDiv_279829.il @@ -0,0 +1,36 @@ +// Licensed to the .NET Foundation under one or more 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_279829.exe {} + +.class public Test +{ + .method private static int32 JmpTarget(int64) + { + .maxstack 1 + ldarg.0 + conv.i4 + ret + } + + .method private static int32 Jmp(int64) + { + .maxstack 1 + jmp int32 Test::JmpTarget(int64) + ldc.i4 0 + ret + } + + .method private static int32 Main(class [mscorlib]System.String[]) + { + .entrypoint + .maxstack 1 + + ldc.i8 100 + call int32 Test::Jmp(int64) + ret + } +} diff --git a/tests/src/JIT/Regression/JitBlue/DevDiv_279829/DevDiv_279829.ilproj b/tests/src/JIT/Regression/JitBlue/DevDiv_279829/DevDiv_279829.ilproj new file mode 100644 index 0000000000..d4804c8cdc --- /dev/null +++ b/tests/src/JIT/Regression/JitBlue/DevDiv_279829/DevDiv_279829.ilproj @@ -0,0 +1,46 @@ + + + + + Debug + AnyCPU + $(MSBuildProjectName) + 2.0 + {95DFC527-4DC1-495E-97D7-E94EE1F7140D} + Exe + Properties + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + $(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages + ..\..\ + true + 7a9bfb7d + + + + + + + + + False + + + + true + None + + + + + + + + + $(JitPackagesConfigFileDirectory)minimal\project.json + $(JitPackagesConfigFileDirectory)minimal\project.lock.json + + + + + diff --git a/tests/src/JIT/Regression/JitBlue/DevDiv_280120/DevDiv_280120.cs b/tests/src/JIT/Regression/JitBlue/DevDiv_280120/DevDiv_280120.cs new file mode 100644 index 0000000000..39888b100d --- /dev/null +++ b/tests/src/JIT/Regression/JitBlue/DevDiv_280120/DevDiv_280120.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. + +// This test was originally a repro for an assertion regarding incorrect lclVar ref counts due to a bug in the +// decomposition of a long-typed st.lclFld node. The repro requires that a dead store of this type survives until +// decomposition. We must therefore avoid running liveness before decomposition as part of this test, which requires +// skipping SSA (and dependent optimizations). This pass is disabled in the project file by setting JitDoSsa to 0 +// before running the test. + +struct S +{ + long m_fld; + int m_a, m_b, m_c, m_d; + + static int Main(string[] args) + { + S s; + s.m_fld = (long)args.Length; + return 100; + } +} diff --git a/tests/src/JIT/Regression/JitBlue/DevDiv_280120/DevDiv_280120.csproj b/tests/src/JIT/Regression/JitBlue/DevDiv_280120/DevDiv_280120.csproj new file mode 100644 index 0000000000..bcbdc0f452 --- /dev/null +++ b/tests/src/JIT/Regression/JitBlue/DevDiv_280120/DevDiv_280120.csproj @@ -0,0 +1,56 @@ + + + + + Debug + AnyCPU + $(MSBuildProjectName) + 2.0 + {95DFC527-4DC1-495E-97D7-E94EE1F7140D} + Exe + Properties + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + $(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages + ..\..\ + + 7a9bfb7d + + + + + + + + + False + + + + + True + + + + + + + + + + + + + $(JitPackagesConfigFileDirectory)minimal\project.json + $(JitPackagesConfigFileDirectory)minimal\project.lock.json + + + + + diff --git a/tests/src/JIT/Regression/JitBlue/DevDiv_280123/DevDiv_280123.cs b/tests/src/JIT/Regression/JitBlue/DevDiv_280123/DevDiv_280123.cs new file mode 100644 index 0000000000..01e55ed580 --- /dev/null +++ b/tests/src/JIT/Regression/JitBlue/DevDiv_280123/DevDiv_280123.cs @@ -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. + +using System.Runtime.CompilerServices; + +// This test ensures that the value number store (and its users) behave properly in the event that VN data is requested +// for trees without value numbers. The original repro was a rather large method with a significant amount of dead code +// due to the pattern exhibited in C.N: an entry block that was not transformed from a conditional return to an +// unconditional return followed by dead code that must be kept due to the presence of EH. Value numbering does not +// assign value numbers to the dead code, but assertion prop still runs over the dead code and attempts to use VN info, +// which resulted in a number of asserts. + +static class C +{ + [MethodImpl(MethodImplOptions.NoInlining)] + static int N(ref int i) + { + bool b = true; + if (b) + { + return 100; + } + + try + { + b = i != 1; + } + finally + { + b = i != 0; + } + + return b ? 0 : 1; + } + + static int Main(string[] args) + { + int i = args.Length; + return N(ref i); + } +} diff --git a/tests/src/JIT/Regression/JitBlue/DevDiv_280123/DevDiv_280123.csproj b/tests/src/JIT/Regression/JitBlue/DevDiv_280123/DevDiv_280123.csproj new file mode 100644 index 0000000000..a2ec9758cc --- /dev/null +++ b/tests/src/JIT/Regression/JitBlue/DevDiv_280123/DevDiv_280123.csproj @@ -0,0 +1,46 @@ + + + + + Debug + AnyCPU + $(MSBuildProjectName) + 2.0 + {95DFC527-4DC1-495E-97D7-E94EE1F7140D} + Exe + Properties + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + $(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages + ..\..\ + + 7a9bfb7d + + + + + + + + + False + + + + + True + + + + + + + + + $(JitPackagesConfigFileDirectory)minimal\project.json + $(JitPackagesConfigFileDirectory)minimal\project.lock.json + + + + + diff --git a/tests/src/JIT/Regression/JitBlue/DevDiv_280127/DevDiv_280127.cs b/tests/src/JIT/Regression/JitBlue/DevDiv_280127/DevDiv_280127.cs new file mode 100644 index 0000000000..3f8270f70c --- /dev/null +++ b/tests/src/JIT/Regression/JitBlue/DevDiv_280127/DevDiv_280127.cs @@ -0,0 +1,37 @@ +// Licensed to the .NET Foundation under one or more 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.CompilerServices; + +// The original repro for this test was an assertion after code generation that the actual maximum depth of the stack +// was less than or identical to the estimated depth of the stack as calculated during morph. The calculation was +// incorrect when a math intrinsic was used as an argument to a function with on-stack parameters (e.g. the call to +// `M` on line 18). + +static class C +{ + struct S + { + int a, b, c, d; + } + + [MethodImpl(MethodImplOptions.NoInlining)] + static int N(S s, float d) + { + return 100; + } + + [MethodImpl(MethodImplOptions.NoInlining)] + static int M(double d) + { + N(new S(), (float)(Math.Atan2(d, 2.0) * 180 / Math.PI)); + return 100; + } + + static int Main() + { + return M(2.0); + } +} diff --git a/tests/src/JIT/Regression/JitBlue/DevDiv_280127/DevDiv_280127.csproj b/tests/src/JIT/Regression/JitBlue/DevDiv_280127/DevDiv_280127.csproj new file mode 100644 index 0000000000..ec9776df87 --- /dev/null +++ b/tests/src/JIT/Regression/JitBlue/DevDiv_280127/DevDiv_280127.csproj @@ -0,0 +1,46 @@ + + + + + Debug + AnyCPU + $(MSBuildProjectName) + 2.0 + {95DFC527-4DC1-495E-97D7-E94EE1F7140D} + Exe + Properties + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + $(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages + ..\..\ + + 7a9bfb7d + + + + + + + + + False + + + + + True + + + + + + + + + $(JitPackagesConfigFileDirectory)minimal\project.json + $(JitPackagesConfigFileDirectory)minimal\project.lock.json + + + + + diff --git a/tests/src/JIT/Regression/JitBlue/DevDiv_283795/DevDiv_283795.cs b/tests/src/JIT/Regression/JitBlue/DevDiv_283795/DevDiv_283795.cs new file mode 100644 index 0000000000..55da5ba1e9 --- /dev/null +++ b/tests/src/JIT/Regression/JitBlue/DevDiv_283795/DevDiv_283795.cs @@ -0,0 +1,55 @@ +// Licensed to the .NET Foundation under one or more 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; + +class C +{ + [MethodImpl(MethodImplOptions.AggressiveInlining)] + static int[] M() + { + return null; + } + + [MethodImpl(MethodImplOptions.NoInlining)] + static bool Test(int i, int j, bool execute) + { + if (execute) + { + return M()[checked(i + j)] == 0; + } + + return true; + } + + static int Main() + { + // The original repro of the bug associated with this test involved an assert after re-morphing a tree modified + // by CSE: the original tree contained both a CSE def and a CSE use, and re-morphing eliminated the use, causing + // CSE to assert when attempting to replace the use with a reference to the CSE lclVar. This call to `Test` is + // intended to trigger that assert. + bool test1 = Test(0, 0, false); + + // The associated code in morph involves folding `(x + null)` to `x`. During the investigation of the original + // issue, it was found that the folding code also failed to check for side effects in `x` resulting in SBCG if + // side effects were in fact present in `x`. This call to `Test` is intended to ensure that the fold is not + // performed in the face of a tree that contains side-effects: in particular, the overflowing add in the + // called method should occur before any other exception. + bool test2 = false; + try + { + Test(int.MaxValue, int.MaxValue, true); + } + catch (System.OverflowException) + { + test2 = true; + } + catch (System.Exception e) + { + System.Console.WriteLine(e); + } + + return test1 && test2 ? 100 : 101; + } +} diff --git a/tests/src/JIT/Regression/JitBlue/DevDiv_283795/DevDiv_283795.csproj b/tests/src/JIT/Regression/JitBlue/DevDiv_283795/DevDiv_283795.csproj new file mode 100644 index 0000000000..71bd55fbf9 --- /dev/null +++ b/tests/src/JIT/Regression/JitBlue/DevDiv_283795/DevDiv_283795.csproj @@ -0,0 +1,46 @@ + + + + + Debug + AnyCPU + $(MSBuildProjectName) + 2.0 + {95DFC527-4DC1-495E-97D7-E94EE1F7140D} + Exe + Properties + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + $(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages + ..\..\ + + 7a9bfb7d + + + + + + + + + False + + + + + True + + + + + + + + + $(JitPackagesConfigFileDirectory)minimal\project.json + $(JitPackagesConfigFileDirectory)minimal\project.lock.json + + + + + diff --git a/tests/src/JIT/Regression/JitBlue/DevDiv_284785/DevDiv_284785.cs b/tests/src/JIT/Regression/JitBlue/DevDiv_284785/DevDiv_284785.cs new file mode 100644 index 0000000000..944993f038 --- /dev/null +++ b/tests/src/JIT/Regression/JitBlue/DevDiv_284785/DevDiv_284785.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. + +// This test exercises expression folding in the place of overflowing operations. The original failure was SBCG due to +// an incorrect application of the same: in the program below, the checked int -> ulong cast on line 24 was folded to a +// long -> ulong cast with an incorrect constant value that fit in a ulong, resulting in no overflow exception being +// thrown. + +using System; + +static class C +{ + static int Main() + { + int i = -4; + ulong l = 0; + + int rv = 0; + try + { + checked + { + l = (ulong)i; + } + } + catch (OverflowException) + { + rv = 100; + } + catch (Exception) + { + i = 0; + l = 0; + } + + return rv; + } +} diff --git a/tests/src/JIT/Regression/JitBlue/DevDiv_284785/DevDiv_284785.csproj b/tests/src/JIT/Regression/JitBlue/DevDiv_284785/DevDiv_284785.csproj new file mode 100644 index 0000000000..d27b911ee9 --- /dev/null +++ b/tests/src/JIT/Regression/JitBlue/DevDiv_284785/DevDiv_284785.csproj @@ -0,0 +1,46 @@ + + + + + Debug + AnyCPU + $(MSBuildProjectName) + 2.0 + {95DFC527-4DC1-495E-97D7-E94EE1F7140D} + Exe + Properties + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + $(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages + ..\..\ + + 7a9bfb7d + + + + + + + + + False + + + + + True + + + + + + + + + $(JitPackagesConfigFileDirectory)minimal\project.json + $(JitPackagesConfigFileDirectory)minimal\project.lock.json + + + + + diff --git a/tests/src/JIT/Regression/JitBlue/DevDiv_288222/DevDiv_288222.cs b/tests/src/JIT/Regression/JitBlue/DevDiv_288222/DevDiv_288222.cs new file mode 100644 index 0000000000..e24c7977ba --- /dev/null +++ b/tests/src/JIT/Regression/JitBlue/DevDiv_288222/DevDiv_288222.cs @@ -0,0 +1,50 @@ +// Licensed to the .NET Foundation under one or more 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.CompilerServices; +using System.Numerics; + +// This test is a repro case for DevDiv VSO bug 288222. +// The failure mode is that the size was not being set for a "this" pointer +// with SIMD type. + +internal class Program +{ + // Declare a delegate type for calling the Vector2.CopyTo method. + public delegate void CopyToDelegate(float[] array, int start); + + [MethodImpl(MethodImplOptions.NoInlining)] + public static void MyCopyTo(CopyToDelegate doCopy, float[] array, int start) + { + doCopy(array, start); + } + + private static int Main(string[] args) + { + try + { + float x = 1.0F; + float y = 2.0F; + Vector2 v = new Vector2(x, y); + float[] array = new float[4]; + MyCopyTo(new CopyToDelegate(v.CopyTo), array, 2); + + if ((array[2] != x) || (array[3] != y)) + { + Console.WriteLine("Failed with wrong values"); + return -1; + } + } + catch (Exception e) + { + Console.WriteLine("Failed with exception: " + e.Message); + return -1; + } + + Console.WriteLine("Pass"); + return 100; + } +} diff --git a/tests/src/JIT/Regression/JitBlue/DevDiv_288222/DevDiv_288222.csproj b/tests/src/JIT/Regression/JitBlue/DevDiv_288222/DevDiv_288222.csproj new file mode 100644 index 0000000000..0aa2d11c7b --- /dev/null +++ b/tests/src/JIT/Regression/JitBlue/DevDiv_288222/DevDiv_288222.csproj @@ -0,0 +1,46 @@ + + + + + Debug + AnyCPU + $(MSBuildProjectName) + 2.0 + {95DFC527-4DC1-495E-97D7-E94EE1F7140D} + Exe + Properties + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + $(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages + ..\..\ + + 7a9bfb7d + + + + + + + + + False + + + + + True + + + + + + + + + $(JitPackagesConfigFileDirectory)threading+thread\project.json + $(JitPackagesConfigFileDirectory)threading+thread\project.lock.json + + + + + diff --git a/tests/src/JIT/Regression/JitBlue/DevDiv_359734/DevDiv_359734.il b/tests/src/JIT/Regression/JitBlue/DevDiv_359734/DevDiv_359734.il new file mode 100644 index 0000000000..43f55b6e81 --- /dev/null +++ b/tests/src/JIT/Regression/JitBlue/DevDiv_359734/DevDiv_359734.il @@ -0,0 +1,118 @@ +// Licensed to the .NET Foundation under one or more 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 original bug for this test was an assertion after the following sequence of events: +// - Assertion propagation constant propagated away the ldlocs, or, and shl in the IL at label "expr" +// - After constant propagation, the resulting expression--`(mod tmp0 cns)`--was remorphed, which +// replaced the modulus with `(sub tmp0 (mul (div tmp0 cns) cns))` and unset the "exception" flag. +// Critically, this transformation added a new use of `tmp0` without updating the ref count for `tmp0`. +// - After morphing, the resulting expression was both unsused and side-effect-free, and was removed +// - While removing the lclVar ref count for `tmp0` fell to `0` +// - Later, liveness found a reference to `tmp0` despite the `0` lclVar count and asserted. +// +// The fix was to bump lclVar ref counts after remorphing but before attempting to remove the expression. + +.assembly extern mscorlib{} +.assembly ILGEN_MODULE{} +.class ILGEN_CLASS +{ + .method static char ILGEN_METHOD(bool, char, int16, int32) + { + .maxstack 65535 + .locals init (int32, int16, int64, int16, unsigned int8, float32, unsigned int8) + + ldc.i8 0x80BBE1AB + ldc.i8 0x866D9EF3 + or + ldarg 0x1 + shl + ldc.i8 0xC09C2177 + sub.ovf.un + conv.ovf.u8.un + ldc.i8 0x82B1C678 + or + ldc.r8 -0.000000 + ldloc 0x5 + ckfinite + ldloc 0x5 + neg + neg + add + add + ldc.r8 0.000000 + clt + stloc.s 0x4 + ldc.i8 0xACB4FC40 + + expr: + ldloc.s 0x3 + ldloc.s 0x0 + or + shl + rem + + conv.ovf.i8 + ldloc.s 0x4 + conv.ovf.u + neg + brtrue IL_0089 + ldarg 0x0 + conv.ovf.i8 + conv.i8 + ldc.i8 0x2ECADED8 + ldloc 0x2 + shr + clt + pop + ldloc.s 0x1 + conv.ovf.u1.un + conv.ovf.u.un + starg 0x0 + + IL_0089: + ldarg.s 0x3 + conv.u8 + bgt IL_0094 + ldloc.s 0x5 + pop + + IL_0094: + ldc.r8 0.000000 + neg + conv.i + ldloc 0x5 + ckfinite + ldc.i8 0x8BD98F2C + conv.r4 + ckfinite + clt + pop + neg + ret + } + + .method static int32 Main() + { + .entrypoint + + .try + { + ldc.i4 0 + dup + dup + dup + call char ILGEN_CLASS::ILGEN_METHOD(bool, char, int16, int32) + pop + leave.s done + } + catch [mscorlib]System.Exception + { + leave.s done + } + + done: + ldc.i4 100 + ret + } +} diff --git a/tests/src/JIT/Regression/JitBlue/DevDiv_359734/DevDiv_359734.ilproj b/tests/src/JIT/Regression/JitBlue/DevDiv_359734/DevDiv_359734.ilproj new file mode 100644 index 0000000000..b13550f980 --- /dev/null +++ b/tests/src/JIT/Regression/JitBlue/DevDiv_359734/DevDiv_359734.ilproj @@ -0,0 +1,41 @@ + + + + + Debug + AnyCPU + $(MSBuildProjectName) + 2.0 + {95DFC527-4DC1-495E-97D7-E94EE1F7140D} + Exe + Properties + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + $(ProgramFiles)\Common Files\microsoft shared\VSTT .0\UITestExtensionPackages + ..\..\ + 7a9bfb7d + + + + + + + + + False + + + + None + True + + + + + + + + + + + diff --git a/tests/src/JIT/Regression/JitBlue/DevDiv_359736/DevDiv_359736.cs b/tests/src/JIT/Regression/JitBlue/DevDiv_359736/DevDiv_359736.cs new file mode 100644 index 0000000000..56f7b903f3 --- /dev/null +++ b/tests/src/JIT/Regression/JitBlue/DevDiv_359736/DevDiv_359736.cs @@ -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. +// + +using System; +using System.Runtime.CompilerServices; + +// This testcase reproduces a bug where the tree re-sequencing was not correct for +// fgMorphModToSubMulDiv(), resulting in an assert in LSRA. + +static class Test +{ + static byte GetVal() + { + return 0; + } + + [MethodImpl(MethodImplOptions.NoInlining)] + static int DoMod(SByte arg) + { + byte val = GetVal(); + return arg % val; + } + + static int Main() + { + int returnVal = -1; + try + { + DoMod(4); + Console.WriteLine("FAILED: No exception thrown"); + returnVal = -1; + } + catch (System.DivideByZeroException) + { + Console.WriteLine("PASS"); + returnVal = 100; + } + return returnVal; + } +} diff --git a/tests/src/JIT/Regression/JitBlue/DevDiv_359736/DevDiv_359736_d.csproj b/tests/src/JIT/Regression/JitBlue/DevDiv_359736/DevDiv_359736_d.csproj new file mode 100644 index 0000000000..93bc9fd04f --- /dev/null +++ b/tests/src/JIT/Regression/JitBlue/DevDiv_359736/DevDiv_359736_d.csproj @@ -0,0 +1,45 @@ + + + + + Debug + AnyCPU + $(MSBuildProjectName) + 2.0 + {23E1CE24-CCFB-4163-A861-D48A76295E8F} + Exe + Properties + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + $(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages + ..\..\ + 7a9bfb7d + + + + + + + + + False + + + + Full + False + + + + + + + + + $(JitPackagesConfigFileDirectory)threading+thread\project.json + $(JitPackagesConfigFileDirectory)threading+thread\project.lock.json + + + + + diff --git a/tests/src/JIT/Regression/JitBlue/DevDiv_359736/DevDiv_359736_do.csproj b/tests/src/JIT/Regression/JitBlue/DevDiv_359736/DevDiv_359736_do.csproj new file mode 100644 index 0000000000..07c2edfb09 --- /dev/null +++ b/tests/src/JIT/Regression/JitBlue/DevDiv_359736/DevDiv_359736_do.csproj @@ -0,0 +1,45 @@ + + + + + Debug + AnyCPU + $(MSBuildProjectName) + 2.0 + {C8DB97C3-1D53-4192-AE65-74A66EFE0841} + Exe + Properties + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + $(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages + ..\..\ + 7a9bfb7d + + + + + + + + + False + + + + Full + True + + + + + + + + + $(JitPackagesConfigFileDirectory)threading+thread\project.json + $(JitPackagesConfigFileDirectory)threading+thread\project.lock.json + + + + + diff --git a/tests/src/JIT/Regression/JitBlue/DevDiv_359736/DevDiv_359736_r.csproj b/tests/src/JIT/Regression/JitBlue/DevDiv_359736/DevDiv_359736_r.csproj new file mode 100644 index 0000000000..fcc7a165ca --- /dev/null +++ b/tests/src/JIT/Regression/JitBlue/DevDiv_359736/DevDiv_359736_r.csproj @@ -0,0 +1,45 @@ + + + + + Debug + AnyCPU + $(MSBuildProjectName) + 2.0 + {C7C7808C-AFDF-4267-B295-C9D0E9EF5642} + Exe + Properties + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + $(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages + ..\..\ + 7a9bfb7d + + + + + + + + + False + + + + None + False + + + + + + + + + $(JitPackagesConfigFileDirectory)threading+thread\project.json + $(JitPackagesConfigFileDirectory)threading+thread\project.lock.json + + + + + diff --git a/tests/src/JIT/Regression/JitBlue/DevDiv_359736/DevDiv_359736_ro.csproj b/tests/src/JIT/Regression/JitBlue/DevDiv_359736/DevDiv_359736_ro.csproj new file mode 100644 index 0000000000..c8a1bef582 --- /dev/null +++ b/tests/src/JIT/Regression/JitBlue/DevDiv_359736/DevDiv_359736_ro.csproj @@ -0,0 +1,45 @@ + + + + + Debug + AnyCPU + $(MSBuildProjectName) + 2.0 + {30EFB3A3-FDAB-43C1-91E5-0496C0B9C689} + Exe + Properties + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + $(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages + ..\..\ + 7a9bfb7d + + + + + + + + + False + + + + None + True + + + + + + + + + $(JitPackagesConfigFileDirectory)threading+thread\project.json + $(JitPackagesConfigFileDirectory)threading+thread\project.lock.json + + + + + diff --git a/tests/src/JIT/Regression/JitBlue/GitHub_7906/GitHub_7906.cs b/tests/src/JIT/Regression/JitBlue/GitHub_7906/GitHub_7906.cs new file mode 100644 index 0000000000..47f16d7fbf --- /dev/null +++ b/tests/src/JIT/Regression/JitBlue/GitHub_7906/GitHub_7906.cs @@ -0,0 +1,47 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +// Regression test for insufficient guard on inference of initial values +// of induction variables. +using System.Numerics; + +namespace N +{ + public static class C + { + public static int Main(string[] args) + { + int x = 0; + + // When bottom-testing sees this loop, it (questionably for performance, + // but correctly) copies only the first part of the disjunctive loop condition + // so we get + // + // B1: i = Count // initialization + // B2: if (i < Count) goto B6 // duplicated loop condition (note the "zero trip" case goes to the 2nd loop condition disjunct) + // B3: x += i // loop body + // B4: ++i // increment + // B5: if (i < Count) goto B3 // first disjunct of loop condition + // B6: if (i < 20) goto B3 // second disjunct of loop condition + // B7: return x - 84 // post-loop + // + // At which point B3..B6 is an irreducible loop, but B3..B5 is a natural loop. + // This is a regression test for a bug where optRecordLoop would incorrectly + // identify B1 as the initial value of loop B3..B5 -- this is incorrect because + // the edge from B6 to B3 enters the loop with different values of i. + // + // The testcase is intentionally structured so that loop unrolling will try + // to unroll loop B3..B5 and generate incorrect code due to the incorrect + // initial value. + for (int i = Vector.Count; i < Vector.Count || i < 20; ++i) + { + x += i; + } + + // After running the loop above, the value of x should be (Count + 19) * (20 - Count) / 2. + // Return 100 + x - (expected x) so the test will return 100 on success. + return 100 + x - ((Vector.Count + 19) * (20 - Vector.Count) / 2); + } + } +} diff --git a/tests/src/JIT/Regression/JitBlue/GitHub_7906/GitHub_7906.csproj b/tests/src/JIT/Regression/JitBlue/GitHub_7906/GitHub_7906.csproj new file mode 100644 index 0000000000..1dbbc3bb45 --- /dev/null +++ b/tests/src/JIT/Regression/JitBlue/GitHub_7906/GitHub_7906.csproj @@ -0,0 +1,44 @@ + + + + + Debug + AnyCPU + $(MSBuildProjectName) + 2.0 + {76E69AA0-8C5A-4F76-8561-B8089FFA8D79} + Exe + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + $(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages + ..\..\ + + 7a9bfb7d + + + + + + + + + False + + + + + True + + + + + + + + + $(JitPackagesConfigFileDirectory)benchmark\project.json + $(JitPackagesConfigFileDirectory)benchmark\project.lock.json + + + + + diff --git a/tests/src/JIT/Regression/JitBlue/GitHub_7907/GitHub_7907.cs b/tests/src/JIT/Regression/JitBlue/GitHub_7907/GitHub_7907.cs new file mode 100644 index 0000000000..32ea54c663 --- /dev/null +++ b/tests/src/JIT/Regression/JitBlue/GitHub_7907/GitHub_7907.cs @@ -0,0 +1,53 @@ +// Licensed to the .NET Foundation under one or more 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.CompilerServices; + +#pragma warning disable 472 + +public class Bug7907 +{ + int _position = 10; + + [MethodImpl(MethodImplOptions.NoInlining)] + public static int G(int z, ref int r) + { + r -= z; + return 1; + } + + [MethodImpl(MethodImplOptions.NoInlining)] + public int F0(int count) + { + int initialCount = count; + + _position += G(_position, ref count); + + if (initialCount == count) + { + count--; + } + + return initialCount - count; + } + + [MethodImpl(MethodImplOptions.NoInlining)] + public int F1(int count) + { + // " != null" is known to be true - just to remove control flow + // since that by itself may force spilling and mask the bug + count -= (_position += G(_position, ref count)) != null ? count : 1; + + return count; + } + + public static int Main(string[] args) + { + int result0 = new Bug7907().F0(10); + int result1 = new Bug7907().F1(10); + Console.WriteLine("R0={0} R1={1}", result0, result1); + return (result0 == 10 && result1 == 10 ? 100 : -1); + } +} diff --git a/tests/src/JIT/Regression/JitBlue/GitHub_7907/GitHub_7907.csproj b/tests/src/JIT/Regression/JitBlue/GitHub_7907/GitHub_7907.csproj new file mode 100644 index 0000000000..5c86d0f679 --- /dev/null +++ b/tests/src/JIT/Regression/JitBlue/GitHub_7907/GitHub_7907.csproj @@ -0,0 +1,46 @@ + + + + + Debug + AnyCPU + $(MSBuildProjectName) + 2.0 + {95DFC527-4DC1-495E-97D7-E94EE1F7140D} + Exe + Properties + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + $(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages + ..\..\ + + 7a9bfb7d + + + + + + + + + False + + + + pdbonly + True + + + + + + + + + $(JitPackagesConfigFileDirectory)minimal\project.json + $(JitPackagesConfigFileDirectory)minimal\project.lock.json + + + + + diff --git a/tests/src/JIT/Regression/JitBlue/GitHub_8133/GitHub_8133.il b/tests/src/JIT/Regression/JitBlue/GitHub_8133/GitHub_8133.il new file mode 100644 index 0000000000..be6720d88a --- /dev/null +++ b/tests/src/JIT/Regression/JitBlue/GitHub_8133/GitHub_8133.il @@ -0,0 +1,112 @@ +// Licensed to the .NET Foundation under one or more 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 a {} + +// The original repro for this test was SBCG due to incorrect computation of value numbers for the ref-typed locals +// in Test::Main(). Despite the fact that each local refers to a different array element, all of the locals were +// assigned the same value number. + +.class Test extends [mscorlib]System.Object +{ + .method static void Equal(int32 i, int32 j) cil noinlining + { + ldarg.0 + ldarg.1 + bne.un.s fail + ret + +fail: + newobj instance void [mscorlib]System.Exception::.ctor() + throw + } + + .method static !!0& Add(!!0& addr, int32 offset) + { + ldarg.0 + ldarg.1 + sizeof !!0 + conv.i + mul + add + ret + } + + .method public hidebysig static int32 RefAdd() cil managed + { + .entrypoint + + .locals init ( + [0] int32[] a, + [1] int32& r1, + [2] int32& r2, + [3] int32& r3) + + ldc.i4.4 + newarr [mscorlib]System.Int32 + dup + ldtoken field valuetype ''/'__StaticArrayInitTypeSize=16' ''::'6E9F9131664668938673AFE814BBDE210C6AE91F' + call void [mscorlib]System.Runtime.CompilerServices.RuntimeHelpers::InitializeArray(class [mscorlib]System.Array, valuetype [mscorlib]System.RuntimeFieldHandle) + stloc.0 + + ldloc.0 + ldc.i4.0 + ldelema [mscorlib]System.Int32 + ldc.i4.1 + call !!0& Test::Add(!!0&, int32) + stloc.1 + ldc.i4 0x234 + ldloc.1 + ldind.i4 + call void Test::Equal(int32, int32) + + ldloc.1 + ldc.i4.2 + call !!0& Test::Add(!!0&, int32) + stloc.2 + ldc.i4 0x456 + ldloc.2 + ldind.i4 + call void Test::Equal(int32, int32) + + ldloc.2 + ldc.i4.s -3 + call !!0& Test::Add(!!0&, int32) + stloc.3 + ldc.i4 0x123 + ldloc.3 + ldind.i4 + call void Test::Equal(int32, int32) + + ldc.i4 100 + ret + } +} + +.class private auto ansi sealed '' + extends [mscorlib]System.Object +{ + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) + .class explicit ansi sealed nested private '__StaticArrayInitTypeSize=16' + extends [mscorlib]System.ValueType + { + .pack 1 + .size 16 + } + + .field static assembly initonly int32 '4C55E5E5FC2235CC8C201E69A345F7FAB3FB46FA' at I_000054DC + .field static assembly initonly int64 '67423EBFA8454F19AC6F4686D6C0DC731A3DDD6B' at I_000054E4 + .field static assembly initonly valuetype ''/'__StaticArrayInitTypeSize=16' '6E9F9131664668938673AFE814BBDE210C6AE91F' at I_000054EC + .field static assembly initonly int32 '9BCE73D0C8B9ECA4F24154F3BD3B8AA473B1C3A9' at I_000054FC +} + +.data cil I_000054DC = bytearray ( + 42 42 42 42) // BBBB +.data cil I_000054E4 = bytearray ( + 00 01 02 03 04 05 06 07) +.data cil I_000054EC = bytearray ( + 23 01 00 00 34 02 00 00 45 03 00 00 56 04 00 00) // #...4...E...V... +.data cil I_000054FC = bytearray ( + 12 34 56 78) // .4Vx diff --git a/tests/src/JIT/Regression/JitBlue/GitHub_8133/GitHub_8133.ilproj b/tests/src/JIT/Regression/JitBlue/GitHub_8133/GitHub_8133.ilproj new file mode 100644 index 0000000000..3d8d22ec87 --- /dev/null +++ b/tests/src/JIT/Regression/JitBlue/GitHub_8133/GitHub_8133.ilproj @@ -0,0 +1,41 @@ + + + + + Debug + AnyCPU + $(MSBuildProjectName) + 2.0 + {95DFC527-4DC1-495E-97D7-E94EE1F7140D} + Exe + Properties + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + $(ProgramFiles)\Common Files\microsoft shared\VSTT .0\UITestExtensionPackages + ..\..\ + 7a9bfb7d + + + + + + + + + False + + + + None + True + + + + + + + + + + + diff --git a/tests/src/JIT/Regression/JitBlue/GitHub_8170/GitHub_8170.cs b/tests/src/JIT/Regression/JitBlue/GitHub_8170/GitHub_8170.cs new file mode 100644 index 0000000000..d3fe8d9cf3 --- /dev/null +++ b/tests/src/JIT/Regression/JitBlue/GitHub_8170/GitHub_8170.cs @@ -0,0 +1,23 @@ +// Licensed to the .NET Foundation under one or more 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; + +// This test checks for proper behavior w.r.t. overflow for expressions of the form `val % constant` where `val` is an +// unsigned long and `constant` is a 32- or 64-bit integer constant in the range [2,0x3fffffff]. These expressions +// should never produce an overflow exception. + +static class C +{ + [MethodImpl(MethodImplOptions.NoInlining)] + static uint M(ulong l) + { + return (uint)(l % 10000000); + } + + static int Main() + { + return M(ulong.MaxValue) == 9551615 ? 100 : 101; + } +} diff --git a/tests/src/JIT/Regression/JitBlue/GitHub_8170/GitHub_8170.csproj b/tests/src/JIT/Regression/JitBlue/GitHub_8170/GitHub_8170.csproj new file mode 100644 index 0000000000..81aa7299d0 --- /dev/null +++ b/tests/src/JIT/Regression/JitBlue/GitHub_8170/GitHub_8170.csproj @@ -0,0 +1,46 @@ + + + + + Debug + AnyCPU + $(MSBuildProjectName) + 2.0 + {95DFC527-4DC1-495E-97D7-E94EE1F7140D} + Exe + Properties + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + $(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages + ..\..\ + + 7a9bfb7d + + + + + + + + + False + + + + None + True + + + + + + + + + $(JitPackagesConfigFileDirectory)minimal\project.json + $(JitPackagesConfigFileDirectory)minimal\project.lock.json + + + + + diff --git a/tests/src/JIT/Regression/JitBlue/GitHub_8220/GitHub_8220.cs b/tests/src/JIT/Regression/JitBlue/GitHub_8220/GitHub_8220.cs new file mode 100644 index 0000000000..f38d5ba698 --- /dev/null +++ b/tests/src/JIT/Regression/JitBlue/GitHub_8220/GitHub_8220.cs @@ -0,0 +1,170 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +// Regression test for Vector3 intrinsics using upper non-zero'd bits from +// a byref return. + +using System; +using System.Diagnostics; +using System.Runtime.CompilerServices; +using System.Numerics; + +namespace Test +{ + + public class Program + { + static Random random; + + static Program() + { + random = new Random(1); + } + + [MethodImpl( MethodImplOptions.NoInlining )] + public static double StackScribble() + { + double d1 = random.NextDouble(); + double d2 = random.NextDouble(); + double d3 = random.NextDouble(); + double d4 = random.NextDouble(); + double d5 = random.NextDouble(); + double d6 = random.NextDouble(); + double d7 = random.NextDouble(); + double d8 = random.NextDouble(); + double d9 = random.NextDouble(); + double d10 = random.NextDouble(); + double d11 = random.NextDouble(); + double d12 = random.NextDouble(); + double d13 = random.NextDouble(); + double d14 = random.NextDouble(); + double d15 = random.NextDouble(); + double d16 = random.NextDouble(); + double d17 = random.NextDouble(); + double d18 = random.NextDouble(); + double d19 = random.NextDouble(); + double d20 = random.NextDouble(); + double d21 = random.NextDouble(); + double d22 = random.NextDouble(); + double d23 = random.NextDouble(); + double d24 = random.NextDouble(); + double d25 = random.NextDouble(); + double d26 = random.NextDouble(); + double d27 = random.NextDouble(); + double d28 = random.NextDouble(); + double d29 = random.NextDouble(); + double d30 = random.NextDouble(); + double d31 = random.NextDouble(); + double d32 = random.NextDouble(); + double d33 = random.NextDouble(); + double d34 = random.NextDouble(); + double d35 = random.NextDouble(); + double d36 = random.NextDouble(); + double d37 = random.NextDouble(); + double d38 = random.NextDouble(); + double d39 = random.NextDouble(); + double d40 = random.NextDouble(); + return d1 + d2 + d3 + d4 + d5 + d6 + d7 + d8 + d9 + d10 + + d11 + d12 + d13 + d14 + d15 + d16 + d17 + d18 + d19 + d20 + + d21 + d22 + d23 + d24 + d25 + d26 + d27 + d28 + d29 + d20 + + d31 + d32 + d33 + d34 + d35 + d36 + d37 + d38 + d39 + d40; + } + + [MethodImpl( MethodImplOptions.NoInlining )] + public static Vector3 getTestValue(float f1, float f2, float f3) + { + return new Vector3(f1, f2, f3); + } + + public static bool Check(float value, float expectedValue) + { + // These may differ in the last place. + float expectedValueLow; + float expectedValueHigh; + + unsafe + { + UInt32 expectedValueUInt = *(UInt32*)&expectedValue; + UInt32 expectedValueUIntLow = (expectedValueUInt == 0) ? 0 : expectedValueUInt - 1; + UInt32 expectedValueUIntHigh = (expectedValueUInt == 0xffffffff) ? 0xffffffff : expectedValueUInt + 1; + expectedValueLow = *(float*)&expectedValueUIntLow; + expectedValueHigh = *(float*)&expectedValueUIntHigh; + } + float errorMargin = Math.Abs(expectedValueHigh - expectedValueLow); + if (Math.Abs(value - expectedValue) > errorMargin) + { + return false; + } + return true; + } + + [MethodImpl(MethodImplOptions.NoInlining)] + public static int testDotProduct(Vector3 v0) + { + float f1 = (float)random.NextDouble(); + float f2 = (float)random.NextDouble(); + float f3 = (float)random.NextDouble(); + + Vector3 v1 = Vector3.Normalize(getTestValue(f1, f2, f3) - v0); + Vector3 v2 = new Vector3(f1, f2, f3) - v0; + v2 = v2 / v2.Length(); + + if (!Check(v1.X, v2.X) || !Check(v1.Y, v2.Y) || !Check(v1.Z, v2.Z)) + { + Console.WriteLine("Vectors do not match " + v1 + v2); + return -1; + } + + return 100; + } + + [MethodImpl(MethodImplOptions.NoInlining)] + public static int testEquals(Vector3 v0) + { + float f1 = (float)random.NextDouble(); + float f2 = (float)random.NextDouble(); + float f3 = (float)random.NextDouble(); + + Vector3 v1 = new Vector3(f1, f2, f3) - v0; + bool result = v1.Equals(getTestValue(f1, f2, f3) - v0); + + if ((result == false) || !v1.Equals(getTestValue(f1, f2, f3) - v0)) + { + Console.WriteLine("Equals returns wrong value " + v1); + return -1; + } + + return 100; + } + + public static int Main() + { + int returnValue = 100; + Console.WriteLine("Testing Dot Product"); + for (int i = 0; i < 10; i++) + { + StackScribble(); + if (testDotProduct(new Vector3(1.0F, 2.0F, 3.0F)) != 100) + { + Console.WriteLine("Failed on iteration " + i); + returnValue = -1; + break; + } + } + Console.WriteLine("Testing Equals"); + for (int i = 0; i < 10; i++) + { + StackScribble(); + if (testEquals(new Vector3(1.0F, 2.0F, 3.0F)) != 100) + { + Console.WriteLine("Failed on iteration " + i); + returnValue = -1; + break; + } + } + return returnValue; + } + } +} + diff --git a/tests/src/JIT/Regression/JitBlue/GitHub_8220/GitHub_8220.csproj b/tests/src/JIT/Regression/JitBlue/GitHub_8220/GitHub_8220.csproj new file mode 100644 index 0000000000..939d0106ed --- /dev/null +++ b/tests/src/JIT/Regression/JitBlue/GitHub_8220/GitHub_8220.csproj @@ -0,0 +1,45 @@ + + + + + Debug + AnyCPU + $(MSBuildProjectName) + 2.0 + {76E69AA0-8C5A-4F76-8561-B8089FFA8D79} + Exe + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + $(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages + ..\..\ + + 7a9bfb7d + + + + + + + + + False + + + + + True + True + + + + + + + + + $(JitPackagesConfigFileDirectory)benchmark\project.json + $(JitPackagesConfigFileDirectory)benchmark\project.lock.json + + + + + diff --git a/tests/src/JIT/Regression/JitBlue/GitHub_8231/GitHub_8231.cs b/tests/src/JIT/Regression/JitBlue/GitHub_8231/GitHub_8231.cs new file mode 100644 index 0000000000..4d2ec7628a --- /dev/null +++ b/tests/src/JIT/Regression/JitBlue/GitHub_8231/GitHub_8231.cs @@ -0,0 +1,62 @@ +// Licensed to the .NET Foundation under one or more 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.Numerics; +using System.Runtime.CompilerServices; + +namespace N +{ + public static class C + { + // This is a regression test for a failure in loop unrolling when + // the unrolled loop contains a switch statement. + [MethodImpl(MethodImplOptions.NoInlining)] + static int Test() + { + int s = 0; + + // Loop to some Vector.Count to trigger unrolling. + for (int i = 0; i < Vector.Count; i++) + { + // Loop contains switch; the bug was that the clones + // of the switch were all sharing its BBswtDesc instead + // of getting their own, so updates to their jump targets + // were incorrectly shared. + switch (i) + { + case 1: s += 4; break; + case 2: s += 2; break; + case 3: s += i; break; + } + } + + return s; + } + + public static int Main(string[] args) + { + int result = Test(); + + // Expected result is a function of Vector.Count. + int expected; + switch(Vector.Count) + { + case 1: + expected = 4; + break; + case 2: + expected = 6; + break; + default: + expected = 9; + break; + } + + // Return 100 on success (result == expected), other + // values on failure. + return 100 + result - expected; + } + } +} diff --git a/tests/src/JIT/Regression/JitBlue/GitHub_8231/GitHub_8231.csproj b/tests/src/JIT/Regression/JitBlue/GitHub_8231/GitHub_8231.csproj new file mode 100644 index 0000000000..844638fe1b --- /dev/null +++ b/tests/src/JIT/Regression/JitBlue/GitHub_8231/GitHub_8231.csproj @@ -0,0 +1,39 @@ + + + + + Debug + AnyCPU + 2.0 + {2649FAFE-07BF-4F93-8120-BA9A69285ABB} + Exe + Properties + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + $(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages + ..\..\ + + + + + + + + + False + + + + + + + + + + $(JitPackagesConfigFileDirectory)benchmark\project.json + $(JitPackagesConfigFileDirectory)benchmark\project.lock.json + + + + + diff --git a/tests/src/JIT/Regression/JitBlue/GitHub_8460/GitHub_8460.cs b/tests/src/JIT/Regression/JitBlue/GitHub_8460/GitHub_8460.cs new file mode 100644 index 0000000000..f5c9aa281b --- /dev/null +++ b/tests/src/JIT/Regression/JitBlue/GitHub_8460/GitHub_8460.cs @@ -0,0 +1,38 @@ +// Licensed to the .NET Foundation under one or more 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; + +namespace bug +{ + class Program + { + static int Pass = 100; + static int Fail = -1; + + // This test is meant to check that in case of + // GT_EQ/NE(shift, 0), JIT doesn't optimize out + // 'test' instruction incorrectly, because shift + // operations on xarch don't modify flags if the + // shift count is zero. + static int Main(string[] args) + { + // Absolute bits + int bitCount = 0; + while ((0 != (100 >> bitCount)) && (31 > bitCount)) + { + bitCount++; + } + // Sign bit + bitCount++; + + if (bitCount != 8) + { + return Fail; + } + + return Pass; + } + } +} diff --git a/tests/src/JIT/Regression/JitBlue/GitHub_8460/GitHub_8460.csproj b/tests/src/JIT/Regression/JitBlue/GitHub_8460/GitHub_8460.csproj new file mode 100644 index 0000000000..b174dea98e --- /dev/null +++ b/tests/src/JIT/Regression/JitBlue/GitHub_8460/GitHub_8460.csproj @@ -0,0 +1,46 @@ + + + + + Debug + AnyCPU + $(MSBuildProjectName) + 2.0 + {95DFC527-4DC1-495E-97D7-E94EE1F7140D} + Exe + Properties + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + $(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages + ..\..\ + + 7a9bfb7d + + + + + + + + + False + + + + + True + + + + + + + + + $(JitPackagesConfigFileDirectory)minimal\project.json + $(JitPackagesConfigFileDirectory)minimal\project.lock.json + + + + + diff --git a/tests/src/JIT/Regression/JitBlue/GitHub_8599/GitHub_8599.cs b/tests/src/JIT/Regression/JitBlue/GitHub_8599/GitHub_8599.cs new file mode 100644 index 0000000000..95ff457620 --- /dev/null +++ b/tests/src/JIT/Regression/JitBlue/GitHub_8599/GitHub_8599.cs @@ -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. + +using System; +using System.Runtime.CompilerServices; + +// TreeNodeInfoInitCmp attempts to eliminate the cast from cmp(cast(x), icon) +// by narrowing the compare to ubyte. This should only happen if the constant fits in +// a byte so it can be narrowed too, otherwise codegen produces an int sized compare. + +class Program +{ + [MethodImpl(MethodImplOptions.NoInlining)] + static int GetValue() => 301; + + static void Escape(ref int x) + { + } + + static int Main() + { + if ((byte)GetValue() > 300) + { + return -1; + } + + int x = GetValue(); + Escape(ref x); + if ((byte)x > 300) + { + return -2; + } + + if ((byte)(GetValue() | 2) > 300) + { + return -3; + } + + return 100; + } +} diff --git a/tests/src/JIT/Regression/JitBlue/GitHub_8599/GitHub_8599.csproj b/tests/src/JIT/Regression/JitBlue/GitHub_8599/GitHub_8599.csproj new file mode 100644 index 0000000000..b174dea98e --- /dev/null +++ b/tests/src/JIT/Regression/JitBlue/GitHub_8599/GitHub_8599.csproj @@ -0,0 +1,46 @@ + + + + + Debug + AnyCPU + $(MSBuildProjectName) + 2.0 + {95DFC527-4DC1-495E-97D7-E94EE1F7140D} + Exe + Properties + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + $(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages + ..\..\ + + 7a9bfb7d + + + + + + + + + False + + + + + True + + + + + + + + + $(JitPackagesConfigFileDirectory)minimal\project.json + $(JitPackagesConfigFileDirectory)minimal\project.lock.json + + + + + diff --git a/tests/src/JIT/Regression/JitBlue/GitHub_CoreRT_2073/GitHub_CoreRT_2073.il b/tests/src/JIT/Regression/JitBlue/GitHub_CoreRT_2073/GitHub_CoreRT_2073.il new file mode 100644 index 0000000000..28adbc49bb --- /dev/null +++ b/tests/src/JIT/Regression/JitBlue/GitHub_CoreRT_2073/GitHub_CoreRT_2073.il @@ -0,0 +1,55 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +// Test for a issue when tail call with small return type +// doesn't pass tail call pattern assert. +// In addition there is "call->branch on return->return" tail call pattern check. + + +.assembly extern mscorlib {} + +.assembly GitHub_CoreRT_2073.exe {} + +.class public Test +{ + +.method private hidebysig static bool tailAsgReturn(int32 deep) cil managed +{ + // Code size 24 (0x18) + .maxstack 20 + IL_0000: ldarg.0 + IL_0001: ldc.i4.s -100 + IL_0003: bgt.s IL_0007 + IL_0005: ldc.i4.1 + IL_0006: ret + IL_0007: ldarg.0 + IL_0008: ldc.i4.0 + IL_0009: bgt.s IL_000f + + IL_000a: ldarg.0 + IL_000b: ldc.i4.1 + IL_000c: sub + IL_000d: call bool Test::tailAsgReturn(int32) + IL_000e: br IL_0017 + IL_000f: ldarg.0 + IL_0010: ldc.i4.2 + IL_0011: sub + IL_0012: call bool Test::tailAsgReturn(int32) + IL_0017: ret +} // end of method Test::tailAsgReturn + +.method public hidebysig static int32 Main(string[] args) cil managed +{ + .entrypoint + // Code size 14 (0xe) + .maxstack 8 + IL_0000: ldc.i4.s 100 + IL_0002: call bool Test::tailAsgReturn(int32) + IL_0007: brtrue.s IL_000b + IL_0009: ldc.i4.m1 + IL_000a: ret + IL_000b: ldc.i4.s 100 + IL_000d: ret +} // end of method Test::Main +} diff --git a/tests/src/JIT/Regression/JitBlue/GitHub_CoreRT_2073/GitHub_CoreRT_2073.ilproj b/tests/src/JIT/Regression/JitBlue/GitHub_CoreRT_2073/GitHub_CoreRT_2073.ilproj new file mode 100644 index 0000000000..fe8a3d3947 --- /dev/null +++ b/tests/src/JIT/Regression/JitBlue/GitHub_CoreRT_2073/GitHub_CoreRT_2073.ilproj @@ -0,0 +1,38 @@ + + + + + Debug + AnyCPU + $(MSBuildProjectName) + 2.0 + {95DFC527-4DC1-495E-97D7-E94EE1F7140D} + Exe + Properties + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + $(ProgramFiles)\Common Files\microsoft shared\VSTT .0\UITestExtensionPackages + ..\..\ + 7a9bfb7d + + + + + + + + + False + + + + None + True + + + + + + + + diff --git a/tests/src/JIT/Regression/VS-ia64-JIT/V2.0-Beta2/b311420/b311420.csproj b/tests/src/JIT/Regression/VS-ia64-JIT/V2.0-Beta2/b311420/b311420.csproj index b12149b936..77a35cdd82 100644 --- a/tests/src/JIT/Regression/VS-ia64-JIT/V2.0-Beta2/b311420/b311420.csproj +++ b/tests/src/JIT/Regression/VS-ia64-JIT/V2.0-Beta2/b311420/b311420.csproj @@ -14,6 +14,9 @@ $(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages ..\..\ 7a9bfb7d + + + true @@ -42,4 +45,4 @@ - \ No newline at end of file + diff --git a/tests/src/JIT/SIMD/Vector3Interop.cs b/tests/src/JIT/SIMD/Vector3Interop.cs index fa6f8700d5..147adf44a8 100755 --- a/tests/src/JIT/SIMD/Vector3Interop.cs +++ b/tests/src/JIT/SIMD/Vector3Interop.cs @@ -112,7 +112,7 @@ class PInvokeTest // Expected return value = 1 + 2 + 3 + 10 + 11 + 12 = 39 if (nativeCall_PInvoke_Vector3Arg(iv, v1, str, v2) != 39) { - Console.Write("PInvoke Vector3Arg test failed\n"); + Console.WriteLine("PInvoke Vector3Arg test failed"); return false; } } @@ -130,7 +130,7 @@ class PInvokeTest f6, v2, // stack f7, f8); // stack if (sum != 1002) { - Console.Write("PInvoke Vector3Arg_Unix test failed\n"); + Console.WriteLine("PInvoke Vector3Arg_Unix test failed"); return false; } } @@ -151,7 +151,7 @@ class PInvokeTest v3, // stack f9); // stack if (sum != 1090) { - Console.Write("PInvoke Vector3Arg_Unix2 test failed\n"); + Console.WriteLine("PInvoke Vector3Arg_Unix2 test failed"); return false; } } diff --git a/tests/src/JIT/SIMD/VectorDot.cs b/tests/src/JIT/SIMD/VectorDot.cs index 2efe79e5ab..22c1493394 100644 --- a/tests/src/JIT/SIMD/VectorDot.cs +++ b/tests/src/JIT/SIMD/VectorDot.cs @@ -113,12 +113,17 @@ internal partial class VectorTest if (VectorDotTest.VectorDot(3ul, 2ul, 6ul * (ulong)Vector.Count) != Pass) returnVal = Fail; JitLog jitLog = new JitLog(); - // Dot is only recognized as an intrinsic for floating point element types. + // Dot is only recognized as an intrinsic for floating point element types + // and Vector on AVX. if (!jitLog.Check("Dot", "Single")) returnVal = Fail; if (!jitLog.Check("Dot", "Double")) returnVal = Fail; if (!jitLog.Check("System.Numerics.Vector4:Dot")) returnVal = Fail; if (!jitLog.Check("System.Numerics.Vector3:Dot")) returnVal = Fail; if (!jitLog.Check("System.Numerics.Vector2:Dot")) returnVal = Fail; + if (Vector.Count == 8) + { + if (!jitLog.Check("Dot", "Int32")) returnVal = Fail; + } jitLog.Dispose(); return returnVal; diff --git a/tests/src/JIT/SIMD/VectorIntEquals.cs b/tests/src/JIT/SIMD/VectorIntEquals.cs index bbbbbe519d..fae49aac1d 100644 --- a/tests/src/JIT/SIMD/VectorIntEquals.cs +++ b/tests/src/JIT/SIMD/VectorIntEquals.cs @@ -17,12 +17,67 @@ internal partial class VectorTest Vector B = new Vector(3); Vector C = new Vector(5); - bool result = A.Equals(B); - if (!result) return Fail; + if (!result) + { + return Fail; + } result = A.Equals(C); - if (result) return Fail; + if (result) + { + return Fail; + } + + if (A.Equals(Vector.Zero)) + { + return Fail; + } + + if (!Vector.Zero.Equals(Vector.Zero)) + { + return Fail; + } + + if (Vector.Zero.Equals(B)) + { + return Fail; + } + + if (!(A == B)) + { + return Fail; + } + + if (A == Vector.Zero) + { + return Fail; + } + + if (!(A != Vector.Zero)) + { + return Fail; + } + + if (A != B) + { + return Fail; + } + + if (!(A != C)) + { + return Fail; + } + + if (!(Vector.Zero != A)) + { + return Fail; + } + + if (Vector.Zero != Vector.Zero) + { + return Fail; + } return Pass; } diff --git a/tests/src/JIT/SIMD/VectorUtil.cs b/tests/src/JIT/SIMD/VectorUtil.cs index d1b669df29..6501aac767 100644 --- a/tests/src/JIT/SIMD/VectorUtil.cs +++ b/tests/src/JIT/SIMD/VectorUtil.cs @@ -309,7 +309,7 @@ class JitLog : IDisposable } if (simdIntrinsicsSupported && methodFound) { - Console.WriteLine("Method " + method + " was compiled but should not have been\n"); + Console.WriteLine("Method " + method + " was compiled but should not have been"); return false; } // Useful when developing / debugging just to be sure that we reached here: diff --git a/tests/src/JIT/config/benchmark+roslyn/project.json b/tests/src/JIT/config/benchmark+roslyn/project.json index 3fc4bd5809..e50dfd25c1 100644 --- a/tests/src/JIT/config/benchmark+roslyn/project.json +++ b/tests/src/JIT/config/benchmark+roslyn/project.json @@ -1,29 +1,29 @@ { "dependencies": { "Microsoft.CodeAnalysis.Compilers": "1.1.1", - "Microsoft.DotNet.xunit.performance": "1.0.0-alpha-build0035", - "Microsoft.DotNet.xunit.performance.analysis": "1.0.0-alpha-build0035", - "Microsoft.DotNet.xunit.performance.runner.Windows": "1.0.0-alpha-build0035", - "Microsoft.NETCore.Platforms": "1.1.0", - "System.Console": "4.3.0", - "System.Dynamic.Runtime": "4.3.0", - "System.Linq": "4.3.0", - "System.IO.FileSystem": "4.3.0", - "System.Numerics.Vectors": "4.3.0", - "System.Reflection": "4.3.0", - "System.Reflection.Extensions": "4.3.0", - "System.Reflection.TypeExtensions": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.Numerics": "4.3.0", - "System.Text.RegularExpressions": "4.3.0", - "System.Threading": "4.3.0", - "System.Threading.Tasks": "4.3.0", - "System.Threading.Tasks.Parallel": "4.3.0", - "System.Security.Cryptography.Algorithms": "4.3.0", - "xunit": "2.1.0", - "xunit.console.netcore": "1.0.2-prerelease-00101", - "xunit.runner.utility": "2.1.0" + "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", + "xunit": "2.2.0-beta2-build3300", + "xunit.console.netcore": "1.0.2-prerelease-00177", + "xunit.runner.utility": "2.2.0-beta2-build3300" }, "frameworks": { "netstandard1.4": { diff --git a/tests/src/JIT/config/benchmark+serialize/project.json b/tests/src/JIT/config/benchmark+serialize/project.json index e7e1853000..ac24df1167 100644 --- a/tests/src/JIT/config/benchmark+serialize/project.json +++ b/tests/src/JIT/config/benchmark+serialize/project.json @@ -1,26 +1,29 @@ { "dependencies": { - "Microsoft.DotNet.xunit.performance": "1.0.0-alpha-build0035", - "Microsoft.DotNet.xunit.performance.analysis": "1.0.0-alpha-build0035", - "Microsoft.DotNet.xunit.performance.runner.Windows": "1.0.0-alpha-build0035", - "Microsoft.NETCore.Platforms": "1.1.0", + "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", "Newtonsoft.Json": "7.0.1", - "System.Console": "4.3.0", - "System.IO": "4.3.0", - "System.IO.FileSystem": "4.3.0", - "System.Linq": "4.3.0", - "System.ObjectModel": "4.3.0", - "System.Dynamic.Runtime": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Serialization.Json": "4.3.0", - "System.Runtime.Serialization.Primitives": "4.1.1", - "System.Runtime.Serialization.Xml": "4.3.0", - "System.Text.RegularExpressions": "4.3.0", - "System.Xml.XmlDocument": "4.3.0", - "System.Xml.XmlSerializer": "4.3.0", - "xunit": "2.1.0", - "xunit.console.netcore": "1.0.2-prerelease-00101", - "xunit.runner.utility": "2.1.0" + "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", + "xunit": "2.2.0-beta2-build3300", + "xunit.console.netcore": "1.0.2-prerelease-00177", + "xunit.runner.utility": "2.2.0-beta2-build3300" }, "frameworks": { "netstandard1.4": { diff --git a/tests/src/JIT/config/benchmark/project.json b/tests/src/JIT/config/benchmark/project.json index 8f1493c32d..97234d329e 100644 --- a/tests/src/JIT/config/benchmark/project.json +++ b/tests/src/JIT/config/benchmark/project.json @@ -1,29 +1,32 @@ { "dependencies": { - "Microsoft.DotNet.xunit.performance": "1.0.0-alpha-build0035", - "Microsoft.DotNet.xunit.performance.analysis": "1.0.0-alpha-build0035", - "Microsoft.DotNet.xunit.performance.runner.Windows": "1.0.0-alpha-build0035", - "Microsoft.NETCore.Platforms": "1.1.0", - "System.Collections.NonGeneric": "4.3.0", - "System.Console": "4.3.0", - "System.IO.FileSystem": "4.3.0", - "System.Linq": "4.3.0", - "System.Linq.Expressions": "4.3.0", - "System.Numerics.Vectors": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.Numerics": "4.3.0", - "System.Text.RegularExpressions": "4.3.0", - "System.Threading": "4.3.0", - "System.Threading.Tasks": "4.3.0", - "System.Threading.Tasks.Parallel": "4.3.0", - "System.Diagnostics.Process": "4.3.0", - "System.Xml.XmlDocument": "4.3.0", - "System.Xml.XPath": "4.3.0", - "System.Xml.XPath.XmlDocument": "4.3.0", - "xunit": "2.1.0", - "xunit.console.netcore": "1.0.2-prerelease-00101", - "xunit.runner.utility": "2.1.0" + "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", + "xunit": "2.2.0-beta2-build3300", + "xunit.console.netcore": "1.0.2-prerelease-00177", + "xunit.runner.utility": "2.2.0-beta2-build3300" }, "frameworks": { "netstandard1.4": { diff --git a/tests/src/JIT/config/extra/project.json b/tests/src/JIT/config/extra/project.json index 92b2fac43a..6268bc58e9 100644 --- a/tests/src/JIT/config/extra/project.json +++ b/tests/src/JIT/config/extra/project.json @@ -1,24 +1,24 @@ { "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "System.Collections": "4.3.0", - "System.Console": "4.3.0", - "System.Diagnostics.Debug": "4.3.0", - "System.Runtime.InteropServices.RuntimeInformation": "4.3.0", - "System.Diagnostics.Process": "4.3.0", - "System.Globalization": "4.3.0", - "System.IO": "4.3.0", - "System.IO.FileSystem": "4.3.0", - "System.Reflection": "4.3.0", - "System.Reflection.Extensions": "4.3.0", - "System.Reflection.TypeExtensions": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.CompilerServices.Unsafe": "4.3.0", - "System.Runtime.InteropServices": "4.3.0" + "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" }, "frameworks": { - "netcoreapp1.0": {} + "netcoreapp1.1": {} }, "runtimes": { "win7-x86": {}, diff --git a/tests/src/JIT/config/minimal/project.json b/tests/src/JIT/config/minimal/project.json index 20eded453a..6bc378e4a4 100644 --- a/tests/src/JIT/config/minimal/project.json +++ b/tests/src/JIT/config/minimal/project.json @@ -1,13 +1,13 @@ { "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "System.Console": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.InteropServices": "4.3.0" + "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" }, "frameworks": { - "netcoreapp1.0": {} + "netcoreapp1.1": {} }, "runtimes": { "win7-x86": {}, diff --git a/tests/src/JIT/config/threading+thread/project.json b/tests/src/JIT/config/threading+thread/project.json index 4efc76cf00..f6576f154d 100644 --- a/tests/src/JIT/config/threading+thread/project.json +++ b/tests/src/JIT/config/threading+thread/project.json @@ -1,15 +1,15 @@ { "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "System.Console": "4.3.0", - "System.Numerics.Vectors": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Threading": "4.3.0", - "System.Threading.Thread": "4.3.0" + "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" }, "frameworks": { - "netcoreapp1.0": {} + "netcoreapp1.1": {} }, "runtimes": { "win7-x86": {}, diff --git a/tests/src/JIT/config/threading/project.json b/tests/src/JIT/config/threading/project.json index b0478ce429..e62d3551a4 100644 --- a/tests/src/JIT/config/threading/project.json +++ b/tests/src/JIT/config/threading/project.json @@ -1,13 +1,13 @@ { "dependencies": { - "Microsoft.NETCore.Platforms": "1.1.0", - "System.Console": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Threading": "4.3.0" + "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" }, "frameworks": { - "netcoreapp1.0": {} + "netcoreapp1.1": {} }, "runtimes": { "win7-x86": {}, diff --git a/tests/src/JIT/jit64/opt/cse/HugeArray.csproj b/tests/src/JIT/jit64/opt/cse/HugeArray.csproj index 8926c0f997..166482bcc1 100644 --- a/tests/src/JIT/jit64/opt/cse/HugeArray.csproj +++ b/tests/src/JIT/jit64/opt/cse/HugeArray.csproj @@ -14,6 +14,9 @@ $(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages ..\..\ 7a9bfb7d + + + true @@ -42,4 +45,4 @@ - \ No newline at end of file + diff --git a/tests/src/JIT/jit64/verif/sniff/fg/ver_fg_13.il b/tests/src/JIT/jit64/verif/sniff/fg/ver_fg_13.il index 9e422bbdab..5ad48d1878 100644 --- a/tests/src/JIT/jit64/verif/sniff/fg/ver_fg_13.il +++ b/tests/src/JIT/jit64/verif/sniff/fg/ver_fg_13.il @@ -11,12 +11,7 @@ .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) .ver 4:0:0:0 } -.assembly test -{ - .custom instance void [mscorlib]System.Security.AllowPartiallyTrustedCallersAttribute::.ctor() = ( 01 00 01 00 00 ) - -} - +.assembly test { } .module ver_fg_13.exe diff --git a/tests/src/JIT/opt/Inline/regression/mismatch32/mismatch32.il b/tests/src/JIT/opt/Inline/regression/mismatch32/mismatch32.il index e23b0a8346..73730d72dd 100644 --- a/tests/src/JIT/opt/Inline/regression/mismatch32/mismatch32.il +++ b/tests/src/JIT/opt/Inline/regression/mismatch32/mismatch32.il @@ -5,6 +5,10 @@ // When the jit considers inlining B it can get itself into // trouble because of the type mismatch. This test tries to // ensure the jit backs out of the inline successfully. +// +// By default (when no args are passed) execution avoids +// the problematic callsite, and the app should run without +// failing. .assembly extern mscorlib { } .assembly extern System.Console @@ -39,7 +43,7 @@ ldarg.0 ldlen ldc.i4 1 - bgt DONE + blt DONE newobj instance void F::.ctor() ldc.i4 33 call int32 B(int32, int32) diff --git a/tests/src/JIT/opt/Inline/regression/mismatch64/mismatch64.il b/tests/src/JIT/opt/Inline/regression/mismatch64/mismatch64.il index f952856909..ba336c06c9 100644 --- a/tests/src/JIT/opt/Inline/regression/mismatch64/mismatch64.il +++ b/tests/src/JIT/opt/Inline/regression/mismatch64/mismatch64.il @@ -5,6 +5,10 @@ // When the jit considers inlining B it can get itself into // trouble because of the type mismatch. This test tries to // ensure the jit backs out of the inline successfully. +// +// By default (when no args are passed) execution avoids +// the problematic callsite, and the app should run without +// failing. .assembly extern mscorlib { } .assembly extern System.Console @@ -39,7 +43,7 @@ ldarg.0 ldlen ldc.i4 1 - bgt DONE + blt DONE newobj instance void F::.ctor() ldc.i8 44 call int64 B(int64, int64) diff --git a/tests/src/JIT/opt/Tailcall/TailcallVerifyWithPrefix.il b/tests/src/JIT/opt/Tailcall/TailcallVerifyWithPrefix.il index 9c5fcfdf29..763d95f628 100644 --- a/tests/src/JIT/opt/Tailcall/TailcallVerifyWithPrefix.il +++ b/tests/src/JIT/opt/Tailcall/TailcallVerifyWithPrefix.il @@ -5610,6 +5610,9 @@ .method public hidebysig instance void Caller1() cil managed { + // This method depends on JIT compiler doing automatic tail call, which isn't supported by Ready-to-Run. + .custom instance void System.Runtime.BypassReadyToRunAttribute::.ctor() = ( 01 00 00 00 ) + // Code size 53 (0x35) .maxstack 8 IL_0000: ldc.i4.0 @@ -5633,6 +5636,9 @@ .method public hidebysig instance void Caller1Recursive() cil managed { + // This method depends on JIT compiler doing automatic tail call, which isn't supported by Ready-to-Run. + .custom instance void System.Runtime.BypassReadyToRunAttribute::.ctor() = ( 01 00 00 00 ) + // Code size 55 (0x37) .maxstack 8 IL_0000: ldc.i4.0 @@ -5670,6 +5676,9 @@ .method private hidebysig instance void Callee1Recursive(int32 i) cil managed { + // This method depends on JIT compiler doing automatic tail call, which isn't supported by Ready-to-Run. + .custom instance void System.Runtime.BypassReadyToRunAttribute::.ctor() = ( 01 00 00 00 ) + // Code size 93 (0x5d) .maxstack 3 .locals init ([0] string stackTrace, @@ -5805,6 +5814,9 @@ Caller1(!V arg1, !K arg2) cil managed { + // This method depends on JIT compiler doing automatic tail call, which isn't supported by Ready-to-Run. + .custom instance void System.Runtime.BypassReadyToRunAttribute::.ctor() = ( 01 00 00 00 ) + // Code size 54 (0x36) .maxstack 8 IL_0000: ldc.i4.0 @@ -6016,6 +6028,9 @@ .method private hidebysig static void Caller2() cil managed { + // This method depends on JIT compiler doing automatic tail call, which isn't supported by Ready-to-Run. + .custom instance void System.Runtime.BypassReadyToRunAttribute::.ctor() = ( 01 00 00 00 ) + // Code size 52 (0x34) .maxstack 8 IL_0000: ldc.i4.0 @@ -10376,6 +10391,21 @@ .field static assembly valuetype '{D1242658-CA16-4D11-A740-6635F112F4B5}'/'__StaticArrayInitTypeSize=20' '$$method0x6000076-1' at I_00005C00 } // end of class '{D1242658-CA16-4D11-A740-6635F112F4B5}' +.class private auto ansi sealed beforefieldinit System.Runtime.BypassReadyToRunAttribute + extends [mscorlib]System.Attribute +{ + .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.Attribute::.ctor() + IL_0006: ret + } // end of method BypassReadyToRunAttribute::.ctor + +} // end of class System.Runtime.BypassReadyToRunAttribute + // ============================================================= 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 da9a36e07d..4a5818f410 100644 --- a/tests/src/JIT/opt/virtualstubdispatch/bigvtbl/bigvtbl_cs_d.csproj +++ b/tests/src/JIT/opt/virtualstubdispatch/bigvtbl/bigvtbl_cs_d.csproj @@ -14,6 +14,9 @@ $(ProgramFiles)\Common Files\microsoft shared\VSTT .0\UITestExtensionPackages ..\..\ 7a9bfb7d + + + true 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 a7547ea0c1..909d79887a 100644 --- a/tests/src/JIT/opt/virtualstubdispatch/bigvtbl/bigvtbl_cs_r.csproj +++ b/tests/src/JIT/opt/virtualstubdispatch/bigvtbl/bigvtbl_cs_r.csproj @@ -14,6 +14,9 @@ $(ProgramFiles)\Common Files\microsoft shared\VSTT .0\UITestExtensionPackages ..\..\ 7a9bfb7d + + + true diff --git a/tests/src/Loader/classloader/InterfaceFolding/Nested_I/TestCase0.il b/tests/src/Loader/classloader/InterfaceFolding/Nested_I/TestCase0.il index 1dcd41e7ee..f8721456a2 100644 --- a/tests/src/Loader/classloader/InterfaceFolding/Nested_I/TestCase0.il +++ b/tests/src/Loader/classloader/InterfaceFolding/Nested_I/TestCase0.il @@ -36,7 +36,10 @@ ldstr "A::Bar2" ret } - .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } } .class private auto ansi beforefieldinit B`2 @@ -59,12 +62,20 @@ .maxstack 8 ldstr "B::Bar2" ret - } .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} + } + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } } .class private auto ansi beforefieldinit C extends class B`2 -{ .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} } - +{ + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } +} .class public auto ansi beforefieldinit Test extends [mscorlib]System.Object { @@ -103,4 +114,4 @@ FAILURE: ldc.i4.m1 ret } -} \ No newline at end of file +} diff --git a/tests/src/Loader/classloader/InterfaceFolding/Nested_I/TestCase1.il b/tests/src/Loader/classloader/InterfaceFolding/Nested_I/TestCase1.il index 371ade9c79..05c6c998a5 100644 --- a/tests/src/Loader/classloader/InterfaceFolding/Nested_I/TestCase1.il +++ b/tests/src/Loader/classloader/InterfaceFolding/Nested_I/TestCase1.il @@ -24,7 +24,10 @@ ldstr "A::Foo" ret } - .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } } .class private auto ansi beforefieldinit B`2 @@ -43,12 +46,19 @@ ldstr "B::Bar2" ret } - .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } } .class private auto ansi beforefieldinit C extends class B`2 -{ .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} } - +{ + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } +} .class public auto ansi beforefieldinit Test extends [mscorlib]System.Object { @@ -87,4 +97,4 @@ FAILURE: ldc.i4.m1 ret } -} \ No newline at end of file +} diff --git a/tests/src/Loader/classloader/InterfaceFolding/Nested_I/TestCase2.il b/tests/src/Loader/classloader/InterfaceFolding/Nested_I/TestCase2.il index 3c65974a39..6cf4e13278 100644 --- a/tests/src/Loader/classloader/InterfaceFolding/Nested_I/TestCase2.il +++ b/tests/src/Loader/classloader/InterfaceFolding/Nested_I/TestCase2.il @@ -24,7 +24,10 @@ ldstr "A::Foo" ret } - .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } } .class private abstract auto ansi beforefieldinit B`2 @@ -43,12 +46,19 @@ ldstr "B::Bar2" ret } - .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } } .class private auto ansi beforefieldinit C extends class B`2 -{ .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} } - +{ + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } +} .class public auto ansi beforefieldinit Test extends [mscorlib]System.Object { @@ -87,4 +97,4 @@ FAILURE: ldc.i4.m1 ret } -} \ No newline at end of file +} diff --git a/tests/src/Loader/classloader/InterfaceFolding/Nested_I/TestCase3.il b/tests/src/Loader/classloader/InterfaceFolding/Nested_I/TestCase3.il index 9fc5e8128f..d41d8cb293 100644 --- a/tests/src/Loader/classloader/InterfaceFolding/Nested_I/TestCase3.il +++ b/tests/src/Loader/classloader/InterfaceFolding/Nested_I/TestCase3.il @@ -19,7 +19,10 @@ .class interface nested family abstract auto ansi I`1 { .method public hidebysig newslot abstract virtual instance string Foo() cil managed {} } - .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } } .class private auto ansi beforefieldinit B`2 @@ -43,12 +46,19 @@ ldstr "B::Bar2" ret } - .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } } .class private auto ansi beforefieldinit C extends class B`2 -{ .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} } - +{ + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } +} .class public auto ansi beforefieldinit Test extends [mscorlib]System.Object { @@ -87,4 +97,4 @@ FAILURE: ldc.i4.m1 ret } -} \ No newline at end of file +} diff --git a/tests/src/Loader/classloader/InterfaceFolding/Nested_I/TestCase4.il b/tests/src/Loader/classloader/InterfaceFolding/Nested_I/TestCase4.il index 137cf43079..bbd564bc62 100644 --- a/tests/src/Loader/classloader/InterfaceFolding/Nested_I/TestCase4.il +++ b/tests/src/Loader/classloader/InterfaceFolding/Nested_I/TestCase4.il @@ -18,8 +18,11 @@ { .class interface nested family abstract auto ansi I`1 { .method public hidebysig newslot abstract virtual instance string Foo() cil managed {} } - - .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} + + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } } .class private abstract auto ansi beforefieldinit B`2 @@ -43,12 +46,19 @@ ldstr "B::Bar2" ret } - .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } } .class private auto ansi beforefieldinit C extends class B`2 -{ .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} } - +{ + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } +} .class public auto ansi beforefieldinit Test extends [mscorlib]System.Object { @@ -87,4 +97,4 @@ FAILURE: ldc.i4.m1 ret } -} \ No newline at end of file +} diff --git a/tests/src/Loader/classloader/InterfaceFolding/Nested_I/TestCase5.il b/tests/src/Loader/classloader/InterfaceFolding/Nested_I/TestCase5.il index 3ff9b9ad2f..1cb5217e41 100644 --- a/tests/src/Loader/classloader/InterfaceFolding/Nested_I/TestCase5.il +++ b/tests/src/Loader/classloader/InterfaceFolding/Nested_I/TestCase5.il @@ -36,19 +36,29 @@ ldstr "A::Bar2" ret } - .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } } .class private auto ansi beforefieldinit B`2 extends class A`1 implements class A`1/I`1, J { - .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } } .class private auto ansi beforefieldinit C extends class B`2 -{ .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} } - +{ + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } +} .class public auto ansi beforefieldinit Test extends [mscorlib]System.Object { @@ -87,4 +97,4 @@ FAILURE: ldc.i4.m1 ret } -} \ No newline at end of file +} diff --git a/tests/src/Loader/classloader/InterfaceFolding/Nested_I/TestCase6.il b/tests/src/Loader/classloader/InterfaceFolding/Nested_I/TestCase6.il index 55a59a1084..7c08f9c345 100644 --- a/tests/src/Loader/classloader/InterfaceFolding/Nested_I/TestCase6.il +++ b/tests/src/Loader/classloader/InterfaceFolding/Nested_I/TestCase6.il @@ -36,19 +36,29 @@ ldstr "A::Bar2" ret } - .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } } .class private abstract auto ansi beforefieldinit B`2 extends class A`1 implements class A`1/I`1, J { - .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } } .class private auto ansi beforefieldinit C extends class B`2 -{ .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} } - +{ + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } +} .class public auto ansi beforefieldinit Test extends [mscorlib]System.Object { @@ -87,4 +97,4 @@ FAILURE: ldc.i4.m1 ret } -} \ No newline at end of file +} diff --git a/tests/src/Loader/classloader/InterfaceFolding/Nested_I_Nested_J/TestCase0.il b/tests/src/Loader/classloader/InterfaceFolding/Nested_I_Nested_J/TestCase0.il index 1bb1dae67b..490c829727 100644 --- a/tests/src/Loader/classloader/InterfaceFolding/Nested_I_Nested_J/TestCase0.il +++ b/tests/src/Loader/classloader/InterfaceFolding/Nested_I_Nested_J/TestCase0.il @@ -36,7 +36,10 @@ ldstr "A::Bar2" ret } - .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } } .class private auto ansi beforefieldinit B`2 @@ -59,12 +62,20 @@ .maxstack 8 ldstr "B::Bar2" ret - } .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} + } + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } } .class private auto ansi beforefieldinit C extends class B`2 -{ .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} } - +{ + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } +} .class public auto ansi beforefieldinit Test extends [mscorlib]System.Object { @@ -103,4 +114,4 @@ FAILURE: ldc.i4.m1 ret } -} \ No newline at end of file +} diff --git a/tests/src/Loader/classloader/InterfaceFolding/Nested_I_Nested_J/TestCase1.il b/tests/src/Loader/classloader/InterfaceFolding/Nested_I_Nested_J/TestCase1.il index 7c099e229e..5501eb4f4c 100644 --- a/tests/src/Loader/classloader/InterfaceFolding/Nested_I_Nested_J/TestCase1.il +++ b/tests/src/Loader/classloader/InterfaceFolding/Nested_I_Nested_J/TestCase1.il @@ -24,7 +24,10 @@ ldstr "A::Foo" ret } - .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } } .class private auto ansi beforefieldinit B`2 @@ -43,12 +46,19 @@ ldstr "B::Bar2" ret } - .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } } .class private auto ansi beforefieldinit C extends class B`2 -{ .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} } - +{ + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } +} .class public auto ansi beforefieldinit Test extends [mscorlib]System.Object { @@ -87,4 +97,4 @@ FAILURE: ldc.i4.m1 ret } -} \ No newline at end of file +} diff --git a/tests/src/Loader/classloader/InterfaceFolding/Nested_I_Nested_J/TestCase2.il b/tests/src/Loader/classloader/InterfaceFolding/Nested_I_Nested_J/TestCase2.il index f2c3c2f771..900afd1fe8 100644 --- a/tests/src/Loader/classloader/InterfaceFolding/Nested_I_Nested_J/TestCase2.il +++ b/tests/src/Loader/classloader/InterfaceFolding/Nested_I_Nested_J/TestCase2.il @@ -24,7 +24,10 @@ ldstr "A::Foo" ret } - .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } } .class private abstract auto ansi beforefieldinit B`2 @@ -43,12 +46,19 @@ ldstr "B::Bar2" ret } - .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } } .class private auto ansi beforefieldinit C extends class B`2 -{ .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} } - +{ + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } +} .class public auto ansi beforefieldinit Test extends [mscorlib]System.Object { @@ -87,4 +97,4 @@ FAILURE: ldc.i4.m1 ret } -} \ No newline at end of file +} diff --git a/tests/src/Loader/classloader/InterfaceFolding/Nested_I_Nested_J/TestCase3.il b/tests/src/Loader/classloader/InterfaceFolding/Nested_I_Nested_J/TestCase3.il index ea83a0f390..d8a6ded6f7 100644 --- a/tests/src/Loader/classloader/InterfaceFolding/Nested_I_Nested_J/TestCase3.il +++ b/tests/src/Loader/classloader/InterfaceFolding/Nested_I_Nested_J/TestCase3.il @@ -19,7 +19,10 @@ .method public hidebysig newslot abstract virtual instance string Bar2() cil managed {} } } - .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } } .class private auto ansi beforefieldinit B`2 @@ -43,12 +46,19 @@ ldstr "B::Bar2" ret } - .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } } .class private auto ansi beforefieldinit C extends class B`2 -{ .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} } - +{ + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } +} .class public auto ansi beforefieldinit Test extends [mscorlib]System.Object { @@ -87,4 +97,4 @@ FAILURE: ldc.i4.m1 ret } -} \ No newline at end of file +} diff --git a/tests/src/Loader/classloader/InterfaceFolding/Nested_I_Nested_J/TestCase4.il b/tests/src/Loader/classloader/InterfaceFolding/Nested_I_Nested_J/TestCase4.il index b95f00d0e5..14fe4646d4 100644 --- a/tests/src/Loader/classloader/InterfaceFolding/Nested_I_Nested_J/TestCase4.il +++ b/tests/src/Loader/classloader/InterfaceFolding/Nested_I_Nested_J/TestCase4.il @@ -19,7 +19,10 @@ .method public hidebysig newslot abstract virtual instance string Bar2() cil managed {} } } - .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } } .class private abstract auto ansi beforefieldinit B`2 @@ -43,12 +46,19 @@ ldstr "B::Bar2" ret } - .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } } .class private auto ansi beforefieldinit C extends class B`2 -{ .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} } - +{ + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } +} .class public auto ansi beforefieldinit Test extends [mscorlib]System.Object { @@ -87,4 +97,4 @@ FAILURE: ldc.i4.m1 ret } -} \ No newline at end of file +} diff --git a/tests/src/Loader/classloader/InterfaceFolding/Nested_I_Nested_J/TestCase5.il b/tests/src/Loader/classloader/InterfaceFolding/Nested_I_Nested_J/TestCase5.il index 46b6c3a8e2..03ff440d1b 100644 --- a/tests/src/Loader/classloader/InterfaceFolding/Nested_I_Nested_J/TestCase5.il +++ b/tests/src/Loader/classloader/InterfaceFolding/Nested_I_Nested_J/TestCase5.il @@ -36,18 +36,29 @@ ldstr "A::Bar2" ret } - .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } } .class private auto ansi beforefieldinit B`2 extends class A`1 implements class A`1/I`1, A`1/I`1/J { - .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } } .class private auto ansi beforefieldinit C extends class B`2 -{ .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} } +{ + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } +} .class public auto ansi beforefieldinit Test extends [mscorlib]System.Object @@ -87,4 +98,4 @@ FAILURE: ldc.i4.m1 ret } -} \ No newline at end of file +} diff --git a/tests/src/Loader/classloader/InterfaceFolding/Nested_I_Nested_J/TestCase6.il b/tests/src/Loader/classloader/InterfaceFolding/Nested_I_Nested_J/TestCase6.il index 365a6aa8aa..bdc70e8d42 100644 --- a/tests/src/Loader/classloader/InterfaceFolding/Nested_I_Nested_J/TestCase6.il +++ b/tests/src/Loader/classloader/InterfaceFolding/Nested_I_Nested_J/TestCase6.il @@ -36,19 +36,29 @@ ldstr "A::Bar2" ret } - .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } } .class private abstract auto ansi beforefieldinit B`2 extends class A`1 implements class A`1/I`1, A`1/I`1/J { - .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } } .class private auto ansi beforefieldinit C extends class B`2 -{ .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} } - +{ + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } +} .class public auto ansi beforefieldinit Test extends [mscorlib]System.Object { diff --git a/tests/src/Loader/classloader/InterfaceFolding/Nested_J/TestCase0.il b/tests/src/Loader/classloader/InterfaceFolding/Nested_J/TestCase0.il index 356cd39010..d4aecd808a 100644 --- a/tests/src/Loader/classloader/InterfaceFolding/Nested_J/TestCase0.il +++ b/tests/src/Loader/classloader/InterfaceFolding/Nested_J/TestCase0.il @@ -36,7 +36,10 @@ ldstr "A::Bar2" ret } - .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } } .class private auto ansi beforefieldinit B`2 @@ -59,12 +62,20 @@ .maxstack 8 ldstr "B::Bar2" ret - } .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} + } + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } } .class private auto ansi beforefieldinit C extends class B`2 -{ .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} } - +{ + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } +} .class public auto ansi beforefieldinit Test extends [mscorlib]System.Object { @@ -103,4 +114,4 @@ FAILURE: ldc.i4.m1 ret } -} \ No newline at end of file +} diff --git a/tests/src/Loader/classloader/InterfaceFolding/Nested_J/TestCase1.il b/tests/src/Loader/classloader/InterfaceFolding/Nested_J/TestCase1.il index bcf1b2b0d9..f24aba9bf1 100644 --- a/tests/src/Loader/classloader/InterfaceFolding/Nested_J/TestCase1.il +++ b/tests/src/Loader/classloader/InterfaceFolding/Nested_J/TestCase1.il @@ -23,7 +23,10 @@ ldstr "A::Foo" ret } - .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } } .class private auto ansi beforefieldinit B`2 @@ -42,12 +45,19 @@ ldstr "B::Bar2" ret } - .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } } .class private auto ansi beforefieldinit C extends class B`2 -{ .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} } - +{ + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } +} .class public auto ansi beforefieldinit Test extends [mscorlib]System.Object { @@ -86,4 +96,4 @@ FAILURE: ldc.i4.m1 ret } -} \ No newline at end of file +} diff --git a/tests/src/Loader/classloader/InterfaceFolding/Nested_J/TestCase2.il b/tests/src/Loader/classloader/InterfaceFolding/Nested_J/TestCase2.il index 0d82b78ce3..eda666b305 100644 --- a/tests/src/Loader/classloader/InterfaceFolding/Nested_J/TestCase2.il +++ b/tests/src/Loader/classloader/InterfaceFolding/Nested_J/TestCase2.il @@ -23,7 +23,10 @@ ldstr "A::Foo" ret } - .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } } .class private abstract auto ansi beforefieldinit B`2 @@ -42,12 +45,19 @@ ldstr "B::Bar2" ret } - .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } } .class private auto ansi beforefieldinit C extends class B`2 -{ .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} } - +{ + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } +} .class public auto ansi beforefieldinit Test extends [mscorlib]System.Object { @@ -86,4 +96,4 @@ FAILURE: ldc.i4.m1 ret } -} \ No newline at end of file +} diff --git a/tests/src/Loader/classloader/InterfaceFolding/Nested_J/TestCase3.il b/tests/src/Loader/classloader/InterfaceFolding/Nested_J/TestCase3.il index 7341902b62..e15e0abb08 100644 --- a/tests/src/Loader/classloader/InterfaceFolding/Nested_J/TestCase3.il +++ b/tests/src/Loader/classloader/InterfaceFolding/Nested_J/TestCase3.il @@ -18,7 +18,10 @@ .method public hidebysig newslot abstract virtual instance string Bar1() cil managed {} .method public hidebysig newslot abstract virtual instance string Bar2() cil managed {} } - .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } } .class private auto ansi beforefieldinit B`2 @@ -42,12 +45,19 @@ ldstr "B::Bar2" ret } - .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } } .class private auto ansi beforefieldinit C extends class B`2 -{ .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} } - +{ + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } +} .class public auto ansi beforefieldinit Test extends [mscorlib]System.Object { @@ -86,4 +96,4 @@ FAILURE: ldc.i4.m1 ret } -} \ No newline at end of file +} diff --git a/tests/src/Loader/classloader/InterfaceFolding/Nested_J/TestCase4.il b/tests/src/Loader/classloader/InterfaceFolding/Nested_J/TestCase4.il index 75ef0e80cb..91ed35840a 100644 --- a/tests/src/Loader/classloader/InterfaceFolding/Nested_J/TestCase4.il +++ b/tests/src/Loader/classloader/InterfaceFolding/Nested_J/TestCase4.il @@ -18,7 +18,10 @@ .method public hidebysig newslot abstract virtual instance string Bar1() cil managed {} .method public hidebysig newslot abstract virtual instance string Bar2() cil managed {} } - .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } } .class private abstract auto ansi beforefieldinit B`2 @@ -42,12 +45,19 @@ ldstr "B::Bar2" ret } - .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } } .class private auto ansi beforefieldinit C extends class B`2 -{ .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} } - +{ + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } +} .class public auto ansi beforefieldinit Test extends [mscorlib]System.Object { @@ -86,4 +96,4 @@ FAILURE: ldc.i4.m1 ret } -} \ No newline at end of file +} diff --git a/tests/src/Loader/classloader/InterfaceFolding/Nested_J/TestCase5.il b/tests/src/Loader/classloader/InterfaceFolding/Nested_J/TestCase5.il index 4e7a639528..1ceb777800 100644 --- a/tests/src/Loader/classloader/InterfaceFolding/Nested_J/TestCase5.il +++ b/tests/src/Loader/classloader/InterfaceFolding/Nested_J/TestCase5.il @@ -35,19 +35,29 @@ ldstr "A::Bar2" ret } - .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } } .class private auto ansi beforefieldinit B`2 extends class A`1 implements class I`1, A`1/J { - .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } } .class private auto ansi beforefieldinit C extends class B`2 -{ .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} } - +{ + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } +} .class public auto ansi beforefieldinit Test extends [mscorlib]System.Object { @@ -86,4 +96,4 @@ FAILURE: ldc.i4.m1 ret } -} \ No newline at end of file +} diff --git a/tests/src/Loader/classloader/InterfaceFolding/Nested_J/TestCase6.il b/tests/src/Loader/classloader/InterfaceFolding/Nested_J/TestCase6.il index f106b5fc72..52d4631c63 100644 --- a/tests/src/Loader/classloader/InterfaceFolding/Nested_J/TestCase6.il +++ b/tests/src/Loader/classloader/InterfaceFolding/Nested_J/TestCase6.il @@ -35,19 +35,29 @@ ldstr "A::Bar2" ret } - .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } } .class private abstract auto ansi beforefieldinit B`2 extends class A`1 implements class I`1, A`1/J { - .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } } .class private auto ansi beforefieldinit C extends class B`2 -{ .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} } - +{ + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } +} .class public auto ansi beforefieldinit Test extends [mscorlib]System.Object { @@ -86,4 +96,4 @@ FAILURE: ldc.i4.m1 ret } -} \ No newline at end of file +} diff --git a/tests/src/Loader/classloader/InterfaceFolding/Nested_J_Nested_I/TestCase0.il b/tests/src/Loader/classloader/InterfaceFolding/Nested_J_Nested_I/TestCase0.il index fb4f32d808..5fab5b8d0a 100644 --- a/tests/src/Loader/classloader/InterfaceFolding/Nested_J_Nested_I/TestCase0.il +++ b/tests/src/Loader/classloader/InterfaceFolding/Nested_J_Nested_I/TestCase0.il @@ -34,7 +34,10 @@ ldstr "A::Bar2" ret } - .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } } .class private auto ansi beforefieldinit B`2 @@ -57,12 +60,20 @@ .maxstack 8 ldstr "B::Bar2" ret - } .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} + } + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } } .class private auto ansi beforefieldinit C extends class B`2 -{ .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} } - +{ + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } +} .class public auto ansi beforefieldinit Test extends [mscorlib]System.Object { @@ -101,4 +112,4 @@ FAILURE: ldc.i4.m1 ret } -} \ No newline at end of file +} diff --git a/tests/src/Loader/classloader/InterfaceFolding/Nested_J_Nested_I/TestCase1.il b/tests/src/Loader/classloader/InterfaceFolding/Nested_J_Nested_I/TestCase1.il index fd46e20202..d2a73e3020 100644 --- a/tests/src/Loader/classloader/InterfaceFolding/Nested_J_Nested_I/TestCase1.il +++ b/tests/src/Loader/classloader/InterfaceFolding/Nested_J_Nested_I/TestCase1.il @@ -22,7 +22,10 @@ ldstr "A::Foo" ret } - .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } } .class private auto ansi beforefieldinit B`2 @@ -41,12 +44,19 @@ ldstr "B::Bar2" ret } - .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } } .class private auto ansi beforefieldinit C extends class B`2 -{ .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} } - +{ + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } +} .class public auto ansi beforefieldinit Test extends [mscorlib]System.Object { @@ -85,4 +95,4 @@ FAILURE: ldc.i4.m1 ret } -} \ No newline at end of file +} diff --git a/tests/src/Loader/classloader/InterfaceFolding/Nested_J_Nested_I/TestCase2.il b/tests/src/Loader/classloader/InterfaceFolding/Nested_J_Nested_I/TestCase2.il index 065c132353..6874dca76c 100644 --- a/tests/src/Loader/classloader/InterfaceFolding/Nested_J_Nested_I/TestCase2.il +++ b/tests/src/Loader/classloader/InterfaceFolding/Nested_J_Nested_I/TestCase2.il @@ -22,7 +22,10 @@ ldstr "A::Foo" ret } - .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } } .class private abstract auto ansi beforefieldinit B`2 @@ -41,12 +44,19 @@ ldstr "B::Bar2" ret } - .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } } .class private auto ansi beforefieldinit C extends class B`2 -{ .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} } - +{ + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } +} .class public auto ansi beforefieldinit Test extends [mscorlib]System.Object { @@ -85,4 +95,4 @@ FAILURE: ldc.i4.m1 ret } -} \ No newline at end of file +} diff --git a/tests/src/Loader/classloader/InterfaceFolding/Nested_J_Nested_I/TestCase3.il b/tests/src/Loader/classloader/InterfaceFolding/Nested_J_Nested_I/TestCase3.il index 7f40457ab5..03516e4494 100644 --- a/tests/src/Loader/classloader/InterfaceFolding/Nested_J_Nested_I/TestCase3.il +++ b/tests/src/Loader/classloader/InterfaceFolding/Nested_J_Nested_I/TestCase3.il @@ -17,7 +17,10 @@ .method public hidebysig newslot abstract virtual instance string Bar1() cil managed {} .method public hidebysig newslot abstract virtual instance string Bar2() cil managed {} } - .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } } .class private auto ansi beforefieldinit B`2 @@ -41,12 +44,19 @@ ldstr "B::Bar2" ret } - .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } } .class private auto ansi beforefieldinit C extends class B`2 -{ .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} } - +{ + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } +} .class public auto ansi beforefieldinit Test extends [mscorlib]System.Object { @@ -85,4 +95,4 @@ FAILURE: ldc.i4.m1 ret } -} \ No newline at end of file +} diff --git a/tests/src/Loader/classloader/InterfaceFolding/Nested_J_Nested_I/TestCase4.il b/tests/src/Loader/classloader/InterfaceFolding/Nested_J_Nested_I/TestCase4.il index f4efdfd2a3..72b3ed1e62 100644 --- a/tests/src/Loader/classloader/InterfaceFolding/Nested_J_Nested_I/TestCase4.il +++ b/tests/src/Loader/classloader/InterfaceFolding/Nested_J_Nested_I/TestCase4.il @@ -17,7 +17,10 @@ .method public hidebysig newslot abstract virtual instance string Bar1() cil managed {} .method public hidebysig newslot abstract virtual instance string Bar2() cil managed {} } - .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } } .class private abstract auto ansi beforefieldinit B`2 @@ -41,12 +44,19 @@ ldstr "B::Bar2" ret } - .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } } .class private auto ansi beforefieldinit C extends class B`2 -{ .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} } - +{ + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } +} .class public auto ansi beforefieldinit Test extends [mscorlib]System.Object { @@ -85,4 +95,4 @@ FAILURE: ldc.i4.m1 ret } -} \ No newline at end of file +} diff --git a/tests/src/Loader/classloader/InterfaceFolding/Nested_J_Nested_I/TestCase5.il b/tests/src/Loader/classloader/InterfaceFolding/Nested_J_Nested_I/TestCase5.il index a446ed32df..0fb52a5c62 100644 --- a/tests/src/Loader/classloader/InterfaceFolding/Nested_J_Nested_I/TestCase5.il +++ b/tests/src/Loader/classloader/InterfaceFolding/Nested_J_Nested_I/TestCase5.il @@ -34,19 +34,29 @@ ldstr "A::Bar2" ret } - .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } } .class private auto ansi beforefieldinit B`2 extends class A`1 implements class A`1/J/I`1, A`1/J { - .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } } .class private auto ansi beforefieldinit C extends class B`2 -{ .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} } - +{ + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } +} .class public auto ansi beforefieldinit Test extends [mscorlib]System.Object { @@ -85,4 +95,4 @@ FAILURE: ldc.i4.m1 ret } -} \ No newline at end of file +} diff --git a/tests/src/Loader/classloader/InterfaceFolding/Nested_J_Nested_I/TestCase6.il b/tests/src/Loader/classloader/InterfaceFolding/Nested_J_Nested_I/TestCase6.il index baaabcccdb..fd5047eaf3 100644 --- a/tests/src/Loader/classloader/InterfaceFolding/Nested_J_Nested_I/TestCase6.il +++ b/tests/src/Loader/classloader/InterfaceFolding/Nested_J_Nested_I/TestCase6.il @@ -34,19 +34,29 @@ ldstr "A::Bar2" ret } - .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } } .class private abstract auto ansi beforefieldinit B`2 extends class A`1 implements class A`1/J/I`1, A`1/J { - .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } } .class private auto ansi beforefieldinit C extends class B`2 -{ .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} } - +{ + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } +} .class public auto ansi beforefieldinit Test extends [mscorlib]System.Object { @@ -85,4 +95,4 @@ FAILURE: ldc.i4.m1 ret } -} \ No newline at end of file +} diff --git a/tests/src/Loader/classloader/InterfaceFolding/TestCase0.il b/tests/src/Loader/classloader/InterfaceFolding/TestCase0.il index 0e5c131773..068a309944 100644 --- a/tests/src/Loader/classloader/InterfaceFolding/TestCase0.il +++ b/tests/src/Loader/classloader/InterfaceFolding/TestCase0.il @@ -37,7 +37,10 @@ ldstr "A::Bar2" ret } - .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } } .class private auto ansi beforefieldinit B`2 @@ -60,12 +63,16 @@ .maxstack 8 ldstr "B::Bar2" ret - } .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} + } } .class private auto ansi beforefieldinit C extends class B`2 -{ .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} } - +{ + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } +} .class public auto ansi beforefieldinit Test extends [mscorlib]System.Object { diff --git a/tests/src/Loader/classloader/InterfaceFolding/TestCase1.il b/tests/src/Loader/classloader/InterfaceFolding/TestCase1.il index 2f7be47be0..e5d41839f8 100644 --- a/tests/src/Loader/classloader/InterfaceFolding/TestCase1.il +++ b/tests/src/Loader/classloader/InterfaceFolding/TestCase1.il @@ -25,7 +25,10 @@ ldstr "A::Foo" ret } - .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } } .class private auto ansi beforefieldinit B`2 @@ -44,12 +47,19 @@ ldstr "B::Bar2" ret } - .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } } .class private auto ansi beforefieldinit C extends class B`2 -{ .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} } - +{ + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } +} .class public auto ansi beforefieldinit Test extends [mscorlib]System.Object { diff --git a/tests/src/Loader/classloader/InterfaceFolding/TestCase2.il b/tests/src/Loader/classloader/InterfaceFolding/TestCase2.il index 1927d596ae..30e99dca24 100644 --- a/tests/src/Loader/classloader/InterfaceFolding/TestCase2.il +++ b/tests/src/Loader/classloader/InterfaceFolding/TestCase2.il @@ -25,7 +25,10 @@ ldstr "A::Foo" ret } - .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } } .class private abstract auto ansi beforefieldinit B`2 @@ -44,12 +47,19 @@ ldstr "B::Bar2" ret } - .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } } .class private auto ansi beforefieldinit C extends class B`2 -{ .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} } - +{ + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } +} .class public auto ansi beforefieldinit Test extends [mscorlib]System.Object { diff --git a/tests/src/Loader/classloader/InterfaceFolding/TestCase3.il b/tests/src/Loader/classloader/InterfaceFolding/TestCase3.il index e67f03912c..d84965ce38 100644 --- a/tests/src/Loader/classloader/InterfaceFolding/TestCase3.il +++ b/tests/src/Loader/classloader/InterfaceFolding/TestCase3.il @@ -20,7 +20,10 @@ .class private abstract auto ansi beforefieldinit A`1 implements class I`1 { - .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } } .class private auto ansi beforefieldinit B`2 @@ -44,12 +47,19 @@ ldstr "B::Bar2" ret } - .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } } .class private auto ansi beforefieldinit C extends class B`2 -{ .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} } - +{ + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } +} .class public auto ansi beforefieldinit Test extends [mscorlib]System.Object { diff --git a/tests/src/Loader/classloader/InterfaceFolding/TestCase4.il b/tests/src/Loader/classloader/InterfaceFolding/TestCase4.il index e411d7a588..f41de5c05d 100644 --- a/tests/src/Loader/classloader/InterfaceFolding/TestCase4.il +++ b/tests/src/Loader/classloader/InterfaceFolding/TestCase4.il @@ -20,7 +20,10 @@ .class private abstract auto ansi beforefieldinit A`1 implements class I`1 { - .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } } .class private abstract auto ansi beforefieldinit B`2 @@ -44,12 +47,19 @@ ldstr "B::Bar2" ret } - .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } } .class private auto ansi beforefieldinit C extends class B`2 -{ .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} } - +{ + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } +} .class public auto ansi beforefieldinit Test extends [mscorlib]System.Object { diff --git a/tests/src/Loader/classloader/InterfaceFolding/TestCase5.il b/tests/src/Loader/classloader/InterfaceFolding/TestCase5.il index 30a61c9a08..51ddd83515 100644 --- a/tests/src/Loader/classloader/InterfaceFolding/TestCase5.il +++ b/tests/src/Loader/classloader/InterfaceFolding/TestCase5.il @@ -37,19 +37,29 @@ ldstr "A::Bar2" ret } - .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } } .class private auto ansi beforefieldinit B`2 extends class A`1 implements class I`1, J { - .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } } .class private auto ansi beforefieldinit C extends class B`2 -{ .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} } - +{ + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } +} .class public auto ansi beforefieldinit Test extends [mscorlib]System.Object { diff --git a/tests/src/Loader/classloader/InterfaceFolding/TestCase6.il b/tests/src/Loader/classloader/InterfaceFolding/TestCase6.il index 4b9dc2ceea..ceba5455b2 100644 --- a/tests/src/Loader/classloader/InterfaceFolding/TestCase6.il +++ b/tests/src/Loader/classloader/InterfaceFolding/TestCase6.il @@ -37,19 +37,29 @@ ldstr "A::Bar2" ret } - .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } } .class private abstract auto ansi beforefieldinit B`2 extends class A`1 implements class I`1, J { - .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } } .class private auto ansi beforefieldinit C extends class B`2 -{ .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} } - +{ + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } +} .class public auto ansi beforefieldinit Test extends [mscorlib]System.Object { diff --git a/tests/src/Loader/classloader/InterfaceFolding/TestCase7.il b/tests/src/Loader/classloader/InterfaceFolding/TestCase7.il index 92f61358d3..2513ae09a0 100644 --- a/tests/src/Loader/classloader/InterfaceFolding/TestCase7.il +++ b/tests/src/Loader/classloader/InterfaceFolding/TestCase7.il @@ -37,7 +37,10 @@ ldstr "A::Bar2" ret } - .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } } .class private auto ansi beforefieldinit B`2 @@ -61,12 +64,20 @@ .maxstack 8 ldstr "B::Bar2" ret - } .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} + } + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } } .class private auto ansi beforefieldinit C extends class B`2 -{ .method public hidebysig specialname rtspecialname instance void .ctor() cil managed {} } - +{ + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } +} .class public auto ansi beforefieldinit Test extends [mscorlib]System.Object { diff --git a/tests/src/Loader/classloader/PrivateInterfaceImpl/Test2_NonFriendPriInterface.csproj b/tests/src/Loader/classloader/PrivateInterfaceImpl/Test2_NonFriendPriInterface.csproj deleted file mode 100644 index 5c75304b16..0000000000 --- a/tests/src/Loader/classloader/PrivateInterfaceImpl/Test2_NonFriendPriInterface.csproj +++ /dev/null @@ -1,35 +0,0 @@ - - - - - Test2_NonFriendPriInterface - Debug - AnyCPU - 2.0 - {95DFC527-4DC1-495E-97D7-E94EE1F7140D} - 512 - {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - 7a9bfb7d - true - false - Library - BuildOnly - 0 - - - - - False - - - - - - - - - - - - - diff --git a/tests/src/Loader/classloader/generics/Visibility/A_Types.csproj b/tests/src/Loader/classloader/generics/Visibility/A_Types.csproj deleted file mode 100644 index 023d1b9c98..0000000000 --- a/tests/src/Loader/classloader/generics/Visibility/A_Types.csproj +++ /dev/null @@ -1,35 +0,0 @@ - - - - - A_Types - Debug - AnyCPU - 2.0 - {95DFC527-4DC1-495E-97D7-E94EE1F7140D} - 512 - {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - 7a9bfb7d - true - false - Library - BuildOnly - 0 - - - - - False - - - - - - - - - - - - - diff --git a/tests/src/Loader/classloader/generics/Visibility/B_Types.csproj b/tests/src/Loader/classloader/generics/Visibility/B_Types.csproj deleted file mode 100644 index 46c06016fe..0000000000 --- a/tests/src/Loader/classloader/generics/Visibility/B_Types.csproj +++ /dev/null @@ -1,35 +0,0 @@ - - - - - B_Types - Debug - AnyCPU - 2.0 - {95DFC527-4DC1-495E-97D7-E94EE1F7140D} - 512 - {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - 7a9bfb7d - true - false - Library - BuildOnly - 0 - - - - - False - - - - - - - - - - - - - diff --git a/tests/src/Loader/classloader/methodoverriding/regressions/549411/exploit.csproj b/tests/src/Loader/classloader/methodoverriding/regressions/549411/exploit.csproj index ce7ca5e3fa..29cb737ea5 100644 --- a/tests/src/Loader/classloader/methodoverriding/regressions/549411/exploit.csproj +++ b/tests/src/Loader/classloader/methodoverriding/regressions/549411/exploit.csproj @@ -15,6 +15,7 @@ Exe BuildAndRun 0 + true diff --git a/tests/src/Loader/classloader/regressions/dev10_710121/dev10_710121.il b/tests/src/Loader/classloader/regressions/dev10_710121/dev10_710121.il index babb30d572..96e28f672f 100644 --- a/tests/src/Loader/classloader/regressions/dev10_710121/dev10_710121.il +++ b/tests/src/Loader/classloader/regressions/dev10_710121/dev10_710121.il @@ -21,12 +21,18 @@ The bug related to populating MethodDesc slots in generic dictionaries at runtim .class public DerivedDerived extends class Derived`2 { - .method public hidebysig specialname rtspecialname instance void .ctor() cil managed { } + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } } .class public Derived`2 extends class Base`2 { - .method public hidebysig specialname rtspecialname instance void .ctor() cil managed { } + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } } .class public Base`2 { @@ -40,7 +46,10 @@ The bug related to populating MethodDesc slots in generic dictionaries at runtim call string [mscorlib]System.String::Concat(object,object) ret } - .method public hidebysig specialname rtspecialname instance void .ctor() cil managed { } + .method public hidebysig specialname rtspecialname instance void .ctor() cil managed + { + ret + } } diff --git a/tests/src/TestWrappersConfig/project.json b/tests/src/TestWrappersConfig/project.json index 07ede5fca1..f255e3044f 100644 --- a/tests/src/TestWrappersConfig/project.json +++ b/tests/src/TestWrappersConfig/project.json @@ -1,10 +1,17 @@ { "dependencies": { - "xunit": "2.1.0", - "xunit.assert": "2.1.0", - "xunit.core": "2.1.0" + "xunit": "2.2.0-beta2-build3300", + "xunit.assert": "2.2.0-beta2-build3300", + "xunit.core": "2.2.0-beta2-build3300", + "xunit.runner.msbuild": "2.2.0-beta2-build3300" }, "frameworks": { + "netcoreapp1.1": { + "imports": [ + "dnxcore50", + "portable-net45+win8" + ] + }, "net45": { "imports": "portable-net45+win8" } diff --git a/tests/src/baseservices/compilerservices/FixedAddressValueType/FixedAddressValueType.cs b/tests/src/baseservices/compilerservices/FixedAddressValueType/FixedAddressValueType.cs new file mode 100644 index 0000000000..bf10d817e5 --- /dev/null +++ b/tests/src/baseservices/compilerservices/FixedAddressValueType/FixedAddressValueType.cs @@ -0,0 +1,60 @@ +// Licensed to the .NET Foundation under one or more 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.CompilerServices; + +public struct Age { + public int years; + public int months; +} + +public class FreeClass +{ + public static Age FreeAge; + + public static unsafe IntPtr AddressOfFreeAge() + { + fixed (Age* pointer = &FreeAge) + { return (IntPtr) pointer; } + } +} + +public class FixedClass +{ + [FixedAddressValueType] + public static Age FixedAge; + + public static unsafe IntPtr AddressOfFixedAge() + { + fixed (Age* pointer = &FixedAge) + { return (IntPtr) pointer; } + } +} + +public class Example +{ + public static int Main() + { + // Get addresses of static Age fields. + IntPtr freePtr1 = FreeClass.AddressOfFreeAge(); + + IntPtr fixedPtr1 = FixedClass.AddressOfFixedAge(); + + // Garbage collection. + GC.Collect(3, GCCollectionMode.Forced, true, true); + GC.WaitForPendingFinalizers(); + + // Get addresses of static Age fields after garbage collection. + IntPtr freePtr2 = FreeClass.AddressOfFreeAge(); + IntPtr fixedPtr2 = FixedClass.AddressOfFixedAge(); + + if(freePtr1 != freePtr2 && fixedPtr1 == fixedPtr2) + { + return 100; + } + + return -1; + } +} diff --git a/tests/src/baseservices/compilerservices/FixedAddressValueType/FixedAddressValueType.csproj b/tests/src/baseservices/compilerservices/FixedAddressValueType/FixedAddressValueType.csproj new file mode 100644 index 0000000000..19a779194f --- /dev/null +++ b/tests/src/baseservices/compilerservices/FixedAddressValueType/FixedAddressValueType.csproj @@ -0,0 +1,44 @@ + + + + + Debug + AnyCPU + 2.0 + {95DFC527-4DC1-495E-97D7-E94EE1F7140D} + Exe + Properties + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + $(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages + ..\..\ + 7a9bfb7d + true + BuildAndRun + true + true + + + + + + + + + False + + + + + + + + + + + + + + + + diff --git a/tests/src/baseservices/compilerservices/RuntimeHelpers/ExecuteCodeWithGuaranteedCleanup.cs b/tests/src/baseservices/compilerservices/RuntimeHelpers/ExecuteCodeWithGuaranteedCleanup.cs new file mode 100644 index 0000000000..58cee3ca36 --- /dev/null +++ b/tests/src/baseservices/compilerservices/RuntimeHelpers/ExecuteCodeWithGuaranteedCleanup.cs @@ -0,0 +1,62 @@ +// Licensed to the .NET Foundation under one or more 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.CompilerServices; + +namespace GCD +{ + /// + /// Summary description for Class1. + /// + class GCD + { + private int _val = -2; + private int _exitcode = -1; + public GCD() {} + public int GetExitCode(){ return _exitcode;} + public void g () + { + throw new System.Exception("TryCode test"); + } + public void TryCode0 (object obj) + { + _val = (int)obj; + g(); + } + public void CleanupCode0 (object obj, bool excpThrown) + { + if(excpThrown && ((int)obj == _val)) + { + _exitcode = 100; + } + } + } + + + class GCDTest + { + /// + /// The main entry point for the application. + /// + [STAThread] + static int Main(string[] args) + { + GCD gcd = new GCD(); + RuntimeHelpers.TryCode t = new RuntimeHelpers.TryCode(gcd.TryCode0); + RuntimeHelpers.CleanupCode c = new RuntimeHelpers.CleanupCode(gcd.CleanupCode0); + int val = 21; + try + { + RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(t, c, val); + } + catch (Exception Ex) + { + + } + + return gcd.GetExitCode(); + } + } +} diff --git a/tests/src/baseservices/compilerservices/RuntimeHelpers/ExecuteCodeWithGuaranteedCleanup.csproj b/tests/src/baseservices/compilerservices/RuntimeHelpers/ExecuteCodeWithGuaranteedCleanup.csproj new file mode 100644 index 0000000000..605d11b1f1 --- /dev/null +++ b/tests/src/baseservices/compilerservices/RuntimeHelpers/ExecuteCodeWithGuaranteedCleanup.csproj @@ -0,0 +1,42 @@ + + + + + Debug + AnyCPU + 2.0 + {95DFC527-4DC1-495E-97D7-E94EE1F7140D} + Exe + Properties + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + $(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages + ..\..\ + 7a9bfb7d + true + BuildAndRun + + + + + + + + + False + + + + + + + + + + + + + + + + diff --git a/tests/src/baseservices/compilerservices/RuntimeWrappedException/RuntimeWrappedException.cs b/tests/src/baseservices/compilerservices/RuntimeWrappedException/RuntimeWrappedException.cs new file mode 100644 index 0000000000..29fb347ae1 --- /dev/null +++ b/tests/src/baseservices/compilerservices/RuntimeWrappedException/RuntimeWrappedException.cs @@ -0,0 +1,63 @@ +// Licensed to the .NET Foundation under one or more 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.IO; +using System.Runtime.CompilerServices; +using System.Runtime.Serialization; + +class Test +{ + public static int Main(string[] args) + { + int retVal = 0; + var thrower = new StringThrowerClass(); + try + { + thrower.InstanceMethod(); + } + + catch (RuntimeWrappedException ex) + { + + if ( !ex.WrappedException.ToString().Contains("Inside StringThrower") ) + { +// Console.WriteLine("Incorrect exception and/or message. Expected RuntimeWrappedException: An object that does not derive "+ +// "from System.Exception has been wrapped in a RuntimeWrappedException.\n But actually got: " + ex.InnerException); + retVal = -1; + } + + StreamingContext ctx; + +// TODO: Expose once we have access to FormatterConverter +// var info = new SerializationInfo(typeof(RuntimeWrappedException), new FormatterConverter()); +// ex.GetObjectData(info,ctx); +// + try + { + ex.GetObjectData(null,ctx); + } + catch (ArgumentNullException ex1) + { + retVal = 100; + } + catch (Exception ex1) + { + retVal = -1; + } + + + } + catch (Exception ex) + { +// Console.WriteLine("Incorrect exception thrown. Expected RuntimeWrappedException, but actually got: " + ex); + retVal = -2; + } + + + return retVal; + + + } +} diff --git a/tests/src/baseservices/compilerservices/RuntimeWrappedException/RuntimeWrappedException.csproj b/tests/src/baseservices/compilerservices/RuntimeWrappedException/RuntimeWrappedException.csproj new file mode 100644 index 0000000000..4b0c5cf68d --- /dev/null +++ b/tests/src/baseservices/compilerservices/RuntimeWrappedException/RuntimeWrappedException.csproj @@ -0,0 +1,45 @@ + + + + + Debug + AnyCPU + 2.0 + {95DFC527-4DC1-495E-97D7-E94EE1F7140D} + Exe + Properties + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + $(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages + ..\..\ + 7a9bfb7d + true + BuildAndRun + + + + + + + + + False + + + + + + + + + + + + + + + + + + + diff --git a/tests/src/baseservices/compilerservices/RuntimeWrappedException/StringThrower.il b/tests/src/baseservices/compilerservices/RuntimeWrappedException/StringThrower.il new file mode 100644 index 0000000000..92c9139f7c --- /dev/null +++ b/tests/src/baseservices/compilerservices/RuntimeWrappedException/StringThrower.il @@ -0,0 +1,40 @@ +// Licensed to the .NET Foundation under one or more 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 +{ + .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. + .ver 2:0:0:0 +} + +.assembly StringThrower {} + +.class public auto ansi StringThrowerClass + extends [mscorlib]System.Object +{ + .field public static int32 intStatic + + + .method public hidebysig instance void + InstanceMethod() cil managed noinlining + { + .maxstack 8 + + ldstr "Inside StringThrower" + throw + ret + } // end of method A::methodA + + + .method public hidebysig specialname rtspecialname + instance void .ctor() cil managed + { + + .maxstack 8 + ldarg.0 + call instance void class [mscorlib]System.Object::.ctor() + ret + } // end of method Test1::.ctor + +} diff --git a/tests/src/baseservices/compilerservices/RuntimeWrappedException/StringThrower.ilproj b/tests/src/baseservices/compilerservices/RuntimeWrappedException/StringThrower.ilproj new file mode 100644 index 0000000000..79667cc7c6 --- /dev/null +++ b/tests/src/baseservices/compilerservices/RuntimeWrappedException/StringThrower.ilproj @@ -0,0 +1,40 @@ + + + + + Debug + AnyCPU + $(MSBuildProjectName) + 2.0 + {95DFC527-4DC1-495E-97D7-E94EE1F7140D} + Library + Properties + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + $(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages + ..\..\ + 7a9bfb7d + + + + + + + + + False + + + + + + + + + + + + + + + diff --git a/tests/src/baseservices/compilerservices/modulector/moduleCctor.il b/tests/src/baseservices/compilerservices/modulector/moduleCctor.il new file mode 100644 index 0000000000..06bf6ac12c --- /dev/null +++ b/tests/src/baseservices/compilerservices/modulector/moduleCctor.il @@ -0,0 +1,110 @@ +// Licensed to the .NET Foundation under one or more 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 +{ + .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. + .ver 2:0:0:0 +} + +.assembly moduleCctor {} +.assembly extern FieldTypes +{ + .publickeytoken = (C0 30 5C 36 38 0B A4 29 ) // .0\68..) + .ver 0:0:0:0 +} + + .method private hidebysig specialname rtspecialname static + void .cctor() cil managed + { + .maxstack 8 + nop + ldsfld int32 IntHolder::val + ldc.i4.1 + add + stsfld int32 IntHolder::val +// ldstr "modCctor.txt" +// ldstr "inside .cctor" +// call void [mscorlib]System.IO.File::WriteAllText(string, +// string) + ret + } // end of method Foo::.cctor + + +// =============== CLASS MEMBERS DECLARATION =================== +.class public auto ansi beforefieldinit IntHolder + extends [mscorlib]System.Object +{ + // Fields + .field public static int32 val + + // Methods + .method public hidebysig specialname rtspecialname + instance void .ctor () cil managed + { + // Method begins at RVA 0x2050 + // Code size 8 (0x8) + .maxstack 8 + + IL_0000: ldarg.0 + IL_0001: call instance void [mscorlib]System.Object::.ctor() + IL_0006: nop + IL_0007: ret + } // end of method IntHolder::.ctor + + .method private hidebysig specialname rtspecialname static + void .cctor () cil managed + { + // Method begins at RVA 0x2059 + // Code size 7 (0x7) + .maxstack 8 + + IL_0000: ldc.i4.0 + IL_0001: stsfld int32 IntHolder::val + IL_0006: ret + } // end of method IntHolder::.cctor + + .method public hidebysig static + void Assign ( + int32 arg + ) cil managed + { + // Method begins at RVA 0x2078 + // Code size 8 (0x8) + .maxstack 8 + + IL_0000: nop + IL_0001: ldarg.0 + IL_0002: stsfld int32 IntHolder::val + IL_0007: ret + } // end of method IntHolder::Assign + .method public hidebysig static + void Check ( + int32 arg + ) cil managed + { + // Method begins at RVA 0x2050 + // Code size 28 (0x1c) + .maxstack 2 + .locals init ( + [0] bool + ) + + IL_0000: nop + IL_0001: ldsfld int32 IntHolder::val + IL_0006: ldarg.0 + IL_0007: ceq + IL_0009: ldc.i4.0 + IL_000a: ceq + IL_000c: stloc.0 + IL_000d: ldloc.0 + IL_000e: brfalse.s IL_001b + + IL_0010: ldstr "Mod Ctor did not functon correctly" + IL_0015: newobj instance void [mscorlib]System.Exception::.ctor(string) + IL_001a: throw + + IL_001b: ret + } // end of method IntHolder::Check +} // end of class IntHolder diff --git a/tests/src/baseservices/compilerservices/modulector/moduleCctor.ilproj b/tests/src/baseservices/compilerservices/modulector/moduleCctor.ilproj new file mode 100644 index 0000000000..c846e02edb --- /dev/null +++ b/tests/src/baseservices/compilerservices/modulector/moduleCctor.ilproj @@ -0,0 +1,40 @@ + + + + + Debug + AnyCPU + $(MSBuildProjectName) + 2.0 + {95DFC527-4DC1-495E-97D7-E94EE1F7140D} + Library + Properties + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + $(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages + ..\..\ + 7a9bfb7d + + + + + + + + + False + + + + + + + + + + + + + + + diff --git a/tests/src/baseservices/compilerservices/modulector/runmoduleconstructor.cs b/tests/src/baseservices/compilerservices/modulector/runmoduleconstructor.cs new file mode 100644 index 0000000000..d1192f167a --- /dev/null +++ b/tests/src/baseservices/compilerservices/modulector/runmoduleconstructor.cs @@ -0,0 +1,38 @@ +// Licensed to the .NET Foundation under one or more 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.Reflection; +using System.IO; +using System.Runtime.Loader; +using System.Runtime.CompilerServices; +using System.Globalization; + +class RuntimeHelperTest +{ + public static int Main(string[] args) + { + AssemblyLoadContext resolver0 = AssemblyLoadContext.Default; + Assembly asm0 = resolver0.LoadFromAssemblyName(new AssemblyName("moduleCctor")); + Module mod = asm0.ManifestModule; + + RuntimeHelpers.RunModuleConstructor(mod.ModuleHandle); + var oType = asm0.GetType("IntHolder",true); + MethodInfo check = oType.GetMethod("Check"); + MethodInfo assign = oType.GetMethod("Assign"); + + object[] initial = {1}; + object[] final = {100}; + + check.Invoke(null, initial); + assign.Invoke(null, final); + check.Invoke(null, final); + RuntimeHelpers.RunModuleConstructor(mod.ModuleHandle); + check.Invoke(null, final); + + + return 100; + + } +} diff --git a/tests/src/baseservices/compilerservices/modulector/runmoduleconstructor.csproj b/tests/src/baseservices/compilerservices/modulector/runmoduleconstructor.csproj new file mode 100644 index 0000000000..fff05ea610 --- /dev/null +++ b/tests/src/baseservices/compilerservices/modulector/runmoduleconstructor.csproj @@ -0,0 +1,45 @@ + + + + + Debug + AnyCPU + 2.0 + {95DFC527-4DC1-495E-97D7-E94EE1F7140D} + Exe + Properties + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + $(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages + ..\..\ + 7a9bfb7d + true + BuildAndRun + + + + + + + + + False + + + + + + + + + + + + + + + + + + + diff --git a/tests/src/dir.common.props b/tests/src/dir.common.props index f1700f5e7d..d5de5794d0 100644 --- a/tests/src/dir.common.props +++ b/tests/src/dir.common.props @@ -40,7 +40,7 @@ $(__TestRootDir)\ $(BaseOutputPath)\$(OSPlatformConfig)\ $(BaseOutputPathWithConfig) - $(ProjectDir)\..\bin\tests\obj\$(OSPlatformConfig)\Managed + $(ProjectDir)\..\bin\tests\obj\$(OSPlatformConfig)\Managed\ $(__ManagedTestIntermediatesDir)\ <__NativeTestIntermediatesDir Condition="'$(__NativeTestIntermediatesDir)' == ''">$([System.IO.Path]::GetFullPath($(BaseOutputPathWithConfig)..\obj\$(BuildOS).$(Platform).$(Configuration)\Native\)) $(MSBuildProjectName)\ @@ -58,11 +58,6 @@ $(TestRuntimeProjectJsonDir)\project.lock.json - - - BuildAndRun - 0 - diff --git a/tests/src/dir.props b/tests/src/dir.props index 3b2754c221..e8cdfd4036 100644 --- a/tests/src/dir.props +++ b/tests/src/dir.props @@ -10,7 +10,6 @@ 78,162,164,168,169,219,251,252,414,429,642,649,652,675,1691,1717,1718,3001,3002,3003,3005,3008 false - BuildAndRun true $(MSBuildThisFileDirectory)TestWrappersConfig\ @@ -35,6 +34,7 @@ true win7-x64 + net45 @@ -69,6 +69,14 @@ true + + + + netcoreapp1.0 + $(DefaultTestTFM) + $(DefaultTestTFM) + + 2 @@ -77,5 +85,8 @@ $(SourceDir)Common\test_dependencies\project.json $(SourceDir)Common\test_dependencies\project.lock.json + + + .NETCoreApp,Version=v1.1 diff --git a/tests/src/dir.targets b/tests/src/dir.targets index 31d9304880..64b56667f3 100644 --- a/tests/src/dir.targets +++ b/tests/src/dir.targets @@ -1,8 +1,23 @@ + + + SharedLibrary + BuildAndRun + 0 + + + + + <_CLRTestCompilesSource>true + <_CLRTestNeedsToRun>false + false + <_CLRTestBuildsExecutable>false + + true @@ -28,14 +43,6 @@ <_CLRTestCompilesSource>false - - - <_CLRTestCompilesSource>true - <_CLRTestNeedsToRun>false - false - <_CLRTestBuildsExecutable>false - - @@ -80,11 +87,6 @@ - - - - - diff --git a/tests/src/jit/Directed/pinvoke/pinvoke-bug.cs b/tests/src/jit/Directed/pinvoke/pinvoke-bug.cs new file mode 100644 index 0000000000..2d4b5f6aea --- /dev/null +++ b/tests/src/jit/Directed/pinvoke/pinvoke-bug.cs @@ -0,0 +1,60 @@ +// Licensed to the .NET Foundation under one or more 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; + +// Test includes an intentional unreachable return +#pragma warning disable 162 + +namespace PInvokeTest +{ + internal class Test + { + [DllImport("msvcrt", EntryPoint = "sin")] + private static extern double sin(double x); + + private static double g; + private static bool b; + + public static int Main(string[] args) + { + bool result = false; + g = 0.0; + double val = 1.0; + b = false; + try + { + Func(val); + } + catch(Exception) + { + result = (Math.Abs(g - sin(val)) < 0.0001); + } + + return (result ? 100 : -1); + } + + // An inline pinvoke in a method with float math followed by a + // throw may causes trouble for liveness models for the inline + // frame var. + static double Func(double x) + { + g = sin(x); + + // A bit of control flow to throw off rareness detection + // Also we need float in here + if (b) + { + g = 0.0; + } + + throw new Exception(); + + // Deliberately unreachable return + return g; + } + } +} + diff --git a/tests/src/jit/Directed/pinvoke/pinvoke-bug.csproj b/tests/src/jit/Directed/pinvoke/pinvoke-bug.csproj new file mode 100644 index 0000000000..2f8a24638b --- /dev/null +++ b/tests/src/jit/Directed/pinvoke/pinvoke-bug.csproj @@ -0,0 +1,44 @@ + + + + + Debug + AnyCPU + $(MSBuildProjectName) + 2.0 + {95DFC527-4DC1-495E-97D7-E94EE1F7140D} + Exe + Properties + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + $(ProgramFiles)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages + ..\..\ + 7a9bfb7d + + + + + + + + + False + + + + PdbOnly + + + + + + + + + $(JitPackagesConfigFileDirectory)minimal\project.json + $(JitPackagesConfigFileDirectory)minimal\project.lock.json + + + + + \ No newline at end of file diff --git a/tests/src/performance/perflab/BlockCopyPerf.cs b/tests/src/performance/perflab/BlockCopyPerf.cs index 076d436558..5259d10530 100644 --- a/tests/src/performance/perflab/BlockCopyPerf.cs +++ b/tests/src/performance/perflab/BlockCopyPerf.cs @@ -5,21 +5,24 @@ using Microsoft.Xunit.Performance; using System; using Xunit; -public class BlockCopyPerf +namespace PerfLabTests { - [Benchmark(InnerIterationCount=1000000)] - [InlineData(0)] - [InlineData(10)] - [InlineData(100)] - [InlineData(1000)] - public static void CallBlockCopy(int numElements) + public class BlockCopyPerf { - byte[] bytes = new byte[numElements * 2]; - Buffer.BlockCopy(bytes, 0, bytes, numElements, numElements); + [Benchmark(InnerIterationCount = 1000000)] + [InlineData(0)] + [InlineData(10)] + [InlineData(100)] + [InlineData(1000)] + public static void CallBlockCopy(int numElements) + { + byte[] bytes = new byte[numElements * 2]; + Buffer.BlockCopy(bytes, 0, bytes, numElements, numElements); - foreach (var iteration in Benchmark.Iterations) - using (iteration.StartMeasurement()) - for(int i=0; i : IMyInterface1 { } - -public class CastingPerf -{ - public const int NUM_ARRAY_ELEMENTS = 100; - - public static int[] j; - public static int[] k; - public static Foo[] foo; - public static Foo2[] foo2; - public static Foo[] n; - public static Foo_5[] foo_5; - public static FooSVT[] svt; - public static FooORVT[] orvt; - - public static Object o; - public static Object[] o_ar; - public static Foo[] f; - public static IFoo[] ifo; - public static IFoo_5[] if_5; - - static CastingPerf() + public interface IFoo { - j = new int[NUM_ARRAY_ELEMENTS]; - for (int i = 0; i < j.Length; i++) - { - j[i] = i; - } - foo = new Foo[NUM_ARRAY_ELEMENTS]; - for (int i = 0; i < foo.Length; i++) - { - foo[i] = new Foo(); - } - foo2 = new Foo2[NUM_ARRAY_ELEMENTS]; - for (int i = 0; i < foo2.Length; i++) - { - foo2[i] = new Foo2(); - } - n = new Foo[NUM_ARRAY_ELEMENTS]; - foo_5 = new Foo_5[NUM_ARRAY_ELEMENTS]; - for (int i = 0; i < foo_5.Length; i++) - { - foo_5[i] = new Foo_5(); - } - svt = new FooSVT[NUM_ARRAY_ELEMENTS]; - orvt = new FooORVT[NUM_ARRAY_ELEMENTS]; } - [Benchmark(InnerIterationCount=100000)] - public static void ObjFooIsObj() + public interface IFoo_1 { - foreach (var iteration in Benchmark.Iterations) - using (iteration.StartMeasurement()) - for (int i = 0; i < Benchmark.InnerIterationCount; i++) - o = foo; } - [Benchmark(InnerIterationCount=100000)] - public static void ObjFooIsObj2() + public interface IFoo_2 { - foreach (var iteration in Benchmark.Iterations) - using (iteration.StartMeasurement()) - for (int i = 0; i < Benchmark.InnerIterationCount; i++) - o_ar = foo; } - [Benchmark(InnerIterationCount=100000)] - public static void ObjObjIsFoo() + public interface IFoo_3 { - o = foo; - - foreach (var iteration in Benchmark.Iterations) - using (iteration.StartMeasurement()) - for (int i = 0; i < Benchmark.InnerIterationCount; i++) - o_ar = (Object[])o; } - [Benchmark(InnerIterationCount=100000)] - public static void FooObjIsFoo() + public interface IFoo_4 { - o = foo; - - foreach (var iteration in Benchmark.Iterations) - using (iteration.StartMeasurement()) - for (int i = 0; i < Benchmark.InnerIterationCount; i++) - f = (Foo[])o; } - [Benchmark(InnerIterationCount=100000)] - public static void FooObjIsFoo2() + public interface IFoo_5 { - o_ar = foo; - - foreach (var iteration in Benchmark.Iterations) - using (iteration.StartMeasurement()) - for (int i = 0; i < Benchmark.InnerIterationCount; i++) - f = (Foo[])o_ar; } - [Benchmark(InnerIterationCount=100000)] - public static void FooObjIsNull() + // C# lays the interfaces in reverse order in metadata. So IFoo is the first and IFoo_5 is last + public class Foo : IFoo_5, IFoo_4, IFoo_3, IFoo_2, IFoo_1, IFoo { - foreach (var iteration in Benchmark.Iterations) - using (iteration.StartMeasurement()) - for (int i = 0; i < Benchmark.InnerIterationCount; i++) - o = (Foo[])n; + public int m_i; } - [Benchmark(InnerIterationCount=100000)] - public static void FooObjIsDescendant() + public class Foo_1 : Foo { - o = foo_5; - - foreach (var iteration in Benchmark.Iterations) - using (iteration.StartMeasurement()) - for (int i = 0; i < Benchmark.InnerIterationCount; i++) - f = (Foo[])o; + public int m_j; } - [Benchmark(InnerIterationCount=100000)] - public static void IFooFooIsIFoo() + public class Foo_2 : Foo_1 { - foreach (var iteration in Benchmark.Iterations) - using (iteration.StartMeasurement()) - for (int i = 0; i < Benchmark.InnerIterationCount; i++) - ifo = foo; + public int m_k; } - [Benchmark(InnerIterationCount=100000)] - public static void IFooObjIsIFoo() + public class Foo_3 : Foo_2 { - o = foo; - - foreach (var iteration in Benchmark.Iterations) - using (iteration.StartMeasurement()) - for (int i = 0; i < Benchmark.InnerIterationCount; i++) - ifo = (IFoo[])o; + public int m_l; } - [Benchmark(InnerIterationCount=100000)] - public static void IFooObjIsIFooInterAlia() + public class Foo_4 : Foo_3 { - o = foo2; - - foreach (var iteration in Benchmark.Iterations) - using (iteration.StartMeasurement()) - for (int i = 0; i < Benchmark.InnerIterationCount; i++) - if_5 = (IFoo_5[])o; + public int m_m; } - [Benchmark(InnerIterationCount=100000)] - public static void IFooObjIsDescendantOfIFoo() + public class Foo_5 : Foo_4 { - o = foo_5; - - foreach (var iteration in Benchmark.Iterations) - using (iteration.StartMeasurement()) - for (int i = 0; i < Benchmark.InnerIterationCount; i++) - ifo = (IFoo[])o; + public int m_n; } - [Benchmark(InnerIterationCount=100000)] - public static void ObjInt() + // C# lays the interfaces in reverse order in metadata. So IFoo_1 is the first and IFoo is last + public class Foo2 : IFoo, IFoo_5, IFoo_4, IFoo_3, IFoo_2, IFoo_1 { - foreach (var iteration in Benchmark.Iterations) - using (iteration.StartMeasurement()) - for (int i = 0; i < Benchmark.InnerIterationCount; i++) - o = (Object)j; + public int m_i; } - [Benchmark(InnerIterationCount=100000)] - public static void IntObj() + public struct FooSVT { - o = (Object)j; - - foreach (var iteration in Benchmark.Iterations) - using (iteration.StartMeasurement()) - for (int i = 0; i < Benchmark.InnerIterationCount; i++) - k = (int[])o; + public int m_i; + public int m_j; } - [Benchmark(InnerIterationCount=100000)] - public static void ObjScalarValueType() + public struct FooORVT { - foreach (var iteration in Benchmark.Iterations) - using (iteration.StartMeasurement()) - for (int i = 0; i < Benchmark.InnerIterationCount; i++) - o = svt; + public Object m_o; + public Foo m_f; } - [Benchmark(InnerIterationCount=100000)] - public static void ScalarValueTypeObj() + public interface IMyInterface1 { } + public interface IMyInterface2 { } + public class MyClass1 : IMyInterface1 { } + public class MyClass2 : IMyInterface2 { } + public class MyClass4 : IMyInterface1 { } + + public class CastingPerf { - o = svt; + public const int NUM_ARRAY_ELEMENTS = 100; + + public static int[] j; + public static int[] k; + public static Foo[] foo; + public static Foo2[] foo2; + public static Foo[] n; + public static Foo_5[] foo_5; + public static FooSVT[] svt; + public static FooORVT[] orvt; + + public static Object o; + public static Object[] o_ar; + public static Foo[] f; + public static IFoo[] ifo; + public static IFoo_5[] if_5; + + static CastingPerf() + { + j = new int[NUM_ARRAY_ELEMENTS]; + for (int i = 0; i < j.Length; i++) + { + j[i] = i; + } + foo = new Foo[NUM_ARRAY_ELEMENTS]; + for (int i = 0; i < foo.Length; i++) + { + foo[i] = new Foo(); + } + foo2 = new Foo2[NUM_ARRAY_ELEMENTS]; + for (int i = 0; i < foo2.Length; i++) + { + foo2[i] = new Foo2(); + } + n = new Foo[NUM_ARRAY_ELEMENTS]; + foo_5 = new Foo_5[NUM_ARRAY_ELEMENTS]; + for (int i = 0; i < foo_5.Length; i++) + { + foo_5[i] = new Foo_5(); + } + svt = new FooSVT[NUM_ARRAY_ELEMENTS]; + orvt = new FooORVT[NUM_ARRAY_ELEMENTS]; + } - foreach (var iteration in Benchmark.Iterations) - using (iteration.StartMeasurement()) - for (int i = 0; i < Benchmark.InnerIterationCount; i++) - svt = (FooSVT[])o; - } + [Benchmark(InnerIterationCount = 100000)] + public static void ObjFooIsObj() + { + foreach (var iteration in Benchmark.Iterations) + using (iteration.StartMeasurement()) + for (int i = 0; i < Benchmark.InnerIterationCount; i++) + o = foo; + } - [Benchmark(InnerIterationCount=100000)] - public static void ObjObjrefValueType() - { - foreach (var iteration in Benchmark.Iterations) - using (iteration.StartMeasurement()) - for (int i = 0; i < Benchmark.InnerIterationCount; i++) - o = (Object)orvt; - } + [Benchmark(InnerIterationCount = 100000)] + public static void ObjFooIsObj2() + { + foreach (var iteration in Benchmark.Iterations) + using (iteration.StartMeasurement()) + for (int i = 0; i < Benchmark.InnerIterationCount; i++) + o_ar = foo; + } - [Benchmark(InnerIterationCount=100000)] - public static void ObjrefValueTypeObj() - { - o = (Object)orvt; + [Benchmark(InnerIterationCount = 100000)] + public static void ObjObjIsFoo() + { + o = foo; - foreach (var iteration in Benchmark.Iterations) - using (iteration.StartMeasurement()) - for (int i = 0; i < Benchmark.InnerIterationCount; i++) - orvt = (FooORVT[])o; - } + foreach (var iteration in Benchmark.Iterations) + using (iteration.StartMeasurement()) + for (int i = 0; i < Benchmark.InnerIterationCount; i++) + o_ar = (Object[])o; + } - [Benchmark(InnerIterationCount=100000)] - public static void FooObjCastIfIsa() - { - o = foo; + [Benchmark(InnerIterationCount = 100000)] + public static void FooObjIsFoo() + { + o = foo; - foreach (var iteration in Benchmark.Iterations) - using (iteration.StartMeasurement()) - for (int i = 0; i < Benchmark.InnerIterationCount; i++) - if (o is Foo[]) + foreach (var iteration in Benchmark.Iterations) + using (iteration.StartMeasurement()) + for (int i = 0; i < Benchmark.InnerIterationCount; i++) f = (Foo[])o; - } + } - [Benchmark(InnerIterationCount=100000)] - public static bool CheckObjIsInterfaceYes() - { - bool res = false; - Object obj = new MyClass1(); - foreach (var iteration in Benchmark.Iterations) - using (iteration.StartMeasurement()) - for (int i = 0; i < Benchmark.InnerIterationCount; i++) - res = obj is IMyInterface1; - return res; - } + [Benchmark(InnerIterationCount = 100000)] + public static void FooObjIsFoo2() + { + o_ar = foo; - [Benchmark(InnerIterationCount=100000)] - public static bool CheckObjIsInterfaceNo() - { - bool res = false; - Object obj = new MyClass2(); - foreach (var iteration in Benchmark.Iterations) - using (iteration.StartMeasurement()) - for (int i = 0; i < Benchmark.InnerIterationCount; i++) - res = obj is IMyInterface1; - return res; - } + foreach (var iteration in Benchmark.Iterations) + using (iteration.StartMeasurement()) + for (int i = 0; i < Benchmark.InnerIterationCount; i++) + f = (Foo[])o_ar; + } - [Benchmark(InnerIterationCount=100000)] - public static bool CheckIsInstAnyIsInterfaceYes() - { - bool res = false; - Object obj = new MyClass4>(); - foreach (var iteration in Benchmark.Iterations) - using (iteration.StartMeasurement()) - for (int i = 0; i < Benchmark.InnerIterationCount; i++) - res = obj is IMyInterface1; - return res; - } + [Benchmark(InnerIterationCount = 100000)] + public static void FooObjIsNull() + { + foreach (var iteration in Benchmark.Iterations) + using (iteration.StartMeasurement()) + for (int i = 0; i < Benchmark.InnerIterationCount; i++) + o = (Foo[])n; + } - [Benchmark(InnerIterationCount=100000)] - public static bool CheckIsInstAnyIsInterfaceNo() - { - bool res = false; - Object obj = new MyClass4>(); - foreach (var iteration in Benchmark.Iterations) - using (iteration.StartMeasurement()) - for (int i = 0; i < Benchmark.InnerIterationCount; i++) - res = obj is IMyInterface2; - return res; - } + [Benchmark(InnerIterationCount = 100000)] + public static void FooObjIsDescendant() + { + o = foo_5; - [Benchmark(InnerIterationCount=100000)] - public static bool CheckArrayIsInterfaceYes() - { - bool res = false; - Object[] arr = new MyClass1[5]; - foreach (var iteration in Benchmark.Iterations) - using (iteration.StartMeasurement()) - for (int i = 0; i < Benchmark.InnerIterationCount; i++) - res = arr is IMyInterface1[]; - return res; - } + foreach (var iteration in Benchmark.Iterations) + using (iteration.StartMeasurement()) + for (int i = 0; i < Benchmark.InnerIterationCount; i++) + f = (Foo[])o; + } - [Benchmark(InnerIterationCount=100000)] - public static bool CheckArrayIsInterfaceNo() - { - bool res = false; - Object[] arr = new MyClass2[5]; - foreach (var iteration in Benchmark.Iterations) - using (iteration.StartMeasurement()) - for (int i = 0; i < Benchmark.InnerIterationCount; i++) - res = arr is IMyInterface1[]; - return res; + [Benchmark(InnerIterationCount = 100000)] + public static void IFooFooIsIFoo() + { + foreach (var iteration in Benchmark.Iterations) + using (iteration.StartMeasurement()) + for (int i = 0; i < Benchmark.InnerIterationCount; i++) + ifo = foo; + } + + [Benchmark(InnerIterationCount = 100000)] + public static void IFooObjIsIFoo() + { + o = foo; + + foreach (var iteration in Benchmark.Iterations) + using (iteration.StartMeasurement()) + for (int i = 0; i < Benchmark.InnerIterationCount; i++) + ifo = (IFoo[])o; + } + + [Benchmark(InnerIterationCount = 100000)] + public static void IFooObjIsIFooInterAlia() + { + o = foo2; + + foreach (var iteration in Benchmark.Iterations) + using (iteration.StartMeasurement()) + for (int i = 0; i < Benchmark.InnerIterationCount; i++) + if_5 = (IFoo_5[])o; + } + + [Benchmark(InnerIterationCount = 100000)] + public static void IFooObjIsDescendantOfIFoo() + { + o = foo_5; + + foreach (var iteration in Benchmark.Iterations) + using (iteration.StartMeasurement()) + for (int i = 0; i < Benchmark.InnerIterationCount; i++) + ifo = (IFoo[])o; + } + + [Benchmark(InnerIterationCount = 100000)] + public static void ObjInt() + { + foreach (var iteration in Benchmark.Iterations) + using (iteration.StartMeasurement()) + for (int i = 0; i < Benchmark.InnerIterationCount; i++) + o = (Object)j; + } + + [Benchmark(InnerIterationCount = 100000)] + public static void IntObj() + { + o = (Object)j; + + foreach (var iteration in Benchmark.Iterations) + using (iteration.StartMeasurement()) + for (int i = 0; i < Benchmark.InnerIterationCount; i++) + k = (int[])o; + } + + [Benchmark(InnerIterationCount = 100000)] + public static void ObjScalarValueType() + { + foreach (var iteration in Benchmark.Iterations) + using (iteration.StartMeasurement()) + for (int i = 0; i < Benchmark.InnerIterationCount; i++) + o = svt; + } + + [Benchmark(InnerIterationCount = 100000)] + public static void ScalarValueTypeObj() + { + o = svt; + + foreach (var iteration in Benchmark.Iterations) + using (iteration.StartMeasurement()) + for (int i = 0; i < Benchmark.InnerIterationCount; i++) + svt = (FooSVT[])o; + } + + [Benchmark(InnerIterationCount = 100000)] + public static void ObjObjrefValueType() + { + foreach (var iteration in Benchmark.Iterations) + using (iteration.StartMeasurement()) + for (int i = 0; i < Benchmark.InnerIterationCount; i++) + o = (Object)orvt; + } + + [Benchmark(InnerIterationCount = 100000)] + public static void ObjrefValueTypeObj() + { + o = (Object)orvt; + + foreach (var iteration in Benchmark.Iterations) + using (iteration.StartMeasurement()) + for (int i = 0; i < Benchmark.InnerIterationCount; i++) + orvt = (FooORVT[])o; + } + + [Benchmark(InnerIterationCount = 100000)] + public static void FooObjCastIfIsa() + { + o = foo; + + foreach (var iteration in Benchmark.Iterations) + using (iteration.StartMeasurement()) + for (int i = 0; i < Benchmark.InnerIterationCount; i++) + if (o is Foo[]) + f = (Foo[])o; + } + + [Benchmark(InnerIterationCount = 100000)] + public static bool CheckObjIsInterfaceYes() + { + bool res = false; + Object obj = new MyClass1(); + foreach (var iteration in Benchmark.Iterations) + using (iteration.StartMeasurement()) + for (int i = 0; i < Benchmark.InnerIterationCount; i++) + res = obj is IMyInterface1; + return res; + } + + [Benchmark(InnerIterationCount = 100000)] + public static bool CheckObjIsInterfaceNo() + { + bool res = false; + Object obj = new MyClass2(); + foreach (var iteration in Benchmark.Iterations) + using (iteration.StartMeasurement()) + for (int i = 0; i < Benchmark.InnerIterationCount; i++) + res = obj is IMyInterface1; + return res; + } + + [Benchmark(InnerIterationCount = 100000)] + public static bool CheckIsInstAnyIsInterfaceYes() + { + bool res = false; + Object obj = new MyClass4>(); + foreach (var iteration in Benchmark.Iterations) + using (iteration.StartMeasurement()) + for (int i = 0; i < Benchmark.InnerIterationCount; i++) + res = obj is IMyInterface1; + return res; + } + + [Benchmark(InnerIterationCount = 100000)] + public static bool CheckIsInstAnyIsInterfaceNo() + { + bool res = false; + Object obj = new MyClass4>(); + foreach (var iteration in Benchmark.Iterations) + using (iteration.StartMeasurement()) + for (int i = 0; i < Benchmark.InnerIterationCount; i++) + res = obj is IMyInterface2; + return res; + } + + [Benchmark(InnerIterationCount = 100000)] + public static bool CheckArrayIsInterfaceYes() + { + bool res = false; + Object[] arr = new MyClass1[5]; + foreach (var iteration in Benchmark.Iterations) + using (iteration.StartMeasurement()) + for (int i = 0; i < Benchmark.InnerIterationCount; i++) + res = arr is IMyInterface1[]; + return res; + } + + [Benchmark(InnerIterationCount = 100000)] + public static bool CheckArrayIsInterfaceNo() + { + bool res = false; + Object[] arr = new MyClass2[5]; + foreach (var iteration in Benchmark.Iterations) + using (iteration.StartMeasurement()) + for (int i = 0; i < Benchmark.InnerIterationCount; i++) + res = arr is IMyInterface1[]; + return res; + } } -} +} \ No newline at end of file diff --git a/tests/src/performance/perflab/CastingPerf2.cs b/tests/src/performance/perflab/CastingPerf2.cs index 1f874a56c3..82131ba493 100644 --- a/tests/src/performance/perflab/CastingPerf2.cs +++ b/tests/src/performance/perflab/CastingPerf2.cs @@ -2,10 +2,10 @@ // Licensed under the MIT license. See LICENSE file in the project root for full license information. using System; -using CastingPerf2; +using PerfLabTests.CastingPerf2; using Microsoft.Xunit.Performance; -namespace CastingPerf2 +namespace PerfLabTests.CastingPerf2 { public interface IFoo { @@ -95,7 +95,7 @@ namespace CastingPerf2 public static IFoo ifo, ifo1, ifo2, ifo3, ifo4, ifo5, ifo6, ifo7, ifo8, ifo9; public static IFoo_5 if_0, if_1, if_2, if_3, if_4, if_5, if_6, if_7, if_8, if_9; - [Benchmark(InnerIterationCount=200000)] + [Benchmark(InnerIterationCount = 200000)] public static void ObjFooIsObj() { foreach (var iteration in Benchmark.Iterations) @@ -104,7 +104,7 @@ namespace CastingPerf2 o = foo; } - [Benchmark(InnerIterationCount=200000)] + [Benchmark(InnerIterationCount = 200000)] public static void FooObjIsFoo() { o = foo; @@ -115,7 +115,7 @@ namespace CastingPerf2 f = (Foo)o; } - [Benchmark(InnerIterationCount=200000)] + [Benchmark(InnerIterationCount = 200000)] public static void FooObjIsNull() { foreach (var iteration in Benchmark.Iterations) @@ -124,7 +124,7 @@ namespace CastingPerf2 o = (Foo)n; } - [Benchmark(InnerIterationCount=100000)] + [Benchmark(InnerIterationCount = 100000)] public static void FooObjIsDescendant() { o = foo_5; @@ -135,7 +135,7 @@ namespace CastingPerf2 f = (Foo)o; } - [Benchmark(InnerIterationCount=200000)] + [Benchmark(InnerIterationCount = 200000)] public static void IFooFooIsIFoo() { foreach (var iteration in Benchmark.Iterations) @@ -144,7 +144,7 @@ namespace CastingPerf2 ifo = foo; } - [Benchmark(InnerIterationCount=100000)] + [Benchmark(InnerIterationCount = 100000)] public static void IFooObjIsIFoo() { o = foo; @@ -155,7 +155,7 @@ namespace CastingPerf2 ifo = (IFoo)o; } - [Benchmark(InnerIterationCount=100000)] + [Benchmark(InnerIterationCount = 100000)] public static void IFooObjIsIFooInterAlia() { o = foo2; @@ -166,7 +166,7 @@ namespace CastingPerf2 if_0 = (IFoo_5)o; } - [Benchmark(InnerIterationCount=100000)] + [Benchmark(InnerIterationCount = 100000)] public static void IFooObjIsDescendantOfIFoo() { o = foo_5; @@ -177,7 +177,7 @@ namespace CastingPerf2 ifo = (IFoo)o; } - [Benchmark(InnerIterationCount=100000)] + [Benchmark(InnerIterationCount = 100000)] public static void ObjInt() { foreach (var iteration in Benchmark.Iterations) @@ -186,7 +186,7 @@ namespace CastingPerf2 o = (Object)j; } - [Benchmark(InnerIterationCount=200000)] + [Benchmark(InnerIterationCount = 200000)] public static void IntObj() { o = (Object)1; @@ -197,7 +197,7 @@ namespace CastingPerf2 j = (int)o; } - [Benchmark(InnerIterationCount=100000)] + [Benchmark(InnerIterationCount = 100000)] public static void ObjScalarValueType() { foreach (var iteration in Benchmark.Iterations) @@ -206,7 +206,7 @@ namespace CastingPerf2 o = svt; } - [Benchmark(InnerIterationCount=300000)] + [Benchmark(InnerIterationCount = 300000)] public static void ScalarValueTypeObj() { o = svt; @@ -217,7 +217,7 @@ namespace CastingPerf2 svt = (FooSVT)o; } - [Benchmark(InnerIterationCount=100000)] + [Benchmark(InnerIterationCount = 100000)] public static void ObjObjrefValueType() { foreach (var iteration in Benchmark.Iterations) @@ -226,7 +226,7 @@ namespace CastingPerf2 o = (Object)orvt; } - [Benchmark(InnerIterationCount=200000)] + [Benchmark(InnerIterationCount = 200000)] public static void ObjrefValueTypeObj() { o = (Object)orvt; @@ -237,7 +237,7 @@ namespace CastingPerf2 orvt = (FooORVT)o; } - [Benchmark(InnerIterationCount=100000)] + [Benchmark(InnerIterationCount = 100000)] public static void FooObjCastIfIsa() { o = foo; diff --git a/tests/src/performance/perflab/DelegatePerf.cs b/tests/src/performance/perflab/DelegatePerf.cs index abc311a445..61f12a2dff 100644 --- a/tests/src/performance/perflab/DelegatePerf.cs +++ b/tests/src/performance/perflab/DelegatePerf.cs @@ -5,92 +5,96 @@ using Microsoft.Xunit.Performance; using System; using Xunit; -internal delegate long DelegateLong(Object obj, long x, long y); -internal delegate void MultiDelegate(Object obj, long x, long y); - -internal delegate int SerializeDelegate(); - -public class DelegatePerf +namespace PerfLabTests { - [Benchmark(InnerIterationCount=200000)] - public void DelegateInvoke() - { - DelegateLong dl = new DelegateLong(this.Invocable1); - Object obj = new Object(); - long ret = dl(obj, 100, 100); + internal delegate long DelegateLong(Object obj, long x, long y); + internal delegate void MultiDelegate(Object obj, long x, long y); - foreach (var iteration in Benchmark.Iterations) - using (iteration.StartMeasurement()) - for (int i = 0; i < Benchmark.InnerIterationCount; i++) - ret = dl(obj, 100, 100); - } + internal delegate int SerializeDelegate(); - [Benchmark(InnerIterationCount=1000)] - public void MulticastDelegateCombineInvoke() + public class DelegatePerf { - MultiDelegate md = null; - Object obj = new Object(); + [Benchmark(InnerIterationCount = 200000)] + public void DelegateInvoke() + { + DelegateLong dl = new DelegateLong(this.Invocable1); + Object obj = new Object(); + + long ret = dl(obj, 100, 100); - foreach (var iteration in Benchmark.Iterations) + foreach (var iteration in Benchmark.Iterations) + using (iteration.StartMeasurement()) + for (int i = 0; i < Benchmark.InnerIterationCount; i++) + ret = dl(obj, 100, 100); + } + + [Benchmark(InnerIterationCount = 1000)] + public void MulticastDelegateCombineInvoke() { - MultiDelegate md1 = new MultiDelegate(this.Invocable2); - MultiDelegate md2 = new MultiDelegate(this.Invocable2); - MultiDelegate md3 = new MultiDelegate(this.Invocable2); - MultiDelegate md4 = new MultiDelegate(this.Invocable2); - MultiDelegate md5 = new MultiDelegate(this.Invocable2); - MultiDelegate md6 = new MultiDelegate(this.Invocable2); - MultiDelegate md7 = new MultiDelegate(this.Invocable2); - MultiDelegate md8 = new MultiDelegate(this.Invocable2); - MultiDelegate md9 = new MultiDelegate(this.Invocable2); - MultiDelegate md10 = new MultiDelegate(this.Invocable2); - - using (iteration.StartMeasurement()) + MultiDelegate md = null; + Object obj = new Object(); + + foreach (var iteration in Benchmark.Iterations) { - for (int i = 0; i < Benchmark.InnerIterationCount; i++) + MultiDelegate md1 = new MultiDelegate(this.Invocable2); + MultiDelegate md2 = new MultiDelegate(this.Invocable2); + MultiDelegate md3 = new MultiDelegate(this.Invocable2); + MultiDelegate md4 = new MultiDelegate(this.Invocable2); + MultiDelegate md5 = new MultiDelegate(this.Invocable2); + MultiDelegate md6 = new MultiDelegate(this.Invocable2); + MultiDelegate md7 = new MultiDelegate(this.Invocable2); + MultiDelegate md8 = new MultiDelegate(this.Invocable2); + MultiDelegate md9 = new MultiDelegate(this.Invocable2); + MultiDelegate md10 = new MultiDelegate(this.Invocable2); + + using (iteration.StartMeasurement()) { - md = (MultiDelegate)Delegate.Combine(md1, md); - md = (MultiDelegate)Delegate.Combine(md2, md); - md = (MultiDelegate)Delegate.Combine(md3, md); - md = (MultiDelegate)Delegate.Combine(md4, md); - md = (MultiDelegate)Delegate.Combine(md5, md); - md = (MultiDelegate)Delegate.Combine(md6, md); - md = (MultiDelegate)Delegate.Combine(md7, md); - md = (MultiDelegate)Delegate.Combine(md8, md); - md = (MultiDelegate)Delegate.Combine(md9, md); - md = (MultiDelegate)Delegate.Combine(md10, md); + for (int i = 0; i < Benchmark.InnerIterationCount; i++) + { + md = (MultiDelegate)Delegate.Combine(md1, md); + md = (MultiDelegate)Delegate.Combine(md2, md); + md = (MultiDelegate)Delegate.Combine(md3, md); + md = (MultiDelegate)Delegate.Combine(md4, md); + md = (MultiDelegate)Delegate.Combine(md5, md); + md = (MultiDelegate)Delegate.Combine(md6, md); + md = (MultiDelegate)Delegate.Combine(md7, md); + md = (MultiDelegate)Delegate.Combine(md8, md); + md = (MultiDelegate)Delegate.Combine(md9, md); + md = (MultiDelegate)Delegate.Combine(md10, md); + } } } - } - md(obj, 100, 100); - } + md(obj, 100, 100); + } - [Benchmark(InnerIterationCount=10000)] - [InlineData(100)] - [InlineData(1000)] - public void MulticastDelegateInvoke(int length) - { - MultiDelegate md = null; - Object obj = new Object(); + [Benchmark(InnerIterationCount = 10000)] + [InlineData(100)] + [InlineData(1000)] + public void MulticastDelegateInvoke(int length) + { + MultiDelegate md = null; + Object obj = new Object(); - for (long i = 0; i < length; i++) - md = (MultiDelegate)Delegate.Combine(new MultiDelegate(this.Invocable2), md); + for (long i = 0; i < length; i++) + md = (MultiDelegate)Delegate.Combine(new MultiDelegate(this.Invocable2), md); - foreach (var iteration in Benchmark.Iterations) - using (iteration.StartMeasurement()) - for (int i = 0; i < Benchmark.InnerIterationCount; i++) - md(obj, 100, 100); - } + foreach (var iteration in Benchmark.Iterations) + using (iteration.StartMeasurement()) + for (int i = 0; i < Benchmark.InnerIterationCount; i++) + md(obj, 100, 100); + } - internal virtual long Invocable1(Object obj, long x, long y) - { - long i = x + y; - return x; - } + internal virtual long Invocable1(Object obj, long x, long y) + { + long i = x + y; + return x; + } - internal virtual void Invocable2(Object obj, long x, long y) - { - long i = x + y; + internal virtual void Invocable2(Object obj, long x, long y) + { + long i = x + y; + } } } diff --git a/tests/src/performance/perflab/EnumPerf.cs b/tests/src/performance/perflab/EnumPerf.cs index bf8d89b476..1e3a493686 100644 --- a/tests/src/performance/perflab/EnumPerf.cs +++ b/tests/src/performance/perflab/EnumPerf.cs @@ -6,71 +6,74 @@ using System; using System.Reflection; using Xunit; -public enum Color +namespace PerfLabTests { - Black, - White, - Red, - Brown, - Yellow, - Purple, - Orange -} - -public class EnumPerf -{ - [Benchmark(InnerIterationCount=300000)] - [InlineData(Color.Red)] - public static void EnumCompareTo(Color color) + public enum Color { - Color white = Color.White; - - foreach (var iteration in Benchmark.Iterations) - using (iteration.StartMeasurement()) - for (int i = 0; i < Benchmark.InnerIterationCount; i++) - color.CompareTo(white); + Black, + White, + Red, + Brown, + Yellow, + Purple, + Orange } - [Benchmark(InnerIterationCount=300000)] - public static Type ObjectGetType() + public class EnumPerf { - Type tmp = null; - Color black = Color.Black; + [Benchmark(InnerIterationCount = 300000)] + [InlineData(Color.Red)] + public static void EnumCompareTo(Color color) + { + Color white = Color.White; - foreach (var iteration in Benchmark.Iterations) - using (iteration.StartMeasurement()) - for (int i = 0; i < Benchmark.InnerIterationCount; i++) - tmp = black.GetType(); + foreach (var iteration in Benchmark.Iterations) + using (iteration.StartMeasurement()) + for (int i = 0; i < Benchmark.InnerIterationCount; i++) + color.CompareTo(white); + } - return tmp; - } + [Benchmark(InnerIterationCount = 300000)] + public static Type ObjectGetType() + { + Type tmp = null; + Color black = Color.Black; - [Benchmark(InnerIterationCount=300000)] - public static Type ObjectGetTypeNoBoxing() - { - Type tmp = null; - object black = Color.Black; + foreach (var iteration in Benchmark.Iterations) + using (iteration.StartMeasurement()) + for (int i = 0; i < Benchmark.InnerIterationCount; i++) + tmp = black.GetType(); - foreach (var iteration in Benchmark.Iterations) - using (iteration.StartMeasurement()) - for (int i = 0; i < Benchmark.InnerIterationCount; i++) - tmp = black.GetType(); + return tmp; + } - return tmp; - } + [Benchmark(InnerIterationCount = 300000)] + public static Type ObjectGetTypeNoBoxing() + { + Type tmp = null; + object black = Color.Black; - [Benchmark(InnerIterationCount=300000)] - public static bool EnumEquals() - { - Color black = Color.Black; - Color white = Color.White; - bool tmp = false; + foreach (var iteration in Benchmark.Iterations) + using (iteration.StartMeasurement()) + for (int i = 0; i < Benchmark.InnerIterationCount; i++) + tmp = black.GetType(); + + return tmp; + } + + [Benchmark(InnerIterationCount = 300000)] + public static bool EnumEquals() + { + Color black = Color.Black; + Color white = Color.White; + bool tmp = false; - foreach (var iteration in Benchmark.Iterations) - using (iteration.StartMeasurement()) - for (int i = 0; i < Benchmark.InnerIterationCount; i++) - tmp = black.Equals(white); + foreach (var iteration in Benchmark.Iterations) + using (iteration.StartMeasurement()) + for (int i = 0; i < Benchmark.InnerIterationCount; i++) + tmp = black.Equals(white); - return tmp; + return tmp; + } } } diff --git a/tests/src/performance/perflab/LowLevelPerf.cs b/tests/src/performance/perflab/LowLevelPerf.cs index 30c6734d45..a1f1a40c21 100644 --- a/tests/src/performance/perflab/LowLevelPerf.cs +++ b/tests/src/performance/perflab/LowLevelPerf.cs @@ -7,796 +7,799 @@ using System.Collections.Generic; using System.Threading; using System.Runtime.CompilerServices; -public class LowLevelPerf +namespace PerfLabTests { - [Benchmark(InnerIterationCount=100000)] - public static void EmptyStaticFunction() + public class LowLevelPerf { - foreach (var iteration in Benchmark.Iterations) + [Benchmark(InnerIterationCount = 100000)] + public static void EmptyStaticFunction() { - using (iteration.StartMeasurement()) + foreach (var iteration in Benchmark.Iterations) { - for (int i = 0; i < Benchmark.InnerIterationCount; i++) + using (iteration.StartMeasurement()) { - Class.EmptyStaticFunction(); - Class.EmptyStaticFunction(); - Class.EmptyStaticFunction(); - Class.EmptyStaticFunction(); - Class.EmptyStaticFunction(); - Class.EmptyStaticFunction(); - Class.EmptyStaticFunction(); - Class.EmptyStaticFunction(); - Class.EmptyStaticFunction(); - Class.EmptyStaticFunction(); + for (int i = 0; i < Benchmark.InnerIterationCount; i++) + { + Class.EmptyStaticFunction(); + Class.EmptyStaticFunction(); + Class.EmptyStaticFunction(); + Class.EmptyStaticFunction(); + Class.EmptyStaticFunction(); + Class.EmptyStaticFunction(); + Class.EmptyStaticFunction(); + Class.EmptyStaticFunction(); + Class.EmptyStaticFunction(); + Class.EmptyStaticFunction(); + } } } } - } - [Benchmark(InnerIterationCount=100000)] - public static void EmptyStaticFunction5Arg() - { - foreach (var iteration in Benchmark.Iterations) + [Benchmark(InnerIterationCount = 100000)] + public static void EmptyStaticFunction5Arg() { - using (iteration.StartMeasurement()) + foreach (var iteration in Benchmark.Iterations) { - for (int i = 0; i < Benchmark.InnerIterationCount; i++) + using (iteration.StartMeasurement()) { - Class.EmptyStaticFunction5Arg(1, 2, 3, 4, 5); - Class.EmptyStaticFunction5Arg(1, 2, 3, 4, 5); - Class.EmptyStaticFunction5Arg(1, 2, 3, 4, 5); - Class.EmptyStaticFunction5Arg(1, 2, 3, 4, 5); - Class.EmptyStaticFunction5Arg(1, 2, 3, 4, 5); - Class.EmptyStaticFunction5Arg(1, 2, 3, 4, 5); - Class.EmptyStaticFunction5Arg(1, 2, 3, 4, 5); - Class.EmptyStaticFunction5Arg(1, 2, 3, 4, 5); - Class.EmptyStaticFunction5Arg(1, 2, 3, 4, 5); - Class.EmptyStaticFunction5Arg(1, 2, 3, 4, 5); + for (int i = 0; i < Benchmark.InnerIterationCount; i++) + { + Class.EmptyStaticFunction5Arg(1, 2, 3, 4, 5); + Class.EmptyStaticFunction5Arg(1, 2, 3, 4, 5); + Class.EmptyStaticFunction5Arg(1, 2, 3, 4, 5); + Class.EmptyStaticFunction5Arg(1, 2, 3, 4, 5); + Class.EmptyStaticFunction5Arg(1, 2, 3, 4, 5); + Class.EmptyStaticFunction5Arg(1, 2, 3, 4, 5); + Class.EmptyStaticFunction5Arg(1, 2, 3, 4, 5); + Class.EmptyStaticFunction5Arg(1, 2, 3, 4, 5); + Class.EmptyStaticFunction5Arg(1, 2, 3, 4, 5); + Class.EmptyStaticFunction5Arg(1, 2, 3, 4, 5); + } } } } - } - - [Benchmark(InnerIterationCount=100000)] - public static void EmptyInstanceFunction() - { - Class aClass = new Class(); - foreach (var iteration in Benchmark.Iterations) + [Benchmark(InnerIterationCount = 100000)] + public static void EmptyInstanceFunction() { - using (iteration.StartMeasurement()) + Class aClass = new Class(); + + foreach (var iteration in Benchmark.Iterations) { - for (int i = 0; i < Benchmark.InnerIterationCount; i++) + using (iteration.StartMeasurement()) { - aClass.EmptyInstanceFunction(); - aClass.EmptyInstanceFunction(); - aClass.EmptyInstanceFunction(); - aClass.EmptyInstanceFunction(); - aClass.EmptyInstanceFunction(); - aClass.EmptyInstanceFunction(); - aClass.EmptyInstanceFunction(); - aClass.EmptyInstanceFunction(); - aClass.EmptyInstanceFunction(); - aClass.EmptyInstanceFunction(); + for (int i = 0; i < Benchmark.InnerIterationCount; i++) + { + aClass.EmptyInstanceFunction(); + aClass.EmptyInstanceFunction(); + aClass.EmptyInstanceFunction(); + aClass.EmptyInstanceFunction(); + aClass.EmptyInstanceFunction(); + aClass.EmptyInstanceFunction(); + aClass.EmptyInstanceFunction(); + aClass.EmptyInstanceFunction(); + aClass.EmptyInstanceFunction(); + aClass.EmptyInstanceFunction(); + } } } } - } - [Benchmark(InnerIterationCount=100000)] - public static void InterfaceInterfaceMethod() - { - AnInterface aInterface = new Class(); - - foreach (var iteration in Benchmark.Iterations) + [Benchmark(InnerIterationCount = 100000)] + public static void InterfaceInterfaceMethod() { - using (iteration.StartMeasurement()) + AnInterface aInterface = new Class(); + + foreach (var iteration in Benchmark.Iterations) { - for (int i = 0; i < Benchmark.InnerIterationCount; i++) + using (iteration.StartMeasurement()) { - CallInterfaceMethod(aInterface); - CallInterfaceMethod(aInterface); - CallInterfaceMethod(aInterface); - CallInterfaceMethod(aInterface); - CallInterfaceMethod(aInterface); - CallInterfaceMethod(aInterface); - CallInterfaceMethod(aInterface); - CallInterfaceMethod(aInterface); - CallInterfaceMethod(aInterface); - CallInterfaceMethod(aInterface); + for (int i = 0; i < Benchmark.InnerIterationCount; i++) + { + CallInterfaceMethod(aInterface); + CallInterfaceMethod(aInterface); + CallInterfaceMethod(aInterface); + CallInterfaceMethod(aInterface); + CallInterfaceMethod(aInterface); + CallInterfaceMethod(aInterface); + CallInterfaceMethod(aInterface); + CallInterfaceMethod(aInterface); + CallInterfaceMethod(aInterface); + CallInterfaceMethod(aInterface); + } } } } - } - [MethodImpl(MethodImplOptions.NoInlining)] - private static void CallInterfaceMethod(AnInterface aInterface) - { - aInterface.InterfaceMethod(); - } - - [Benchmark(InnerIterationCount=100000)] - public static void InterfaceInterfaceMethodLongHierarchy() - { - AnInterface aInterface = new LongHierarchyChildClass(); - - //generate all the not-used call site first - CallInterfaceMethod(new LongHierarchyClass1()); - CallInterfaceMethod(new LongHierarchyClass2()); - CallInterfaceMethod(new LongHierarchyClass3()); - CallInterfaceMethod(new LongHierarchyClass4()); - CallInterfaceMethod(new LongHierarchyClass5()); - CallInterfaceMethod(new LongHierarchyClass6()); - CallInterfaceMethod(new LongHierarchyClass7()); - CallInterfaceMethod(new LongHierarchyClass8()); - CallInterfaceMethod(new LongHierarchyClass9()); - CallInterfaceMethod(new LongHierarchyClass11()); - CallInterfaceMethod(new LongHierarchyClass12()); - - foreach (var iteration in Benchmark.Iterations) - using (iteration.StartMeasurement()) - for (int i = 0; i < Benchmark.InnerIterationCount; i++) - CallInterfaceMethod(aInterface); - } + [MethodImpl(MethodImplOptions.NoInlining)] + private static void CallInterfaceMethod(AnInterface aInterface) + { + aInterface.InterfaceMethod(); + } - [Benchmark(InnerIterationCount=100000)] - public static void InterfaceInterfaceMethodSwitchCallType() - { - AnInterface aInterface = new LongHierarchyChildClass(); - AnInterface aInterface1 = new LongHierarchyClass1(); + [Benchmark(InnerIterationCount = 100000)] + public static void InterfaceInterfaceMethodLongHierarchy() + { + AnInterface aInterface = new LongHierarchyChildClass(); + + //generate all the not-used call site first + CallInterfaceMethod(new LongHierarchyClass1()); + CallInterfaceMethod(new LongHierarchyClass2()); + CallInterfaceMethod(new LongHierarchyClass3()); + CallInterfaceMethod(new LongHierarchyClass4()); + CallInterfaceMethod(new LongHierarchyClass5()); + CallInterfaceMethod(new LongHierarchyClass6()); + CallInterfaceMethod(new LongHierarchyClass7()); + CallInterfaceMethod(new LongHierarchyClass8()); + CallInterfaceMethod(new LongHierarchyClass9()); + CallInterfaceMethod(new LongHierarchyClass11()); + CallInterfaceMethod(new LongHierarchyClass12()); + + foreach (var iteration in Benchmark.Iterations) + using (iteration.StartMeasurement()) + for (int i = 0; i < Benchmark.InnerIterationCount; i++) + CallInterfaceMethod(aInterface); + } - foreach (var iteration in Benchmark.Iterations) + [Benchmark(InnerIterationCount = 100000)] + public static void InterfaceInterfaceMethodSwitchCallType() { - using (iteration.StartMeasurement()) + AnInterface aInterface = new LongHierarchyChildClass(); + AnInterface aInterface1 = new LongHierarchyClass1(); + + foreach (var iteration in Benchmark.Iterations) { - for (int i = 0; i < Benchmark.InnerIterationCount; i++) + using (iteration.StartMeasurement()) { - CallInterfaceMethod(aInterface); - CallInterfaceMethod(aInterface1); + for (int i = 0; i < Benchmark.InnerIterationCount; i++) + { + CallInterfaceMethod(aInterface); + CallInterfaceMethod(aInterface1); + } } } } - } - [Benchmark(InnerIterationCount=100000)] - public static int ClassVirtualMethod() - { - SuperClass aClass = new Class(); + [Benchmark(InnerIterationCount = 100000)] + public static int ClassVirtualMethod() + { + SuperClass aClass = new Class(); - int x = 0; - foreach (var iteration in Benchmark.Iterations) - using (iteration.StartMeasurement()) - for (int i = 0; i < Benchmark.InnerIterationCount; i++) - x = aClass.VirtualMethod(); + int x = 0; + foreach (var iteration in Benchmark.Iterations) + using (iteration.StartMeasurement()) + for (int i = 0; i < Benchmark.InnerIterationCount; i++) + x = aClass.VirtualMethod(); - return x; - } + return x; + } - [Benchmark(InnerIterationCount=100000)] - public static void SealedClassInterfaceMethod() - { - SealedClass aSealedClass = new SealedClass(); + [Benchmark(InnerIterationCount = 100000)] + public static void SealedClassInterfaceMethod() + { + SealedClass aSealedClass = new SealedClass(); - foreach (var iteration in Benchmark.Iterations) - using (iteration.StartMeasurement()) - for (int i = 0; i < Benchmark.InnerIterationCount; i++) - aSealedClass.InterfaceMethod(); - } + foreach (var iteration in Benchmark.Iterations) + using (iteration.StartMeasurement()) + for (int i = 0; i < Benchmark.InnerIterationCount; i++) + aSealedClass.InterfaceMethod(); + } - [Benchmark(InnerIterationCount=100000)] - public static void StructWithInterfaceInterfaceMethod() - { - StructWithInterface aStructWithInterface = new StructWithInterface(); + [Benchmark(InnerIterationCount = 100000)] + public static void StructWithInterfaceInterfaceMethod() + { + StructWithInterface aStructWithInterface = new StructWithInterface(); - foreach (var iteration in Benchmark.Iterations) - using (iteration.StartMeasurement()) - for (int i = 0; i < Benchmark.InnerIterationCount; i++) - aStructWithInterface.InterfaceMethod(); - } + foreach (var iteration in Benchmark.Iterations) + using (iteration.StartMeasurement()) + for (int i = 0; i < Benchmark.InnerIterationCount; i++) + aStructWithInterface.InterfaceMethod(); + } - [Benchmark(InnerIterationCount=100000)] - public static void StaticIntPlus() - { - Class aClass = new Class(); + [Benchmark(InnerIterationCount = 100000)] + public static void StaticIntPlus() + { + Class aClass = new Class(); - foreach (var iteration in Benchmark.Iterations) - using (iteration.StartMeasurement()) - for (int i = 0; i < Benchmark.InnerIterationCount; i++) - Class.aStaticInt += 1; - } + foreach (var iteration in Benchmark.Iterations) + using (iteration.StartMeasurement()) + for (int i = 0; i < Benchmark.InnerIterationCount; i++) + Class.aStaticInt += 1; + } - [Benchmark(InnerIterationCount=100000)] - public static bool ObjectStringIsString() - { - object aObjectString = "aString1"; - bool b = false; + [Benchmark(InnerIterationCount = 100000)] + public static bool ObjectStringIsString() + { + object aObjectString = "aString1"; + bool b = false; - foreach (var iteration in Benchmark.Iterations) - using (iteration.StartMeasurement()) - for (int i = 0; i < Benchmark.InnerIterationCount; i++) - b = aObjectString is String; + foreach (var iteration in Benchmark.Iterations) + using (iteration.StartMeasurement()) + for (int i = 0; i < Benchmark.InnerIterationCount; i++) + b = aObjectString is String; - return b; - } + return b; + } - [Benchmark(InnerIterationCount=100000)] - public static void NewDelegateClassEmptyInstanceFn() - { - Class aClass = new Class(); - MyDelegate aMyDelegate; + [Benchmark(InnerIterationCount = 100000)] + public static void NewDelegateClassEmptyInstanceFn() + { + Class aClass = new Class(); + MyDelegate aMyDelegate; - foreach (var iteration in Benchmark.Iterations) - using (iteration.StartMeasurement()) - for (int i = 0; i < Benchmark.InnerIterationCount; i++) - aMyDelegate = new MyDelegate(aClass.EmptyInstanceFunction); - } + foreach (var iteration in Benchmark.Iterations) + using (iteration.StartMeasurement()) + for (int i = 0; i < Benchmark.InnerIterationCount; i++) + aMyDelegate = new MyDelegate(aClass.EmptyInstanceFunction); + } - [Benchmark(InnerIterationCount=100000)] - public static void NewDelegateClassEmptyStaticFn() - { - Class aClass = new Class(); - MyDelegate aMyDelegate; + [Benchmark(InnerIterationCount = 100000)] + public static void NewDelegateClassEmptyStaticFn() + { + Class aClass = new Class(); + MyDelegate aMyDelegate; - foreach (var iteration in Benchmark.Iterations) - using (iteration.StartMeasurement()) - for (int i = 0; i < Benchmark.InnerIterationCount; i++) - aMyDelegate = new MyDelegate(Class.EmptyStaticFunction); - } + foreach (var iteration in Benchmark.Iterations) + using (iteration.StartMeasurement()) + for (int i = 0; i < Benchmark.InnerIterationCount; i++) + aMyDelegate = new MyDelegate(Class.EmptyStaticFunction); + } - [Benchmark(InnerIterationCount=100000)] - public static void InstanceDelegate() - { - Class aClass = new Class(); - MyDelegate aInstanceDelegate = new MyDelegate(aClass.EmptyInstanceFunction); + [Benchmark(InnerIterationCount = 100000)] + public static void InstanceDelegate() + { + Class aClass = new Class(); + MyDelegate aInstanceDelegate = new MyDelegate(aClass.EmptyInstanceFunction); - foreach (var iteration in Benchmark.Iterations) - using (iteration.StartMeasurement()) - for (int i = 0; i < Benchmark.InnerIterationCount; i++) - aInstanceDelegate(); - } + foreach (var iteration in Benchmark.Iterations) + using (iteration.StartMeasurement()) + for (int i = 0; i < Benchmark.InnerIterationCount; i++) + aInstanceDelegate(); + } - [Benchmark(InnerIterationCount=100000)] - public static void StaticDelegate() - { - Class aClass = new Class(); - MyDelegate aStaticDelegate = new MyDelegate(Class.EmptyStaticFunction); + [Benchmark(InnerIterationCount = 100000)] + public static void StaticDelegate() + { + Class aClass = new Class(); + MyDelegate aStaticDelegate = new MyDelegate(Class.EmptyStaticFunction); - foreach (var iteration in Benchmark.Iterations) - using (iteration.StartMeasurement()) - for (int i = 0; i < Benchmark.InnerIterationCount; i++) - aStaticDelegate(); - } + foreach (var iteration in Benchmark.Iterations) + using (iteration.StartMeasurement()) + for (int i = 0; i < Benchmark.InnerIterationCount; i++) + aStaticDelegate(); + } - [Benchmark(InnerIterationCount=100000)] - public static void MeasureEvents() - { - Class aClass = new Class(); - aClass.AnEvent += new MyDelegate(aClass.EmptyInstanceFunction); + [Benchmark(InnerIterationCount = 100000)] + public static void MeasureEvents() + { + Class aClass = new Class(); + aClass.AnEvent += new MyDelegate(aClass.EmptyInstanceFunction); - foreach (var iteration in Benchmark.Iterations) - using (iteration.StartMeasurement()) - for (int i = 0; i < Benchmark.InnerIterationCount; i++) - aClass.MeasureFire100(); - } + foreach (var iteration in Benchmark.Iterations) + using (iteration.StartMeasurement()) + for (int i = 0; i < Benchmark.InnerIterationCount; i++) + aClass.MeasureFire100(); + } - [Benchmark(InnerIterationCount=100000)] - public static void GenericClassWithIntGenericInstanceField() - { - GenericClass aGenericClassWithInt = new GenericClass(); + [Benchmark(InnerIterationCount = 100000)] + public static void GenericClassWithIntGenericInstanceField() + { + GenericClass aGenericClassWithInt = new GenericClass(); - foreach (var iteration in Benchmark.Iterations) - using (iteration.StartMeasurement()) - for (int i = 0; i < Benchmark.InnerIterationCount; i++) - aGenericClassWithInt.aGenericInstanceFieldT = 1; - } + foreach (var iteration in Benchmark.Iterations) + using (iteration.StartMeasurement()) + for (int i = 0; i < Benchmark.InnerIterationCount; i++) + aGenericClassWithInt.aGenericInstanceFieldT = 1; + } - [Benchmark(InnerIterationCount=100000)] - public static void GenericClassGenericStaticField() - { - foreach (var iteration in Benchmark.Iterations) - using (iteration.StartMeasurement()) - for (int i = 0; i < Benchmark.InnerIterationCount; i++) - GenericClass.aGenericStaticFieldT = 1; - } + [Benchmark(InnerIterationCount = 100000)] + public static void GenericClassGenericStaticField() + { + foreach (var iteration in Benchmark.Iterations) + using (iteration.StartMeasurement()) + for (int i = 0; i < Benchmark.InnerIterationCount; i++) + GenericClass.aGenericStaticFieldT = 1; + } - [Benchmark(InnerIterationCount=100000)] - public static int GenericClassGenericInstanceMethod() - { - GenericClass aGenericClassWithInt = new GenericClass(); + [Benchmark(InnerIterationCount = 100000)] + public static int GenericClassGenericInstanceMethod() + { + GenericClass aGenericClassWithInt = new GenericClass(); - int x = 0; - foreach (var iteration in Benchmark.Iterations) - using (iteration.StartMeasurement()) - for (int i = 0; i < Benchmark.InnerIterationCount; i++) - x = aGenericClassWithInt.ClassGenericInstanceMethod(); + int x = 0; + foreach (var iteration in Benchmark.Iterations) + using (iteration.StartMeasurement()) + for (int i = 0; i < Benchmark.InnerIterationCount; i++) + x = aGenericClassWithInt.ClassGenericInstanceMethod(); - return x; - } + return x; + } - [Benchmark(InnerIterationCount=100000)] - public static int GenericClassGenericStaticMethod() - { - int x = 0; - foreach (var iteration in Benchmark.Iterations) - using (iteration.StartMeasurement()) - for (int i = 0; i < Benchmark.InnerIterationCount; i++) - x = GenericClass.ClassGenericStaticMethod(); + [Benchmark(InnerIterationCount = 100000)] + public static int GenericClassGenericStaticMethod() + { + int x = 0; + foreach (var iteration in Benchmark.Iterations) + using (iteration.StartMeasurement()) + for (int i = 0; i < Benchmark.InnerIterationCount; i++) + x = GenericClass.ClassGenericStaticMethod(); - return x; - } + return x; + } - [Benchmark(InnerIterationCount=100000)] - public static int GenericGenericMethod() - { - // Warmup - int x = 0; - foreach (var iteration in Benchmark.Iterations) - using (iteration.StartMeasurement()) - for (int i = 0; i < Benchmark.InnerIterationCount; i++) - x = Class.GenericMethod(); - - return x; - } + [Benchmark(InnerIterationCount = 100000)] + public static int GenericGenericMethod() + { + // Warmup + int x = 0; + foreach (var iteration in Benchmark.Iterations) + using (iteration.StartMeasurement()) + for (int i = 0; i < Benchmark.InnerIterationCount; i++) + x = Class.GenericMethod(); + + return x; + } - [Benchmark(InnerIterationCount=100000)] - public static void GenericClassWithSTringGenericInstanceMethod() - { - GenericClass aGenericClassWithString = new GenericClass(); - string aString = "foo"; + [Benchmark(InnerIterationCount = 100000)] + public static void GenericClassWithSTringGenericInstanceMethod() + { + GenericClass aGenericClassWithString = new GenericClass(); + string aString = "foo"; - foreach (var iteration in Benchmark.Iterations) - using (iteration.StartMeasurement()) - for (int i = 0; i < Benchmark.InnerIterationCount; i++) - aGenericClassWithString.aGenericInstanceFieldT = aString; - } + foreach (var iteration in Benchmark.Iterations) + using (iteration.StartMeasurement()) + for (int i = 0; i < Benchmark.InnerIterationCount; i++) + aGenericClassWithString.aGenericInstanceFieldT = aString; + } - [Benchmark(InnerIterationCount=100000)] - public static int ForeachOverList100Elements() - { - List iList = new List(); - for (int i = 0; i < 100; i++) - iList.Add(i); - - int iResult = 0; - foreach (var iteration in Benchmark.Iterations) - using (iteration.StartMeasurement()) - for (int i = 0; i < Benchmark.InnerIterationCount; i++) - foreach (int j in iList) - iResult = j; - - return iResult; - } + [Benchmark(InnerIterationCount = 100000)] + public static int ForeachOverList100Elements() + { + List iList = new List(); + for (int i = 0; i < 100; i++) + iList.Add(i); + + int iResult = 0; + foreach (var iteration in Benchmark.Iterations) + using (iteration.StartMeasurement()) + for (int i = 0; i < Benchmark.InnerIterationCount; i++) + foreach (int j in iList) + iResult = j; + + return iResult; + } - [Benchmark(InnerIterationCount=100000)] - public static Type TypeReflectionObjectGetType() - { - Type type = null; - object anObject = "aString"; + [Benchmark(InnerIterationCount = 100000)] + public static Type TypeReflectionObjectGetType() + { + Type type = null; + object anObject = "aString"; - foreach (var iteration in Benchmark.Iterations) - using (iteration.StartMeasurement()) - for (int i = 0; i < Benchmark.InnerIterationCount; i++) - type = anObject.GetType(); + foreach (var iteration in Benchmark.Iterations) + using (iteration.StartMeasurement()) + for (int i = 0; i < Benchmark.InnerIterationCount; i++) + type = anObject.GetType(); - return type; - } + return type; + } - [Benchmark(InnerIterationCount=100000)] - public static Type TypeReflectionArrayGetType() - { - Type type = null; - object anArray = new string[0]; + [Benchmark(InnerIterationCount = 100000)] + public static Type TypeReflectionArrayGetType() + { + Type type = null; + object anArray = new string[0]; - foreach (var iteration in Benchmark.Iterations) - using (iteration.StartMeasurement()) - for (int i = 0; i < Benchmark.InnerIterationCount; i++) - type = anArray.GetType(); + foreach (var iteration in Benchmark.Iterations) + using (iteration.StartMeasurement()) + for (int i = 0; i < Benchmark.InnerIterationCount; i++) + type = anArray.GetType(); - return type; - } + return type; + } - [Benchmark(InnerIterationCount=100000)] - public static string IntegerFormatting() - { - int number = Int32.MaxValue; + [Benchmark(InnerIterationCount = 100000)] + public static string IntegerFormatting() + { + int number = Int32.MaxValue; - string result = null; - foreach (var iteration in Benchmark.Iterations) - using (iteration.StartMeasurement()) - for (int i = 0; i < Benchmark.InnerIterationCount; i++) - result = number.ToString(); + string result = null; + foreach (var iteration in Benchmark.Iterations) + using (iteration.StartMeasurement()) + for (int i = 0; i < Benchmark.InnerIterationCount; i++) + result = number.ToString(); - return result; + return result; + } } -} -#region Support Classes -// classes and method needed to perform the experiments. + #region Support Classes + // classes and method needed to perform the experiments. -public interface AnInterface -{ - int InterfaceMethod(); -} - -public class SuperClass : AnInterface -{ - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)] - public virtual int InterfaceMethod() { return 2; } - - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)] - public virtual int VirtualMethod() + public interface AnInterface { - return 1; + int InterfaceMethod(); } -} -public struct ValueType -{ - public int x; - public int y; - public int z; -} + public class SuperClass : AnInterface + { + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)] + public virtual int InterfaceMethod() { return 2; } -public delegate int MyDelegate(); + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)] + public virtual int VirtualMethod() + { + return 1; + } + } -public struct StructWithInterface : AnInterface -{ - public int x; - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)] - public int InterfaceMethod() + public struct ValueType { - return x++; + public int x; + public int y; + public int z; } -} -public sealed class SealedClass : SuperClass -{ - public int aInstanceInt; - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)] - public override int VirtualMethod() + public delegate int MyDelegate(); + + public struct StructWithInterface : AnInterface { - return aInstanceInt++; + public int x; + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)] + public int InterfaceMethod() + { + return x++; + } } - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)] - public override int InterfaceMethod() + + public sealed class SealedClass : SuperClass { - return aInstanceInt++; + public int aInstanceInt; + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)] + public override int VirtualMethod() + { + return aInstanceInt++; + } + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)] + public override int InterfaceMethod() + { + return aInstanceInt++; + } } -} -/// -/// A example class. It inherits, overrides, has intefaces etc. -/// It excercises most of the common runtime features -/// -public class Class : SuperClass -{ - public event MyDelegate AnEvent; + /// + /// A example class. It inherits, overrides, has intefaces etc. + /// It excercises most of the common runtime features + /// + public class Class : SuperClass + { + public event MyDelegate AnEvent; - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)] - public override int VirtualMethod() { return aInstanceInt++; } + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)] + public override int VirtualMethod() { return aInstanceInt++; } - [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)] - public override int InterfaceMethod() { return aInstanceInt++; } + [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)] + public override int InterfaceMethod() { return aInstanceInt++; } - public int aInstanceInt; - public string aInstanceString; + public int aInstanceInt; + public string aInstanceString; - public static int aStaticInt; - public static string aStaticString = "Hello"; - public static ValueType aStaticValueType; + public static int aStaticInt; + public static string aStaticString = "Hello"; + public static ValueType aStaticValueType; - [MethodImpl(MethodImplOptions.NoInlining)] - public static int EmptyStaticFunction() - { - return aStaticInt++; - } - - [MethodImpl(MethodImplOptions.NoInlining)] - public static int EmptyStaticFunction5Arg(int arg1, int arg2, int arg3, int arg4, int arg5) - { - return aStaticInt++; - } + [MethodImpl(MethodImplOptions.NoInlining)] + public static int EmptyStaticFunction() + { + return aStaticInt++; + } - [MethodImpl(MethodImplOptions.NoInlining)] - public int EmptyInstanceFunction() - { - return aInstanceInt++; - } + [MethodImpl(MethodImplOptions.NoInlining)] + public static int EmptyStaticFunction5Arg(int arg1, int arg2, int arg3, int arg4, int arg5) + { + return aStaticInt++; + } - [MethodImpl(MethodImplOptions.NoInlining)] - public static int GenericMethod() - { - return aStaticInt++; - } + [MethodImpl(MethodImplOptions.NoInlining)] + public int EmptyInstanceFunction() + { + return aInstanceInt++; + } - public void MeasureFire100() - { - #region callAnEvent - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - AnEvent(); - //}); - #endregion - } -} + [MethodImpl(MethodImplOptions.NoInlining)] + public static int GenericMethod() + { + return aStaticInt++; + } -public class GenericClass -{ - [MethodImpl(MethodImplOptions.NoInlining)] - public T ClassGenericInstanceMethod() - { - tmp++; // need this to not be optimized away - return aGenericInstanceFieldT; + public void MeasureFire100() + { + #region callAnEvent + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + AnEvent(); + //}); + #endregion + } } - [MethodImpl(MethodImplOptions.NoInlining)] - public static T ClassGenericStaticMethod() + public class GenericClass { - sTmp++; // need this to not be optimized away - return aGenericStaticFieldT; - } + [MethodImpl(MethodImplOptions.NoInlining)] + public T ClassGenericInstanceMethod() + { + tmp++; // need this to not be optimized away + return aGenericInstanceFieldT; + } - public static int sTmp; - public int tmp; - public T aGenericInstanceFieldT; - public static T aGenericStaticFieldT; -} + [MethodImpl(MethodImplOptions.NoInlining)] + public static T ClassGenericStaticMethod() + { + sTmp++; // need this to not be optimized away + return aGenericStaticFieldT; + } -#region LongHierarchyClass -public class LongHierarchyClass1 : AnInterface -{ - [MethodImpl(MethodImplOptions.NoInlining)] - public virtual int InterfaceMethod() { return 2; } + public static int sTmp; + public int tmp; + public T aGenericInstanceFieldT; + public static T aGenericStaticFieldT; + } - [MethodImpl(MethodImplOptions.NoInlining)] - public virtual int VirtualMethod() + #region LongHierarchyClass + public class LongHierarchyClass1 : AnInterface { - return 1; - } -} + [MethodImpl(MethodImplOptions.NoInlining)] + public virtual int InterfaceMethod() { return 2; } -public class LongHierarchyClass2 : LongHierarchyClass1 -{ - [MethodImpl(MethodImplOptions.NoInlining)] - public override int InterfaceMethod() { return 2; } + [MethodImpl(MethodImplOptions.NoInlining)] + public virtual int VirtualMethod() + { + return 1; + } + } - [MethodImpl(MethodImplOptions.NoInlining)] - public override int VirtualMethod() + public class LongHierarchyClass2 : LongHierarchyClass1 { - return 1; - } -} + [MethodImpl(MethodImplOptions.NoInlining)] + public override int InterfaceMethod() { return 2; } -public class LongHierarchyClass3 : LongHierarchyClass2 -{ - [MethodImpl(MethodImplOptions.NoInlining)] - public override int InterfaceMethod() { return 2; } + [MethodImpl(MethodImplOptions.NoInlining)] + public override int VirtualMethod() + { + return 1; + } + } - [MethodImpl(MethodImplOptions.NoInlining)] - public override int VirtualMethod() + public class LongHierarchyClass3 : LongHierarchyClass2 { - return 1; - } -} + [MethodImpl(MethodImplOptions.NoInlining)] + public override int InterfaceMethod() { return 2; } -public class LongHierarchyClass4 : LongHierarchyClass3 -{ - [MethodImpl(MethodImplOptions.NoInlining)] - public override int InterfaceMethod() { return 2; } + [MethodImpl(MethodImplOptions.NoInlining)] + public override int VirtualMethod() + { + return 1; + } + } - [MethodImpl(MethodImplOptions.NoInlining)] - public override int VirtualMethod() + public class LongHierarchyClass4 : LongHierarchyClass3 { - return 1; - } -} + [MethodImpl(MethodImplOptions.NoInlining)] + public override int InterfaceMethod() { return 2; } -public class LongHierarchyClass5 : LongHierarchyClass4 -{ - [MethodImpl(MethodImplOptions.NoInlining)] - public override int InterfaceMethod() { return 2; } + [MethodImpl(MethodImplOptions.NoInlining)] + public override int VirtualMethod() + { + return 1; + } + } - [MethodImpl(MethodImplOptions.NoInlining)] - public override int VirtualMethod() + public class LongHierarchyClass5 : LongHierarchyClass4 { - return 1; - } -} + [MethodImpl(MethodImplOptions.NoInlining)] + public override int InterfaceMethod() { return 2; } -public class LongHierarchyClass6 : LongHierarchyClass5 -{ - [MethodImpl(MethodImplOptions.NoInlining)] - public override int InterfaceMethod() { return 2; } + [MethodImpl(MethodImplOptions.NoInlining)] + public override int VirtualMethod() + { + return 1; + } + } - [MethodImpl(MethodImplOptions.NoInlining)] - public override int VirtualMethod() + public class LongHierarchyClass6 : LongHierarchyClass5 { - return 1; - } -} + [MethodImpl(MethodImplOptions.NoInlining)] + public override int InterfaceMethod() { return 2; } -public class LongHierarchyClass7 : LongHierarchyClass6 -{ - [MethodImpl(MethodImplOptions.NoInlining)] - public override int InterfaceMethod() { return 2; } + [MethodImpl(MethodImplOptions.NoInlining)] + public override int VirtualMethod() + { + return 1; + } + } - [MethodImpl(MethodImplOptions.NoInlining)] - public override int VirtualMethod() + public class LongHierarchyClass7 : LongHierarchyClass6 { - return 1; - } -} + [MethodImpl(MethodImplOptions.NoInlining)] + public override int InterfaceMethod() { return 2; } -public class LongHierarchyClass8 : LongHierarchyClass7 -{ - [MethodImpl(MethodImplOptions.NoInlining)] - public override int InterfaceMethod() { return 2; } + [MethodImpl(MethodImplOptions.NoInlining)] + public override int VirtualMethod() + { + return 1; + } + } - [MethodImpl(MethodImplOptions.NoInlining)] - public override int VirtualMethod() + public class LongHierarchyClass8 : LongHierarchyClass7 { - return 1; - } -} + [MethodImpl(MethodImplOptions.NoInlining)] + public override int InterfaceMethod() { return 2; } -public class LongHierarchyClass9 : LongHierarchyClass8 -{ - [MethodImpl(MethodImplOptions.NoInlining)] - public override int InterfaceMethod() { return 2; } + [MethodImpl(MethodImplOptions.NoInlining)] + public override int VirtualMethod() + { + return 1; + } + } - [MethodImpl(MethodImplOptions.NoInlining)] - public override int VirtualMethod() + public class LongHierarchyClass9 : LongHierarchyClass8 { - return 1; - } -} + [MethodImpl(MethodImplOptions.NoInlining)] + public override int InterfaceMethod() { return 2; } -public class LongHierarchyClass10 : LongHierarchyClass9 -{ - [MethodImpl(MethodImplOptions.NoInlining)] - public override int InterfaceMethod() { return 2; } + [MethodImpl(MethodImplOptions.NoInlining)] + public override int VirtualMethod() + { + return 1; + } + } - [MethodImpl(MethodImplOptions.NoInlining)] - public override int VirtualMethod() + public class LongHierarchyClass10 : LongHierarchyClass9 { - return 1; - } -} + [MethodImpl(MethodImplOptions.NoInlining)] + public override int InterfaceMethod() { return 2; } -public class LongHierarchyClass11 : LongHierarchyClass10 -{ - [MethodImpl(MethodImplOptions.NoInlining)] - public override int InterfaceMethod() { return 2; } + [MethodImpl(MethodImplOptions.NoInlining)] + public override int VirtualMethod() + { + return 1; + } + } - [MethodImpl(MethodImplOptions.NoInlining)] - public override int VirtualMethod() + public class LongHierarchyClass11 : LongHierarchyClass10 { - return 1; - } -} + [MethodImpl(MethodImplOptions.NoInlining)] + public override int InterfaceMethod() { return 2; } -public class LongHierarchyClass12 : LongHierarchyClass11 -{ - [MethodImpl(MethodImplOptions.NoInlining)] - public override int InterfaceMethod() { return 2; } + [MethodImpl(MethodImplOptions.NoInlining)] + public override int VirtualMethod() + { + return 1; + } + } - [MethodImpl(MethodImplOptions.NoInlining)] - public override int VirtualMethod() + public class LongHierarchyClass12 : LongHierarchyClass11 { - return 1; - } -} + [MethodImpl(MethodImplOptions.NoInlining)] + public override int InterfaceMethod() { return 2; } -public class LongHierarchyChildClass : LongHierarchyClass12 -{ - [MethodImpl(MethodImplOptions.NoInlining)] - public override int InterfaceMethod() { return 2; } + [MethodImpl(MethodImplOptions.NoInlining)] + public override int VirtualMethod() + { + return 1; + } + } - [MethodImpl(MethodImplOptions.NoInlining)] - public override int VirtualMethod() + public class LongHierarchyChildClass : LongHierarchyClass12 { - return 1; + [MethodImpl(MethodImplOptions.NoInlining)] + public override int InterfaceMethod() { return 2; } + + [MethodImpl(MethodImplOptions.NoInlining)] + public override int VirtualMethod() + { + return 1; + } } -} -#endregion + #endregion -#endregion + #endregion +} diff --git a/tests/src/performance/perflab/ReflectionPerf.cs b/tests/src/performance/perflab/ReflectionPerf.cs index 954bbe7e92..03556c9f7b 100644 --- a/tests/src/performance/perflab/ReflectionPerf.cs +++ b/tests/src/performance/perflab/ReflectionPerf.cs @@ -8,3309 +8,3312 @@ using System.Threading; using Microsoft.Xunit.Performance; #pragma warning disable 67 -public class GetMember +namespace PerfLabTests { - // all these fields will be initialized in init, so that they can be used directly in invocation - private static readonly TypeInfo s_t1; - private static readonly TypeInfo s_t2; - private static readonly TypeInfo s_t3; - private static readonly TypeInfo s_t4; - private static readonly TypeInfo s_t5; - private static readonly TypeInfo s_t6; - private static readonly TypeInfo s_t7; - private static readonly TypeInfo s_t8; - private static readonly TypeInfo s_t9; - private static readonly TypeInfo s_t10; - private static readonly TypeInfo s_t11; - private static readonly TypeInfo s_t12; - private static readonly TypeInfo s_t13; - private static readonly TypeInfo s_t14; - private static readonly TypeInfo s_t15; - private static readonly TypeInfo s_t16; - private static readonly TypeInfo s_t17; - private static readonly TypeInfo s_t18; - private static readonly TypeInfo s_t19; - private static readonly TypeInfo s_t20; - - static GetMember() + public class GetMember { - s_t1 = typeof(Class1).GetTypeInfo(); - s_t2 = typeof(Class2).GetTypeInfo(); - s_t3 = typeof(Class3).GetTypeInfo(); - s_t4 = typeof(Class4).GetTypeInfo(); - s_t5 = typeof(Class5).GetTypeInfo(); - s_t6 = typeof(Class6).GetTypeInfo(); - s_t7 = typeof(Class7).GetTypeInfo(); - s_t8 = typeof(Class8).GetTypeInfo(); - s_t9 = typeof(Class9).GetTypeInfo(); - s_t10 = typeof(Class10).GetTypeInfo(); - s_t11 = typeof(Class11).GetTypeInfo(); - s_t12 = typeof(Class12).GetTypeInfo(); - s_t13 = typeof(Class13).GetTypeInfo(); - s_t14 = typeof(Class14).GetTypeInfo(); - s_t15 = typeof(Class15).GetTypeInfo(); - s_t16 = typeof(Class16).GetTypeInfo(); - s_t17 = typeof(Class17).GetTypeInfo(); - s_t18 = typeof(Class18).GetTypeInfo(); - s_t19 = typeof(Class19).GetTypeInfo(); - s_t20 = typeof(Class20).GetTypeInfo(); - } + // all these fields will be initialized in init, so that they can be used directly in invocation + private static readonly TypeInfo s_t1; + private static readonly TypeInfo s_t2; + private static readonly TypeInfo s_t3; + private static readonly TypeInfo s_t4; + private static readonly TypeInfo s_t5; + private static readonly TypeInfo s_t6; + private static readonly TypeInfo s_t7; + private static readonly TypeInfo s_t8; + private static readonly TypeInfo s_t9; + private static readonly TypeInfo s_t10; + private static readonly TypeInfo s_t11; + private static readonly TypeInfo s_t12; + private static readonly TypeInfo s_t13; + private static readonly TypeInfo s_t14; + private static readonly TypeInfo s_t15; + private static readonly TypeInfo s_t16; + private static readonly TypeInfo s_t17; + private static readonly TypeInfo s_t18; + private static readonly TypeInfo s_t19; + private static readonly TypeInfo s_t20; + + static GetMember() + { + s_t1 = typeof(Class1).GetTypeInfo(); + s_t2 = typeof(Class2).GetTypeInfo(); + s_t3 = typeof(Class3).GetTypeInfo(); + s_t4 = typeof(Class4).GetTypeInfo(); + s_t5 = typeof(Class5).GetTypeInfo(); + s_t6 = typeof(Class6).GetTypeInfo(); + s_t7 = typeof(Class7).GetTypeInfo(); + s_t8 = typeof(Class8).GetTypeInfo(); + s_t9 = typeof(Class9).GetTypeInfo(); + s_t10 = typeof(Class10).GetTypeInfo(); + s_t11 = typeof(Class11).GetTypeInfo(); + s_t12 = typeof(Class12).GetTypeInfo(); + s_t13 = typeof(Class13).GetTypeInfo(); + s_t14 = typeof(Class14).GetTypeInfo(); + s_t15 = typeof(Class15).GetTypeInfo(); + s_t16 = typeof(Class16).GetTypeInfo(); + s_t17 = typeof(Class17).GetTypeInfo(); + s_t18 = typeof(Class18).GetTypeInfo(); + s_t19 = typeof(Class19).GetTypeInfo(); + s_t20 = typeof(Class20).GetTypeInfo(); + } - [Benchmark(InnerIterationCount=1000)] - public static void GetField() - { - foreach (var iteration in Benchmark.Iterations) + [Benchmark(InnerIterationCount = 1000)] + public static void GetField() { - using (iteration.StartMeasurement()) + foreach (var iteration in Benchmark.Iterations) { - for (int i = 0; i < Benchmark.InnerIterationCount; i++) + using (iteration.StartMeasurement()) { - s_t1.GetDeclaredField("f1"); - s_t1.GetDeclaredField("f2"); - s_t1.GetDeclaredField("f3"); + for (int i = 0; i < Benchmark.InnerIterationCount; i++) + { + s_t1.GetDeclaredField("f1"); + s_t1.GetDeclaredField("f2"); + s_t1.GetDeclaredField("f3"); + } } } } - } - [Benchmark(InnerIterationCount=1000)] - public static void GetMethod1() - { - foreach (var iteration in Benchmark.Iterations) + [Benchmark(InnerIterationCount = 1000)] + public static void GetMethod1() { - using (iteration.StartMeasurement()) + foreach (var iteration in Benchmark.Iterations) { - for (int i = 0; i < Benchmark.InnerIterationCount; i++) + using (iteration.StartMeasurement()) { - s_t1.GetDeclaredMethod("m1"); - s_t1.GetDeclaredMethod("m2"); - s_t1.GetDeclaredMethod("m3"); + for (int i = 0; i < Benchmark.InnerIterationCount; i++) + { + s_t1.GetDeclaredMethod("m1"); + s_t1.GetDeclaredMethod("m2"); + s_t1.GetDeclaredMethod("m3"); + } } } } - } - [Benchmark(InnerIterationCount=1000)] - public static void GetMethod2() - { - foreach (var iteration in Benchmark.Iterations) + [Benchmark(InnerIterationCount = 1000)] + public static void GetMethod2() { - using (iteration.StartMeasurement()) + foreach (var iteration in Benchmark.Iterations) { - for (int i = 0; i < Benchmark.InnerIterationCount; i++) + using (iteration.StartMeasurement()) { - s_t1.GetDeclaredMethod("m1"); - s_t1.GetDeclaredMethod("m2"); - s_t1.GetDeclaredMethod("m3"); - s_t2.GetDeclaredMethod("m1"); - s_t2.GetDeclaredMethod("m2"); - s_t2.GetDeclaredMethod("m3"); + for (int i = 0; i < Benchmark.InnerIterationCount; i++) + { + s_t1.GetDeclaredMethod("m1"); + s_t1.GetDeclaredMethod("m2"); + s_t1.GetDeclaredMethod("m3"); + s_t2.GetDeclaredMethod("m1"); + s_t2.GetDeclaredMethod("m2"); + s_t2.GetDeclaredMethod("m3"); + } } } } - } - [Benchmark(InnerIterationCount=1000)] - public static void GetMethod3() - { - foreach (var iteration in Benchmark.Iterations) + [Benchmark(InnerIterationCount = 1000)] + public static void GetMethod3() { - using (iteration.StartMeasurement()) + foreach (var iteration in Benchmark.Iterations) { - for (int i = 0; i < Benchmark.InnerIterationCount; i++) + using (iteration.StartMeasurement()) { - s_t1.GetDeclaredMethod("m1"); - s_t1.GetDeclaredMethod("m2"); //TODO: check if we can really get the method - s_t1.GetDeclaredMethod("m3"); - s_t2.GetDeclaredMethod("m1"); - s_t2.GetDeclaredMethod("m2"); - s_t2.GetDeclaredMethod("m3"); - s_t3.GetDeclaredMethod("m1"); - s_t3.GetDeclaredMethod("m2"); - s_t3.GetDeclaredMethod("m3"); + for (int i = 0; i < Benchmark.InnerIterationCount; i++) + { + s_t1.GetDeclaredMethod("m1"); + s_t1.GetDeclaredMethod("m2"); //TODO: check if we can really get the method + s_t1.GetDeclaredMethod("m3"); + s_t2.GetDeclaredMethod("m1"); + s_t2.GetDeclaredMethod("m2"); + s_t2.GetDeclaredMethod("m3"); + s_t3.GetDeclaredMethod("m1"); + s_t3.GetDeclaredMethod("m2"); + s_t3.GetDeclaredMethod("m3"); + } } } } - } - [Benchmark(InnerIterationCount=1000)] - public static void GetMethod4() - { - foreach (var iteration in Benchmark.Iterations) + [Benchmark(InnerIterationCount = 1000)] + public static void GetMethod4() { - using (iteration.StartMeasurement()) + foreach (var iteration in Benchmark.Iterations) { - for (int i = 0; i < Benchmark.InnerIterationCount; i++) + using (iteration.StartMeasurement()) { - s_t1.GetDeclaredMethod("m1"); - s_t1.GetDeclaredMethod("m2"); //TODO: check if we can really get the method - s_t1.GetDeclaredMethod("m3"); - s_t2.GetDeclaredMethod("m1"); - s_t2.GetDeclaredMethod("m2"); - s_t2.GetDeclaredMethod("m3"); - s_t3.GetDeclaredMethod("m1"); - s_t3.GetDeclaredMethod("m2"); - s_t3.GetDeclaredMethod("m3"); - s_t4.GetDeclaredMethod("m1"); - s_t4.GetDeclaredMethod("m2"); - s_t4.GetDeclaredMethod("m3"); + for (int i = 0; i < Benchmark.InnerIterationCount; i++) + { + s_t1.GetDeclaredMethod("m1"); + s_t1.GetDeclaredMethod("m2"); //TODO: check if we can really get the method + s_t1.GetDeclaredMethod("m3"); + s_t2.GetDeclaredMethod("m1"); + s_t2.GetDeclaredMethod("m2"); + s_t2.GetDeclaredMethod("m3"); + s_t3.GetDeclaredMethod("m1"); + s_t3.GetDeclaredMethod("m2"); + s_t3.GetDeclaredMethod("m3"); + s_t4.GetDeclaredMethod("m1"); + s_t4.GetDeclaredMethod("m2"); + s_t4.GetDeclaredMethod("m3"); + } } } } - } - [Benchmark(InnerIterationCount=1000)] - public static void GetMethod5() - { - foreach (var iteration in Benchmark.Iterations) + [Benchmark(InnerIterationCount = 1000)] + public static void GetMethod5() { - using (iteration.StartMeasurement()) + foreach (var iteration in Benchmark.Iterations) { - for (int i = 0; i < Benchmark.InnerIterationCount; i++) + using (iteration.StartMeasurement()) { - s_t1.GetDeclaredMethod("m1"); - s_t1.GetDeclaredMethod("m2"); - s_t1.GetDeclaredMethod("m3"); - s_t2.GetDeclaredMethod("m1"); - s_t2.GetDeclaredMethod("m2"); - s_t2.GetDeclaredMethod("m3"); - s_t3.GetDeclaredMethod("m1"); - s_t3.GetDeclaredMethod("m2"); - s_t3.GetDeclaredMethod("m3"); - s_t4.GetDeclaredMethod("m1"); - s_t4.GetDeclaredMethod("m2"); - s_t4.GetDeclaredMethod("m3"); - s_t5.GetDeclaredMethod("m1"); - s_t5.GetDeclaredMethod("m2"); - s_t5.GetDeclaredMethod("m3"); + for (int i = 0; i < Benchmark.InnerIterationCount; i++) + { + s_t1.GetDeclaredMethod("m1"); + s_t1.GetDeclaredMethod("m2"); + s_t1.GetDeclaredMethod("m3"); + s_t2.GetDeclaredMethod("m1"); + s_t2.GetDeclaredMethod("m2"); + s_t2.GetDeclaredMethod("m3"); + s_t3.GetDeclaredMethod("m1"); + s_t3.GetDeclaredMethod("m2"); + s_t3.GetDeclaredMethod("m3"); + s_t4.GetDeclaredMethod("m1"); + s_t4.GetDeclaredMethod("m2"); + s_t4.GetDeclaredMethod("m3"); + s_t5.GetDeclaredMethod("m1"); + s_t5.GetDeclaredMethod("m2"); + s_t5.GetDeclaredMethod("m3"); + } } } } - } - [Benchmark(InnerIterationCount=1000)] - public static void GetMethod10() - { - foreach (var iteration in Benchmark.Iterations) + [Benchmark(InnerIterationCount = 1000)] + public static void GetMethod10() { - using (iteration.StartMeasurement()) + foreach (var iteration in Benchmark.Iterations) { - for (int i = 0; i < Benchmark.InnerIterationCount; i++) + using (iteration.StartMeasurement()) { - s_t1.GetDeclaredMethod("m1"); - s_t1.GetDeclaredMethod("m2"); - s_t1.GetDeclaredMethod("m3"); - s_t2.GetDeclaredMethod("m1"); - s_t2.GetDeclaredMethod("m2"); - s_t2.GetDeclaredMethod("m3"); - s_t3.GetDeclaredMethod("m1"); - s_t3.GetDeclaredMethod("m2"); - s_t3.GetDeclaredMethod("m3"); - s_t4.GetDeclaredMethod("m1"); - s_t4.GetDeclaredMethod("m2"); - s_t4.GetDeclaredMethod("m3"); - s_t5.GetDeclaredMethod("m1"); - s_t5.GetDeclaredMethod("m2"); - s_t5.GetDeclaredMethod("m3"); - - s_t6.GetDeclaredMethod("m1"); - s_t6.GetDeclaredMethod("m2"); - s_t6.GetDeclaredMethod("m3"); - s_t7.GetDeclaredMethod("m1"); - s_t7.GetDeclaredMethod("m2"); - s_t7.GetDeclaredMethod("m3"); - s_t8.GetDeclaredMethod("m1"); - s_t8.GetDeclaredMethod("m2"); - s_t8.GetDeclaredMethod("m3"); - s_t9.GetDeclaredMethod("m1"); - s_t9.GetDeclaredMethod("m2"); - s_t9.GetDeclaredMethod("m3"); - s_t10.GetDeclaredMethod("m1"); - s_t10.GetDeclaredMethod("m2"); - s_t10.GetDeclaredMethod("m3"); + for (int i = 0; i < Benchmark.InnerIterationCount; i++) + { + s_t1.GetDeclaredMethod("m1"); + s_t1.GetDeclaredMethod("m2"); + s_t1.GetDeclaredMethod("m3"); + s_t2.GetDeclaredMethod("m1"); + s_t2.GetDeclaredMethod("m2"); + s_t2.GetDeclaredMethod("m3"); + s_t3.GetDeclaredMethod("m1"); + s_t3.GetDeclaredMethod("m2"); + s_t3.GetDeclaredMethod("m3"); + s_t4.GetDeclaredMethod("m1"); + s_t4.GetDeclaredMethod("m2"); + s_t4.GetDeclaredMethod("m3"); + s_t5.GetDeclaredMethod("m1"); + s_t5.GetDeclaredMethod("m2"); + s_t5.GetDeclaredMethod("m3"); + + s_t6.GetDeclaredMethod("m1"); + s_t6.GetDeclaredMethod("m2"); + s_t6.GetDeclaredMethod("m3"); + s_t7.GetDeclaredMethod("m1"); + s_t7.GetDeclaredMethod("m2"); + s_t7.GetDeclaredMethod("m3"); + s_t8.GetDeclaredMethod("m1"); + s_t8.GetDeclaredMethod("m2"); + s_t8.GetDeclaredMethod("m3"); + s_t9.GetDeclaredMethod("m1"); + s_t9.GetDeclaredMethod("m2"); + s_t9.GetDeclaredMethod("m3"); + s_t10.GetDeclaredMethod("m1"); + s_t10.GetDeclaredMethod("m2"); + s_t10.GetDeclaredMethod("m3"); + } } } } - } - [Benchmark(InnerIterationCount=1000)] - public static void GetMethod12() - { - foreach (var iteration in Benchmark.Iterations) + [Benchmark(InnerIterationCount = 1000)] + public static void GetMethod12() { - using (iteration.StartMeasurement()) + foreach (var iteration in Benchmark.Iterations) { - for (int i = 0; i < Benchmark.InnerIterationCount; i++) + using (iteration.StartMeasurement()) { - s_t1.GetDeclaredMethod("m1"); - s_t1.GetDeclaredMethod("m2"); - s_t1.GetDeclaredMethod("m3"); - s_t2.GetDeclaredMethod("m1"); - s_t2.GetDeclaredMethod("m2"); - s_t2.GetDeclaredMethod("m3"); - s_t3.GetDeclaredMethod("m1"); - s_t3.GetDeclaredMethod("m2"); - s_t3.GetDeclaredMethod("m3"); - s_t4.GetDeclaredMethod("m1"); - s_t4.GetDeclaredMethod("m2"); - s_t4.GetDeclaredMethod("m3"); - s_t5.GetDeclaredMethod("m1"); - s_t5.GetDeclaredMethod("m2"); - s_t5.GetDeclaredMethod("m3"); - - s_t6.GetDeclaredMethod("m1"); - s_t6.GetDeclaredMethod("m2"); - s_t6.GetDeclaredMethod("m3"); - s_t7.GetDeclaredMethod("m1"); - s_t7.GetDeclaredMethod("m2"); - s_t7.GetDeclaredMethod("m3"); - s_t8.GetDeclaredMethod("m1"); - s_t8.GetDeclaredMethod("m2"); - s_t8.GetDeclaredMethod("m3"); - s_t9.GetDeclaredMethod("m1"); - s_t9.GetDeclaredMethod("m2"); - s_t9.GetDeclaredMethod("m3"); - s_t10.GetDeclaredMethod("m1"); - s_t10.GetDeclaredMethod("m2"); - s_t10.GetDeclaredMethod("m3"); - - s_t11.GetDeclaredMethod("m1"); - s_t11.GetDeclaredMethod("m2"); - s_t11.GetDeclaredMethod("m3"); - s_t12.GetDeclaredMethod("m1"); - s_t12.GetDeclaredMethod("m2"); - s_t12.GetDeclaredMethod("m3"); + for (int i = 0; i < Benchmark.InnerIterationCount; i++) + { + s_t1.GetDeclaredMethod("m1"); + s_t1.GetDeclaredMethod("m2"); + s_t1.GetDeclaredMethod("m3"); + s_t2.GetDeclaredMethod("m1"); + s_t2.GetDeclaredMethod("m2"); + s_t2.GetDeclaredMethod("m3"); + s_t3.GetDeclaredMethod("m1"); + s_t3.GetDeclaredMethod("m2"); + s_t3.GetDeclaredMethod("m3"); + s_t4.GetDeclaredMethod("m1"); + s_t4.GetDeclaredMethod("m2"); + s_t4.GetDeclaredMethod("m3"); + s_t5.GetDeclaredMethod("m1"); + s_t5.GetDeclaredMethod("m2"); + s_t5.GetDeclaredMethod("m3"); + + s_t6.GetDeclaredMethod("m1"); + s_t6.GetDeclaredMethod("m2"); + s_t6.GetDeclaredMethod("m3"); + s_t7.GetDeclaredMethod("m1"); + s_t7.GetDeclaredMethod("m2"); + s_t7.GetDeclaredMethod("m3"); + s_t8.GetDeclaredMethod("m1"); + s_t8.GetDeclaredMethod("m2"); + s_t8.GetDeclaredMethod("m3"); + s_t9.GetDeclaredMethod("m1"); + s_t9.GetDeclaredMethod("m2"); + s_t9.GetDeclaredMethod("m3"); + s_t10.GetDeclaredMethod("m1"); + s_t10.GetDeclaredMethod("m2"); + s_t10.GetDeclaredMethod("m3"); + + s_t11.GetDeclaredMethod("m1"); + s_t11.GetDeclaredMethod("m2"); + s_t11.GetDeclaredMethod("m3"); + s_t12.GetDeclaredMethod("m1"); + s_t12.GetDeclaredMethod("m2"); + s_t12.GetDeclaredMethod("m3"); + } } } } - } - [Benchmark(InnerIterationCount=1000)] - public static void GetMethod15() - { - foreach (var iteration in Benchmark.Iterations) + [Benchmark(InnerIterationCount = 1000)] + public static void GetMethod15() { - using (iteration.StartMeasurement()) + foreach (var iteration in Benchmark.Iterations) { - for (int i = 0; i < Benchmark.InnerIterationCount; i++) + using (iteration.StartMeasurement()) { - s_t1.GetDeclaredMethod("m1"); - s_t1.GetDeclaredMethod("m2"); - s_t1.GetDeclaredMethod("m3"); - s_t2.GetDeclaredMethod("m1"); - s_t2.GetDeclaredMethod("m2"); - s_t2.GetDeclaredMethod("m3"); - s_t3.GetDeclaredMethod("m1"); - s_t3.GetDeclaredMethod("m2"); - s_t3.GetDeclaredMethod("m3"); - s_t4.GetDeclaredMethod("m1"); - s_t4.GetDeclaredMethod("m2"); - s_t4.GetDeclaredMethod("m3"); - s_t5.GetDeclaredMethod("m1"); - s_t5.GetDeclaredMethod("m2"); - s_t5.GetDeclaredMethod("m3"); - - s_t6.GetDeclaredMethod("m1"); - s_t6.GetDeclaredMethod("m2"); - s_t6.GetDeclaredMethod("m3"); - s_t7.GetDeclaredMethod("m1"); - s_t7.GetDeclaredMethod("m2"); - s_t7.GetDeclaredMethod("m3"); - s_t8.GetDeclaredMethod("m1"); - s_t8.GetDeclaredMethod("m2"); - s_t8.GetDeclaredMethod("m3"); - s_t9.GetDeclaredMethod("m1"); - s_t9.GetDeclaredMethod("m2"); - s_t9.GetDeclaredMethod("m3"); - s_t10.GetDeclaredMethod("m1"); - s_t10.GetDeclaredMethod("m2"); - s_t10.GetDeclaredMethod("m3"); - - s_t11.GetDeclaredMethod("m1"); - s_t11.GetDeclaredMethod("m2"); - s_t11.GetDeclaredMethod("m3"); - s_t12.GetDeclaredMethod("m1"); - s_t12.GetDeclaredMethod("m2"); - s_t12.GetDeclaredMethod("m3"); - s_t13.GetDeclaredMethod("m1"); - s_t13.GetDeclaredMethod("m2"); - s_t13.GetDeclaredMethod("m3"); - s_t14.GetDeclaredMethod("m1"); - s_t14.GetDeclaredMethod("m2"); - s_t14.GetDeclaredMethod("m3"); - s_t15.GetDeclaredMethod("m1"); - s_t15.GetDeclaredMethod("m2"); - s_t15.GetDeclaredMethod("m3"); + for (int i = 0; i < Benchmark.InnerIterationCount; i++) + { + s_t1.GetDeclaredMethod("m1"); + s_t1.GetDeclaredMethod("m2"); + s_t1.GetDeclaredMethod("m3"); + s_t2.GetDeclaredMethod("m1"); + s_t2.GetDeclaredMethod("m2"); + s_t2.GetDeclaredMethod("m3"); + s_t3.GetDeclaredMethod("m1"); + s_t3.GetDeclaredMethod("m2"); + s_t3.GetDeclaredMethod("m3"); + s_t4.GetDeclaredMethod("m1"); + s_t4.GetDeclaredMethod("m2"); + s_t4.GetDeclaredMethod("m3"); + s_t5.GetDeclaredMethod("m1"); + s_t5.GetDeclaredMethod("m2"); + s_t5.GetDeclaredMethod("m3"); + + s_t6.GetDeclaredMethod("m1"); + s_t6.GetDeclaredMethod("m2"); + s_t6.GetDeclaredMethod("m3"); + s_t7.GetDeclaredMethod("m1"); + s_t7.GetDeclaredMethod("m2"); + s_t7.GetDeclaredMethod("m3"); + s_t8.GetDeclaredMethod("m1"); + s_t8.GetDeclaredMethod("m2"); + s_t8.GetDeclaredMethod("m3"); + s_t9.GetDeclaredMethod("m1"); + s_t9.GetDeclaredMethod("m2"); + s_t9.GetDeclaredMethod("m3"); + s_t10.GetDeclaredMethod("m1"); + s_t10.GetDeclaredMethod("m2"); + s_t10.GetDeclaredMethod("m3"); + + s_t11.GetDeclaredMethod("m1"); + s_t11.GetDeclaredMethod("m2"); + s_t11.GetDeclaredMethod("m3"); + s_t12.GetDeclaredMethod("m1"); + s_t12.GetDeclaredMethod("m2"); + s_t12.GetDeclaredMethod("m3"); + s_t13.GetDeclaredMethod("m1"); + s_t13.GetDeclaredMethod("m2"); + s_t13.GetDeclaredMethod("m3"); + s_t14.GetDeclaredMethod("m1"); + s_t14.GetDeclaredMethod("m2"); + s_t14.GetDeclaredMethod("m3"); + s_t15.GetDeclaredMethod("m1"); + s_t15.GetDeclaredMethod("m2"); + s_t15.GetDeclaredMethod("m3"); + } } } } - } - [Benchmark(InnerIterationCount=1000)] - public static void GetMethod20() - { - foreach (var iteration in Benchmark.Iterations) + [Benchmark(InnerIterationCount = 1000)] + public static void GetMethod20() { - using (iteration.StartMeasurement()) + foreach (var iteration in Benchmark.Iterations) { - for (int i = 0; i < Benchmark.InnerIterationCount; i++) + using (iteration.StartMeasurement()) { - s_t1.GetDeclaredMethod("m1"); - s_t1.GetDeclaredMethod("m2"); - s_t1.GetDeclaredMethod("m3"); - s_t2.GetDeclaredMethod("m1"); - s_t2.GetDeclaredMethod("m2"); - s_t2.GetDeclaredMethod("m3"); - s_t3.GetDeclaredMethod("m1"); - s_t3.GetDeclaredMethod("m2"); - s_t3.GetDeclaredMethod("m3"); - s_t4.GetDeclaredMethod("m1"); - s_t4.GetDeclaredMethod("m2"); - s_t4.GetDeclaredMethod("m3"); - s_t5.GetDeclaredMethod("m1"); - s_t5.GetDeclaredMethod("m2"); - s_t5.GetDeclaredMethod("m3"); - - s_t6.GetDeclaredMethod("m1"); - s_t6.GetDeclaredMethod("m2"); - s_t6.GetDeclaredMethod("m3"); - s_t7.GetDeclaredMethod("m1"); - s_t7.GetDeclaredMethod("m2"); - s_t7.GetDeclaredMethod("m3"); - s_t8.GetDeclaredMethod("m1"); - s_t8.GetDeclaredMethod("m2"); - s_t8.GetDeclaredMethod("m3"); - s_t9.GetDeclaredMethod("m1"); - s_t9.GetDeclaredMethod("m2"); - s_t9.GetDeclaredMethod("m3"); - s_t10.GetDeclaredMethod("m1"); - s_t10.GetDeclaredMethod("m2"); - s_t10.GetDeclaredMethod("m3"); - - s_t11.GetDeclaredMethod("m1"); - s_t11.GetDeclaredMethod("m2"); - s_t11.GetDeclaredMethod("m3"); - s_t12.GetDeclaredMethod("m1"); - s_t12.GetDeclaredMethod("m2"); - s_t12.GetDeclaredMethod("m3"); - s_t13.GetDeclaredMethod("m1"); - s_t13.GetDeclaredMethod("m2"); - s_t13.GetDeclaredMethod("m3"); - s_t14.GetDeclaredMethod("m1"); - s_t14.GetDeclaredMethod("m2"); - s_t14.GetDeclaredMethod("m3"); - s_t15.GetDeclaredMethod("m1"); - s_t15.GetDeclaredMethod("m2"); - s_t15.GetDeclaredMethod("m3"); - - s_t16.GetDeclaredMethod("m1"); - s_t16.GetDeclaredMethod("m2"); - s_t16.GetDeclaredMethod("m3"); - s_t17.GetDeclaredMethod("m1"); - s_t17.GetDeclaredMethod("m2"); - s_t17.GetDeclaredMethod("m3"); - s_t18.GetDeclaredMethod("m1"); - s_t18.GetDeclaredMethod("m2"); - s_t18.GetDeclaredMethod("m3"); - s_t19.GetDeclaredMethod("m1"); - s_t19.GetDeclaredMethod("m2"); - s_t19.GetDeclaredMethod("m3"); - s_t20.GetDeclaredMethod("m1"); - s_t20.GetDeclaredMethod("m2"); - s_t20.GetDeclaredMethod("m3"); + for (int i = 0; i < Benchmark.InnerIterationCount; i++) + { + s_t1.GetDeclaredMethod("m1"); + s_t1.GetDeclaredMethod("m2"); + s_t1.GetDeclaredMethod("m3"); + s_t2.GetDeclaredMethod("m1"); + s_t2.GetDeclaredMethod("m2"); + s_t2.GetDeclaredMethod("m3"); + s_t3.GetDeclaredMethod("m1"); + s_t3.GetDeclaredMethod("m2"); + s_t3.GetDeclaredMethod("m3"); + s_t4.GetDeclaredMethod("m1"); + s_t4.GetDeclaredMethod("m2"); + s_t4.GetDeclaredMethod("m3"); + s_t5.GetDeclaredMethod("m1"); + s_t5.GetDeclaredMethod("m2"); + s_t5.GetDeclaredMethod("m3"); + + s_t6.GetDeclaredMethod("m1"); + s_t6.GetDeclaredMethod("m2"); + s_t6.GetDeclaredMethod("m3"); + s_t7.GetDeclaredMethod("m1"); + s_t7.GetDeclaredMethod("m2"); + s_t7.GetDeclaredMethod("m3"); + s_t8.GetDeclaredMethod("m1"); + s_t8.GetDeclaredMethod("m2"); + s_t8.GetDeclaredMethod("m3"); + s_t9.GetDeclaredMethod("m1"); + s_t9.GetDeclaredMethod("m2"); + s_t9.GetDeclaredMethod("m3"); + s_t10.GetDeclaredMethod("m1"); + s_t10.GetDeclaredMethod("m2"); + s_t10.GetDeclaredMethod("m3"); + + s_t11.GetDeclaredMethod("m1"); + s_t11.GetDeclaredMethod("m2"); + s_t11.GetDeclaredMethod("m3"); + s_t12.GetDeclaredMethod("m1"); + s_t12.GetDeclaredMethod("m2"); + s_t12.GetDeclaredMethod("m3"); + s_t13.GetDeclaredMethod("m1"); + s_t13.GetDeclaredMethod("m2"); + s_t13.GetDeclaredMethod("m3"); + s_t14.GetDeclaredMethod("m1"); + s_t14.GetDeclaredMethod("m2"); + s_t14.GetDeclaredMethod("m3"); + s_t15.GetDeclaredMethod("m1"); + s_t15.GetDeclaredMethod("m2"); + s_t15.GetDeclaredMethod("m3"); + + s_t16.GetDeclaredMethod("m1"); + s_t16.GetDeclaredMethod("m2"); + s_t16.GetDeclaredMethod("m3"); + s_t17.GetDeclaredMethod("m1"); + s_t17.GetDeclaredMethod("m2"); + s_t17.GetDeclaredMethod("m3"); + s_t18.GetDeclaredMethod("m1"); + s_t18.GetDeclaredMethod("m2"); + s_t18.GetDeclaredMethod("m3"); + s_t19.GetDeclaredMethod("m1"); + s_t19.GetDeclaredMethod("m2"); + s_t19.GetDeclaredMethod("m3"); + s_t20.GetDeclaredMethod("m1"); + s_t20.GetDeclaredMethod("m2"); + s_t20.GetDeclaredMethod("m3"); + } } } } - } - /* - [Benchmark(InnerIterationCount=1000)] - public static void GetConstructor() - { - foreach (var iteration in Benchmark.Iterations) + /* + [Benchmark(InnerIterationCount=1000)] + public static void GetConstructor() { - using (iteration.StartMeasurement()) + foreach (var iteration in Benchmark.Iterations) { - s_t1.GetConstructor(new Type[] { }); - s_t1.GetConstructor(new Type[] { typeof(int) }); - s_t1.GetConstructor(new Type[] { typeof(int), typeof(int) }); - s_t2.GetConstructor(new Type[] { }); - s_t2.GetConstructor(new Type[] { typeof(int) }); - s_t2.GetConstructor(new Type[] { typeof(int), typeof(int) }); - s_t3.GetConstructor(new Type[] { }); - s_t3.GetConstructor(new Type[] { typeof(int) }); - s_t3.GetConstructor(new Type[] { typeof(int), typeof(int) }); - s_t4.GetConstructor(new Type[] { }); - s_t4.GetConstructor(new Type[] { typeof(int) }); - s_t4.GetConstructor(new Type[] { typeof(int), typeof(int) }); - s_t5.GetConstructor(new Type[] { }); - s_t5.GetConstructor(new Type[] { typeof(int) }); - s_t5.GetConstructor(new Type[] { typeof(int), typeof(int) }); + using (iteration.StartMeasurement()) + { + s_t1.GetConstructor(new Type[] { }); + s_t1.GetConstructor(new Type[] { typeof(int) }); + s_t1.GetConstructor(new Type[] { typeof(int), typeof(int) }); + s_t2.GetConstructor(new Type[] { }); + s_t2.GetConstructor(new Type[] { typeof(int) }); + s_t2.GetConstructor(new Type[] { typeof(int), typeof(int) }); + s_t3.GetConstructor(new Type[] { }); + s_t3.GetConstructor(new Type[] { typeof(int) }); + s_t3.GetConstructor(new Type[] { typeof(int), typeof(int) }); + s_t4.GetConstructor(new Type[] { }); + s_t4.GetConstructor(new Type[] { typeof(int) }); + s_t4.GetConstructor(new Type[] { typeof(int), typeof(int) }); + s_t5.GetConstructor(new Type[] { }); + s_t5.GetConstructor(new Type[] { typeof(int) }); + s_t5.GetConstructor(new Type[] { typeof(int), typeof(int) }); + } } } - } - [Benchmark(InnerIterationCount=1000)] - public static void GetProperty() - { - foreach (var iteration in Benchmark.Iterations) + [Benchmark(InnerIterationCount=1000)] + public static void GetProperty() { - using (iteration.StartMeasurement()) + foreach (var iteration in Benchmark.Iterations) { - PropertyInfo pi = s_t1.GetProperty("p1"); - pi.GetSetMethod(); - pi.GetGetMethod(); - pi = s_t1.GetProperty("p2"); - pi.GetSetMethod(); - pi.GetGetMethod(); - pi = s_t1.GetProperty("p3"); - pi.GetSetMethod(); - pi.GetGetMethod(); - pi = s_t2.GetProperty("p1"); - pi.GetSetMethod(); - pi.GetGetMethod(); - pi = s_t2.GetProperty("p2"); - pi.GetSetMethod(); - pi.GetGetMethod(); - pi = s_t2.GetProperty("p3"); - pi.GetSetMethod(); - pi.GetGetMethod(); - s_t3.GetProperty("p1"); - s_t3.GetProperty("p2"); - s_t3.GetProperty("p3"); - s_t4.GetProperty("p1"); - s_t4.GetProperty("p2"); - s_t4.GetProperty("p3"); - s_t5.GetProperty("p1"); - s_t5.GetProperty("p2"); - s_t5.GetProperty("p3"); + using (iteration.StartMeasurement()) + { + PropertyInfo pi = s_t1.GetProperty("p1"); + pi.GetSetMethod(); + pi.GetGetMethod(); + pi = s_t1.GetProperty("p2"); + pi.GetSetMethod(); + pi.GetGetMethod(); + pi = s_t1.GetProperty("p3"); + pi.GetSetMethod(); + pi.GetGetMethod(); + pi = s_t2.GetProperty("p1"); + pi.GetSetMethod(); + pi.GetGetMethod(); + pi = s_t2.GetProperty("p2"); + pi.GetSetMethod(); + pi.GetGetMethod(); + pi = s_t2.GetProperty("p3"); + pi.GetSetMethod(); + pi.GetGetMethod(); + s_t3.GetProperty("p1"); + s_t3.GetProperty("p2"); + s_t3.GetProperty("p3"); + s_t4.GetProperty("p1"); + s_t4.GetProperty("p2"); + s_t4.GetProperty("p3"); + s_t5.GetProperty("p1"); + s_t5.GetProperty("p2"); + s_t5.GetProperty("p3"); + } } } - } - [Benchmark(InnerIterationCount=1000)] - public static void GetEvent() - { - foreach (var iteration in Benchmark.Iterations) + [Benchmark(InnerIterationCount=1000)] + public static void GetEvent() { - using (iteration.StartMeasurement()) + foreach (var iteration in Benchmark.Iterations) { - EventInfo ei = s_t1.GetEvent("e1"); - ei.GetAddMethod(); - ei.GetRaiseMethod(); - ei.GetRemoveMethod(); - s_t1.GetEvent("e2"); - ei.GetAddMethod(); - ei.GetRaiseMethod(); - ei.GetRemoveMethod(); - s_t1.GetEvent("e3"); - ei.GetAddMethod(); - ei.GetRaiseMethod(); - ei.GetRemoveMethod(); - s_t2.GetEvent("e1"); - ei.GetAddMethod(); - ei.GetRaiseMethod(); - ei.GetRemoveMethod(); - s_t2.GetEvent("e2"); - ei.GetAddMethod(); - ei.GetRaiseMethod(); - ei.GetRemoveMethod(); - s_t2.GetEvent("e3"); - ei.GetAddMethod(); - ei.GetRaiseMethod(); - ei.GetRemoveMethod(); - s_t3.GetEvent("e1"); - s_t3.GetEvent("e2"); - s_t3.GetEvent("e3"); - s_t4.GetEvent("e1"); - s_t4.GetEvent("e2"); - s_t4.GetEvent("e3"); - s_t5.GetEvent("e1"); - s_t5.GetEvent("e2"); - s_t5.GetEvent("e3"); + using (iteration.StartMeasurement()) + { + EventInfo ei = s_t1.GetEvent("e1"); + ei.GetAddMethod(); + ei.GetRaiseMethod(); + ei.GetRemoveMethod(); + s_t1.GetEvent("e2"); + ei.GetAddMethod(); + ei.GetRaiseMethod(); + ei.GetRemoveMethod(); + s_t1.GetEvent("e3"); + ei.GetAddMethod(); + ei.GetRaiseMethod(); + ei.GetRemoveMethod(); + s_t2.GetEvent("e1"); + ei.GetAddMethod(); + ei.GetRaiseMethod(); + ei.GetRemoveMethod(); + s_t2.GetEvent("e2"); + ei.GetAddMethod(); + ei.GetRaiseMethod(); + ei.GetRemoveMethod(); + s_t2.GetEvent("e3"); + ei.GetAddMethod(); + ei.GetRaiseMethod(); + ei.GetRemoveMethod(); + s_t3.GetEvent("e1"); + s_t3.GetEvent("e2"); + s_t3.GetEvent("e3"); + s_t4.GetEvent("e1"); + s_t4.GetEvent("e2"); + s_t4.GetEvent("e3"); + s_t5.GetEvent("e1"); + s_t5.GetEvent("e2"); + s_t5.GetEvent("e3"); + } } } + */ } - */ -} -#region ClassDef -public class Class1 -{ - public Class1() { } - public Class1(int i) { } - public Class1(int i, int ii) { } - public int f0 = 0; - static public int f1 = 0; - public int f2 = 0; - public int f3 = 0; - public int f4 = 0; - public int f5 = 0; - public int f6 = 0; - public int f7 = 0; - public int f8 = 0; - public int f9 = 0; - public int f10 = 0; - public int f11 = 0; - public int f12 = 0; - public int f13 = 0; - public int f14 = 0; - public int f15 = 0; - public int f16 = 0; - public int f17 = 0; - public int f18 = 0; - public int f19 = 0; - public int f20 = 0; - public int f21 = 0; - public int f22 = 0; - public int f23 = 0; - public int f24 = 0; - - public void m1() { } - static public void m2() { } - public void m3() { } - public void m4() { } - public void m5() { } - public void m6() { } - public void m7() { } - public void m8() { } - public void m9() { } - public void m10() { } - public void m11() { } - public void m12() { } - public void m13() { } - public void m14() { } - public void m15() { } - public void m16() { } - public void m17() { } - public void m18() { } - public void m19() { } - public void m20() { } - public void m21() { } - public void m22() { } - public void m23() { } - public void m24() { } - - public int p0 { get { return 1; } set { } } - static public int p1 { get { return 1; } set { } } - public int p2 { get { return 1; } set { } } - public int p3 { get { return 1; } set { } } - public int p4 { get { return 1; } set { } } - public int p5 { get { return 1; } set { } } - public int p6 { get { return 1; } set { } } - public int p7 { get { return 1; } set { } } - public int p8 { get { return 1; } set { } } - public int p9 { get { return 1; } set { } } - public int p10 { get { return 1; } set { } } - public int p11 { get { return 1; } set { } } - public int p12 { get { return 1; } set { } } - public int p13 { get { return 1; } set { } } - public int p14 { get { return 1; } set { } } - public int p15 { get { return 1; } set { } } - public int p16 { get { return 1; } set { } } - public int p17 { get { return 1; } set { } } - public int p18 { get { return 1; } set { } } - public int p19 { get { return 1; } set { } } - public int p20 { get { return 1; } set { } } - public int p21 { get { return 1; } set { } } - public int p22 { get { return 1; } set { } } - public int p23 { get { return 1; } set { } } - public int p24 { get { return 1; } set { } } - - public event d e0; - static public event d e1; - public event d e2; - public event d e3; - public event d e4; - public event d e5; - public event d e6; - public event d e7; - public event d e8; - public event d e9; - public event d e10; - public event d e11; - public event d e12; - public event d e13; - public event d e14; - public event d e15; - public event d e16; - public event d e17; - public event d e18; - public event d e19; - public event d e20; - public event d e21; - public event d e22; - public event d e23; - public event d e24; - - public void NoWarning() + #region ClassDef + public class Class1 { - e0 += new d(m1); - e1 += new d(m1); - e2 += new d(m1); - e3 += new d(m1); - e4 += new d(m1); - e5 += new d(m1); - e6 += new d(m1); - e7 += new d(m1); - e8 += new d(m1); - e9 += new d(m1); - e10 += new d(m1); - e11 += new d(m1); - e12 += new d(m1); - e13 += new d(m1); - e14 += new d(m1); - e15 += new d(m1); - e16 += new d(m1); - e17 += new d(m1); - e18 += new d(m1); - e19 += new d(m1); - e20 += new d(m1); - e21 += new d(m1); - e22 += new d(m1); - e23 += new d(m1); - e24 += new d(m1); + public Class1() { } + public Class1(int i) { } + public Class1(int i, int ii) { } + public int f0 = 0; + static public int f1 = 0; + public int f2 = 0; + public int f3 = 0; + public int f4 = 0; + public int f5 = 0; + public int f6 = 0; + public int f7 = 0; + public int f8 = 0; + public int f9 = 0; + public int f10 = 0; + public int f11 = 0; + public int f12 = 0; + public int f13 = 0; + public int f14 = 0; + public int f15 = 0; + public int f16 = 0; + public int f17 = 0; + public int f18 = 0; + public int f19 = 0; + public int f20 = 0; + public int f21 = 0; + public int f22 = 0; + public int f23 = 0; + public int f24 = 0; + + public void m1() { } + static public void m2() { } + public void m3() { } + public void m4() { } + public void m5() { } + public void m6() { } + public void m7() { } + public void m8() { } + public void m9() { } + public void m10() { } + public void m11() { } + public void m12() { } + public void m13() { } + public void m14() { } + public void m15() { } + public void m16() { } + public void m17() { } + public void m18() { } + public void m19() { } + public void m20() { } + public void m21() { } + public void m22() { } + public void m23() { } + public void m24() { } + + public int p0 { get { return 1; } set { } } + static public int p1 { get { return 1; } set { } } + public int p2 { get { return 1; } set { } } + public int p3 { get { return 1; } set { } } + public int p4 { get { return 1; } set { } } + public int p5 { get { return 1; } set { } } + public int p6 { get { return 1; } set { } } + public int p7 { get { return 1; } set { } } + public int p8 { get { return 1; } set { } } + public int p9 { get { return 1; } set { } } + public int p10 { get { return 1; } set { } } + public int p11 { get { return 1; } set { } } + public int p12 { get { return 1; } set { } } + public int p13 { get { return 1; } set { } } + public int p14 { get { return 1; } set { } } + public int p15 { get { return 1; } set { } } + public int p16 { get { return 1; } set { } } + public int p17 { get { return 1; } set { } } + public int p18 { get { return 1; } set { } } + public int p19 { get { return 1; } set { } } + public int p20 { get { return 1; } set { } } + public int p21 { get { return 1; } set { } } + public int p22 { get { return 1; } set { } } + public int p23 { get { return 1; } set { } } + public int p24 { get { return 1; } set { } } + + public event d e0; + static public event d e1; + public event d e2; + public event d e3; + public event d e4; + public event d e5; + public event d e6; + public event d e7; + public event d e8; + public event d e9; + public event d e10; + public event d e11; + public event d e12; + public event d e13; + public event d e14; + public event d e15; + public event d e16; + public event d e17; + public event d e18; + public event d e19; + public event d e20; + public event d e21; + public event d e22; + public event d e23; + public event d e24; + + public void NoWarning() + { + e0 += new d(m1); + e1 += new d(m1); + e2 += new d(m1); + e3 += new d(m1); + e4 += new d(m1); + e5 += new d(m1); + e6 += new d(m1); + e7 += new d(m1); + e8 += new d(m1); + e9 += new d(m1); + e10 += new d(m1); + e11 += new d(m1); + e12 += new d(m1); + e13 += new d(m1); + e14 += new d(m1); + e15 += new d(m1); + e16 += new d(m1); + e17 += new d(m1); + e18 += new d(m1); + e19 += new d(m1); + e20 += new d(m1); + e21 += new d(m1); + e22 += new d(m1); + e23 += new d(m1); + e24 += new d(m1); + } } -} -public class Class2 -{ - public Class2() { } - public Class2(int i) { } - public Class2(int i, int ii) { } - public int f0 = 0; - static public int f1 = 0; - public int f2 = 0; - public int f3 = 0; - public int f4 = 0; - public int f5 = 0; - public int f6 = 0; - public int f7 = 0; - public int f8 = 0; - public int f9 = 0; - public int f10 = 0; - public int f11 = 0; - public int f12 = 0; - public int f13 = 0; - public int f14 = 0; - public int f15 = 0; - public int f16 = 0; - public int f17 = 0; - public int f18 = 0; - public int f19 = 0; - public int f20 = 0; - public int f21 = 0; - public int f22 = 0; - public int f23 = 0; - public int f24 = 0; - - public void m1() { } - static public void m2() { } - public void m3() { } - public void m4() { } - public void m5() { } - public void m6() { } - public void m7() { } - public void m8() { } - public void m9() { } - public void m10() { } - public void m11() { } - public void m12() { } - public void m13() { } - public void m14() { } - public void m15() { } - public void m16() { } - public void m17() { } - public void m18() { } - public void m19() { } - public void m20() { } - public void m21() { } - public void m22() { } - public void m23() { } - public void m24() { } - - public int p0 { get { return 1; } set { } } - static public int p1 { get { return 1; } set { } } - public int p2 { get { return 1; } set { } } - public int p3 { get { return 1; } set { } } - public int p4 { get { return 1; } set { } } - public int p5 { get { return 1; } set { } } - public int p6 { get { return 1; } set { } } - public int p7 { get { return 1; } set { } } - public int p8 { get { return 1; } set { } } - public int p9 { get { return 1; } set { } } - public int p10 { get { return 1; } set { } } - public int p11 { get { return 1; } set { } } - public int p12 { get { return 1; } set { } } - public int p13 { get { return 1; } set { } } - public int p14 { get { return 1; } set { } } - public int p15 { get { return 1; } set { } } - public int p16 { get { return 1; } set { } } - public int p17 { get { return 1; } set { } } - public int p18 { get { return 1; } set { } } - public int p19 { get { return 1; } set { } } - public int p20 { get { return 1; } set { } } - public int p21 { get { return 1; } set { } } - public int p22 { get { return 1; } set { } } - public int p23 { get { return 1; } set { } } - public int p24 { get { return 1; } set { } } - - public event d e0; - static public event d e1; - public event d e2; - public event d e3; - public event d e4; - public event d e5; - public event d e6; - public event d e7; - public event d e8; - public event d e9; - public event d e10; - public event d e11; - public event d e12; - public event d e13; - public event d e14; - public event d e15; - public event d e16; - public event d e17; - public event d e18; - public event d e19; - public event d e20; - public event d e21; - public event d e22; - public event d e23; - public event d e24; - - public void NoWarning() + public class Class2 { - e0 += new d(m1); - e1 += new d(m1); - e2 += new d(m1); - e3 += new d(m1); - e4 += new d(m1); - e5 += new d(m1); - e6 += new d(m1); - e7 += new d(m1); - e8 += new d(m1); - e9 += new d(m1); - e10 += new d(m1); - e11 += new d(m1); - e12 += new d(m1); - e13 += new d(m1); - e14 += new d(m1); - e15 += new d(m1); - e16 += new d(m1); - e17 += new d(m1); - e18 += new d(m1); - e19 += new d(m1); - e20 += new d(m1); - e21 += new d(m1); - e22 += new d(m1); - e23 += new d(m1); - e24 += new d(m1); + public Class2() { } + public Class2(int i) { } + public Class2(int i, int ii) { } + public int f0 = 0; + static public int f1 = 0; + public int f2 = 0; + public int f3 = 0; + public int f4 = 0; + public int f5 = 0; + public int f6 = 0; + public int f7 = 0; + public int f8 = 0; + public int f9 = 0; + public int f10 = 0; + public int f11 = 0; + public int f12 = 0; + public int f13 = 0; + public int f14 = 0; + public int f15 = 0; + public int f16 = 0; + public int f17 = 0; + public int f18 = 0; + public int f19 = 0; + public int f20 = 0; + public int f21 = 0; + public int f22 = 0; + public int f23 = 0; + public int f24 = 0; + + public void m1() { } + static public void m2() { } + public void m3() { } + public void m4() { } + public void m5() { } + public void m6() { } + public void m7() { } + public void m8() { } + public void m9() { } + public void m10() { } + public void m11() { } + public void m12() { } + public void m13() { } + public void m14() { } + public void m15() { } + public void m16() { } + public void m17() { } + public void m18() { } + public void m19() { } + public void m20() { } + public void m21() { } + public void m22() { } + public void m23() { } + public void m24() { } + + public int p0 { get { return 1; } set { } } + static public int p1 { get { return 1; } set { } } + public int p2 { get { return 1; } set { } } + public int p3 { get { return 1; } set { } } + public int p4 { get { return 1; } set { } } + public int p5 { get { return 1; } set { } } + public int p6 { get { return 1; } set { } } + public int p7 { get { return 1; } set { } } + public int p8 { get { return 1; } set { } } + public int p9 { get { return 1; } set { } } + public int p10 { get { return 1; } set { } } + public int p11 { get { return 1; } set { } } + public int p12 { get { return 1; } set { } } + public int p13 { get { return 1; } set { } } + public int p14 { get { return 1; } set { } } + public int p15 { get { return 1; } set { } } + public int p16 { get { return 1; } set { } } + public int p17 { get { return 1; } set { } } + public int p18 { get { return 1; } set { } } + public int p19 { get { return 1; } set { } } + public int p20 { get { return 1; } set { } } + public int p21 { get { return 1; } set { } } + public int p22 { get { return 1; } set { } } + public int p23 { get { return 1; } set { } } + public int p24 { get { return 1; } set { } } + + public event d e0; + static public event d e1; + public event d e2; + public event d e3; + public event d e4; + public event d e5; + public event d e6; + public event d e7; + public event d e8; + public event d e9; + public event d e10; + public event d e11; + public event d e12; + public event d e13; + public event d e14; + public event d e15; + public event d e16; + public event d e17; + public event d e18; + public event d e19; + public event d e20; + public event d e21; + public event d e22; + public event d e23; + public event d e24; + + public void NoWarning() + { + e0 += new d(m1); + e1 += new d(m1); + e2 += new d(m1); + e3 += new d(m1); + e4 += new d(m1); + e5 += new d(m1); + e6 += new d(m1); + e7 += new d(m1); + e8 += new d(m1); + e9 += new d(m1); + e10 += new d(m1); + e11 += new d(m1); + e12 += new d(m1); + e13 += new d(m1); + e14 += new d(m1); + e15 += new d(m1); + e16 += new d(m1); + e17 += new d(m1); + e18 += new d(m1); + e19 += new d(m1); + e20 += new d(m1); + e21 += new d(m1); + e22 += new d(m1); + e23 += new d(m1); + e24 += new d(m1); + } } -} -public class Class3 -{ - public Class3() { } - public Class3(int i) { } - public Class3(int i, int ii) { } - public int f0 = 0; - static public int f1 = 0; - public int f2 = 0; - public int f3 = 0; - public int f4 = 0; - public int f5 = 0; - public int f6 = 0; - public int f7 = 0; - public int f8 = 0; - public int f9 = 0; - public int f10 = 0; - public int f11 = 0; - public int f12 = 0; - public int f13 = 0; - public int f14 = 0; - public int f15 = 0; - public int f16 = 0; - public int f17 = 0; - public int f18 = 0; - public int f19 = 0; - public int f20 = 0; - public int f21 = 0; - public int f22 = 0; - public int f23 = 0; - public int f24 = 0; - - public void m1() { } - static public void m2() { } - public void m3() { } - public void m4() { } - public void m5() { } - public void m6() { } - public void m7() { } - public void m8() { } - public void m9() { } - public void m10() { } - public void m11() { } - public void m12() { } - public void m13() { } - public void m14() { } - public void m15() { } - public void m16() { } - public void m17() { } - public void m18() { } - public void m19() { } - public void m20() { } - public void m21() { } - public void m22() { } - public void m23() { } - public void m24() { } - - public int p0 { get { return 1; } set { } } - static public int p1 { get { return 1; } set { } } - public int p2 { get { return 1; } set { } } - public int p3 { get { return 1; } set { } } - public int p4 { get { return 1; } set { } } - public int p5 { get { return 1; } set { } } - public int p6 { get { return 1; } set { } } - public int p7 { get { return 1; } set { } } - public int p8 { get { return 1; } set { } } - public int p9 { get { return 1; } set { } } - public int p10 { get { return 1; } set { } } - public int p11 { get { return 1; } set { } } - public int p12 { get { return 1; } set { } } - public int p13 { get { return 1; } set { } } - public int p14 { get { return 1; } set { } } - public int p15 { get { return 1; } set { } } - public int p16 { get { return 1; } set { } } - public int p17 { get { return 1; } set { } } - public int p18 { get { return 1; } set { } } - public int p19 { get { return 1; } set { } } - public int p20 { get { return 1; } set { } } - public int p21 { get { return 1; } set { } } - public int p22 { get { return 1; } set { } } - public int p23 { get { return 1; } set { } } - public int p24 { get { return 1; } set { } } - - public event d e0; - static public event d e1; - public event d e2; - public event d e3; - public event d e4; - public event d e5; - public event d e6; - public event d e7; - public event d e8; - public event d e9; - public event d e10; - public event d e11; - public event d e12; - public event d e13; - public event d e14; - public event d e15; - public event d e16; - public event d e17; - public event d e18; - public event d e19; - public event d e20; - public event d e21; - public event d e22; - public event d e23; - public event d e24; - - public void NoWarning() + public class Class3 { - e0 += new d(m1); - e1 += new d(m1); - e2 += new d(m1); - e3 += new d(m1); - e4 += new d(m1); - e5 += new d(m1); - e6 += new d(m1); - e7 += new d(m1); - e8 += new d(m1); - e9 += new d(m1); - e10 += new d(m1); - e11 += new d(m1); - e12 += new d(m1); - e13 += new d(m1); - e14 += new d(m1); - e15 += new d(m1); - e16 += new d(m1); - e17 += new d(m1); - e18 += new d(m1); - e19 += new d(m1); - e20 += new d(m1); - e21 += new d(m1); - e22 += new d(m1); - e23 += new d(m1); - e24 += new d(m1); + public Class3() { } + public Class3(int i) { } + public Class3(int i, int ii) { } + public int f0 = 0; + static public int f1 = 0; + public int f2 = 0; + public int f3 = 0; + public int f4 = 0; + public int f5 = 0; + public int f6 = 0; + public int f7 = 0; + public int f8 = 0; + public int f9 = 0; + public int f10 = 0; + public int f11 = 0; + public int f12 = 0; + public int f13 = 0; + public int f14 = 0; + public int f15 = 0; + public int f16 = 0; + public int f17 = 0; + public int f18 = 0; + public int f19 = 0; + public int f20 = 0; + public int f21 = 0; + public int f22 = 0; + public int f23 = 0; + public int f24 = 0; + + public void m1() { } + static public void m2() { } + public void m3() { } + public void m4() { } + public void m5() { } + public void m6() { } + public void m7() { } + public void m8() { } + public void m9() { } + public void m10() { } + public void m11() { } + public void m12() { } + public void m13() { } + public void m14() { } + public void m15() { } + public void m16() { } + public void m17() { } + public void m18() { } + public void m19() { } + public void m20() { } + public void m21() { } + public void m22() { } + public void m23() { } + public void m24() { } + + public int p0 { get { return 1; } set { } } + static public int p1 { get { return 1; } set { } } + public int p2 { get { return 1; } set { } } + public int p3 { get { return 1; } set { } } + public int p4 { get { return 1; } set { } } + public int p5 { get { return 1; } set { } } + public int p6 { get { return 1; } set { } } + public int p7 { get { return 1; } set { } } + public int p8 { get { return 1; } set { } } + public int p9 { get { return 1; } set { } } + public int p10 { get { return 1; } set { } } + public int p11 { get { return 1; } set { } } + public int p12 { get { return 1; } set { } } + public int p13 { get { return 1; } set { } } + public int p14 { get { return 1; } set { } } + public int p15 { get { return 1; } set { } } + public int p16 { get { return 1; } set { } } + public int p17 { get { return 1; } set { } } + public int p18 { get { return 1; } set { } } + public int p19 { get { return 1; } set { } } + public int p20 { get { return 1; } set { } } + public int p21 { get { return 1; } set { } } + public int p22 { get { return 1; } set { } } + public int p23 { get { return 1; } set { } } + public int p24 { get { return 1; } set { } } + + public event d e0; + static public event d e1; + public event d e2; + public event d e3; + public event d e4; + public event d e5; + public event d e6; + public event d e7; + public event d e8; + public event d e9; + public event d e10; + public event d e11; + public event d e12; + public event d e13; + public event d e14; + public event d e15; + public event d e16; + public event d e17; + public event d e18; + public event d e19; + public event d e20; + public event d e21; + public event d e22; + public event d e23; + public event d e24; + + public void NoWarning() + { + e0 += new d(m1); + e1 += new d(m1); + e2 += new d(m1); + e3 += new d(m1); + e4 += new d(m1); + e5 += new d(m1); + e6 += new d(m1); + e7 += new d(m1); + e8 += new d(m1); + e9 += new d(m1); + e10 += new d(m1); + e11 += new d(m1); + e12 += new d(m1); + e13 += new d(m1); + e14 += new d(m1); + e15 += new d(m1); + e16 += new d(m1); + e17 += new d(m1); + e18 += new d(m1); + e19 += new d(m1); + e20 += new d(m1); + e21 += new d(m1); + e22 += new d(m1); + e23 += new d(m1); + e24 += new d(m1); + } } -} -public class Class4 -{ - public Class4() { } - public Class4(int i) { } - public Class4(int i, int ii) { } - - public int f0 = 0; - static public int f1 = 0; - public int f2 = 0; - public int f3 = 0; - public int f4 = 0; - public int f5 = 0; - public int f6 = 0; - public int f7 = 0; - public int f8 = 0; - public int f9 = 0; - public int f10 = 0; - public int f11 = 0; - public int f12 = 0; - public int f13 = 0; - public int f14 = 0; - public int f15 = 0; - public int f16 = 0; - public int f17 = 0; - public int f18 = 0; - public int f19 = 0; - public int f20 = 0; - public int f21 = 0; - public int f22 = 0; - public int f23 = 0; - public int f24 = 0; - - public void m1() { } - static public void m2() { } - public void m3() { } - public void m4() { } - public void m5() { } - public void m6() { } - public void m7() { } - public void m8() { } - public void m9() { } - public void m10() { } - public void m11() { } - public void m12() { } - public void m13() { } - public void m14() { } - public void m15() { } - public void m16() { } - public void m17() { } - public void m18() { } - public void m19() { } - public void m20() { } - public void m21() { } - public void m22() { } - public void m23() { } - public void m24() { } - - public int p0 { get { return 1; } set { } } - static public int p1 { get { return 1; } set { } } - public int p2 { get { return 1; } set { } } - public int p3 { get { return 1; } set { } } - public int p4 { get { return 1; } set { } } - public int p5 { get { return 1; } set { } } - public int p6 { get { return 1; } set { } } - public int p7 { get { return 1; } set { } } - public int p8 { get { return 1; } set { } } - public int p9 { get { return 1; } set { } } - public int p10 { get { return 1; } set { } } - public int p11 { get { return 1; } set { } } - public int p12 { get { return 1; } set { } } - public int p13 { get { return 1; } set { } } - public int p14 { get { return 1; } set { } } - public int p15 { get { return 1; } set { } } - public int p16 { get { return 1; } set { } } - public int p17 { get { return 1; } set { } } - public int p18 { get { return 1; } set { } } - public int p19 { get { return 1; } set { } } - public int p20 { get { return 1; } set { } } - public int p21 { get { return 1; } set { } } - public int p22 { get { return 1; } set { } } - public int p23 { get { return 1; } set { } } - public int p24 { get { return 1; } set { } } - - public event d e0; - static public event d e1; - public event d e2; - public event d e3; - public event d e4; - public event d e5; - public event d e6; - public event d e7; - public event d e8; - public event d e9; - public event d e10; - public event d e11; - public event d e12; - public event d e13; - public event d e14; - public event d e15; - public event d e16; - public event d e17; - public event d e18; - public event d e19; - public event d e20; - public event d e21; - public event d e22; - public event d e23; - public event d e24; - - public void NoWarning() + public class Class4 { - e0 += new d(m1); - e1 += new d(m1); - e2 += new d(m1); - e3 += new d(m1); - e4 += new d(m1); - e5 += new d(m1); - e6 += new d(m1); - e7 += new d(m1); - e8 += new d(m1); - e9 += new d(m1); - e10 += new d(m1); - e11 += new d(m1); - e12 += new d(m1); - e13 += new d(m1); - e14 += new d(m1); - e15 += new d(m1); - e16 += new d(m1); - e17 += new d(m1); - e18 += new d(m1); - e19 += new d(m1); - e20 += new d(m1); - e21 += new d(m1); - e22 += new d(m1); - e23 += new d(m1); - e24 += new d(m1); + public Class4() { } + public Class4(int i) { } + public Class4(int i, int ii) { } + + public int f0 = 0; + static public int f1 = 0; + public int f2 = 0; + public int f3 = 0; + public int f4 = 0; + public int f5 = 0; + public int f6 = 0; + public int f7 = 0; + public int f8 = 0; + public int f9 = 0; + public int f10 = 0; + public int f11 = 0; + public int f12 = 0; + public int f13 = 0; + public int f14 = 0; + public int f15 = 0; + public int f16 = 0; + public int f17 = 0; + public int f18 = 0; + public int f19 = 0; + public int f20 = 0; + public int f21 = 0; + public int f22 = 0; + public int f23 = 0; + public int f24 = 0; + + public void m1() { } + static public void m2() { } + public void m3() { } + public void m4() { } + public void m5() { } + public void m6() { } + public void m7() { } + public void m8() { } + public void m9() { } + public void m10() { } + public void m11() { } + public void m12() { } + public void m13() { } + public void m14() { } + public void m15() { } + public void m16() { } + public void m17() { } + public void m18() { } + public void m19() { } + public void m20() { } + public void m21() { } + public void m22() { } + public void m23() { } + public void m24() { } + + public int p0 { get { return 1; } set { } } + static public int p1 { get { return 1; } set { } } + public int p2 { get { return 1; } set { } } + public int p3 { get { return 1; } set { } } + public int p4 { get { return 1; } set { } } + public int p5 { get { return 1; } set { } } + public int p6 { get { return 1; } set { } } + public int p7 { get { return 1; } set { } } + public int p8 { get { return 1; } set { } } + public int p9 { get { return 1; } set { } } + public int p10 { get { return 1; } set { } } + public int p11 { get { return 1; } set { } } + public int p12 { get { return 1; } set { } } + public int p13 { get { return 1; } set { } } + public int p14 { get { return 1; } set { } } + public int p15 { get { return 1; } set { } } + public int p16 { get { return 1; } set { } } + public int p17 { get { return 1; } set { } } + public int p18 { get { return 1; } set { } } + public int p19 { get { return 1; } set { } } + public int p20 { get { return 1; } set { } } + public int p21 { get { return 1; } set { } } + public int p22 { get { return 1; } set { } } + public int p23 { get { return 1; } set { } } + public int p24 { get { return 1; } set { } } + + public event d e0; + static public event d e1; + public event d e2; + public event d e3; + public event d e4; + public event d e5; + public event d e6; + public event d e7; + public event d e8; + public event d e9; + public event d e10; + public event d e11; + public event d e12; + public event d e13; + public event d e14; + public event d e15; + public event d e16; + public event d e17; + public event d e18; + public event d e19; + public event d e20; + public event d e21; + public event d e22; + public event d e23; + public event d e24; + + public void NoWarning() + { + e0 += new d(m1); + e1 += new d(m1); + e2 += new d(m1); + e3 += new d(m1); + e4 += new d(m1); + e5 += new d(m1); + e6 += new d(m1); + e7 += new d(m1); + e8 += new d(m1); + e9 += new d(m1); + e10 += new d(m1); + e11 += new d(m1); + e12 += new d(m1); + e13 += new d(m1); + e14 += new d(m1); + e15 += new d(m1); + e16 += new d(m1); + e17 += new d(m1); + e18 += new d(m1); + e19 += new d(m1); + e20 += new d(m1); + e21 += new d(m1); + e22 += new d(m1); + e23 += new d(m1); + e24 += new d(m1); + } } -} -public class Class5 -{ - public Class5() { } - public Class5(int i) { } - public Class5(int i, int ii) { } - - public int f0 = 0; - static public int f1 = 0; - public int f2 = 0; - public int f3 = 0; - public int f4 = 0; - public int f5 = 0; - public int f6 = 0; - public int f7 = 0; - public int f8 = 0; - public int f9 = 0; - public int f10 = 0; - public int f11 = 0; - public int f12 = 0; - public int f13 = 0; - public int f14 = 0; - public int f15 = 0; - public int f16 = 0; - public int f17 = 0; - public int f18 = 0; - public int f19 = 0; - public int f20 = 0; - public int f21 = 0; - public int f22 = 0; - public int f23 = 0; - public int f24 = 0; - - public void m1() { } - static public void m2() { } - public void m3() { } - public void m4() { } - public void m5() { } - public void m6() { } - public void m7() { } - public void m8() { } - public void m9() { } - public void m10() { } - public void m11() { } - public void m12() { } - public void m13() { } - public void m14() { } - public void m15() { } - public void m16() { } - public void m17() { } - public void m18() { } - public void m19() { } - public void m20() { } - public void m21() { } - public void m22() { } - public void m23() { } - public void m24() { } - - public int p0 { get { return 1; } set { } } - static public int p1 { get { return 1; } set { } } - public int p2 { get { return 1; } set { } } - public int p3 { get { return 1; } set { } } - public int p4 { get { return 1; } set { } } - public int p5 { get { return 1; } set { } } - public int p6 { get { return 1; } set { } } - public int p7 { get { return 1; } set { } } - public int p8 { get { return 1; } set { } } - public int p9 { get { return 1; } set { } } - public int p10 { get { return 1; } set { } } - public int p11 { get { return 1; } set { } } - public int p12 { get { return 1; } set { } } - public int p13 { get { return 1; } set { } } - public int p14 { get { return 1; } set { } } - public int p15 { get { return 1; } set { } } - public int p16 { get { return 1; } set { } } - public int p17 { get { return 1; } set { } } - public int p18 { get { return 1; } set { } } - public int p19 { get { return 1; } set { } } - public int p20 { get { return 1; } set { } } - public int p21 { get { return 1; } set { } } - public int p22 { get { return 1; } set { } } - public int p23 { get { return 1; } set { } } - public int p24 { get { return 1; } set { } } - - public event d e0; - static public event d e1; - public event d e2; - public event d e3; - public event d e4; - public event d e5; - public event d e6; - public event d e7; - public event d e8; - public event d e9; - public event d e10; - public event d e11; - public event d e12; - public event d e13; - public event d e14; - public event d e15; - public event d e16; - public event d e17; - public event d e18; - public event d e19; - public event d e20; - public event d e21; - public event d e22; - public event d e23; - public event d e24; - - public void NoWarning() + public class Class5 { - e0 += new d(m1); - e1 += new d(m1); - e2 += new d(m1); - e3 += new d(m1); - e4 += new d(m1); - e5 += new d(m1); - e6 += new d(m1); - e7 += new d(m1); - e8 += new d(m1); - e9 += new d(m1); - e10 += new d(m1); - e11 += new d(m1); - e12 += new d(m1); - e13 += new d(m1); - e14 += new d(m1); - e15 += new d(m1); - e16 += new d(m1); - e17 += new d(m1); - e18 += new d(m1); - e19 += new d(m1); - e20 += new d(m1); - e21 += new d(m1); - e22 += new d(m1); - e23 += new d(m1); - e24 += new d(m1); + public Class5() { } + public Class5(int i) { } + public Class5(int i, int ii) { } + + public int f0 = 0; + static public int f1 = 0; + public int f2 = 0; + public int f3 = 0; + public int f4 = 0; + public int f5 = 0; + public int f6 = 0; + public int f7 = 0; + public int f8 = 0; + public int f9 = 0; + public int f10 = 0; + public int f11 = 0; + public int f12 = 0; + public int f13 = 0; + public int f14 = 0; + public int f15 = 0; + public int f16 = 0; + public int f17 = 0; + public int f18 = 0; + public int f19 = 0; + public int f20 = 0; + public int f21 = 0; + public int f22 = 0; + public int f23 = 0; + public int f24 = 0; + + public void m1() { } + static public void m2() { } + public void m3() { } + public void m4() { } + public void m5() { } + public void m6() { } + public void m7() { } + public void m8() { } + public void m9() { } + public void m10() { } + public void m11() { } + public void m12() { } + public void m13() { } + public void m14() { } + public void m15() { } + public void m16() { } + public void m17() { } + public void m18() { } + public void m19() { } + public void m20() { } + public void m21() { } + public void m22() { } + public void m23() { } + public void m24() { } + + public int p0 { get { return 1; } set { } } + static public int p1 { get { return 1; } set { } } + public int p2 { get { return 1; } set { } } + public int p3 { get { return 1; } set { } } + public int p4 { get { return 1; } set { } } + public int p5 { get { return 1; } set { } } + public int p6 { get { return 1; } set { } } + public int p7 { get { return 1; } set { } } + public int p8 { get { return 1; } set { } } + public int p9 { get { return 1; } set { } } + public int p10 { get { return 1; } set { } } + public int p11 { get { return 1; } set { } } + public int p12 { get { return 1; } set { } } + public int p13 { get { return 1; } set { } } + public int p14 { get { return 1; } set { } } + public int p15 { get { return 1; } set { } } + public int p16 { get { return 1; } set { } } + public int p17 { get { return 1; } set { } } + public int p18 { get { return 1; } set { } } + public int p19 { get { return 1; } set { } } + public int p20 { get { return 1; } set { } } + public int p21 { get { return 1; } set { } } + public int p22 { get { return 1; } set { } } + public int p23 { get { return 1; } set { } } + public int p24 { get { return 1; } set { } } + + public event d e0; + static public event d e1; + public event d e2; + public event d e3; + public event d e4; + public event d e5; + public event d e6; + public event d e7; + public event d e8; + public event d e9; + public event d e10; + public event d e11; + public event d e12; + public event d e13; + public event d e14; + public event d e15; + public event d e16; + public event d e17; + public event d e18; + public event d e19; + public event d e20; + public event d e21; + public event d e22; + public event d e23; + public event d e24; + + public void NoWarning() + { + e0 += new d(m1); + e1 += new d(m1); + e2 += new d(m1); + e3 += new d(m1); + e4 += new d(m1); + e5 += new d(m1); + e6 += new d(m1); + e7 += new d(m1); + e8 += new d(m1); + e9 += new d(m1); + e10 += new d(m1); + e11 += new d(m1); + e12 += new d(m1); + e13 += new d(m1); + e14 += new d(m1); + e15 += new d(m1); + e16 += new d(m1); + e17 += new d(m1); + e18 += new d(m1); + e19 += new d(m1); + e20 += new d(m1); + e21 += new d(m1); + e22 += new d(m1); + e23 += new d(m1); + e24 += new d(m1); + } } -} -public class Class6 -{ - public Class6() { } - public Class6(int i) { } - public Class6(int i, int ii) { } - - public int f0 = 0; - static public int f1 = 0; - public int f2 = 0; - public int f3 = 0; - public int f4 = 0; - public int f5 = 0; - public int f6 = 0; - public int f7 = 0; - public int f8 = 0; - public int f9 = 0; - public int f10 = 0; - public int f11 = 0; - public int f12 = 0; - public int f13 = 0; - public int f14 = 0; - public int f15 = 0; - public int f16 = 0; - public int f17 = 0; - public int f18 = 0; - public int f19 = 0; - public int f20 = 0; - public int f21 = 0; - public int f22 = 0; - public int f23 = 0; - public int f24 = 0; - - public void m1() { } - static public void m2() { } - public void m3() { } - public void m4() { } - public void m5() { } - public void m6() { } - public void m7() { } - public void m8() { } - public void m9() { } - public void m10() { } - public void m11() { } - public void m12() { } - public void m13() { } - public void m14() { } - public void m15() { } - public void m16() { } - public void m17() { } - public void m18() { } - public void m19() { } - public void m20() { } - public void m21() { } - public void m22() { } - public void m23() { } - public void m24() { } - - public int p0 { get { return 1; } set { } } - static public int p1 { get { return 1; } set { } } - public int p2 { get { return 1; } set { } } - public int p3 { get { return 1; } set { } } - public int p4 { get { return 1; } set { } } - public int p5 { get { return 1; } set { } } - public int p6 { get { return 1; } set { } } - public int p7 { get { return 1; } set { } } - public int p8 { get { return 1; } set { } } - public int p9 { get { return 1; } set { } } - public int p10 { get { return 1; } set { } } - public int p11 { get { return 1; } set { } } - public int p12 { get { return 1; } set { } } - public int p13 { get { return 1; } set { } } - public int p14 { get { return 1; } set { } } - public int p15 { get { return 1; } set { } } - public int p16 { get { return 1; } set { } } - public int p17 { get { return 1; } set { } } - public int p18 { get { return 1; } set { } } - public int p19 { get { return 1; } set { } } - public int p20 { get { return 1; } set { } } - public int p21 { get { return 1; } set { } } - public int p22 { get { return 1; } set { } } - public int p23 { get { return 1; } set { } } - public int p24 { get { return 1; } set { } } - - public event d e0; - static public event d e1; - public event d e2; - public event d e3; - public event d e4; - public event d e5; - public event d e6; - public event d e7; - public event d e8; - public event d e9; - public event d e10; - public event d e11; - public event d e12; - public event d e13; - public event d e14; - public event d e15; - public event d e16; - public event d e17; - public event d e18; - public event d e19; - public event d e20; - public event d e21; - public event d e22; - public event d e23; - public event d e24; - - public void NoWarning() + public class Class6 { - e0 += new d(m1); - e1 += new d(m1); - e2 += new d(m1); - e3 += new d(m1); - e4 += new d(m1); - e5 += new d(m1); - e6 += new d(m1); - e7 += new d(m1); - e8 += new d(m1); - e9 += new d(m1); - e10 += new d(m1); - e11 += new d(m1); - e12 += new d(m1); - e13 += new d(m1); - e14 += new d(m1); - e15 += new d(m1); - e16 += new d(m1); - e17 += new d(m1); - e18 += new d(m1); - e19 += new d(m1); - e20 += new d(m1); - e21 += new d(m1); - e22 += new d(m1); - e23 += new d(m1); - e24 += new d(m1); + public Class6() { } + public Class6(int i) { } + public Class6(int i, int ii) { } + + public int f0 = 0; + static public int f1 = 0; + public int f2 = 0; + public int f3 = 0; + public int f4 = 0; + public int f5 = 0; + public int f6 = 0; + public int f7 = 0; + public int f8 = 0; + public int f9 = 0; + public int f10 = 0; + public int f11 = 0; + public int f12 = 0; + public int f13 = 0; + public int f14 = 0; + public int f15 = 0; + public int f16 = 0; + public int f17 = 0; + public int f18 = 0; + public int f19 = 0; + public int f20 = 0; + public int f21 = 0; + public int f22 = 0; + public int f23 = 0; + public int f24 = 0; + + public void m1() { } + static public void m2() { } + public void m3() { } + public void m4() { } + public void m5() { } + public void m6() { } + public void m7() { } + public void m8() { } + public void m9() { } + public void m10() { } + public void m11() { } + public void m12() { } + public void m13() { } + public void m14() { } + public void m15() { } + public void m16() { } + public void m17() { } + public void m18() { } + public void m19() { } + public void m20() { } + public void m21() { } + public void m22() { } + public void m23() { } + public void m24() { } + + public int p0 { get { return 1; } set { } } + static public int p1 { get { return 1; } set { } } + public int p2 { get { return 1; } set { } } + public int p3 { get { return 1; } set { } } + public int p4 { get { return 1; } set { } } + public int p5 { get { return 1; } set { } } + public int p6 { get { return 1; } set { } } + public int p7 { get { return 1; } set { } } + public int p8 { get { return 1; } set { } } + public int p9 { get { return 1; } set { } } + public int p10 { get { return 1; } set { } } + public int p11 { get { return 1; } set { } } + public int p12 { get { return 1; } set { } } + public int p13 { get { return 1; } set { } } + public int p14 { get { return 1; } set { } } + public int p15 { get { return 1; } set { } } + public int p16 { get { return 1; } set { } } + public int p17 { get { return 1; } set { } } + public int p18 { get { return 1; } set { } } + public int p19 { get { return 1; } set { } } + public int p20 { get { return 1; } set { } } + public int p21 { get { return 1; } set { } } + public int p22 { get { return 1; } set { } } + public int p23 { get { return 1; } set { } } + public int p24 { get { return 1; } set { } } + + public event d e0; + static public event d e1; + public event d e2; + public event d e3; + public event d e4; + public event d e5; + public event d e6; + public event d e7; + public event d e8; + public event d e9; + public event d e10; + public event d e11; + public event d e12; + public event d e13; + public event d e14; + public event d e15; + public event d e16; + public event d e17; + public event d e18; + public event d e19; + public event d e20; + public event d e21; + public event d e22; + public event d e23; + public event d e24; + + public void NoWarning() + { + e0 += new d(m1); + e1 += new d(m1); + e2 += new d(m1); + e3 += new d(m1); + e4 += new d(m1); + e5 += new d(m1); + e6 += new d(m1); + e7 += new d(m1); + e8 += new d(m1); + e9 += new d(m1); + e10 += new d(m1); + e11 += new d(m1); + e12 += new d(m1); + e13 += new d(m1); + e14 += new d(m1); + e15 += new d(m1); + e16 += new d(m1); + e17 += new d(m1); + e18 += new d(m1); + e19 += new d(m1); + e20 += new d(m1); + e21 += new d(m1); + e22 += new d(m1); + e23 += new d(m1); + e24 += new d(m1); + } } -} -public class Class7 -{ - public Class7() { } - public Class7(int i) { } - public Class7(int i, int ii) { } - - public int f0 = 0; - static public int f1 = 0; - public int f2 = 0; - public int f3 = 0; - public int f4 = 0; - public int f5 = 0; - public int f6 = 0; - public int f7 = 0; - public int f8 = 0; - public int f9 = 0; - public int f10 = 0; - public int f11 = 0; - public int f12 = 0; - public int f13 = 0; - public int f14 = 0; - public int f15 = 0; - public int f16 = 0; - public int f17 = 0; - public int f18 = 0; - public int f19 = 0; - public int f20 = 0; - public int f21 = 0; - public int f22 = 0; - public int f23 = 0; - public int f24 = 0; - - public void m1() { } - static public void m2() { } - public void m3() { } - public void m4() { } - public void m5() { } - public void m6() { } - public void m7() { } - public void m8() { } - public void m9() { } - public void m10() { } - public void m11() { } - public void m12() { } - public void m13() { } - public void m14() { } - public void m15() { } - public void m16() { } - public void m17() { } - public void m18() { } - public void m19() { } - public void m20() { } - public void m21() { } - public void m22() { } - public void m23() { } - public void m24() { } - - public int p0 { get { return 1; } set { } } - static public int p1 { get { return 1; } set { } } - public int p2 { get { return 1; } set { } } - public int p3 { get { return 1; } set { } } - public int p4 { get { return 1; } set { } } - public int p5 { get { return 1; } set { } } - public int p6 { get { return 1; } set { } } - public int p7 { get { return 1; } set { } } - public int p8 { get { return 1; } set { } } - public int p9 { get { return 1; } set { } } - public int p10 { get { return 1; } set { } } - public int p11 { get { return 1; } set { } } - public int p12 { get { return 1; } set { } } - public int p13 { get { return 1; } set { } } - public int p14 { get { return 1; } set { } } - public int p15 { get { return 1; } set { } } - public int p16 { get { return 1; } set { } } - public int p17 { get { return 1; } set { } } - public int p18 { get { return 1; } set { } } - public int p19 { get { return 1; } set { } } - public int p20 { get { return 1; } set { } } - public int p21 { get { return 1; } set { } } - public int p22 { get { return 1; } set { } } - public int p23 { get { return 1; } set { } } - public int p24 { get { return 1; } set { } } - - public event d e0; - static public event d e1; - public event d e2; - public event d e3; - public event d e4; - public event d e5; - public event d e6; - public event d e7; - public event d e8; - public event d e9; - public event d e10; - public event d e11; - public event d e12; - public event d e13; - public event d e14; - public event d e15; - public event d e16; - public event d e17; - public event d e18; - public event d e19; - public event d e20; - public event d e21; - public event d e22; - public event d e23; - public event d e24; - - public void NoWarning() + public class Class7 { - e0 += new d(m1); - e1 += new d(m1); - e2 += new d(m1); - e3 += new d(m1); - e4 += new d(m1); - e5 += new d(m1); - e6 += new d(m1); - e7 += new d(m1); - e8 += new d(m1); - e9 += new d(m1); - e10 += new d(m1); - e11 += new d(m1); - e12 += new d(m1); - e13 += new d(m1); - e14 += new d(m1); - e15 += new d(m1); - e16 += new d(m1); - e17 += new d(m1); - e18 += new d(m1); - e19 += new d(m1); - e20 += new d(m1); - e21 += new d(m1); - e22 += new d(m1); - e23 += new d(m1); - e24 += new d(m1); + public Class7() { } + public Class7(int i) { } + public Class7(int i, int ii) { } + + public int f0 = 0; + static public int f1 = 0; + public int f2 = 0; + public int f3 = 0; + public int f4 = 0; + public int f5 = 0; + public int f6 = 0; + public int f7 = 0; + public int f8 = 0; + public int f9 = 0; + public int f10 = 0; + public int f11 = 0; + public int f12 = 0; + public int f13 = 0; + public int f14 = 0; + public int f15 = 0; + public int f16 = 0; + public int f17 = 0; + public int f18 = 0; + public int f19 = 0; + public int f20 = 0; + public int f21 = 0; + public int f22 = 0; + public int f23 = 0; + public int f24 = 0; + + public void m1() { } + static public void m2() { } + public void m3() { } + public void m4() { } + public void m5() { } + public void m6() { } + public void m7() { } + public void m8() { } + public void m9() { } + public void m10() { } + public void m11() { } + public void m12() { } + public void m13() { } + public void m14() { } + public void m15() { } + public void m16() { } + public void m17() { } + public void m18() { } + public void m19() { } + public void m20() { } + public void m21() { } + public void m22() { } + public void m23() { } + public void m24() { } + + public int p0 { get { return 1; } set { } } + static public int p1 { get { return 1; } set { } } + public int p2 { get { return 1; } set { } } + public int p3 { get { return 1; } set { } } + public int p4 { get { return 1; } set { } } + public int p5 { get { return 1; } set { } } + public int p6 { get { return 1; } set { } } + public int p7 { get { return 1; } set { } } + public int p8 { get { return 1; } set { } } + public int p9 { get { return 1; } set { } } + public int p10 { get { return 1; } set { } } + public int p11 { get { return 1; } set { } } + public int p12 { get { return 1; } set { } } + public int p13 { get { return 1; } set { } } + public int p14 { get { return 1; } set { } } + public int p15 { get { return 1; } set { } } + public int p16 { get { return 1; } set { } } + public int p17 { get { return 1; } set { } } + public int p18 { get { return 1; } set { } } + public int p19 { get { return 1; } set { } } + public int p20 { get { return 1; } set { } } + public int p21 { get { return 1; } set { } } + public int p22 { get { return 1; } set { } } + public int p23 { get { return 1; } set { } } + public int p24 { get { return 1; } set { } } + + public event d e0; + static public event d e1; + public event d e2; + public event d e3; + public event d e4; + public event d e5; + public event d e6; + public event d e7; + public event d e8; + public event d e9; + public event d e10; + public event d e11; + public event d e12; + public event d e13; + public event d e14; + public event d e15; + public event d e16; + public event d e17; + public event d e18; + public event d e19; + public event d e20; + public event d e21; + public event d e22; + public event d e23; + public event d e24; + + public void NoWarning() + { + e0 += new d(m1); + e1 += new d(m1); + e2 += new d(m1); + e3 += new d(m1); + e4 += new d(m1); + e5 += new d(m1); + e6 += new d(m1); + e7 += new d(m1); + e8 += new d(m1); + e9 += new d(m1); + e10 += new d(m1); + e11 += new d(m1); + e12 += new d(m1); + e13 += new d(m1); + e14 += new d(m1); + e15 += new d(m1); + e16 += new d(m1); + e17 += new d(m1); + e18 += new d(m1); + e19 += new d(m1); + e20 += new d(m1); + e21 += new d(m1); + e22 += new d(m1); + e23 += new d(m1); + e24 += new d(m1); + } } -} -public class Class8 -{ - public Class8() { } - public Class8(int i) { } - public Class8(int i, int ii) { } - - public int f0 = 0; - static public int f1 = 0; - public int f2 = 0; - public int f3 = 0; - public int f4 = 0; - public int f5 = 0; - public int f6 = 0; - public int f7 = 0; - public int f8 = 0; - public int f9 = 0; - public int f10 = 0; - public int f11 = 0; - public int f12 = 0; - public int f13 = 0; - public int f14 = 0; - public int f15 = 0; - public int f16 = 0; - public int f17 = 0; - public int f18 = 0; - public int f19 = 0; - public int f20 = 0; - public int f21 = 0; - public int f22 = 0; - public int f23 = 0; - public int f24 = 0; - - public void m1() { } - static public void m2() { } - public void m3() { } - public void m4() { } - public void m5() { } - public void m6() { } - public void m7() { } - public void m8() { } - public void m9() { } - public void m10() { } - public void m11() { } - public void m12() { } - public void m13() { } - public void m14() { } - public void m15() { } - public void m16() { } - public void m17() { } - public void m18() { } - public void m19() { } - public void m20() { } - public void m21() { } - public void m22() { } - public void m23() { } - public void m24() { } - - public int p0 { get { return 1; } set { } } - static public int p1 { get { return 1; } set { } } - public int p2 { get { return 1; } set { } } - public int p3 { get { return 1; } set { } } - public int p4 { get { return 1; } set { } } - public int p5 { get { return 1; } set { } } - public int p6 { get { return 1; } set { } } - public int p7 { get { return 1; } set { } } - public int p8 { get { return 1; } set { } } - public int p9 { get { return 1; } set { } } - public int p10 { get { return 1; } set { } } - public int p11 { get { return 1; } set { } } - public int p12 { get { return 1; } set { } } - public int p13 { get { return 1; } set { } } - public int p14 { get { return 1; } set { } } - public int p15 { get { return 1; } set { } } - public int p16 { get { return 1; } set { } } - public int p17 { get { return 1; } set { } } - public int p18 { get { return 1; } set { } } - public int p19 { get { return 1; } set { } } - public int p20 { get { return 1; } set { } } - public int p21 { get { return 1; } set { } } - public int p22 { get { return 1; } set { } } - public int p23 { get { return 1; } set { } } - public int p24 { get { return 1; } set { } } - - public event d e0; - static public event d e1; - public event d e2; - public event d e3; - public event d e4; - public event d e5; - public event d e6; - public event d e7; - public event d e8; - public event d e9; - public event d e10; - public event d e11; - public event d e12; - public event d e13; - public event d e14; - public event d e15; - public event d e16; - public event d e17; - public event d e18; - public event d e19; - public event d e20; - public event d e21; - public event d e22; - public event d e23; - public event d e24; - - public void NoWarning() + public class Class8 { - e0 += new d(m1); - e1 += new d(m1); - e2 += new d(m1); - e3 += new d(m1); - e4 += new d(m1); - e5 += new d(m1); - e6 += new d(m1); - e7 += new d(m1); - e8 += new d(m1); - e9 += new d(m1); - e10 += new d(m1); - e11 += new d(m1); - e12 += new d(m1); - e13 += new d(m1); - e14 += new d(m1); - e15 += new d(m1); - e16 += new d(m1); - e17 += new d(m1); - e18 += new d(m1); - e19 += new d(m1); - e20 += new d(m1); - e21 += new d(m1); - e22 += new d(m1); - e23 += new d(m1); - e24 += new d(m1); + public Class8() { } + public Class8(int i) { } + public Class8(int i, int ii) { } + + public int f0 = 0; + static public int f1 = 0; + public int f2 = 0; + public int f3 = 0; + public int f4 = 0; + public int f5 = 0; + public int f6 = 0; + public int f7 = 0; + public int f8 = 0; + public int f9 = 0; + public int f10 = 0; + public int f11 = 0; + public int f12 = 0; + public int f13 = 0; + public int f14 = 0; + public int f15 = 0; + public int f16 = 0; + public int f17 = 0; + public int f18 = 0; + public int f19 = 0; + public int f20 = 0; + public int f21 = 0; + public int f22 = 0; + public int f23 = 0; + public int f24 = 0; + + public void m1() { } + static public void m2() { } + public void m3() { } + public void m4() { } + public void m5() { } + public void m6() { } + public void m7() { } + public void m8() { } + public void m9() { } + public void m10() { } + public void m11() { } + public void m12() { } + public void m13() { } + public void m14() { } + public void m15() { } + public void m16() { } + public void m17() { } + public void m18() { } + public void m19() { } + public void m20() { } + public void m21() { } + public void m22() { } + public void m23() { } + public void m24() { } + + public int p0 { get { return 1; } set { } } + static public int p1 { get { return 1; } set { } } + public int p2 { get { return 1; } set { } } + public int p3 { get { return 1; } set { } } + public int p4 { get { return 1; } set { } } + public int p5 { get { return 1; } set { } } + public int p6 { get { return 1; } set { } } + public int p7 { get { return 1; } set { } } + public int p8 { get { return 1; } set { } } + public int p9 { get { return 1; } set { } } + public int p10 { get { return 1; } set { } } + public int p11 { get { return 1; } set { } } + public int p12 { get { return 1; } set { } } + public int p13 { get { return 1; } set { } } + public int p14 { get { return 1; } set { } } + public int p15 { get { return 1; } set { } } + public int p16 { get { return 1; } set { } } + public int p17 { get { return 1; } set { } } + public int p18 { get { return 1; } set { } } + public int p19 { get { return 1; } set { } } + public int p20 { get { return 1; } set { } } + public int p21 { get { return 1; } set { } } + public int p22 { get { return 1; } set { } } + public int p23 { get { return 1; } set { } } + public int p24 { get { return 1; } set { } } + + public event d e0; + static public event d e1; + public event d e2; + public event d e3; + public event d e4; + public event d e5; + public event d e6; + public event d e7; + public event d e8; + public event d e9; + public event d e10; + public event d e11; + public event d e12; + public event d e13; + public event d e14; + public event d e15; + public event d e16; + public event d e17; + public event d e18; + public event d e19; + public event d e20; + public event d e21; + public event d e22; + public event d e23; + public event d e24; + + public void NoWarning() + { + e0 += new d(m1); + e1 += new d(m1); + e2 += new d(m1); + e3 += new d(m1); + e4 += new d(m1); + e5 += new d(m1); + e6 += new d(m1); + e7 += new d(m1); + e8 += new d(m1); + e9 += new d(m1); + e10 += new d(m1); + e11 += new d(m1); + e12 += new d(m1); + e13 += new d(m1); + e14 += new d(m1); + e15 += new d(m1); + e16 += new d(m1); + e17 += new d(m1); + e18 += new d(m1); + e19 += new d(m1); + e20 += new d(m1); + e21 += new d(m1); + e22 += new d(m1); + e23 += new d(m1); + e24 += new d(m1); + } } -} -public class Class9 -{ - public Class9() { } - public Class9(int i) { } - public Class9(int i, int ii) { } - - public int f0 = 0; - static public int f1 = 0; - public int f2 = 0; - public int f3 = 0; - public int f4 = 0; - public int f5 = 0; - public int f6 = 0; - public int f7 = 0; - public int f8 = 0; - public int f9 = 0; - public int f10 = 0; - public int f11 = 0; - public int f12 = 0; - public int f13 = 0; - public int f14 = 0; - public int f15 = 0; - public int f16 = 0; - public int f17 = 0; - public int f18 = 0; - public int f19 = 0; - public int f20 = 0; - public int f21 = 0; - public int f22 = 0; - public int f23 = 0; - public int f24 = 0; - - public void m1() { } - static public void m2() { } - public void m3() { } - public void m4() { } - public void m5() { } - public void m6() { } - public void m7() { } - public void m8() { } - public void m9() { } - public void m10() { } - public void m11() { } - public void m12() { } - public void m13() { } - public void m14() { } - public void m15() { } - public void m16() { } - public void m17() { } - public void m18() { } - public void m19() { } - public void m20() { } - public void m21() { } - public void m22() { } - public void m23() { } - public void m24() { } - - public int p0 { get { return 1; } set { } } - static public int p1 { get { return 1; } set { } } - public int p2 { get { return 1; } set { } } - public int p3 { get { return 1; } set { } } - public int p4 { get { return 1; } set { } } - public int p5 { get { return 1; } set { } } - public int p6 { get { return 1; } set { } } - public int p7 { get { return 1; } set { } } - public int p8 { get { return 1; } set { } } - public int p9 { get { return 1; } set { } } - public int p10 { get { return 1; } set { } } - public int p11 { get { return 1; } set { } } - public int p12 { get { return 1; } set { } } - public int p13 { get { return 1; } set { } } - public int p14 { get { return 1; } set { } } - public int p15 { get { return 1; } set { } } - public int p16 { get { return 1; } set { } } - public int p17 { get { return 1; } set { } } - public int p18 { get { return 1; } set { } } - public int p19 { get { return 1; } set { } } - public int p20 { get { return 1; } set { } } - public int p21 { get { return 1; } set { } } - public int p22 { get { return 1; } set { } } - public int p23 { get { return 1; } set { } } - public int p24 { get { return 1; } set { } } - - public event d e0; - static public event d e1; - public event d e2; - public event d e3; - public event d e4; - public event d e5; - public event d e6; - public event d e7; - public event d e8; - public event d e9; - public event d e10; - public event d e11; - public event d e12; - public event d e13; - public event d e14; - public event d e15; - public event d e16; - public event d e17; - public event d e18; - public event d e19; - public event d e20; - public event d e21; - public event d e22; - public event d e23; - public event d e24; - - public void NoWarning() + public class Class9 { - e0 += new d(m1); - e1 += new d(m1); - e2 += new d(m1); - e3 += new d(m1); - e4 += new d(m1); - e5 += new d(m1); - e6 += new d(m1); - e7 += new d(m1); - e8 += new d(m1); - e9 += new d(m1); - e10 += new d(m1); - e11 += new d(m1); - e12 += new d(m1); - e13 += new d(m1); - e14 += new d(m1); - e15 += new d(m1); - e16 += new d(m1); - e17 += new d(m1); - e18 += new d(m1); - e19 += new d(m1); - e20 += new d(m1); - e21 += new d(m1); - e22 += new d(m1); - e23 += new d(m1); - e24 += new d(m1); + public Class9() { } + public Class9(int i) { } + public Class9(int i, int ii) { } + + public int f0 = 0; + static public int f1 = 0; + public int f2 = 0; + public int f3 = 0; + public int f4 = 0; + public int f5 = 0; + public int f6 = 0; + public int f7 = 0; + public int f8 = 0; + public int f9 = 0; + public int f10 = 0; + public int f11 = 0; + public int f12 = 0; + public int f13 = 0; + public int f14 = 0; + public int f15 = 0; + public int f16 = 0; + public int f17 = 0; + public int f18 = 0; + public int f19 = 0; + public int f20 = 0; + public int f21 = 0; + public int f22 = 0; + public int f23 = 0; + public int f24 = 0; + + public void m1() { } + static public void m2() { } + public void m3() { } + public void m4() { } + public void m5() { } + public void m6() { } + public void m7() { } + public void m8() { } + public void m9() { } + public void m10() { } + public void m11() { } + public void m12() { } + public void m13() { } + public void m14() { } + public void m15() { } + public void m16() { } + public void m17() { } + public void m18() { } + public void m19() { } + public void m20() { } + public void m21() { } + public void m22() { } + public void m23() { } + public void m24() { } + + public int p0 { get { return 1; } set { } } + static public int p1 { get { return 1; } set { } } + public int p2 { get { return 1; } set { } } + public int p3 { get { return 1; } set { } } + public int p4 { get { return 1; } set { } } + public int p5 { get { return 1; } set { } } + public int p6 { get { return 1; } set { } } + public int p7 { get { return 1; } set { } } + public int p8 { get { return 1; } set { } } + public int p9 { get { return 1; } set { } } + public int p10 { get { return 1; } set { } } + public int p11 { get { return 1; } set { } } + public int p12 { get { return 1; } set { } } + public int p13 { get { return 1; } set { } } + public int p14 { get { return 1; } set { } } + public int p15 { get { return 1; } set { } } + public int p16 { get { return 1; } set { } } + public int p17 { get { return 1; } set { } } + public int p18 { get { return 1; } set { } } + public int p19 { get { return 1; } set { } } + public int p20 { get { return 1; } set { } } + public int p21 { get { return 1; } set { } } + public int p22 { get { return 1; } set { } } + public int p23 { get { return 1; } set { } } + public int p24 { get { return 1; } set { } } + + public event d e0; + static public event d e1; + public event d e2; + public event d e3; + public event d e4; + public event d e5; + public event d e6; + public event d e7; + public event d e8; + public event d e9; + public event d e10; + public event d e11; + public event d e12; + public event d e13; + public event d e14; + public event d e15; + public event d e16; + public event d e17; + public event d e18; + public event d e19; + public event d e20; + public event d e21; + public event d e22; + public event d e23; + public event d e24; + + public void NoWarning() + { + e0 += new d(m1); + e1 += new d(m1); + e2 += new d(m1); + e3 += new d(m1); + e4 += new d(m1); + e5 += new d(m1); + e6 += new d(m1); + e7 += new d(m1); + e8 += new d(m1); + e9 += new d(m1); + e10 += new d(m1); + e11 += new d(m1); + e12 += new d(m1); + e13 += new d(m1); + e14 += new d(m1); + e15 += new d(m1); + e16 += new d(m1); + e17 += new d(m1); + e18 += new d(m1); + e19 += new d(m1); + e20 += new d(m1); + e21 += new d(m1); + e22 += new d(m1); + e23 += new d(m1); + e24 += new d(m1); + } } -} -public class Class10 -{ - public Class10() { } - public Class10(int i) { } - public Class10(int i, int ii) { } - - public int f0 = 0; - static public int f1 = 0; - public int f2 = 0; - public int f3 = 0; - public int f4 = 0; - public int f5 = 0; - public int f6 = 0; - public int f7 = 0; - public int f8 = 0; - public int f9 = 0; - public int f10 = 0; - public int f11 = 0; - public int f12 = 0; - public int f13 = 0; - public int f14 = 0; - public int f15 = 0; - public int f16 = 0; - public int f17 = 0; - public int f18 = 0; - public int f19 = 0; - public int f20 = 0; - public int f21 = 0; - public int f22 = 0; - public int f23 = 0; - public int f24 = 0; - - public void m1() { } - static public void m2() { } - public void m3() { } - public void m4() { } - public void m5() { } - public void m6() { } - public void m7() { } - public void m8() { } - public void m9() { } - public void m10() { } - public void m11() { } - public void m12() { } - public void m13() { } - public void m14() { } - public void m15() { } - public void m16() { } - public void m17() { } - public void m18() { } - public void m19() { } - public void m20() { } - public void m21() { } - public void m22() { } - public void m23() { } - public void m24() { } - - public int p0 { get { return 1; } set { } } - static public int p1 { get { return 1; } set { } } - public int p2 { get { return 1; } set { } } - public int p3 { get { return 1; } set { } } - public int p4 { get { return 1; } set { } } - public int p5 { get { return 1; } set { } } - public int p6 { get { return 1; } set { } } - public int p7 { get { return 1; } set { } } - public int p8 { get { return 1; } set { } } - public int p9 { get { return 1; } set { } } - public int p10 { get { return 1; } set { } } - public int p11 { get { return 1; } set { } } - public int p12 { get { return 1; } set { } } - public int p13 { get { return 1; } set { } } - public int p14 { get { return 1; } set { } } - public int p15 { get { return 1; } set { } } - public int p16 { get { return 1; } set { } } - public int p17 { get { return 1; } set { } } - public int p18 { get { return 1; } set { } } - public int p19 { get { return 1; } set { } } - public int p20 { get { return 1; } set { } } - public int p21 { get { return 1; } set { } } - public int p22 { get { return 1; } set { } } - public int p23 { get { return 1; } set { } } - public int p24 { get { return 1; } set { } } - - public event d e0; - static public event d e1; - public event d e2; - public event d e3; - public event d e4; - public event d e5; - public event d e6; - public event d e7; - public event d e8; - public event d e9; - public event d e10; - public event d e11; - public event d e12; - public event d e13; - public event d e14; - public event d e15; - public event d e16; - public event d e17; - public event d e18; - public event d e19; - public event d e20; - public event d e21; - public event d e22; - public event d e23; - public event d e24; - - public void NoWarning() + public class Class10 { - e0 += new d(m1); - e1 += new d(m1); - e2 += new d(m1); - e3 += new d(m1); - e4 += new d(m1); - e5 += new d(m1); - e6 += new d(m1); - e7 += new d(m1); - e8 += new d(m1); - e9 += new d(m1); - e10 += new d(m1); - e11 += new d(m1); - e12 += new d(m1); - e13 += new d(m1); - e14 += new d(m1); - e15 += new d(m1); - e16 += new d(m1); - e17 += new d(m1); - e18 += new d(m1); - e19 += new d(m1); - e20 += new d(m1); - e21 += new d(m1); - e22 += new d(m1); - e23 += new d(m1); - e24 += new d(m1); + public Class10() { } + public Class10(int i) { } + public Class10(int i, int ii) { } + + public int f0 = 0; + static public int f1 = 0; + public int f2 = 0; + public int f3 = 0; + public int f4 = 0; + public int f5 = 0; + public int f6 = 0; + public int f7 = 0; + public int f8 = 0; + public int f9 = 0; + public int f10 = 0; + public int f11 = 0; + public int f12 = 0; + public int f13 = 0; + public int f14 = 0; + public int f15 = 0; + public int f16 = 0; + public int f17 = 0; + public int f18 = 0; + public int f19 = 0; + public int f20 = 0; + public int f21 = 0; + public int f22 = 0; + public int f23 = 0; + public int f24 = 0; + + public void m1() { } + static public void m2() { } + public void m3() { } + public void m4() { } + public void m5() { } + public void m6() { } + public void m7() { } + public void m8() { } + public void m9() { } + public void m10() { } + public void m11() { } + public void m12() { } + public void m13() { } + public void m14() { } + public void m15() { } + public void m16() { } + public void m17() { } + public void m18() { } + public void m19() { } + public void m20() { } + public void m21() { } + public void m22() { } + public void m23() { } + public void m24() { } + + public int p0 { get { return 1; } set { } } + static public int p1 { get { return 1; } set { } } + public int p2 { get { return 1; } set { } } + public int p3 { get { return 1; } set { } } + public int p4 { get { return 1; } set { } } + public int p5 { get { return 1; } set { } } + public int p6 { get { return 1; } set { } } + public int p7 { get { return 1; } set { } } + public int p8 { get { return 1; } set { } } + public int p9 { get { return 1; } set { } } + public int p10 { get { return 1; } set { } } + public int p11 { get { return 1; } set { } } + public int p12 { get { return 1; } set { } } + public int p13 { get { return 1; } set { } } + public int p14 { get { return 1; } set { } } + public int p15 { get { return 1; } set { } } + public int p16 { get { return 1; } set { } } + public int p17 { get { return 1; } set { } } + public int p18 { get { return 1; } set { } } + public int p19 { get { return 1; } set { } } + public int p20 { get { return 1; } set { } } + public int p21 { get { return 1; } set { } } + public int p22 { get { return 1; } set { } } + public int p23 { get { return 1; } set { } } + public int p24 { get { return 1; } set { } } + + public event d e0; + static public event d e1; + public event d e2; + public event d e3; + public event d e4; + public event d e5; + public event d e6; + public event d e7; + public event d e8; + public event d e9; + public event d e10; + public event d e11; + public event d e12; + public event d e13; + public event d e14; + public event d e15; + public event d e16; + public event d e17; + public event d e18; + public event d e19; + public event d e20; + public event d e21; + public event d e22; + public event d e23; + public event d e24; + + public void NoWarning() + { + e0 += new d(m1); + e1 += new d(m1); + e2 += new d(m1); + e3 += new d(m1); + e4 += new d(m1); + e5 += new d(m1); + e6 += new d(m1); + e7 += new d(m1); + e8 += new d(m1); + e9 += new d(m1); + e10 += new d(m1); + e11 += new d(m1); + e12 += new d(m1); + e13 += new d(m1); + e14 += new d(m1); + e15 += new d(m1); + e16 += new d(m1); + e17 += new d(m1); + e18 += new d(m1); + e19 += new d(m1); + e20 += new d(m1); + e21 += new d(m1); + e22 += new d(m1); + e23 += new d(m1); + e24 += new d(m1); + } } -} -public class Class11 -{ - public Class11() { } - public Class11(int i) { } - public Class11(int i, int ii) { } - - public int f0 = 0; - static public int f1 = 0; - public int f2 = 0; - public int f3 = 0; - public int f4 = 0; - public int f5 = 0; - public int f6 = 0; - public int f7 = 0; - public int f8 = 0; - public int f9 = 0; - public int f10 = 0; - public int f11 = 0; - public int f12 = 0; - public int f13 = 0; - public int f14 = 0; - public int f15 = 0; - public int f16 = 0; - public int f17 = 0; - public int f18 = 0; - public int f19 = 0; - public int f20 = 0; - public int f21 = 0; - public int f22 = 0; - public int f23 = 0; - public int f24 = 0; - - public void m1() { } - static public void m2() { } - public void m3() { } - public void m4() { } - public void m5() { } - public void m6() { } - public void m7() { } - public void m8() { } - public void m9() { } - public void m10() { } - public void m11() { } - public void m12() { } - public void m13() { } - public void m14() { } - public void m15() { } - public void m16() { } - public void m17() { } - public void m18() { } - public void m19() { } - public void m20() { } - public void m21() { } - public void m22() { } - public void m23() { } - public void m24() { } - - public int p0 { get { return 1; } set { } } - static public int p1 { get { return 1; } set { } } - public int p2 { get { return 1; } set { } } - public int p3 { get { return 1; } set { } } - public int p4 { get { return 1; } set { } } - public int p5 { get { return 1; } set { } } - public int p6 { get { return 1; } set { } } - public int p7 { get { return 1; } set { } } - public int p8 { get { return 1; } set { } } - public int p9 { get { return 1; } set { } } - public int p10 { get { return 1; } set { } } - public int p11 { get { return 1; } set { } } - public int p12 { get { return 1; } set { } } - public int p13 { get { return 1; } set { } } - public int p14 { get { return 1; } set { } } - public int p15 { get { return 1; } set { } } - public int p16 { get { return 1; } set { } } - public int p17 { get { return 1; } set { } } - public int p18 { get { return 1; } set { } } - public int p19 { get { return 1; } set { } } - public int p20 { get { return 1; } set { } } - public int p21 { get { return 1; } set { } } - public int p22 { get { return 1; } set { } } - public int p23 { get { return 1; } set { } } - public int p24 { get { return 1; } set { } } - - public event d e0; - static public event d e1; - public event d e2; - public event d e3; - public event d e4; - public event d e5; - public event d e6; - public event d e7; - public event d e8; - public event d e9; - public event d e10; - public event d e11; - public event d e12; - public event d e13; - public event d e14; - public event d e15; - public event d e16; - public event d e17; - public event d e18; - public event d e19; - public event d e20; - public event d e21; - public event d e22; - public event d e23; - public event d e24; - - public void NoWarning() + public class Class11 { - e0 += new d(m1); - e1 += new d(m1); - e2 += new d(m1); - e3 += new d(m1); - e4 += new d(m1); - e5 += new d(m1); - e6 += new d(m1); - e7 += new d(m1); - e8 += new d(m1); - e9 += new d(m1); - e10 += new d(m1); - e11 += new d(m1); - e12 += new d(m1); - e13 += new d(m1); - e14 += new d(m1); - e15 += new d(m1); - e16 += new d(m1); - e17 += new d(m1); - e18 += new d(m1); - e19 += new d(m1); - e20 += new d(m1); - e21 += new d(m1); - e22 += new d(m1); - e23 += new d(m1); - e24 += new d(m1); + public Class11() { } + public Class11(int i) { } + public Class11(int i, int ii) { } + + public int f0 = 0; + static public int f1 = 0; + public int f2 = 0; + public int f3 = 0; + public int f4 = 0; + public int f5 = 0; + public int f6 = 0; + public int f7 = 0; + public int f8 = 0; + public int f9 = 0; + public int f10 = 0; + public int f11 = 0; + public int f12 = 0; + public int f13 = 0; + public int f14 = 0; + public int f15 = 0; + public int f16 = 0; + public int f17 = 0; + public int f18 = 0; + public int f19 = 0; + public int f20 = 0; + public int f21 = 0; + public int f22 = 0; + public int f23 = 0; + public int f24 = 0; + + public void m1() { } + static public void m2() { } + public void m3() { } + public void m4() { } + public void m5() { } + public void m6() { } + public void m7() { } + public void m8() { } + public void m9() { } + public void m10() { } + public void m11() { } + public void m12() { } + public void m13() { } + public void m14() { } + public void m15() { } + public void m16() { } + public void m17() { } + public void m18() { } + public void m19() { } + public void m20() { } + public void m21() { } + public void m22() { } + public void m23() { } + public void m24() { } + + public int p0 { get { return 1; } set { } } + static public int p1 { get { return 1; } set { } } + public int p2 { get { return 1; } set { } } + public int p3 { get { return 1; } set { } } + public int p4 { get { return 1; } set { } } + public int p5 { get { return 1; } set { } } + public int p6 { get { return 1; } set { } } + public int p7 { get { return 1; } set { } } + public int p8 { get { return 1; } set { } } + public int p9 { get { return 1; } set { } } + public int p10 { get { return 1; } set { } } + public int p11 { get { return 1; } set { } } + public int p12 { get { return 1; } set { } } + public int p13 { get { return 1; } set { } } + public int p14 { get { return 1; } set { } } + public int p15 { get { return 1; } set { } } + public int p16 { get { return 1; } set { } } + public int p17 { get { return 1; } set { } } + public int p18 { get { return 1; } set { } } + public int p19 { get { return 1; } set { } } + public int p20 { get { return 1; } set { } } + public int p21 { get { return 1; } set { } } + public int p22 { get { return 1; } set { } } + public int p23 { get { return 1; } set { } } + public int p24 { get { return 1; } set { } } + + public event d e0; + static public event d e1; + public event d e2; + public event d e3; + public event d e4; + public event d e5; + public event d e6; + public event d e7; + public event d e8; + public event d e9; + public event d e10; + public event d e11; + public event d e12; + public event d e13; + public event d e14; + public event d e15; + public event d e16; + public event d e17; + public event d e18; + public event d e19; + public event d e20; + public event d e21; + public event d e22; + public event d e23; + public event d e24; + + public void NoWarning() + { + e0 += new d(m1); + e1 += new d(m1); + e2 += new d(m1); + e3 += new d(m1); + e4 += new d(m1); + e5 += new d(m1); + e6 += new d(m1); + e7 += new d(m1); + e8 += new d(m1); + e9 += new d(m1); + e10 += new d(m1); + e11 += new d(m1); + e12 += new d(m1); + e13 += new d(m1); + e14 += new d(m1); + e15 += new d(m1); + e16 += new d(m1); + e17 += new d(m1); + e18 += new d(m1); + e19 += new d(m1); + e20 += new d(m1); + e21 += new d(m1); + e22 += new d(m1); + e23 += new d(m1); + e24 += new d(m1); + } } -} -public class Class12 -{ - public Class12() { } - public Class12(int i) { } - public Class12(int i, int ii) { } - - public int f0 = 0; - static public int f1 = 0; - public int f2 = 0; - public int f3 = 0; - public int f4 = 0; - public int f5 = 0; - public int f6 = 0; - public int f7 = 0; - public int f8 = 0; - public int f9 = 0; - public int f10 = 0; - public int f11 = 0; - public int f12 = 0; - public int f13 = 0; - public int f14 = 0; - public int f15 = 0; - public int f16 = 0; - public int f17 = 0; - public int f18 = 0; - public int f19 = 0; - public int f20 = 0; - public int f21 = 0; - public int f22 = 0; - public int f23 = 0; - public int f24 = 0; - - public void m1() { } - static public void m2() { } - public void m3() { } - public void m4() { } - public void m5() { } - public void m6() { } - public void m7() { } - public void m8() { } - public void m9() { } - public void m10() { } - public void m11() { } - public void m12() { } - public void m13() { } - public void m14() { } - public void m15() { } - public void m16() { } - public void m17() { } - public void m18() { } - public void m19() { } - public void m20() { } - public void m21() { } - public void m22() { } - public void m23() { } - public void m24() { } - - public int p0 { get { return 1; } set { } } - static public int p1 { get { return 1; } set { } } - public int p2 { get { return 1; } set { } } - public int p3 { get { return 1; } set { } } - public int p4 { get { return 1; } set { } } - public int p5 { get { return 1; } set { } } - public int p6 { get { return 1; } set { } } - public int p7 { get { return 1; } set { } } - public int p8 { get { return 1; } set { } } - public int p9 { get { return 1; } set { } } - public int p10 { get { return 1; } set { } } - public int p11 { get { return 1; } set { } } - public int p12 { get { return 1; } set { } } - public int p13 { get { return 1; } set { } } - public int p14 { get { return 1; } set { } } - public int p15 { get { return 1; } set { } } - public int p16 { get { return 1; } set { } } - public int p17 { get { return 1; } set { } } - public int p18 { get { return 1; } set { } } - public int p19 { get { return 1; } set { } } - public int p20 { get { return 1; } set { } } - public int p21 { get { return 1; } set { } } - public int p22 { get { return 1; } set { } } - public int p23 { get { return 1; } set { } } - public int p24 { get { return 1; } set { } } - - public event d e0; - static public event d e1; - public event d e2; - public event d e3; - public event d e4; - public event d e5; - public event d e6; - public event d e7; - public event d e8; - public event d e9; - public event d e10; - public event d e11; - public event d e12; - public event d e13; - public event d e14; - public event d e15; - public event d e16; - public event d e17; - public event d e18; - public event d e19; - public event d e20; - public event d e21; - public event d e22; - public event d e23; - public event d e24; - - public void NoWarning() + public class Class12 { - e0 += new d(m1); - e1 += new d(m1); - e2 += new d(m1); - e3 += new d(m1); - e4 += new d(m1); - e5 += new d(m1); - e6 += new d(m1); - e7 += new d(m1); - e8 += new d(m1); - e9 += new d(m1); - e10 += new d(m1); - e11 += new d(m1); - e12 += new d(m1); - e13 += new d(m1); - e14 += new d(m1); - e15 += new d(m1); - e16 += new d(m1); - e17 += new d(m1); - e18 += new d(m1); - e19 += new d(m1); - e20 += new d(m1); - e21 += new d(m1); - e22 += new d(m1); - e23 += new d(m1); - e24 += new d(m1); + public Class12() { } + public Class12(int i) { } + public Class12(int i, int ii) { } + + public int f0 = 0; + static public int f1 = 0; + public int f2 = 0; + public int f3 = 0; + public int f4 = 0; + public int f5 = 0; + public int f6 = 0; + public int f7 = 0; + public int f8 = 0; + public int f9 = 0; + public int f10 = 0; + public int f11 = 0; + public int f12 = 0; + public int f13 = 0; + public int f14 = 0; + public int f15 = 0; + public int f16 = 0; + public int f17 = 0; + public int f18 = 0; + public int f19 = 0; + public int f20 = 0; + public int f21 = 0; + public int f22 = 0; + public int f23 = 0; + public int f24 = 0; + + public void m1() { } + static public void m2() { } + public void m3() { } + public void m4() { } + public void m5() { } + public void m6() { } + public void m7() { } + public void m8() { } + public void m9() { } + public void m10() { } + public void m11() { } + public void m12() { } + public void m13() { } + public void m14() { } + public void m15() { } + public void m16() { } + public void m17() { } + public void m18() { } + public void m19() { } + public void m20() { } + public void m21() { } + public void m22() { } + public void m23() { } + public void m24() { } + + public int p0 { get { return 1; } set { } } + static public int p1 { get { return 1; } set { } } + public int p2 { get { return 1; } set { } } + public int p3 { get { return 1; } set { } } + public int p4 { get { return 1; } set { } } + public int p5 { get { return 1; } set { } } + public int p6 { get { return 1; } set { } } + public int p7 { get { return 1; } set { } } + public int p8 { get { return 1; } set { } } + public int p9 { get { return 1; } set { } } + public int p10 { get { return 1; } set { } } + public int p11 { get { return 1; } set { } } + public int p12 { get { return 1; } set { } } + public int p13 { get { return 1; } set { } } + public int p14 { get { return 1; } set { } } + public int p15 { get { return 1; } set { } } + public int p16 { get { return 1; } set { } } + public int p17 { get { return 1; } set { } } + public int p18 { get { return 1; } set { } } + public int p19 { get { return 1; } set { } } + public int p20 { get { return 1; } set { } } + public int p21 { get { return 1; } set { } } + public int p22 { get { return 1; } set { } } + public int p23 { get { return 1; } set { } } + public int p24 { get { return 1; } set { } } + + public event d e0; + static public event d e1; + public event d e2; + public event d e3; + public event d e4; + public event d e5; + public event d e6; + public event d e7; + public event d e8; + public event d e9; + public event d e10; + public event d e11; + public event d e12; + public event d e13; + public event d e14; + public event d e15; + public event d e16; + public event d e17; + public event d e18; + public event d e19; + public event d e20; + public event d e21; + public event d e22; + public event d e23; + public event d e24; + + public void NoWarning() + { + e0 += new d(m1); + e1 += new d(m1); + e2 += new d(m1); + e3 += new d(m1); + e4 += new d(m1); + e5 += new d(m1); + e6 += new d(m1); + e7 += new d(m1); + e8 += new d(m1); + e9 += new d(m1); + e10 += new d(m1); + e11 += new d(m1); + e12 += new d(m1); + e13 += new d(m1); + e14 += new d(m1); + e15 += new d(m1); + e16 += new d(m1); + e17 += new d(m1); + e18 += new d(m1); + e19 += new d(m1); + e20 += new d(m1); + e21 += new d(m1); + e22 += new d(m1); + e23 += new d(m1); + e24 += new d(m1); + } } -} -public class Class13 -{ - public Class13() { } - public Class13(int i) { } - public Class13(int i, int ii) { } - - public int f0 = 0; - static public int f1 = 0; - public int f2 = 0; - public int f3 = 0; - public int f4 = 0; - public int f5 = 0; - public int f6 = 0; - public int f7 = 0; - public int f8 = 0; - public int f9 = 0; - public int f10 = 0; - public int f11 = 0; - public int f12 = 0; - public int f13 = 0; - public int f14 = 0; - public int f15 = 0; - public int f16 = 0; - public int f17 = 0; - public int f18 = 0; - public int f19 = 0; - public int f20 = 0; - public int f21 = 0; - public int f22 = 0; - public int f23 = 0; - public int f24 = 0; - - public void m1() { } - static public void m2() { } - public void m3() { } - public void m4() { } - public void m5() { } - public void m6() { } - public void m7() { } - public void m8() { } - public void m9() { } - public void m10() { } - public void m11() { } - public void m12() { } - public void m13() { } - public void m14() { } - public void m15() { } - public void m16() { } - public void m17() { } - public void m18() { } - public void m19() { } - public void m20() { } - public void m21() { } - public void m22() { } - public void m23() { } - public void m24() { } - - public int p0 { get { return 1; } set { } } - static public int p1 { get { return 1; } set { } } - public int p2 { get { return 1; } set { } } - public int p3 { get { return 1; } set { } } - public int p4 { get { return 1; } set { } } - public int p5 { get { return 1; } set { } } - public int p6 { get { return 1; } set { } } - public int p7 { get { return 1; } set { } } - public int p8 { get { return 1; } set { } } - public int p9 { get { return 1; } set { } } - public int p10 { get { return 1; } set { } } - public int p11 { get { return 1; } set { } } - public int p12 { get { return 1; } set { } } - public int p13 { get { return 1; } set { } } - public int p14 { get { return 1; } set { } } - public int p15 { get { return 1; } set { } } - public int p16 { get { return 1; } set { } } - public int p17 { get { return 1; } set { } } - public int p18 { get { return 1; } set { } } - public int p19 { get { return 1; } set { } } - public int p20 { get { return 1; } set { } } - public int p21 { get { return 1; } set { } } - public int p22 { get { return 1; } set { } } - public int p23 { get { return 1; } set { } } - public int p24 { get { return 1; } set { } } - - public event d e0; - static public event d e1; - public event d e2; - public event d e3; - public event d e4; - public event d e5; - public event d e6; - public event d e7; - public event d e8; - public event d e9; - public event d e10; - public event d e11; - public event d e12; - public event d e13; - public event d e14; - public event d e15; - public event d e16; - public event d e17; - public event d e18; - public event d e19; - public event d e20; - public event d e21; - public event d e22; - public event d e23; - public event d e24; - - public void NoWarning() + public class Class13 { - e0 += new d(m1); - e1 += new d(m1); - e2 += new d(m1); - e3 += new d(m1); - e4 += new d(m1); - e5 += new d(m1); - e6 += new d(m1); - e7 += new d(m1); - e8 += new d(m1); - e9 += new d(m1); - e10 += new d(m1); - e11 += new d(m1); - e12 += new d(m1); - e13 += new d(m1); - e14 += new d(m1); - e15 += new d(m1); - e16 += new d(m1); - e17 += new d(m1); - e18 += new d(m1); - e19 += new d(m1); - e20 += new d(m1); - e21 += new d(m1); - e22 += new d(m1); - e23 += new d(m1); - e24 += new d(m1); + public Class13() { } + public Class13(int i) { } + public Class13(int i, int ii) { } + + public int f0 = 0; + static public int f1 = 0; + public int f2 = 0; + public int f3 = 0; + public int f4 = 0; + public int f5 = 0; + public int f6 = 0; + public int f7 = 0; + public int f8 = 0; + public int f9 = 0; + public int f10 = 0; + public int f11 = 0; + public int f12 = 0; + public int f13 = 0; + public int f14 = 0; + public int f15 = 0; + public int f16 = 0; + public int f17 = 0; + public int f18 = 0; + public int f19 = 0; + public int f20 = 0; + public int f21 = 0; + public int f22 = 0; + public int f23 = 0; + public int f24 = 0; + + public void m1() { } + static public void m2() { } + public void m3() { } + public void m4() { } + public void m5() { } + public void m6() { } + public void m7() { } + public void m8() { } + public void m9() { } + public void m10() { } + public void m11() { } + public void m12() { } + public void m13() { } + public void m14() { } + public void m15() { } + public void m16() { } + public void m17() { } + public void m18() { } + public void m19() { } + public void m20() { } + public void m21() { } + public void m22() { } + public void m23() { } + public void m24() { } + + public int p0 { get { return 1; } set { } } + static public int p1 { get { return 1; } set { } } + public int p2 { get { return 1; } set { } } + public int p3 { get { return 1; } set { } } + public int p4 { get { return 1; } set { } } + public int p5 { get { return 1; } set { } } + public int p6 { get { return 1; } set { } } + public int p7 { get { return 1; } set { } } + public int p8 { get { return 1; } set { } } + public int p9 { get { return 1; } set { } } + public int p10 { get { return 1; } set { } } + public int p11 { get { return 1; } set { } } + public int p12 { get { return 1; } set { } } + public int p13 { get { return 1; } set { } } + public int p14 { get { return 1; } set { } } + public int p15 { get { return 1; } set { } } + public int p16 { get { return 1; } set { } } + public int p17 { get { return 1; } set { } } + public int p18 { get { return 1; } set { } } + public int p19 { get { return 1; } set { } } + public int p20 { get { return 1; } set { } } + public int p21 { get { return 1; } set { } } + public int p22 { get { return 1; } set { } } + public int p23 { get { return 1; } set { } } + public int p24 { get { return 1; } set { } } + + public event d e0; + static public event d e1; + public event d e2; + public event d e3; + public event d e4; + public event d e5; + public event d e6; + public event d e7; + public event d e8; + public event d e9; + public event d e10; + public event d e11; + public event d e12; + public event d e13; + public event d e14; + public event d e15; + public event d e16; + public event d e17; + public event d e18; + public event d e19; + public event d e20; + public event d e21; + public event d e22; + public event d e23; + public event d e24; + + public void NoWarning() + { + e0 += new d(m1); + e1 += new d(m1); + e2 += new d(m1); + e3 += new d(m1); + e4 += new d(m1); + e5 += new d(m1); + e6 += new d(m1); + e7 += new d(m1); + e8 += new d(m1); + e9 += new d(m1); + e10 += new d(m1); + e11 += new d(m1); + e12 += new d(m1); + e13 += new d(m1); + e14 += new d(m1); + e15 += new d(m1); + e16 += new d(m1); + e17 += new d(m1); + e18 += new d(m1); + e19 += new d(m1); + e20 += new d(m1); + e21 += new d(m1); + e22 += new d(m1); + e23 += new d(m1); + e24 += new d(m1); + } } -} -public class Class14 -{ - public Class14() { } - public Class14(int i) { } - public Class14(int i, int ii) { } - - public int f0 = 0; - static public int f1 = 0; - public int f2 = 0; - public int f3 = 0; - public int f4 = 0; - public int f5 = 0; - public int f6 = 0; - public int f7 = 0; - public int f8 = 0; - public int f9 = 0; - public int f10 = 0; - public int f11 = 0; - public int f12 = 0; - public int f13 = 0; - public int f14 = 0; - public int f15 = 0; - public int f16 = 0; - public int f17 = 0; - public int f18 = 0; - public int f19 = 0; - public int f20 = 0; - public int f21 = 0; - public int f22 = 0; - public int f23 = 0; - public int f24 = 0; - - public void m1() { } - static public void m2() { } - public void m3() { } - public void m4() { } - public void m5() { } - public void m6() { } - public void m7() { } - public void m8() { } - public void m9() { } - public void m10() { } - public void m11() { } - public void m12() { } - public void m13() { } - public void m14() { } - public void m15() { } - public void m16() { } - public void m17() { } - public void m18() { } - public void m19() { } - public void m20() { } - public void m21() { } - public void m22() { } - public void m23() { } - public void m24() { } - - public int p0 { get { return 1; } set { } } - static public int p1 { get { return 1; } set { } } - public int p2 { get { return 1; } set { } } - public int p3 { get { return 1; } set { } } - public int p4 { get { return 1; } set { } } - public int p5 { get { return 1; } set { } } - public int p6 { get { return 1; } set { } } - public int p7 { get { return 1; } set { } } - public int p8 { get { return 1; } set { } } - public int p9 { get { return 1; } set { } } - public int p10 { get { return 1; } set { } } - public int p11 { get { return 1; } set { } } - public int p12 { get { return 1; } set { } } - public int p13 { get { return 1; } set { } } - public int p14 { get { return 1; } set { } } - public int p15 { get { return 1; } set { } } - public int p16 { get { return 1; } set { } } - public int p17 { get { return 1; } set { } } - public int p18 { get { return 1; } set { } } - public int p19 { get { return 1; } set { } } - public int p20 { get { return 1; } set { } } - public int p21 { get { return 1; } set { } } - public int p22 { get { return 1; } set { } } - public int p23 { get { return 1; } set { } } - public int p24 { get { return 1; } set { } } - - public event d e0; - static public event d e1; - public event d e2; - public event d e3; - public event d e4; - public event d e5; - public event d e6; - public event d e7; - public event d e8; - public event d e9; - public event d e10; - public event d e11; - public event d e12; - public event d e13; - public event d e14; - public event d e15; - public event d e16; - public event d e17; - public event d e18; - public event d e19; - public event d e20; - public event d e21; - public event d e22; - public event d e23; - public event d e24; - - public void NoWarning() + public class Class14 { - e0 += new d(m1); - e1 += new d(m1); - e2 += new d(m1); - e3 += new d(m1); - e4 += new d(m1); - e5 += new d(m1); - e6 += new d(m1); - e7 += new d(m1); - e8 += new d(m1); - e9 += new d(m1); - e10 += new d(m1); - e11 += new d(m1); - e12 += new d(m1); - e13 += new d(m1); - e14 += new d(m1); - e15 += new d(m1); - e16 += new d(m1); - e17 += new d(m1); - e18 += new d(m1); - e19 += new d(m1); - e20 += new d(m1); - e21 += new d(m1); - e22 += new d(m1); - e23 += new d(m1); - e24 += new d(m1); + public Class14() { } + public Class14(int i) { } + public Class14(int i, int ii) { } + + public int f0 = 0; + static public int f1 = 0; + public int f2 = 0; + public int f3 = 0; + public int f4 = 0; + public int f5 = 0; + public int f6 = 0; + public int f7 = 0; + public int f8 = 0; + public int f9 = 0; + public int f10 = 0; + public int f11 = 0; + public int f12 = 0; + public int f13 = 0; + public int f14 = 0; + public int f15 = 0; + public int f16 = 0; + public int f17 = 0; + public int f18 = 0; + public int f19 = 0; + public int f20 = 0; + public int f21 = 0; + public int f22 = 0; + public int f23 = 0; + public int f24 = 0; + + public void m1() { } + static public void m2() { } + public void m3() { } + public void m4() { } + public void m5() { } + public void m6() { } + public void m7() { } + public void m8() { } + public void m9() { } + public void m10() { } + public void m11() { } + public void m12() { } + public void m13() { } + public void m14() { } + public void m15() { } + public void m16() { } + public void m17() { } + public void m18() { } + public void m19() { } + public void m20() { } + public void m21() { } + public void m22() { } + public void m23() { } + public void m24() { } + + public int p0 { get { return 1; } set { } } + static public int p1 { get { return 1; } set { } } + public int p2 { get { return 1; } set { } } + public int p3 { get { return 1; } set { } } + public int p4 { get { return 1; } set { } } + public int p5 { get { return 1; } set { } } + public int p6 { get { return 1; } set { } } + public int p7 { get { return 1; } set { } } + public int p8 { get { return 1; } set { } } + public int p9 { get { return 1; } set { } } + public int p10 { get { return 1; } set { } } + public int p11 { get { return 1; } set { } } + public int p12 { get { return 1; } set { } } + public int p13 { get { return 1; } set { } } + public int p14 { get { return 1; } set { } } + public int p15 { get { return 1; } set { } } + public int p16 { get { return 1; } set { } } + public int p17 { get { return 1; } set { } } + public int p18 { get { return 1; } set { } } + public int p19 { get { return 1; } set { } } + public int p20 { get { return 1; } set { } } + public int p21 { get { return 1; } set { } } + public int p22 { get { return 1; } set { } } + public int p23 { get { return 1; } set { } } + public int p24 { get { return 1; } set { } } + + public event d e0; + static public event d e1; + public event d e2; + public event d e3; + public event d e4; + public event d e5; + public event d e6; + public event d e7; + public event d e8; + public event d e9; + public event d e10; + public event d e11; + public event d e12; + public event d e13; + public event d e14; + public event d e15; + public event d e16; + public event d e17; + public event d e18; + public event d e19; + public event d e20; + public event d e21; + public event d e22; + public event d e23; + public event d e24; + + public void NoWarning() + { + e0 += new d(m1); + e1 += new d(m1); + e2 += new d(m1); + e3 += new d(m1); + e4 += new d(m1); + e5 += new d(m1); + e6 += new d(m1); + e7 += new d(m1); + e8 += new d(m1); + e9 += new d(m1); + e10 += new d(m1); + e11 += new d(m1); + e12 += new d(m1); + e13 += new d(m1); + e14 += new d(m1); + e15 += new d(m1); + e16 += new d(m1); + e17 += new d(m1); + e18 += new d(m1); + e19 += new d(m1); + e20 += new d(m1); + e21 += new d(m1); + e22 += new d(m1); + e23 += new d(m1); + e24 += new d(m1); + } } -} -public class Class15 -{ - public Class15() { } - public Class15(int i) { } - public Class15(int i, int ii) { } - - public int f0 = 0; - static public int f1 = 0; - public int f2 = 0; - public int f3 = 0; - public int f4 = 0; - public int f5 = 0; - public int f6 = 0; - public int f7 = 0; - public int f8 = 0; - public int f9 = 0; - public int f10 = 0; - public int f11 = 0; - public int f12 = 0; - public int f13 = 0; - public int f14 = 0; - public int f15 = 0; - public int f16 = 0; - public int f17 = 0; - public int f18 = 0; - public int f19 = 0; - public int f20 = 0; - public int f21 = 0; - public int f22 = 0; - public int f23 = 0; - public int f24 = 0; - - public void m1() { } - static public void m2() { } - public void m3() { } - public void m4() { } - public void m5() { } - public void m6() { } - public void m7() { } - public void m8() { } - public void m9() { } - public void m10() { } - public void m11() { } - public void m12() { } - public void m13() { } - public void m14() { } - public void m15() { } - public void m16() { } - public void m17() { } - public void m18() { } - public void m19() { } - public void m20() { } - public void m21() { } - public void m22() { } - public void m23() { } - public void m24() { } - - public int p0 { get { return 1; } set { } } - static public int p1 { get { return 1; } set { } } - public int p2 { get { return 1; } set { } } - public int p3 { get { return 1; } set { } } - public int p4 { get { return 1; } set { } } - public int p5 { get { return 1; } set { } } - public int p6 { get { return 1; } set { } } - public int p7 { get { return 1; } set { } } - public int p8 { get { return 1; } set { } } - public int p9 { get { return 1; } set { } } - public int p10 { get { return 1; } set { } } - public int p11 { get { return 1; } set { } } - public int p12 { get { return 1; } set { } } - public int p13 { get { return 1; } set { } } - public int p14 { get { return 1; } set { } } - public int p15 { get { return 1; } set { } } - public int p16 { get { return 1; } set { } } - public int p17 { get { return 1; } set { } } - public int p18 { get { return 1; } set { } } - public int p19 { get { return 1; } set { } } - public int p20 { get { return 1; } set { } } - public int p21 { get { return 1; } set { } } - public int p22 { get { return 1; } set { } } - public int p23 { get { return 1; } set { } } - public int p24 { get { return 1; } set { } } - - public event d e0; - static public event d e1; - public event d e2; - public event d e3; - public event d e4; - public event d e5; - public event d e6; - public event d e7; - public event d e8; - public event d e9; - public event d e10; - public event d e11; - public event d e12; - public event d e13; - public event d e14; - public event d e15; - public event d e16; - public event d e17; - public event d e18; - public event d e19; - public event d e20; - public event d e21; - public event d e22; - public event d e23; - public event d e24; - - public void NoWarning() + public class Class15 { - e0 += new d(m1); - e1 += new d(m1); - e2 += new d(m1); - e3 += new d(m1); - e4 += new d(m1); - e5 += new d(m1); - e6 += new d(m1); - e7 += new d(m1); - e8 += new d(m1); - e9 += new d(m1); - e10 += new d(m1); - e11 += new d(m1); - e12 += new d(m1); - e13 += new d(m1); - e14 += new d(m1); - e15 += new d(m1); - e16 += new d(m1); - e17 += new d(m1); - e18 += new d(m1); - e19 += new d(m1); - e20 += new d(m1); - e21 += new d(m1); - e22 += new d(m1); - e23 += new d(m1); - e24 += new d(m1); + public Class15() { } + public Class15(int i) { } + public Class15(int i, int ii) { } + + public int f0 = 0; + static public int f1 = 0; + public int f2 = 0; + public int f3 = 0; + public int f4 = 0; + public int f5 = 0; + public int f6 = 0; + public int f7 = 0; + public int f8 = 0; + public int f9 = 0; + public int f10 = 0; + public int f11 = 0; + public int f12 = 0; + public int f13 = 0; + public int f14 = 0; + public int f15 = 0; + public int f16 = 0; + public int f17 = 0; + public int f18 = 0; + public int f19 = 0; + public int f20 = 0; + public int f21 = 0; + public int f22 = 0; + public int f23 = 0; + public int f24 = 0; + + public void m1() { } + static public void m2() { } + public void m3() { } + public void m4() { } + public void m5() { } + public void m6() { } + public void m7() { } + public void m8() { } + public void m9() { } + public void m10() { } + public void m11() { } + public void m12() { } + public void m13() { } + public void m14() { } + public void m15() { } + public void m16() { } + public void m17() { } + public void m18() { } + public void m19() { } + public void m20() { } + public void m21() { } + public void m22() { } + public void m23() { } + public void m24() { } + + public int p0 { get { return 1; } set { } } + static public int p1 { get { return 1; } set { } } + public int p2 { get { return 1; } set { } } + public int p3 { get { return 1; } set { } } + public int p4 { get { return 1; } set { } } + public int p5 { get { return 1; } set { } } + public int p6 { get { return 1; } set { } } + public int p7 { get { return 1; } set { } } + public int p8 { get { return 1; } set { } } + public int p9 { get { return 1; } set { } } + public int p10 { get { return 1; } set { } } + public int p11 { get { return 1; } set { } } + public int p12 { get { return 1; } set { } } + public int p13 { get { return 1; } set { } } + public int p14 { get { return 1; } set { } } + public int p15 { get { return 1; } set { } } + public int p16 { get { return 1; } set { } } + public int p17 { get { return 1; } set { } } + public int p18 { get { return 1; } set { } } + public int p19 { get { return 1; } set { } } + public int p20 { get { return 1; } set { } } + public int p21 { get { return 1; } set { } } + public int p22 { get { return 1; } set { } } + public int p23 { get { return 1; } set { } } + public int p24 { get { return 1; } set { } } + + public event d e0; + static public event d e1; + public event d e2; + public event d e3; + public event d e4; + public event d e5; + public event d e6; + public event d e7; + public event d e8; + public event d e9; + public event d e10; + public event d e11; + public event d e12; + public event d e13; + public event d e14; + public event d e15; + public event d e16; + public event d e17; + public event d e18; + public event d e19; + public event d e20; + public event d e21; + public event d e22; + public event d e23; + public event d e24; + + public void NoWarning() + { + e0 += new d(m1); + e1 += new d(m1); + e2 += new d(m1); + e3 += new d(m1); + e4 += new d(m1); + e5 += new d(m1); + e6 += new d(m1); + e7 += new d(m1); + e8 += new d(m1); + e9 += new d(m1); + e10 += new d(m1); + e11 += new d(m1); + e12 += new d(m1); + e13 += new d(m1); + e14 += new d(m1); + e15 += new d(m1); + e16 += new d(m1); + e17 += new d(m1); + e18 += new d(m1); + e19 += new d(m1); + e20 += new d(m1); + e21 += new d(m1); + e22 += new d(m1); + e23 += new d(m1); + e24 += new d(m1); + } } -} -public class Class16 -{ - public Class16() { } - public Class16(int i) { } - public Class16(int i, int ii) { } - - public int f0 = 0; - static public int f1 = 0; - public int f2 = 0; - public int f3 = 0; - public int f4 = 0; - public int f5 = 0; - public int f6 = 0; - public int f7 = 0; - public int f8 = 0; - public int f9 = 0; - public int f10 = 0; - public int f11 = 0; - public int f12 = 0; - public int f13 = 0; - public int f14 = 0; - public int f15 = 0; - public int f16 = 0; - public int f17 = 0; - public int f18 = 0; - public int f19 = 0; - public int f20 = 0; - public int f21 = 0; - public int f22 = 0; - public int f23 = 0; - public int f24 = 0; - - public void m1() { } - static public void m2() { } - public void m3() { } - public void m4() { } - public void m5() { } - public void m6() { } - public void m7() { } - public void m8() { } - public void m9() { } - public void m10() { } - public void m11() { } - public void m12() { } - public void m13() { } - public void m14() { } - public void m15() { } - public void m16() { } - public void m17() { } - public void m18() { } - public void m19() { } - public void m20() { } - public void m21() { } - public void m22() { } - public void m23() { } - public void m24() { } - - public int p0 { get { return 1; } set { } } - static public int p1 { get { return 1; } set { } } - public int p2 { get { return 1; } set { } } - public int p3 { get { return 1; } set { } } - public int p4 { get { return 1; } set { } } - public int p5 { get { return 1; } set { } } - public int p6 { get { return 1; } set { } } - public int p7 { get { return 1; } set { } } - public int p8 { get { return 1; } set { } } - public int p9 { get { return 1; } set { } } - public int p10 { get { return 1; } set { } } - public int p11 { get { return 1; } set { } } - public int p12 { get { return 1; } set { } } - public int p13 { get { return 1; } set { } } - public int p14 { get { return 1; } set { } } - public int p15 { get { return 1; } set { } } - public int p16 { get { return 1; } set { } } - public int p17 { get { return 1; } set { } } - public int p18 { get { return 1; } set { } } - public int p19 { get { return 1; } set { } } - public int p20 { get { return 1; } set { } } - public int p21 { get { return 1; } set { } } - public int p22 { get { return 1; } set { } } - public int p23 { get { return 1; } set { } } - public int p24 { get { return 1; } set { } } - - public event d e0; - static public event d e1; - public event d e2; - public event d e3; - public event d e4; - public event d e5; - public event d e6; - public event d e7; - public event d e8; - public event d e9; - public event d e10; - public event d e11; - public event d e12; - public event d e13; - public event d e14; - public event d e15; - public event d e16; - public event d e17; - public event d e18; - public event d e19; - public event d e20; - public event d e21; - public event d e22; - public event d e23; - public event d e24; - - public void NoWarning() + public class Class16 { - e0 += new d(m1); - e1 += new d(m1); - e2 += new d(m1); - e3 += new d(m1); - e4 += new d(m1); - e5 += new d(m1); - e6 += new d(m1); - e7 += new d(m1); - e8 += new d(m1); - e9 += new d(m1); - e10 += new d(m1); - e11 += new d(m1); - e12 += new d(m1); - e13 += new d(m1); - e14 += new d(m1); - e15 += new d(m1); - e16 += new d(m1); - e17 += new d(m1); - e18 += new d(m1); - e19 += new d(m1); - e20 += new d(m1); - e21 += new d(m1); - e22 += new d(m1); - e23 += new d(m1); - e24 += new d(m1); + public Class16() { } + public Class16(int i) { } + public Class16(int i, int ii) { } + + public int f0 = 0; + static public int f1 = 0; + public int f2 = 0; + public int f3 = 0; + public int f4 = 0; + public int f5 = 0; + public int f6 = 0; + public int f7 = 0; + public int f8 = 0; + public int f9 = 0; + public int f10 = 0; + public int f11 = 0; + public int f12 = 0; + public int f13 = 0; + public int f14 = 0; + public int f15 = 0; + public int f16 = 0; + public int f17 = 0; + public int f18 = 0; + public int f19 = 0; + public int f20 = 0; + public int f21 = 0; + public int f22 = 0; + public int f23 = 0; + public int f24 = 0; + + public void m1() { } + static public void m2() { } + public void m3() { } + public void m4() { } + public void m5() { } + public void m6() { } + public void m7() { } + public void m8() { } + public void m9() { } + public void m10() { } + public void m11() { } + public void m12() { } + public void m13() { } + public void m14() { } + public void m15() { } + public void m16() { } + public void m17() { } + public void m18() { } + public void m19() { } + public void m20() { } + public void m21() { } + public void m22() { } + public void m23() { } + public void m24() { } + + public int p0 { get { return 1; } set { } } + static public int p1 { get { return 1; } set { } } + public int p2 { get { return 1; } set { } } + public int p3 { get { return 1; } set { } } + public int p4 { get { return 1; } set { } } + public int p5 { get { return 1; } set { } } + public int p6 { get { return 1; } set { } } + public int p7 { get { return 1; } set { } } + public int p8 { get { return 1; } set { } } + public int p9 { get { return 1; } set { } } + public int p10 { get { return 1; } set { } } + public int p11 { get { return 1; } set { } } + public int p12 { get { return 1; } set { } } + public int p13 { get { return 1; } set { } } + public int p14 { get { return 1; } set { } } + public int p15 { get { return 1; } set { } } + public int p16 { get { return 1; } set { } } + public int p17 { get { return 1; } set { } } + public int p18 { get { return 1; } set { } } + public int p19 { get { return 1; } set { } } + public int p20 { get { return 1; } set { } } + public int p21 { get { return 1; } set { } } + public int p22 { get { return 1; } set { } } + public int p23 { get { return 1; } set { } } + public int p24 { get { return 1; } set { } } + + public event d e0; + static public event d e1; + public event d e2; + public event d e3; + public event d e4; + public event d e5; + public event d e6; + public event d e7; + public event d e8; + public event d e9; + public event d e10; + public event d e11; + public event d e12; + public event d e13; + public event d e14; + public event d e15; + public event d e16; + public event d e17; + public event d e18; + public event d e19; + public event d e20; + public event d e21; + public event d e22; + public event d e23; + public event d e24; + + public void NoWarning() + { + e0 += new d(m1); + e1 += new d(m1); + e2 += new d(m1); + e3 += new d(m1); + e4 += new d(m1); + e5 += new d(m1); + e6 += new d(m1); + e7 += new d(m1); + e8 += new d(m1); + e9 += new d(m1); + e10 += new d(m1); + e11 += new d(m1); + e12 += new d(m1); + e13 += new d(m1); + e14 += new d(m1); + e15 += new d(m1); + e16 += new d(m1); + e17 += new d(m1); + e18 += new d(m1); + e19 += new d(m1); + e20 += new d(m1); + e21 += new d(m1); + e22 += new d(m1); + e23 += new d(m1); + e24 += new d(m1); + } } -} -public class Class17 -{ - public Class17() { } - public Class17(int i) { } - public Class17(int i, int ii) { } - - public int f0 = 0; - static public int f1 = 0; - public int f2 = 0; - public int f3 = 0; - public int f4 = 0; - public int f5 = 0; - public int f6 = 0; - public int f7 = 0; - public int f8 = 0; - public int f9 = 0; - public int f10 = 0; - public int f11 = 0; - public int f12 = 0; - public int f13 = 0; - public int f14 = 0; - public int f15 = 0; - public int f16 = 0; - public int f17 = 0; - public int f18 = 0; - public int f19 = 0; - public int f20 = 0; - public int f21 = 0; - public int f22 = 0; - public int f23 = 0; - public int f24 = 0; - - public void m1() { } - static public void m2() { } - public void m3() { } - public void m4() { } - public void m5() { } - public void m6() { } - public void m7() { } - public void m8() { } - public void m9() { } - public void m10() { } - public void m11() { } - public void m12() { } - public void m13() { } - public void m14() { } - public void m15() { } - public void m16() { } - public void m17() { } - public void m18() { } - public void m19() { } - public void m20() { } - public void m21() { } - public void m22() { } - public void m23() { } - public void m24() { } - - public int p0 { get { return 1; } set { } } - static public int p1 { get { return 1; } set { } } - public int p2 { get { return 1; } set { } } - public int p3 { get { return 1; } set { } } - public int p4 { get { return 1; } set { } } - public int p5 { get { return 1; } set { } } - public int p6 { get { return 1; } set { } } - public int p7 { get { return 1; } set { } } - public int p8 { get { return 1; } set { } } - public int p9 { get { return 1; } set { } } - public int p10 { get { return 1; } set { } } - public int p11 { get { return 1; } set { } } - public int p12 { get { return 1; } set { } } - public int p13 { get { return 1; } set { } } - public int p14 { get { return 1; } set { } } - public int p15 { get { return 1; } set { } } - public int p16 { get { return 1; } set { } } - public int p17 { get { return 1; } set { } } - public int p18 { get { return 1; } set { } } - public int p19 { get { return 1; } set { } } - public int p20 { get { return 1; } set { } } - public int p21 { get { return 1; } set { } } - public int p22 { get { return 1; } set { } } - public int p23 { get { return 1; } set { } } - public int p24 { get { return 1; } set { } } - - public event d e0; - static public event d e1; - public event d e2; - public event d e3; - public event d e4; - public event d e5; - public event d e6; - public event d e7; - public event d e8; - public event d e9; - public event d e10; - public event d e11; - public event d e12; - public event d e13; - public event d e14; - public event d e15; - public event d e16; - public event d e17; - public event d e18; - public event d e19; - public event d e20; - public event d e21; - public event d e22; - public event d e23; - public event d e24; - - public void NoWarning() + public class Class17 { - e0 += new d(m1); - e1 += new d(m1); - e2 += new d(m1); - e3 += new d(m1); - e4 += new d(m1); - e5 += new d(m1); - e6 += new d(m1); - e7 += new d(m1); - e8 += new d(m1); - e9 += new d(m1); - e10 += new d(m1); - e11 += new d(m1); - e12 += new d(m1); - e13 += new d(m1); - e14 += new d(m1); - e15 += new d(m1); - e16 += new d(m1); - e17 += new d(m1); - e18 += new d(m1); - e19 += new d(m1); - e20 += new d(m1); - e21 += new d(m1); - e22 += new d(m1); - e23 += new d(m1); - e24 += new d(m1); + public Class17() { } + public Class17(int i) { } + public Class17(int i, int ii) { } + + public int f0 = 0; + static public int f1 = 0; + public int f2 = 0; + public int f3 = 0; + public int f4 = 0; + public int f5 = 0; + public int f6 = 0; + public int f7 = 0; + public int f8 = 0; + public int f9 = 0; + public int f10 = 0; + public int f11 = 0; + public int f12 = 0; + public int f13 = 0; + public int f14 = 0; + public int f15 = 0; + public int f16 = 0; + public int f17 = 0; + public int f18 = 0; + public int f19 = 0; + public int f20 = 0; + public int f21 = 0; + public int f22 = 0; + public int f23 = 0; + public int f24 = 0; + + public void m1() { } + static public void m2() { } + public void m3() { } + public void m4() { } + public void m5() { } + public void m6() { } + public void m7() { } + public void m8() { } + public void m9() { } + public void m10() { } + public void m11() { } + public void m12() { } + public void m13() { } + public void m14() { } + public void m15() { } + public void m16() { } + public void m17() { } + public void m18() { } + public void m19() { } + public void m20() { } + public void m21() { } + public void m22() { } + public void m23() { } + public void m24() { } + + public int p0 { get { return 1; } set { } } + static public int p1 { get { return 1; } set { } } + public int p2 { get { return 1; } set { } } + public int p3 { get { return 1; } set { } } + public int p4 { get { return 1; } set { } } + public int p5 { get { return 1; } set { } } + public int p6 { get { return 1; } set { } } + public int p7 { get { return 1; } set { } } + public int p8 { get { return 1; } set { } } + public int p9 { get { return 1; } set { } } + public int p10 { get { return 1; } set { } } + public int p11 { get { return 1; } set { } } + public int p12 { get { return 1; } set { } } + public int p13 { get { return 1; } set { } } + public int p14 { get { return 1; } set { } } + public int p15 { get { return 1; } set { } } + public int p16 { get { return 1; } set { } } + public int p17 { get { return 1; } set { } } + public int p18 { get { return 1; } set { } } + public int p19 { get { return 1; } set { } } + public int p20 { get { return 1; } set { } } + public int p21 { get { return 1; } set { } } + public int p22 { get { return 1; } set { } } + public int p23 { get { return 1; } set { } } + public int p24 { get { return 1; } set { } } + + public event d e0; + static public event d e1; + public event d e2; + public event d e3; + public event d e4; + public event d e5; + public event d e6; + public event d e7; + public event d e8; + public event d e9; + public event d e10; + public event d e11; + public event d e12; + public event d e13; + public event d e14; + public event d e15; + public event d e16; + public event d e17; + public event d e18; + public event d e19; + public event d e20; + public event d e21; + public event d e22; + public event d e23; + public event d e24; + + public void NoWarning() + { + e0 += new d(m1); + e1 += new d(m1); + e2 += new d(m1); + e3 += new d(m1); + e4 += new d(m1); + e5 += new d(m1); + e6 += new d(m1); + e7 += new d(m1); + e8 += new d(m1); + e9 += new d(m1); + e10 += new d(m1); + e11 += new d(m1); + e12 += new d(m1); + e13 += new d(m1); + e14 += new d(m1); + e15 += new d(m1); + e16 += new d(m1); + e17 += new d(m1); + e18 += new d(m1); + e19 += new d(m1); + e20 += new d(m1); + e21 += new d(m1); + e22 += new d(m1); + e23 += new d(m1); + e24 += new d(m1); + } } -} -public class Class18 -{ - public Class18() { } - public Class18(int i) { } - public Class18(int i, int ii) { } - - public int f0 = 0; - static public int f1 = 0; - public int f2 = 0; - public int f3 = 0; - public int f4 = 0; - public int f5 = 0; - public int f6 = 0; - public int f7 = 0; - public int f8 = 0; - public int f9 = 0; - public int f10 = 0; - public int f11 = 0; - public int f12 = 0; - public int f13 = 0; - public int f14 = 0; - public int f15 = 0; - public int f16 = 0; - public int f17 = 0; - public int f18 = 0; - public int f19 = 0; - public int f20 = 0; - public int f21 = 0; - public int f22 = 0; - public int f23 = 0; - public int f24 = 0; - - public void m1() { } - static public void m2() { } - public void m3() { } - public void m4() { } - public void m5() { } - public void m6() { } - public void m7() { } - public void m8() { } - public void m9() { } - public void m10() { } - public void m11() { } - public void m12() { } - public void m13() { } - public void m14() { } - public void m15() { } - public void m16() { } - public void m17() { } - public void m18() { } - public void m19() { } - public void m20() { } - public void m21() { } - public void m22() { } - public void m23() { } - public void m24() { } - - public int p0 { get { return 1; } set { } } - static public int p1 { get { return 1; } set { } } - public int p2 { get { return 1; } set { } } - public int p3 { get { return 1; } set { } } - public int p4 { get { return 1; } set { } } - public int p5 { get { return 1; } set { } } - public int p6 { get { return 1; } set { } } - public int p7 { get { return 1; } set { } } - public int p8 { get { return 1; } set { } } - public int p9 { get { return 1; } set { } } - public int p10 { get { return 1; } set { } } - public int p11 { get { return 1; } set { } } - public int p12 { get { return 1; } set { } } - public int p13 { get { return 1; } set { } } - public int p14 { get { return 1; } set { } } - public int p15 { get { return 1; } set { } } - public int p16 { get { return 1; } set { } } - public int p17 { get { return 1; } set { } } - public int p18 { get { return 1; } set { } } - public int p19 { get { return 1; } set { } } - public int p20 { get { return 1; } set { } } - public int p21 { get { return 1; } set { } } - public int p22 { get { return 1; } set { } } - public int p23 { get { return 1; } set { } } - public int p24 { get { return 1; } set { } } - - public event d e0; - static public event d e1; - public event d e2; - public event d e3; - public event d e4; - public event d e5; - public event d e6; - public event d e7; - public event d e8; - public event d e9; - public event d e10; - public event d e11; - public event d e12; - public event d e13; - public event d e14; - public event d e15; - public event d e16; - public event d e17; - public event d e18; - public event d e19; - public event d e20; - public event d e21; - public event d e22; - public event d e23; - public event d e24; - - public void NoWarning() + public class Class18 { - e0 += new d(m1); - e1 += new d(m1); - e2 += new d(m1); - e3 += new d(m1); - e4 += new d(m1); - e5 += new d(m1); - e6 += new d(m1); - e7 += new d(m1); - e8 += new d(m1); - e9 += new d(m1); - e10 += new d(m1); - e11 += new d(m1); - e12 += new d(m1); - e13 += new d(m1); - e14 += new d(m1); - e15 += new d(m1); - e16 += new d(m1); - e17 += new d(m1); - e18 += new d(m1); - e19 += new d(m1); - e20 += new d(m1); - e21 += new d(m1); - e22 += new d(m1); - e23 += new d(m1); - e24 += new d(m1); + public Class18() { } + public Class18(int i) { } + public Class18(int i, int ii) { } + + public int f0 = 0; + static public int f1 = 0; + public int f2 = 0; + public int f3 = 0; + public int f4 = 0; + public int f5 = 0; + public int f6 = 0; + public int f7 = 0; + public int f8 = 0; + public int f9 = 0; + public int f10 = 0; + public int f11 = 0; + public int f12 = 0; + public int f13 = 0; + public int f14 = 0; + public int f15 = 0; + public int f16 = 0; + public int f17 = 0; + public int f18 = 0; + public int f19 = 0; + public int f20 = 0; + public int f21 = 0; + public int f22 = 0; + public int f23 = 0; + public int f24 = 0; + + public void m1() { } + static public void m2() { } + public void m3() { } + public void m4() { } + public void m5() { } + public void m6() { } + public void m7() { } + public void m8() { } + public void m9() { } + public void m10() { } + public void m11() { } + public void m12() { } + public void m13() { } + public void m14() { } + public void m15() { } + public void m16() { } + public void m17() { } + public void m18() { } + public void m19() { } + public void m20() { } + public void m21() { } + public void m22() { } + public void m23() { } + public void m24() { } + + public int p0 { get { return 1; } set { } } + static public int p1 { get { return 1; } set { } } + public int p2 { get { return 1; } set { } } + public int p3 { get { return 1; } set { } } + public int p4 { get { return 1; } set { } } + public int p5 { get { return 1; } set { } } + public int p6 { get { return 1; } set { } } + public int p7 { get { return 1; } set { } } + public int p8 { get { return 1; } set { } } + public int p9 { get { return 1; } set { } } + public int p10 { get { return 1; } set { } } + public int p11 { get { return 1; } set { } } + public int p12 { get { return 1; } set { } } + public int p13 { get { return 1; } set { } } + public int p14 { get { return 1; } set { } } + public int p15 { get { return 1; } set { } } + public int p16 { get { return 1; } set { } } + public int p17 { get { return 1; } set { } } + public int p18 { get { return 1; } set { } } + public int p19 { get { return 1; } set { } } + public int p20 { get { return 1; } set { } } + public int p21 { get { return 1; } set { } } + public int p22 { get { return 1; } set { } } + public int p23 { get { return 1; } set { } } + public int p24 { get { return 1; } set { } } + + public event d e0; + static public event d e1; + public event d e2; + public event d e3; + public event d e4; + public event d e5; + public event d e6; + public event d e7; + public event d e8; + public event d e9; + public event d e10; + public event d e11; + public event d e12; + public event d e13; + public event d e14; + public event d e15; + public event d e16; + public event d e17; + public event d e18; + public event d e19; + public event d e20; + public event d e21; + public event d e22; + public event d e23; + public event d e24; + + public void NoWarning() + { + e0 += new d(m1); + e1 += new d(m1); + e2 += new d(m1); + e3 += new d(m1); + e4 += new d(m1); + e5 += new d(m1); + e6 += new d(m1); + e7 += new d(m1); + e8 += new d(m1); + e9 += new d(m1); + e10 += new d(m1); + e11 += new d(m1); + e12 += new d(m1); + e13 += new d(m1); + e14 += new d(m1); + e15 += new d(m1); + e16 += new d(m1); + e17 += new d(m1); + e18 += new d(m1); + e19 += new d(m1); + e20 += new d(m1); + e21 += new d(m1); + e22 += new d(m1); + e23 += new d(m1); + e24 += new d(m1); + } } -} -public class Class19 -{ - public Class19() { } - public Class19(int i) { } - public Class19(int i, int ii) { } - - public int f0 = 0; - static public int f1 = 0; - public int f2 = 0; - public int f3 = 0; - public int f4 = 0; - public int f5 = 0; - public int f6 = 0; - public int f7 = 0; - public int f8 = 0; - public int f9 = 0; - public int f10 = 0; - public int f11 = 0; - public int f12 = 0; - public int f13 = 0; - public int f14 = 0; - public int f15 = 0; - public int f16 = 0; - public int f17 = 0; - public int f18 = 0; - public int f19 = 0; - public int f20 = 0; - public int f21 = 0; - public int f22 = 0; - public int f23 = 0; - public int f24 = 0; - - public void m1() { } - static public void m2() { } - public void m3() { } - public void m4() { } - public void m5() { } - public void m6() { } - public void m7() { } - public void m8() { } - public void m9() { } - public void m10() { } - public void m11() { } - public void m12() { } - public void m13() { } - public void m14() { } - public void m15() { } - public void m16() { } - public void m17() { } - public void m18() { } - public void m19() { } - public void m20() { } - public void m21() { } - public void m22() { } - public void m23() { } - public void m24() { } - - public int p0 { get { return 1; } set { } } - static public int p1 { get { return 1; } set { } } - public int p2 { get { return 1; } set { } } - public int p3 { get { return 1; } set { } } - public int p4 { get { return 1; } set { } } - public int p5 { get { return 1; } set { } } - public int p6 { get { return 1; } set { } } - public int p7 { get { return 1; } set { } } - public int p8 { get { return 1; } set { } } - public int p9 { get { return 1; } set { } } - public int p10 { get { return 1; } set { } } - public int p11 { get { return 1; } set { } } - public int p12 { get { return 1; } set { } } - public int p13 { get { return 1; } set { } } - public int p14 { get { return 1; } set { } } - public int p15 { get { return 1; } set { } } - public int p16 { get { return 1; } set { } } - public int p17 { get { return 1; } set { } } - public int p18 { get { return 1; } set { } } - public int p19 { get { return 1; } set { } } - public int p20 { get { return 1; } set { } } - public int p21 { get { return 1; } set { } } - public int p22 { get { return 1; } set { } } - public int p23 { get { return 1; } set { } } - public int p24 { get { return 1; } set { } } - - public event d e0; - static public event d e1; - public event d e2; - public event d e3; - public event d e4; - public event d e5; - public event d e6; - public event d e7; - public event d e8; - public event d e9; - public event d e10; - public event d e11; - public event d e12; - public event d e13; - public event d e14; - public event d e15; - public event d e16; - public event d e17; - public event d e18; - public event d e19; - public event d e20; - public event d e21; - public event d e22; - public event d e23; - public event d e24; - - public void NoWarning() + public class Class19 { - e0 += new d(m1); - e1 += new d(m1); - e2 += new d(m1); - e3 += new d(m1); - e4 += new d(m1); - e5 += new d(m1); - e6 += new d(m1); - e7 += new d(m1); - e8 += new d(m1); - e9 += new d(m1); - e10 += new d(m1); - e11 += new d(m1); - e12 += new d(m1); - e13 += new d(m1); - e14 += new d(m1); - e15 += new d(m1); - e16 += new d(m1); - e17 += new d(m1); - e18 += new d(m1); - e19 += new d(m1); - e20 += new d(m1); - e21 += new d(m1); - e22 += new d(m1); - e23 += new d(m1); - e24 += new d(m1); + public Class19() { } + public Class19(int i) { } + public Class19(int i, int ii) { } + + public int f0 = 0; + static public int f1 = 0; + public int f2 = 0; + public int f3 = 0; + public int f4 = 0; + public int f5 = 0; + public int f6 = 0; + public int f7 = 0; + public int f8 = 0; + public int f9 = 0; + public int f10 = 0; + public int f11 = 0; + public int f12 = 0; + public int f13 = 0; + public int f14 = 0; + public int f15 = 0; + public int f16 = 0; + public int f17 = 0; + public int f18 = 0; + public int f19 = 0; + public int f20 = 0; + public int f21 = 0; + public int f22 = 0; + public int f23 = 0; + public int f24 = 0; + + public void m1() { } + static public void m2() { } + public void m3() { } + public void m4() { } + public void m5() { } + public void m6() { } + public void m7() { } + public void m8() { } + public void m9() { } + public void m10() { } + public void m11() { } + public void m12() { } + public void m13() { } + public void m14() { } + public void m15() { } + public void m16() { } + public void m17() { } + public void m18() { } + public void m19() { } + public void m20() { } + public void m21() { } + public void m22() { } + public void m23() { } + public void m24() { } + + public int p0 { get { return 1; } set { } } + static public int p1 { get { return 1; } set { } } + public int p2 { get { return 1; } set { } } + public int p3 { get { return 1; } set { } } + public int p4 { get { return 1; } set { } } + public int p5 { get { return 1; } set { } } + public int p6 { get { return 1; } set { } } + public int p7 { get { return 1; } set { } } + public int p8 { get { return 1; } set { } } + public int p9 { get { return 1; } set { } } + public int p10 { get { return 1; } set { } } + public int p11 { get { return 1; } set { } } + public int p12 { get { return 1; } set { } } + public int p13 { get { return 1; } set { } } + public int p14 { get { return 1; } set { } } + public int p15 { get { return 1; } set { } } + public int p16 { get { return 1; } set { } } + public int p17 { get { return 1; } set { } } + public int p18 { get { return 1; } set { } } + public int p19 { get { return 1; } set { } } + public int p20 { get { return 1; } set { } } + public int p21 { get { return 1; } set { } } + public int p22 { get { return 1; } set { } } + public int p23 { get { return 1; } set { } } + public int p24 { get { return 1; } set { } } + + public event d e0; + static public event d e1; + public event d e2; + public event d e3; + public event d e4; + public event d e5; + public event d e6; + public event d e7; + public event d e8; + public event d e9; + public event d e10; + public event d e11; + public event d e12; + public event d e13; + public event d e14; + public event d e15; + public event d e16; + public event d e17; + public event d e18; + public event d e19; + public event d e20; + public event d e21; + public event d e22; + public event d e23; + public event d e24; + + public void NoWarning() + { + e0 += new d(m1); + e1 += new d(m1); + e2 += new d(m1); + e3 += new d(m1); + e4 += new d(m1); + e5 += new d(m1); + e6 += new d(m1); + e7 += new d(m1); + e8 += new d(m1); + e9 += new d(m1); + e10 += new d(m1); + e11 += new d(m1); + e12 += new d(m1); + e13 += new d(m1); + e14 += new d(m1); + e15 += new d(m1); + e16 += new d(m1); + e17 += new d(m1); + e18 += new d(m1); + e19 += new d(m1); + e20 += new d(m1); + e21 += new d(m1); + e22 += new d(m1); + e23 += new d(m1); + e24 += new d(m1); + } } -} -public class Class20 -{ - public Class20() { } - public Class20(int i) { } - public Class20(int i, int ii) { } - - public int f0 = 0; - static public int f1 = 0; - public int f2 = 0; - public int f3 = 0; - public int f4 = 0; - public int f5 = 0; - public int f6 = 0; - public int f7 = 0; - public int f8 = 0; - public int f9 = 0; - public int f10 = 0; - public int f11 = 0; - public int f12 = 0; - public int f13 = 0; - public int f14 = 0; - public int f15 = 0; - public int f16 = 0; - public int f17 = 0; - public int f18 = 0; - public int f19 = 0; - public int f20 = 0; - public int f21 = 0; - public int f22 = 0; - public int f23 = 0; - public int f24 = 0; - - public void m1() { } - static public void m2() { } - public void m3() { } - public void m4() { } - public void m5() { } - public void m6() { } - public void m7() { } - public void m8() { } - public void m9() { } - public void m10() { } - public void m11() { } - public void m12() { } - public void m13() { } - public void m14() { } - public void m15() { } - public void m16() { } - public void m17() { } - public void m18() { } - public void m19() { } - public void m20() { } - public void m21() { } - public void m22() { } - public void m23() { } - public void m24() { } - - public int p0 { get { return 1; } set { } } - static public int p1 { get { return 1; } set { } } - public int p2 { get { return 1; } set { } } - public int p3 { get { return 1; } set { } } - public int p4 { get { return 1; } set { } } - public int p5 { get { return 1; } set { } } - public int p6 { get { return 1; } set { } } - public int p7 { get { return 1; } set { } } - public int p8 { get { return 1; } set { } } - public int p9 { get { return 1; } set { } } - public int p10 { get { return 1; } set { } } - public int p11 { get { return 1; } set { } } - public int p12 { get { return 1; } set { } } - public int p13 { get { return 1; } set { } } - public int p14 { get { return 1; } set { } } - public int p15 { get { return 1; } set { } } - public int p16 { get { return 1; } set { } } - public int p17 { get { return 1; } set { } } - public int p18 { get { return 1; } set { } } - public int p19 { get { return 1; } set { } } - public int p20 { get { return 1; } set { } } - public int p21 { get { return 1; } set { } } - public int p22 { get { return 1; } set { } } - public int p23 { get { return 1; } set { } } - public int p24 { get { return 1; } set { } } - - public event d e0; - static public event d e1; - public event d e2; - public event d e3; - public event d e4; - public event d e5; - public event d e6; - public event d e7; - public event d e8; - public event d e9; - public event d e10; - public event d e11; - public event d e12; - public event d e13; - public event d e14; - public event d e15; - public event d e16; - public event d e17; - public event d e18; - public event d e19; - public event d e20; - public event d e21; - public event d e22; - public event d e23; - public event d e24; - - public void NoWarning() + public class Class20 { - e0 += new d(m1); - e1 += new d(m1); - e2 += new d(m1); - e3 += new d(m1); - e4 += new d(m1); - e5 += new d(m1); - e6 += new d(m1); - e7 += new d(m1); - e8 += new d(m1); - e9 += new d(m1); - e10 += new d(m1); - e11 += new d(m1); - e12 += new d(m1); - e13 += new d(m1); - e14 += new d(m1); - e15 += new d(m1); - e16 += new d(m1); - e17 += new d(m1); - e18 += new d(m1); - e19 += new d(m1); - e20 += new d(m1); - e21 += new d(m1); - e22 += new d(m1); - e23 += new d(m1); - e24 += new d(m1); + public Class20() { } + public Class20(int i) { } + public Class20(int i, int ii) { } + + public int f0 = 0; + static public int f1 = 0; + public int f2 = 0; + public int f3 = 0; + public int f4 = 0; + public int f5 = 0; + public int f6 = 0; + public int f7 = 0; + public int f8 = 0; + public int f9 = 0; + public int f10 = 0; + public int f11 = 0; + public int f12 = 0; + public int f13 = 0; + public int f14 = 0; + public int f15 = 0; + public int f16 = 0; + public int f17 = 0; + public int f18 = 0; + public int f19 = 0; + public int f20 = 0; + public int f21 = 0; + public int f22 = 0; + public int f23 = 0; + public int f24 = 0; + + public void m1() { } + static public void m2() { } + public void m3() { } + public void m4() { } + public void m5() { } + public void m6() { } + public void m7() { } + public void m8() { } + public void m9() { } + public void m10() { } + public void m11() { } + public void m12() { } + public void m13() { } + public void m14() { } + public void m15() { } + public void m16() { } + public void m17() { } + public void m18() { } + public void m19() { } + public void m20() { } + public void m21() { } + public void m22() { } + public void m23() { } + public void m24() { } + + public int p0 { get { return 1; } set { } } + static public int p1 { get { return 1; } set { } } + public int p2 { get { return 1; } set { } } + public int p3 { get { return 1; } set { } } + public int p4 { get { return 1; } set { } } + public int p5 { get { return 1; } set { } } + public int p6 { get { return 1; } set { } } + public int p7 { get { return 1; } set { } } + public int p8 { get { return 1; } set { } } + public int p9 { get { return 1; } set { } } + public int p10 { get { return 1; } set { } } + public int p11 { get { return 1; } set { } } + public int p12 { get { return 1; } set { } } + public int p13 { get { return 1; } set { } } + public int p14 { get { return 1; } set { } } + public int p15 { get { return 1; } set { } } + public int p16 { get { return 1; } set { } } + public int p17 { get { return 1; } set { } } + public int p18 { get { return 1; } set { } } + public int p19 { get { return 1; } set { } } + public int p20 { get { return 1; } set { } } + public int p21 { get { return 1; } set { } } + public int p22 { get { return 1; } set { } } + public int p23 { get { return 1; } set { } } + public int p24 { get { return 1; } set { } } + + public event d e0; + static public event d e1; + public event d e2; + public event d e3; + public event d e4; + public event d e5; + public event d e6; + public event d e7; + public event d e8; + public event d e9; + public event d e10; + public event d e11; + public event d e12; + public event d e13; + public event d e14; + public event d e15; + public event d e16; + public event d e17; + public event d e18; + public event d e19; + public event d e20; + public event d e21; + public event d e22; + public event d e23; + public event d e24; + + public void NoWarning() + { + e0 += new d(m1); + e1 += new d(m1); + e2 += new d(m1); + e3 += new d(m1); + e4 += new d(m1); + e5 += new d(m1); + e6 += new d(m1); + e7 += new d(m1); + e8 += new d(m1); + e9 += new d(m1); + e10 += new d(m1); + e11 += new d(m1); + e12 += new d(m1); + e13 += new d(m1); + e14 += new d(m1); + e15 += new d(m1); + e16 += new d(m1); + e17 += new d(m1); + e18 += new d(m1); + e19 += new d(m1); + e20 += new d(m1); + e21 += new d(m1); + e22 += new d(m1); + e23 += new d(m1); + e24 += new d(m1); + } } -} -#endregion + #endregion -public delegate void d(); + public delegate void d(); +} \ No newline at end of file diff --git a/tests/src/performance/perflab/StackWalk.cs b/tests/src/performance/perflab/StackWalk.cs index da36fd07ec..b845ef9e1c 100644 --- a/tests/src/performance/perflab/StackWalk.cs +++ b/tests/src/performance/perflab/StackWalk.cs @@ -5,72 +5,75 @@ using Microsoft.Xunit.Performance; using System; using System.Runtime.CompilerServices; -public static class StackWalk +namespace PerfLabTests { - [Benchmark(InnerIterationCount=1000)] - public static void Walk() + public static class StackWalk { - A(5); - } + [Benchmark(InnerIterationCount = 1000)] + public static void Walk() + { + A(5); + } - [MethodImpl(MethodImplOptions.NoInlining)] - private static int A(int a) { return B(a + 5); } - [MethodImpl(MethodImplOptions.NoInlining)] - private static int B(int a) { return C(a + 5); } - [MethodImpl(MethodImplOptions.NoInlining)] - private static int C(int a) { return D(a + 5); } - [MethodImpl(MethodImplOptions.NoInlining)] - private static int D(int a) { return E(a + 5); } - [MethodImpl(MethodImplOptions.NoInlining)] - private static int E(int a) { return F(a + 5); } - [MethodImpl(MethodImplOptions.NoInlining)] - private static int F(int a) { return G(a + 5); } - [MethodImpl(MethodImplOptions.NoInlining)] - private static int G(int a) { return H(a + 5); } - [MethodImpl(MethodImplOptions.NoInlining)] - private static int H(int a) { return I(a + 5); } - [MethodImpl(MethodImplOptions.NoInlining)] - private static int I(int a) { return J(a + 5); } - [MethodImpl(MethodImplOptions.NoInlining)] - private static int J(int a) { return K(a + 5); } - [MethodImpl(MethodImplOptions.NoInlining)] - private static int K(int a) { return L(a + 5); } - [MethodImpl(MethodImplOptions.NoInlining)] - private static int L(int a) { return M(a + 5); } - [MethodImpl(MethodImplOptions.NoInlining)] - private static int M(int a) { return N(a + 5); } - [MethodImpl(MethodImplOptions.NoInlining)] - private static int N(int a) { return O(a + 5); } - [MethodImpl(MethodImplOptions.NoInlining)] - private static int O(int a) { return P(a + 5); } - [MethodImpl(MethodImplOptions.NoInlining)] - private static int P(int a) { return Q(a + 5); } - [MethodImpl(MethodImplOptions.NoInlining)] - private static int Q(int a) { return R(a + 5); } - [MethodImpl(MethodImplOptions.NoInlining)] - private static int R(int a) { return S(a + 5); } - [MethodImpl(MethodImplOptions.NoInlining)] - private static int S(int a) { return T(a + 5); } - [MethodImpl(MethodImplOptions.NoInlining)] - private static int T(int a) { return U(a + 5); } - [MethodImpl(MethodImplOptions.NoInlining)] - private static int U(int a) { return V(a + 5); } - [MethodImpl(MethodImplOptions.NoInlining)] - private static int V(int a) { return W(a + 5); } - [MethodImpl(MethodImplOptions.NoInlining)] - private static int W(int a) { return X(a + 5); } - [MethodImpl(MethodImplOptions.NoInlining)] - private static int X(int a) { return Y(a + 5); } - [MethodImpl(MethodImplOptions.NoInlining)] - private static int Y(int a) { return Z(a + 5); } - [MethodImpl(MethodImplOptions.NoInlining)] - private static int Z(int a) - { - foreach (var iteration in Benchmark.Iterations) - using (iteration.StartMeasurement()) - for (int i = 0; i < Benchmark.InnerIterationCount; i++) - GC.Collect(0); + [MethodImpl(MethodImplOptions.NoInlining)] + private static int A(int a) { return B(a + 5); } + [MethodImpl(MethodImplOptions.NoInlining)] + private static int B(int a) { return C(a + 5); } + [MethodImpl(MethodImplOptions.NoInlining)] + private static int C(int a) { return D(a + 5); } + [MethodImpl(MethodImplOptions.NoInlining)] + private static int D(int a) { return E(a + 5); } + [MethodImpl(MethodImplOptions.NoInlining)] + private static int E(int a) { return F(a + 5); } + [MethodImpl(MethodImplOptions.NoInlining)] + private static int F(int a) { return G(a + 5); } + [MethodImpl(MethodImplOptions.NoInlining)] + private static int G(int a) { return H(a + 5); } + [MethodImpl(MethodImplOptions.NoInlining)] + private static int H(int a) { return I(a + 5); } + [MethodImpl(MethodImplOptions.NoInlining)] + private static int I(int a) { return J(a + 5); } + [MethodImpl(MethodImplOptions.NoInlining)] + private static int J(int a) { return K(a + 5); } + [MethodImpl(MethodImplOptions.NoInlining)] + private static int K(int a) { return L(a + 5); } + [MethodImpl(MethodImplOptions.NoInlining)] + private static int L(int a) { return M(a + 5); } + [MethodImpl(MethodImplOptions.NoInlining)] + private static int M(int a) { return N(a + 5); } + [MethodImpl(MethodImplOptions.NoInlining)] + private static int N(int a) { return O(a + 5); } + [MethodImpl(MethodImplOptions.NoInlining)] + private static int O(int a) { return P(a + 5); } + [MethodImpl(MethodImplOptions.NoInlining)] + private static int P(int a) { return Q(a + 5); } + [MethodImpl(MethodImplOptions.NoInlining)] + private static int Q(int a) { return R(a + 5); } + [MethodImpl(MethodImplOptions.NoInlining)] + private static int R(int a) { return S(a + 5); } + [MethodImpl(MethodImplOptions.NoInlining)] + private static int S(int a) { return T(a + 5); } + [MethodImpl(MethodImplOptions.NoInlining)] + private static int T(int a) { return U(a + 5); } + [MethodImpl(MethodImplOptions.NoInlining)] + private static int U(int a) { return V(a + 5); } + [MethodImpl(MethodImplOptions.NoInlining)] + private static int V(int a) { return W(a + 5); } + [MethodImpl(MethodImplOptions.NoInlining)] + private static int W(int a) { return X(a + 5); } + [MethodImpl(MethodImplOptions.NoInlining)] + private static int X(int a) { return Y(a + 5); } + [MethodImpl(MethodImplOptions.NoInlining)] + private static int Y(int a) { return Z(a + 5); } + [MethodImpl(MethodImplOptions.NoInlining)] + private static int Z(int a) + { + foreach (var iteration in Benchmark.Iterations) + using (iteration.StartMeasurement()) + for (int i = 0; i < Benchmark.InnerIterationCount; i++) + GC.Collect(0); - return 55; + return 55; + } } } \ No newline at end of file diff --git a/tests/src/performance/perflab/ThreadingPerf.cs b/tests/src/performance/perflab/ThreadingPerf.cs index 5cb16d49e1..13d6ba071f 100644 --- a/tests/src/performance/perflab/ThreadingPerf.cs +++ b/tests/src/performance/perflab/ThreadingPerf.cs @@ -5,70 +5,73 @@ using Microsoft.Xunit.Performance; using System; using System.Threading; -public class JITIntrinsics +namespace PerfLabTests { - private static int s_i; - private static string s_s; - - [Benchmark(InnerIterationCount=100000)] - public static void CompareExchangeIntNoMatch() + public class JITIntrinsics { - s_i = 0; - foreach (var iteration in Benchmark.Iterations) - using (iteration.StartMeasurement()) - for (int i = 0; i < Benchmark.InnerIterationCount; i++) - Interlocked.CompareExchange(ref s_i, 5, -1); - } + private static int s_i; + private static string s_s; - [Benchmark(InnerIterationCount=100000)] - public static void CompareExchangeIntMatch() - { - foreach (var iteration in Benchmark.Iterations) + [Benchmark(InnerIterationCount = 100000)] + public static void CompareExchangeIntNoMatch() { - s_i = 1; - using (iteration.StartMeasurement()) - for (int i = 0; i < Benchmark.InnerIterationCount; i++) - Interlocked.CompareExchange(ref s_i, 5, 1); + s_i = 0; + foreach (var iteration in Benchmark.Iterations) + using (iteration.StartMeasurement()) + for (int i = 0; i < Benchmark.InnerIterationCount; i++) + Interlocked.CompareExchange(ref s_i, 5, -1); } - } - [Benchmark(InnerIterationCount=100000)] - public static void CompareExchangeObjNoMatch() - { - s_s = "Hello"; - foreach (var iteration in Benchmark.Iterations) - using (iteration.StartMeasurement()) - for (int i = 0; i < Benchmark.InnerIterationCount; i++) - Interlocked.CompareExchange(ref s_s, "World", "What?"); - } + [Benchmark(InnerIterationCount = 100000)] + public static void CompareExchangeIntMatch() + { + foreach (var iteration in Benchmark.Iterations) + { + s_i = 1; + using (iteration.StartMeasurement()) + for (int i = 0; i < Benchmark.InnerIterationCount; i++) + Interlocked.CompareExchange(ref s_i, 5, 1); + } + } - [Benchmark(InnerIterationCount=100000)] - public static void CompareExchangeObjMatch() - { - foreach (var iteration in Benchmark.Iterations) + [Benchmark(InnerIterationCount = 100000)] + public static void CompareExchangeObjNoMatch() { - s_s = "What?"; - using (iteration.StartMeasurement()) - for (int i = 0; i < Benchmark.InnerIterationCount; i++) - Interlocked.CompareExchange(ref s_s, "World", "What?"); + s_s = "Hello"; + foreach (var iteration in Benchmark.Iterations) + using (iteration.StartMeasurement()) + for (int i = 0; i < Benchmark.InnerIterationCount; i++) + Interlocked.CompareExchange(ref s_s, "World", "What?"); } - } - [Benchmark(InnerIterationCount=100000)] - public static void InterlockedIncrement() - { - foreach (var iteration in Benchmark.Iterations) - using (iteration.StartMeasurement()) - for (int i = 0; i < Benchmark.InnerIterationCount; i++) - Interlocked.Increment(ref s_i); - } + [Benchmark(InnerIterationCount = 100000)] + public static void CompareExchangeObjMatch() + { + foreach (var iteration in Benchmark.Iterations) + { + s_s = "What?"; + using (iteration.StartMeasurement()) + for (int i = 0; i < Benchmark.InnerIterationCount; i++) + Interlocked.CompareExchange(ref s_s, "World", "What?"); + } + } - [Benchmark(InnerIterationCount=100000)] - public static void InterlockedDecrement() - { - foreach (var iteration in Benchmark.Iterations) - using (iteration.StartMeasurement()) - for (int i = 0; i < Benchmark.InnerIterationCount; i++) - Interlocked.Decrement(ref s_i); + [Benchmark(InnerIterationCount = 100000)] + public static void InterlockedIncrement() + { + foreach (var iteration in Benchmark.Iterations) + using (iteration.StartMeasurement()) + for (int i = 0; i < Benchmark.InnerIterationCount; i++) + Interlocked.Increment(ref s_i); + } + + [Benchmark(InnerIterationCount = 100000)] + public static void InterlockedDecrement() + { + foreach (var iteration in Benchmark.Iterations) + using (iteration.StartMeasurement()) + for (int i = 0; i < Benchmark.InnerIterationCount; i++) + Interlocked.Decrement(ref s_i); + } } } \ No newline at end of file diff --git a/tests/src/performance/project.json b/tests/src/performance/project.json index 7d98cbdcc0..97234d329e 100644 --- a/tests/src/performance/project.json +++ b/tests/src/performance/project.json @@ -1,32 +1,32 @@ { "dependencies": { - "Microsoft.DotNet.xunit.performance": "1.0.0-alpha-build0035", - "Microsoft.DotNet.xunit.performance.analysis": "1.0.0-alpha-build0035", - "Microsoft.DotNet.xunit.performance.runner.Windows": "1.0.0-alpha-build0035", - "Microsoft.NETCore.Platforms": "1.1.0", - "System.Collections.NonGeneric": "4.3.0", - "System.Console": "4.3.0", - "System.IO.FileSystem": "4.3.0", - "System.Linq": "4.3.0", - "System.Linq.Expressions": "4.3.0", - "System.Numerics.Vectors": "4.3.0", - "System.Reflection": "4.3.0", - "System.Reflection.Extensions": "4.3.0", - "System.Reflection.TypeExtensions": "4.3.0", - "System.Runtime": "4.3.0", - "System.Runtime.Extensions": "4.3.0", - "System.Runtime.Numerics": "4.3.0", - "System.Text.RegularExpressions": "4.3.0", - "System.Threading": "4.3.0", - "System.Threading.Tasks": "4.3.0", - "System.Threading.Tasks.Parallel": "4.3.0", - "System.Diagnostics.Process": "4.3.0", - "System.Xml.XmlDocument": "4.3.0", - "System.Xml.XPath": "4.3.0", - "System.Xml.XPath.XmlDocument": "4.3.0", - "xunit": "2.1.0", - "xunit.console.netcore": "1.0.2-prerelease-00101", - "xunit.runner.utility": "2.1.0" + "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", + "xunit": "2.2.0-beta2-build3300", + "xunit.console.netcore": "1.0.2-prerelease-00177", + "xunit.runner.utility": "2.2.0-beta2-build3300" }, "frameworks": { "netstandard1.4": { diff --git a/tests/src/readytorun/generics.cs b/tests/src/readytorun/generics.cs index 8bd61b8d17..4c41756305 100644 --- a/tests/src/readytorun/generics.cs +++ b/tests/src/readytorun/generics.cs @@ -5,6 +5,7 @@ using System; using System.Collections.Generic; +using System.Globalization; using System.Runtime.CompilerServices; using System.Text; using System.Threading; @@ -34,46 +35,57 @@ class Program static void RunTest1() { - DateTime dt = new DateTime(1776, 7, 4); - string dtString = dt.ToString(); - Assert.AreEqual(new GenClass1c(dt).ToStringEx(7), dtString + " 7"); - Assert.AreEqual(new GenClass1c(1).ToStringEx(7), "1 7"); - Assert.AreEqual(new GenClass1c(2).ToStringEx(7), "2 7"); - Assert.AreEqual(new GenClass1c(3.14f).ToStringEx(7), "3.14 7"); - Assert.AreEqual(new GenClass1c(4.13).ToStringEx(7), "4.13 7"); - Assert.AreEqual(new GenClass1c(9).ToString(), "9"); - - Assert.AreEqual(new GenClass2(dt, 3.1416).ToString(), dtString + " 3.1416"); - Assert.AreEqual(new GenClass2(dt, 3.1416).ToStringEx(7, 8), dtString + " 3.1416 7 8"); - Assert.AreEqual(new GenClass2(new object(), "3.1416").ToString(), "System.Object 3.1416"); - Assert.AreEqual(new GenClass2(new object(), "3.1416").ToStringEx(7L, 8L), "System.Object 3.1416 7 8"); - Assert.AreEqual(GetString(7.0, 8.0), "7 8"); - - var gen1a = new GenClass1a(); - Assert.AreEqual(gen1a.CreateGenClass1b(), "GenClass1b`1[System.Object]"); - Assert.AreEqual(gen1a.CreateGenClass1bArray(), "GenClass1b`1[System.Object][]"); - - var gen1aInt = new GenClass1a(); - var gen1bInt = new GenClass1b(); - var gen1bLong = new GenClass1b(); - Assert.AreEqual(gen1bInt.IsGenClass1a(gen1aInt).ToString(), "True"); - Assert.AreEqual(gen1bLong.IsGenClass1a(gen1aInt).ToString(), "False"); - Assert.AreEqual(gen1bInt.AsGenClass1a(gen1aInt)?.ToString() ?? "null", gen1aInt.ToString()); - Assert.AreEqual(gen1bLong.AsGenClass1a(gen1aInt)?.ToString() ?? "null", "null"); - - var gen1aString = new GenClass1a(); - var gen1b = new GenClass1b(); - Assert.AreEqual(gen1b.IsGenClass1a(gen1aString).ToString(), "True"); - Assert.AreEqual(gen1b.AsGenClass1a(gen1aString)?.ToString() ?? "null", gen1aString.ToString()); - Assert.AreEqual(GenClass1a.CallVirtual(gen1b), "GenClass1b`1[System.String].VirtualMethod"); - Assert.AreEqual(GenClass1a.CallInterface(gen1b), "GenClass1b`1[System.String].InterfaceMethod1"); - Assert.AreEqual(GenClass1a.CallInterface(gen1b, "Test").ToString(), "GenClass1b`1[System.String]"); - - NormalClass n = new NormalClass(); - Assert.AreEqual(CallGenVirtMethod(n).ToString(), "GenClass1a`1[System.Int32]"); - Assert.AreEqual(CallGenVirtMethod(n, 42).ToString(), "System.Int32[]"); - Assert.AreEqual(CallGenVirtMethod(n).ToString(), "GenClass1a`1[System.String]"); - Assert.AreEqual(CallGenVirtMethod(n, "forty-two").ToString(), "System.String[]"); + var originalCultureInfo = CultureInfo.CurrentCulture; + + try + { + CultureInfo.CurrentCulture = CultureInfo.InvariantCulture; + + DateTime dt = new DateTime(1776, 7, 4); + string dtString = dt.ToString(); + Assert.AreEqual(new GenClass1c(dt).ToStringEx(7), dtString + " 7"); + Assert.AreEqual(new GenClass1c(1).ToStringEx(7), "1 7"); + Assert.AreEqual(new GenClass1c(2).ToStringEx(7), "2 7"); + Assert.AreEqual(new GenClass1c(3.14f).ToStringEx(7), "3.14 7"); + Assert.AreEqual(new GenClass1c(4.13).ToStringEx(7), "4.13 7"); + Assert.AreEqual(new GenClass1c(9).ToString(), "9"); + + Assert.AreEqual(new GenClass2(dt, 3.1416).ToString(), dtString + " 3.1416"); + Assert.AreEqual(new GenClass2(dt, 3.1416).ToStringEx(7, 8), dtString + " 3.1416 7 8"); + Assert.AreEqual(new GenClass2(new object(), "3.1416").ToString(), "System.Object 3.1416"); + Assert.AreEqual(new GenClass2(new object(), "3.1416").ToStringEx(7L, 8L), "System.Object 3.1416 7 8"); + Assert.AreEqual(GetString(7.0, 8.0), "7 8"); + + var gen1a = new GenClass1a(); + Assert.AreEqual(gen1a.CreateGenClass1b(), "GenClass1b`1[System.Object]"); + Assert.AreEqual(gen1a.CreateGenClass1bArray(), "GenClass1b`1[System.Object][]"); + + var gen1aInt = new GenClass1a(); + var gen1bInt = new GenClass1b(); + var gen1bLong = new GenClass1b(); + Assert.AreEqual(gen1bInt.IsGenClass1a(gen1aInt).ToString(), "True"); + Assert.AreEqual(gen1bLong.IsGenClass1a(gen1aInt).ToString(), "False"); + Assert.AreEqual(gen1bInt.AsGenClass1a(gen1aInt)?.ToString() ?? "null", gen1aInt.ToString()); + Assert.AreEqual(gen1bLong.AsGenClass1a(gen1aInt)?.ToString() ?? "null", "null"); + + var gen1aString = new GenClass1a(); + var gen1b = new GenClass1b(); + Assert.AreEqual(gen1b.IsGenClass1a(gen1aString).ToString(), "True"); + Assert.AreEqual(gen1b.AsGenClass1a(gen1aString)?.ToString() ?? "null", gen1aString.ToString()); + Assert.AreEqual(GenClass1a.CallVirtual(gen1b), "GenClass1b`1[System.String].VirtualMethod"); + Assert.AreEqual(GenClass1a.CallInterface(gen1b), "GenClass1b`1[System.String].InterfaceMethod1"); + Assert.AreEqual(GenClass1a.CallInterface(gen1b, "Test").ToString(), "GenClass1b`1[System.String]"); + + NormalClass n = new NormalClass(); + Assert.AreEqual(CallGenVirtMethod(n).ToString(), "GenClass1a`1[System.Int32]"); + Assert.AreEqual(CallGenVirtMethod(n, 42).ToString(), "System.Int32[]"); + Assert.AreEqual(CallGenVirtMethod(n).ToString(), "GenClass1a`1[System.String]"); + Assert.AreEqual(CallGenVirtMethod(n, "forty-two").ToString(), "System.String[]"); + } + finally + { + CultureInfo.CurrentCulture = originalCultureInfo; + } } static void RunTest2() diff --git a/tests/src/readytorun/main.cs b/tests/src/readytorun/main.cs index cce03b4586..bbdd101759 100644 --- a/tests/src/readytorun/main.cs +++ b/tests/src/readytorun/main.cs @@ -345,17 +345,9 @@ class Program static void TestMultipleLoads() { if (!LLILCJitEnabled) { - try - { - new MyLoadContext().TestMultipleLoads(); - } - catch (FileLoadException e) - { - Assert.AreEqual(e.ToString().Contains("Native image cannot be loaded multiple times"), true); - return; - } - - Assert.AreEqual("FileLoadException", "thrown"); + // Runtime should be able to load the same R2R image in another load context, + // even though it will be treated as an IL-only image. + new MyLoadContext().TestMultipleLoads(); } } #endif diff --git a/tests/src/reflection/ldtoken/byrefs.il b/tests/src/reflection/ldtoken/byrefs.il new file mode 100644 index 0000000000..d0009b3624 --- /dev/null +++ b/tests/src/reflection/ldtoken/byrefs.il @@ -0,0 +1,88 @@ +// Licensed to the .NET Foundation under one or more 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 makes sure that ByRef types are properly unified by the reflection stack +// and that a type constructed by reflection is equivalent to a type constructed through +// the LDTOKEN instruction. +// + +.assembly extern mscorlib { } +.assembly extern System.Console +{ + .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) + .ver 4:0:0:0 +} +.assembly byrefs +{ + .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilationRelaxationsAttribute::.ctor(int32) = ( 01 00 08 00 00 00 00 00 ) +} + +.class private auto ansi beforefieldinit Test + extends [mscorlib]System.Object +{ + .method private hidebysig static int32 Main() cil managed + { + .entrypoint + .maxstack 2 + + call bool Test::LdTokenEqualsMakeByRef() + brfalse Failed + + call bool Test::MakeByRefEqualsLdToken() + brfalse Failed + + ldc.i4 100 + ldstr "ByRefs look good" + br.s Done + Failed: + ldc.i4 666 + ldstr "ByRefs are broken" + Done: + call void class [System.Console]System.Console::WriteLine(string) + ret + } + + .method private hidebysig static bool LdTokenEqualsMakeByRef() cil managed + { + .maxstack 2 + + ldtoken valuetype MyType1& + call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + + ldtoken valuetype MyType1 + call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + callvirt instance class [mscorlib]System.Type [mscorlib]System.Type::MakeByRefType() + + ceq + + ret + } + + .method private hidebysig static bool MakeByRefEqualsLdToken() cil managed + { + .maxstack 2 + + ldtoken valuetype MyType2 + call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + callvirt instance class [mscorlib]System.Type [mscorlib]System.Type::MakeByRefType() + + ldtoken valuetype MyType2& + call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + + ceq + + ret + } +} + +.class private auto ansi beforefieldinit MyType1 + extends [mscorlib]System.ValueType +{ +} + +.class private auto ansi beforefieldinit MyType2 + extends [mscorlib]System.ValueType +{ +} diff --git a/tests/src/reflection/ldtoken/byrefs.ilproj b/tests/src/reflection/ldtoken/byrefs.ilproj new file mode 100644 index 0000000000..3baecd4fd3 --- /dev/null +++ b/tests/src/reflection/ldtoken/byrefs.ilproj @@ -0,0 +1,35 @@ + + + + + byrefs + Debug + AnyCPU + 2.0 + {95DFC527-4DC1-495E-97D7-E94EE1F7140D} + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + 7a9bfb7d + true + true + Exe + BuildAndRun + 1 + + + + + False + + + + + + + + + + + + + diff --git a/tests/tests.targets b/tests/tests.targets index 56c6c5d711..78028cda27 100644 --- a/tests/tests.targets +++ b/tests/tests.targets @@ -1,7 +1,7 @@ - + <_SkipTestAssemblies Include="$(SkipTestAssemblies)" /> @@ -27,7 +27,7 @@ 5286 - needs triage + 7163 needs triage @@ -515,5 +515,11 @@ needs triage + + times out + + + 8077 + diff --git a/tests/x86_legacy_backend_issues.targets b/tests/x86_legacy_backend_issues.targets index 671e67d1f8..4b97325db0 100644 --- a/tests/x86_legacy_backend_issues.targets +++ b/tests/x86_legacy_backend_issues.targets @@ -137,7 +137,7 @@ 2414 - needs triage + 2408 2414 @@ -229,16 +229,16 @@ 3392 - needs triage + 2413 - needs triage + 2413 - needs triage + 2412 - needs triage + 2412 tail. call pop ret is only supported on amd64 @@ -253,17 +253,23 @@ needs triage - x86 JIT doesn't support implicit tail call optimization or tail. call pop ret sequence + 2420. x86 JIT doesn't support implicit tail call optimization or tail. call pop ret sequence 6844 - needs triage + 7163 needs triage + + The test is too large for x86 and causes OutOfMemory exception. + + + The superpmi test depends on setting COMPlus_AltJit, so doesn't work with either the legacy jit test run, which also sets COMPlus_AltJit, or the compatjit test run, which sets COMPlus_UseWindowsX86CoreLegacyJit + @@ -436,5 +442,8 @@ needs triage + + 8077 + diff --git a/tests/xunitwrapper.targets b/tests/xunitwrapper.targets index 6d5c5e2664..3b343bd891 100644 --- a/tests/xunitwrapper.targets +++ b/tests/xunitwrapper.targets @@ -10,7 +10,7 @@ AllowFallbackOnTargetSelection="true" IncludeFrameworkReferences="false" NuGetPackagesDirectory="$(PackagesDir)" - RuntimeIdentifier="dotnet" + RuntimeIdentifier="$(TestNugetRuntimeId)" ProjectLanguage="$(Language)" ProjectLockFile="$(ProjectLockJson)" TargetMonikers="$(TargetFrameworkMoniker)"> -- cgit v1.2.3