From ccc948a0b9bfe87bd5b52f00ad98b190a4d60960 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Wed, 7 Feb 2018 14:11:54 +0900 Subject: [PATCH 001/544] Update framework (testing) --- osu-framework | 2 +- .../Tests/TestCaseBananaShower.cs | 1 - .../Tests/TestCaseCatchPlayer.cs | 1 - .../Tests/TestCaseCatchStacker.cs | 1 - .../Tests/TestCaseCatcherArea.cs | 1 - .../Tests/TestCaseFruitObjects.cs | 2 -- .../Tests/TestCaseHyperdash.cs | 1 - .../Tests/TestCasePerformancePoints.cs | 3 -- .../osu.Game.Rulesets.Catch.csproj | 28 +++++++++++++++---- osu.Game.Rulesets.Catch/packages.config | 6 ++++ .../Tests/TestCaseAutoGeneration.cs | 1 - .../Tests/TestCaseManiaHitObjects.cs | 1 - .../Tests/TestCaseManiaPlayfield.cs | 1 - .../Tests/TestCasePerformancePoints.cs | 3 -- .../osu.Game.Rulesets.Mania.csproj | 28 +++++++++++++++---- osu.Game.Rulesets.Mania/packages.config | 6 ++++ .../Tests/TestCaseHitCircle.cs | 2 -- .../Tests/TestCaseHitCircleHidden.cs | 2 -- .../Tests/TestCasePerformancePoints.cs | 3 -- osu.Game.Rulesets.Osu/Tests/TestCaseSlider.cs | 2 -- .../Tests/TestCaseSliderHidden.cs | 2 -- .../Tests/TestCaseSpinner.cs | 2 -- .../Tests/TestCaseSpinnerHidden.cs | 2 -- .../osu.Game.Rulesets.Osu.csproj | 28 +++++++++++++++---- osu.Game.Rulesets.Osu/packages.config | 6 ++++ .../Tests/TestCaseInputDrum.cs | 2 -- .../Tests/TestCasePerformancePoints.cs | 3 -- .../Tests/TestCaseTaikoPlayfield.cs | 1 - .../osu.Game.Rulesets.Taiko.csproj | 28 +++++++++++++++---- osu.Game.Rulesets.Taiko/packages.config | 6 ++++ osu.Game.Tests/Visual/TestCaseWaveform.cs | 2 -- osu.Game/Tests/Visual/OsuTestCase.cs | 4 +++ 32 files changed, 117 insertions(+), 64 deletions(-) diff --git a/osu-framework b/osu-framework index 2d6169fc07..111e938f80 160000 --- a/osu-framework +++ b/osu-framework @@ -1 +1 @@ -Subproject commit 2d6169fc07fdd50b8ce31d3a9124b4ec0123bdd1 +Subproject commit 111e938f8049ef59d840b7c448e6dbd1dc606747 diff --git a/osu.Game.Rulesets.Catch/Tests/TestCaseBananaShower.cs b/osu.Game.Rulesets.Catch/Tests/TestCaseBananaShower.cs index e23e7633ca..ecae154075 100644 --- a/osu.Game.Rulesets.Catch/Tests/TestCaseBananaShower.cs +++ b/osu.Game.Rulesets.Catch/Tests/TestCaseBananaShower.cs @@ -12,7 +12,6 @@ using osu.Game.Rulesets.Catch.UI; namespace osu.Game.Rulesets.Catch.Tests { [TestFixture] - [Ignore("getting CI working")] public class TestCaseBananaShower : Game.Tests.Visual.TestCasePlayer { public override IReadOnlyList RequiredTypes => new[] diff --git a/osu.Game.Rulesets.Catch/Tests/TestCaseCatchPlayer.cs b/osu.Game.Rulesets.Catch/Tests/TestCaseCatchPlayer.cs index dbd5e5b36c..efebfa9739 100644 --- a/osu.Game.Rulesets.Catch/Tests/TestCaseCatchPlayer.cs +++ b/osu.Game.Rulesets.Catch/Tests/TestCaseCatchPlayer.cs @@ -6,7 +6,6 @@ using NUnit.Framework; namespace osu.Game.Rulesets.Catch.Tests { [TestFixture] - [Ignore("getting CI working")] public class TestCaseCatchPlayer : Game.Tests.Visual.TestCasePlayer { public TestCaseCatchPlayer() : base(new CatchRuleset()) diff --git a/osu.Game.Rulesets.Catch/Tests/TestCaseCatchStacker.cs b/osu.Game.Rulesets.Catch/Tests/TestCaseCatchStacker.cs index b9fa38f74e..518845208c 100644 --- a/osu.Game.Rulesets.Catch/Tests/TestCaseCatchStacker.cs +++ b/osu.Game.Rulesets.Catch/Tests/TestCaseCatchStacker.cs @@ -8,7 +8,6 @@ using osu.Game.Rulesets.Catch.Objects; namespace osu.Game.Rulesets.Catch.Tests { [TestFixture] - [Ignore("getting CI working")] public class TestCaseCatchStacker : Game.Tests.Visual.TestCasePlayer { public TestCaseCatchStacker() diff --git a/osu.Game.Rulesets.Catch/Tests/TestCaseCatcherArea.cs b/osu.Game.Rulesets.Catch/Tests/TestCaseCatcherArea.cs index a2d18520d7..0329921c92 100644 --- a/osu.Game.Rulesets.Catch/Tests/TestCaseCatcherArea.cs +++ b/osu.Game.Rulesets.Catch/Tests/TestCaseCatcherArea.cs @@ -13,7 +13,6 @@ using osu.Game.Tests.Visual; namespace osu.Game.Rulesets.Catch.Tests { [TestFixture] - [Ignore("getting CI working")] public class TestCaseCatcherArea : OsuTestCase { private RulesetInfo catchRuleset; diff --git a/osu.Game.Rulesets.Catch/Tests/TestCaseFruitObjects.cs b/osu.Game.Rulesets.Catch/Tests/TestCaseFruitObjects.cs index d406231cc9..1b348f9c8c 100644 --- a/osu.Game.Rulesets.Catch/Tests/TestCaseFruitObjects.cs +++ b/osu.Game.Rulesets.Catch/Tests/TestCaseFruitObjects.cs @@ -3,7 +3,6 @@ using System; using System.Collections.Generic; -using NUnit.Framework; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Framework.MathUtils; @@ -16,7 +15,6 @@ using OpenTK.Graphics; namespace osu.Game.Rulesets.Catch.Tests { - [Ignore("getting CI working")] public class TestCaseFruitObjects : OsuTestCase { public override IReadOnlyList RequiredTypes => new[] diff --git a/osu.Game.Rulesets.Catch/Tests/TestCaseHyperdash.cs b/osu.Game.Rulesets.Catch/Tests/TestCaseHyperdash.cs index 59659b3d0d..c01791a923 100644 --- a/osu.Game.Rulesets.Catch/Tests/TestCaseHyperdash.cs +++ b/osu.Game.Rulesets.Catch/Tests/TestCaseHyperdash.cs @@ -8,7 +8,6 @@ using osu.Game.Rulesets.Catch.Objects; namespace osu.Game.Rulesets.Catch.Tests { [TestFixture] - [Ignore("getting CI working")] public class TestCaseHyperdash : Game.Tests.Visual.TestCasePlayer { public TestCaseHyperdash() diff --git a/osu.Game.Rulesets.Catch/Tests/TestCasePerformancePoints.cs b/osu.Game.Rulesets.Catch/Tests/TestCasePerformancePoints.cs index 725eb5cf76..e2760795c9 100644 --- a/osu.Game.Rulesets.Catch/Tests/TestCasePerformancePoints.cs +++ b/osu.Game.Rulesets.Catch/Tests/TestCasePerformancePoints.cs @@ -1,11 +1,8 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE -using NUnit.Framework; - namespace osu.Game.Rulesets.Catch.Tests { - [Ignore("getting CI working")] public class TestCasePerformancePoints : Game.Tests.Visual.TestCasePerformancePoints { public TestCasePerformancePoints() diff --git a/osu.Game.Rulesets.Catch/osu.Game.Rulesets.Catch.csproj b/osu.Game.Rulesets.Catch/osu.Game.Rulesets.Catch.csproj index 31c225288b..894fdc9b45 100644 --- a/osu.Game.Rulesets.Catch/osu.Game.Rulesets.Catch.csproj +++ b/osu.Game.Rulesets.Catch/osu.Game.Rulesets.Catch.csproj @@ -44,6 +44,18 @@ $(SolutionDir)\packages\ppy.OpenTK.3.0.13\lib\net45\OpenTK.dll True + + $(SolutionDir)\packages\SQLitePCLRaw.bundle_green.1.1.8\lib\net45\SQLitePCLRaw.batteries_green.dll + + + $(SolutionDir)\packages\SQLitePCLRaw.bundle_green.1.1.8\lib\net45\SQLitePCLRaw.batteries_v2.dll + + + $(SolutionDir)\packages\SQLitePCLRaw.core.1.1.8\lib\net45\SQLitePCLRaw.core.dll + + + $(SolutionDir)\packages\SQLitePCLRaw.provider.e_sqlite3.net45.1.1.8\lib\net45\SQLitePCLRaw.provider.e_sqlite3.dll + @@ -117,11 +129,15 @@ - + + \ No newline at end of file diff --git a/osu.Game.Rulesets.Catch/packages.config b/osu.Game.Rulesets.Catch/packages.config index 16fae25086..7a784f5293 100644 --- a/osu.Game.Rulesets.Catch/packages.config +++ b/osu.Game.Rulesets.Catch/packages.config @@ -3,4 +3,10 @@ + + + + + + \ No newline at end of file diff --git a/osu.Game.Rulesets.Mania/Tests/TestCaseAutoGeneration.cs b/osu.Game.Rulesets.Mania/Tests/TestCaseAutoGeneration.cs index 81c6c5c9d5..07fb6ac670 100644 --- a/osu.Game.Rulesets.Mania/Tests/TestCaseAutoGeneration.cs +++ b/osu.Game.Rulesets.Mania/Tests/TestCaseAutoGeneration.cs @@ -9,7 +9,6 @@ using osu.Game.Tests.Visual; namespace osu.Game.Rulesets.Mania.Tests { - [Ignore("getting CI working")] public class TestCaseAutoGeneration : OsuTestCase { [Test] diff --git a/osu.Game.Rulesets.Mania/Tests/TestCaseManiaHitObjects.cs b/osu.Game.Rulesets.Mania/Tests/TestCaseManiaHitObjects.cs index 0e6d40dc67..fe8749e830 100644 --- a/osu.Game.Rulesets.Mania/Tests/TestCaseManiaHitObjects.cs +++ b/osu.Game.Rulesets.Mania/Tests/TestCaseManiaHitObjects.cs @@ -13,7 +13,6 @@ using OpenTK.Graphics; namespace osu.Game.Rulesets.Mania.Tests { [TestFixture] - [Ignore("getting CI working")] public class TestCaseManiaHitObjects : OsuTestCase { public TestCaseManiaHitObjects() diff --git a/osu.Game.Rulesets.Mania/Tests/TestCaseManiaPlayfield.cs b/osu.Game.Rulesets.Mania/Tests/TestCaseManiaPlayfield.cs index 7d35ab2f4d..86a851b7c6 100644 --- a/osu.Game.Rulesets.Mania/Tests/TestCaseManiaPlayfield.cs +++ b/osu.Game.Rulesets.Mania/Tests/TestCaseManiaPlayfield.cs @@ -19,7 +19,6 @@ using osu.Game.Tests.Visual; namespace osu.Game.Rulesets.Mania.Tests { [TestFixture] - [Ignore("getting CI working")] public class TestCaseManiaPlayfield : OsuTestCase { private const double start_time = 500; diff --git a/osu.Game.Rulesets.Mania/Tests/TestCasePerformancePoints.cs b/osu.Game.Rulesets.Mania/Tests/TestCasePerformancePoints.cs index c76816db6a..e3aa4c1fd6 100644 --- a/osu.Game.Rulesets.Mania/Tests/TestCasePerformancePoints.cs +++ b/osu.Game.Rulesets.Mania/Tests/TestCasePerformancePoints.cs @@ -1,11 +1,8 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE -using NUnit.Framework; - namespace osu.Game.Rulesets.Mania.Tests { - [Ignore("getting CI working")] public class TestCasePerformancePoints : Game.Tests.Visual.TestCasePerformancePoints { public TestCasePerformancePoints() diff --git a/osu.Game.Rulesets.Mania/osu.Game.Rulesets.Mania.csproj b/osu.Game.Rulesets.Mania/osu.Game.Rulesets.Mania.csproj index 38689fb19b..d8d262b185 100644 --- a/osu.Game.Rulesets.Mania/osu.Game.Rulesets.Mania.csproj +++ b/osu.Game.Rulesets.Mania/osu.Game.Rulesets.Mania.csproj @@ -44,6 +44,18 @@ $(SolutionDir)\packages\ppy.OpenTK.3.0.13\lib\net45\OpenTK.dll True + + $(SolutionDir)\packages\SQLitePCLRaw.bundle_green.1.1.8\lib\net45\SQLitePCLRaw.batteries_green.dll + + + $(SolutionDir)\packages\SQLitePCLRaw.bundle_green.1.1.8\lib\net45\SQLitePCLRaw.batteries_v2.dll + + + $(SolutionDir)\packages\SQLitePCLRaw.core.1.1.8\lib\net45\SQLitePCLRaw.core.dll + + + $(SolutionDir)\packages\SQLitePCLRaw.provider.e_sqlite3.net45.1.1.8\lib\net45\SQLitePCLRaw.provider.e_sqlite3.dll + $(SolutionDir)\packages\Newtonsoft.Json.10.0.3\lib\net45\Newtonsoft.Json.dll True @@ -149,11 +161,15 @@ - + + \ No newline at end of file diff --git a/osu.Game.Rulesets.Mania/packages.config b/osu.Game.Rulesets.Mania/packages.config index 16fae25086..7a784f5293 100644 --- a/osu.Game.Rulesets.Mania/packages.config +++ b/osu.Game.Rulesets.Mania/packages.config @@ -3,4 +3,10 @@ + + + + + + \ No newline at end of file diff --git a/osu.Game.Rulesets.Osu/Tests/TestCaseHitCircle.cs b/osu.Game.Rulesets.Osu/Tests/TestCaseHitCircle.cs index 77c70c68cd..d8bb7f88c7 100644 --- a/osu.Game.Rulesets.Osu/Tests/TestCaseHitCircle.cs +++ b/osu.Game.Rulesets.Osu/Tests/TestCaseHitCircle.cs @@ -1,7 +1,6 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE -using NUnit.Framework; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Game.Beatmaps; @@ -21,7 +20,6 @@ using osu.Game.Rulesets.Scoring; namespace osu.Game.Rulesets.Osu.Tests { - [Ignore("getting CI working")] public class TestCaseHitCircle : OsuTestCase { public override IReadOnlyList RequiredTypes => new[] diff --git a/osu.Game.Rulesets.Osu/Tests/TestCaseHitCircleHidden.cs b/osu.Game.Rulesets.Osu/Tests/TestCaseHitCircleHidden.cs index 1f64de496d..563df631a1 100644 --- a/osu.Game.Rulesets.Osu/Tests/TestCaseHitCircleHidden.cs +++ b/osu.Game.Rulesets.Osu/Tests/TestCaseHitCircleHidden.cs @@ -4,12 +4,10 @@ using System; using System.Collections.Generic; using System.Linq; -using NUnit.Framework; using osu.Game.Rulesets.Osu.Mods; namespace osu.Game.Rulesets.Osu.Tests { - [Ignore("getting CI working")] public class TestCaseHitCircleHidden : TestCaseHitCircle { public override IReadOnlyList RequiredTypes => base.RequiredTypes.Concat(new[] { typeof(OsuModHidden) }).ToList(); diff --git a/osu.Game.Rulesets.Osu/Tests/TestCasePerformancePoints.cs b/osu.Game.Rulesets.Osu/Tests/TestCasePerformancePoints.cs index 500347c874..32339aaf3c 100644 --- a/osu.Game.Rulesets.Osu/Tests/TestCasePerformancePoints.cs +++ b/osu.Game.Rulesets.Osu/Tests/TestCasePerformancePoints.cs @@ -1,11 +1,8 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE -using NUnit.Framework; - namespace osu.Game.Rulesets.Osu.Tests { - [Ignore("getting CI working")] public class TestCasePerformancePoints : Game.Tests.Visual.TestCasePerformancePoints { public TestCasePerformancePoints() diff --git a/osu.Game.Rulesets.Osu/Tests/TestCaseSlider.cs b/osu.Game.Rulesets.Osu/Tests/TestCaseSlider.cs index 93085df975..55fa37882d 100644 --- a/osu.Game.Rulesets.Osu/Tests/TestCaseSlider.cs +++ b/osu.Game.Rulesets.Osu/Tests/TestCaseSlider.cs @@ -3,7 +3,6 @@ using System; using System.Collections.Generic; -using NUnit.Framework; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Game.Audio; @@ -24,7 +23,6 @@ using osu.Game.Rulesets.Osu.Objects.Drawables.Pieces; namespace osu.Game.Rulesets.Osu.Tests { - [Ignore("getting CI working")] public class TestCaseSlider : OsuTestCase { public override IReadOnlyList RequiredTypes => new[] diff --git a/osu.Game.Rulesets.Osu/Tests/TestCaseSliderHidden.cs b/osu.Game.Rulesets.Osu/Tests/TestCaseSliderHidden.cs index bd4be1675b..eba0ebc642 100644 --- a/osu.Game.Rulesets.Osu/Tests/TestCaseSliderHidden.cs +++ b/osu.Game.Rulesets.Osu/Tests/TestCaseSliderHidden.cs @@ -4,12 +4,10 @@ using System; using System.Collections.Generic; using System.Linq; -using NUnit.Framework; using osu.Game.Rulesets.Osu.Mods; namespace osu.Game.Rulesets.Osu.Tests { - [Ignore("getting CI working")] public class TestCaseSliderHidden : TestCaseSlider { public override IReadOnlyList RequiredTypes => base.RequiredTypes.Concat(new[] { typeof(OsuModHidden) }).ToList(); diff --git a/osu.Game.Rulesets.Osu/Tests/TestCaseSpinner.cs b/osu.Game.Rulesets.Osu/Tests/TestCaseSpinner.cs index f2d031633b..c054f6aa28 100644 --- a/osu.Game.Rulesets.Osu/Tests/TestCaseSpinner.cs +++ b/osu.Game.Rulesets.Osu/Tests/TestCaseSpinner.cs @@ -4,7 +4,6 @@ using System; using System.Collections.Generic; using System.Linq; -using NUnit.Framework; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Game.Beatmaps; @@ -17,7 +16,6 @@ using osu.Game.Tests.Visual; namespace osu.Game.Rulesets.Osu.Tests { - [Ignore("getting CI working")] public class TestCaseSpinner : OsuTestCase { public override IReadOnlyList RequiredTypes => new[] diff --git a/osu.Game.Rulesets.Osu/Tests/TestCaseSpinnerHidden.cs b/osu.Game.Rulesets.Osu/Tests/TestCaseSpinnerHidden.cs index 7764f3d4af..a3bbce5b39 100644 --- a/osu.Game.Rulesets.Osu/Tests/TestCaseSpinnerHidden.cs +++ b/osu.Game.Rulesets.Osu/Tests/TestCaseSpinnerHidden.cs @@ -4,12 +4,10 @@ using System; using System.Collections.Generic; using System.Linq; -using NUnit.Framework; using osu.Game.Rulesets.Osu.Mods; namespace osu.Game.Rulesets.Osu.Tests { - [Ignore("getting CI working")] public class TestCaseSpinnerHidden : TestCaseSpinner { public override IReadOnlyList RequiredTypes => base.RequiredTypes.Concat(new[] { typeof(OsuModHidden) }).ToList(); diff --git a/osu.Game.Rulesets.Osu/osu.Game.Rulesets.Osu.csproj b/osu.Game.Rulesets.Osu/osu.Game.Rulesets.Osu.csproj index d734fd70a9..7838fb7707 100644 --- a/osu.Game.Rulesets.Osu/osu.Game.Rulesets.Osu.csproj +++ b/osu.Game.Rulesets.Osu/osu.Game.Rulesets.Osu.csproj @@ -45,6 +45,18 @@ $(SolutionDir)\packages\ppy.OpenTK.3.0.13\lib\net45\OpenTK.dll True + + $(SolutionDir)\packages\SQLitePCLRaw.bundle_green.1.1.8\lib\net45\SQLitePCLRaw.batteries_green.dll + + + $(SolutionDir)\packages\SQLitePCLRaw.bundle_green.1.1.8\lib\net45\SQLitePCLRaw.batteries_v2.dll + + + $(SolutionDir)\packages\SQLitePCLRaw.core.1.1.8\lib\net45\SQLitePCLRaw.core.dll + + + $(SolutionDir)\packages\SQLitePCLRaw.provider.e_sqlite3.net45.1.1.8\lib\net45\SQLitePCLRaw.provider.e_sqlite3.dll + @@ -156,11 +168,15 @@ - + + \ No newline at end of file diff --git a/osu.Game.Rulesets.Osu/packages.config b/osu.Game.Rulesets.Osu/packages.config index 16fae25086..7a784f5293 100644 --- a/osu.Game.Rulesets.Osu/packages.config +++ b/osu.Game.Rulesets.Osu/packages.config @@ -3,4 +3,10 @@ + + + + + + \ No newline at end of file diff --git a/osu.Game.Rulesets.Taiko/Tests/TestCaseInputDrum.cs b/osu.Game.Rulesets.Taiko/Tests/TestCaseInputDrum.cs index c7201150e9..437237661c 100644 --- a/osu.Game.Rulesets.Taiko/Tests/TestCaseInputDrum.cs +++ b/osu.Game.Rulesets.Taiko/Tests/TestCaseInputDrum.cs @@ -3,7 +3,6 @@ using System; using System.Collections.Generic; -using NUnit.Framework; using OpenTK; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; @@ -15,7 +14,6 @@ using osu.Game.Tests.Visual; namespace osu.Game.Rulesets.Taiko.Tests { - [Ignore("getting CI working")] public class TestCaseInputDrum : OsuTestCase { public override IReadOnlyList RequiredTypes => new[] diff --git a/osu.Game.Rulesets.Taiko/Tests/TestCasePerformancePoints.cs b/osu.Game.Rulesets.Taiko/Tests/TestCasePerformancePoints.cs index 3d2d97b6d3..a291bc2eea 100644 --- a/osu.Game.Rulesets.Taiko/Tests/TestCasePerformancePoints.cs +++ b/osu.Game.Rulesets.Taiko/Tests/TestCasePerformancePoints.cs @@ -1,11 +1,8 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE -using NUnit.Framework; - namespace osu.Game.Rulesets.Taiko.Tests { - [Ignore("getting CI working")] public class TestCasePerformancePoints : Game.Tests.Visual.TestCasePerformancePoints { public TestCasePerformancePoints() diff --git a/osu.Game.Rulesets.Taiko/Tests/TestCaseTaikoPlayfield.cs b/osu.Game.Rulesets.Taiko/Tests/TestCaseTaikoPlayfield.cs index fd396c201d..3fd16ed1b5 100644 --- a/osu.Game.Rulesets.Taiko/Tests/TestCaseTaikoPlayfield.cs +++ b/osu.Game.Rulesets.Taiko/Tests/TestCaseTaikoPlayfield.cs @@ -25,7 +25,6 @@ using osu.Game.Rulesets.Scoring; namespace osu.Game.Rulesets.Taiko.Tests { [TestFixture] - [Ignore("getting CI working")] public class TestCaseTaikoPlayfield : OsuTestCase { private const double default_duration = 1000; diff --git a/osu.Game.Rulesets.Taiko/osu.Game.Rulesets.Taiko.csproj b/osu.Game.Rulesets.Taiko/osu.Game.Rulesets.Taiko.csproj index 74859f924d..db2db9fff1 100644 --- a/osu.Game.Rulesets.Taiko/osu.Game.Rulesets.Taiko.csproj +++ b/osu.Game.Rulesets.Taiko/osu.Game.Rulesets.Taiko.csproj @@ -44,6 +44,18 @@ $(SolutionDir)\packages\ppy.OpenTK.3.0.13\lib\net45\OpenTK.dll True + + $(SolutionDir)\packages\SQLitePCLRaw.bundle_green.1.1.8\lib\net45\SQLitePCLRaw.batteries_green.dll + + + $(SolutionDir)\packages\SQLitePCLRaw.bundle_green.1.1.8\lib\net45\SQLitePCLRaw.batteries_v2.dll + + + $(SolutionDir)\packages\SQLitePCLRaw.core.1.1.8\lib\net45\SQLitePCLRaw.core.dll + + + $(SolutionDir)\packages\SQLitePCLRaw.provider.e_sqlite3.net45.1.1.8\lib\net45\SQLitePCLRaw.provider.e_sqlite3.dll + @@ -134,11 +146,15 @@ - + + \ No newline at end of file diff --git a/osu.Game.Rulesets.Taiko/packages.config b/osu.Game.Rulesets.Taiko/packages.config index 16fae25086..7a784f5293 100644 --- a/osu.Game.Rulesets.Taiko/packages.config +++ b/osu.Game.Rulesets.Taiko/packages.config @@ -3,4 +3,10 @@ + + + + + + \ No newline at end of file diff --git a/osu.Game.Tests/Visual/TestCaseWaveform.cs b/osu.Game.Tests/Visual/TestCaseWaveform.cs index dd5420400f..87492e2332 100644 --- a/osu.Game.Tests/Visual/TestCaseWaveform.cs +++ b/osu.Game.Tests/Visual/TestCaseWaveform.cs @@ -1,7 +1,6 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE -using NUnit.Framework; using OpenTK; using OpenTK.Graphics; using osu.Framework.Allocation; @@ -16,7 +15,6 @@ using osu.Game.Screens.Edit.Screens.Compose.Timeline; namespace osu.Game.Tests.Visual { - [Ignore("CI regularly hangs on this TestCase...")] public class TestCaseWaveform : OsuTestCase { private readonly Bindable beatmapBacking = new Bindable(); diff --git a/osu.Game/Tests/Visual/OsuTestCase.cs b/osu.Game/Tests/Visual/OsuTestCase.cs index f9f198a5c1..4078d9eac5 100644 --- a/osu.Game/Tests/Visual/OsuTestCase.cs +++ b/osu.Game/Tests/Visual/OsuTestCase.cs @@ -2,6 +2,8 @@ // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using System; +using System.IO; +using System.Reflection; using osu.Framework.Platform; using osu.Framework.Testing; @@ -22,6 +24,8 @@ namespace osu.Game.Tests.Visual { private readonly OsuTestCase testCase; + protected override string MainResourceFile => File.Exists(base.MainResourceFile) ? base.MainResourceFile : Assembly.GetExecutingAssembly().Location; + public OsuTestCaseTestRunner(OsuTestCase testCase) { this.testCase = testCase; From 8d982f1791a1c4804b81382ca5d50b7a5ff0d6f6 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Thu, 8 Feb 2018 12:46:15 +0900 Subject: [PATCH 002/544] Update framework --- osu-framework | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu-framework b/osu-framework index 111e938f80..2d6169fc07 160000 --- a/osu-framework +++ b/osu-framework @@ -1 +1 @@ -Subproject commit 111e938f8049ef59d840b7c448e6dbd1dc606747 +Subproject commit 2d6169fc07fdd50b8ce31d3a9124b4ec0123bdd1 From 6810948a6f1ec2bd05d64e48672061ed94b07f94 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Thu, 8 Feb 2018 13:16:53 +0900 Subject: [PATCH 003/544] Fix mania testcase --- .../Tests/TestCaseManiaPlayfield.cs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/osu.Game.Rulesets.Mania/Tests/TestCaseManiaPlayfield.cs b/osu.Game.Rulesets.Mania/Tests/TestCaseManiaPlayfield.cs index 86a851b7c6..4793b1ce94 100644 --- a/osu.Game.Rulesets.Mania/Tests/TestCaseManiaPlayfield.cs +++ b/osu.Game.Rulesets.Mania/Tests/TestCaseManiaPlayfield.cs @@ -8,7 +8,9 @@ using NUnit.Framework; using osu.Framework.Allocation; using osu.Framework.Graphics; using osu.Framework.Timing; +using osu.Game.Configuration; using osu.Game.Rulesets.Mania.Beatmaps; +using osu.Game.Rulesets.Mania.Configuration; using osu.Game.Rulesets.Mania.Judgements; using osu.Game.Rulesets.Mania.Objects; using osu.Game.Rulesets.Mania.Objects.Drawables; @@ -91,10 +93,17 @@ namespace osu.Game.Rulesets.Mania.Tests }); } + private DependencyContainer dependencies; + + protected override IReadOnlyDependencyContainer CreateLocalDependencies(IReadOnlyDependencyContainer parent) + => dependencies = new DependencyContainer(base.CreateLocalDependencies(parent)); + [BackgroundDependencyLoader] - private void load(RulesetStore rulesets) + private void load(RulesetStore rulesets, SettingsStore settings) { maniaRuleset = rulesets.GetRuleset(3); + + dependencies.Cache(new ManiaConfigManager(settings, maniaRuleset, 4)); } private ManiaPlayfield createPlayfield(int cols, bool inverted = false) From 77a8b365292ecbae4bbc45a92b450af7a31ba270 Mon Sep 17 00:00:00 2001 From: TocoToucan Date: Thu, 8 Feb 2018 22:30:15 +0300 Subject: [PATCH 004/544] Schedule Resume method call without delay --- osu.Game/Screens/Play/PauseContainer.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game/Screens/Play/PauseContainer.cs b/osu.Game/Screens/Play/PauseContainer.cs index ac497868bf..78ccd9a66a 100644 --- a/osu.Game/Screens/Play/PauseContainer.cs +++ b/osu.Game/Screens/Play/PauseContainer.cs @@ -54,7 +54,7 @@ namespace osu.Game.Screens.Play AddInternal(pauseOverlay = new PauseOverlay { - OnResume = () => this.Delay(400).Schedule(Resume), + OnResume = () => Schedule(Resume), OnRetry = () => OnRetry(), OnQuit = () => OnQuit(), }); From d437c1d7ec386e8ca72ab8ffb6f5e3a6f143e463 Mon Sep 17 00:00:00 2001 From: TocoToucan Date: Thu, 8 Feb 2018 23:28:42 +0300 Subject: [PATCH 005/544] Introduce PlayerBase class --- osu.Game/Screens/Play/Player.cs | 96 ++++----------------------- osu.Game/Screens/Play/PlayerBase.cs | 84 +++++++++++++++++++++++ osu.Game/Screens/Play/PlayerLoader.cs | 7 +- osu.Game/osu.Game.csproj | 1 + 4 files changed, 99 insertions(+), 89 deletions(-) create mode 100644 osu.Game/Screens/Play/PlayerBase.cs diff --git a/osu.Game/Screens/Play/Player.cs b/osu.Game/Screens/Play/Player.cs index 72864482d5..0f15592b72 100644 --- a/osu.Game/Screens/Play/Player.cs +++ b/osu.Game/Screens/Play/Player.cs @@ -5,9 +5,6 @@ using System; using System.Linq; using System.Threading.Tasks; using osu.Framework.Allocation; -using osu.Framework.Audio; -using osu.Framework.Audio.Sample; -using osu.Framework.Configuration; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Cursor; @@ -18,31 +15,23 @@ using osu.Framework.Threading; using osu.Framework.Timing; using osu.Game.Beatmaps; using osu.Game.Configuration; -using osu.Game.Graphics; using osu.Game.Graphics.Cursor; using osu.Game.Online.API; using osu.Game.Rulesets; using osu.Game.Rulesets.Mods; using osu.Game.Rulesets.Scoring; using osu.Game.Rulesets.UI; -using osu.Game.Screens.Backgrounds; using osu.Game.Screens.Play.BreaksOverlay; using osu.Game.Screens.Ranking; -using osu.Game.Storyboards.Drawables; -using OpenTK; namespace osu.Game.Screens.Play { - public class Player : OsuScreen, IProvideCursor + public class Player : PlayerBase, IProvideCursor { - protected override BackgroundScreen CreateBackground() => new BackgroundScreenBeatmap(Beatmap); - public override bool ShowOverlaysOnEnter => false; public Action RestartRequested; - public override bool AllowBeatmapRulesetChange => false; - public bool HasFailed { get; private set; } public bool AllowPause { get; set; } = true; @@ -67,39 +56,16 @@ namespace osu.Game.Screens.Play private ScoreProcessor scoreProcessor; protected RulesetContainer RulesetContainer; - #region User Settings - - private Bindable dimLevel; - private Bindable blurLevel; - private Bindable showStoryboard; - private Bindable mouseWheelDisabled; - private Bindable userAudioOffset; - - private SampleChannel sampleRestart; - - #endregion - - private Container storyboardContainer; - private DrawableStoryboard storyboard; - private HUDOverlay hudOverlay; private FailOverlay failOverlay; private bool loadedSuccessfully => RulesetContainer?.Objects.Any() == true; [BackgroundDependencyLoader] - private void load(AudioManager audio, OsuConfigManager config, APIAccess api) + private void load(OsuConfigManager config, APIAccess api) { this.api = api; - dimLevel = config.GetBindable(OsuSetting.DimLevel); - blurLevel = config.GetBindable(OsuSetting.BlurLevel); - showStoryboard = config.GetBindable(OsuSetting.ShowStoryboard); - - mouseWheelDisabled = config.GetBindable(OsuSetting.MouseDisableWheel); - - sampleRestart = audio.Sample.Get(@"Gameplay/restart"); - WorkingBeatmap working = Beatmap.Value; Beatmap beatmap; @@ -150,15 +116,14 @@ namespace osu.Game.Screens.Play offsetClock = new FramedOffsetClock(decoupledClock); - userAudioOffset = config.GetBindable(OsuSetting.AudioOffset); - userAudioOffset.ValueChanged += v => offsetClock.Offset = v; - userAudioOffset.TriggerChange(); + UserAudioOffset.ValueChanged += v => offsetClock.Offset = v; + UserAudioOffset.TriggerChange(); scoreProcessor = RulesetContainer.CreateScoreProcessor(); Children = new Drawable[] { - storyboardContainer = new Container + StoryboardContainer = new Container { RelativeSizeAxes = Axes.Both, Clock = offsetClock, @@ -219,8 +184,8 @@ namespace osu.Game.Screens.Play } }; - if (showStoryboard) - initializeStoryboard(false); + if (ShowStoryboard) + InitializeStoryboard(false); // Bind ScoreProcessor to ourselves scoreProcessor.AllJudged += onCompletion; @@ -239,22 +204,9 @@ namespace osu.Game.Screens.Play mod.ApplyToClock(adjustableSourceClock); } - private void initializeStoryboard(bool asyncLoad) - { - var beatmap = Beatmap.Value; - - storyboard = beatmap.Storyboard.CreateDrawable(Beatmap.Value); - storyboard.Masking = true; - - if (asyncLoad) - LoadComponentAsync(storyboard, storyboardContainer.Add); - else - storyboardContainer.Add(storyboard); - } - public void Restart() { - sampleRestart?.Play(); + SampleRestart?.Play(); ValidForResume = false; RestartRequested?.Invoke(); Exit(); @@ -310,10 +262,10 @@ namespace osu.Game.Screens.Play if (!loadedSuccessfully) return; - dimLevel.ValueChanged += _ => updateBackgroundElements(); - blurLevel.ValueChanged += _ => updateBackgroundElements(); - showStoryboard.ValueChanged += _ => updateBackgroundElements(); - updateBackgroundElements(); + DimLevel.ValueChanged += _ => UpdateBackgroundElements(); + BlurLevel.ValueChanged += _ => UpdateBackgroundElements(); + ShowStoryboard.ValueChanged += _ => UpdateBackgroundElements(); + UpdateBackgroundElements(); Content.Alpha = 0; Content @@ -368,28 +320,6 @@ namespace osu.Game.Screens.Play return true; } - private void updateBackgroundElements() - { - if (!IsCurrentScreen) return; - - const float duration = 800; - - var opacity = 1 - (float)dimLevel; - - if (showStoryboard && storyboard == null) - initializeStoryboard(true); - - var beatmap = Beatmap.Value; - var storyboardVisible = showStoryboard && beatmap.Storyboard.HasDrawable; - - storyboardContainer - .FadeColour(OsuColour.Gray(opacity), duration, Easing.OutQuint) - .FadeTo(storyboardVisible && opacity > 0 ? 1 : 0, duration, Easing.OutQuint); - - (Background as BackgroundScreenBeatmap)?.BlurTo(new Vector2((float)blurLevel.Value * 25), duration, Easing.OutQuint); - Background?.FadeTo(!storyboardVisible || beatmap.Background == null ? opacity : 0, duration, Easing.OutQuint); - } - private void fadeOut() { const float fade_out_duration = 250; @@ -402,6 +332,6 @@ namespace osu.Game.Screens.Play Background?.FadeTo(1f, fade_out_duration); } - protected override bool OnWheel(InputState state) => mouseWheelDisabled.Value && !pauseContainer.IsPaused; + protected override bool OnWheel(InputState state) => MouseWheelDisabled.Value && !pauseContainer.IsPaused; } } diff --git a/osu.Game/Screens/Play/PlayerBase.cs b/osu.Game/Screens/Play/PlayerBase.cs new file mode 100644 index 0000000000..c5a7e52de7 --- /dev/null +++ b/osu.Game/Screens/Play/PlayerBase.cs @@ -0,0 +1,84 @@ +using osu.Framework.Allocation; +using osu.Framework.Audio; +using osu.Framework.Audio.Sample; +using osu.Framework.Configuration; +using osu.Framework.Graphics; +using osu.Framework.Graphics.Containers; +using osu.Game.Configuration; +using osu.Game.Graphics; +using osu.Game.Screens.Backgrounds; +using osu.Game.Storyboards.Drawables; +using OpenTK; + +namespace osu.Game.Screens.Play +{ + public abstract class PlayerBase : OsuScreen + { + protected override BackgroundScreen CreateBackground() => new BackgroundScreenBeatmap(Beatmap); + public override bool AllowBeatmapRulesetChange => false; + + #region User Settings + + protected Bindable DimLevel; + protected Bindable BlurLevel; + protected Bindable ShowStoryboard; + protected Bindable MouseWheelDisabled; + protected Bindable UserAudioOffset; + + protected SampleChannel SampleRestart; + + #endregion + + protected DrawableStoryboard Storyboard; + protected Container StoryboardContainer; + + [BackgroundDependencyLoader] + private void load(AudioManager audio, OsuConfigManager config) + { + DimLevel = config.GetBindable(OsuSetting.DimLevel); + BlurLevel = config.GetBindable(OsuSetting.BlurLevel); + ShowStoryboard = config.GetBindable(OsuSetting.ShowStoryboard); + + MouseWheelDisabled = config.GetBindable(OsuSetting.MouseDisableWheel); + + SampleRestart = audio.Sample.Get(@"Gameplay/restart"); + + UserAudioOffset = config.GetBindable(OsuSetting.AudioOffset); + } + + protected void UpdateBackgroundElements() + { + if (!IsCurrentScreen) return; + + const float duration = 800; + + var opacity = 1 - (float)DimLevel; + + if (ShowStoryboard && Storyboard == null) + InitializeStoryboard(true); + + var beatmap = Beatmap.Value; + var storyboardVisible = ShowStoryboard && beatmap.Storyboard.HasDrawable; + + StoryboardContainer + .FadeColour(OsuColour.Gray(opacity), duration, Easing.OutQuint) + .FadeTo(storyboardVisible && opacity > 0 ? 1 : 0, duration, Easing.OutQuint); + + (Background as BackgroundScreenBeatmap)?.BlurTo(new Vector2((float)BlurLevel.Value * 25), duration, Easing.OutQuint); + Background?.FadeTo(!storyboardVisible || beatmap.Background == null ? opacity : 0, duration, Easing.OutQuint); + } + + protected void InitializeStoryboard(bool asyncLoad) + { + var beatmap = Beatmap.Value; + + Storyboard = beatmap.Storyboard.CreateDrawable(Beatmap.Value); + Storyboard.Masking = true; + + if (asyncLoad) + LoadComponentAsync(Storyboard, StoryboardContainer.Add); + else + StoryboardContainer.Add(Storyboard); + } + } +} diff --git a/osu.Game/Screens/Play/PlayerLoader.cs b/osu.Game/Screens/Play/PlayerLoader.cs index 2950990779..0c6368c714 100644 --- a/osu.Game/Screens/Play/PlayerLoader.cs +++ b/osu.Game/Screens/Play/PlayerLoader.cs @@ -9,7 +9,6 @@ using osu.Framework.Screens; using osu.Game.Beatmaps; using osu.Game.Graphics; using osu.Game.Graphics.Sprites; -using osu.Game.Screens.Backgrounds; using OpenTK; using osu.Framework.Localisation; using osu.Game.Screens.Menu; @@ -17,7 +16,7 @@ using osu.Game.Screens.Play.PlayerSettings; namespace osu.Game.Screens.Play { - public class PlayerLoader : OsuScreen + public class PlayerLoader : PlayerBase { private Player player; @@ -27,10 +26,6 @@ namespace osu.Game.Screens.Play private bool showOverlays = true; public override bool ShowOverlaysOnEnter => showOverlays; - public override bool AllowBeatmapRulesetChange => false; - - protected override BackgroundScreen CreateBackground() => new BackgroundScreenBeatmap(Beatmap); - public PlayerLoader(Player player) { this.player = player; diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index 6542160b97..cc5f5b92da 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -340,6 +340,7 @@ + From a860dd720893bf9f2eb950c64ef2d720477e7536 Mon Sep 17 00:00:00 2001 From: TocoToucan Date: Fri, 9 Feb 2018 00:06:24 +0300 Subject: [PATCH 006/544] =?UTF-8?q?Preview=20visual=20settings=20at=20the?= =?UTF-8?q?=20=E2=80=9Cloading=E2=80=9D=20screen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- osu.Game/Screens/Play/Player.cs | 5 +---- osu.Game/Screens/Play/PlayerBase.cs | 13 ++++++++++++- osu.Game/Screens/Play/PlayerLoader.cs | 2 +- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/osu.Game/Screens/Play/Player.cs b/osu.Game/Screens/Play/Player.cs index 0f15592b72..8ebee96bae 100644 --- a/osu.Game/Screens/Play/Player.cs +++ b/osu.Game/Screens/Play/Player.cs @@ -262,10 +262,7 @@ namespace osu.Game.Screens.Play if (!loadedSuccessfully) return; - DimLevel.ValueChanged += _ => UpdateBackgroundElements(); - BlurLevel.ValueChanged += _ => UpdateBackgroundElements(); - ShowStoryboard.ValueChanged += _ => UpdateBackgroundElements(); - UpdateBackgroundElements(); + ConfigureBackgroundUpdate(); Content.Alpha = 0; Content diff --git a/osu.Game/Screens/Play/PlayerBase.cs b/osu.Game/Screens/Play/PlayerBase.cs index c5a7e52de7..b725b739c9 100644 --- a/osu.Game/Screens/Play/PlayerBase.cs +++ b/osu.Game/Screens/Play/PlayerBase.cs @@ -46,6 +46,14 @@ namespace osu.Game.Screens.Play UserAudioOffset = config.GetBindable(OsuSetting.AudioOffset); } + protected void ConfigureBackgroundUpdate() + { + DimLevel.ValueChanged += _ => UpdateBackgroundElements(); + BlurLevel.ValueChanged += _ => UpdateBackgroundElements(); + ShowStoryboard.ValueChanged += _ => UpdateBackgroundElements(); + UpdateBackgroundElements(); + } + protected void UpdateBackgroundElements() { if (!IsCurrentScreen) return; @@ -60,7 +68,7 @@ namespace osu.Game.Screens.Play var beatmap = Beatmap.Value; var storyboardVisible = ShowStoryboard && beatmap.Storyboard.HasDrawable; - StoryboardContainer + StoryboardContainer? .FadeColour(OsuColour.Gray(opacity), duration, Easing.OutQuint) .FadeTo(storyboardVisible && opacity > 0 ? 1 : 0, duration, Easing.OutQuint); @@ -70,6 +78,9 @@ namespace osu.Game.Screens.Play protected void InitializeStoryboard(bool asyncLoad) { + if (StoryboardContainer == null) + return; + var beatmap = Beatmap.Value; Storyboard = beatmap.Storyboard.CreateDrawable(Beatmap.Value); diff --git a/osu.Game/Screens/Play/PlayerLoader.cs b/osu.Game/Screens/Play/PlayerLoader.cs index 0c6368c714..a4284efddb 100644 --- a/osu.Game/Screens/Play/PlayerLoader.cs +++ b/osu.Game/Screens/Play/PlayerLoader.cs @@ -88,7 +88,7 @@ namespace osu.Game.Screens.Play { base.OnEntering(last); - Background.FadeTo(0.4f, 250); + ConfigureBackgroundUpdate(); Content.ScaleTo(0.7f); From 4535e09607cda38faad7f4c146819b01de75a593 Mon Sep 17 00:00:00 2001 From: TocoToucan Date: Fri, 9 Feb 2018 00:36:31 +0300 Subject: [PATCH 007/544] Add missing license header --- osu.Game/Screens/Play/PlayerBase.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/osu.Game/Screens/Play/PlayerBase.cs b/osu.Game/Screens/Play/PlayerBase.cs index b725b739c9..5f22645361 100644 --- a/osu.Game/Screens/Play/PlayerBase.cs +++ b/osu.Game/Screens/Play/PlayerBase.cs @@ -1,4 +1,7 @@ -using osu.Framework.Allocation; +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using osu.Framework.Allocation; using osu.Framework.Audio; using osu.Framework.Audio.Sample; using osu.Framework.Configuration; From cc6114b344d168ce9f7b6a08a515e30ceabed4bf Mon Sep 17 00:00:00 2001 From: Bang Sunghwan Date: Fri, 9 Feb 2018 09:21:18 +0900 Subject: [PATCH 008/544] Fix ApproachRate not inheriting OverallDifficulty when it is undefined --- osu.Game/Beatmaps/BeatmapDifficulty.cs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/osu.Game/Beatmaps/BeatmapDifficulty.cs b/osu.Game/Beatmaps/BeatmapDifficulty.cs index 5be786a8e2..e2bbf7237d 100644 --- a/osu.Game/Beatmaps/BeatmapDifficulty.cs +++ b/osu.Game/Beatmaps/BeatmapDifficulty.cs @@ -20,7 +20,18 @@ namespace osu.Game.Beatmaps public float DrainRate { get; set; } = DEFAULT_DIFFICULTY; public float CircleSize { get; set; } = DEFAULT_DIFFICULTY; public float OverallDifficulty { get; set; } = DEFAULT_DIFFICULTY; - public float ApproachRate { get; set; } = DEFAULT_DIFFICULTY; + private float? approachRate = null; + public float ApproachRate + { + get + { + return approachRate ?? OverallDifficulty; + } + set + { + approachRate = DEFAULT_DIFFICULTY; + } + } public float SliderMultiplier { get; set; } = 1; public float SliderTickRate { get; set; } = 1; From f20e3ff31d8feb9984256416819f07a8312c57df Mon Sep 17 00:00:00 2001 From: Bang Sunghwan Date: Fri, 9 Feb 2018 09:45:43 +0900 Subject: [PATCH 009/544] Fix ApproachRate setting only DEFAULT_DIFFICULTY --- osu.Game/Beatmaps/BeatmapDifficulty.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game/Beatmaps/BeatmapDifficulty.cs b/osu.Game/Beatmaps/BeatmapDifficulty.cs index e2bbf7237d..693b05123b 100644 --- a/osu.Game/Beatmaps/BeatmapDifficulty.cs +++ b/osu.Game/Beatmaps/BeatmapDifficulty.cs @@ -29,7 +29,7 @@ namespace osu.Game.Beatmaps } set { - approachRate = DEFAULT_DIFFICULTY; + approachRate = value; } } public float SliderMultiplier { get; set; } = 1; From 3894622ddcb255346b49d23f65b6bd1009ca7bc3 Mon Sep 17 00:00:00 2001 From: Bang Sunghwan Date: Fri, 9 Feb 2018 09:55:02 +0900 Subject: [PATCH 010/544] Remove redundant initializing field by default --- osu.Game/Beatmaps/BeatmapDifficulty.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game/Beatmaps/BeatmapDifficulty.cs b/osu.Game/Beatmaps/BeatmapDifficulty.cs index 693b05123b..def19eb4e0 100644 --- a/osu.Game/Beatmaps/BeatmapDifficulty.cs +++ b/osu.Game/Beatmaps/BeatmapDifficulty.cs @@ -20,7 +20,7 @@ namespace osu.Game.Beatmaps public float DrainRate { get; set; } = DEFAULT_DIFFICULTY; public float CircleSize { get; set; } = DEFAULT_DIFFICULTY; public float OverallDifficulty { get; set; } = DEFAULT_DIFFICULTY; - private float? approachRate = null; + private float? approachRate; public float ApproachRate { get From 3b7018fcd69be54032d0e27fb04c68cde875f461 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Fri, 9 Feb 2018 17:22:48 +0900 Subject: [PATCH 011/544] Simplify beatmap import process --- osu.Game/Beatmaps/BeatmapManager.cs | 174 ++++++++++++++-------------- 1 file changed, 87 insertions(+), 87 deletions(-) diff --git a/osu.Game/Beatmaps/BeatmapManager.cs b/osu.Game/Beatmaps/BeatmapManager.cs index 44289e2400..8b8a8e197a 100644 --- a/osu.Game/Beatmaps/BeatmapManager.cs +++ b/osu.Game/Beatmaps/BeatmapManager.cs @@ -194,50 +194,74 @@ namespace osu.Game.Beatmaps } private readonly object importContextLock = new object(); - private Lazy importContext; /// /// Import a beatmap from an . /// - /// The beatmap to be imported. - public BeatmapSetInfo Import(ArchiveReader archiveReader) + /// The beatmap to be imported. + public BeatmapSetInfo Import(ArchiveReader archive) { - // let's only allow one concurrent import at a time for now. + // let's only allow one concurrent import at a time for now lock (importContextLock) { var context = importContext.Value; using (var transaction = context.BeginTransaction()) { - // create local stores so we can isolate and thread safely, and share a context/transaction. - var iFiles = new FileStore(() => context, storage); - var iBeatmaps = createBeatmapStore(() => context); + // create a new set info (don't yet add to database) + var beatmapSet = createBeatmapSetInfo(archive); - BeatmapSetInfo set = importToStorage(iFiles, iBeatmaps, archiveReader); - - if (set.ID == 0) + // check if this beatmap has already been imported and exit early if so + var existingHashMatch = beatmaps.BeatmapSets.FirstOrDefault(b => b.Hash == beatmapSet.Hash); + if (existingHashMatch != null) { - iBeatmaps.Add(set); - context.SaveChanges(); + undelete(beatmaps, files, existingHashMatch); + return existingHashMatch; } + // check if a set already exists with the same online id + if (beatmapSet.OnlineBeatmapSetID != null) + { + var existingOnlineId = beatmaps.BeatmapSets.FirstOrDefault(b => b.OnlineBeatmapSetID == beatmapSet.OnlineBeatmapSetID); + if (existingOnlineId != null) + Delete(existingOnlineId); + } + + beatmapSet.Files = createFileInfos(archive, new FileStore(() => context, storage)); + beatmapSet.Beatmaps = createBeatmapDifficulties(archive); + + // remove metadata from difficulties where it matches the set + foreach (BeatmapInfo b in beatmapSet.Beatmaps) + if (beatmapSet.Metadata.Equals(b.Metadata)) + b.Metadata = null; + + // import to beatmap store + import(beatmapSet, context); + context.SaveChanges(transaction); - return set; + return beatmapSet; } } } + /// /// Import a beatmap from a . /// /// The beatmap to be imported. public void Import(BeatmapSetInfo beatmapSetInfo) { - // If we have an ID then we already exist in the database. - if (beatmapSetInfo.ID != 0) return; + lock (importContextLock) + { + var context = importContext.Value; - createBeatmapStore(createContext).Add(beatmapSetInfo); + using (var transaction = context.BeginTransaction()) + { + import(beatmapSetInfo, context); + context.SaveChanges(transaction); + } + } } /// @@ -495,6 +519,8 @@ namespace osu.Game.Beatmaps /// Results from the provided query. public IEnumerable QueryBeatmaps(Expression> query) => beatmaps.Beatmaps.AsNoTracking().Where(query); + private void import(BeatmapSetInfo beatmapSet, OsuDbContext context) => createBeatmapStore(() => context).Add(beatmapSet); + /// /// Creates an from a valid storage path. /// @@ -508,49 +534,43 @@ namespace osu.Game.Beatmaps return new LegacyFilesystemReader(path); } - /// - /// Import a beamap into our local storage. - /// If the beatmap is already imported, the existing instance will be returned. - /// - /// The store to import beatmap files to. - /// The store to import beatmaps to. - /// The beatmap archive to be read. - /// The imported beatmap, or an existing instance if it is already present. - private BeatmapSetInfo importToStorage(FileStore files, BeatmapStore beatmaps, ArchiveReader reader) + private string computeBeatmapSetHash(ArchiveReader reader) { - // let's make sure there are actually .osu files to import. - string mapName = reader.Filenames.FirstOrDefault(f => f.EndsWith(".osu")); - if (string.IsNullOrEmpty(mapName)) - throw new InvalidOperationException("No beatmap files found in the map folder."); - // for now, concatenate all .osu files in the set to create a unique hash. MemoryStream hashable = new MemoryStream(); foreach (string file in reader.Filenames.Where(f => f.EndsWith(".osu"))) using (Stream s = reader.GetStream(file)) s.CopyTo(hashable); - var hash = hashable.ComputeSHA2Hash(); + return hashable.ComputeSHA2Hash(); + } - // check if this beatmap has already been imported and exit early if so. - var beatmapSet = beatmaps.BeatmapSets.FirstOrDefault(b => b.Hash == hash); + /// + /// + /// + /// + /// + private BeatmapSetInfo createBeatmapSetInfo(ArchiveReader reader) + { + // let's make sure there are actually .osu files to import. + string mapName = reader.Filenames.FirstOrDefault(f => f.EndsWith(".osu")); + if (string.IsNullOrEmpty(mapName)) throw new InvalidOperationException("No beatmap files found in the map folder."); - if (beatmapSet != null) + BeatmapMetadata metadata; + using (var stream = new StreamReader(reader.GetStream(mapName))) + metadata = Decoder.GetDecoder(stream).DecodeBeatmap(stream).Metadata; + + return new BeatmapSetInfo { - undelete(beatmaps, files, beatmapSet); - - // ensure all files are present and accessible - foreach (var f in beatmapSet.Files) - { - if (!storage.Exists(f.FileInfo.StoragePath)) - using (Stream s = reader.GetStream(f.Filename)) - files.Add(s, false); - } - - // todo: delete any files which shouldn't exist any more. - - return beatmapSet; - } + OnlineBeatmapSetID = metadata.OnlineBeatmapSetID, + Beatmaps = new List(), + Hash = computeBeatmapSetHash(reader), + Metadata = metadata + }; + } + private List createFileInfos(ArchiveReader reader, FileStore files) + { List fileInfos = new List(); // import files to manager @@ -562,28 +582,20 @@ namespace osu.Game.Beatmaps FileInfo = files.Add(s) }); - BeatmapMetadata metadata; + return fileInfos; + } - using (var stream = new StreamReader(reader.GetStream(mapName))) - metadata = Decoder.GetDecoder(stream).DecodeBeatmap(stream).Metadata; + /// + /// Import a beamap into our local storage. + /// If the beatmap is already imported, the existing instance will be returned. + /// + /// The beatmap archive to be read. + /// The imported beatmap, or an existing instance if it is already present. + private List createBeatmapDifficulties(ArchiveReader reader) + { + var beatmapInfos = new List(); - // check if a set already exists with the same online id. - if (metadata.OnlineBeatmapSetID != null) - beatmapSet = beatmaps.BeatmapSets.FirstOrDefault(b => b.OnlineBeatmapSetID == metadata.OnlineBeatmapSetID); - - if (beatmapSet == null) - beatmapSet = new BeatmapSetInfo - { - OnlineBeatmapSetID = metadata.OnlineBeatmapSetID, - Beatmaps = new List(), - Hash = hash, - Files = fileInfos, - Metadata = metadata - }; - - var mapNames = reader.Filenames.Where(f => f.EndsWith(".osu")); - - foreach (var name in mapNames) + foreach (var name in reader.Filenames.Where(f => f.EndsWith(".osu"))) { using (var raw = reader.GetStream(name)) using (var ms = new MemoryStream()) //we need a memory stream so we can seek and shit @@ -599,36 +611,24 @@ namespace osu.Game.Beatmaps beatmap.BeatmapInfo.Hash = ms.ComputeSHA2Hash(); beatmap.BeatmapInfo.MD5Hash = ms.ComputeMD5Hash(); - var existing = beatmaps.Beatmaps.FirstOrDefault(b => b.Hash == beatmap.BeatmapInfo.Hash || beatmap.BeatmapInfo.OnlineBeatmapID != null && b.OnlineBeatmapID == beatmap.BeatmapInfo.OnlineBeatmapID); + RulesetInfo ruleset = rulesets.GetRuleset(beatmap.BeatmapInfo.RulesetID); - if (existing == null) - { - // Exclude beatmap-metadata if it's equal to beatmapset-metadata - if (metadata.Equals(beatmap.Metadata)) - beatmap.BeatmapInfo.Metadata = null; + // TODO: this should be done in a better place once we actually need to dynamically update it. + beatmap.BeatmapInfo.Ruleset = ruleset; + beatmap.BeatmapInfo.StarDifficulty = ruleset?.CreateInstance()?.CreateDifficultyCalculator(beatmap).Calculate() ?? 0; - RulesetInfo ruleset = rulesets.GetRuleset(beatmap.BeatmapInfo.RulesetID); - - // TODO: this should be done in a better place once we actually need to dynamically update it. - beatmap.BeatmapInfo.Ruleset = ruleset; - beatmap.BeatmapInfo.StarDifficulty = ruleset?.CreateInstance()?.CreateDifficultyCalculator(beatmap).Calculate() ?? 0; - - beatmapSet.Beatmaps.Add(beatmap.BeatmapInfo); - } + beatmapInfos.Add(beatmap.BeatmapInfo); } } - return beatmapSet; + return beatmapInfos; } /// /// Returns a list of all usable s. /// /// A list of available . - public List GetAllUsableBeatmapSets() - { - return beatmaps.BeatmapSets.Where(s => !s.DeletePending).ToList(); - } + public List GetAllUsableBeatmapSets() => beatmaps.BeatmapSets.Where(s => !s.DeletePending).ToList(); protected class BeatmapManagerWorkingBeatmap : WorkingBeatmap { From a1669324688c28e5006b36ca8f5a6f72d26a1102 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Fri, 9 Feb 2018 17:51:29 +0900 Subject: [PATCH 012/544] Add deletion test --- .../Beatmaps/IO/ImportBeatmapTest.cs | 29 +++++++++++++++++++ osu.Game/Beatmaps/BeatmapManager.cs | 9 ++++-- 2 files changed, 35 insertions(+), 3 deletions(-) diff --git a/osu.Game.Tests/Beatmaps/IO/ImportBeatmapTest.cs b/osu.Game.Tests/Beatmaps/IO/ImportBeatmapTest.cs index 0b49bc8bb9..a7ff308c6b 100644 --- a/osu.Game.Tests/Beatmaps/IO/ImportBeatmapTest.cs +++ b/osu.Game.Tests/Beatmaps/IO/ImportBeatmapTest.cs @@ -42,6 +42,35 @@ namespace osu.Game.Tests.Beatmaps.IO } } + [Test] + public void TestImportThenDelete() + { + //unfortunately for the time being we need to reference osu.Framework.Desktop for a game host here. + using (HeadlessGameHost host = new CleanRunHeadlessGameHost("TestImportThenDelete")) + { + var osu = loadOsu(host); + + var temp = prepareTempCopy(osz_path); + Assert.IsTrue(File.Exists(temp)); + + var manager = osu.Dependencies.Get(); + + var imported = manager.Import(temp); + + ensureLoaded(osu); + + manager.Delete(imported.First()); + + Assert.IsTrue(manager.GetAllUsableBeatmapSets().Count == 0); + Assert.IsTrue(manager.QueryBeatmapSets(_ => true).ToList().Count() == 1); + Assert.IsTrue(manager.QueryBeatmapSets(_ => true).First().DeletePending); + + waitForOrAssert(() => !File.Exists(temp), "Temporary file still exists after standard import", 5000); + + host.Exit(); + } + } + [Test] [NonParallelizable] [Ignore("Binding IPC on Appveyor isn't working (port in use). Need to figure out why")] diff --git a/osu.Game/Beatmaps/BeatmapManager.cs b/osu.Game/Beatmaps/BeatmapManager.cs index 8b8a8e197a..049be49e44 100644 --- a/osu.Game/Beatmaps/BeatmapManager.cs +++ b/osu.Game/Beatmaps/BeatmapManager.cs @@ -141,7 +141,7 @@ namespace osu.Game.Beatmaps /// This will post a notification tracking import progress. /// /// One or more beatmap locations on disk. - public void Import(params string[] paths) + public List Import(params string[] paths) { var notification = new ProgressNotification { @@ -153,18 +153,20 @@ namespace osu.Game.Beatmaps PostNotification?.Invoke(notification); + List imported = new List(); + int i = 0; foreach (string path in paths) { if (notification.State == ProgressNotificationState.Cancelled) // user requested abort - return; + return imported; try { notification.Text = $"Importing ({i} of {paths.Length})\n{Path.GetFileName(path)}"; using (ArchiveReader reader = getReaderFrom(path)) - Import(reader); + imported.Add(Import(reader)); notification.Progress = (float)++i / paths.Length; @@ -191,6 +193,7 @@ namespace osu.Game.Beatmaps } notification.State = ProgressNotificationState.Completed; + return imported; } private readonly object importContextLock = new object(); From 8140ffea15830580914d7bcbbdf5444407d5ac8e Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Fri, 9 Feb 2018 17:58:53 +0900 Subject: [PATCH 013/544] Add test for deleting then reimporting --- .../Beatmaps/IO/ImportBeatmapTest.cs | 48 +++++++++++++++++-- 1 file changed, 45 insertions(+), 3 deletions(-) diff --git a/osu.Game.Tests/Beatmaps/IO/ImportBeatmapTest.cs b/osu.Game.Tests/Beatmaps/IO/ImportBeatmapTest.cs index a7ff308c6b..581d787242 100644 --- a/osu.Game.Tests/Beatmaps/IO/ImportBeatmapTest.cs +++ b/osu.Game.Tests/Beatmaps/IO/ImportBeatmapTest.cs @@ -71,6 +71,45 @@ namespace osu.Game.Tests.Beatmaps.IO } } + [Test] + public void TestImportThenDeleteThenImport() + { + //unfortunately for the time being we need to reference osu.Framework.Desktop for a game host here. + using (HeadlessGameHost host = new CleanRunHeadlessGameHost("TestImportThenDeleteThenImport")) + { + var osu = loadOsu(host); + + var temp = prepareTempCopy(osz_path); + Assert.IsTrue(File.Exists(temp)); + + var manager = osu.Dependencies.Get(); + + var imported = manager.Import(temp); + + ensureLoaded(osu); + + manager.Delete(imported.First()); + + Assert.IsTrue(manager.GetAllUsableBeatmapSets().Count == 0); + Assert.IsTrue(manager.QueryBeatmapSets(_ => true).ToList().Count() == 1); + Assert.IsTrue(manager.QueryBeatmapSets(_ => true).First().DeletePending); + + temp = prepareTempCopy(osz_path); + Assert.IsTrue(File.Exists(temp)); + var importedSecondTime = manager.Import(temp); + + ensureLoaded(osu); + + // check the newly "imported" beatmap is actually just the restored previous import. since it matches hash. + Assert.IsTrue(imported.First().ID == importedSecondTime.First().ID); + Assert.IsTrue(imported.First().Beatmaps.First().ID == importedSecondTime.First().Beatmaps.First().ID); + + waitForOrAssert(() => !File.Exists(temp), "Temporary file still exists after standard import", 5000); + + host.Exit(); + } + } + [Test] [NonParallelizable] [Ignore("Binding IPC on Appveyor isn't working (port in use). Need to figure out why")] @@ -166,8 +205,8 @@ namespace osu.Game.Tests.Beatmaps.IO int countBeatmaps = 0; waitForOrAssert(() => - (countBeatmapSetBeatmaps = queryBeatmapSets().First().Beatmaps.Count) == - (countBeatmaps = queryBeatmaps().Count()), + (countBeatmapSetBeatmaps = queryBeatmapSets().First().Beatmaps.Count) == + (countBeatmaps = queryBeatmaps().Count()), $@"Incorrect database beatmap count post-import ({countBeatmaps} but should be {countBeatmapSetBeatmaps}).", timeout); var set = queryBeatmapSets().First(); @@ -192,7 +231,10 @@ namespace osu.Game.Tests.Beatmaps.IO private void waitForOrAssert(Func result, string failureMessage, int timeout = 60000) { - Action waitAction = () => { while (!result()) Thread.Sleep(200); }; + Action waitAction = () => + { + while (!result()) Thread.Sleep(200); + }; Assert.IsTrue(waitAction.BeginInvoke(null, null).AsyncWaitHandle.WaitOne(timeout), failureMessage); } } From a771ca4077eadc196cb810c32bd1b82608c57548 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Fri, 9 Feb 2018 18:02:06 +0900 Subject: [PATCH 014/544] Add try-finally to ensure host is exited --- .../Beatmaps/IO/ImportBeatmapTest.cs | 172 +++++++++--------- 1 file changed, 89 insertions(+), 83 deletions(-) diff --git a/osu.Game.Tests/Beatmaps/IO/ImportBeatmapTest.cs b/osu.Game.Tests/Beatmaps/IO/ImportBeatmapTest.cs index 581d787242..591ad1680e 100644 --- a/osu.Game.Tests/Beatmaps/IO/ImportBeatmapTest.cs +++ b/osu.Game.Tests/Beatmaps/IO/ImportBeatmapTest.cs @@ -26,19 +26,24 @@ namespace osu.Game.Tests.Beatmaps.IO //unfortunately for the time being we need to reference osu.Framework.Desktop for a game host here. using (HeadlessGameHost host = new CleanRunHeadlessGameHost("TestImportWhenClosed")) { - var osu = loadOsu(host); + try + { + var osu = loadOsu(host); - var temp = prepareTempCopy(osz_path); + var temp = prepareTempCopy(osz_path); - Assert.IsTrue(File.Exists(temp)); + Assert.IsTrue(File.Exists(temp)); - osu.Dependencies.Get().Import(temp); + osu.Dependencies.Get().Import(temp); - ensureLoaded(osu); + ensureLoaded(osu); - waitForOrAssert(() => !File.Exists(temp), "Temporary file still exists after standard import", 5000); - - host.Exit(); + waitForOrAssert(() => !File.Exists(temp), "Temporary file still exists after standard import", 5000); + } + finally + { + host.Exit(); + } } } @@ -48,26 +53,31 @@ namespace osu.Game.Tests.Beatmaps.IO //unfortunately for the time being we need to reference osu.Framework.Desktop for a game host here. using (HeadlessGameHost host = new CleanRunHeadlessGameHost("TestImportThenDelete")) { - var osu = loadOsu(host); + try + { + var osu = loadOsu(host); - var temp = prepareTempCopy(osz_path); - Assert.IsTrue(File.Exists(temp)); + var temp = prepareTempCopy(osz_path); + Assert.IsTrue(File.Exists(temp)); - var manager = osu.Dependencies.Get(); + var manager = osu.Dependencies.Get(); - var imported = manager.Import(temp); + var imported = manager.Import(temp); - ensureLoaded(osu); + ensureLoaded(osu); - manager.Delete(imported.First()); + manager.Delete(imported.First()); - Assert.IsTrue(manager.GetAllUsableBeatmapSets().Count == 0); - Assert.IsTrue(manager.QueryBeatmapSets(_ => true).ToList().Count() == 1); - Assert.IsTrue(manager.QueryBeatmapSets(_ => true).First().DeletePending); + Assert.IsTrue(manager.GetAllUsableBeatmapSets().Count == 0); + Assert.IsTrue(manager.QueryBeatmapSets(_ => true).ToList().Count == 1); + Assert.IsTrue(manager.QueryBeatmapSets(_ => true).First().DeletePending); - waitForOrAssert(() => !File.Exists(temp), "Temporary file still exists after standard import", 5000); - - host.Exit(); + waitForOrAssert(() => !File.Exists(temp), "Temporary file still exists after standard import", 5000); + } + finally + { + host.Exit(); + } } } @@ -77,36 +87,41 @@ namespace osu.Game.Tests.Beatmaps.IO //unfortunately for the time being we need to reference osu.Framework.Desktop for a game host here. using (HeadlessGameHost host = new CleanRunHeadlessGameHost("TestImportThenDeleteThenImport")) { - var osu = loadOsu(host); + try + { + var osu = loadOsu(host); - var temp = prepareTempCopy(osz_path); - Assert.IsTrue(File.Exists(temp)); + var temp = prepareTempCopy(osz_path); + Assert.IsTrue(File.Exists(temp)); - var manager = osu.Dependencies.Get(); + var manager = osu.Dependencies.Get(); - var imported = manager.Import(temp); + var imported = manager.Import(temp); - ensureLoaded(osu); + ensureLoaded(osu); - manager.Delete(imported.First()); + manager.Delete(imported.First()); - Assert.IsTrue(manager.GetAllUsableBeatmapSets().Count == 0); - Assert.IsTrue(manager.QueryBeatmapSets(_ => true).ToList().Count() == 1); - Assert.IsTrue(manager.QueryBeatmapSets(_ => true).First().DeletePending); + Assert.IsTrue(manager.GetAllUsableBeatmapSets().Count == 0); + Assert.IsTrue(manager.QueryBeatmapSets(_ => true).ToList().Count() == 1); + Assert.IsTrue(manager.QueryBeatmapSets(_ => true).First().DeletePending); - temp = prepareTempCopy(osz_path); - Assert.IsTrue(File.Exists(temp)); - var importedSecondTime = manager.Import(temp); + temp = prepareTempCopy(osz_path); + Assert.IsTrue(File.Exists(temp)); + var importedSecondTime = manager.Import(temp); - ensureLoaded(osu); + ensureLoaded(osu); - // check the newly "imported" beatmap is actually just the restored previous import. since it matches hash. - Assert.IsTrue(imported.First().ID == importedSecondTime.First().ID); - Assert.IsTrue(imported.First().Beatmaps.First().ID == importedSecondTime.First().Beatmaps.First().ID); + // check the newly "imported" beatmap is actually just the restored previous import. since it matches hash. + Assert.IsTrue(imported.First().ID == importedSecondTime.First().ID); + Assert.IsTrue(imported.First().Beatmaps.First().ID == importedSecondTime.First().Beatmaps.First().ID); - waitForOrAssert(() => !File.Exists(temp), "Temporary file still exists after standard import", 5000); - - host.Exit(); + waitForOrAssert(() => !File.Exists(temp), "Temporary file still exists after standard import", 5000); + } + finally + { + host.Exit(); + } } } @@ -118,24 +133,29 @@ namespace osu.Game.Tests.Beatmaps.IO using (HeadlessGameHost host = new CleanRunHeadlessGameHost("host", true)) using (HeadlessGameHost client = new CleanRunHeadlessGameHost("client", true)) { - Assert.IsTrue(host.IsPrimaryInstance); - Assert.IsFalse(client.IsPrimaryInstance); + try + { + Assert.IsTrue(host.IsPrimaryInstance); + Assert.IsFalse(client.IsPrimaryInstance); - var osu = loadOsu(host); + var osu = loadOsu(host); - var temp = prepareTempCopy(osz_path); + var temp = prepareTempCopy(osz_path); - Assert.IsTrue(File.Exists(temp)); + Assert.IsTrue(File.Exists(temp)); - var importer = new BeatmapIPCChannel(client); - if (!importer.ImportAsync(temp).Wait(10000)) - Assert.Fail(@"IPC took too long to send"); + var importer = new BeatmapIPCChannel(client); + if (!importer.ImportAsync(temp).Wait(10000)) + Assert.Fail(@"IPC took too long to send"); - ensureLoaded(osu); + ensureLoaded(osu); - waitForOrAssert(() => !File.Exists(temp), "Temporary still exists after IPC import", 5000); - - host.Exit(); + waitForOrAssert(() => !File.Exists(temp), "Temporary still exists after IPC import", 5000); + } + finally + { + host.Exit(); + } } } @@ -144,22 +164,21 @@ namespace osu.Game.Tests.Beatmaps.IO { using (HeadlessGameHost host = new CleanRunHeadlessGameHost("TestImportWhenFileOpen")) { - var osu = loadOsu(host); - - var temp = prepareTempCopy(osz_path); - - Assert.IsTrue(File.Exists(temp), "Temporary file copy never substantiated"); - - using (File.OpenRead(temp)) - osu.Dependencies.Get().Import(temp); - - ensureLoaded(osu); - - File.Delete(temp); - - Assert.IsFalse(File.Exists(temp), "We likely held a read lock on the file when we shouldn't"); - - host.Exit(); + try + { + var osu = loadOsu(host); + var temp = prepareTempCopy(osz_path); + Assert.IsTrue(File.Exists(temp), "Temporary file copy never substantiated"); + using (File.OpenRead(temp)) + osu.Dependencies.Get().Import(temp); + ensureLoaded(osu); + File.Delete(temp); + Assert.IsFalse(File.Exists(temp), "We likely held a read lock on the file when we shouldn't"); + } + finally + { + host.Exit(); + } } } @@ -173,58 +192,44 @@ namespace osu.Game.Tests.Beatmaps.IO { var osu = new OsuGameBase(); Task.Run(() => host.Run(osu)); - waitForOrAssert(() => osu.IsLoaded, @"osu! failed to start in a reasonable amount of time"); - return osu; } private void ensureLoaded(OsuGameBase osu, int timeout = 60000) { IEnumerable resultSets = null; - var store = osu.Dependencies.Get(); - waitForOrAssert(() => (resultSets = store.QueryBeatmapSets(s => s.OnlineBeatmapSetID == 241526)).Any(), @"BeatmapSet did not import to the database in allocated time.", timeout); //ensure we were stored to beatmap database backing... Assert.IsTrue(resultSets.Count() == 1, $@"Incorrect result count found ({resultSets.Count()} but should be 1)."); - IEnumerable queryBeatmaps() => store.QueryBeatmaps(s => s.BeatmapSet.OnlineBeatmapSetID == 241526 && s.BaseDifficultyID > 0); IEnumerable queryBeatmapSets() => store.QueryBeatmapSets(s => s.OnlineBeatmapSetID == 241526); //if we don't re-check here, the set will be inserted but the beatmaps won't be present yet. waitForOrAssert(() => queryBeatmaps().Count() == 12, @"Beatmaps did not import to the database in allocated time", timeout); - waitForOrAssert(() => queryBeatmapSets().Count() == 1, @"BeatmapSet did not import to the database in allocated time", timeout); - int countBeatmapSetBeatmaps = 0; int countBeatmaps = 0; - waitForOrAssert(() => (countBeatmapSetBeatmaps = queryBeatmapSets().First().Beatmaps.Count) == (countBeatmaps = queryBeatmaps().Count()), $@"Incorrect database beatmap count post-import ({countBeatmaps} but should be {countBeatmapSetBeatmaps}).", timeout); var set = queryBeatmapSets().First(); - foreach (BeatmapInfo b in set.Beatmaps) Assert.IsTrue(set.Beatmaps.Any(c => c.OnlineBeatmapID == b.OnlineBeatmapID)); - Assert.IsTrue(set.Beatmaps.Count > 0); - var beatmap = store.GetWorkingBeatmap(set.Beatmaps.First(b => b.RulesetID == 0))?.Beatmap; Assert.IsTrue(beatmap?.HitObjects.Count > 0); - beatmap = store.GetWorkingBeatmap(set.Beatmaps.First(b => b.RulesetID == 1))?.Beatmap; Assert.IsTrue(beatmap?.HitObjects.Count > 0); - beatmap = store.GetWorkingBeatmap(set.Beatmaps.First(b => b.RulesetID == 2))?.Beatmap; Assert.IsTrue(beatmap?.HitObjects.Count > 0); - beatmap = store.GetWorkingBeatmap(set.Beatmaps.First(b => b.RulesetID == 3))?.Beatmap; Assert.IsTrue(beatmap?.HitObjects.Count > 0); } @@ -235,6 +240,7 @@ namespace osu.Game.Tests.Beatmaps.IO { while (!result()) Thread.Sleep(200); }; + Assert.IsTrue(waitAction.BeginInvoke(null, null).AsyncWaitHandle.WaitOne(timeout), failureMessage); } } From 981fa379b7d61072e9b07597de11c21728343758 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Fri, 9 Feb 2018 18:02:28 +0900 Subject: [PATCH 015/544] Count() -> Count --- osu.Game.Tests/Beatmaps/IO/ImportBeatmapTest.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game.Tests/Beatmaps/IO/ImportBeatmapTest.cs b/osu.Game.Tests/Beatmaps/IO/ImportBeatmapTest.cs index 591ad1680e..7183afb70e 100644 --- a/osu.Game.Tests/Beatmaps/IO/ImportBeatmapTest.cs +++ b/osu.Game.Tests/Beatmaps/IO/ImportBeatmapTest.cs @@ -103,7 +103,7 @@ namespace osu.Game.Tests.Beatmaps.IO manager.Delete(imported.First()); Assert.IsTrue(manager.GetAllUsableBeatmapSets().Count == 0); - Assert.IsTrue(manager.QueryBeatmapSets(_ => true).ToList().Count() == 1); + Assert.IsTrue(manager.QueryBeatmapSets(_ => true).ToList().Count == 1); Assert.IsTrue(manager.QueryBeatmapSets(_ => true).First().DeletePending); temp = prepareTempCopy(osz_path); From 623ba652ed003a4d323620317077ac8857fe0ed0 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Fri, 9 Feb 2018 18:20:18 +0900 Subject: [PATCH 016/544] Share more code between tests --- .../Beatmaps/IO/ImportBeatmapTest.cs | 82 ++++++++----------- 1 file changed, 33 insertions(+), 49 deletions(-) diff --git a/osu.Game.Tests/Beatmaps/IO/ImportBeatmapTest.cs b/osu.Game.Tests/Beatmaps/IO/ImportBeatmapTest.cs index 7183afb70e..0438229252 100644 --- a/osu.Game.Tests/Beatmaps/IO/ImportBeatmapTest.cs +++ b/osu.Game.Tests/Beatmaps/IO/ImportBeatmapTest.cs @@ -28,17 +28,7 @@ namespace osu.Game.Tests.Beatmaps.IO { try { - var osu = loadOsu(host); - - var temp = prepareTempCopy(osz_path); - - Assert.IsTrue(File.Exists(temp)); - - osu.Dependencies.Get().Import(temp); - - ensureLoaded(osu); - - waitForOrAssert(() => !File.Exists(temp), "Temporary file still exists after standard import", 5000); + loadOszIntoOsu(loadOsu(host)); } finally { @@ -57,22 +47,9 @@ namespace osu.Game.Tests.Beatmaps.IO { var osu = loadOsu(host); - var temp = prepareTempCopy(osz_path); - Assert.IsTrue(File.Exists(temp)); + var imported = loadOszIntoOsu(osu); - var manager = osu.Dependencies.Get(); - - var imported = manager.Import(temp); - - ensureLoaded(osu); - - manager.Delete(imported.First()); - - Assert.IsTrue(manager.GetAllUsableBeatmapSets().Count == 0); - Assert.IsTrue(manager.QueryBeatmapSets(_ => true).ToList().Count == 1); - Assert.IsTrue(manager.QueryBeatmapSets(_ => true).First().DeletePending); - - waitForOrAssert(() => !File.Exists(temp), "Temporary file still exists after standard import", 5000); + deleteBeatmapSet(imported, osu); } finally { @@ -91,32 +68,15 @@ namespace osu.Game.Tests.Beatmaps.IO { var osu = loadOsu(host); - var temp = prepareTempCopy(osz_path); - Assert.IsTrue(File.Exists(temp)); + var imported = loadOszIntoOsu(osu); - var manager = osu.Dependencies.Get(); + deleteBeatmapSet(imported, osu); - var imported = manager.Import(temp); - - ensureLoaded(osu); - - manager.Delete(imported.First()); - - Assert.IsTrue(manager.GetAllUsableBeatmapSets().Count == 0); - Assert.IsTrue(manager.QueryBeatmapSets(_ => true).ToList().Count == 1); - Assert.IsTrue(manager.QueryBeatmapSets(_ => true).First().DeletePending); - - temp = prepareTempCopy(osz_path); - Assert.IsTrue(File.Exists(temp)); - var importedSecondTime = manager.Import(temp); - - ensureLoaded(osu); + var importedSecondTime = loadOszIntoOsu(osu); // check the newly "imported" beatmap is actually just the restored previous import. since it matches hash. - Assert.IsTrue(imported.First().ID == importedSecondTime.First().ID); - Assert.IsTrue(imported.First().Beatmaps.First().ID == importedSecondTime.First().Beatmaps.First().ID); - - waitForOrAssert(() => !File.Exists(temp), "Temporary file still exists after standard import", 5000); + Assert.IsTrue(imported.ID == importedSecondTime.ID); + Assert.IsTrue(imported.Beatmaps.First().ID == importedSecondTime.Beatmaps.First().ID); } finally { @@ -141,7 +101,6 @@ namespace osu.Game.Tests.Beatmaps.IO var osu = loadOsu(host); var temp = prepareTempCopy(osz_path); - Assert.IsTrue(File.Exists(temp)); var importer = new BeatmapIPCChannel(client); @@ -182,6 +141,31 @@ namespace osu.Game.Tests.Beatmaps.IO } } + private BeatmapSetInfo loadOszIntoOsu(OsuGameBase osu) + { + var temp = prepareTempCopy(osz_path); + + Assert.IsTrue(File.Exists(temp)); + + var imported = osu.Dependencies.Get().Import(temp); + + ensureLoaded(osu); + + waitForOrAssert(() => !File.Exists(temp), "Temporary file still exists after standard import", 5000); + + return imported.FirstOrDefault(); + } + + private void deleteBeatmapSet(BeatmapSetInfo imported, OsuGameBase osu) + { + var manager = osu.Dependencies.Get(); + manager.Delete(imported); + + Assert.IsTrue(manager.GetAllUsableBeatmapSets().Count == 0); + Assert.IsTrue(manager.QueryBeatmapSets(_ => true).ToList().Count == 1); + Assert.IsTrue(manager.QueryBeatmapSets(_ => true).First().DeletePending); + } + private string prepareTempCopy(string path) { var temp = Path.GetTempFileName(); From 541068235d212056731b4e7337f6a8f3e6662753 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Fri, 9 Feb 2018 18:23:06 +0900 Subject: [PATCH 017/544] Test import twice in a row --- .../Beatmaps/IO/ImportBeatmapTest.cs | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/osu.Game.Tests/Beatmaps/IO/ImportBeatmapTest.cs b/osu.Game.Tests/Beatmaps/IO/ImportBeatmapTest.cs index 0438229252..1e97dfefa4 100644 --- a/osu.Game.Tests/Beatmaps/IO/ImportBeatmapTest.cs +++ b/osu.Game.Tests/Beatmaps/IO/ImportBeatmapTest.cs @@ -58,6 +58,35 @@ namespace osu.Game.Tests.Beatmaps.IO } } + [Test] + public void TestImportThenImport() + { + //unfortunately for the time being we need to reference osu.Framework.Desktop for a game host here. + using (HeadlessGameHost host = new CleanRunHeadlessGameHost("TestImportThenDeleteThenImport")) + { + try + { + var osu = loadOsu(host); + + var imported = loadOszIntoOsu(osu); + var importedSecondTime = loadOszIntoOsu(osu); + + // check the newly "imported" beatmap is actually just the restored previous import. since it matches hash. + Assert.IsTrue(imported.ID == importedSecondTime.ID); + Assert.IsTrue(imported.Beatmaps.First().ID == importedSecondTime.Beatmaps.First().ID); + + var manager = osu.Dependencies.Get(); + + Assert.IsTrue(manager.GetAllUsableBeatmapSets().Count == 1); + Assert.IsTrue(manager.QueryBeatmapSets(_ => true).ToList().Count == 1); + } + finally + { + host.Exit(); + } + } + } + [Test] public void TestImportThenDeleteThenImport() { From 5e0cb9d4b9e5cc6d752da0ff7ad317fd6ba72b40 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Fri, 9 Feb 2018 19:12:29 +0900 Subject: [PATCH 018/544] Simplify beatmap store retrieval --- osu.Game/Beatmaps/BeatmapManager.cs | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/osu.Game/Beatmaps/BeatmapManager.cs b/osu.Game/Beatmaps/BeatmapManager.cs index 049be49e44..63d9874d53 100644 --- a/osu.Game/Beatmaps/BeatmapManager.cs +++ b/osu.Game/Beatmaps/BeatmapManager.cs @@ -67,7 +67,9 @@ namespace osu.Game.Beatmaps private readonly Storage storage; - private BeatmapStore createBeatmapStore(Func context) + private BeatmapStore getBeatmapStoreWithContext(OsuDbContext context) => getBeatmapStoreWithContext(() => context); + + private BeatmapStore getBeatmapStoreWithContext(Func context) { var store = new BeatmapStore(context); store.BeatmapSetAdded += s => BeatmapSetAdded?.Invoke(s); @@ -123,7 +125,7 @@ namespace osu.Game.Beatmaps refreshImportContext(); - beatmaps = createBeatmapStore(context); + beatmaps = getBeatmapStoreWithContext(context); files = new FileStore(context, storage); this.storage = files.Storage; @@ -368,14 +370,10 @@ namespace osu.Game.Beatmaps // re-fetch the beatmap set on the import context. beatmapSet = context.BeatmapSetInfo.Include(s => s.Files).ThenInclude(f => f.FileInfo).First(s => s.ID == beatmapSet.ID); - // create local stores so we can isolate and thread safely, and share a context/transaction. - var iFiles = new FileStore(() => context, storage); - var iBeatmaps = createBeatmapStore(() => context); - - if (iBeatmaps.Delete(beatmapSet)) + if (getBeatmapStoreWithContext(context).Delete(beatmapSet)) { if (!beatmapSet.Protected) - iFiles.Dereference(beatmapSet.Files.Select(f => f.FileInfo).ToArray()); + new FileStore(() => context, storage).Dereference(beatmapSet.Files.Select(f => f.FileInfo).ToArray()); } context.ChangeTracker.AutoDetectChangesEnabled = true; @@ -428,10 +426,7 @@ namespace osu.Game.Beatmaps { context.ChangeTracker.AutoDetectChangesEnabled = false; - var iFiles = new FileStore(() => context, storage); - var iBeatmaps = createBeatmapStore(() => context); - - undelete(iBeatmaps, iFiles, beatmapSet); + undelete(getBeatmapStoreWithContext(context), new FileStore(() => context, storage), beatmapSet); context.ChangeTracker.AutoDetectChangesEnabled = true; context.SaveChanges(transaction); @@ -522,7 +517,7 @@ namespace osu.Game.Beatmaps /// Results from the provided query. public IEnumerable QueryBeatmaps(Expression> query) => beatmaps.Beatmaps.AsNoTracking().Where(query); - private void import(BeatmapSetInfo beatmapSet, OsuDbContext context) => createBeatmapStore(() => context).Add(beatmapSet); + private void import(BeatmapSetInfo beatmapSet, OsuDbContext context) => getBeatmapStoreWithContext(context).Add(beatmapSet); /// /// Creates an from a valid storage path. From c7de79caf6a00f9dd5db3de33af93506cc3988cc Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Fri, 9 Feb 2018 19:24:17 +0900 Subject: [PATCH 019/544] Remove storage class variable --- osu.Game/Beatmaps/BeatmapManager.cs | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/osu.Game/Beatmaps/BeatmapManager.cs b/osu.Game/Beatmaps/BeatmapManager.cs index 63d9874d53..08cf5aeff8 100644 --- a/osu.Game/Beatmaps/BeatmapManager.cs +++ b/osu.Game/Beatmaps/BeatmapManager.cs @@ -65,7 +65,7 @@ namespace osu.Game.Beatmaps /// public WorkingBeatmap DefaultBeatmap { private get; set; } - private readonly Storage storage; + private FileStore getFileStoreWithContext(OsuDbContext context) => new FileStore(() => context, files.Storage); private BeatmapStore getBeatmapStoreWithContext(OsuDbContext context) => getBeatmapStoreWithContext(() => context); @@ -128,7 +128,6 @@ namespace osu.Game.Beatmaps beatmaps = getBeatmapStoreWithContext(context); files = new FileStore(context, storage); - this.storage = files.Storage; this.rulesets = rulesets; this.api = api; @@ -233,7 +232,7 @@ namespace osu.Game.Beatmaps Delete(existingOnlineId); } - beatmapSet.Files = createFileInfos(archive, new FileStore(() => context, storage)); + beatmapSet.Files = createFileInfos(archive, getFileStoreWithContext(context)); beatmapSet.Beatmaps = createBeatmapDifficulties(archive); // remove metadata from difficulties where it matches the set @@ -373,7 +372,7 @@ namespace osu.Game.Beatmaps if (getBeatmapStoreWithContext(context).Delete(beatmapSet)) { if (!beatmapSet.Protected) - new FileStore(() => context, storage).Dereference(beatmapSet.Files.Select(f => f.FileInfo).ToArray()); + getFileStoreWithContext(context).Dereference(beatmapSet.Files.Select(f => f.FileInfo).ToArray()); } context.ChangeTracker.AutoDetectChangesEnabled = true; @@ -426,7 +425,7 @@ namespace osu.Game.Beatmaps { context.ChangeTracker.AutoDetectChangesEnabled = false; - undelete(getBeatmapStoreWithContext(context), new FileStore(() => context, storage), beatmapSet); + undelete(getBeatmapStoreWithContext(context), getFileStoreWithContext(context), beatmapSet); context.ChangeTracker.AutoDetectChangesEnabled = true; context.SaveChanges(transaction); @@ -528,7 +527,7 @@ namespace osu.Game.Beatmaps { if (ZipFile.IsZipFile(path)) // ReSharper disable once InconsistentlySynchronizedField - return new OszArchiveReader(storage.GetStream(path)); + return new OszArchiveReader(files.Storage.GetStream(path)); return new LegacyFilesystemReader(path); } From fb6dc922c62534475445e279b8e8ad389fa02cf4 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Fri, 9 Feb 2018 19:25:55 +0900 Subject: [PATCH 020/544] Reorder file --- osu.Game/Beatmaps/BeatmapManager.cs | 38 ++++++++++++++--------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/osu.Game/Beatmaps/BeatmapManager.cs b/osu.Game/Beatmaps/BeatmapManager.cs index 08cf5aeff8..51d4d6cb22 100644 --- a/osu.Game/Beatmaps/BeatmapManager.cs +++ b/osu.Game/Beatmaps/BeatmapManager.cs @@ -65,20 +65,6 @@ namespace osu.Game.Beatmaps /// public WorkingBeatmap DefaultBeatmap { private get; set; } - private FileStore getFileStoreWithContext(OsuDbContext context) => new FileStore(() => context, files.Storage); - - private BeatmapStore getBeatmapStoreWithContext(OsuDbContext context) => getBeatmapStoreWithContext(() => context); - - private BeatmapStore getBeatmapStoreWithContext(Func context) - { - var store = new BeatmapStore(context); - store.BeatmapSetAdded += s => BeatmapSetAdded?.Invoke(s); - store.BeatmapSetRemoved += s => BeatmapSetRemoved?.Invoke(s); - store.BeatmapHidden += b => BeatmapHidden?.Invoke(b); - store.BeatmapRestored += b => BeatmapRestored?.Invoke(b); - return store; - } - private readonly Func createContext; private readonly FileStore files; @@ -495,6 +481,12 @@ namespace osu.Game.Beatmaps /// A fresh instance. public BeatmapSetInfo Refresh(BeatmapSetInfo beatmapSet) => QueryBeatmapSet(s => s.ID == beatmapSet.ID); + /// + /// Returns a list of all usable s. + /// + /// A list of available . + public List GetAllUsableBeatmapSets() => beatmaps.BeatmapSets.Where(s => !s.DeletePending).ToList(); + /// /// Perform a lookup query on available s. /// @@ -621,11 +613,19 @@ namespace osu.Game.Beatmaps return beatmapInfos; } - /// - /// Returns a list of all usable s. - /// - /// A list of available . - public List GetAllUsableBeatmapSets() => beatmaps.BeatmapSets.Where(s => !s.DeletePending).ToList(); + private FileStore getFileStoreWithContext(OsuDbContext context) => new FileStore(() => context, files.Storage); + + private BeatmapStore getBeatmapStoreWithContext(OsuDbContext context) => getBeatmapStoreWithContext(() => context); + + private BeatmapStore getBeatmapStoreWithContext(Func context) + { + var store = new BeatmapStore(context); + store.BeatmapSetAdded += s => BeatmapSetAdded?.Invoke(s); + store.BeatmapSetRemoved += s => BeatmapSetRemoved?.Invoke(s); + store.BeatmapHidden += b => BeatmapHidden?.Invoke(b); + store.BeatmapRestored += b => BeatmapRestored?.Invoke(b); + return store; + } protected class BeatmapManagerWorkingBeatmap : WorkingBeatmap { From db654004b72422d53898c58198c7f39647ed0ab0 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Fri, 9 Feb 2018 19:32:18 +0900 Subject: [PATCH 021/544] Move BeatmapManagerWorkingBeatmap to its own file --- osu.Game/Beatmaps/BeatmapManager.cs | 87 +---------------- .../Beatmaps/BeatmapManager_WorkingBeatmap.cs | 95 +++++++++++++++++++ osu.Game/osu.Game.csproj | 1 + 3 files changed, 97 insertions(+), 86 deletions(-) create mode 100644 osu.Game/Beatmaps/BeatmapManager_WorkingBeatmap.cs diff --git a/osu.Game/Beatmaps/BeatmapManager.cs b/osu.Game/Beatmaps/BeatmapManager.cs index 51d4d6cb22..7252bad3c4 100644 --- a/osu.Game/Beatmaps/BeatmapManager.cs +++ b/osu.Game/Beatmaps/BeatmapManager.cs @@ -9,31 +9,26 @@ using System.Linq.Expressions; using System.Threading.Tasks; using Ionic.Zip; using Microsoft.EntityFrameworkCore; -using osu.Framework.Audio.Track; using osu.Framework.Extensions; -using osu.Framework.Graphics.Textures; -using osu.Framework.IO.Stores; using osu.Framework.Logging; using osu.Framework.Platform; using osu.Game.Beatmaps.Formats; using osu.Game.Beatmaps.IO; using osu.Game.Database; using osu.Game.Graphics; -using osu.Game.Graphics.Textures; using osu.Game.IO; using osu.Game.IPC; using osu.Game.Online.API; using osu.Game.Online.API.Requests; using osu.Game.Overlays.Notifications; using osu.Game.Rulesets; -using osu.Game.Storyboards; namespace osu.Game.Beatmaps { /// /// Handles the storage and retrieval of Beatmaps/WorkingBeatmaps. /// - public class BeatmapManager + public partial class BeatmapManager { /// /// Fired when a new becomes available in the database. @@ -627,86 +622,6 @@ namespace osu.Game.Beatmaps return store; } - protected class BeatmapManagerWorkingBeatmap : WorkingBeatmap - { - private readonly IResourceStore store; - - public BeatmapManagerWorkingBeatmap(IResourceStore store, BeatmapInfo beatmapInfo) - : base(beatmapInfo) - { - this.store = store; - } - - protected override Beatmap GetBeatmap() - { - try - { - using (var stream = new StreamReader(store.GetStream(getPathForFile(BeatmapInfo.Path)))) - { - Decoder decoder = Decoder.GetDecoder(stream); - return decoder.DecodeBeatmap(stream); - } - } - catch - { - return null; - } - } - - private string getPathForFile(string filename) => BeatmapSetInfo.Files.First(f => string.Equals(f.Filename, filename, StringComparison.InvariantCultureIgnoreCase)).FileInfo.StoragePath; - - protected override Texture GetBackground() - { - if (Metadata?.BackgroundFile == null) - return null; - - try - { - return new LargeTextureStore(new RawTextureLoaderStore(store)).Get(getPathForFile(Metadata.BackgroundFile)); - } - catch - { - return null; - } - } - - protected override Track GetTrack() - { - try - { - var trackData = store.GetStream(getPathForFile(Metadata.AudioFile)); - return trackData == null ? null : new TrackBass(trackData); - } - catch - { - return new TrackVirtual(); - } - } - - protected override Waveform GetWaveform() => new Waveform(store.GetStream(getPathForFile(Metadata.AudioFile))); - - protected override Storyboard GetStoryboard() - { - try - { - using (var beatmap = new StreamReader(store.GetStream(getPathForFile(BeatmapInfo.Path)))) - { - Decoder decoder = Decoder.GetDecoder(beatmap); - - if (BeatmapSetInfo?.StoryboardFile == null) - return decoder.GetStoryboardDecoder().DecodeStoryboard(beatmap); - - using (var storyboard = new StreamReader(store.GetStream(getPathForFile(BeatmapSetInfo.StoryboardFile)))) - return decoder.GetStoryboardDecoder().DecodeStoryboard(beatmap, storyboard); - } - } - catch - { - return new Storyboard(); - } - } - } - public bool StableInstallationAvailable => GetStableStorage?.Invoke() != null; /// diff --git a/osu.Game/Beatmaps/BeatmapManager_WorkingBeatmap.cs b/osu.Game/Beatmaps/BeatmapManager_WorkingBeatmap.cs new file mode 100644 index 0000000000..2fbacca5e2 --- /dev/null +++ b/osu.Game/Beatmaps/BeatmapManager_WorkingBeatmap.cs @@ -0,0 +1,95 @@ +using System; +using System.IO; +using System.Linq; +using osu.Framework.Audio.Track; +using osu.Framework.Graphics.Textures; +using osu.Framework.IO.Stores; +using osu.Game.Beatmaps.Formats; +using osu.Game.Graphics.Textures; +using osu.Game.Storyboards; + +namespace osu.Game.Beatmaps +{ + public partial class BeatmapManager + { + protected class BeatmapManagerWorkingBeatmap : WorkingBeatmap + { + private readonly IResourceStore store; + + public BeatmapManagerWorkingBeatmap(IResourceStore store, BeatmapInfo beatmapInfo) + : base(beatmapInfo) + { + this.store = store; + } + + protected override Beatmap GetBeatmap() + { + try + { + using (var stream = new StreamReader(store.GetStream(getPathForFile(BeatmapInfo.Path)))) + { + Decoder decoder = Decoder.GetDecoder(stream); + return decoder.DecodeBeatmap(stream); + } + } + catch + { + return null; + } + } + + private string getPathForFile(string filename) => BeatmapSetInfo.Files.First(f => string.Equals(f.Filename, filename, StringComparison.InvariantCultureIgnoreCase)).FileInfo.StoragePath; + + protected override Texture GetBackground() + { + if (Metadata?.BackgroundFile == null) + return null; + + try + { + return new LargeTextureStore(new RawTextureLoaderStore(store)).Get(getPathForFile(Metadata.BackgroundFile)); + } + catch + { + return null; + } + } + + protected override Track GetTrack() + { + try + { + var trackData = store.GetStream(getPathForFile(Metadata.AudioFile)); + return trackData == null ? null : new TrackBass(trackData); + } + catch + { + return new TrackVirtual(); + } + } + + protected override Waveform GetWaveform() => new Waveform(store.GetStream(getPathForFile(Metadata.AudioFile))); + + protected override Storyboard GetStoryboard() + { + try + { + using (var beatmap = new StreamReader(store.GetStream(getPathForFile(BeatmapInfo.Path)))) + { + Decoder decoder = Decoder.GetDecoder(beatmap); + + if (BeatmapSetInfo?.StoryboardFile == null) + return decoder.GetStoryboardDecoder().DecodeStoryboard(beatmap); + + using (var storyboard = new StreamReader(store.GetStream(getPathForFile(BeatmapSetInfo.StoryboardFile)))) + return decoder.GetStoryboardDecoder().DecodeStoryboard(beatmap, storyboard); + } + } + catch + { + return new Storyboard(); + } + } + } + } +} diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index 6542160b97..c16767c02c 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -248,6 +248,7 @@ + From c84cb0b33c215f011b6836c1175246025f5937b8 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Fri, 9 Feb 2018 19:32:28 +0900 Subject: [PATCH 022/544] Fix/add some xmldoc --- osu.Game/Beatmaps/BeatmapManager.cs | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/osu.Game/Beatmaps/BeatmapManager.cs b/osu.Game/Beatmaps/BeatmapManager.cs index 7252bad3c4..143ae81fa6 100644 --- a/osu.Game/Beatmaps/BeatmapManager.cs +++ b/osu.Game/Beatmaps/BeatmapManager.cs @@ -503,6 +503,9 @@ namespace osu.Game.Beatmaps /// Results from the provided query. public IEnumerable QueryBeatmaps(Expression> query) => beatmaps.Beatmaps.AsNoTracking().Where(query); + /// + /// Import a into the beatmap store. + /// private void import(BeatmapSetInfo beatmapSet, OsuDbContext context) => getBeatmapStoreWithContext(context).Add(beatmapSet); /// @@ -530,10 +533,8 @@ namespace osu.Game.Beatmaps } /// - /// + /// Create a from a provided archive. /// - /// - /// private BeatmapSetInfo createBeatmapSetInfo(ArchiveReader reader) { // let's make sure there are actually .osu files to import. @@ -553,6 +554,9 @@ namespace osu.Game.Beatmaps }; } + /// + /// Create all required s for the provided archive, adding them to the global file store. + /// private List createFileInfos(ArchiveReader reader, FileStore files) { List fileInfos = new List(); From 867b1b5f65889b483c1be93501a3d0bc1be5c707 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Fri, 9 Feb 2018 19:33:10 +0900 Subject: [PATCH 023/544] Move public methods up --- osu.Game/Beatmaps/BeatmapManager.cs | 99 ++++++++++++++--------------- 1 file changed, 49 insertions(+), 50 deletions(-) diff --git a/osu.Game/Beatmaps/BeatmapManager.cs b/osu.Game/Beatmaps/BeatmapManager.cs index 143ae81fa6..bb3a23548a 100644 --- a/osu.Game/Beatmaps/BeatmapManager.cs +++ b/osu.Game/Beatmaps/BeatmapManager.cs @@ -230,7 +230,6 @@ namespace osu.Game.Beatmaps } } - /// /// Import a beatmap from a . /// @@ -503,6 +502,55 @@ namespace osu.Game.Beatmaps /// Results from the provided query. public IEnumerable QueryBeatmaps(Expression> query) => beatmaps.Beatmaps.AsNoTracking().Where(query); + public bool StableInstallationAvailable => GetStableStorage?.Invoke() != null; + + /// + /// This is a temporary method and will likely be replaced by a full-fledged (and more correctly placed) migration process in the future. + /// + public async Task ImportFromStable() + { + var stable = GetStableStorage?.Invoke(); + + if (stable == null) + { + Logger.Log("No osu!stable installation available!", LoggingTarget.Information, LogLevel.Error); + return; + } + + await Task.Factory.StartNew(() => Import(stable.GetDirectories("Songs")), TaskCreationOptions.LongRunning); + } + + public void DeleteAll() + { + var maps = GetAllUsableBeatmapSets(); + + if (maps.Count == 0) return; + + var notification = new ProgressNotification + { + Progress = 0, + CompletionText = "Deleted all beatmaps!", + State = ProgressNotificationState.Active, + }; + + PostNotification?.Invoke(notification); + + int i = 0; + + foreach (var b in maps) + { + if (notification.State == ProgressNotificationState.Cancelled) + // user requested abort + return; + + notification.Text = $"Deleting ({i} of {maps.Count})"; + notification.Progress = (float)++i / maps.Count; + Delete(b); + } + + notification.State = ProgressNotificationState.Completed; + } + /// /// Import a into the beatmap store. /// @@ -625,54 +673,5 @@ namespace osu.Game.Beatmaps store.BeatmapRestored += b => BeatmapRestored?.Invoke(b); return store; } - - public bool StableInstallationAvailable => GetStableStorage?.Invoke() != null; - - /// - /// This is a temporary method and will likely be replaced by a full-fledged (and more correctly placed) migration process in the future. - /// - public async Task ImportFromStable() - { - var stable = GetStableStorage?.Invoke(); - - if (stable == null) - { - Logger.Log("No osu!stable installation available!", LoggingTarget.Information, LogLevel.Error); - return; - } - - await Task.Factory.StartNew(() => Import(stable.GetDirectories("Songs")), TaskCreationOptions.LongRunning); - } - - public void DeleteAll() - { - var maps = GetAllUsableBeatmapSets(); - - if (maps.Count == 0) return; - - var notification = new ProgressNotification - { - Progress = 0, - CompletionText = "Deleted all beatmaps!", - State = ProgressNotificationState.Active, - }; - - PostNotification?.Invoke(notification); - - int i = 0; - - foreach (var b in maps) - { - if (notification.State == ProgressNotificationState.Cancelled) - // user requested abort - return; - - notification.Text = $"Deleting ({i} of {maps.Count})"; - notification.Progress = (float)++i / maps.Count; - Delete(b); - } - - notification.State = ProgressNotificationState.Completed; - } } } From d547caa04ef88b0deaf8f56320ed65381c02b6e9 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Fri, 9 Feb 2018 19:44:17 +0900 Subject: [PATCH 024/544] Further improve xmldoc --- osu.Game/Beatmaps/BeatmapManager.cs | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/osu.Game/Beatmaps/BeatmapManager.cs b/osu.Game/Beatmaps/BeatmapManager.cs index bb3a23548a..c0a5a5b39b 100644 --- a/osu.Game/Beatmaps/BeatmapManager.cs +++ b/osu.Game/Beatmaps/BeatmapManager.cs @@ -120,7 +120,7 @@ namespace osu.Game.Beatmaps /// /// Import one or more from filesystem . - /// This will post a notification tracking import progress. + /// This will post notifications tracking progress. /// /// One or more beatmap locations on disk. public List Import(params string[] paths) @@ -250,6 +250,7 @@ namespace osu.Game.Beatmaps /// /// Downloads a beatmap. + /// This will post notifications tracking progress. /// /// The to be downloaded. /// Whether the beatmap should be downloaded without video. Defaults to false. @@ -361,6 +362,10 @@ namespace osu.Game.Beatmaps } } + /// + /// Restore all beatmaps that were previously deleted. + /// This will post notifications tracking progress. + /// public void UndeleteAll() { var deleteMaps = QueryBeatmapSets(bs => bs.DeletePending).ToList(); @@ -392,6 +397,10 @@ namespace osu.Game.Beatmaps notification.State = ProgressNotificationState.Completed; } + /// + /// Restore a beatmap that was previously deleted. Is a no-op if the beatmap is not in a deleted state, or has its protected flag set. + /// + /// The beatmap to restore public void Undelete(BeatmapSetInfo beatmapSet) { if (beatmapSet.Protected) @@ -502,6 +511,9 @@ namespace osu.Game.Beatmaps /// Results from the provided query. public IEnumerable QueryBeatmaps(Expression> query) => beatmaps.Beatmaps.AsNoTracking().Where(query); + /// + /// Denotes whether an osu-stable installation is present to perform automated imports from. + /// public bool StableInstallationAvailable => GetStableStorage?.Invoke() != null; /// @@ -520,6 +532,10 @@ namespace osu.Game.Beatmaps await Task.Factory.StartNew(() => Import(stable.GetDirectories("Songs")), TaskCreationOptions.LongRunning); } + /// + /// Delete all beatmaps. + /// This will post notifications tracking progress. + /// public void DeleteAll() { var maps = GetAllUsableBeatmapSets(); @@ -569,6 +585,9 @@ namespace osu.Game.Beatmaps return new LegacyFilesystemReader(path); } + /// + /// Create a SHA-2 hash from the provided archive based on contained beatmap filenames. + /// private string computeBeatmapSetHash(ArchiveReader reader) { // for now, concatenate all .osu files in the set to create a unique hash. From a1513351c0454b3b060fc83a3e4aac090ae63923 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Fri, 9 Feb 2018 20:35:54 +0900 Subject: [PATCH 025/544] Add missing licence header --- osu.Game/Beatmaps/BeatmapManager_WorkingBeatmap.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/osu.Game/Beatmaps/BeatmapManager_WorkingBeatmap.cs b/osu.Game/Beatmaps/BeatmapManager_WorkingBeatmap.cs index 2fbacca5e2..14a4028b44 100644 --- a/osu.Game/Beatmaps/BeatmapManager_WorkingBeatmap.cs +++ b/osu.Game/Beatmaps/BeatmapManager_WorkingBeatmap.cs @@ -1,4 +1,7 @@ -using System; +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using System; using System.IO; using System.Linq; using osu.Framework.Audio.Track; From 721bb7e4dd25b719128d5e2a33f38156257fe10a Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Fri, 9 Feb 2018 21:31:33 +0900 Subject: [PATCH 026/544] Add proper handling for OnlineBeatmapSetID conflicts Not yet working --- .../Beatmaps/IO/ImportBeatmapTest.cs | 34 +++++++++++++++++++ osu.Game/Beatmaps/BeatmapManager.cs | 11 ++++++ osu.Game/Beatmaps/BeatmapStore.cs | 28 ++++++++++++--- 3 files changed, 69 insertions(+), 4 deletions(-) diff --git a/osu.Game.Tests/Beatmaps/IO/ImportBeatmapTest.cs b/osu.Game.Tests/Beatmaps/IO/ImportBeatmapTest.cs index 1e97dfefa4..4da9cba446 100644 --- a/osu.Game.Tests/Beatmaps/IO/ImportBeatmapTest.cs +++ b/osu.Game.Tests/Beatmaps/IO/ImportBeatmapTest.cs @@ -87,6 +87,40 @@ namespace osu.Game.Tests.Beatmaps.IO } } + [Test] + public void TestImportThenImportDifferentHash() + { + //unfortunately for the time being we need to reference osu.Framework.Desktop for a game host here. + using (HeadlessGameHost host = new CleanRunHeadlessGameHost("TestImportThenImportDifferentHash")) + { + try + { + var osu = loadOsu(host); + var manager = osu.Dependencies.Get(); + + var imported = loadOszIntoOsu(osu); + + //var change = manager.QueryBeatmapSets(_ => true).First(); + imported.Hash += "-changed"; + manager.Update(imported); + + var importedSecondTime = loadOszIntoOsu(osu); + + // check the newly "imported" beatmap is actually just the restored previous import. since it matches hash. + Assert.IsTrue(imported.ID == importedSecondTime.ID); + Assert.IsTrue(imported.Beatmaps.First().ID == importedSecondTime.Beatmaps.First().ID); + + + Assert.IsTrue(manager.GetAllUsableBeatmapSets().Count == 1); + Assert.IsTrue(manager.QueryBeatmapSets(_ => true).ToList().Count == 1); + } + finally + { + host.Exit(); + } + } + } + [Test] public void TestImportThenDeleteThenImport() { diff --git a/osu.Game/Beatmaps/BeatmapManager.cs b/osu.Game/Beatmaps/BeatmapManager.cs index c0a5a5b39b..cbaa8a1066 100644 --- a/osu.Game/Beatmaps/BeatmapManager.cs +++ b/osu.Game/Beatmaps/BeatmapManager.cs @@ -210,7 +210,12 @@ namespace osu.Game.Beatmaps { var existingOnlineId = beatmaps.BeatmapSets.FirstOrDefault(b => b.OnlineBeatmapSetID == beatmapSet.OnlineBeatmapSetID); if (existingOnlineId != null) + { + // {Microsoft.EntityFrameworkCore.DbUpdateConcurrencyException: Database operation expected to affect 1 row(s) but actually affected 0 row(s). Data may have been modified or deleted since entities were loaded. See http://go.microsoft.com/fwlink/?LinkId=527962…} + Delete(existingOnlineId); + beatmaps.Cleanup(s => s.ID == existingOnlineId.ID); + } } beatmapSet.Files = createFileInfos(archive, getFileStoreWithContext(context)); @@ -332,6 +337,12 @@ namespace osu.Game.Beatmaps /// The object if it exists, or null. public DownloadBeatmapSetRequest GetExistingDownload(BeatmapSetInfo beatmap) => currentDownloads.Find(d => d.BeatmapSet.OnlineBeatmapSetID == beatmap.OnlineBeatmapSetID); + /// + /// Update a BeatmapSetInfo with all changes. TODO: This only supports very basic updates currently. + /// + /// The beatmap set to update. + public void Update(BeatmapSetInfo beatmap) => beatmaps.Update(beatmap); + /// /// Delete a beatmap from the manager. /// Is a no-op for already deleted beatmaps. diff --git a/osu.Game/Beatmaps/BeatmapStore.cs b/osu.Game/Beatmaps/BeatmapStore.cs index df71c5c0d0..f2c3eddec9 100644 --- a/osu.Game/Beatmaps/BeatmapStore.cs +++ b/osu.Game/Beatmaps/BeatmapStore.cs @@ -3,6 +3,7 @@ using System; using System.Linq; +using System.Linq.Expressions; using Microsoft.EntityFrameworkCore; using osu.Game.Database; @@ -50,6 +51,22 @@ namespace osu.Game.Beatmaps BeatmapSetAdded?.Invoke(beatmapSet); } + /// + /// Update a in the database. TODO: This only supports very basic updates currently. + /// + /// The beatmap to update. + public void Update(BeatmapSetInfo beatmapSet) + { + BeatmapSetRemoved?.Invoke(beatmapSet); + + var context = GetContext(); + + context.BeatmapSetInfo.Update(beatmapSet); + context.SaveChanges(); + + BeatmapSetAdded?.Invoke(beatmapSet); + } + /// /// Delete a from the database. /// @@ -126,14 +143,17 @@ namespace osu.Game.Beatmaps return true; } - public override void Cleanup() + public override void Cleanup() => Cleanup(_ => true); + + public void Cleanup(Expression> query) { var context = GetContext(); var purgeable = context.BeatmapSetInfo.Where(s => s.DeletePending && !s.Protected) - .Include(s => s.Beatmaps).ThenInclude(b => b.Metadata) - .Include(s => s.Beatmaps).ThenInclude(b => b.BaseDifficulty) - .Include(s => s.Metadata); + .Where(query) + .Include(s => s.Beatmaps).ThenInclude(b => b.Metadata) + .Include(s => s.Beatmaps).ThenInclude(b => b.BaseDifficulty) + .Include(s => s.Metadata); // metadata is M-N so we can't rely on cascades context.BeatmapMetadata.RemoveRange(purgeable.Select(s => s.Metadata)); From a86a4f49cfdcd1b0ced0c40e6382d54e768fa8bf Mon Sep 17 00:00:00 2001 From: TocoToucan Date: Fri, 9 Feb 2018 21:20:49 +0300 Subject: [PATCH 027/544] Resolve "Pressing escape on continuing causes the game to return to song select" problem without removing Delay --- osu.Game/Screens/Play/PauseContainer.cs | 8 +++++++- osu.Game/Screens/Play/Player.cs | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/osu.Game/Screens/Play/PauseContainer.cs b/osu.Game/Screens/Play/PauseContainer.cs index 78ccd9a66a..669bcd600c 100644 --- a/osu.Game/Screens/Play/PauseContainer.cs +++ b/osu.Game/Screens/Play/PauseContainer.cs @@ -36,6 +36,7 @@ namespace osu.Game.Screens.Play public int Retries { set { pauseOverlay.Retries = value; } } public bool CanPause => (CheckCanPause?.Invoke() ?? true) && Time.Current >= lastPauseActionTime + pause_cooldown; + public bool IsResuming { get; private set; } public Action OnRetry; public Action OnQuit; @@ -54,7 +55,11 @@ namespace osu.Game.Screens.Play AddInternal(pauseOverlay = new PauseOverlay { - OnResume = () => Schedule(Resume), + OnResume = () => + { + IsResuming = true; + this.Delay(400).Schedule(Resume); + }, OnRetry = () => OnRetry(), OnQuit = () => OnQuit(), }); @@ -100,6 +105,7 @@ namespace osu.Game.Screens.Play pauseOverlay.Hide(); AudioClock.Start(); + IsResuming = false; } private OsuGameBase game; diff --git a/osu.Game/Screens/Play/Player.cs b/osu.Game/Screens/Play/Player.cs index 72864482d5..7028574997 100644 --- a/osu.Game/Screens/Play/Player.cs +++ b/osu.Game/Screens/Play/Player.cs @@ -351,7 +351,7 @@ namespace osu.Game.Screens.Play protected override bool OnExiting(Screen next) { - if (!AllowPause || HasFailed || !ValidForResume || pauseContainer?.IsPaused != false || RulesetContainer?.HasReplayLoaded != false) + if ((!AllowPause || HasFailed || !ValidForResume || pauseContainer?.IsPaused != false || RulesetContainer?.HasReplayLoaded != false) && (!pauseContainer?.IsResuming ?? false)) { // In the case of replays, we may have changed the playback rate. applyRateFromMods(); From 86f200e257e6e5b81e246bd4f6e9b2c3264d22f7 Mon Sep 17 00:00:00 2001 From: TocoToucan Date: Fri, 9 Feb 2018 22:04:39 +0300 Subject: [PATCH 028/544] Fix possible nullref --- osu.Game/Screens/Play/Player.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game/Screens/Play/Player.cs b/osu.Game/Screens/Play/Player.cs index 7028574997..5df88b2b23 100644 --- a/osu.Game/Screens/Play/Player.cs +++ b/osu.Game/Screens/Play/Player.cs @@ -362,7 +362,7 @@ namespace osu.Game.Screens.Play if (loadedSuccessfully) { - pauseContainer.Pause(); + pauseContainer?.Pause(); } return true; From c3ce015869c93b5e948fdbe1879bdeed6ea181f6 Mon Sep 17 00:00:00 2001 From: Aergwyn Date: Sun, 11 Feb 2018 11:03:01 +0100 Subject: [PATCH 029/544] fade slider ticks with hidden mod --- osu.Game.Rulesets.Osu/Mods/OsuModHidden.cs | 15 +++++++++------ .../Objects/Drawables/DrawableSliderTick.cs | 14 +++++++------- 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Mods/OsuModHidden.cs b/osu.Game.Rulesets.Osu/Mods/OsuModHidden.cs index b4dd08eadb..beabeb0a19 100644 --- a/osu.Game.Rulesets.Osu/Mods/OsuModHidden.cs +++ b/osu.Game.Rulesets.Osu/Mods/OsuModHidden.cs @@ -1,6 +1,7 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using System; using System.Collections.Generic; using System.Linq; using osu.Framework.Graphics; @@ -47,16 +48,20 @@ namespace osu.Game.Rulesets.Osu.Mods // fade out immediately after fade in. using (drawable.BeginAbsoluteSequence(fadeOutStartTime, true)) - { circle.FadeOut(fadeOutDuration); - } break; case DrawableSlider slider: using (slider.BeginAbsoluteSequence(fadeOutStartTime, true)) - { slider.Body.FadeOut(longFadeDuration, Easing.Out); - } + + break; + case DrawableSliderTick sliderTick: + // slider ticks fade out over up to one second + var tickFadeOutDuration = Math.Min(sliderTick.HitObject.TimePreempt - DrawableSliderTick.ANIM_DURATION, 1000); + + using (sliderTick.BeginAbsoluteSequence(sliderTick.HitObject.StartTime - tickFadeOutDuration, true)) + sliderTick.FadeOut(tickFadeOutDuration); break; case DrawableSpinner spinner: @@ -66,9 +71,7 @@ namespace osu.Game.Rulesets.Osu.Mods spinner.Background.Hide(); using (spinner.BeginAbsoluteSequence(fadeOutStartTime + longFadeDuration, true)) - { spinner.FadeOut(fadeOutDuration); - } break; } diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSliderTick.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSliderTick.cs index 41d73a745a..baa9eac1a3 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSliderTick.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSliderTick.cs @@ -13,7 +13,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables { public class DrawableSliderTick : DrawableOsuHitObject, IRequireTracking { - private const double anim_duration = 150; + public const double ANIM_DURATION = 150; public bool Tracking { get; set; } @@ -51,8 +51,8 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables protected override void UpdatePreemptState() { this.Animate( - d => d.FadeIn(anim_duration), - d => d.ScaleTo(0.5f).ScaleTo(1f, anim_duration * 4, Easing.OutElasticHalf) + d => d.FadeIn(ANIM_DURATION), + d => d.ScaleTo(0.5f).ScaleTo(1f, ANIM_DURATION * 4, Easing.OutElasticHalf) ); } @@ -64,12 +64,12 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables this.Delay(HitObject.TimePreempt).FadeOut(); break; case ArmedState.Miss: - this.FadeOut(anim_duration) - .FadeColour(Color4.Red, anim_duration / 2); + this.FadeOut(ANIM_DURATION) + .FadeColour(Color4.Red, ANIM_DURATION / 2); break; case ArmedState.Hit: - this.FadeOut(anim_duration, Easing.OutQuint) - .ScaleTo(Scale * 1.5f, anim_duration, Easing.Out); + this.FadeOut(ANIM_DURATION, Easing.OutQuint) + .ScaleTo(Scale * 1.5f, ANIM_DURATION, Easing.Out); break; } } From efeffaf634bbfe10eb19f354bd973df82bcfaf15 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Mon, 12 Feb 2018 11:40:24 +0900 Subject: [PATCH 030/544] Update CFS version --- appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index 9cf68803a2..b86082334d 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -12,7 +12,7 @@ install: - cmd: git submodule update --init --recursive --depth=5 - cmd: choco install resharper-clt -y - cmd: choco install nvika -y - - cmd: appveyor DownloadFile https://github.com/peppy/CodeFileSanity/releases/download/v0.2.3/CodeFileSanity.exe + - cmd: appveyor DownloadFile https://github.com/peppy/CodeFileSanity/releases/download/v0.2.4/CodeFileSanity.exe before_build: - cmd: CodeFileSanity.exe - cmd: nuget restore -verbosity quiet From 264a0f59e2d91ba963ec7c4a3fd74571b7beb30f Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Mon, 12 Feb 2018 12:22:13 +0900 Subject: [PATCH 031/544] Fix duplicate test name --- osu.Game.Tests/Beatmaps/IO/ImportBeatmapTest.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game.Tests/Beatmaps/IO/ImportBeatmapTest.cs b/osu.Game.Tests/Beatmaps/IO/ImportBeatmapTest.cs index 4da9cba446..a0ca60f1f2 100644 --- a/osu.Game.Tests/Beatmaps/IO/ImportBeatmapTest.cs +++ b/osu.Game.Tests/Beatmaps/IO/ImportBeatmapTest.cs @@ -62,7 +62,7 @@ namespace osu.Game.Tests.Beatmaps.IO public void TestImportThenImport() { //unfortunately for the time being we need to reference osu.Framework.Desktop for a game host here. - using (HeadlessGameHost host = new CleanRunHeadlessGameHost("TestImportThenDeleteThenImport")) + using (HeadlessGameHost host = new CleanRunHeadlessGameHost("TestImportThenImport")) { try { From e54de0c267a85003a78570c601fd18283c8c00d4 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Mon, 12 Feb 2018 15:25:09 +0900 Subject: [PATCH 032/544] Remove sqlite-net migration Anyone that may have benefited from this already has. --- osu.Game/Database/OsuDbContext.cs | 82 ------------------------------- 1 file changed, 82 deletions(-) diff --git a/osu.Game/Database/OsuDbContext.cs b/osu.Game/Database/OsuDbContext.cs index 0fa1f238a9..cf29ae4496 100644 --- a/osu.Game/Database/OsuDbContext.cs +++ b/osu.Game/Database/OsuDbContext.cs @@ -186,8 +186,6 @@ namespace osu.Game.Database public void Migrate() { - migrateFromSqliteNet(); - try { Database.Migrate(); @@ -197,86 +195,6 @@ namespace osu.Game.Database throw new MigrationFailedException(e); } } - - private void migrateFromSqliteNet() - { - try - { - // will fail if the database isn't in a sane EF-migrated state. - Database.ExecuteSqlCommand("SELECT MetadataID FROM BeatmapSetInfo LIMIT 1"); - } - catch - { - try - { - Database.ExecuteSqlCommand("DROP TABLE IF EXISTS __EFMigrationsHistory"); - - // will fail (intentionally) if we don't have sqlite-net data present. - Database.ExecuteSqlCommand("SELECT OnlineBeatmapSetId FROM BeatmapMetadata LIMIT 1"); - - try - { - Logger.Log("Performing migration from sqlite-net to EF...", LoggingTarget.Database, Framework.Logging.LogLevel.Important); - - // we are good to perform messy migration of data!. - Database.ExecuteSqlCommand("ALTER TABLE BeatmapDifficulty RENAME TO BeatmapDifficulty_Old"); - Database.ExecuteSqlCommand("ALTER TABLE BeatmapMetadata RENAME TO BeatmapMetadata_Old"); - Database.ExecuteSqlCommand("ALTER TABLE FileInfo RENAME TO FileInfo_Old"); - Database.ExecuteSqlCommand("ALTER TABLE KeyBinding RENAME TO KeyBinding_Old"); - Database.ExecuteSqlCommand("ALTER TABLE BeatmapSetInfo RENAME TO BeatmapSetInfo_Old"); - Database.ExecuteSqlCommand("ALTER TABLE BeatmapInfo RENAME TO BeatmapInfo_Old"); - Database.ExecuteSqlCommand("ALTER TABLE BeatmapSetFileInfo RENAME TO BeatmapSetFileInfo_Old"); - Database.ExecuteSqlCommand("ALTER TABLE RulesetInfo RENAME TO RulesetInfo_Old"); - - Database.ExecuteSqlCommand("DROP TABLE StoreVersion"); - - // perform EF migrations to create sane table structure. - Database.Migrate(); - - // copy data table by table to new structure, dropping old tables as we go. - Database.ExecuteSqlCommand("INSERT INTO FileInfo SELECT * FROM FileInfo_Old"); - Database.ExecuteSqlCommand("DROP TABLE FileInfo_Old"); - - Database.ExecuteSqlCommand("INSERT INTO KeyBinding SELECT ID, [Action], Keys, RulesetID, Variant FROM KeyBinding_Old"); - Database.ExecuteSqlCommand("DROP TABLE KeyBinding_Old"); - - Database.ExecuteSqlCommand( - "INSERT INTO BeatmapMetadata SELECT ID, Artist, ArtistUnicode, AudioFile, Author, BackgroundFile, PreviewTime, Source, Tags, Title, TitleUnicode FROM BeatmapMetadata_Old"); - Database.ExecuteSqlCommand("DROP TABLE BeatmapMetadata_Old"); - - Database.ExecuteSqlCommand( - "INSERT INTO BeatmapDifficulty SELECT `ID`, `ApproachRate`, `CircleSize`, `DrainRate`, `OverallDifficulty`, `SliderMultiplier`, `SliderTickRate` FROM BeatmapDifficulty_Old"); - Database.ExecuteSqlCommand("DROP TABLE BeatmapDifficulty_Old"); - - Database.ExecuteSqlCommand("INSERT INTO BeatmapSetInfo SELECT ID, DeletePending, Hash, BeatmapMetadataID, OnlineBeatmapSetID, Protected FROM BeatmapSetInfo_Old"); - Database.ExecuteSqlCommand("DROP TABLE BeatmapSetInfo_Old"); - - Database.ExecuteSqlCommand("INSERT INTO BeatmapSetFileInfo SELECT ID, BeatmapSetInfoID, FileInfoID, Filename FROM BeatmapSetFileInfo_Old"); - Database.ExecuteSqlCommand("DROP TABLE BeatmapSetFileInfo_Old"); - - Database.ExecuteSqlCommand("INSERT INTO RulesetInfo SELECT ID, Available, InstantiationInfo, Name FROM RulesetInfo_Old"); - Database.ExecuteSqlCommand("DROP TABLE RulesetInfo_Old"); - - Database.ExecuteSqlCommand( - "INSERT INTO BeatmapInfo SELECT ID, AudioLeadIn, BaseDifficultyID, BeatDivisor, BeatmapSetInfoID, Countdown, DistanceSpacing, GridSize, Hash, IFNULL(Hidden, 0), LetterboxInBreaks, MD5Hash, NULLIF(BeatmapMetadataID, 0), NULLIF(OnlineBeatmapID, 0), Path, RulesetID, SpecialStyle, StackLeniency, StarDifficulty, StoredBookmarks, TimelineZoom, Version, WidescreenStoryboard FROM BeatmapInfo_Old"); - Database.ExecuteSqlCommand("DROP TABLE BeatmapInfo_Old"); - - Logger.Log("Migration complete!", LoggingTarget.Database, Framework.Logging.LogLevel.Important); - } - catch (Exception e) - { - throw new MigrationFailedException(e); - } - } - catch (MigrationFailedException) - { - throw; - } - catch - { - } - } - } } public class MigrationFailedException : Exception From 9ed05543d7161dc0a3d71299db5f1a665bf2f571 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Mon, 12 Feb 2018 15:39:00 +0900 Subject: [PATCH 033/544] Fix post-test conditionals from being inverse of what we want to test --- osu.Game.Tests/Beatmaps/IO/ImportBeatmapTest.cs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/osu.Game.Tests/Beatmaps/IO/ImportBeatmapTest.cs b/osu.Game.Tests/Beatmaps/IO/ImportBeatmapTest.cs index a0ca60f1f2..cade50a9f3 100644 --- a/osu.Game.Tests/Beatmaps/IO/ImportBeatmapTest.cs +++ b/osu.Game.Tests/Beatmaps/IO/ImportBeatmapTest.cs @@ -107,9 +107,8 @@ namespace osu.Game.Tests.Beatmaps.IO var importedSecondTime = loadOszIntoOsu(osu); // check the newly "imported" beatmap is actually just the restored previous import. since it matches hash. - Assert.IsTrue(imported.ID == importedSecondTime.ID); - Assert.IsTrue(imported.Beatmaps.First().ID == importedSecondTime.Beatmaps.First().ID); - + Assert.IsTrue(imported.ID != importedSecondTime.ID); + Assert.IsTrue(imported.Beatmaps.First().ID < importedSecondTime.Beatmaps.First().ID); Assert.IsTrue(manager.GetAllUsableBeatmapSets().Count == 1); Assert.IsTrue(manager.QueryBeatmapSets(_ => true).ToList().Count == 1); From cc948d688f90453e58cc2dcdceb8ca46bd0d338e Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Mon, 12 Feb 2018 15:39:13 +0900 Subject: [PATCH 034/544] Fix unrelated spacing issue --- osu.Game/OsuGameBase.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game/OsuGameBase.cs b/osu.Game/OsuGameBase.cs index 937b204c81..a7eac27056 100644 --- a/osu.Game/OsuGameBase.cs +++ b/osu.Game/OsuGameBase.cs @@ -218,7 +218,7 @@ namespace osu.Game CursorOverrideContainer.Child = globalBinding = new GlobalActionContainer(this) { RelativeSizeAxes = Axes.Both, - Child = content = new OsuTooltipContainer(CursorOverrideContainer.Cursor) { RelativeSizeAxes = Axes.Both } + Child = content = new OsuTooltipContainer(CursorOverrideContainer.Cursor) { RelativeSizeAxes = Axes.Both } }; base.Content.Add(new DrawSizePreservingFillContainer { Child = CursorOverrideContainer }); From cfb2b3f1e81fc0dbb09aa3ac89418bcc70c73619 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 12 Feb 2018 16:02:42 +0900 Subject: [PATCH 035/544] Rework SelctionLayer to support click-selections --- .../Objects/Drawables/DrawableSlider.cs | 2 + .../Objects/Drawables/Pieces/SliderBody.cs | 2 + .../Visual/TestCaseEditorSelectionLayer.cs | 7 +- .../Layers/Selection/HitObjectCapturer.cs | 56 ++++++++++++++ .../Layers/Selection/HitObjectSelectionBox.cs | 73 ++++--------------- .../Edit/Layers/Selection/SelectionLayer.cs | 71 ++++++++++++++---- osu.Game/osu.Game.csproj | 1 + 7 files changed, 139 insertions(+), 73 deletions(-) create mode 100644 osu.Game/Rulesets/Edit/Layers/Selection/HitObjectCapturer.cs diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs index 5795bb8405..41df7ae4a4 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs @@ -157,6 +157,8 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables public Drawable ProxiedLayer => HeadCircle.ApproachCircle; + public override bool ReceiveMouseInputAt(Vector2 screenSpacePos) => Body.ReceiveMouseInputAt(screenSpacePos); + public override Vector2 SelectionPoint => ToScreenSpace(Body.Position); public override Quad SelectionQuad => Body.PathDrawQuad; } diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/SliderBody.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/SliderBody.cs index 901d1c568d..89af67ba2a 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/SliderBody.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/SliderBody.cs @@ -78,6 +78,8 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces container.Attach(RenderbufferInternalFormat.DepthComponent16); } + public override bool ReceiveMouseInputAt(Vector2 screenSpacePos) => path.ReceiveMouseInputAt(screenSpacePos); + public void SetRange(double p0, double p1) { if (p0 > p1) diff --git a/osu.Game.Tests/Visual/TestCaseEditorSelectionLayer.cs b/osu.Game.Tests/Visual/TestCaseEditorSelectionLayer.cs index 755800c4e1..ae5296b70e 100644 --- a/osu.Game.Tests/Visual/TestCaseEditorSelectionLayer.cs +++ b/osu.Game.Tests/Visual/TestCaseEditorSelectionLayer.cs @@ -19,7 +19,12 @@ namespace osu.Game.Tests.Visual { public class TestCaseEditorSelectionLayer : OsuTestCase { - public override IReadOnlyList RequiredTypes => new[] { typeof(SelectionLayer) }; + public override IReadOnlyList RequiredTypes => new[] + { + typeof(HitObjectCapturer), + typeof(HitObjectSelectionBox), + typeof(SelectionLayer) + }; [BackgroundDependencyLoader] private void load() diff --git a/osu.Game/Rulesets/Edit/Layers/Selection/HitObjectCapturer.cs b/osu.Game/Rulesets/Edit/Layers/Selection/HitObjectCapturer.cs new file mode 100644 index 0000000000..e141f06816 --- /dev/null +++ b/osu.Game/Rulesets/Edit/Layers/Selection/HitObjectCapturer.cs @@ -0,0 +1,56 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using System; +using System.Collections.Generic; +using System.Linq; +using osu.Framework.Graphics.Primitives; +using osu.Game.Rulesets.Objects.Drawables; +using OpenTK; + +namespace osu.Game.Rulesets.Edit.Layers.Selection +{ + public class HitObjectCapturer + { + public event Action HitObjectCaptured; + + private readonly IEnumerable capturableHitObjects; + + public HitObjectCapturer(IEnumerable capturableHitObjects) + { + this.capturableHitObjects = capturableHitObjects; + } + + /// + /// Captures all hitobjects that are present within the area of a . + /// + /// The capture . + /// If any s were captured. + public bool CaptureQuad(Quad screenSpaceQuad) + { + bool anyCaptured = false; + foreach (var obj in capturableHitObjects.Where(h => h.IsAlive && h.IsPresent && screenSpaceQuad.Contains(h.SelectionPoint))) + { + HitObjectCaptured?.Invoke(obj); + anyCaptured = true; + } + + return anyCaptured; + } + + /// + /// Captures the top-most hitobject that is present under a specific point. + /// + /// The to capture at. + /// Whether a was captured. + public bool CapturePoint(Vector2 screenSpacePoint) + { + var captured = capturableHitObjects.Reverse().Where(h => h.IsAlive && h.IsPresent).FirstOrDefault(h => h.ReceiveMouseInputAt(screenSpacePoint)); + if (captured == null) + return false; + + HitObjectCaptured?.Invoke(captured); + return true; + } + } +} diff --git a/osu.Game/Rulesets/Edit/Layers/Selection/HitObjectSelectionBox.cs b/osu.Game/Rulesets/Edit/Layers/Selection/HitObjectSelectionBox.cs index fcb2f8f57f..c887cd0b7b 100644 --- a/osu.Game/Rulesets/Edit/Layers/Selection/HitObjectSelectionBox.cs +++ b/osu.Game/Rulesets/Edit/Layers/Selection/HitObjectSelectionBox.cs @@ -1,7 +1,6 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE -using System; using System.Collections.Generic; using osu.Framework.Allocation; using osu.Framework.Graphics; @@ -12,7 +11,6 @@ using osu.Game.Graphics; using osu.Game.Rulesets.Objects.Drawables; using OpenTK; using OpenTK.Graphics; -using osu.Framework.Configuration; namespace osu.Game.Rulesets.Edit.Layers.Selection { @@ -21,29 +19,18 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection /// public class HitObjectSelectionBox : CompositeDrawable { - public readonly Bindable Selection = new Bindable(); - - /// - /// The s that can be selected through a drag-selection. - /// - public IEnumerable CapturableObjects; - private readonly Container borderMask; private readonly Drawable background; private readonly HandleContainer handles; private Color4 captureFinishedColour; - - private readonly Vector2 startPos; + private RectangleF dragRectangle; /// /// Creates a new . /// - /// The point at which the drag was initiated, in the parent's coordinates. - public HitObjectSelectionBox(Vector2 startPos) + public HitObjectSelectionBox() { - this.startPos = startPos; - InternalChildren = new Drawable[] { new Container @@ -70,8 +57,8 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection RelativeSizeAxes = Axes.Both, Alpha = 0, GetDragRectangle = () => dragRectangle, - UpdateDragRectangle = updateDragRectangle, - FinishDrag = FinishCapture + UpdateDragRectangle = SetDragRectangle, + FinishDrag = () => FinishCapture() } }; } @@ -82,49 +69,29 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection captureFinishedColour = colours.Yellow; } - /// - /// The secondary corner of the drag selection box. A rectangle will be fit between the starting position and this value. - /// - public Vector2 DragEndPosition { set => updateDragRectangle(RectangleF.FromLTRB(startPos.X, startPos.Y, value.X, value.Y)); } - - private RectangleF dragRectangle; - private void updateDragRectangle(RectangleF rectangle) + public void SetDragRectangle(RectangleF rectangle) { dragRectangle = rectangle; - Position = new Vector2( - Math.Min(rectangle.Left, rectangle.Right), - Math.Min(rectangle.Top, rectangle.Bottom)); + var topLeft = Parent.ToLocalSpace(rectangle.TopLeft); + var bottomRight = Parent.ToLocalSpace(rectangle.BottomRight); - Size = new Vector2( - Math.Max(rectangle.Left, rectangle.Right) - Position.X, - Math.Max(rectangle.Top, rectangle.Bottom) - Position.Y); + Position = topLeft; + Size = bottomRight - topLeft; } private readonly List capturedHitObjects = new List(); - /// - /// Processes hitobjects to determine which ones are captured by the drag selection. - /// Captured hitobjects will be enclosed by the drag selection upon . - /// - public void BeginCapture() - { - capturedHitObjects.Clear(); + public bool HasCaptured => capturedHitObjects.Count > 0; - foreach (var obj in CapturableObjects) - { - if (!obj.IsAlive || !obj.IsPresent) - continue; + public void AddCaptured(DrawableHitObject hitObject) => capturedHitObjects.Add(hitObject); - if (ScreenSpaceDrawQuad.Contains(obj.SelectionPoint)) - capturedHitObjects.Add(obj); - } - } + public void ClearCaptured() => capturedHitObjects.Clear(); /// /// Encloses hitobjects captured through in the drag selection box. /// - public void FinishCapture() + public void FinishCapture(bool instant = false) { if (capturedHitObjects.Count == 0) { @@ -145,8 +112,8 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection topLeft -= new Vector2(5); bottomRight += new Vector2(5); - this.MoveTo(topLeft, 200, Easing.OutQuint) - .ResizeTo(bottomRight - topLeft, 200, Easing.OutQuint); + this.MoveTo(topLeft, instant ? 0 : 100, Easing.OutQuint) + .ResizeTo(bottomRight - topLeft, instant ? 0 : 100, Easing.OutQuint); dragRectangle = RectangleF.FromLTRB(topLeft.X, topLeft.Y, bottomRight.X, bottomRight.Y); @@ -156,12 +123,6 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection // Transform into markers to let the user modify the drag selection further. background.Delay(50).FadeOut(200); handles.FadeIn(200); - - Selection.Value = new SelectionInfo - { - Objects = capturedHitObjects, - SelectionQuad = Parent.ToScreenSpace(dragRectangle) - }; } private bool isActive = true; @@ -171,9 +132,7 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection public override void Hide() { isActive = false; - this.FadeOut(400, Easing.OutQuint).Expire(); - - Selection.Value = null; + this.FadeOut(400, Easing.OutQuint); } } } diff --git a/osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs b/osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs index 93755d400a..b9ece8759c 100644 --- a/osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs +++ b/osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs @@ -1,18 +1,18 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE -using osu.Framework.Configuration; +using osu.Framework.Allocation; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; +using osu.Framework.Graphics.Primitives; using osu.Framework.Input; +using osu.Game.Rulesets.Objects.Drawables; using osu.Game.Rulesets.UI; namespace osu.Game.Rulesets.Edit.Layers.Selection { public class SelectionLayer : CompositeDrawable { - public readonly Bindable Selection = new Bindable(); - private readonly Playfield playfield; public SelectionLayer(Playfield playfield) @@ -22,39 +22,80 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection RelativeSizeAxes = Axes.Both; } - private HitObjectSelectionBox selectionBoxBox; + private HitObjectSelectionBox selectionBox; + private HitObjectCapturer capturer; + + [BackgroundDependencyLoader] + private void load() + { + capturer = new HitObjectCapturer(playfield.HitObjects.Objects); + capturer.HitObjectCaptured += hitObjectCaptured; + } + + private void hitObjectCaptured(DrawableHitObject hitObject) => selectionBox.AddCaptured(hitObject); protected override bool OnDragStart(InputState state) { // Hide the previous drag box - we won't be working with it any longer - selectionBoxBox?.Hide(); + selectionBox?.Hide(); + selectionBox?.Expire(); - AddInternal(selectionBoxBox = new HitObjectSelectionBox(ToLocalSpace(state.Mouse.NativeState.Position)) - { - CapturableObjects = playfield.HitObjects.Objects, - }); - - Selection.BindTo(selectionBoxBox.Selection); + AddInternal(selectionBox = new HitObjectSelectionBox()); return true; } protected override bool OnDrag(InputState state) { - selectionBoxBox.DragEndPosition = ToLocalSpace(state.Mouse.NativeState.Position); - selectionBoxBox.BeginCapture(); + var dragPosition = state.Mouse.NativeState.Position; + var dragStartPosition = state.Mouse.NativeState.PositionMouseDown ?? dragPosition; + + var screenSpaceDragQuad = new Quad(dragStartPosition.X, dragStartPosition.Y, dragPosition.X - dragStartPosition.X, dragPosition.Y - dragStartPosition.Y); + + selectionBox.SetDragRectangle(screenSpaceDragQuad.AABBFloat); + capturer.CaptureQuad(screenSpaceDragQuad); + return true; } protected override bool OnDragEnd(InputState state) { - selectionBoxBox.FinishCapture(); + // Due to https://github.com/ppy/osu-framework/issues/1382, we may get here after OnClick has set the selectionBox to null + // In the case that the user dragged within the click distance out of an object + if (selectionBox == null) + return true; + + selectionBox.FinishCapture(); + + // If there are no hitobjects, remove the selection box + if (!selectionBox.HasCaptured) + { + selectionBox.Expire(); + selectionBox = null; + } + return true; } protected override bool OnClick(InputState state) { - selectionBoxBox?.Hide(); + // We could be coming here without a previous selection box + if (selectionBox == null) + AddInternal(selectionBox = new HitObjectSelectionBox { Position = ToLocalSpace(state.Mouse.NativeState.Position), Alpha = 0 }); + + // If we're coming here with a previous selection, unselect those hitobjects + selectionBox.ClearCaptured(); + if (capturer.CapturePoint(state.Mouse.NativeState.Position)) + { + selectionBox.Alpha = 1; + selectionBox.FinishCapture(true); + } + else + { + selectionBox.Hide(); + selectionBox = null; + } + return true; } } diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index bb9925abbc..e1f5eee182 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -332,6 +332,7 @@ + From 1adbe3585c14c0f5b37e7192dd8c0aa270bb150f Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 12 Feb 2018 16:03:59 +0900 Subject: [PATCH 036/544] HitObjectSelectionBox -> SelectionDragger --- .../Visual/TestCaseEditorSelectionLayer.cs | 2 +- .../Rulesets/Edit/Layers/Selection/Handle.cs | 2 +- ...ectSelectionBox.cs => SelectionDragger.cs} | 6 ++-- .../Edit/Layers/Selection/SelectionLayer.cs | 36 +++++++++---------- osu.Game/osu.Game.csproj | 2 +- 5 files changed, 24 insertions(+), 24 deletions(-) rename osu.Game/Rulesets/Edit/Layers/Selection/{HitObjectSelectionBox.cs => SelectionDragger.cs} (94%) diff --git a/osu.Game.Tests/Visual/TestCaseEditorSelectionLayer.cs b/osu.Game.Tests/Visual/TestCaseEditorSelectionLayer.cs index ae5296b70e..a7220718f5 100644 --- a/osu.Game.Tests/Visual/TestCaseEditorSelectionLayer.cs +++ b/osu.Game.Tests/Visual/TestCaseEditorSelectionLayer.cs @@ -22,7 +22,7 @@ namespace osu.Game.Tests.Visual public override IReadOnlyList RequiredTypes => new[] { typeof(HitObjectCapturer), - typeof(HitObjectSelectionBox), + typeof(SelectionDragger), typeof(SelectionLayer) }; diff --git a/osu.Game/Rulesets/Edit/Layers/Selection/Handle.cs b/osu.Game/Rulesets/Edit/Layers/Selection/Handle.cs index d275022a15..e85096110b 100644 --- a/osu.Game/Rulesets/Edit/Layers/Selection/Handle.cs +++ b/osu.Game/Rulesets/Edit/Layers/Selection/Handle.cs @@ -16,7 +16,7 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection { /// /// Represents a marker visible on the border of a which exposes - /// properties that are used to resize a . + /// properties that are used to resize a . /// public class Handle : CompositeDrawable { diff --git a/osu.Game/Rulesets/Edit/Layers/Selection/HitObjectSelectionBox.cs b/osu.Game/Rulesets/Edit/Layers/Selection/SelectionDragger.cs similarity index 94% rename from osu.Game/Rulesets/Edit/Layers/Selection/HitObjectSelectionBox.cs rename to osu.Game/Rulesets/Edit/Layers/Selection/SelectionDragger.cs index c887cd0b7b..b08d208bbd 100644 --- a/osu.Game/Rulesets/Edit/Layers/Selection/HitObjectSelectionBox.cs +++ b/osu.Game/Rulesets/Edit/Layers/Selection/SelectionDragger.cs @@ -17,7 +17,7 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection /// /// A box that represents a drag selection. /// - public class HitObjectSelectionBox : CompositeDrawable + public class SelectionDragger : CompositeDrawable { private readonly Container borderMask; private readonly Drawable background; @@ -27,9 +27,9 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection private RectangleF dragRectangle; /// - /// Creates a new . + /// Creates a new . /// - public HitObjectSelectionBox() + public SelectionDragger() { InternalChildren = new Drawable[] { diff --git a/osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs b/osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs index b9ece8759c..19891b0783 100644 --- a/osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs +++ b/osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs @@ -22,7 +22,7 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection RelativeSizeAxes = Axes.Both; } - private HitObjectSelectionBox selectionBox; + private SelectionDragger selectionDragger; private HitObjectCapturer capturer; [BackgroundDependencyLoader] @@ -32,15 +32,15 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection capturer.HitObjectCaptured += hitObjectCaptured; } - private void hitObjectCaptured(DrawableHitObject hitObject) => selectionBox.AddCaptured(hitObject); + private void hitObjectCaptured(DrawableHitObject hitObject) => selectionDragger.AddCaptured(hitObject); protected override bool OnDragStart(InputState state) { // Hide the previous drag box - we won't be working with it any longer - selectionBox?.Hide(); - selectionBox?.Expire(); + selectionDragger?.Hide(); + selectionDragger?.Expire(); - AddInternal(selectionBox = new HitObjectSelectionBox()); + AddInternal(selectionDragger = new SelectionDragger()); return true; } @@ -52,7 +52,7 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection var screenSpaceDragQuad = new Quad(dragStartPosition.X, dragStartPosition.Y, dragPosition.X - dragStartPosition.X, dragPosition.Y - dragStartPosition.Y); - selectionBox.SetDragRectangle(screenSpaceDragQuad.AABBFloat); + selectionDragger.SetDragRectangle(screenSpaceDragQuad.AABBFloat); capturer.CaptureQuad(screenSpaceDragQuad); return true; @@ -62,16 +62,16 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection { // Due to https://github.com/ppy/osu-framework/issues/1382, we may get here after OnClick has set the selectionBox to null // In the case that the user dragged within the click distance out of an object - if (selectionBox == null) + if (selectionDragger == null) return true; - selectionBox.FinishCapture(); + selectionDragger.FinishCapture(); // If there are no hitobjects, remove the selection box - if (!selectionBox.HasCaptured) + if (!selectionDragger.HasCaptured) { - selectionBox.Expire(); - selectionBox = null; + selectionDragger.Expire(); + selectionDragger = null; } return true; @@ -80,20 +80,20 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection protected override bool OnClick(InputState state) { // We could be coming here without a previous selection box - if (selectionBox == null) - AddInternal(selectionBox = new HitObjectSelectionBox { Position = ToLocalSpace(state.Mouse.NativeState.Position), Alpha = 0 }); + if (selectionDragger == null) + AddInternal(selectionDragger = new SelectionDragger { Position = ToLocalSpace(state.Mouse.NativeState.Position), Alpha = 0 }); // If we're coming here with a previous selection, unselect those hitobjects - selectionBox.ClearCaptured(); + selectionDragger.ClearCaptured(); if (capturer.CapturePoint(state.Mouse.NativeState.Position)) { - selectionBox.Alpha = 1; - selectionBox.FinishCapture(true); + selectionDragger.Alpha = 1; + selectionDragger.FinishCapture(true); } else { - selectionBox.Hide(); - selectionBox = null; + selectionDragger.Hide(); + selectionDragger = null; } return true; diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index e1f5eee182..77e594c37c 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -353,7 +353,7 @@ - + From edc36381752067292b9f2faeb3921794ea5e84bb Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Mon, 12 Feb 2018 17:55:11 +0900 Subject: [PATCH 037/544] DatabaseWriteUsage --- .../Visual/TestCasePlaySongSelect.cs | 8 +- osu.Game/Beatmaps/BeatmapManager.cs | 188 ++++++------------ osu.Game/Beatmaps/BeatmapStore.cs | 124 ++++++------ osu.Game/Configuration/SettingsStore.cs | 21 +- osu.Game/Database/DatabaseBackedStore.cs | 44 ++-- osu.Game/Database/DatabaseContextFactory.cs | 60 +++++- osu.Game/Database/DatabaseWriteUsage.cs | 28 +++ osu.Game/Database/SingletonContextFactory.cs | 21 ++ osu.Game/IO/FileStore.cs | 109 +++++----- osu.Game/Input/KeyBindingStore.cs | 40 ++-- osu.Game/OsuGameBase.cs | 20 +- osu.Game/Rulesets/RulesetStore.cs | 71 +++---- osu.Game/Rulesets/Scoring/ScoreStore.cs | 3 +- osu.Game/osu.Game.csproj | 2 + 14 files changed, 385 insertions(+), 354 deletions(-) create mode 100644 osu.Game/Database/DatabaseWriteUsage.cs create mode 100644 osu.Game/Database/SingletonContextFactory.cs diff --git a/osu.Game.Tests/Visual/TestCasePlaySongSelect.cs b/osu.Game.Tests/Visual/TestCasePlaySongSelect.cs index 809de2b8db..f54eb77c6b 100644 --- a/osu.Game.Tests/Visual/TestCasePlaySongSelect.cs +++ b/osu.Game.Tests/Visual/TestCasePlaySongSelect.cs @@ -63,12 +63,10 @@ namespace osu.Game.Tests.Visual var storage = new TestStorage(@"TestCasePlaySongSelect"); // this is by no means clean. should be replacing inside of OsuGameBase somehow. - var context = new OsuDbContext(); + DatabaseContextFactory factory = new SingletonContextFactory(new OsuDbContext()); - OsuDbContext contextFactory() => context; - - dependencies.Cache(rulesets = new RulesetStore(contextFactory)); - dependencies.Cache(manager = new BeatmapManager(storage, contextFactory, rulesets, null) + dependencies.Cache(rulesets = new RulesetStore(factory)); + dependencies.Cache(manager = new BeatmapManager(storage, factory, rulesets, null) { DefaultBeatmap = defaultBeatmap = game.Beatmap.Default }); diff --git a/osu.Game/Beatmaps/BeatmapManager.cs b/osu.Game/Beatmaps/BeatmapManager.cs index cbaa8a1066..4ec153c78f 100644 --- a/osu.Game/Beatmaps/BeatmapManager.cs +++ b/osu.Game/Beatmaps/BeatmapManager.cs @@ -60,7 +60,7 @@ namespace osu.Game.Beatmaps /// public WorkingBeatmap DefaultBeatmap { private get; set; } - private readonly Func createContext; + private readonly DatabaseContextFactory contextFactory; private readonly FileStore files; @@ -85,29 +85,18 @@ namespace osu.Game.Beatmaps /// public Func GetStableStorage { private get; set; } - private void refreshImportContext() + public BeatmapManager(Storage storage, DatabaseContextFactory contextFactory, RulesetStore rulesets, APIAccess api, IIpcHost importHost = null) { - lock (importContextLock) - { - importContext?.Value?.Dispose(); + this.contextFactory = contextFactory; - importContext = new Lazy(() => - { - var c = createContext(); - c.Database.AutoTransactionsEnabled = false; - return c; - }); - } - } + beatmaps = new BeatmapStore(contextFactory); - public BeatmapManager(Storage storage, Func context, RulesetStore rulesets, APIAccess api, IIpcHost importHost = null) - { - createContext = context; + beatmaps.BeatmapSetAdded += s => BeatmapSetAdded?.Invoke(s); + beatmaps.BeatmapSetRemoved += s => BeatmapSetRemoved?.Invoke(s); + beatmaps.BeatmapHidden += b => BeatmapHidden?.Invoke(b); + beatmaps.BeatmapRestored += b => BeatmapRestored?.Invoke(b); - refreshImportContext(); - - beatmaps = getBeatmapStoreWithContext(context); - files = new FileStore(context, storage); + files = new FileStore(contextFactory, storage); this.rulesets = rulesets; this.api = api; @@ -170,7 +159,6 @@ namespace osu.Game.Beatmaps { e = e.InnerException ?? e; Logger.Error(e, $@"Could not import beatmap set ({Path.GetFileName(path)})"); - refreshImportContext(); } } @@ -178,80 +166,57 @@ namespace osu.Game.Beatmaps return imported; } - private readonly object importContextLock = new object(); - private Lazy importContext; - /// /// Import a beatmap from an . /// /// The beatmap to be imported. public BeatmapSetInfo Import(ArchiveReader archive) { - // let's only allow one concurrent import at a time for now - lock (importContextLock) + using ( contextFactory.GetForWrite()) // used to share a context for full import. keep in mind this will block all writes. { - var context = importContext.Value; + // create a new set info (don't yet add to database) + var beatmapSet = createBeatmapSetInfo(archive); - using (var transaction = context.BeginTransaction()) + // check if this beatmap has already been imported and exit early if so + var existingHashMatch = beatmaps.BeatmapSets.FirstOrDefault(b => b.Hash == beatmapSet.Hash); + if (existingHashMatch != null) { - // create a new set info (don't yet add to database) - var beatmapSet = createBeatmapSetInfo(archive); - - // check if this beatmap has already been imported and exit early if so - var existingHashMatch = beatmaps.BeatmapSets.FirstOrDefault(b => b.Hash == beatmapSet.Hash); - if (existingHashMatch != null) - { - undelete(beatmaps, files, existingHashMatch); - return existingHashMatch; - } - - // check if a set already exists with the same online id - if (beatmapSet.OnlineBeatmapSetID != null) - { - var existingOnlineId = beatmaps.BeatmapSets.FirstOrDefault(b => b.OnlineBeatmapSetID == beatmapSet.OnlineBeatmapSetID); - if (existingOnlineId != null) - { - // {Microsoft.EntityFrameworkCore.DbUpdateConcurrencyException: Database operation expected to affect 1 row(s) but actually affected 0 row(s). Data may have been modified or deleted since entities were loaded. See http://go.microsoft.com/fwlink/?LinkId=527962…} - - Delete(existingOnlineId); - beatmaps.Cleanup(s => s.ID == existingOnlineId.ID); - } - } - - beatmapSet.Files = createFileInfos(archive, getFileStoreWithContext(context)); - beatmapSet.Beatmaps = createBeatmapDifficulties(archive); - - // remove metadata from difficulties where it matches the set - foreach (BeatmapInfo b in beatmapSet.Beatmaps) - if (beatmapSet.Metadata.Equals(b.Metadata)) - b.Metadata = null; - - // import to beatmap store - import(beatmapSet, context); - - context.SaveChanges(transaction); - return beatmapSet; + undelete(existingHashMatch); + return existingHashMatch; } + + // check if a set already exists with the same online id + if (beatmapSet.OnlineBeatmapSetID != null) + { + var existingOnlineId = beatmaps.BeatmapSets.FirstOrDefault(b => b.OnlineBeatmapSetID == beatmapSet.OnlineBeatmapSetID); + if (existingOnlineId != null) + { + // {Microsoft.EntityFrameworkCore.DbUpdateConcurrencyException: Database operation expected to affect 1 row(s) but actually affected 0 row(s). Data may have been modified or deleted since entities were loaded. See http://go.microsoft.com/fwlink/?LinkId=527962…} + + Delete(existingOnlineId); + beatmaps.Cleanup(s => s.ID == existingOnlineId.ID); + } + } + + beatmapSet.Files = createFileInfos(archive, files); + beatmapSet.Beatmaps = createBeatmapDifficulties(archive); + + // remove metadata from difficulties where it matches the set + foreach (BeatmapInfo b in beatmapSet.Beatmaps) + if (beatmapSet.Metadata.Equals(b.Metadata)) + b.Metadata = null; + + // import to beatmap store + Import(beatmapSet); + return beatmapSet; } } /// /// Import a beatmap from a . /// - /// The beatmap to be imported. - public void Import(BeatmapSetInfo beatmapSetInfo) - { - lock (importContextLock) - { - var context = importContext.Value; - - using (var transaction = context.BeginTransaction()) - { - import(beatmapSetInfo, context); - context.SaveChanges(transaction); - } - } - } + /// The beatmap to be imported. + public void Import(BeatmapSetInfo beatmapSet) => beatmaps.Add(beatmapSet); /// /// Downloads a beatmap. @@ -350,26 +315,22 @@ namespace osu.Game.Beatmaps /// The beatmap set to delete. public void Delete(BeatmapSetInfo beatmapSet) { - lock (importContextLock) + using (var db = contextFactory.GetForWrite()) { - var context = importContext.Value; + var context = db.Context; - using (var transaction = context.BeginTransaction()) + context.ChangeTracker.AutoDetectChangesEnabled = false; + + // re-fetch the beatmap set on the import context. + beatmapSet = context.BeatmapSetInfo.Include(s => s.Files).ThenInclude(f => f.FileInfo).First(s => s.ID == beatmapSet.ID); + + if (beatmaps.Delete(beatmapSet)) { - context.ChangeTracker.AutoDetectChangesEnabled = false; - - // re-fetch the beatmap set on the import context. - beatmapSet = context.BeatmapSetInfo.Include(s => s.Files).ThenInclude(f => f.FileInfo).First(s => s.ID == beatmapSet.ID); - - if (getBeatmapStoreWithContext(context).Delete(beatmapSet)) - { - if (!beatmapSet.Protected) - getFileStoreWithContext(context).Dereference(beatmapSet.Files.Select(f => f.FileInfo).ToArray()); - } - - context.ChangeTracker.AutoDetectChangesEnabled = true; - context.SaveChanges(transaction); + if (!beatmapSet.Protected) + files.Dereference(beatmapSet.Files.Select(f => f.FileInfo).ToArray()); } + + context.ChangeTracker.AutoDetectChangesEnabled = true; } } @@ -417,19 +378,11 @@ namespace osu.Game.Beatmaps if (beatmapSet.Protected) return; - lock (importContextLock) + using (var db = contextFactory.GetForWrite()) { - var context = importContext.Value; - - using (var transaction = context.BeginTransaction()) - { - context.ChangeTracker.AutoDetectChangesEnabled = false; - - undelete(getBeatmapStoreWithContext(context), getFileStoreWithContext(context), beatmapSet); - - context.ChangeTracker.AutoDetectChangesEnabled = true; - context.SaveChanges(transaction); - } + db.Context.ChangeTracker.AutoDetectChangesEnabled = false; + undelete(beatmapSet); + db.Context.ChangeTracker.AutoDetectChangesEnabled = true; } } @@ -452,7 +405,7 @@ namespace osu.Game.Beatmaps /// The store to restore beatmaps from. /// The store to restore beatmap files from. /// The beatmap to restore. - private void undelete(BeatmapStore beatmaps, FileStore files, BeatmapSetInfo beatmapSet) + private void undelete(BeatmapSetInfo beatmapSet) { if (!beatmaps.Undelete(beatmapSet)) return; @@ -578,11 +531,6 @@ namespace osu.Game.Beatmaps notification.State = ProgressNotificationState.Completed; } - /// - /// Import a into the beatmap store. - /// - private void import(BeatmapSetInfo beatmapSet, OsuDbContext context) => getBeatmapStoreWithContext(context).Add(beatmapSet); - /// /// Creates an from a valid storage path. /// @@ -689,19 +637,5 @@ namespace osu.Game.Beatmaps return beatmapInfos; } - - private FileStore getFileStoreWithContext(OsuDbContext context) => new FileStore(() => context, files.Storage); - - private BeatmapStore getBeatmapStoreWithContext(OsuDbContext context) => getBeatmapStoreWithContext(() => context); - - private BeatmapStore getBeatmapStoreWithContext(Func context) - { - var store = new BeatmapStore(context); - store.BeatmapSetAdded += s => BeatmapSetAdded?.Invoke(s); - store.BeatmapSetRemoved += s => BeatmapSetRemoved?.Invoke(s); - store.BeatmapHidden += b => BeatmapHidden?.Invoke(b); - store.BeatmapRestored += b => BeatmapRestored?.Invoke(b); - return store; - } } } diff --git a/osu.Game/Beatmaps/BeatmapStore.cs b/osu.Game/Beatmaps/BeatmapStore.cs index f2c3eddec9..67a2bbbd90 100644 --- a/osu.Game/Beatmaps/BeatmapStore.cs +++ b/osu.Game/Beatmaps/BeatmapStore.cs @@ -20,7 +20,7 @@ namespace osu.Game.Beatmaps public event Action BeatmapHidden; public event Action BeatmapRestored; - public BeatmapStore(Func factory) + public BeatmapStore(DatabaseContextFactory factory) : base(factory) { } @@ -31,24 +31,25 @@ namespace osu.Game.Beatmaps /// The beatmap to add. public void Add(BeatmapSetInfo beatmapSet) { - var context = GetContext(); - - foreach (var beatmap in beatmapSet.Beatmaps.Where(b => b.Metadata != null)) + using (var db = ContextFactory.GetForWrite()) { - // If we detect a new metadata object it'll be attached to the current context so it can be reused - // to prevent duplicate entries when persisting. To accomplish this we look in the cache (.Local) - // of the corresponding table (.Set()) for matching entries to our criteria. - var contextMetadata = context.Set().Local.SingleOrDefault(e => e.Equals(beatmap.Metadata)); - if (contextMetadata != null) - beatmap.Metadata = contextMetadata; - else - context.BeatmapMetadata.Attach(beatmap.Metadata); + var context = db.Context; + + foreach (var beatmap in beatmapSet.Beatmaps.Where(b => b.Metadata != null)) + { + // If we detect a new metadata object it'll be attached to the current context so it can be reused + // to prevent duplicate entries when persisting. To accomplish this we look in the cache (.Local) + // of the corresponding table (.Set()) for matching entries to our criteria. + var contextMetadata = context.Set().Local.SingleOrDefault(e => e.Equals(beatmap.Metadata)); + if (contextMetadata != null) + beatmap.Metadata = contextMetadata; + else + context.BeatmapMetadata.Attach(beatmap.Metadata); + } + + context.BeatmapSetInfo.Attach(beatmapSet); + BeatmapSetAdded?.Invoke(beatmapSet); } - - context.BeatmapSetInfo.Attach(beatmapSet); - context.SaveChanges(); - - BeatmapSetAdded?.Invoke(beatmapSet); } /// @@ -59,10 +60,8 @@ namespace osu.Game.Beatmaps { BeatmapSetRemoved?.Invoke(beatmapSet); - var context = GetContext(); - - context.BeatmapSetInfo.Update(beatmapSet); - context.SaveChanges(); + using (var usage = ContextFactory.GetForWrite()) + usage.Context.BeatmapSetInfo.Update(beatmapSet); BeatmapSetAdded?.Invoke(beatmapSet); } @@ -74,13 +73,13 @@ namespace osu.Game.Beatmaps /// Whether the beatmap's was changed. public bool Delete(BeatmapSetInfo beatmapSet) { - var context = GetContext(); + using ( ContextFactory.GetForWrite()) + { + Refresh(ref beatmapSet, BeatmapSets); - Refresh(ref beatmapSet, BeatmapSets); - - if (beatmapSet.DeletePending) return false; - beatmapSet.DeletePending = true; - context.SaveChanges(); + if (beatmapSet.DeletePending) return false; + beatmapSet.DeletePending = true; + } BeatmapSetRemoved?.Invoke(beatmapSet); return true; @@ -93,13 +92,13 @@ namespace osu.Game.Beatmaps /// Whether the beatmap's was changed. public bool Undelete(BeatmapSetInfo beatmapSet) { - var context = GetContext(); + using ( ContextFactory.GetForWrite()) + { + Refresh(ref beatmapSet, BeatmapSets); - Refresh(ref beatmapSet, BeatmapSets); - - if (!beatmapSet.DeletePending) return false; - beatmapSet.DeletePending = false; - context.SaveChanges(); + if (!beatmapSet.DeletePending) return false; + beatmapSet.DeletePending = false; + } BeatmapSetAdded?.Invoke(beatmapSet); return true; @@ -112,15 +111,16 @@ namespace osu.Game.Beatmaps /// Whether the beatmap's was changed. public bool Hide(BeatmapInfo beatmap) { - var context = GetContext(); + using (ContextFactory.GetForWrite()) + { + Refresh(ref beatmap, Beatmaps); - Refresh(ref beatmap, Beatmaps); + if (beatmap.Hidden) return false; + beatmap.Hidden = true; - if (beatmap.Hidden) return false; - beatmap.Hidden = true; - context.SaveChanges(); + BeatmapHidden?.Invoke(beatmap); + } - BeatmapHidden?.Invoke(beatmap); return true; } @@ -131,13 +131,13 @@ namespace osu.Game.Beatmaps /// Whether the beatmap's was changed. public bool Restore(BeatmapInfo beatmap) { - var context = GetContext(); + using (ContextFactory.GetForWrite()) + { + Refresh(ref beatmap, Beatmaps); - Refresh(ref beatmap, Beatmaps); - - if (!beatmap.Hidden) return false; - beatmap.Hidden = false; - context.SaveChanges(); + if (!beatmap.Hidden) return false; + beatmap.Hidden = false; + } BeatmapRestored?.Invoke(beatmap); return true; @@ -147,34 +147,36 @@ namespace osu.Game.Beatmaps public void Cleanup(Expression> query) { - var context = GetContext(); + using (var usage = ContextFactory.GetForWrite()) + { + var context = usage.Context; - var purgeable = context.BeatmapSetInfo.Where(s => s.DeletePending && !s.Protected) - .Where(query) - .Include(s => s.Beatmaps).ThenInclude(b => b.Metadata) - .Include(s => s.Beatmaps).ThenInclude(b => b.BaseDifficulty) - .Include(s => s.Metadata); + var purgeable = context.BeatmapSetInfo.Where(s => s.DeletePending && !s.Protected) + .Where(query) + .Include(s => s.Beatmaps).ThenInclude(b => b.Metadata) + .Include(s => s.Beatmaps).ThenInclude(b => b.BaseDifficulty) + .Include(s => s.Metadata); - // metadata is M-N so we can't rely on cascades - context.BeatmapMetadata.RemoveRange(purgeable.Select(s => s.Metadata)); - context.BeatmapMetadata.RemoveRange(purgeable.SelectMany(s => s.Beatmaps.Select(b => b.Metadata).Where(m => m != null))); + // metadata is M-N so we can't rely on cascades + context.BeatmapMetadata.RemoveRange(purgeable.Select(s => s.Metadata)); + context.BeatmapMetadata.RemoveRange(purgeable.SelectMany(s => s.Beatmaps.Select(b => b.Metadata).Where(m => m != null))); - // todo: we can probably make cascades work here with a FK in BeatmapDifficulty. just make to make it work correctly. - context.BeatmapDifficulty.RemoveRange(purgeable.SelectMany(s => s.Beatmaps.Select(b => b.BaseDifficulty))); + // todo: we can probably make cascades work here with a FK in BeatmapDifficulty. just make to make it work correctly. + context.BeatmapDifficulty.RemoveRange(purgeable.SelectMany(s => s.Beatmaps.Select(b => b.BaseDifficulty))); - // cascades down to beatmaps. - context.BeatmapSetInfo.RemoveRange(purgeable); - context.SaveChanges(); + // cascades down to beatmaps. + context.BeatmapSetInfo.RemoveRange(purgeable); + } } - public IQueryable BeatmapSets => GetContext().BeatmapSetInfo + public IQueryable BeatmapSets => ContextFactory.Get().BeatmapSetInfo .Include(s => s.Metadata) .Include(s => s.Beatmaps).ThenInclude(s => s.Ruleset) .Include(s => s.Beatmaps).ThenInclude(b => b.BaseDifficulty) .Include(s => s.Beatmaps).ThenInclude(b => b.Metadata) .Include(s => s.Files).ThenInclude(f => f.FileInfo); - public IQueryable Beatmaps => GetContext().BeatmapInfo + public IQueryable Beatmaps => ContextFactory.Get().BeatmapInfo .Include(b => b.BeatmapSet).ThenInclude(s => s.Metadata) .Include(b => b.BeatmapSet).ThenInclude(s => s.Files).ThenInclude(f => f.FileInfo) .Include(b => b.Metadata) diff --git a/osu.Game/Configuration/SettingsStore.cs b/osu.Game/Configuration/SettingsStore.cs index 9b18151c84..7b66002a79 100644 --- a/osu.Game/Configuration/SettingsStore.cs +++ b/osu.Game/Configuration/SettingsStore.cs @@ -12,8 +12,8 @@ namespace osu.Game.Configuration { public event Action SettingChanged; - public SettingsStore(Func createContext) - : base(createContext) + public SettingsStore(DatabaseContextFactory contextFactory) + : base(contextFactory) { } @@ -24,19 +24,16 @@ namespace osu.Game.Configuration /// An optional variant. /// public List Query(int? rulesetId = null, int? variant = null) => - GetContext().DatabasedSetting.Where(b => b.RulesetID == rulesetId && b.Variant == variant).ToList(); + ContextFactory.Get().DatabasedSetting.Where(b => b.RulesetID == rulesetId && b.Variant == variant).ToList(); public void Update(DatabasedSetting setting) { - var context = GetContext(); - - var newValue = setting.Value; - - Refresh(ref setting); - - setting.Value = newValue; - - context.SaveChanges(); + using (ContextFactory.GetForWrite()) + { + var newValue = setting.Value; + Refresh(ref setting); + setting.Value = newValue; + } SettingChanged?.Invoke(); } diff --git a/osu.Game/Database/DatabaseBackedStore.cs b/osu.Game/Database/DatabaseBackedStore.cs index ec9967e097..da66167b14 100644 --- a/osu.Game/Database/DatabaseBackedStore.cs +++ b/osu.Game/Database/DatabaseBackedStore.cs @@ -1,10 +1,8 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE -using System; using System.Collections.Generic; using System.Linq; -using System.Threading; using Microsoft.EntityFrameworkCore; using osu.Framework.Platform; @@ -17,9 +15,7 @@ namespace osu.Game.Database /// /// Create a new instance (separate from the shared context via for performing isolated operations. /// - protected readonly Func CreateContext; - - private readonly ThreadLocal queryContext; + protected readonly DatabaseContextFactory ContextFactory; /// /// Refresh an instance potentially from a different thread with a local context-tracked instance. @@ -29,33 +25,27 @@ namespace osu.Game.Database /// A valid EF-stored type. protected virtual void Refresh(ref T obj, IEnumerable lookupSource = null) where T : class, IHasPrimaryKey { - var context = GetContext(); - - if (context.Entry(obj).State != EntityState.Detached) return; - - var id = obj.ID; - var foundObject = lookupSource?.SingleOrDefault(t => t.ID == id) ?? context.Find(id); - if (foundObject != null) + using (var usage = ContextFactory.GetForWrite()) { - obj = foundObject; - context.Entry(obj).Reload(); + var context = usage.Context; + + if (context.Entry(obj).State != EntityState.Detached) return; + + var id = obj.ID; + var foundObject = lookupSource?.SingleOrDefault(t => t.ID == id) ?? context.Find(id); + if (foundObject != null) + { + obj = foundObject; + context.Entry(obj).Reload(); + } + else + context.Add(obj); } - else - context.Add(obj); } - /// - /// Retrieve a shared context for performing lookups (or write operations on the update thread, for now). - /// - protected OsuDbContext GetContext() => queryContext.Value; - - protected DatabaseBackedStore(Func createContext, Storage storage = null) + protected DatabaseBackedStore(DatabaseContextFactory contextFactory, Storage storage = null) { - CreateContext = createContext; - - // todo: while this seems to work quite well, we need to consider that contexts could enter a state where they are never cleaned up. - queryContext = new ThreadLocal(CreateContext); - + ContextFactory = contextFactory; Storage = storage; } diff --git a/osu.Game/Database/DatabaseContextFactory.cs b/osu.Game/Database/DatabaseContextFactory.cs index b1917d92c4..c092ed377f 100644 --- a/osu.Game/Database/DatabaseContextFactory.cs +++ b/osu.Game/Database/DatabaseContextFactory.cs @@ -1,6 +1,7 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using System.Threading; using osu.Framework.Platform; namespace osu.Game.Database @@ -11,17 +12,70 @@ namespace osu.Game.Database private const string database_name = @"client"; + private ThreadLocal threadContexts; + + private readonly object writeLock = new object(); + + private OsuDbContext writeContext; + + private volatile int currentWriteUsages; + public DatabaseContextFactory(GameHost host) { this.host = host; + recycleThreadContexts(); } - public OsuDbContext GetContext() => new OsuDbContext(host.Storage.GetDatabaseConnectionString(database_name)); + /// + /// Get a context for read-only usage. + /// + public OsuDbContext Get() => threadContexts.Value; + + /// + /// Request a context for write usage. Can be consumed in a nested fashion (and will return the same underlying context). + /// This method may block if a write is already active on a different thread. + /// + /// A usage containing a usable context. + public DatabaseWriteUsage GetForWrite() + { + lock (writeLock) + { + var usage = new DatabaseWriteUsage(writeContext ?? (writeContext = threadContexts.Value), usageCompleted); + Interlocked.Increment(ref currentWriteUsages); + return usage; + } + } + + private void usageCompleted(DatabaseWriteUsage usage) + { + int usages = Interlocked.Decrement(ref currentWriteUsages); + if (usages == 0) + { + writeContext.Dispose(); + writeContext = null; + + // once all writes are complete, we want to refresh thread-specific contexts to make sure they don't have stale local caches. + recycleThreadContexts(); + } + } + + private void recycleThreadContexts() => threadContexts = new ThreadLocal(CreateContext); + + protected virtual OsuDbContext CreateContext() + { + var ctx = new OsuDbContext(host.Storage.GetDatabaseConnectionString(database_name)); + ctx.Database.AutoTransactionsEnabled = false; + + return ctx; + } public void ResetDatabase() { - // todo: we probably want to make sure there are no active contexts before performing this operation. - host.Storage.DeleteDatabase(database_name); + lock (writeLock) + { + recycleThreadContexts(); + host.Storage.DeleteDatabase(database_name); + } } } } diff --git a/osu.Game/Database/DatabaseWriteUsage.cs b/osu.Game/Database/DatabaseWriteUsage.cs new file mode 100644 index 0000000000..0dc5a4cfe9 --- /dev/null +++ b/osu.Game/Database/DatabaseWriteUsage.cs @@ -0,0 +1,28 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using System; +using Microsoft.EntityFrameworkCore.Storage; + +namespace osu.Game.Database +{ + public class DatabaseWriteUsage : IDisposable + { + public readonly OsuDbContext Context; + private readonly IDbContextTransaction transaction; + private readonly Action usageCompleted; + + public DatabaseWriteUsage(OsuDbContext context, Action onCompleted) + { + Context = context; + transaction = Context.BeginTransaction(); + usageCompleted = onCompleted; + } + + public void Dispose() + { + Context.SaveChanges(transaction); + usageCompleted?.Invoke(this); + } + } +} diff --git a/osu.Game/Database/SingletonContextFactory.cs b/osu.Game/Database/SingletonContextFactory.cs new file mode 100644 index 0000000000..88a43dc836 --- /dev/null +++ b/osu.Game/Database/SingletonContextFactory.cs @@ -0,0 +1,21 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +namespace osu.Game.Database +{ + public class SingletonContextFactory : DatabaseContextFactory + { + private readonly OsuDbContext context; + + public SingletonContextFactory(OsuDbContext context) + : base(null) + { + this.context = context; + } + + protected override OsuDbContext CreateContext() + { + return context; + } + } +} diff --git a/osu.Game/IO/FileStore.cs b/osu.Game/IO/FileStore.cs index 31c608a5f4..1bfe4db81a 100644 --- a/osu.Game/IO/FileStore.cs +++ b/osu.Game/IO/FileStore.cs @@ -21,86 +21,91 @@ namespace osu.Game.IO public new Storage Storage => base.Storage; - public FileStore(Func createContext, Storage storage) : base(createContext, storage.GetStorageForDirectory(@"files")) + public FileStore(DatabaseContextFactory contextFactory, Storage storage) : base(contextFactory, storage.GetStorageForDirectory(@"files")) { Store = new StorageBackedResourceStore(Storage); } public FileInfo Add(Stream data, bool reference = true) { - var context = GetContext(); - - string hash = data.ComputeSHA2Hash(); - - var existing = context.FileInfo.FirstOrDefault(f => f.Hash == hash); - - var info = existing ?? new FileInfo { Hash = hash }; - - string path = info.StoragePath; - - // we may be re-adding a file to fix missing store entries. - if (!Storage.Exists(path)) + using (var usage = ContextFactory.GetForWrite()) { - data.Seek(0, SeekOrigin.Begin); + var context = usage.Context; - using (var output = Storage.GetStream(path, FileAccess.Write)) - data.CopyTo(output); + string hash = data.ComputeSHA2Hash(); - data.Seek(0, SeekOrigin.Begin); + var existing = context.FileInfo.FirstOrDefault(f => f.Hash == hash); + + var info = existing ?? new FileInfo { Hash = hash }; + + string path = info.StoragePath; + + // we may be re-adding a file to fix missing store entries. + if (!Storage.Exists(path)) + { + data.Seek(0, SeekOrigin.Begin); + + using (var output = Storage.GetStream(path, FileAccess.Write)) + data.CopyTo(output); + + data.Seek(0, SeekOrigin.Begin); + } + + if (reference || existing == null) + Reference(info); + + return info; } - - if (reference || existing == null) - Reference(info); - - return info; } - public void Reference(params FileInfo[] files) => reference(GetContext(), files); - - private void reference(OsuDbContext context, FileInfo[] files) + public void Reference(params FileInfo[] files) { - foreach (var f in files.GroupBy(f => f.ID)) + using (var usage = ContextFactory.GetForWrite()) { - var refetch = context.Find(f.First().ID) ?? f.First(); - refetch.ReferenceCount += f.Count(); - context.FileInfo.Update(refetch); - } + var context = usage.Context; - context.SaveChanges(); + foreach (var f in files.GroupBy(f => f.ID)) + { + var refetch = context.Find(f.First().ID) ?? f.First(); + refetch.ReferenceCount += f.Count(); + context.FileInfo.Update(refetch); + } + } } - public void Dereference(params FileInfo[] files) => dereference(GetContext(), files); - - private void dereference(OsuDbContext context, FileInfo[] files) + public void Dereference(params FileInfo[] files) { - foreach (var f in files.GroupBy(f => f.ID)) + using (var usage = ContextFactory.GetForWrite()) { - var refetch = context.FileInfo.Find(f.Key); - refetch.ReferenceCount -= f.Count(); - context.FileInfo.Update(refetch); + var context = usage.Context; + foreach (var f in files.GroupBy(f => f.ID)) + { + var refetch = context.FileInfo.Find(f.Key); + refetch.ReferenceCount -= f.Count(); + context.FileInfo.Update(refetch); + } } - - context.SaveChanges(); } public override void Cleanup() { - var context = GetContext(); - - foreach (var f in context.FileInfo.Where(f => f.ReferenceCount < 1)) + using (var usage = ContextFactory.GetForWrite()) { - try + var context = usage.Context; + + foreach (var f in context.FileInfo.Where(f => f.ReferenceCount < 1)) { - Storage.Delete(f.StoragePath); - context.FileInfo.Remove(f); - } - catch (Exception e) - { - Logger.Error(e, $@"Could not delete beatmap {f}"); + try + { + Storage.Delete(f.StoragePath); + context.FileInfo.Remove(f); + } + catch (Exception e) + { + Logger.Error(e, $@"Could not delete beatmap {f}"); + } } } - - context.SaveChanges(); } } } diff --git a/osu.Game/Input/KeyBindingStore.cs b/osu.Game/Input/KeyBindingStore.cs index 92159ab491..4aad684959 100644 --- a/osu.Game/Input/KeyBindingStore.cs +++ b/osu.Game/Input/KeyBindingStore.cs @@ -16,14 +16,17 @@ namespace osu.Game.Input { public event Action KeyBindingChanged; - public KeyBindingStore(Func createContext, RulesetStore rulesets, Storage storage = null) - : base(createContext, storage) + public KeyBindingStore(DatabaseContextFactory contextFactory, RulesetStore rulesets, Storage storage = null) + : base(contextFactory, storage) { - foreach (var info in rulesets.AvailableRulesets) + using (ContextFactory.GetForWrite()) { - var ruleset = info.CreateInstance(); - foreach (var variant in ruleset.AvailableVariants) - insertDefaults(ruleset.GetDefaultKeyBindings(variant), info.ID, variant); + foreach (var info in rulesets.AvailableRulesets) + { + var ruleset = info.CreateInstance(); + foreach (var variant in ruleset.AvailableVariants) + insertDefaults(ruleset.GetDefaultKeyBindings(variant), info.ID, variant); + } } } @@ -31,10 +34,10 @@ namespace osu.Game.Input private void insertDefaults(IEnumerable defaults, int? rulesetId = null, int? variant = null) { - var context = GetContext(); - - using (var transaction = context.BeginTransaction()) + using (var usage = ContextFactory.GetForWrite()) { + var context = usage.Context; + // compare counts in database vs defaults foreach (var group in defaults.GroupBy(k => k.Action)) { @@ -54,8 +57,6 @@ namespace osu.Game.Input Variant = variant }); } - - context.SaveChanges(transaction); } } @@ -66,19 +67,16 @@ namespace osu.Game.Input /// An optional variant. /// public List Query(int? rulesetId = null, int? variant = null) => - GetContext().DatabasedKeyBinding.Where(b => b.RulesetID == rulesetId && b.Variant == variant).ToList(); + ContextFactory.Get().DatabasedKeyBinding.Where(b => b.RulesetID == rulesetId && b.Variant == variant).ToList(); public void Update(KeyBinding keyBinding) { - var dbKeyBinding = (DatabasedKeyBinding)keyBinding; - - var context = GetContext(); - - Refresh(ref dbKeyBinding); - - dbKeyBinding.KeyCombination = keyBinding.KeyCombination; - - context.SaveChanges(); + using (ContextFactory.GetForWrite()) + { + var dbKeyBinding = (DatabasedKeyBinding)keyBinding; + Refresh(ref dbKeyBinding); + dbKeyBinding.KeyCombination = keyBinding.KeyCombination; + } KeyBindingChanged?.Invoke(); } diff --git a/osu.Game/OsuGameBase.cs b/osu.Game/OsuGameBase.cs index a7eac27056..505577416d 100644 --- a/osu.Game/OsuGameBase.cs +++ b/osu.Game/OsuGameBase.cs @@ -106,12 +106,12 @@ namespace osu.Game Token = LocalConfig.Get(OsuSetting.Token) }); - dependencies.Cache(RulesetStore = new RulesetStore(contextFactory.GetContext)); - dependencies.Cache(FileStore = new FileStore(contextFactory.GetContext, Host.Storage)); - dependencies.Cache(BeatmapManager = new BeatmapManager(Host.Storage, contextFactory.GetContext, RulesetStore, API, Host)); - dependencies.Cache(ScoreStore = new ScoreStore(Host.Storage, contextFactory.GetContext, Host, BeatmapManager, RulesetStore)); - dependencies.Cache(KeyBindingStore = new KeyBindingStore(contextFactory.GetContext, RulesetStore)); - dependencies.Cache(SettingsStore = new SettingsStore(contextFactory.GetContext)); + dependencies.Cache(RulesetStore = new RulesetStore(contextFactory)); + dependencies.Cache(FileStore = new FileStore(contextFactory, Host.Storage)); + dependencies.Cache(BeatmapManager = new BeatmapManager(Host.Storage, contextFactory, RulesetStore, API, Host)); + dependencies.Cache(ScoreStore = new ScoreStore(Host.Storage, contextFactory, Host, BeatmapManager, RulesetStore)); + dependencies.Cache(KeyBindingStore = new KeyBindingStore(contextFactory, RulesetStore)); + dependencies.Cache(SettingsStore = new SettingsStore(contextFactory)); dependencies.Cache(new OsuColour()); //this completely overrides the framework default. will need to change once we make a proper FontStore. @@ -179,8 +179,8 @@ namespace osu.Game { try { - using (var context = contextFactory.GetContext()) - context.Migrate(); + using (var db = contextFactory.GetForWrite()) + db.Context.Migrate(); } catch (MigrationFailedException e) { @@ -191,8 +191,8 @@ namespace osu.Game contextFactory.ResetDatabase(); Logger.Log("Database purged successfully.", LoggingTarget.Database, LogLevel.Important); - using (var context = contextFactory.GetContext()) - context.Migrate(); + using (var db = contextFactory.GetForWrite()) + db.Context.Migrate(); } } diff --git a/osu.Game/Rulesets/RulesetStore.cs b/osu.Game/Rulesets/RulesetStore.cs index 01e3b6848f..f66a126211 100644 --- a/osu.Game/Rulesets/RulesetStore.cs +++ b/osu.Game/Rulesets/RulesetStore.cs @@ -25,7 +25,7 @@ namespace osu.Game.Rulesets loadRulesetFromFile(file); } - public RulesetStore(Func factory) + public RulesetStore(DatabaseContextFactory factory) : base(factory) { AddMissingRulesets(); @@ -56,47 +56,50 @@ namespace osu.Game.Rulesets protected void AddMissingRulesets() { - var context = GetContext(); - - var instances = loaded_assemblies.Values.Select(r => (Ruleset)Activator.CreateInstance(r, (RulesetInfo)null)).ToList(); - - //add all legacy modes in correct order - foreach (var r in instances.Where(r => r.LegacyID >= 0).OrderBy(r => r.LegacyID)) + using (var usage = ContextFactory.GetForWrite()) { - if (context.RulesetInfo.SingleOrDefault(rsi => rsi.ID == r.RulesetInfo.ID) == null) - context.RulesetInfo.Add(r.RulesetInfo); - } + var context = usage.Context; - context.SaveChanges(); + var instances = loaded_assemblies.Values.Select(r => (Ruleset)Activator.CreateInstance(r, (RulesetInfo)null)).ToList(); - //add any other modes - foreach (var r in instances.Where(r => r.LegacyID < 0)) - if (context.RulesetInfo.FirstOrDefault(ri => ri.InstantiationInfo == r.RulesetInfo.InstantiationInfo) == null) - context.RulesetInfo.Add(r.RulesetInfo); - - context.SaveChanges(); - - //perform a consistency check - foreach (var r in context.RulesetInfo) - { - try + //add all legacy modes in correct order + foreach (var r in instances.Where(r => r.LegacyID >= 0).OrderBy(r => r.LegacyID)) { - var instance = r.CreateInstance(); - - r.Name = instance.Description; - r.ShortName = instance.ShortName; - - r.Available = true; + if (context.RulesetInfo.SingleOrDefault(rsi => rsi.ID == r.RulesetInfo.ID) == null) + context.RulesetInfo.Add(r.RulesetInfo); } - catch + + context.SaveChanges(); + + //add any other modes + foreach (var r in instances.Where(r => r.LegacyID < 0)) + if (context.RulesetInfo.FirstOrDefault(ri => ri.InstantiationInfo == r.RulesetInfo.InstantiationInfo) == null) + context.RulesetInfo.Add(r.RulesetInfo); + + context.SaveChanges(); + + //perform a consistency check + foreach (var r in context.RulesetInfo) { - r.Available = false; + try + { + var instance = r.CreateInstance(); + + r.Name = instance.Description; + r.ShortName = instance.ShortName; + + r.Available = true; + } + catch + { + r.Available = false; + } } + + context.SaveChanges(); + + AvailableRulesets = context.RulesetInfo.Where(r => r.Available).ToList(); } - - context.SaveChanges(); - - AvailableRulesets = context.RulesetInfo.Where(r => r.Available).ToList(); } private static void loadRulesetFromFile(string file) diff --git a/osu.Game/Rulesets/Scoring/ScoreStore.cs b/osu.Game/Rulesets/Scoring/ScoreStore.cs index d21ca79736..8bde2747a2 100644 --- a/osu.Game/Rulesets/Scoring/ScoreStore.cs +++ b/osu.Game/Rulesets/Scoring/ScoreStore.cs @@ -1,7 +1,6 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE -using System; using System.Collections.Generic; using System.IO; using osu.Framework.Platform; @@ -27,7 +26,7 @@ namespace osu.Game.Rulesets.Scoring // ReSharper disable once NotAccessedField.Local (we should keep a reference to this so it is not finalised) private ScoreIPCChannel ipc; - public ScoreStore(Storage storage, Func factory, IIpcHost importHost = null, BeatmapManager beatmaps = null, RulesetStore rulesets = null) : base(factory) + public ScoreStore(Storage storage, DatabaseContextFactory factory, IIpcHost importHost = null, BeatmapManager beatmaps = null, RulesetStore rulesets = null) : base(factory) { this.storage = storage; this.beatmaps = beatmaps; diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index c16767c02c..71f1629c19 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -275,7 +275,9 @@ + + From ee168f9a77962e25c8419d3a2fdccd55eb945807 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 12 Feb 2018 18:19:55 +0900 Subject: [PATCH 038/544] Split out drag selection box from post-capture box Cleans up a lot of code, removes handles for now. --- .../Visual/TestCaseEditorSelectionLayer.cs | 3 +- .../Edit/Layers/Selection/CaptureBox.cs | 76 ++++++++++++++++ .../Edit/Layers/Selection/SelectionDragger.cs | 87 +------------------ .../Edit/Layers/Selection/SelectionLayer.cs | 61 ++++++------- osu.Game/osu.Game.csproj | 1 + 5 files changed, 108 insertions(+), 120 deletions(-) create mode 100644 osu.Game/Rulesets/Edit/Layers/Selection/CaptureBox.cs diff --git a/osu.Game.Tests/Visual/TestCaseEditorSelectionLayer.cs b/osu.Game.Tests/Visual/TestCaseEditorSelectionLayer.cs index a7220718f5..9796d1715f 100644 --- a/osu.Game.Tests/Visual/TestCaseEditorSelectionLayer.cs +++ b/osu.Game.Tests/Visual/TestCaseEditorSelectionLayer.cs @@ -23,7 +23,8 @@ namespace osu.Game.Tests.Visual { typeof(HitObjectCapturer), typeof(SelectionDragger), - typeof(SelectionLayer) + typeof(SelectionLayer), + typeof(CaptureBox) }; [BackgroundDependencyLoader] diff --git a/osu.Game/Rulesets/Edit/Layers/Selection/CaptureBox.cs b/osu.Game/Rulesets/Edit/Layers/Selection/CaptureBox.cs new file mode 100644 index 0000000000..f49a294129 --- /dev/null +++ b/osu.Game/Rulesets/Edit/Layers/Selection/CaptureBox.cs @@ -0,0 +1,76 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using System.Collections.Generic; +using osu.Framework.Allocation; +using osu.Framework.Graphics; +using osu.Framework.Graphics.Containers; +using osu.Framework.Graphics.Shapes; +using osu.Game.Graphics; +using osu.Game.Rulesets.Objects.Drawables; +using OpenTK; + +namespace osu.Game.Rulesets.Edit.Layers.Selection +{ + /// + /// A box which encapsulates captured s. + /// + public class CaptureBox : VisibilityContainer + { + private readonly IDrawable captureArea; + private readonly IReadOnlyList capturedObjects; + + private readonly Container borderContainer; + + public CaptureBox(IDrawable captureArea, IReadOnlyList capturedObjects) + { + this.captureArea = captureArea; + this.capturedObjects = capturedObjects; + + Origin = Anchor.Centre; + + InternalChild = borderContainer = new Container + { + RelativeSizeAxes = Axes.Both, + Masking = true, + BorderThickness = 3, + Child = new Box + { + RelativeSizeAxes = Axes.Both, + AlwaysPresent = true, + Alpha = 0 + } + }; + + State = Visibility.Visible; + } + + [BackgroundDependencyLoader] + private void load(OsuColour colours) + { + borderContainer.BorderColour = colours.Yellow; + + // Move the rectangle to cover the hitobjects + var topLeft = new Vector2(float.MaxValue, float.MaxValue); + var bottomRight = new Vector2(float.MinValue, float.MinValue); + + foreach (var obj in capturedObjects) + { + topLeft = Vector2.ComponentMin(topLeft, captureArea.ToLocalSpace(obj.SelectionQuad.TopLeft)); + bottomRight = Vector2.ComponentMax(bottomRight, captureArea.ToLocalSpace(obj.SelectionQuad.BottomRight)); + } + + topLeft -= new Vector2(5); + bottomRight += new Vector2(5); + + Size = bottomRight - topLeft; + Position = topLeft + Size / 2f; + } + + protected override void PopIn() => this.ScaleTo(1.1f) + .Then() + .ScaleTo(1f, 300, Easing.OutQuint).FadeIn(300, Easing.OutQuint); + + protected override void PopOut() => this.FadeOut(300, Easing.OutQuint); + } +} diff --git a/osu.Game/Rulesets/Edit/Layers/Selection/SelectionDragger.cs b/osu.Game/Rulesets/Edit/Layers/Selection/SelectionDragger.cs index b08d208bbd..661d09d883 100644 --- a/osu.Game/Rulesets/Edit/Layers/Selection/SelectionDragger.cs +++ b/osu.Game/Rulesets/Edit/Layers/Selection/SelectionDragger.cs @@ -1,15 +1,10 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE -using System.Collections.Generic; -using osu.Framework.Allocation; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Primitives; using osu.Framework.Graphics.Shapes; -using osu.Game.Graphics; -using osu.Game.Rulesets.Objects.Drawables; -using OpenTK; using OpenTK.Graphics; namespace osu.Game.Rulesets.Edit.Layers.Selection @@ -19,13 +14,6 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection /// public class SelectionDragger : CompositeDrawable { - private readonly Container borderMask; - private readonly Drawable background; - private readonly HandleContainer handles; - - private Color4 captureFinishedColour; - private RectangleF dragRectangle; - /// /// Creates a new . /// @@ -37,42 +25,26 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection { RelativeSizeAxes = Axes.Both, Padding = new MarginPadding(-1), - Child = borderMask = new Container + Child = new Container { RelativeSizeAxes = Axes.Both, Masking = true, BorderColour = Color4.White, BorderThickness = 2, MaskingSmoothness = 1, - Child = background = new Box + Child = new Box { RelativeSizeAxes = Axes.Both, Alpha = 0.1f, AlwaysPresent = true }, } - }, - handles = new HandleContainer - { - RelativeSizeAxes = Axes.Both, - Alpha = 0, - GetDragRectangle = () => dragRectangle, - UpdateDragRectangle = SetDragRectangle, - FinishDrag = () => FinishCapture() } }; } - [BackgroundDependencyLoader] - private void load(OsuColour colours) - { - captureFinishedColour = colours.Yellow; - } - public void SetDragRectangle(RectangleF rectangle) { - dragRectangle = rectangle; - var topLeft = Parent.ToLocalSpace(rectangle.TopLeft); var bottomRight = Parent.ToLocalSpace(rectangle.BottomRight); @@ -80,59 +52,6 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection Size = bottomRight - topLeft; } - private readonly List capturedHitObjects = new List(); - - public bool HasCaptured => capturedHitObjects.Count > 0; - - public void AddCaptured(DrawableHitObject hitObject) => capturedHitObjects.Add(hitObject); - - public void ClearCaptured() => capturedHitObjects.Clear(); - - /// - /// Encloses hitobjects captured through in the drag selection box. - /// - public void FinishCapture(bool instant = false) - { - if (capturedHitObjects.Count == 0) - { - Hide(); - return; - } - - // Move the rectangle to cover the hitobjects - var topLeft = new Vector2(float.MaxValue, float.MaxValue); - var bottomRight = new Vector2(float.MinValue, float.MinValue); - - foreach (var obj in capturedHitObjects) - { - topLeft = Vector2.ComponentMin(topLeft, Parent.ToLocalSpace(obj.SelectionQuad.TopLeft)); - bottomRight = Vector2.ComponentMax(bottomRight, Parent.ToLocalSpace(obj.SelectionQuad.BottomRight)); - } - - topLeft -= new Vector2(5); - bottomRight += new Vector2(5); - - this.MoveTo(topLeft, instant ? 0 : 100, Easing.OutQuint) - .ResizeTo(bottomRight - topLeft, instant ? 0 : 100, Easing.OutQuint); - - dragRectangle = RectangleF.FromLTRB(topLeft.X, topLeft.Y, bottomRight.X, bottomRight.Y); - - borderMask.BorderThickness = 3; - borderMask.FadeColour(captureFinishedColour, 200); - - // Transform into markers to let the user modify the drag selection further. - background.Delay(50).FadeOut(200); - handles.FadeIn(200); - } - - private bool isActive = true; - public override bool HandleKeyboardInput => isActive; - public override bool HandleMouseInput => isActive; - - public override void Hide() - { - isActive = false; - this.FadeOut(400, Easing.OutQuint); - } + public override void Hide() => this.FadeOut(400, Easing.OutQuint).Expire(); } } diff --git a/osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs b/osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs index 19891b0783..a90d01646e 100644 --- a/osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs +++ b/osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs @@ -1,6 +1,8 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using System.Collections.Generic; +using System.Linq; using osu.Framework.Allocation; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; @@ -23,25 +25,28 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection } private SelectionDragger selectionDragger; + private CaptureBox captureBox; private HitObjectCapturer capturer; + private readonly List capturedHitObjects = new List(); + [BackgroundDependencyLoader] private void load() { capturer = new HitObjectCapturer(playfield.HitObjects.Objects); - capturer.HitObjectCaptured += hitObjectCaptured; + capturer.HitObjectCaptured += h => capturedHitObjects.Add(h); } - private void hitObjectCaptured(DrawableHitObject hitObject) => selectionDragger.AddCaptured(hitObject); + protected override bool OnMouseDown(InputState state, MouseDownEventArgs args) + { + capturedHitObjects.Clear(); + captureBox?.Hide(); + return true; + } protected override bool OnDragStart(InputState state) { - // Hide the previous drag box - we won't be working with it any longer - selectionDragger?.Hide(); - selectionDragger?.Expire(); - AddInternal(selectionDragger = new SelectionDragger()); - return true; } @@ -60,43 +65,29 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection protected override bool OnDragEnd(InputState state) { - // Due to https://github.com/ppy/osu-framework/issues/1382, we may get here after OnClick has set the selectionBox to null - // In the case that the user dragged within the click distance out of an object - if (selectionDragger == null) - return true; - - selectionDragger.FinishCapture(); - - // If there are no hitobjects, remove the selection box - if (!selectionDragger.HasCaptured) - { - selectionDragger.Expire(); - selectionDragger = null; - } + selectionDragger.Hide(); + finishCapture(); return true; } protected override bool OnClick(InputState state) { - // We could be coming here without a previous selection box - if (selectionDragger == null) - AddInternal(selectionDragger = new SelectionDragger { Position = ToLocalSpace(state.Mouse.NativeState.Position), Alpha = 0 }); - - // If we're coming here with a previous selection, unselect those hitobjects - selectionDragger.ClearCaptured(); if (capturer.CapturePoint(state.Mouse.NativeState.Position)) - { - selectionDragger.Alpha = 1; - selectionDragger.FinishCapture(true); - } - else - { - selectionDragger.Hide(); - selectionDragger = null; - } + finishCapture(); return true; } + + private void finishCapture() + { + if (capturedHitObjects.Count == 0) + return; + + // Due to https://github.com/ppy/osu-framework/issues/1382, we may get here through both + // OnDragEnd and OnClick methods within a single frame, OnMouseDown doesn't help us here + captureBox?.Hide(); + AddInternal(captureBox = new CaptureBox(this, capturedHitObjects.ToList())); + } } } diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index 77e594c37c..ce0813f393 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -332,6 +332,7 @@ + From 20c0dee17df2bb5bfd74bfa60a7226e7013b53db Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 12 Feb 2018 18:22:52 +0900 Subject: [PATCH 039/544] Remove SelectionInfo --- .../Edit/Layers/Selection/SelectionInfo.cs | 22 ------------------- osu.Game/osu.Game.csproj | 1 - 2 files changed, 23 deletions(-) delete mode 100644 osu.Game/Rulesets/Edit/Layers/Selection/SelectionInfo.cs diff --git a/osu.Game/Rulesets/Edit/Layers/Selection/SelectionInfo.cs b/osu.Game/Rulesets/Edit/Layers/Selection/SelectionInfo.cs deleted file mode 100644 index beedb415c2..0000000000 --- a/osu.Game/Rulesets/Edit/Layers/Selection/SelectionInfo.cs +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright (c) 2007-2018 ppy Pty Ltd . -// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE - -using System.Collections.Generic; -using osu.Framework.Graphics.Primitives; -using osu.Game.Rulesets.Objects.Drawables; - -namespace osu.Game.Rulesets.Edit.Layers.Selection -{ - public class SelectionInfo - { - /// - /// The objects that are captured by the selection. - /// - public IEnumerable Objects; - - /// - /// The screen space quad of the selection box surrounding . - /// - public Quad SelectionQuad; - } -} diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index ce0813f393..7e884fdc24 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -357,7 +357,6 @@ - From e10bb2db0591c2ef51cf6418bbdc2ba007b0ac28 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 12 Feb 2018 18:35:01 +0900 Subject: [PATCH 040/544] Unify SelectionLayer and HitObjectCapturer, rename SelectionBox --- .../Visual/TestCaseEditorSelectionLayer.cs | 3 +- .../Layers/Selection/HitObjectCapturer.cs | 56 ------------------- .../{SelectionDragger.cs => SelectionBox.cs} | 6 +- .../Edit/Layers/Selection/SelectionLayer.cs | 47 ++++++++++------ osu.Game/osu.Game.csproj | 3 +- 5 files changed, 36 insertions(+), 79 deletions(-) delete mode 100644 osu.Game/Rulesets/Edit/Layers/Selection/HitObjectCapturer.cs rename osu.Game/Rulesets/Edit/Layers/Selection/{SelectionDragger.cs => SelectionBox.cs} (89%) diff --git a/osu.Game.Tests/Visual/TestCaseEditorSelectionLayer.cs b/osu.Game.Tests/Visual/TestCaseEditorSelectionLayer.cs index 9796d1715f..50a39e6c33 100644 --- a/osu.Game.Tests/Visual/TestCaseEditorSelectionLayer.cs +++ b/osu.Game.Tests/Visual/TestCaseEditorSelectionLayer.cs @@ -21,8 +21,7 @@ namespace osu.Game.Tests.Visual { public override IReadOnlyList RequiredTypes => new[] { - typeof(HitObjectCapturer), - typeof(SelectionDragger), + typeof(SelectionBox), typeof(SelectionLayer), typeof(CaptureBox) }; diff --git a/osu.Game/Rulesets/Edit/Layers/Selection/HitObjectCapturer.cs b/osu.Game/Rulesets/Edit/Layers/Selection/HitObjectCapturer.cs deleted file mode 100644 index e141f06816..0000000000 --- a/osu.Game/Rulesets/Edit/Layers/Selection/HitObjectCapturer.cs +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright (c) 2007-2018 ppy Pty Ltd . -// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE - -using System; -using System.Collections.Generic; -using System.Linq; -using osu.Framework.Graphics.Primitives; -using osu.Game.Rulesets.Objects.Drawables; -using OpenTK; - -namespace osu.Game.Rulesets.Edit.Layers.Selection -{ - public class HitObjectCapturer - { - public event Action HitObjectCaptured; - - private readonly IEnumerable capturableHitObjects; - - public HitObjectCapturer(IEnumerable capturableHitObjects) - { - this.capturableHitObjects = capturableHitObjects; - } - - /// - /// Captures all hitobjects that are present within the area of a . - /// - /// The capture . - /// If any s were captured. - public bool CaptureQuad(Quad screenSpaceQuad) - { - bool anyCaptured = false; - foreach (var obj in capturableHitObjects.Where(h => h.IsAlive && h.IsPresent && screenSpaceQuad.Contains(h.SelectionPoint))) - { - HitObjectCaptured?.Invoke(obj); - anyCaptured = true; - } - - return anyCaptured; - } - - /// - /// Captures the top-most hitobject that is present under a specific point. - /// - /// The to capture at. - /// Whether a was captured. - public bool CapturePoint(Vector2 screenSpacePoint) - { - var captured = capturableHitObjects.Reverse().Where(h => h.IsAlive && h.IsPresent).FirstOrDefault(h => h.ReceiveMouseInputAt(screenSpacePoint)); - if (captured == null) - return false; - - HitObjectCaptured?.Invoke(captured); - return true; - } - } -} diff --git a/osu.Game/Rulesets/Edit/Layers/Selection/SelectionDragger.cs b/osu.Game/Rulesets/Edit/Layers/Selection/SelectionBox.cs similarity index 89% rename from osu.Game/Rulesets/Edit/Layers/Selection/SelectionDragger.cs rename to osu.Game/Rulesets/Edit/Layers/Selection/SelectionBox.cs index 661d09d883..87c6833f01 100644 --- a/osu.Game/Rulesets/Edit/Layers/Selection/SelectionDragger.cs +++ b/osu.Game/Rulesets/Edit/Layers/Selection/SelectionBox.cs @@ -12,12 +12,12 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection /// /// A box that represents a drag selection. /// - public class SelectionDragger : CompositeDrawable + public class SelectionBox : CompositeDrawable { /// - /// Creates a new . + /// Creates a new . /// - public SelectionDragger() + public SelectionBox() { InternalChildren = new Drawable[] { diff --git a/osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs b/osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs index a90d01646e..e7a46569f1 100644 --- a/osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs +++ b/osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs @@ -3,13 +3,13 @@ using System.Collections.Generic; using System.Linq; -using osu.Framework.Allocation; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Primitives; using osu.Framework.Input; using osu.Game.Rulesets.Objects.Drawables; using osu.Game.Rulesets.UI; +using OpenTK; namespace osu.Game.Rulesets.Edit.Layers.Selection { @@ -24,19 +24,11 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection RelativeSizeAxes = Axes.Both; } - private SelectionDragger selectionDragger; + private SelectionBox selectionBox; private CaptureBox captureBox; - private HitObjectCapturer capturer; private readonly List capturedHitObjects = new List(); - [BackgroundDependencyLoader] - private void load() - { - capturer = new HitObjectCapturer(playfield.HitObjects.Objects); - capturer.HitObjectCaptured += h => capturedHitObjects.Add(h); - } - protected override bool OnMouseDown(InputState state, MouseDownEventArgs args) { capturedHitObjects.Clear(); @@ -46,7 +38,7 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection protected override bool OnDragStart(InputState state) { - AddInternal(selectionDragger = new SelectionDragger()); + AddInternal(selectionBox = new SelectionBox()); return true; } @@ -57,15 +49,15 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection var screenSpaceDragQuad = new Quad(dragStartPosition.X, dragStartPosition.Y, dragPosition.X - dragStartPosition.X, dragPosition.Y - dragStartPosition.Y); - selectionDragger.SetDragRectangle(screenSpaceDragQuad.AABBFloat); - capturer.CaptureQuad(screenSpaceDragQuad); + selectionBox.SetDragRectangle(screenSpaceDragQuad.AABBFloat); + captureQuad(screenSpaceDragQuad); return true; } protected override bool OnDragEnd(InputState state) { - selectionDragger.Hide(); + selectionBox.Hide(); finishCapture(); return true; @@ -73,12 +65,35 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection protected override bool OnClick(InputState state) { - if (capturer.CapturePoint(state.Mouse.NativeState.Position)) - finishCapture(); + capturePoint(state.Mouse.NativeState.Position); + finishCapture(); return true; } + /// + /// Captures all hitobjects that are present within the area of a . + /// + /// The capture . + private void captureQuad(Quad screenSpaceQuad) + { + foreach (var obj in playfield.HitObjects.Objects.Where(h => h.IsAlive && h.IsPresent && screenSpaceQuad.Contains(h.SelectionPoint))) + capturedHitObjects.Add(obj); + } + + /// + /// Captures the top-most hitobject that is present under a specific point. + /// + /// The to capture at. + private void capturePoint(Vector2 screenSpacePoint) + { + var captured = playfield.HitObjects.Objects.Reverse().Where(h => h.IsAlive && h.IsPresent).FirstOrDefault(h => h.ReceiveMouseInputAt(screenSpacePoint)); + if (captured == null) + return; + + capturedHitObjects.Add(captured); + } + private void finishCapture() { if (capturedHitObjects.Count == 0) diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index 7e884fdc24..69b5c45890 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -333,7 +333,6 @@ - @@ -354,9 +353,9 @@ - + From c3212d36efb74f5721419621e8480eb4952674c1 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 12 Feb 2018 18:36:16 +0900 Subject: [PATCH 041/544] Remove handles for now (will be re-implemented) --- .../Rulesets/Edit/Layers/Selection/Handle.cs | 105 ------------------ .../Edit/Layers/Selection/HandleContainer.cs | 92 --------------- .../Edit/Layers/Selection/OriginHandle.cs | 50 --------- osu.Game/osu.Game.csproj | 3 - 4 files changed, 250 deletions(-) delete mode 100644 osu.Game/Rulesets/Edit/Layers/Selection/Handle.cs delete mode 100644 osu.Game/Rulesets/Edit/Layers/Selection/HandleContainer.cs delete mode 100644 osu.Game/Rulesets/Edit/Layers/Selection/OriginHandle.cs diff --git a/osu.Game/Rulesets/Edit/Layers/Selection/Handle.cs b/osu.Game/Rulesets/Edit/Layers/Selection/Handle.cs deleted file mode 100644 index e85096110b..0000000000 --- a/osu.Game/Rulesets/Edit/Layers/Selection/Handle.cs +++ /dev/null @@ -1,105 +0,0 @@ -// Copyright (c) 2007-2018 ppy Pty Ltd . -// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE - -using System; -using osu.Framework.Allocation; -using osu.Framework.Graphics; -using osu.Framework.Graphics.Containers; -using osu.Framework.Graphics.Primitives; -using osu.Framework.Graphics.Shapes; -using osu.Framework.Input; -using osu.Game.Graphics; -using OpenTK; -using OpenTK.Graphics; - -namespace osu.Game.Rulesets.Edit.Layers.Selection -{ - /// - /// Represents a marker visible on the border of a which exposes - /// properties that are used to resize a . - /// - public class Handle : CompositeDrawable - { - private const float marker_size = 10; - - /// - /// Invoked when this requires the current drag rectangle. - /// - public Func GetDragRectangle; - - /// - /// Invoked when this wants to update the drag rectangle. - /// - public Action UpdateDragRectangle; - - /// - /// Invoked when this has finished updates to the drag rectangle. - /// - public Action FinishDrag; - - private Color4 normalColour; - private Color4 hoverColour; - - public Handle() - { - Size = new Vector2(marker_size); - - InternalChild = new CircularContainer - { - RelativeSizeAxes = Axes.Both, - Masking = true, - Child = new Box { RelativeSizeAxes = Axes.Both } - }; - } - - [BackgroundDependencyLoader] - private void load(OsuColour colours) - { - Colour = normalColour = colours.Yellow; - hoverColour = colours.YellowDarker; - } - - protected override bool OnDragStart(InputState state) => true; - - protected override bool OnDrag(InputState state) - { - var currentRectangle = GetDragRectangle(); - - float left = currentRectangle.Left; - float right = currentRectangle.Right; - float top = currentRectangle.Top; - float bottom = currentRectangle.Bottom; - - // Apply modifications to the capture rectangle - if ((Anchor & Anchor.y0) > 0) - top += state.Mouse.Delta.Y; - else if ((Anchor & Anchor.y2) > 0) - bottom += state.Mouse.Delta.Y; - - if ((Anchor & Anchor.x0) > 0) - left += state.Mouse.Delta.X; - else if ((Anchor & Anchor.x2) > 0) - right += state.Mouse.Delta.X; - - UpdateDragRectangle(RectangleF.FromLTRB(left, top, right, bottom)); - return true; - } - - protected override bool OnDragEnd(InputState state) - { - FinishDrag(); - return true; - } - - protected override bool OnHover(InputState state) - { - this.FadeColour(hoverColour, 100); - return true; - } - - protected override void OnHoverLost(InputState state) - { - this.FadeColour(normalColour, 100); - } - } -} diff --git a/osu.Game/Rulesets/Edit/Layers/Selection/HandleContainer.cs b/osu.Game/Rulesets/Edit/Layers/Selection/HandleContainer.cs deleted file mode 100644 index 359cdd009a..0000000000 --- a/osu.Game/Rulesets/Edit/Layers/Selection/HandleContainer.cs +++ /dev/null @@ -1,92 +0,0 @@ -// Copyright (c) 2007-2018 ppy Pty Ltd . -// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE - -using System; -using System.Linq; -using osu.Framework.Extensions.IEnumerableExtensions; -using osu.Framework.Graphics; -using osu.Framework.Graphics.Containers; -using osu.Framework.Graphics.Primitives; - -namespace osu.Game.Rulesets.Edit.Layers.Selection -{ - /// - /// A that has s around its border. - /// - public class HandleContainer : CompositeDrawable - { - /// - /// Invoked when a requires the current drag rectangle. - /// - public Func GetDragRectangle; - - /// - /// Invoked when a wants to update the drag rectangle. - /// - public Action UpdateDragRectangle; - - /// - /// Invoked when a has finished updates to the drag rectangle. - /// - public Action FinishDrag; - - public HandleContainer() - { - InternalChildren = new Drawable[] - { - new Handle - { - Anchor = Anchor.TopLeft, - Origin = Anchor.Centre - }, - new Handle - { - Anchor = Anchor.TopCentre, - Origin = Anchor.Centre - }, - new Handle - { - Anchor = Anchor.TopRight, - Origin = Anchor.Centre - }, - new Handle - { - Anchor = Anchor.CentreLeft, - Origin = Anchor.Centre - }, - new Handle - { - Anchor = Anchor.BottomLeft, - Origin = Anchor.Centre - }, - new Handle - { - Anchor = Anchor.CentreRight, - Origin = Anchor.Centre - }, - new Handle - { - Anchor = Anchor.BottomRight, - Origin = Anchor.Centre - }, - new Handle - { - Anchor = Anchor.BottomCentre, - Origin = Anchor.Centre - }, - new OriginHandle - { - Anchor = Anchor.Centre, - Origin = Anchor.Centre - } - }; - - InternalChildren.OfType().ForEach(m => - { - m.GetDragRectangle = () => GetDragRectangle(); - m.UpdateDragRectangle = r => UpdateDragRectangle(r); - m.FinishDrag = () => FinishDrag(); - }); - } - } -} diff --git a/osu.Game/Rulesets/Edit/Layers/Selection/OriginHandle.cs b/osu.Game/Rulesets/Edit/Layers/Selection/OriginHandle.cs deleted file mode 100644 index 6f8c946165..0000000000 --- a/osu.Game/Rulesets/Edit/Layers/Selection/OriginHandle.cs +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright (c) 2007-2018 ppy Pty Ltd . -// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE - -using osu.Framework.Allocation; -using osu.Framework.Graphics; -using osu.Framework.Graphics.Containers; -using osu.Framework.Graphics.Shapes; -using osu.Game.Graphics; -using OpenTK; - -namespace osu.Game.Rulesets.Edit.Layers.Selection -{ - /// - /// Represents the origin of a . - /// - public class OriginHandle : CompositeDrawable - { - private const float marker_size = 10; - private const float line_width = 2; - - public OriginHandle() - { - Size = new Vector2(marker_size); - - InternalChildren = new[] - { - new Box - { - Anchor = Anchor.Centre, - Origin = Anchor.Centre, - RelativeSizeAxes = Axes.X, - Height = line_width - }, - new Box - { - Anchor = Anchor.Centre, - Origin = Anchor.Centre, - RelativeSizeAxes = Axes.Y, - Width = line_width - }, - }; - } - - [BackgroundDependencyLoader] - private void load(OsuColour colours) - { - Colour = colours.Yellow; - } - } -} diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index 69b5c45890..3b62c849cb 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -352,9 +352,6 @@ - - - From bfedd1cee03a067d1e5f39ee821b9b7a5a2f688a Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 12 Feb 2018 19:00:44 +0900 Subject: [PATCH 042/544] Remove nested container --- .../Edit/Layers/Selection/CaptureBox.cs | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/osu.Game/Rulesets/Edit/Layers/Selection/CaptureBox.cs b/osu.Game/Rulesets/Edit/Layers/Selection/CaptureBox.cs index f49a294129..423927481c 100644 --- a/osu.Game/Rulesets/Edit/Layers/Selection/CaptureBox.cs +++ b/osu.Game/Rulesets/Edit/Layers/Selection/CaptureBox.cs @@ -20,26 +20,20 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection private readonly IDrawable captureArea; private readonly IReadOnlyList capturedObjects; - private readonly Container borderContainer; - public CaptureBox(IDrawable captureArea, IReadOnlyList capturedObjects) { this.captureArea = captureArea; this.capturedObjects = capturedObjects; Origin = Anchor.Centre; + Masking = true; + BorderThickness = 3; - InternalChild = borderContainer = new Container + InternalChild = new Box { RelativeSizeAxes = Axes.Both, - Masking = true, - BorderThickness = 3, - Child = new Box - { - RelativeSizeAxes = Axes.Both, - AlwaysPresent = true, - Alpha = 0 - } + AlwaysPresent = true, + Alpha = 0 }; State = Visibility.Visible; @@ -48,7 +42,7 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection [BackgroundDependencyLoader] private void load(OsuColour colours) { - borderContainer.BorderColour = colours.Yellow; + BorderColour = colours.Yellow; // Move the rectangle to cover the hitobjects var topLeft = new Vector2(float.MaxValue, float.MaxValue); From 8b37fde15b51668f5bbe4e4c3b2d6cbaae2fb459 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Mon, 12 Feb 2018 19:57:21 +0900 Subject: [PATCH 043/544] Only write when writes occur Also add finaliser logic for safety. Also better threading. Also more cleanup. --- osu.Game/Beatmaps/BeatmapManager.cs | 36 +++++++------------ osu.Game/Beatmaps/BeatmapStore.cs | 17 ++++++--- osu.Game/Database/DatabaseBackedStore.cs | 3 -- osu.Game/Database/DatabaseContextFactory.cs | 39 +++++++++++++++------ osu.Game/Database/DatabaseWriteUsage.cs | 22 ++++++++++-- osu.Game/Database/OsuDbContext.cs | 2 +- osu.Game/IO/FileStore.cs | 9 +++-- osu.Game/Input/KeyBindingStore.cs | 8 +++-- 8 files changed, 86 insertions(+), 50 deletions(-) diff --git a/osu.Game/Beatmaps/BeatmapManager.cs b/osu.Game/Beatmaps/BeatmapManager.cs index 4ec153c78f..41ea293938 100644 --- a/osu.Game/Beatmaps/BeatmapManager.cs +++ b/osu.Game/Beatmaps/BeatmapManager.cs @@ -172,7 +172,7 @@ namespace osu.Game.Beatmaps /// The beatmap to be imported. public BeatmapSetInfo Import(ArchiveReader archive) { - using ( contextFactory.GetForWrite()) // used to share a context for full import. keep in mind this will block all writes. + using (contextFactory.GetForWrite()) // used to share a context for full import. keep in mind this will block all writes. { // create a new set info (don't yet add to database) var beatmapSet = createBeatmapSetInfo(archive); @@ -181,7 +181,7 @@ namespace osu.Game.Beatmaps var existingHashMatch = beatmaps.BeatmapSets.FirstOrDefault(b => b.Hash == beatmapSet.Hash); if (existingHashMatch != null) { - undelete(existingHashMatch); + Undelete(existingHashMatch); return existingHashMatch; } @@ -315,9 +315,9 @@ namespace osu.Game.Beatmaps /// The beatmap set to delete. public void Delete(BeatmapSetInfo beatmapSet) { - using (var db = contextFactory.GetForWrite()) + using (var usage = contextFactory.GetForWrite()) { - var context = db.Context; + var context = usage.Context; context.ChangeTracker.AutoDetectChangesEnabled = false; @@ -378,11 +378,16 @@ namespace osu.Game.Beatmaps if (beatmapSet.Protected) return; - using (var db = contextFactory.GetForWrite()) + using (var usage = contextFactory.GetForWrite()) { - db.Context.ChangeTracker.AutoDetectChangesEnabled = false; - undelete(beatmapSet); - db.Context.ChangeTracker.AutoDetectChangesEnabled = true; + usage.Context.ChangeTracker.AutoDetectChangesEnabled = false; + + if (!beatmaps.Undelete(beatmapSet)) return; + + if (!beatmapSet.Protected) + files.Reference(beatmapSet.Files.Select(f => f.FileInfo).ToArray()); + + usage.Context.ChangeTracker.AutoDetectChangesEnabled = true; } } @@ -398,21 +403,6 @@ namespace osu.Game.Beatmaps /// The beatmap difficulty to restore. public void Restore(BeatmapInfo beatmap) => beatmaps.Restore(beatmap); - /// - /// Returns a to a usable state if it has previously been deleted but not yet purged. - /// Is a no-op for already usable beatmaps. - /// - /// The store to restore beatmaps from. - /// The store to restore beatmap files from. - /// The beatmap to restore. - private void undelete(BeatmapSetInfo beatmapSet) - { - if (!beatmaps.Undelete(beatmapSet)) return; - - if (!beatmapSet.Protected) - files.Reference(beatmapSet.Files.Select(f => f.FileInfo).ToArray()); - } - /// /// Retrieve a instance for the provided /// diff --git a/osu.Game/Beatmaps/BeatmapStore.cs b/osu.Game/Beatmaps/BeatmapStore.cs index 67a2bbbd90..7a1dc763f0 100644 --- a/osu.Game/Beatmaps/BeatmapStore.cs +++ b/osu.Game/Beatmaps/BeatmapStore.cs @@ -31,9 +31,9 @@ namespace osu.Game.Beatmaps /// The beatmap to add. public void Add(BeatmapSetInfo beatmapSet) { - using (var db = ContextFactory.GetForWrite()) + using (var usage = ContextFactory.GetForWrite()) { - var context = db.Context; + var context = usage.Context; foreach (var beatmap in beatmapSet.Beatmaps.Where(b => b.Metadata != null)) { @@ -48,6 +48,7 @@ namespace osu.Game.Beatmaps } context.BeatmapSetInfo.Attach(beatmapSet); + BeatmapSetAdded?.Invoke(beatmapSet); } } @@ -73,11 +74,12 @@ namespace osu.Game.Beatmaps /// Whether the beatmap's was changed. public bool Delete(BeatmapSetInfo beatmapSet) { - using ( ContextFactory.GetForWrite()) + using (ContextFactory.GetForWrite()) { Refresh(ref beatmapSet, BeatmapSets); if (beatmapSet.DeletePending) return false; + beatmapSet.DeletePending = true; } @@ -92,11 +94,12 @@ namespace osu.Game.Beatmaps /// Whether the beatmap's was changed. public bool Undelete(BeatmapSetInfo beatmapSet) { - using ( ContextFactory.GetForWrite()) + using (ContextFactory.GetForWrite()) { Refresh(ref beatmapSet, BeatmapSets); if (!beatmapSet.DeletePending) return false; + beatmapSet.DeletePending = false; } @@ -116,6 +119,7 @@ namespace osu.Game.Beatmaps Refresh(ref beatmap, Beatmaps); if (beatmap.Hidden) return false; + beatmap.Hidden = true; BeatmapHidden?.Invoke(beatmap); @@ -136,6 +140,7 @@ namespace osu.Game.Beatmaps Refresh(ref beatmap, Beatmaps); if (!beatmap.Hidden) return false; + beatmap.Hidden = false; } @@ -155,7 +160,9 @@ namespace osu.Game.Beatmaps .Where(query) .Include(s => s.Beatmaps).ThenInclude(b => b.Metadata) .Include(s => s.Beatmaps).ThenInclude(b => b.BaseDifficulty) - .Include(s => s.Metadata); + .Include(s => s.Metadata).ToList(); + + if (!purgeable.Any()) return; // metadata is M-N so we can't rely on cascades context.BeatmapMetadata.RemoveRange(purgeable.Select(s => s.Metadata)); diff --git a/osu.Game/Database/DatabaseBackedStore.cs b/osu.Game/Database/DatabaseBackedStore.cs index da66167b14..0b2f34f6d1 100644 --- a/osu.Game/Database/DatabaseBackedStore.cs +++ b/osu.Game/Database/DatabaseBackedStore.cs @@ -34,10 +34,7 @@ namespace osu.Game.Database var id = obj.ID; var foundObject = lookupSource?.SingleOrDefault(t => t.ID == id) ?? context.Find(id); if (foundObject != null) - { obj = foundObject; - context.Entry(obj).Reload(); - } else context.Add(obj); } diff --git a/osu.Game/Database/DatabaseContextFactory.cs b/osu.Game/Database/DatabaseContextFactory.cs index c092ed377f..2291374e46 100644 --- a/osu.Game/Database/DatabaseContextFactory.cs +++ b/osu.Game/Database/DatabaseContextFactory.cs @@ -1,6 +1,7 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using System.Diagnostics; using System.Threading; using osu.Framework.Platform; @@ -18,6 +19,7 @@ namespace osu.Game.Database private OsuDbContext writeContext; + private bool currentWriteDidWrite; private volatile int currentWriteUsages; public DatabaseContextFactory(GameHost host) @@ -38,24 +40,41 @@ namespace osu.Game.Database /// A usage containing a usable context. public DatabaseWriteUsage GetForWrite() { - lock (writeLock) - { - var usage = new DatabaseWriteUsage(writeContext ?? (writeContext = threadContexts.Value), usageCompleted); - Interlocked.Increment(ref currentWriteUsages); - return usage; - } + Monitor.Enter(writeLock); + + Trace.Assert(currentWriteUsages == 0, "Database writes in a bad state"); + Interlocked.Increment(ref currentWriteUsages); + + return new DatabaseWriteUsage(writeContext ?? (writeContext = threadContexts.Value), usageCompleted); } private void usageCompleted(DatabaseWriteUsage usage) { int usages = Interlocked.Decrement(ref currentWriteUsages); - if (usages == 0) + + try { - writeContext.Dispose(); + currentWriteDidWrite |= usage.PerformedWrite; + + if (usages > 0) return; + + + if (currentWriteDidWrite) + { + writeContext.Dispose(); + currentWriteDidWrite = false; + + // once all writes are complete, we want to refresh thread-specific contexts to make sure they don't have stale local caches. + recycleThreadContexts(); + } + + // always set to null (even when a write didn't occur) so we get the correct thread context on next write request. writeContext = null; - // once all writes are complete, we want to refresh thread-specific contexts to make sure they don't have stale local caches. - recycleThreadContexts(); + } + finally + { + Monitor.Exit(writeLock); } } diff --git a/osu.Game/Database/DatabaseWriteUsage.cs b/osu.Game/Database/DatabaseWriteUsage.cs index 0dc5a4cfe9..52dd0ee268 100644 --- a/osu.Game/Database/DatabaseWriteUsage.cs +++ b/osu.Game/Database/DatabaseWriteUsage.cs @@ -19,10 +19,28 @@ namespace osu.Game.Database usageCompleted = onCompleted; } + public bool PerformedWrite { get; private set; } + + private bool isDisposed; + + protected void Dispose(bool disposing) + { + if (isDisposed) return; + isDisposed = true; + + PerformedWrite |= Context.SaveChanges(transaction) > 0; + usageCompleted?.Invoke(this); + } + public void Dispose() { - Context.SaveChanges(transaction); - usageCompleted?.Invoke(this); + Dispose(true); + GC.SuppressFinalize(this); + } + + ~DatabaseWriteUsage() + { + Dispose(false); } } } diff --git a/osu.Game/Database/OsuDbContext.cs b/osu.Game/Database/OsuDbContext.cs index cf29ae4496..e83b30595e 100644 --- a/osu.Game/Database/OsuDbContext.cs +++ b/osu.Game/Database/OsuDbContext.cs @@ -111,7 +111,7 @@ namespace osu.Game.Database public int SaveChanges(IDbContextTransaction transaction = null) { var ret = base.SaveChanges(); - transaction?.Commit(); + if (ret > 0) transaction?.Commit(); return ret; } diff --git a/osu.Game/IO/FileStore.cs b/osu.Game/IO/FileStore.cs index 1bfe4db81a..9889088dc4 100644 --- a/osu.Game/IO/FileStore.cs +++ b/osu.Game/IO/FileStore.cs @@ -30,11 +30,9 @@ namespace osu.Game.IO { using (var usage = ContextFactory.GetForWrite()) { - var context = usage.Context; - string hash = data.ComputeSHA2Hash(); - var existing = context.FileInfo.FirstOrDefault(f => f.Hash == hash); + var existing = usage.Context.FileInfo.FirstOrDefault(f => f.Hash == hash); var info = existing ?? new FileInfo { Hash = hash }; @@ -60,6 +58,8 @@ namespace osu.Game.IO public void Reference(params FileInfo[] files) { + if (files.Length == 0) return; + using (var usage = ContextFactory.GetForWrite()) { var context = usage.Context; @@ -75,9 +75,12 @@ namespace osu.Game.IO public void Dereference(params FileInfo[] files) { + if (files.Length == 0) return; + using (var usage = ContextFactory.GetForWrite()) { var context = usage.Context; + foreach (var f in files.GroupBy(f => f.ID)) { var refetch = context.FileInfo.Find(f.Key); diff --git a/osu.Game/Input/KeyBindingStore.cs b/osu.Game/Input/KeyBindingStore.cs index 4aad684959..33cb0911a8 100644 --- a/osu.Game/Input/KeyBindingStore.cs +++ b/osu.Game/Input/KeyBindingStore.cs @@ -36,8 +36,6 @@ namespace osu.Game.Input { using (var usage = ContextFactory.GetForWrite()) { - var context = usage.Context; - // compare counts in database vs defaults foreach (var group in defaults.GroupBy(k => k.Action)) { @@ -49,7 +47,7 @@ namespace osu.Game.Input foreach (var insertable in group.Skip(count).Take(aimCount - count)) // insert any defaults which are missing. - context.DatabasedKeyBinding.Add(new DatabasedKeyBinding + usage.Context.DatabasedKeyBinding.Add(new DatabasedKeyBinding { KeyCombination = insertable.KeyCombination, Action = insertable.Action, @@ -75,6 +73,10 @@ namespace osu.Game.Input { var dbKeyBinding = (DatabasedKeyBinding)keyBinding; Refresh(ref dbKeyBinding); + + if (dbKeyBinding.KeyCombination.Equals(keyBinding.KeyCombination)) + return; + dbKeyBinding.KeyCombination = keyBinding.KeyCombination; } From 64cda9fd0f6ae85ea42838ff4144b41eb1ec2b56 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Mon, 12 Feb 2018 22:16:09 +0900 Subject: [PATCH 044/544] Remove incorrect assert assumption --- osu.Game/Database/DatabaseContextFactory.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/osu.Game/Database/DatabaseContextFactory.cs b/osu.Game/Database/DatabaseContextFactory.cs index 2291374e46..eaeea0b35e 100644 --- a/osu.Game/Database/DatabaseContextFactory.cs +++ b/osu.Game/Database/DatabaseContextFactory.cs @@ -1,7 +1,6 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE -using System.Diagnostics; using System.Threading; using osu.Framework.Platform; @@ -42,7 +41,6 @@ namespace osu.Game.Database { Monitor.Enter(writeLock); - Trace.Assert(currentWriteUsages == 0, "Database writes in a bad state"); Interlocked.Increment(ref currentWriteUsages); return new DatabaseWriteUsage(writeContext ?? (writeContext = threadContexts.Value), usageCompleted); From a738664167a579f726828ea9b0cc445b0b1a939d Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Mon, 12 Feb 2018 23:10:05 +0900 Subject: [PATCH 045/544] Add interface for database context factory --- .../Visual/TestCasePlaySongSelect.cs | 2 +- osu.Game/Beatmaps/BeatmapManager.cs | 4 ++-- osu.Game/Beatmaps/BeatmapStore.cs | 2 +- osu.Game/Database/DatabaseBackedStore.cs | 4 ++-- osu.Game/Database/DatabaseContextFactory.cs | 2 +- osu.Game/Database/IDatabaseContextFactory.cs | 20 +++++++++++++++++++ osu.Game/Database/SingletonContextFactory.cs | 10 ++++------ osu.Game/IO/FileStore.cs | 2 +- osu.Game/Rulesets/RulesetStore.cs | 2 +- osu.Game/osu.Game.csproj | 1 + 10 files changed, 34 insertions(+), 15 deletions(-) create mode 100644 osu.Game/Database/IDatabaseContextFactory.cs diff --git a/osu.Game.Tests/Visual/TestCasePlaySongSelect.cs b/osu.Game.Tests/Visual/TestCasePlaySongSelect.cs index f54eb77c6b..8bb0d152f6 100644 --- a/osu.Game.Tests/Visual/TestCasePlaySongSelect.cs +++ b/osu.Game.Tests/Visual/TestCasePlaySongSelect.cs @@ -63,7 +63,7 @@ namespace osu.Game.Tests.Visual var storage = new TestStorage(@"TestCasePlaySongSelect"); // this is by no means clean. should be replacing inside of OsuGameBase somehow. - DatabaseContextFactory factory = new SingletonContextFactory(new OsuDbContext()); + IDatabaseContextFactory factory = new SingletonContextFactory(new OsuDbContext()); dependencies.Cache(rulesets = new RulesetStore(factory)); dependencies.Cache(manager = new BeatmapManager(storage, factory, rulesets, null) diff --git a/osu.Game/Beatmaps/BeatmapManager.cs b/osu.Game/Beatmaps/BeatmapManager.cs index 41ea293938..5748062fd5 100644 --- a/osu.Game/Beatmaps/BeatmapManager.cs +++ b/osu.Game/Beatmaps/BeatmapManager.cs @@ -60,7 +60,7 @@ namespace osu.Game.Beatmaps /// public WorkingBeatmap DefaultBeatmap { private get; set; } - private readonly DatabaseContextFactory contextFactory; + private readonly IDatabaseContextFactory contextFactory; private readonly FileStore files; @@ -85,7 +85,7 @@ namespace osu.Game.Beatmaps /// public Func GetStableStorage { private get; set; } - public BeatmapManager(Storage storage, DatabaseContextFactory contextFactory, RulesetStore rulesets, APIAccess api, IIpcHost importHost = null) + public BeatmapManager(Storage storage, IDatabaseContextFactory contextFactory, RulesetStore rulesets, APIAccess api, IIpcHost importHost = null) { this.contextFactory = contextFactory; diff --git a/osu.Game/Beatmaps/BeatmapStore.cs b/osu.Game/Beatmaps/BeatmapStore.cs index 7a1dc763f0..29373c0715 100644 --- a/osu.Game/Beatmaps/BeatmapStore.cs +++ b/osu.Game/Beatmaps/BeatmapStore.cs @@ -20,7 +20,7 @@ namespace osu.Game.Beatmaps public event Action BeatmapHidden; public event Action BeatmapRestored; - public BeatmapStore(DatabaseContextFactory factory) + public BeatmapStore(IDatabaseContextFactory factory) : base(factory) { } diff --git a/osu.Game/Database/DatabaseBackedStore.cs b/osu.Game/Database/DatabaseBackedStore.cs index 0b2f34f6d1..cf46b66422 100644 --- a/osu.Game/Database/DatabaseBackedStore.cs +++ b/osu.Game/Database/DatabaseBackedStore.cs @@ -15,7 +15,7 @@ namespace osu.Game.Database /// /// Create a new instance (separate from the shared context via for performing isolated operations. /// - protected readonly DatabaseContextFactory ContextFactory; + protected readonly IDatabaseContextFactory ContextFactory; /// /// Refresh an instance potentially from a different thread with a local context-tracked instance. @@ -40,7 +40,7 @@ namespace osu.Game.Database } } - protected DatabaseBackedStore(DatabaseContextFactory contextFactory, Storage storage = null) + protected DatabaseBackedStore(IDatabaseContextFactory contextFactory, Storage storage = null) { ContextFactory = contextFactory; Storage = storage; diff --git a/osu.Game/Database/DatabaseContextFactory.cs b/osu.Game/Database/DatabaseContextFactory.cs index eaeea0b35e..002e9e456d 100644 --- a/osu.Game/Database/DatabaseContextFactory.cs +++ b/osu.Game/Database/DatabaseContextFactory.cs @@ -6,7 +6,7 @@ using osu.Framework.Platform; namespace osu.Game.Database { - public class DatabaseContextFactory + public class DatabaseContextFactory : IDatabaseContextFactory { private readonly GameHost host; diff --git a/osu.Game/Database/IDatabaseContextFactory.cs b/osu.Game/Database/IDatabaseContextFactory.cs new file mode 100644 index 0000000000..bc1bc0349c --- /dev/null +++ b/osu.Game/Database/IDatabaseContextFactory.cs @@ -0,0 +1,20 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +namespace osu.Game.Database +{ + public interface IDatabaseContextFactory + { + /// + /// Get a context for read-only usage. + /// + OsuDbContext Get(); + + /// + /// Request a context for write usage. Can be consumed in a nested fashion (and will return the same underlying context). + /// This method may block if a write is already active on a different thread. + /// + /// A usage containing a usable context. + DatabaseWriteUsage GetForWrite(); + } +} diff --git a/osu.Game/Database/SingletonContextFactory.cs b/osu.Game/Database/SingletonContextFactory.cs index 88a43dc836..067e4fd8eb 100644 --- a/osu.Game/Database/SingletonContextFactory.cs +++ b/osu.Game/Database/SingletonContextFactory.cs @@ -3,19 +3,17 @@ namespace osu.Game.Database { - public class SingletonContextFactory : DatabaseContextFactory + public class SingletonContextFactory : IDatabaseContextFactory { private readonly OsuDbContext context; public SingletonContextFactory(OsuDbContext context) - : base(null) { this.context = context; } - protected override OsuDbContext CreateContext() - { - return context; - } + public OsuDbContext Get() => context; + + public DatabaseWriteUsage GetForWrite() => new DatabaseWriteUsage(context, null); } } diff --git a/osu.Game/IO/FileStore.cs b/osu.Game/IO/FileStore.cs index 9889088dc4..ab81ba4851 100644 --- a/osu.Game/IO/FileStore.cs +++ b/osu.Game/IO/FileStore.cs @@ -21,7 +21,7 @@ namespace osu.Game.IO public new Storage Storage => base.Storage; - public FileStore(DatabaseContextFactory contextFactory, Storage storage) : base(contextFactory, storage.GetStorageForDirectory(@"files")) + public FileStore(IDatabaseContextFactory contextFactory, Storage storage) : base(contextFactory, storage.GetStorageForDirectory(@"files")) { Store = new StorageBackedResourceStore(Storage); } diff --git a/osu.Game/Rulesets/RulesetStore.cs b/osu.Game/Rulesets/RulesetStore.cs index f66a126211..92fbf25f04 100644 --- a/osu.Game/Rulesets/RulesetStore.cs +++ b/osu.Game/Rulesets/RulesetStore.cs @@ -25,7 +25,7 @@ namespace osu.Game.Rulesets loadRulesetFromFile(file); } - public RulesetStore(DatabaseContextFactory factory) + public RulesetStore(IDatabaseContextFactory factory) : base(factory) { AddMissingRulesets(); diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index 71f1629c19..02801eb81f 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -276,6 +276,7 @@ + From 8d313486b3e03dc05e8f27327bba14fc3a7f59ba Mon Sep 17 00:00:00 2001 From: Shane Woolcock Date: Tue, 13 Feb 2018 00:40:34 +1030 Subject: [PATCH 046/544] Add a confirmation dialog to the Delete option in the beatmap context menu --- .../Select/Carousel/DrawableCarouselBeatmapSet.cs | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/osu.Game/Screens/Select/Carousel/DrawableCarouselBeatmapSet.cs b/osu.Game/Screens/Select/Carousel/DrawableCarouselBeatmapSet.cs index d8cfd79e12..6933f5503a 100644 --- a/osu.Game/Screens/Select/Carousel/DrawableCarouselBeatmapSet.cs +++ b/osu.Game/Screens/Select/Carousel/DrawableCarouselBeatmapSet.cs @@ -25,10 +25,10 @@ namespace osu.Game.Screens.Select.Carousel { public class DrawableCarouselBeatmapSet : DrawableCarouselItem, IHasContextMenu { - private Action deleteRequested; private Action restoreHiddenRequested; private Action viewDetails; + private DialogOverlay dialogOverlay; private readonly BeatmapSetInfo beatmapSet; public DrawableCarouselBeatmapSet(CarouselBeatmapSet set) @@ -38,13 +38,13 @@ namespace osu.Game.Screens.Select.Carousel } [BackgroundDependencyLoader(true)] - private void load(LocalisationEngine localisation, BeatmapManager manager, BeatmapSetOverlay beatmapOverlay) + private void load(LocalisationEngine localisation, BeatmapManager manager, BeatmapSetOverlay beatmapOverlay, DialogOverlay overlay) { if (localisation == null) throw new ArgumentNullException(nameof(localisation)); restoreHiddenRequested = s => s.Beatmaps.ForEach(manager.Restore); - deleteRequested = manager.Delete; + dialogOverlay = overlay; if (beatmapOverlay != null) viewDetails = beatmapOverlay.ShowBeatmapSet; @@ -89,6 +89,12 @@ namespace osu.Game.Screens.Select.Carousel }; } + private void delete(BeatmapSetInfo beatmap) + { + if (beatmap == null) return; + dialogOverlay?.Push(new BeatmapDeleteDialog(beatmap)); + } + public MenuItem[] ContextMenuItems { get @@ -104,7 +110,7 @@ namespace osu.Game.Screens.Select.Carousel if (beatmapSet.Beatmaps.Any(b => b.Hidden)) items.Add(new OsuMenuItem("Restore all hidden", MenuItemType.Standard, () => restoreHiddenRequested?.Invoke(beatmapSet))); - items.Add(new OsuMenuItem("Delete", MenuItemType.Destructive, () => deleteRequested?.Invoke(beatmapSet))); + items.Add(new OsuMenuItem("Delete", MenuItemType.Destructive, () => delete(beatmapSet))); return items.ToArray(); } From e8e093d6f2bda07dfb3cc596b553044db91c9262 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 13 Feb 2018 14:54:01 +0900 Subject: [PATCH 047/544] Fix incorrect xmldoc --- osu.Game/Beatmaps/BeatmapManager.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game/Beatmaps/BeatmapManager.cs b/osu.Game/Beatmaps/BeatmapManager.cs index 5748062fd5..be04a78034 100644 --- a/osu.Game/Beatmaps/BeatmapManager.cs +++ b/osu.Game/Beatmaps/BeatmapManager.cs @@ -535,7 +535,7 @@ namespace osu.Game.Beatmaps } /// - /// Create a SHA-2 hash from the provided archive based on contained beatmap filenames. + /// Create a SHA-2 hash from the provided archive based on contained beatmap (.osu) file content. /// private string computeBeatmapSetHash(ArchiveReader reader) { From 35613263064a696f5900b51de7bccc73139c2796 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 13 Feb 2018 14:54:46 +0900 Subject: [PATCH 048/544] Remove fixed issue --- osu.Game/Beatmaps/BeatmapManager.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/osu.Game/Beatmaps/BeatmapManager.cs b/osu.Game/Beatmaps/BeatmapManager.cs index be04a78034..40b63ffa39 100644 --- a/osu.Game/Beatmaps/BeatmapManager.cs +++ b/osu.Game/Beatmaps/BeatmapManager.cs @@ -191,8 +191,6 @@ namespace osu.Game.Beatmaps var existingOnlineId = beatmaps.BeatmapSets.FirstOrDefault(b => b.OnlineBeatmapSetID == beatmapSet.OnlineBeatmapSetID); if (existingOnlineId != null) { - // {Microsoft.EntityFrameworkCore.DbUpdateConcurrencyException: Database operation expected to affect 1 row(s) but actually affected 0 row(s). Data may have been modified or deleted since entities were loaded. See http://go.microsoft.com/fwlink/?LinkId=527962…} - Delete(existingOnlineId); beatmaps.Cleanup(s => s.ID == existingOnlineId.ID); } From d603d032d59abcd32cbdce3bfa7503dca4541705 Mon Sep 17 00:00:00 2001 From: Shane Woolcock Date: Tue, 13 Feb 2018 16:26:05 +1030 Subject: [PATCH 049/544] Inlined delete beatmap dialog --- .../Screens/Select/Carousel/DrawableCarouselBeatmapSet.cs | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/osu.Game/Screens/Select/Carousel/DrawableCarouselBeatmapSet.cs b/osu.Game/Screens/Select/Carousel/DrawableCarouselBeatmapSet.cs index 6933f5503a..5204b7d787 100644 --- a/osu.Game/Screens/Select/Carousel/DrawableCarouselBeatmapSet.cs +++ b/osu.Game/Screens/Select/Carousel/DrawableCarouselBeatmapSet.cs @@ -89,12 +89,6 @@ namespace osu.Game.Screens.Select.Carousel }; } - private void delete(BeatmapSetInfo beatmap) - { - if (beatmap == null) return; - dialogOverlay?.Push(new BeatmapDeleteDialog(beatmap)); - } - public MenuItem[] ContextMenuItems { get @@ -110,7 +104,7 @@ namespace osu.Game.Screens.Select.Carousel if (beatmapSet.Beatmaps.Any(b => b.Hidden)) items.Add(new OsuMenuItem("Restore all hidden", MenuItemType.Standard, () => restoreHiddenRequested?.Invoke(beatmapSet))); - items.Add(new OsuMenuItem("Delete", MenuItemType.Destructive, () => delete(beatmapSet))); + items.Add(new OsuMenuItem("Delete", MenuItemType.Destructive, () => dialogOverlay?.Push(new BeatmapDeleteDialog(beatmapSet)))); return items.ToArray(); } From ab34123ba81fe37c62aaf8e500ec42346a17ea23 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 13 Feb 2018 14:58:15 +0900 Subject: [PATCH 050/544] Remove unnecessary class variable --- osu.Game/Database/DatabaseContextFactory.cs | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/osu.Game/Database/DatabaseContextFactory.cs b/osu.Game/Database/DatabaseContextFactory.cs index 002e9e456d..d8044e6eb1 100644 --- a/osu.Game/Database/DatabaseContextFactory.cs +++ b/osu.Game/Database/DatabaseContextFactory.cs @@ -16,8 +16,6 @@ namespace osu.Game.Database private readonly object writeLock = new object(); - private OsuDbContext writeContext; - private bool currentWriteDidWrite; private volatile int currentWriteUsages; @@ -43,7 +41,7 @@ namespace osu.Game.Database Interlocked.Increment(ref currentWriteUsages); - return new DatabaseWriteUsage(writeContext ?? (writeContext = threadContexts.Value), usageCompleted); + return new DatabaseWriteUsage(threadContexts.Value, usageCompleted); } private void usageCompleted(DatabaseWriteUsage usage) @@ -56,19 +54,12 @@ namespace osu.Game.Database if (usages > 0) return; - if (currentWriteDidWrite) { - writeContext.Dispose(); currentWriteDidWrite = false; - // once all writes are complete, we want to refresh thread-specific contexts to make sure they don't have stale local caches. recycleThreadContexts(); } - - // always set to null (even when a write didn't occur) so we get the correct thread context on next write request. - writeContext = null; - } finally { @@ -76,7 +67,14 @@ namespace osu.Game.Database } } - private void recycleThreadContexts() => threadContexts = new ThreadLocal(CreateContext); + private void recycleThreadContexts() + { + if (threadContexts != null) + foreach (var context in threadContexts.Values) + context.Dispose(); + + threadContexts = new ThreadLocal(CreateContext, true); + } protected virtual OsuDbContext CreateContext() { From 50cdb03cd9e55911c8727467dad7ebb18b4e35b0 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 13 Feb 2018 15:08:45 +0900 Subject: [PATCH 051/544] Don't dispose read contexts --- osu.Game/Database/DatabaseContextFactory.cs | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/osu.Game/Database/DatabaseContextFactory.cs b/osu.Game/Database/DatabaseContextFactory.cs index d8044e6eb1..2068d6bd8a 100644 --- a/osu.Game/Database/DatabaseContextFactory.cs +++ b/osu.Game/Database/DatabaseContextFactory.cs @@ -56,7 +56,11 @@ namespace osu.Game.Database if (currentWriteDidWrite) { + // explicitly dispose to ensure any outstanding flushes happen as soon as possible (and underlying resources are purged). + usage.Context.Dispose(); + currentWriteDidWrite = false; + // once all writes are complete, we want to refresh thread-specific contexts to make sure they don't have stale local caches. recycleThreadContexts(); } @@ -67,14 +71,7 @@ namespace osu.Game.Database } } - private void recycleThreadContexts() - { - if (threadContexts != null) - foreach (var context in threadContexts.Values) - context.Dispose(); - - threadContexts = new ThreadLocal(CreateContext, true); - } + private void recycleThreadContexts() => threadContexts = new ThreadLocal(CreateContext); protected virtual OsuDbContext CreateContext() { From 8c42225646402eb02079d9046e07f1370fc6f3f8 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 13 Feb 2018 15:08:51 +0900 Subject: [PATCH 052/544] Fix outdated xmldoc --- osu.Game/Beatmaps/BeatmapManager.cs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/osu.Game/Beatmaps/BeatmapManager.cs b/osu.Game/Beatmaps/BeatmapManager.cs index 40b63ffa39..47773528a6 100644 --- a/osu.Game/Beatmaps/BeatmapManager.cs +++ b/osu.Game/Beatmaps/BeatmapManager.cs @@ -588,11 +588,8 @@ namespace osu.Game.Beatmaps } /// - /// Import a beamap into our local storage. - /// If the beatmap is already imported, the existing instance will be returned. + /// Create all required s for the provided archive. /// - /// The beatmap archive to be read. - /// The imported beatmap, or an existing instance if it is already present. private List createBeatmapDifficulties(ArchiveReader reader) { var beatmapInfos = new List(); From e2d11af4ef133317810f0bb0bd39419ff1183c74 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 13 Feb 2018 19:59:32 +0900 Subject: [PATCH 053/544] Fix incorrect MusicController drag handling --- osu.Game/Overlays/MusicController.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/osu.Game/Overlays/MusicController.cs b/osu.Game/Overlays/MusicController.cs index b3140d8bd0..74f6e4435d 100644 --- a/osu.Game/Overlays/MusicController.cs +++ b/osu.Game/Overlays/MusicController.cs @@ -2,7 +2,6 @@ // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using System; -using System.Diagnostics; using System.Linq; using System.Threading.Tasks; using osu.Framework.Allocation; @@ -65,9 +64,12 @@ namespace osu.Game.Overlays AlwaysPresent = true; } + private Vector2 dragStart; + protected override bool OnDragStart(InputState state) { base.OnDragStart(state); + dragStart = state.Mouse.Position; return true; } @@ -75,9 +77,7 @@ namespace osu.Game.Overlays { if (base.OnDrag(state)) return true; - Trace.Assert(state.Mouse.PositionMouseDown != null, "state.Mouse.PositionMouseDown != null"); - - Vector2 change = state.Mouse.Position - state.Mouse.PositionMouseDown.Value; + Vector2 change = state.Mouse.Position - dragStart; // Diminish the drag distance as we go further to simulate "rubber band" feeling. change *= change.Length <= 0 ? 0 : (float)Math.Pow(change.Length, 0.7f) / change.Length; From f4ddc0717bfd31c0dbb8f4773ab9829e5b6822ec Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 13 Feb 2018 19:59:39 +0900 Subject: [PATCH 054/544] Fix incorrect PlaylistItem drag handling --- osu.Game/Overlays/Music/PlaylistItem.cs | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/osu.Game/Overlays/Music/PlaylistItem.cs b/osu.Game/Overlays/Music/PlaylistItem.cs index 34dcc36699..71fdcff6af 100644 --- a/osu.Game/Overlays/Music/PlaylistItem.cs +++ b/osu.Game/Overlays/Music/PlaylistItem.cs @@ -34,7 +34,19 @@ namespace osu.Game.Overlays.Music public Action OnSelect; - public bool IsDraggable => handle.IsHovered; + public bool IsDraggable { get; private set; } + + protected override bool OnMouseDown(InputState state, MouseDownEventArgs args) + { + IsDraggable = handle.IsHovered; + return base.OnMouseDown(state, args); + } + + protected override bool OnMouseUp(InputState state, MouseUpEventArgs args) + { + IsDraggable = false; + return base.OnMouseUp(state, args); + } private bool selected; public bool Selected From 86acc8498878a4aa3fbdee928381c1aaa75b4f53 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 13 Feb 2018 20:23:51 +0900 Subject: [PATCH 055/544] Apply formatting --- osu.Game/Beatmaps/BeatmapDifficulty.cs | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/osu.Game/Beatmaps/BeatmapDifficulty.cs b/osu.Game/Beatmaps/BeatmapDifficulty.cs index 78cdf1b5ce..16e6692887 100644 --- a/osu.Game/Beatmaps/BeatmapDifficulty.cs +++ b/osu.Game/Beatmaps/BeatmapDifficulty.cs @@ -20,18 +20,15 @@ namespace osu.Game.Beatmaps public float DrainRate { get; set; } = DEFAULT_DIFFICULTY; public float CircleSize { get; set; } = DEFAULT_DIFFICULTY; public float OverallDifficulty { get; set; } = DEFAULT_DIFFICULTY; + private float? approachRate; + public float ApproachRate { - get - { - return approachRate ?? OverallDifficulty; - } - set - { - approachRate = value; - } + get => approachRate ?? OverallDifficulty; + set => approachRate = value; } + public float SliderMultiplier { get; set; } = 1; public float SliderTickRate { get; set; } = 1; From bf6c93e77e3efbe75c23e359e8300b1cde774d26 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Tue, 13 Feb 2018 21:40:07 +0900 Subject: [PATCH 056/544] Update framework --- osu-framework | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu-framework b/osu-framework index eba12eb4a0..63c9440bfb 160000 --- a/osu-framework +++ b/osu-framework @@ -1 +1 @@ -Subproject commit eba12eb4a0fa6238873dd266deb35bfdece21a6a +Subproject commit 63c9440bfbd2bfb36f14c9ee0a521a6c46849cec From 344da5965c1fea626eb46615e18a49f8469e504a Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Wed, 14 Feb 2018 14:38:37 +0900 Subject: [PATCH 057/544] Add a CaptureBox that encloses hitobjects from the drag selection --- .../Edit/Layers/Selection/CaptureBox.cs | 59 ++++++++++++++++--- .../Edit/Layers/Selection/SelectionLayer.cs | 12 ++-- 2 files changed, 59 insertions(+), 12 deletions(-) diff --git a/osu.Game/Rulesets/Edit/Layers/Selection/CaptureBox.cs b/osu.Game/Rulesets/Edit/Layers/Selection/CaptureBox.cs index 423927481c..5d1bcd1ef7 100644 --- a/osu.Game/Rulesets/Edit/Layers/Selection/CaptureBox.cs +++ b/osu.Game/Rulesets/Edit/Layers/Selection/CaptureBox.cs @@ -15,17 +15,26 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection /// /// A box which encapsulates captured s. /// - public class CaptureBox : VisibilityContainer + public abstract class CaptureBox : VisibilityContainer { + /// + /// Top-left corner of the rectangle that encloses the s. + /// + protected Vector2 FinalPosition { get; private set; } + + /// + /// Size of the rectangle that encloses the s. + /// + protected Vector2 FinalSize { get; private set; } + private readonly IDrawable captureArea; private readonly IReadOnlyList capturedObjects; - public CaptureBox(IDrawable captureArea, IReadOnlyList capturedObjects) + protected CaptureBox(IDrawable captureArea, IReadOnlyList capturedObjects) { this.captureArea = captureArea; this.capturedObjects = capturedObjects; - Origin = Anchor.Centre; Masking = true; BorderThickness = 3; @@ -57,13 +66,47 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection topLeft -= new Vector2(5); bottomRight += new Vector2(5); - Size = bottomRight - topLeft; - Position = topLeft + Size / 2f; + FinalSize = bottomRight - topLeft; + FinalPosition = topLeft; } - protected override void PopIn() => this.ScaleTo(1.1f) - .Then() - .ScaleTo(1f, 300, Easing.OutQuint).FadeIn(300, Easing.OutQuint); + protected override void PopIn() => this.MoveTo(FinalPosition).ResizeTo(FinalSize).FadeIn(); + protected override void PopOut() => this.FadeOut(); + } + + /// + /// A which fully encloses the s from the start. + /// + public class InstantCaptureBox : CaptureBox + { + public InstantCaptureBox(IDrawable captureArea, IReadOnlyList capturedObjects) + : base(captureArea, capturedObjects) + { + Origin = Anchor.Centre; + } + + protected override void PopIn() + => this.MoveTo(FinalPosition + FinalSize / 2f).ResizeTo(FinalSize).ScaleTo(1.1f) + .Then() + .ScaleTo(1f, 300, Easing.OutQuint).FadeIn(300, Easing.OutQuint); + + protected override void PopOut() => this.FadeOut(300, Easing.OutQuint); + } + + /// + /// A which moves from an initial position + size to enclose s. + /// + public class DragCaptureBox : CaptureBox + { + public DragCaptureBox(IDrawable captureArea, IReadOnlyList capturedObjects, Vector2 initialPosition, Vector2 initialSize) + : base(captureArea, capturedObjects) + { + Position = initialPosition; + Size = initialSize; + } + + protected override void PopIn() + => this.MoveTo(FinalPosition, 300, Easing.OutQuint).ResizeTo(FinalSize, 300, Easing.OutQuint).FadeIn(300, Easing.OutQuint); protected override void PopOut() => this.FadeOut(300, Easing.OutQuint); } diff --git a/osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs b/osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs index e7a46569f1..e1fc0d179a 100644 --- a/osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs +++ b/osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs @@ -58,7 +58,7 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection protected override bool OnDragEnd(InputState state) { selectionBox.Hide(); - finishCapture(); + finishCapture(true); return true; } @@ -66,7 +66,7 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection protected override bool OnClick(InputState state) { capturePoint(state.Mouse.NativeState.Position); - finishCapture(); + finishCapture(false); return true; } @@ -94,7 +94,7 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection capturedHitObjects.Add(captured); } - private void finishCapture() + private void finishCapture(bool fromDrag) { if (capturedHitObjects.Count == 0) return; @@ -102,7 +102,11 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection // Due to https://github.com/ppy/osu-framework/issues/1382, we may get here through both // OnDragEnd and OnClick methods within a single frame, OnMouseDown doesn't help us here captureBox?.Hide(); - AddInternal(captureBox = new CaptureBox(this, capturedHitObjects.ToList())); + + if (fromDrag) + AddInternal(captureBox = new DragCaptureBox(this, capturedHitObjects.ToList(), selectionBox.Position, selectionBox.Size)); + else + AddInternal(captureBox = new InstantCaptureBox(this, capturedHitObjects.ToList())); } } } From 27c6f4ee83b085af771d2856403a38992f412300 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Wed, 14 Feb 2018 14:41:06 +0900 Subject: [PATCH 058/544] Update framework --- osu-framework | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu-framework b/osu-framework index eba12eb4a0..63c9440bfb 160000 --- a/osu-framework +++ b/osu-framework @@ -1 +1 @@ -Subproject commit eba12eb4a0fa6238873dd266deb35bfdece21a6a +Subproject commit 63c9440bfbd2bfb36f14c9ee0a521a6c46849cec From 20de3c421a0f395470982f04047eb5b141466630 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Wed, 14 Feb 2018 17:43:45 +0900 Subject: [PATCH 059/544] Update framework --- osu-framework | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu-framework b/osu-framework index 63c9440bfb..52b97a5832 160000 --- a/osu-framework +++ b/osu-framework @@ -1 +1 @@ -Subproject commit 63c9440bfbd2bfb36f14c9ee0a521a6c46849cec +Subproject commit 52b97a5832410eb868421fd7c55cdb67620330d0 From a9d14eadacea77e5b479adb7396367f45c31132a Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Wed, 14 Feb 2018 17:53:04 +0900 Subject: [PATCH 060/544] Add clearSelection method --- .../Edit/Layers/Selection/SelectionLayer.cs | 24 ++++++++++++------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs b/osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs index e1fc0d179a..a335108a0f 100644 --- a/osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs +++ b/osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs @@ -27,12 +27,11 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection private SelectionBox selectionBox; private CaptureBox captureBox; - private readonly List capturedHitObjects = new List(); + private readonly List selectedHitObjects = new List(); protected override bool OnMouseDown(InputState state, MouseDownEventArgs args) { - capturedHitObjects.Clear(); - captureBox?.Hide(); + clearSelection(); return true; } @@ -71,6 +70,15 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection return true; } + /// + /// Deselects all selected s. + /// + private void clearSelection() + { + selectedHitObjects.Clear(); + captureBox?.Hide(); + } + /// /// Captures all hitobjects that are present within the area of a . /// @@ -78,7 +86,7 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection private void captureQuad(Quad screenSpaceQuad) { foreach (var obj in playfield.HitObjects.Objects.Where(h => h.IsAlive && h.IsPresent && screenSpaceQuad.Contains(h.SelectionPoint))) - capturedHitObjects.Add(obj); + selectedHitObjects.Add(obj); } /// @@ -91,12 +99,12 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection if (captured == null) return; - capturedHitObjects.Add(captured); + selectedHitObjects.Add(captured); } private void finishCapture(bool fromDrag) { - if (capturedHitObjects.Count == 0) + if (selectedHitObjects.Count == 0) return; // Due to https://github.com/ppy/osu-framework/issues/1382, we may get here through both @@ -104,9 +112,9 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection captureBox?.Hide(); if (fromDrag) - AddInternal(captureBox = new DragCaptureBox(this, capturedHitObjects.ToList(), selectionBox.Position, selectionBox.Size)); + AddInternal(captureBox = new DragCaptureBox(this, selectedHitObjects.ToList(), selectionBox.Position, selectionBox.Size)); else - AddInternal(captureBox = new InstantCaptureBox(this, capturedHitObjects.ToList())); + AddInternal(captureBox = new InstantCaptureBox(this, selectedHitObjects.ToList())); } } } From 115484741d694dab9602548e58b7f8b3d2617541 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Wed, 14 Feb 2018 17:54:43 +0900 Subject: [PATCH 061/544] Capture -> Select --- .../Edit/Layers/Selection/CaptureBox.cs | 2 +- .../Edit/Layers/Selection/SelectionLayer.cs | 28 +++++++++---------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/osu.Game/Rulesets/Edit/Layers/Selection/CaptureBox.cs b/osu.Game/Rulesets/Edit/Layers/Selection/CaptureBox.cs index 5d1bcd1ef7..86e96f6d84 100644 --- a/osu.Game/Rulesets/Edit/Layers/Selection/CaptureBox.cs +++ b/osu.Game/Rulesets/Edit/Layers/Selection/CaptureBox.cs @@ -13,7 +13,7 @@ using OpenTK; namespace osu.Game.Rulesets.Edit.Layers.Selection { /// - /// A box which encapsulates captured s. + /// A box which encloses s. /// public abstract class CaptureBox : VisibilityContainer { diff --git a/osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs b/osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs index a335108a0f..0fceced040 100644 --- a/osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs +++ b/osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs @@ -49,7 +49,7 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection var screenSpaceDragQuad = new Quad(dragStartPosition.X, dragStartPosition.Y, dragPosition.X - dragStartPosition.X, dragPosition.Y - dragStartPosition.Y); selectionBox.SetDragRectangle(screenSpaceDragQuad.AABBFloat); - captureQuad(screenSpaceDragQuad); + selectQuad(screenSpaceDragQuad); return true; } @@ -57,15 +57,15 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection protected override bool OnDragEnd(InputState state) { selectionBox.Hide(); - finishCapture(true); + finishSelection(true); return true; } protected override bool OnClick(InputState state) { - capturePoint(state.Mouse.NativeState.Position); - finishCapture(false); + selectPoint(state.Mouse.NativeState.Position); + finishSelection(false); return true; } @@ -80,29 +80,29 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection } /// - /// Captures all hitobjects that are present within the area of a . + /// Selects all hitobjects that are present within the area of a . /// - /// The capture . - private void captureQuad(Quad screenSpaceQuad) + /// The selection . + private void selectQuad(Quad screenSpaceQuad) { foreach (var obj in playfield.HitObjects.Objects.Where(h => h.IsAlive && h.IsPresent && screenSpaceQuad.Contains(h.SelectionPoint))) selectedHitObjects.Add(obj); } /// - /// Captures the top-most hitobject that is present under a specific point. + /// Selects the top-most hitobject that is present under a specific point. /// - /// The to capture at. - private void capturePoint(Vector2 screenSpacePoint) + /// The to select at. + private void selectPoint(Vector2 screenSpacePoint) { - var captured = playfield.HitObjects.Objects.Reverse().Where(h => h.IsAlive && h.IsPresent).FirstOrDefault(h => h.ReceiveMouseInputAt(screenSpacePoint)); - if (captured == null) + var selected = playfield.HitObjects.Objects.Reverse().Where(h => h.IsAlive && h.IsPresent).FirstOrDefault(h => h.ReceiveMouseInputAt(screenSpacePoint)); + if (selected == null) return; - selectedHitObjects.Add(captured); + selectedHitObjects.Add(selected); } - private void finishCapture(bool fromDrag) + private void finishSelection(bool fromDrag) { if (selectedHitObjects.Count == 0) return; From c5b71d2cb7c18f94329cf1f85c02b3b9699027df Mon Sep 17 00:00:00 2001 From: Dan Balasescu <1329837+smoogipoo@users.noreply.github.com> Date: Wed, 14 Feb 2018 23:15:34 +0900 Subject: [PATCH 062/544] Remove unused using --- osu.Game/Tests/Visual/OsuTestCase.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/osu.Game/Tests/Visual/OsuTestCase.cs b/osu.Game/Tests/Visual/OsuTestCase.cs index a69066ef06..453e94b6bd 100644 --- a/osu.Game/Tests/Visual/OsuTestCase.cs +++ b/osu.Game/Tests/Visual/OsuTestCase.cs @@ -4,7 +4,6 @@ using System; using System.IO; using System.Reflection; -using osu.Framework.Platform; using osu.Framework.Testing; namespace osu.Game.Tests.Visual From e0d28564d0d69b4132f6dea94f1e2a162d18c2e4 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 14 Feb 2018 20:26:49 +0900 Subject: [PATCH 063/544] Move import logic to shared implementation --- osu.Desktop/OsuGameDesktop.cs | 25 ++- osu.Desktop/Program.cs | 2 +- .../Beatmaps/IO/ImportBeatmapTest.cs | 8 +- .../Beatmaps/ArchiveModelImportManager.cs | 181 ++++++++++++++++ osu.Game/Beatmaps/BeatmapManager.cs | 194 ++++-------------- osu.Game/Beatmaps/BeatmapSetFileInfo.cs | 3 +- osu.Game/Beatmaps/BeatmapSetInfo.cs | 3 +- osu.Game/Beatmaps/BeatmapStore.cs | 3 +- osu.Game/Beatmaps/ICanImportArchives.cs | 9 + osu.Game/Database/INamedFileInfo.cs | 13 ++ osu.Game/IO/IAddableStore.cs | 14 ++ osu.Game/IO/IHasFiles.cs | 9 + ...CChannel.cs => ArchiveImportIPCChannel.cs} | 21 +- osu.Game/Online/API/APIDownloadRequest.cs | 30 +++ osu.Game/Online/API/APIRequest.cs | 26 --- osu.Game/osu.Game.csproj | 8 +- 16 files changed, 340 insertions(+), 209 deletions(-) create mode 100644 osu.Game/Beatmaps/ArchiveModelImportManager.cs create mode 100644 osu.Game/Beatmaps/ICanImportArchives.cs create mode 100644 osu.Game/Database/INamedFileInfo.cs create mode 100644 osu.Game/IO/IAddableStore.cs create mode 100644 osu.Game/IO/IHasFiles.cs rename osu.Game/IPC/{BeatmapIPCChannel.cs => ArchiveImportIPCChannel.cs} (57%) create mode 100644 osu.Game/Online/API/APIDownloadRequest.cs diff --git a/osu.Desktop/OsuGameDesktop.cs b/osu.Desktop/OsuGameDesktop.cs index f37282366a..c563201f0a 100644 --- a/osu.Desktop/OsuGameDesktop.cs +++ b/osu.Desktop/OsuGameDesktop.cs @@ -111,14 +111,23 @@ namespace osu.Desktop { var filePaths = new [] { e.FileName }; - if (filePaths.All(f => Path.GetExtension(f) == @".osz")) - Task.Factory.StartNew(() => BeatmapManager.Import(filePaths), TaskCreationOptions.LongRunning); - else if (filePaths.All(f => Path.GetExtension(f) == @".osr")) - Task.Run(() => - { - var score = ScoreStore.ReadReplayFile(filePaths.First()); - Schedule(() => LoadScore(score)); - }); + var firstExtension = Path.GetExtension(filePaths.First()); + + if (filePaths.Any(f => Path.GetExtension(f) != firstExtension)) return; + + switch (firstExtension) + { + case ".osz": + Task.Factory.StartNew(() => BeatmapManager.Import(filePaths), TaskCreationOptions.LongRunning); + return; + case ".osr": + Task.Run(() => + { + var score = ScoreStore.ReadReplayFile(filePaths.First()); + Schedule(() => LoadScore(score)); + }); + return; + } } private static readonly string[] allowed_extensions = { @".osz", @".osr" }; diff --git a/osu.Desktop/Program.cs b/osu.Desktop/Program.cs index 9760538197..048fe93c11 100644 --- a/osu.Desktop/Program.cs +++ b/osu.Desktop/Program.cs @@ -22,7 +22,7 @@ namespace osu.Desktop { if (!host.IsPrimaryInstance) { - var importer = new BeatmapIPCChannel(host); + var importer = new ArchiveImportIPCChannel(host); // Restore the cwd so relative paths given at the command line work correctly Directory.SetCurrentDirectory(cwd); foreach (var file in args) diff --git a/osu.Game.Tests/Beatmaps/IO/ImportBeatmapTest.cs b/osu.Game.Tests/Beatmaps/IO/ImportBeatmapTest.cs index cade50a9f3..6428881b54 100644 --- a/osu.Game.Tests/Beatmaps/IO/ImportBeatmapTest.cs +++ b/osu.Game.Tests/Beatmaps/IO/ImportBeatmapTest.cs @@ -165,7 +165,7 @@ namespace osu.Game.Tests.Beatmaps.IO var temp = prepareTempCopy(osz_path); Assert.IsTrue(File.Exists(temp)); - var importer = new BeatmapIPCChannel(client); + var importer = new ArchiveImportIPCChannel(client); if (!importer.ImportAsync(temp).Wait(10000)) Assert.Fail(@"IPC took too long to send"); @@ -209,7 +209,11 @@ namespace osu.Game.Tests.Beatmaps.IO Assert.IsTrue(File.Exists(temp)); - var imported = osu.Dependencies.Get().Import(temp); + var manager = osu.Dependencies.Get(); + + manager.Import(temp); + + var imported = manager.GetAllUsableBeatmapSets(); ensureLoaded(osu); diff --git a/osu.Game/Beatmaps/ArchiveModelImportManager.cs b/osu.Game/Beatmaps/ArchiveModelImportManager.cs new file mode 100644 index 0000000000..af0cdad0a3 --- /dev/null +++ b/osu.Game/Beatmaps/ArchiveModelImportManager.cs @@ -0,0 +1,181 @@ +using System; +using System.Collections.Generic; +using System.IO; +using Ionic.Zip; +using osu.Framework.Logging; +using osu.Framework.Platform; +using osu.Game.Beatmaps.IO; +using osu.Game.Database; +using osu.Game.IO; +using osu.Game.IPC; +using osu.Game.Overlays.Notifications; +using FileInfo = osu.Game.IO.FileInfo; + +namespace osu.Game.Beatmaps +{ + public abstract class ArchiveModelImportManager : ICanImportArchives + where TModel : class, IHasFiles + where TFileModel : INamedFileInfo, new() + { + /// + /// Set an endpoint for notifications to be posted to. + /// + public Action PostNotification { protected get; set; } + + public virtual string[] HandledExtensions => new[] { ".zip" }; + + protected readonly FileStore Files; + + protected readonly IDatabaseContextFactory ContextFactory; + + protected readonly IAddableStore ModelStore; + + // ReSharper disable once NotAccessedField.Local (we should keep a reference to this so it is not finalised) + private ArchiveImportIPCChannel ipc; + + protected ArchiveModelImportManager(Storage storage, IDatabaseContextFactory contextFactory, IAddableStore modelStore, IIpcHost importHost = null) + { + ContextFactory = contextFactory; + ModelStore = modelStore; + Files = new FileStore(contextFactory, storage); + + if (importHost != null) + ipc = new ArchiveImportIPCChannel(importHost, this); + } + + /// + /// Import one or more from filesystem . + /// This will post notifications tracking progress. + /// + /// One or more beatmap locations on disk. + public void Import(params string[] paths) + { + var notification = new ProgressNotification + { + Text = "Import is initialising...", + CompletionText = "Import successful!", + Progress = 0, + State = ProgressNotificationState.Active, + }; + + PostNotification?.Invoke(notification); + + List imported = new List(); + + int i = 0; + foreach (string path in paths) + { + if (notification.State == ProgressNotificationState.Cancelled) + // user requested abort + return; + + try + { + notification.Text = $"Importing ({i} of {paths.Length})\n{Path.GetFileName(path)}"; + using (ArchiveReader reader = getReaderFrom(path)) + imported.Add(Import(reader)); + + notification.Progress = (float)++i / paths.Length; + + // We may or may not want to delete the file depending on where it is stored. + // e.g. reconstructing/repairing database with beatmaps from default storage. + // Also, not always a single file, i.e. for LegacyFilesystemReader + // TODO: Add a check to prevent files from storage to be deleted. + try + { + if (File.Exists(path)) + File.Delete(path); + } + catch (Exception e) + { + Logger.Error(e, $@"Could not delete original file after import ({Path.GetFileName(path)})"); + } + } + catch (Exception e) + { + e = e.InnerException ?? e; + Logger.Error(e, $@"Could not import beatmap set ({Path.GetFileName(path)})"); + } + } + + notification.State = ProgressNotificationState.Completed; + } + + /// + /// Import a model from an . + /// + /// The beatmap to be imported. + public TModel Import(ArchiveReader archive) + { + using (ContextFactory.GetForWrite()) // used to share a context for full import. keep in mind this will block all writes. + { + // create a new set info (don't yet add to database) + var model = CreateModel(archive); + + var existing = CheckForExisting(model); + + if (existing != null) return existing; + + model.Files = createFileInfos(archive, Files); + + Populate(model, archive); + + // import to store + ModelStore.Add(model); + + return model; + } + } + + /// + /// Create all required s for the provided archive, adding them to the global file store. + /// + private List createFileInfos(ArchiveReader reader, FileStore files) + { + var fileInfos = new List(); + + // import files to manager + foreach (string file in reader.Filenames) + using (Stream s = reader.GetStream(file)) + fileInfos.Add(new TFileModel + { + Filename = file, + FileInfo = files.Add(s) + }); + + return fileInfos; + } + + /// + /// Create a barebones model from the provided archive. + /// Actual expensive population should be done in ; this should just prepare for duplicate checking. + /// + /// + /// + protected abstract TModel CreateModel(ArchiveReader archive); + + /// + /// Populate the provided model completely from the given archive. + /// After this method, the model should be in a state ready to commit to a store. + /// + /// The model to populate. + /// The archive to use as a reference for population. + protected virtual void Populate(TModel model, ArchiveReader archive) + { + } + + protected virtual TModel CheckForExisting(TModel beatmapSet) => null; + + /// + /// Creates an from a valid storage path. + /// + /// A file or folder path resolving the beatmap content. + /// A reader giving access to the beatmap's content. + private ArchiveReader getReaderFrom(string path) + { + if (ZipFile.IsZipFile(path)) + return new OszArchiveReader(Files.Storage.GetStream(path)); + return new LegacyFilesystemReader(path); + } + } +} diff --git a/osu.Game/Beatmaps/BeatmapManager.cs b/osu.Game/Beatmaps/BeatmapManager.cs index 47773528a6..0a7bf255c5 100644 --- a/osu.Game/Beatmaps/BeatmapManager.cs +++ b/osu.Game/Beatmaps/BeatmapManager.cs @@ -7,7 +7,6 @@ using System.IO; using System.Linq; using System.Linq.Expressions; using System.Threading.Tasks; -using Ionic.Zip; using Microsoft.EntityFrameworkCore; using osu.Framework.Extensions; using osu.Framework.Logging; @@ -16,8 +15,6 @@ using osu.Game.Beatmaps.Formats; using osu.Game.Beatmaps.IO; using osu.Game.Database; using osu.Game.Graphics; -using osu.Game.IO; -using osu.Game.IPC; using osu.Game.Online.API; using osu.Game.Online.API.Requests; using osu.Game.Overlays.Notifications; @@ -28,7 +25,7 @@ namespace osu.Game.Beatmaps /// /// Handles the storage and retrieval of Beatmaps/WorkingBeatmaps. /// - public partial class BeatmapManager + public partial class BeatmapManager : ArchiveModelImportManager { /// /// Fired when a new becomes available in the database. @@ -60,9 +57,7 @@ namespace osu.Game.Beatmaps /// public WorkingBeatmap DefaultBeatmap { private get; set; } - private readonly IDatabaseContextFactory contextFactory; - - private readonly FileStore files; + public override string[] HandledExtensions => new[] { ".osz" }; private readonly RulesetStore rulesets; @@ -72,142 +67,58 @@ namespace osu.Game.Beatmaps private readonly List currentDownloads = new List(); - // ReSharper disable once NotAccessedField.Local (we should keep a reference to this so it is not finalised) - private BeatmapIPCChannel ipc; - - /// - /// Set an endpoint for notifications to be posted to. - /// - public Action PostNotification { private get; set; } - /// /// Set a storage with access to an osu-stable install for import purposes. /// public Func GetStableStorage { private get; set; } public BeatmapManager(Storage storage, IDatabaseContextFactory contextFactory, RulesetStore rulesets, APIAccess api, IIpcHost importHost = null) + : base(storage, contextFactory, new BeatmapStore(contextFactory), importHost) { - this.contextFactory = contextFactory; - - beatmaps = new BeatmapStore(contextFactory); - + beatmaps = (BeatmapStore)ModelStore; beatmaps.BeatmapSetAdded += s => BeatmapSetAdded?.Invoke(s); beatmaps.BeatmapSetRemoved += s => BeatmapSetRemoved?.Invoke(s); beatmaps.BeatmapHidden += b => BeatmapHidden?.Invoke(b); beatmaps.BeatmapRestored += b => BeatmapRestored?.Invoke(b); - files = new FileStore(contextFactory, storage); - this.rulesets = rulesets; this.api = api; - if (importHost != null) - ipc = new BeatmapIPCChannel(importHost, this); - beatmaps.Cleanup(); } - /// - /// Import one or more from filesystem . - /// This will post notifications tracking progress. - /// - /// One or more beatmap locations on disk. - public List Import(params string[] paths) + protected override void Populate(BeatmapSetInfo model, ArchiveReader archive) { - var notification = new ProgressNotification - { - Text = "Beatmap import is initialising...", - CompletionText = "Import successful!", - Progress = 0, - State = ProgressNotificationState.Active, - }; + model.Beatmaps = createBeatmapDifficulties(archive); - PostNotification?.Invoke(notification); - - List imported = new List(); - - int i = 0; - foreach (string path in paths) - { - if (notification.State == ProgressNotificationState.Cancelled) - // user requested abort - return imported; - - try - { - notification.Text = $"Importing ({i} of {paths.Length})\n{Path.GetFileName(path)}"; - using (ArchiveReader reader = getReaderFrom(path)) - imported.Add(Import(reader)); - - notification.Progress = (float)++i / paths.Length; - - // We may or may not want to delete the file depending on where it is stored. - // e.g. reconstructing/repairing database with beatmaps from default storage. - // Also, not always a single file, i.e. for LegacyFilesystemReader - // TODO: Add a check to prevent files from storage to be deleted. - try - { - if (File.Exists(path)) - File.Delete(path); - } - catch (Exception e) - { - Logger.Error(e, $@"Could not delete original file after import ({Path.GetFileName(path)})"); - } - } - catch (Exception e) - { - e = e.InnerException ?? e; - Logger.Error(e, $@"Could not import beatmap set ({Path.GetFileName(path)})"); - } - } - - notification.State = ProgressNotificationState.Completed; - return imported; + // remove metadata from difficulties where it matches the set + foreach (BeatmapInfo b in model.Beatmaps) + if (model.Metadata.Equals(b.Metadata)) + b.Metadata = null; } - /// - /// Import a beatmap from an . - /// - /// The beatmap to be imported. - public BeatmapSetInfo Import(ArchiveReader archive) + protected override BeatmapSetInfo CheckForExisting(BeatmapSetInfo beatmapSet) { - using (contextFactory.GetForWrite()) // used to share a context for full import. keep in mind this will block all writes. + // check if this beatmap has already been imported and exit early if so + var existingHashMatch = beatmaps.BeatmapSets.FirstOrDefault(b => b.Hash == beatmapSet.Hash); + if (existingHashMatch != null) { - // create a new set info (don't yet add to database) - var beatmapSet = createBeatmapSetInfo(archive); - - // check if this beatmap has already been imported and exit early if so - var existingHashMatch = beatmaps.BeatmapSets.FirstOrDefault(b => b.Hash == beatmapSet.Hash); - if (existingHashMatch != null) - { - Undelete(existingHashMatch); - return existingHashMatch; - } - - // check if a set already exists with the same online id - if (beatmapSet.OnlineBeatmapSetID != null) - { - var existingOnlineId = beatmaps.BeatmapSets.FirstOrDefault(b => b.OnlineBeatmapSetID == beatmapSet.OnlineBeatmapSetID); - if (existingOnlineId != null) - { - Delete(existingOnlineId); - beatmaps.Cleanup(s => s.ID == existingOnlineId.ID); - } - } - - beatmapSet.Files = createFileInfos(archive, files); - beatmapSet.Beatmaps = createBeatmapDifficulties(archive); - - // remove metadata from difficulties where it matches the set - foreach (BeatmapInfo b in beatmapSet.Beatmaps) - if (beatmapSet.Metadata.Equals(b.Metadata)) - b.Metadata = null; - - // import to beatmap store - Import(beatmapSet); - return beatmapSet; + Undelete(existingHashMatch); + return existingHashMatch; } + + // check if a set already exists with the same online id + if (beatmapSet.OnlineBeatmapSetID != null) + { + var existingOnlineId = beatmaps.BeatmapSets.FirstOrDefault(b => b.OnlineBeatmapSetID == beatmapSet.OnlineBeatmapSetID); + if (existingOnlineId != null) + { + Delete(existingOnlineId); + beatmaps.Cleanup(s => s.ID == existingOnlineId.ID); + } + } + + return null; } /// @@ -313,7 +224,7 @@ namespace osu.Game.Beatmaps /// The beatmap set to delete. public void Delete(BeatmapSetInfo beatmapSet) { - using (var usage = contextFactory.GetForWrite()) + using (var usage = ContextFactory.GetForWrite()) { var context = usage.Context; @@ -325,7 +236,7 @@ namespace osu.Game.Beatmaps if (beatmaps.Delete(beatmapSet)) { if (!beatmapSet.Protected) - files.Dereference(beatmapSet.Files.Select(f => f.FileInfo).ToArray()); + Files.Dereference(beatmapSet.Files.Select(f => f.FileInfo).ToArray()); } context.ChangeTracker.AutoDetectChangesEnabled = true; @@ -376,14 +287,14 @@ namespace osu.Game.Beatmaps if (beatmapSet.Protected) return; - using (var usage = contextFactory.GetForWrite()) + using (var usage = ContextFactory.GetForWrite()) { usage.Context.ChangeTracker.AutoDetectChangesEnabled = false; if (!beatmaps.Undelete(beatmapSet)) return; if (!beatmapSet.Protected) - files.Reference(beatmapSet.Files.Select(f => f.FileInfo).ToArray()); + Files.Reference(beatmapSet.Files.Select(f => f.FileInfo).ToArray()); usage.Context.ChangeTracker.AutoDetectChangesEnabled = true; } @@ -415,7 +326,7 @@ namespace osu.Game.Beatmaps if (beatmapInfo.Metadata == null) beatmapInfo.Metadata = beatmapInfo.BeatmapSet.Metadata; - WorkingBeatmap working = new BeatmapManagerWorkingBeatmap(files.Store, beatmapInfo); + WorkingBeatmap working = new BeatmapManagerWorkingBeatmap(Files.Store, beatmapInfo); previous?.TransferTo(working); @@ -519,19 +430,6 @@ namespace osu.Game.Beatmaps notification.State = ProgressNotificationState.Completed; } - /// - /// Creates an from a valid storage path. - /// - /// A file or folder path resolving the beatmap content. - /// A reader giving access to the beatmap's content. - private ArchiveReader getReaderFrom(string path) - { - if (ZipFile.IsZipFile(path)) - // ReSharper disable once InconsistentlySynchronizedField - return new OszArchiveReader(files.Storage.GetStream(path)); - return new LegacyFilesystemReader(path); - } - /// /// Create a SHA-2 hash from the provided archive based on contained beatmap (.osu) file content. /// @@ -546,10 +444,7 @@ namespace osu.Game.Beatmaps return hashable.ComputeSHA2Hash(); } - /// - /// Create a from a provided archive. - /// - private BeatmapSetInfo createBeatmapSetInfo(ArchiveReader reader) + protected override BeatmapSetInfo CreateModel(ArchiveReader reader) { // let's make sure there are actually .osu files to import. string mapName = reader.Filenames.FirstOrDefault(f => f.EndsWith(".osu")); @@ -568,25 +463,6 @@ namespace osu.Game.Beatmaps }; } - /// - /// Create all required s for the provided archive, adding them to the global file store. - /// - private List createFileInfos(ArchiveReader reader, FileStore files) - { - List fileInfos = new List(); - - // import files to manager - foreach (string file in reader.Filenames) - using (Stream s = reader.GetStream(file)) - fileInfos.Add(new BeatmapSetFileInfo - { - Filename = file, - FileInfo = files.Add(s) - }); - - return fileInfos; - } - /// /// Create all required s for the provided archive. /// diff --git a/osu.Game/Beatmaps/BeatmapSetFileInfo.cs b/osu.Game/Beatmaps/BeatmapSetFileInfo.cs index ae4a6772a2..e88af6ed30 100644 --- a/osu.Game/Beatmaps/BeatmapSetFileInfo.cs +++ b/osu.Game/Beatmaps/BeatmapSetFileInfo.cs @@ -3,11 +3,12 @@ using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; +using osu.Game.Database; using osu.Game.IO; namespace osu.Game.Beatmaps { - public class BeatmapSetFileInfo + public class BeatmapSetFileInfo : INamedFileInfo { [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int ID { get; set; } diff --git a/osu.Game/Beatmaps/BeatmapSetInfo.cs b/osu.Game/Beatmaps/BeatmapSetInfo.cs index 982e41c92c..0566807179 100644 --- a/osu.Game/Beatmaps/BeatmapSetInfo.cs +++ b/osu.Game/Beatmaps/BeatmapSetInfo.cs @@ -5,10 +5,11 @@ using System.Collections.Generic; using System.ComponentModel.DataAnnotations.Schema; using System.Linq; using osu.Game.Database; +using osu.Game.IO; namespace osu.Game.Beatmaps { - public class BeatmapSetInfo : IHasPrimaryKey + public class BeatmapSetInfo : IHasPrimaryKey, IHasFiles { [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int ID { get; set; } diff --git a/osu.Game/Beatmaps/BeatmapStore.cs b/osu.Game/Beatmaps/BeatmapStore.cs index 29373c0715..8bc2dd8b13 100644 --- a/osu.Game/Beatmaps/BeatmapStore.cs +++ b/osu.Game/Beatmaps/BeatmapStore.cs @@ -6,13 +6,14 @@ using System.Linq; using System.Linq.Expressions; using Microsoft.EntityFrameworkCore; using osu.Game.Database; +using osu.Game.IO; namespace osu.Game.Beatmaps { /// /// Handles the storage and retrieval of Beatmaps/BeatmapSets to the database backing /// - public class BeatmapStore : DatabaseBackedStore + public class BeatmapStore : DatabaseBackedStore, IAddableStore { public event Action BeatmapSetAdded; public event Action BeatmapSetRemoved; diff --git a/osu.Game/Beatmaps/ICanImportArchives.cs b/osu.Game/Beatmaps/ICanImportArchives.cs new file mode 100644 index 0000000000..246c5d04b2 --- /dev/null +++ b/osu.Game/Beatmaps/ICanImportArchives.cs @@ -0,0 +1,9 @@ +namespace osu.Game.Beatmaps +{ + public interface ICanImportArchives + { + void Import(params string[] paths); + + string[] HandledExtensions { get; } + } +} diff --git a/osu.Game/Database/INamedFileInfo.cs b/osu.Game/Database/INamedFileInfo.cs new file mode 100644 index 0000000000..7922c72974 --- /dev/null +++ b/osu.Game/Database/INamedFileInfo.cs @@ -0,0 +1,13 @@ +using osu.Game.IO; + +namespace osu.Game.Database +{ + /// + /// Represent a join model which gives a filename and scope to a . + /// + public interface INamedFileInfo + { + FileInfo FileInfo { get; set; } + string Filename { get; set; } + } +} diff --git a/osu.Game/IO/IAddableStore.cs b/osu.Game/IO/IAddableStore.cs new file mode 100644 index 0000000000..2452dda3b4 --- /dev/null +++ b/osu.Game/IO/IAddableStore.cs @@ -0,0 +1,14 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +namespace osu.Game.IO +{ + public interface IAddableStore + { + /// + /// Add an object to the store. + /// + /// The object to add. + void Add(T item); + } +} diff --git a/osu.Game/IO/IHasFiles.cs b/osu.Game/IO/IHasFiles.cs new file mode 100644 index 0000000000..df313b4eae --- /dev/null +++ b/osu.Game/IO/IHasFiles.cs @@ -0,0 +1,9 @@ +using System.Collections.Generic; + +namespace osu.Game.IO +{ + public interface IHasFiles + { + List Files { get; set; } + } +} diff --git a/osu.Game/IPC/BeatmapIPCChannel.cs b/osu.Game/IPC/ArchiveImportIPCChannel.cs similarity index 57% rename from osu.Game/IPC/BeatmapIPCChannel.cs rename to osu.Game/IPC/ArchiveImportIPCChannel.cs index 64e5d526e6..a5859e56a4 100644 --- a/osu.Game/IPC/BeatmapIPCChannel.cs +++ b/osu.Game/IPC/ArchiveImportIPCChannel.cs @@ -2,23 +2,25 @@ // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using System.Diagnostics; +using System.IO; +using System.Linq; using System.Threading.Tasks; using osu.Framework.Platform; using osu.Game.Beatmaps; namespace osu.Game.IPC { - public class BeatmapIPCChannel : IpcChannel + public class ArchiveImportIPCChannel : IpcChannel { - private readonly BeatmapManager beatmaps; + private readonly ICanImportArchives importer; - public BeatmapIPCChannel(IIpcHost host, BeatmapManager beatmaps = null) + public ArchiveImportIPCChannel(IIpcHost host, ICanImportArchives importer = null) : base(host) { - this.beatmaps = beatmaps; + this.importer = importer; MessageReceived += msg => { - Debug.Assert(beatmaps != null); + Debug.Assert(importer != null); ImportAsync(msg.Path).ContinueWith(t => { if (t.Exception != null) throw t.Exception; @@ -28,18 +30,19 @@ namespace osu.Game.IPC public async Task ImportAsync(string path) { - if (beatmaps == null) + if (importer == null) { //we want to contact a remote osu! to handle the import. - await SendMessageAsync(new BeatmapImportMessage { Path = path }); + await SendMessageAsync(new ArchiveImportMessage { Path = path }); return; } - beatmaps.Import(path); + if (importer.HandledExtensions.Contains(Path.GetExtension(path))) + importer.Import(path); } } - public class BeatmapImportMessage + public class ArchiveImportMessage { public string Path; } diff --git a/osu.Game/Online/API/APIDownloadRequest.cs b/osu.Game/Online/API/APIDownloadRequest.cs new file mode 100644 index 0000000000..f1cbd1eb0b --- /dev/null +++ b/osu.Game/Online/API/APIDownloadRequest.cs @@ -0,0 +1,30 @@ +using osu.Framework.IO.Network; + +namespace osu.Game.Online.API +{ + public abstract class APIDownloadRequest : APIRequest + { + protected override WebRequest CreateWebRequest() + { + var request = new WebRequest(Uri); + request.DownloadProgress += request_Progress; + return request; + } + + private void request_Progress(long current, long total) => API.Scheduler.Add(delegate { Progress?.Invoke(current, total); }); + + protected APIDownloadRequest() + { + base.Success += onSuccess; + } + + private void onSuccess() + { + Success?.Invoke(WebRequest.ResponseData); + } + + public event APIProgressHandler Progress; + + public new event APISuccessHandler Success; + } +} \ No newline at end of file diff --git a/osu.Game/Online/API/APIRequest.cs b/osu.Game/Online/API/APIRequest.cs index ce6f3c7c7d..35af8eefd7 100644 --- a/osu.Game/Online/API/APIRequest.cs +++ b/osu.Game/Online/API/APIRequest.cs @@ -27,32 +27,6 @@ namespace osu.Game.Online.API public new event APISuccessHandler Success; } - public abstract class APIDownloadRequest : APIRequest - { - protected override WebRequest CreateWebRequest() - { - var request = new WebRequest(Uri); - request.DownloadProgress += request_Progress; - return request; - } - - private void request_Progress(long current, long total) => API.Scheduler.Add(delegate { Progress?.Invoke(current, total); }); - - protected APIDownloadRequest() - { - base.Success += onSuccess; - } - - private void onSuccess() - { - Success?.Invoke(WebRequest.ResponseData); - } - - public event APIProgressHandler Progress; - - public new event APISuccessHandler Success; - } - /// /// AN API request with no specified response type. /// diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index 02801eb81f..189886f5d1 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -243,6 +243,7 @@ + @@ -270,6 +271,7 @@ + @@ -278,9 +280,13 @@ + + + + @@ -470,7 +476,7 @@ - + From d8f84fcca3a40ccbb652b7fa01145f877aec0ae1 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 15 Feb 2018 10:20:23 +0900 Subject: [PATCH 064/544] Give ArchiveReader a filename --- osu.Game/Beatmaps/ArchiveModelImportManager.cs | 2 +- osu.Game/Beatmaps/BeatmapManager.cs | 2 +- osu.Game/Beatmaps/IO/ArchiveReader.cs | 10 ++++++++++ osu.Game/Beatmaps/IO/LegacyFilesystemReader.cs | 2 +- osu.Game/Beatmaps/IO/OszArchiveReader.cs | 3 ++- osu.Game/Screens/Menu/Intro.cs | 2 +- 6 files changed, 16 insertions(+), 5 deletions(-) diff --git a/osu.Game/Beatmaps/ArchiveModelImportManager.cs b/osu.Game/Beatmaps/ArchiveModelImportManager.cs index af0cdad0a3..beb5f47ad2 100644 --- a/osu.Game/Beatmaps/ArchiveModelImportManager.cs +++ b/osu.Game/Beatmaps/ArchiveModelImportManager.cs @@ -174,7 +174,7 @@ namespace osu.Game.Beatmaps private ArchiveReader getReaderFrom(string path) { if (ZipFile.IsZipFile(path)) - return new OszArchiveReader(Files.Storage.GetStream(path)); + return new OszArchiveReader(Files.Storage.GetStream(path), Path.GetFileName(path)); return new LegacyFilesystemReader(path); } } diff --git a/osu.Game/Beatmaps/BeatmapManager.cs b/osu.Game/Beatmaps/BeatmapManager.cs index 0a7bf255c5..3821d16103 100644 --- a/osu.Game/Beatmaps/BeatmapManager.cs +++ b/osu.Game/Beatmaps/BeatmapManager.cs @@ -171,7 +171,7 @@ namespace osu.Game.Beatmaps { // This gets scheduled back to the update thread, but we want the import to run in the background. using (var stream = new MemoryStream(data)) - using (var archive = new OszArchiveReader(stream)) + using (var archive = new OszArchiveReader(stream, beatmapSetInfo.ToString())) Import(archive); downloadNotification.State = ProgressNotificationState.Completed; diff --git a/osu.Game/Beatmaps/IO/ArchiveReader.cs b/osu.Game/Beatmaps/IO/ArchiveReader.cs index 453a03b882..7be03ffb1b 100644 --- a/osu.Game/Beatmaps/IO/ArchiveReader.cs +++ b/osu.Game/Beatmaps/IO/ArchiveReader.cs @@ -17,6 +17,16 @@ namespace osu.Game.Beatmaps.IO public abstract void Dispose(); + /// + /// The name of this archive (usually the containing filename). + /// + public readonly string Name; + + protected ArchiveReader(string name) + { + Name = name; + } + public abstract IEnumerable Filenames { get; } public virtual byte[] Get(string name) diff --git a/osu.Game/Beatmaps/IO/LegacyFilesystemReader.cs b/osu.Game/Beatmaps/IO/LegacyFilesystemReader.cs index 4a85f6f526..e0a54838e0 100644 --- a/osu.Game/Beatmaps/IO/LegacyFilesystemReader.cs +++ b/osu.Game/Beatmaps/IO/LegacyFilesystemReader.cs @@ -15,7 +15,7 @@ namespace osu.Game.Beatmaps.IO { private readonly string path; - public LegacyFilesystemReader(string path) + public LegacyFilesystemReader(string path) : base(Path.GetFileName(path)) { this.path = path; } diff --git a/osu.Game/Beatmaps/IO/OszArchiveReader.cs b/osu.Game/Beatmaps/IO/OszArchiveReader.cs index e5c971889b..fbac5d79f3 100644 --- a/osu.Game/Beatmaps/IO/OszArchiveReader.cs +++ b/osu.Game/Beatmaps/IO/OszArchiveReader.cs @@ -13,7 +13,8 @@ namespace osu.Game.Beatmaps.IO private readonly Stream archiveStream; private readonly ZipFile archive; - public OszArchiveReader(Stream archiveStream) + public OszArchiveReader(Stream archiveStream, string name = null) + : base(name) { this.archiveStream = archiveStream; archive = ZipFile.Read(archiveStream); diff --git a/osu.Game/Screens/Menu/Intro.cs b/osu.Game/Screens/Menu/Intro.cs index 10b08d704d..3298827d25 100644 --- a/osu.Game/Screens/Menu/Intro.cs +++ b/osu.Game/Screens/Menu/Intro.cs @@ -62,7 +62,7 @@ namespace osu.Game.Screens.Menu if (setInfo == null) { // we need to import the default menu background beatmap - setInfo = beatmaps.Import(new OszArchiveReader(game.Resources.GetStream(@"Tracks/circles.osz"))); + setInfo = beatmaps.Import(new OszArchiveReader(game.Resources.GetStream(@"Tracks/circles.osz"), "circles.osz")); setInfo.Protected = true; } } From 6ff63c2f0c8455e9c0d699a9a3ee93ec8944d459 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 15 Feb 2018 12:21:11 +0900 Subject: [PATCH 065/544] Move deletion to ArchiveModelImportManager --- osu.Game/Beatmaps/BeatmapManager.cs | 36 +++------------ osu.Game/Beatmaps/BeatmapSetInfo.cs | 2 +- osu.Game/Beatmaps/BeatmapStore.cs | 24 +++++----- .../ArchiveModelImportManager.cs | 45 +++++++++++++++---- .../ICanImportArchives.cs | 2 +- osu.Game/Database/ISoftDelete.cs | 10 +++++ .../IO/{IAddableStore.cs => IMutableStore.cs} | 4 +- osu.Game/IPC/ArchiveImportIPCChannel.cs | 2 +- osu.Game/Screens/Menu/Intro.cs | 5 +-- osu.Game/osu.Game.csproj | 7 +-- 10 files changed, 76 insertions(+), 61 deletions(-) rename osu.Game/{Beatmaps => Database}/ArchiveModelImportManager.cs (79%) rename osu.Game/{Beatmaps => Database}/ICanImportArchives.cs (78%) create mode 100644 osu.Game/Database/ISoftDelete.cs rename osu.Game/IO/{IAddableStore.cs => IMutableStore.cs} (80%) diff --git a/osu.Game/Beatmaps/BeatmapManager.cs b/osu.Game/Beatmaps/BeatmapManager.cs index 3821d16103..802993bc58 100644 --- a/osu.Game/Beatmaps/BeatmapManager.cs +++ b/osu.Game/Beatmaps/BeatmapManager.cs @@ -97,10 +97,10 @@ namespace osu.Game.Beatmaps b.Metadata = null; } - protected override BeatmapSetInfo CheckForExisting(BeatmapSetInfo beatmapSet) + protected override BeatmapSetInfo CheckForExisting(BeatmapSetInfo model) { // check if this beatmap has already been imported and exit early if so - var existingHashMatch = beatmaps.BeatmapSets.FirstOrDefault(b => b.Hash == beatmapSet.Hash); + var existingHashMatch = beatmaps.BeatmapSets.FirstOrDefault(b => b.Hash == model.Hash); if (existingHashMatch != null) { Undelete(existingHashMatch); @@ -108,9 +108,9 @@ namespace osu.Game.Beatmaps } // check if a set already exists with the same online id - if (beatmapSet.OnlineBeatmapSetID != null) + if (model.OnlineBeatmapSetID != null) { - var existingOnlineId = beatmaps.BeatmapSets.FirstOrDefault(b => b.OnlineBeatmapSetID == beatmapSet.OnlineBeatmapSetID); + var existingOnlineId = beatmaps.BeatmapSets.FirstOrDefault(b => b.OnlineBeatmapSetID == model.OnlineBeatmapSetID); if (existingOnlineId != null) { Delete(existingOnlineId); @@ -217,32 +217,6 @@ namespace osu.Game.Beatmaps /// The beatmap set to update. public void Update(BeatmapSetInfo beatmap) => beatmaps.Update(beatmap); - /// - /// Delete a beatmap from the manager. - /// Is a no-op for already deleted beatmaps. - /// - /// The beatmap set to delete. - public void Delete(BeatmapSetInfo beatmapSet) - { - using (var usage = ContextFactory.GetForWrite()) - { - var context = usage.Context; - - context.ChangeTracker.AutoDetectChangesEnabled = false; - - // re-fetch the beatmap set on the import context. - beatmapSet = context.BeatmapSetInfo.Include(s => s.Files).ThenInclude(f => f.FileInfo).First(s => s.ID == beatmapSet.ID); - - if (beatmaps.Delete(beatmapSet)) - { - if (!beatmapSet.Protected) - Files.Dereference(beatmapSet.Files.Select(f => f.FileInfo).ToArray()); - } - - context.ChangeTracker.AutoDetectChangesEnabled = true; - } - } - /// /// Restore all beatmaps that were previously deleted. /// This will post notifications tracking progress. @@ -351,7 +325,7 @@ namespace osu.Game.Beatmaps /// Returns a list of all usable s. /// /// A list of available . - public List GetAllUsableBeatmapSets() => beatmaps.BeatmapSets.Where(s => !s.DeletePending).ToList(); + public List GetAllUsableBeatmapSets() => beatmaps.BeatmapSets.Where(s => !s.DeletePending && !s.Protected).ToList(); /// /// Perform a lookup query on available s. diff --git a/osu.Game/Beatmaps/BeatmapSetInfo.cs b/osu.Game/Beatmaps/BeatmapSetInfo.cs index 0566807179..79983becb0 100644 --- a/osu.Game/Beatmaps/BeatmapSetInfo.cs +++ b/osu.Game/Beatmaps/BeatmapSetInfo.cs @@ -9,7 +9,7 @@ using osu.Game.IO; namespace osu.Game.Beatmaps { - public class BeatmapSetInfo : IHasPrimaryKey, IHasFiles + public class BeatmapSetInfo : IHasPrimaryKey, IHasFiles, ISoftDelete { [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int ID { get; set; } diff --git a/osu.Game/Beatmaps/BeatmapStore.cs b/osu.Game/Beatmaps/BeatmapStore.cs index 8bc2dd8b13..330b5db853 100644 --- a/osu.Game/Beatmaps/BeatmapStore.cs +++ b/osu.Game/Beatmaps/BeatmapStore.cs @@ -13,7 +13,7 @@ namespace osu.Game.Beatmaps /// /// Handles the storage and retrieval of Beatmaps/BeatmapSets to the database backing /// - public class BeatmapStore : DatabaseBackedStore, IAddableStore + public class BeatmapStore : DatabaseBackedStore, IMutableStore { public event Action BeatmapSetAdded; public event Action BeatmapSetRemoved; @@ -79,7 +79,7 @@ namespace osu.Game.Beatmaps { Refresh(ref beatmapSet, BeatmapSets); - if (beatmapSet.DeletePending) return false; + if (beatmapSet.Protected || beatmapSet.DeletePending) return false; beatmapSet.DeletePending = true; } @@ -178,17 +178,17 @@ namespace osu.Game.Beatmaps } public IQueryable BeatmapSets => ContextFactory.Get().BeatmapSetInfo - .Include(s => s.Metadata) - .Include(s => s.Beatmaps).ThenInclude(s => s.Ruleset) - .Include(s => s.Beatmaps).ThenInclude(b => b.BaseDifficulty) - .Include(s => s.Beatmaps).ThenInclude(b => b.Metadata) - .Include(s => s.Files).ThenInclude(f => f.FileInfo); + .Include(s => s.Metadata) + .Include(s => s.Beatmaps).ThenInclude(s => s.Ruleset) + .Include(s => s.Beatmaps).ThenInclude(b => b.BaseDifficulty) + .Include(s => s.Beatmaps).ThenInclude(b => b.Metadata) + .Include(s => s.Files).ThenInclude(f => f.FileInfo); public IQueryable Beatmaps => ContextFactory.Get().BeatmapInfo - .Include(b => b.BeatmapSet).ThenInclude(s => s.Metadata) - .Include(b => b.BeatmapSet).ThenInclude(s => s.Files).ThenInclude(f => f.FileInfo) - .Include(b => b.Metadata) - .Include(b => b.Ruleset) - .Include(b => b.BaseDifficulty); + .Include(b => b.BeatmapSet).ThenInclude(s => s.Metadata) + .Include(b => b.BeatmapSet).ThenInclude(s => s.Files).ThenInclude(f => f.FileInfo) + .Include(b => b.Metadata) + .Include(b => b.Ruleset) + .Include(b => b.BaseDifficulty); } } diff --git a/osu.Game/Beatmaps/ArchiveModelImportManager.cs b/osu.Game/Database/ArchiveModelImportManager.cs similarity index 79% rename from osu.Game/Beatmaps/ArchiveModelImportManager.cs rename to osu.Game/Database/ArchiveModelImportManager.cs index beb5f47ad2..6b780a2866 100644 --- a/osu.Game/Beatmaps/ArchiveModelImportManager.cs +++ b/osu.Game/Database/ArchiveModelImportManager.cs @@ -1,20 +1,22 @@ using System; using System.Collections.Generic; using System.IO; +using System.Linq; using Ionic.Zip; +using Microsoft.EntityFrameworkCore; using osu.Framework.Logging; using osu.Framework.Platform; +using osu.Game.Beatmaps; using osu.Game.Beatmaps.IO; -using osu.Game.Database; using osu.Game.IO; using osu.Game.IPC; using osu.Game.Overlays.Notifications; using FileInfo = osu.Game.IO.FileInfo; -namespace osu.Game.Beatmaps +namespace osu.Game.Database { public abstract class ArchiveModelImportManager : ICanImportArchives - where TModel : class, IHasFiles + where TModel : class, IHasFiles, IHasPrimaryKey, ISoftDelete where TFileModel : INamedFileInfo, new() { /// @@ -28,12 +30,12 @@ namespace osu.Game.Beatmaps protected readonly IDatabaseContextFactory ContextFactory; - protected readonly IAddableStore ModelStore; + protected readonly IMutableStore ModelStore; // ReSharper disable once NotAccessedField.Local (we should keep a reference to this so it is not finalised) private ArchiveImportIPCChannel ipc; - protected ArchiveModelImportManager(Storage storage, IDatabaseContextFactory contextFactory, IAddableStore modelStore, IIpcHost importHost = null) + protected ArchiveModelImportManager(Storage storage, IDatabaseContextFactory contextFactory, IMutableStore modelStore, IIpcHost importHost = null) { ContextFactory = contextFactory; ModelStore = modelStore; @@ -127,6 +129,31 @@ namespace osu.Game.Beatmaps } } + /// + /// Delete a model from the manager. + /// Is a no-op for already deleted models. + /// + /// The model to delete. + public void Delete(TModel model) + { + using (var usage = ContextFactory.GetForWrite()) + { + var context = usage.Context; + + context.ChangeTracker.AutoDetectChangesEnabled = false; + + // re-fetch the model on the import context. + var foundModel = ContextFactory.Get().Set().Include(s => s.Files).ThenInclude(f => f.FileInfo).First(s => s.ID == model.ID); + + if (foundModel.DeletePending || !CheckCanDelete(foundModel)) return; + + if (ModelStore.Delete(foundModel)) + Files.Dereference(foundModel.Files.Select(f => f.FileInfo).ToArray()); + + context.ChangeTracker.AutoDetectChangesEnabled = true; + } + } + /// /// Create all required s for the provided archive, adding them to the global file store. /// @@ -164,13 +191,15 @@ namespace osu.Game.Beatmaps { } - protected virtual TModel CheckForExisting(TModel beatmapSet) => null; + protected virtual TModel CheckForExisting(TModel model) => null; + + protected virtual bool CheckCanDelete(TModel model) => true; /// /// Creates an from a valid storage path. /// - /// A file or folder path resolving the beatmap content. - /// A reader giving access to the beatmap's content. + /// A file or folder path resolving the archive content. + /// A reader giving access to the archive's content. private ArchiveReader getReaderFrom(string path) { if (ZipFile.IsZipFile(path)) diff --git a/osu.Game/Beatmaps/ICanImportArchives.cs b/osu.Game/Database/ICanImportArchives.cs similarity index 78% rename from osu.Game/Beatmaps/ICanImportArchives.cs rename to osu.Game/Database/ICanImportArchives.cs index 246c5d04b2..0f863f3044 100644 --- a/osu.Game/Beatmaps/ICanImportArchives.cs +++ b/osu.Game/Database/ICanImportArchives.cs @@ -1,4 +1,4 @@ -namespace osu.Game.Beatmaps +namespace osu.Game.Database { public interface ICanImportArchives { diff --git a/osu.Game/Database/ISoftDelete.cs b/osu.Game/Database/ISoftDelete.cs new file mode 100644 index 0000000000..19510421c4 --- /dev/null +++ b/osu.Game/Database/ISoftDelete.cs @@ -0,0 +1,10 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +namespace osu.Game.Database +{ + public interface ISoftDelete + { + bool DeletePending { get; set; } + } +} diff --git a/osu.Game/IO/IAddableStore.cs b/osu.Game/IO/IMutableStore.cs similarity index 80% rename from osu.Game/IO/IAddableStore.cs rename to osu.Game/IO/IMutableStore.cs index 2452dda3b4..ced1b29316 100644 --- a/osu.Game/IO/IAddableStore.cs +++ b/osu.Game/IO/IMutableStore.cs @@ -3,12 +3,14 @@ namespace osu.Game.IO { - public interface IAddableStore + public interface IMutableStore { /// /// Add an object to the store. /// /// The object to add. void Add(T item); + + bool Delete(T item); } } diff --git a/osu.Game/IPC/ArchiveImportIPCChannel.cs b/osu.Game/IPC/ArchiveImportIPCChannel.cs index a5859e56a4..6e9787ca5a 100644 --- a/osu.Game/IPC/ArchiveImportIPCChannel.cs +++ b/osu.Game/IPC/ArchiveImportIPCChannel.cs @@ -6,7 +6,7 @@ using System.IO; using System.Linq; using System.Threading.Tasks; using osu.Framework.Platform; -using osu.Game.Beatmaps; +using osu.Game.Database; namespace osu.Game.IPC { diff --git a/osu.Game/Screens/Menu/Intro.cs b/osu.Game/Screens/Menu/Intro.cs index 3298827d25..e0467d8f84 100644 --- a/osu.Game/Screens/Menu/Intro.cs +++ b/osu.Game/Screens/Menu/Intro.cs @@ -63,7 +63,9 @@ namespace osu.Game.Screens.Menu { // we need to import the default menu background beatmap setInfo = beatmaps.Import(new OszArchiveReader(game.Resources.GetStream(@"Tracks/circles.osz"), "circles.osz")); + setInfo.Protected = true; + beatmaps.Update(setInfo); } } @@ -73,9 +75,6 @@ namespace osu.Game.Screens.Menu welcome = audio.Sample.Get(@"welcome"); seeya = audio.Sample.Get(@"seeya"); - - if (setInfo.Protected) - beatmaps.Delete(setInfo); } protected override void OnEntering(Screen last) diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index 189886f5d1..af2b1dfae5 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -243,7 +243,6 @@ - @@ -271,20 +270,22 @@ - + + + - + From d340509b1d97fee381ab21f9cf47cc31a762934c Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 15 Feb 2018 12:56:22 +0900 Subject: [PATCH 066/544] Move ArchiveReaders to a more global namespace Also moves delete and action logic to a shared implementation --- .../Beatmaps/IO/OszArchiveReaderTest.cs | 8 +- osu.Game/Beatmaps/BeatmapManager.cs | 81 +---------- osu.Game/Beatmaps/BeatmapStore.cs | 88 +----------- ...mportManager.cs => ArchiveModelManager.cs} | 130 ++++++++++++++---- .../Database/MutableDatabaseBackedStore.cs | 76 ++++++++++ .../IO => IO/Archives}/ArchiveReader.cs | 2 +- .../Archives}/LegacyFilesystemReader.cs | 4 +- .../Archives/ZipArchiveReader.cs} | 6 +- osu.Game/IO/IMutableStore.cs | 16 --- osu.Game/Overlays/BeatmapSet/Header.cs | 4 +- osu.Game/Overlays/DirectOverlay.cs | 2 +- osu.Game/Overlays/Music/PlaylistOverlay.cs | 4 +- osu.Game/Screens/Menu/Intro.cs | 4 +- osu.Game/Screens/Select/SongSelect.cs | 8 +- osu.Game/osu.Game.csproj | 10 +- 15 files changed, 210 insertions(+), 233 deletions(-) rename osu.Game/Database/{ArchiveModelImportManager.cs => ArchiveModelManager.cs} (57%) create mode 100644 osu.Game/Database/MutableDatabaseBackedStore.cs rename osu.Game/{Beatmaps/IO => IO/Archives}/ArchiveReader.cs (94%) rename osu.Game/{Beatmaps/IO => IO/Archives}/LegacyFilesystemReader.cs (93%) rename osu.Game/{Beatmaps/IO/OszArchiveReader.cs => IO/Archives/ZipArchiveReader.cs} (86%) delete mode 100644 osu.Game/IO/IMutableStore.cs diff --git a/osu.Game.Tests/Beatmaps/IO/OszArchiveReaderTest.cs b/osu.Game.Tests/Beatmaps/IO/OszArchiveReaderTest.cs index 44eb385e22..7a1c6d9b89 100644 --- a/osu.Game.Tests/Beatmaps/IO/OszArchiveReaderTest.cs +++ b/osu.Game.Tests/Beatmaps/IO/OszArchiveReaderTest.cs @@ -5,9 +5,9 @@ using System.IO; using System.Linq; using NUnit.Framework; using osu.Game.Beatmaps; -using osu.Game.Beatmaps.IO; using osu.Game.Tests.Resources; using osu.Game.Beatmaps.Formats; +using osu.Game.IO.Archives; namespace osu.Game.Tests.Beatmaps.IO { @@ -19,7 +19,7 @@ namespace osu.Game.Tests.Beatmaps.IO { using (var osz = Resource.OpenResource("Beatmaps.241526 Soleily - Renatus.osz")) { - var reader = new OszArchiveReader(osz); + var reader = new ZipArchiveReader(osz); string[] expected = { "Soleily - Renatus (Deif) [Platter].osu", @@ -46,7 +46,7 @@ namespace osu.Game.Tests.Beatmaps.IO { using (var osz = Resource.OpenResource("Beatmaps.241526 Soleily - Renatus.osz")) { - var reader = new OszArchiveReader(osz); + var reader = new ZipArchiveReader(osz); BeatmapMetadata meta; using (var stream = new StreamReader(reader.GetStream("Soleily - Renatus (Deif) [Platter].osu"))) @@ -71,7 +71,7 @@ namespace osu.Game.Tests.Beatmaps.IO { using (var osz = Resource.OpenResource("Beatmaps.241526 Soleily - Renatus.osz")) { - var reader = new OszArchiveReader(osz); + var reader = new ZipArchiveReader(osz); using (var stream = new StreamReader( reader.GetStream("Soleily - Renatus (Deif) [Platter].osu"))) { diff --git a/osu.Game/Beatmaps/BeatmapManager.cs b/osu.Game/Beatmaps/BeatmapManager.cs index 802993bc58..8bc1f72c1f 100644 --- a/osu.Game/Beatmaps/BeatmapManager.cs +++ b/osu.Game/Beatmaps/BeatmapManager.cs @@ -12,9 +12,9 @@ using osu.Framework.Extensions; using osu.Framework.Logging; using osu.Framework.Platform; using osu.Game.Beatmaps.Formats; -using osu.Game.Beatmaps.IO; using osu.Game.Database; using osu.Game.Graphics; +using osu.Game.IO.Archives; using osu.Game.Online.API; using osu.Game.Online.API.Requests; using osu.Game.Overlays.Notifications; @@ -25,23 +25,13 @@ namespace osu.Game.Beatmaps /// /// Handles the storage and retrieval of Beatmaps/WorkingBeatmaps. /// - public partial class BeatmapManager : ArchiveModelImportManager + public partial class BeatmapManager : ArchiveModelManager { - /// - /// Fired when a new becomes available in the database. - /// - public event Action BeatmapSetAdded; - /// /// Fired when a single difficulty has been hidden. /// public event Action BeatmapHidden; - /// - /// Fired when a is removed from the database. - /// - public event Action BeatmapSetRemoved; - /// /// Fired when a single difficulty has been restored. /// @@ -76,8 +66,6 @@ namespace osu.Game.Beatmaps : base(storage, contextFactory, new BeatmapStore(contextFactory), importHost) { beatmaps = (BeatmapStore)ModelStore; - beatmaps.BeatmapSetAdded += s => BeatmapSetAdded?.Invoke(s); - beatmaps.BeatmapSetRemoved += s => BeatmapSetRemoved?.Invoke(s); beatmaps.BeatmapHidden += b => BeatmapHidden?.Invoke(b); beatmaps.BeatmapRestored += b => BeatmapRestored?.Invoke(b); @@ -121,12 +109,6 @@ namespace osu.Game.Beatmaps return null; } - /// - /// Import a beatmap from a . - /// - /// The beatmap to be imported. - public void Import(BeatmapSetInfo beatmapSet) => beatmaps.Add(beatmapSet); - /// /// Downloads a beatmap. /// This will post notifications tracking progress. @@ -171,7 +153,7 @@ namespace osu.Game.Beatmaps { // This gets scheduled back to the update thread, but we want the import to run in the background. using (var stream = new MemoryStream(data)) - using (var archive = new OszArchiveReader(stream, beatmapSetInfo.ToString())) + using (var archive = new ZipArchiveReader(stream, beatmapSetInfo.ToString())) Import(archive); downloadNotification.State = ProgressNotificationState.Completed; @@ -217,63 +199,6 @@ namespace osu.Game.Beatmaps /// The beatmap set to update. public void Update(BeatmapSetInfo beatmap) => beatmaps.Update(beatmap); - /// - /// Restore all beatmaps that were previously deleted. - /// This will post notifications tracking progress. - /// - public void UndeleteAll() - { - var deleteMaps = QueryBeatmapSets(bs => bs.DeletePending).ToList(); - - if (!deleteMaps.Any()) return; - - var notification = new ProgressNotification - { - CompletionText = "Restored all deleted beatmaps!", - Progress = 0, - State = ProgressNotificationState.Active, - }; - - PostNotification?.Invoke(notification); - - int i = 0; - - foreach (var bs in deleteMaps) - { - if (notification.State == ProgressNotificationState.Cancelled) - // user requested abort - return; - - notification.Text = $"Restoring ({i} of {deleteMaps.Count})"; - notification.Progress = (float)++i / deleteMaps.Count; - Undelete(bs); - } - - notification.State = ProgressNotificationState.Completed; - } - - /// - /// Restore a beatmap that was previously deleted. Is a no-op if the beatmap is not in a deleted state, or has its protected flag set. - /// - /// The beatmap to restore - public void Undelete(BeatmapSetInfo beatmapSet) - { - if (beatmapSet.Protected) - return; - - using (var usage = ContextFactory.GetForWrite()) - { - usage.Context.ChangeTracker.AutoDetectChangesEnabled = false; - - if (!beatmaps.Undelete(beatmapSet)) return; - - if (!beatmapSet.Protected) - Files.Reference(beatmapSet.Files.Select(f => f.FileInfo).ToArray()); - - usage.Context.ChangeTracker.AutoDetectChangesEnabled = true; - } - } - /// /// Delete a beatmap difficulty. /// diff --git a/osu.Game/Beatmaps/BeatmapStore.cs b/osu.Game/Beatmaps/BeatmapStore.cs index 330b5db853..3e4840f4e1 100644 --- a/osu.Game/Beatmaps/BeatmapStore.cs +++ b/osu.Game/Beatmaps/BeatmapStore.cs @@ -6,18 +6,14 @@ using System.Linq; using System.Linq.Expressions; using Microsoft.EntityFrameworkCore; using osu.Game.Database; -using osu.Game.IO; namespace osu.Game.Beatmaps { /// /// Handles the storage and retrieval of Beatmaps/BeatmapSets to the database backing /// - public class BeatmapStore : DatabaseBackedStore, IMutableStore + public class BeatmapStore : MutableDatabaseBackedStore { - public event Action BeatmapSetAdded; - public event Action BeatmapSetRemoved; - public event Action BeatmapHidden; public event Action BeatmapRestored; @@ -26,88 +22,6 @@ namespace osu.Game.Beatmaps { } - /// - /// Add a to the database. - /// - /// The beatmap to add. - public void Add(BeatmapSetInfo beatmapSet) - { - using (var usage = ContextFactory.GetForWrite()) - { - var context = usage.Context; - - foreach (var beatmap in beatmapSet.Beatmaps.Where(b => b.Metadata != null)) - { - // If we detect a new metadata object it'll be attached to the current context so it can be reused - // to prevent duplicate entries when persisting. To accomplish this we look in the cache (.Local) - // of the corresponding table (.Set()) for matching entries to our criteria. - var contextMetadata = context.Set().Local.SingleOrDefault(e => e.Equals(beatmap.Metadata)); - if (contextMetadata != null) - beatmap.Metadata = contextMetadata; - else - context.BeatmapMetadata.Attach(beatmap.Metadata); - } - - context.BeatmapSetInfo.Attach(beatmapSet); - - BeatmapSetAdded?.Invoke(beatmapSet); - } - } - - /// - /// Update a in the database. TODO: This only supports very basic updates currently. - /// - /// The beatmap to update. - public void Update(BeatmapSetInfo beatmapSet) - { - BeatmapSetRemoved?.Invoke(beatmapSet); - - using (var usage = ContextFactory.GetForWrite()) - usage.Context.BeatmapSetInfo.Update(beatmapSet); - - BeatmapSetAdded?.Invoke(beatmapSet); - } - - /// - /// Delete a from the database. - /// - /// The beatmap to delete. - /// Whether the beatmap's was changed. - public bool Delete(BeatmapSetInfo beatmapSet) - { - using (ContextFactory.GetForWrite()) - { - Refresh(ref beatmapSet, BeatmapSets); - - if (beatmapSet.Protected || beatmapSet.DeletePending) return false; - - beatmapSet.DeletePending = true; - } - - BeatmapSetRemoved?.Invoke(beatmapSet); - return true; - } - - /// - /// Restore a previously deleted . - /// - /// The beatmap to restore. - /// Whether the beatmap's was changed. - public bool Undelete(BeatmapSetInfo beatmapSet) - { - using (ContextFactory.GetForWrite()) - { - Refresh(ref beatmapSet, BeatmapSets); - - if (!beatmapSet.DeletePending) return false; - - beatmapSet.DeletePending = false; - } - - BeatmapSetAdded?.Invoke(beatmapSet); - return true; - } - /// /// Hide a in the database. /// diff --git a/osu.Game/Database/ArchiveModelImportManager.cs b/osu.Game/Database/ArchiveModelManager.cs similarity index 57% rename from osu.Game/Database/ArchiveModelImportManager.cs rename to osu.Game/Database/ArchiveModelManager.cs index 6b780a2866..9c558a6c12 100644 --- a/osu.Game/Database/ArchiveModelImportManager.cs +++ b/osu.Game/Database/ArchiveModelManager.cs @@ -6,16 +6,21 @@ using Ionic.Zip; using Microsoft.EntityFrameworkCore; using osu.Framework.Logging; using osu.Framework.Platform; -using osu.Game.Beatmaps; -using osu.Game.Beatmaps.IO; using osu.Game.IO; +using osu.Game.IO.Archives; using osu.Game.IPC; using osu.Game.Overlays.Notifications; using FileInfo = osu.Game.IO.FileInfo; namespace osu.Game.Database { - public abstract class ArchiveModelImportManager : ICanImportArchives + /// + /// Encapsulates a model store class to give it import functionality. + /// Adds cross-functionality with to give access to the central file store for the provided model. + /// + /// The model type. + /// The associated file join type. + public abstract class ArchiveModelManager : ICanImportArchives where TModel : class, IHasFiles, IHasPrimaryKey, ISoftDelete where TFileModel : INamedFileInfo, new() { @@ -24,21 +29,35 @@ namespace osu.Game.Database /// public Action PostNotification { protected get; set; } + /// + /// Fired when a new becomes available in the database. + /// + public event Action ItemAdded; + + /// + /// Fired when a is removed from the database. + /// + public event Action ItemRemoved; + public virtual string[] HandledExtensions => new[] { ".zip" }; protected readonly FileStore Files; protected readonly IDatabaseContextFactory ContextFactory; - protected readonly IMutableStore ModelStore; + protected readonly MutableDatabaseBackedStore ModelStore; // ReSharper disable once NotAccessedField.Local (we should keep a reference to this so it is not finalised) private ArchiveImportIPCChannel ipc; - protected ArchiveModelImportManager(Storage storage, IDatabaseContextFactory contextFactory, IMutableStore modelStore, IIpcHost importHost = null) + protected ArchiveModelManager(Storage storage, IDatabaseContextFactory contextFactory, MutableDatabaseBackedStore modelStore, IIpcHost importHost = null) { ContextFactory = contextFactory; + ModelStore = modelStore; + ModelStore.ItemAdded += s => ItemAdded?.Invoke(s); + ModelStore.ItemRemoved += s => ItemRemoved?.Invoke(s); + Files = new FileStore(contextFactory, storage); if (importHost != null) @@ -46,10 +65,10 @@ namespace osu.Game.Database } /// - /// Import one or more from filesystem . + /// Import one or more items from filesystem . /// This will post notifications tracking progress. /// - /// One or more beatmap locations on disk. + /// One or more archive locations on disk. public void Import(params string[] paths) { var notification = new ProgressNotification @@ -80,7 +99,7 @@ namespace osu.Game.Database notification.Progress = (float)++i / paths.Length; // We may or may not want to delete the file depending on where it is stored. - // e.g. reconstructing/repairing database with beatmaps from default storage. + // e.g. reconstructing/repairing database with items from default storage. // Also, not always a single file, i.e. for LegacyFilesystemReader // TODO: Add a check to prevent files from storage to be deleted. try @@ -96,7 +115,7 @@ namespace osu.Game.Database catch (Exception e) { e = e.InnerException ?? e; - Logger.Error(e, $@"Could not import beatmap set ({Path.GetFileName(path)})"); + Logger.Error(e, $@"Could not import ({Path.GetFileName(path)})"); } } @@ -104,37 +123,43 @@ namespace osu.Game.Database } /// - /// Import a model from an . + /// Import an item from an . /// - /// The beatmap to be imported. + /// The archive to be imported. public TModel Import(ArchiveReader archive) { using (ContextFactory.GetForWrite()) // used to share a context for full import. keep in mind this will block all writes. { - // create a new set info (don't yet add to database) - var model = CreateModel(archive); + // create a new model (don't yet add to database) + var item = CreateModel(archive); - var existing = CheckForExisting(model); + var existing = CheckForExisting(item); if (existing != null) return existing; - model.Files = createFileInfos(archive, Files); + item.Files = createFileInfos(archive, Files); - Populate(model, archive); + Populate(item, archive); // import to store - ModelStore.Add(model); + ModelStore.Add(item); - return model; + return item; } } /// - /// Delete a model from the manager. - /// Is a no-op for already deleted models. + /// Import an item from a . /// - /// The model to delete. - public void Delete(TModel model) + /// The model to be imported. + public void Import(TModel item) => ModelStore.Add(item); + + /// + /// Delete an item from the manager. + /// Is a no-op for already deleted items. + /// + /// The item to delete. + public void Delete(TModel item) { using (var usage = ContextFactory.GetForWrite()) { @@ -143,9 +168,9 @@ namespace osu.Game.Database context.ChangeTracker.AutoDetectChangesEnabled = false; // re-fetch the model on the import context. - var foundModel = ContextFactory.Get().Set().Include(s => s.Files).ThenInclude(f => f.FileInfo).First(s => s.ID == model.ID); + var foundModel = queryModel().Include(s => s.Files).ThenInclude(f => f.FileInfo).First(s => s.ID == item.ID); - if (foundModel.DeletePending || !CheckCanDelete(foundModel)) return; + if (foundModel.DeletePending) return; if (ModelStore.Delete(foundModel)) Files.Dereference(foundModel.Files.Select(f => f.FileInfo).ToArray()); @@ -154,6 +179,59 @@ namespace osu.Game.Database } } + /// + /// Restore all items that were previously deleted. + /// This will post notifications tracking progress. + /// + public void UndeleteAll() + { + var deletedItems = queryModel().Where(m => m.DeletePending).ToList(); + + if (!deletedItems.Any()) return; + + var notification = new ProgressNotification + { + CompletionText = "Restored all deleted items!", + Progress = 0, + State = ProgressNotificationState.Active, + }; + + PostNotification?.Invoke(notification); + + int i = 0; + + foreach (var item in deletedItems) + { + if (notification.State == ProgressNotificationState.Cancelled) + // user requested abort + return; + + notification.Text = $"Restoring ({i} of {deletedItems.Count})"; + notification.Progress = (float)++i / deletedItems.Count; + Undelete(item); + } + + notification.State = ProgressNotificationState.Completed; + } + + /// + /// Restore an item that was previously deleted. Is a no-op if the item is not in a deleted state, or has its protected flag set. + /// + /// The item to restore + public void Undelete(TModel item) + { + using (var usage = ContextFactory.GetForWrite()) + { + usage.Context.ChangeTracker.AutoDetectChangesEnabled = false; + + if (!ModelStore.Undelete(item)) return; + + Files.Reference(item.Files.Select(f => f.FileInfo).ToArray()); + + usage.Context.ChangeTracker.AutoDetectChangesEnabled = true; + } + } + /// /// Create all required s for the provided archive, adding them to the global file store. /// @@ -193,7 +271,7 @@ namespace osu.Game.Database protected virtual TModel CheckForExisting(TModel model) => null; - protected virtual bool CheckCanDelete(TModel model) => true; + private DbSet queryModel() => ContextFactory.Get().Set(); /// /// Creates an from a valid storage path. @@ -203,7 +281,7 @@ namespace osu.Game.Database private ArchiveReader getReaderFrom(string path) { if (ZipFile.IsZipFile(path)) - return new OszArchiveReader(Files.Storage.GetStream(path), Path.GetFileName(path)); + return new ZipArchiveReader(Files.Storage.GetStream(path), Path.GetFileName(path)); return new LegacyFilesystemReader(path); } } diff --git a/osu.Game/Database/MutableDatabaseBackedStore.cs b/osu.Game/Database/MutableDatabaseBackedStore.cs new file mode 100644 index 0000000000..c6af1aa475 --- /dev/null +++ b/osu.Game/Database/MutableDatabaseBackedStore.cs @@ -0,0 +1,76 @@ +using System; +using osu.Framework.Platform; + +namespace osu.Game.Database +{ + /// + /// A typed store which supports basic addition, deletion and updating for soft-deletable models. + /// + /// The databased model. + public abstract class MutableDatabaseBackedStore : DatabaseBackedStore + where T : class, IHasPrimaryKey, ISoftDelete + { + public event Action ItemAdded; + public event Action ItemRemoved; + + protected MutableDatabaseBackedStore(IDatabaseContextFactory contextFactory, Storage storage = null) + : base(contextFactory, storage) + { + } + + public void Add(T item) + { + using (var usage = ContextFactory.GetForWrite()) + { + var context = usage.Context; + context.Attach(item); + } + + ItemAdded?.Invoke(item); + } + + /// + /// Update a in the database. + /// + /// The item to update. + public void Update(T item) + { + ItemRemoved?.Invoke(item); + + using (var usage = ContextFactory.GetForWrite()) + usage.Context.Update(item); + + ItemAdded?.Invoke(item); + } + + public bool Delete(T item) + { + using (ContextFactory.GetForWrite()) + { + Refresh(ref item); + + if (item.DeletePending) return false; + + item.DeletePending = true; + } + + ItemRemoved?.Invoke(item); + return true; + } + + public bool Undelete(T item) + { + using (ContextFactory.GetForWrite()) + { + Refresh(ref item); + + if (!item.DeletePending) return false; + + item.DeletePending = false; + } + + ItemAdded?.Invoke(item); + return true; + } + } +} diff --git a/osu.Game/Beatmaps/IO/ArchiveReader.cs b/osu.Game/IO/Archives/ArchiveReader.cs similarity index 94% rename from osu.Game/Beatmaps/IO/ArchiveReader.cs rename to osu.Game/IO/Archives/ArchiveReader.cs index 7be03ffb1b..351a6dff39 100644 --- a/osu.Game/Beatmaps/IO/ArchiveReader.cs +++ b/osu.Game/IO/Archives/ArchiveReader.cs @@ -6,7 +6,7 @@ using System.Collections.Generic; using System.IO; using osu.Framework.IO.Stores; -namespace osu.Game.Beatmaps.IO +namespace osu.Game.IO.Archives { public abstract class ArchiveReader : IDisposable, IResourceStore { diff --git a/osu.Game/Beatmaps/IO/LegacyFilesystemReader.cs b/osu.Game/IO/Archives/LegacyFilesystemReader.cs similarity index 93% rename from osu.Game/Beatmaps/IO/LegacyFilesystemReader.cs rename to osu.Game/IO/Archives/LegacyFilesystemReader.cs index e0a54838e0..d6d80783db 100644 --- a/osu.Game/Beatmaps/IO/LegacyFilesystemReader.cs +++ b/osu.Game/IO/Archives/LegacyFilesystemReader.cs @@ -1,12 +1,12 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE -using osu.Framework.IO.File; using System.Collections.Generic; using System.IO; using System.Linq; +using osu.Framework.IO.File; -namespace osu.Game.Beatmaps.IO +namespace osu.Game.IO.Archives { /// /// Reads an extracted legacy beatmap from disk. diff --git a/osu.Game/Beatmaps/IO/OszArchiveReader.cs b/osu.Game/IO/Archives/ZipArchiveReader.cs similarity index 86% rename from osu.Game/Beatmaps/IO/OszArchiveReader.cs rename to osu.Game/IO/Archives/ZipArchiveReader.cs index fbac5d79f3..a772382b5e 100644 --- a/osu.Game/Beatmaps/IO/OszArchiveReader.cs +++ b/osu.Game/IO/Archives/ZipArchiveReader.cs @@ -6,14 +6,14 @@ using System.IO; using System.Linq; using Ionic.Zip; -namespace osu.Game.Beatmaps.IO +namespace osu.Game.IO.Archives { - public sealed class OszArchiveReader : ArchiveReader + public sealed class ZipArchiveReader : ArchiveReader { private readonly Stream archiveStream; private readonly ZipFile archive; - public OszArchiveReader(Stream archiveStream, string name = null) + public ZipArchiveReader(Stream archiveStream, string name = null) : base(name) { this.archiveStream = archiveStream; diff --git a/osu.Game/IO/IMutableStore.cs b/osu.Game/IO/IMutableStore.cs deleted file mode 100644 index ced1b29316..0000000000 --- a/osu.Game/IO/IMutableStore.cs +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright (c) 2007-2018 ppy Pty Ltd . -// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE - -namespace osu.Game.IO -{ - public interface IMutableStore - { - /// - /// Add an object to the store. - /// - /// The object to add. - void Add(T item); - - bool Delete(T item); - } -} diff --git a/osu.Game/Overlays/BeatmapSet/Header.cs b/osu.Game/Overlays/BeatmapSet/Header.cs index 36b6a9964a..3ce0dfee31 100644 --- a/osu.Game/Overlays/BeatmapSet/Header.cs +++ b/osu.Game/Overlays/BeatmapSet/Header.cs @@ -223,13 +223,13 @@ namespace osu.Game.Overlays.BeatmapSet tabsBg.Colour = colours.Gray3; this.beatmaps = beatmaps; - beatmaps.BeatmapSetAdded += handleBeatmapAdd; + beatmaps.ItemAdded += handleBeatmapAdd; } protected override void Dispose(bool isDisposing) { base.Dispose(isDisposing); - if (beatmaps != null) beatmaps.BeatmapSetAdded -= handleBeatmapAdd; + if (beatmaps != null) beatmaps.ItemAdded -= handleBeatmapAdd; } private void handleBeatmapAdd(BeatmapSetInfo beatmap) diff --git a/osu.Game/Overlays/DirectOverlay.cs b/osu.Game/Overlays/DirectOverlay.cs index 05b5bba09c..8d8a4aebaa 100644 --- a/osu.Game/Overlays/DirectOverlay.cs +++ b/osu.Game/Overlays/DirectOverlay.cs @@ -185,7 +185,7 @@ namespace osu.Game.Overlays resultCountsContainer.Colour = colours.Yellow; - beatmaps.BeatmapSetAdded += setAdded; + beatmaps.ItemAdded += setAdded; } private void setAdded(BeatmapSetInfo set) diff --git a/osu.Game/Overlays/Music/PlaylistOverlay.cs b/osu.Game/Overlays/Music/PlaylistOverlay.cs index 2125984785..ac7ec6257b 100644 --- a/osu.Game/Overlays/Music/PlaylistOverlay.cs +++ b/osu.Game/Overlays/Music/PlaylistOverlay.cs @@ -74,8 +74,8 @@ namespace osu.Game.Overlays.Music }, }; - beatmaps.BeatmapSetAdded += list.AddBeatmapSet; - beatmaps.BeatmapSetRemoved += list.RemoveBeatmapSet; + beatmaps.ItemAdded += list.AddBeatmapSet; + beatmaps.ItemRemoved += list.RemoveBeatmapSet; list.BeatmapSets = beatmaps.GetAllUsableBeatmapSets(); diff --git a/osu.Game/Screens/Menu/Intro.cs b/osu.Game/Screens/Menu/Intro.cs index e0467d8f84..ce3c93ebcf 100644 --- a/osu.Game/Screens/Menu/Intro.cs +++ b/osu.Game/Screens/Menu/Intro.cs @@ -10,8 +10,8 @@ using osu.Framework.Screens; using osu.Framework.Graphics; using osu.Framework.MathUtils; using osu.Game.Beatmaps; -using osu.Game.Beatmaps.IO; using osu.Game.Configuration; +using osu.Game.IO.Archives; using osu.Game.Screens.Backgrounds; using OpenTK; using OpenTK.Graphics; @@ -62,7 +62,7 @@ namespace osu.Game.Screens.Menu if (setInfo == null) { // we need to import the default menu background beatmap - setInfo = beatmaps.Import(new OszArchiveReader(game.Resources.GetStream(@"Tracks/circles.osz"), "circles.osz")); + setInfo = beatmaps.Import(new ZipArchiveReader(game.Resources.GetStream(@"Tracks/circles.osz"), "circles.osz")); setInfo.Protected = true; beatmaps.Update(setInfo); diff --git a/osu.Game/Screens/Select/SongSelect.cs b/osu.Game/Screens/Select/SongSelect.cs index 2421a4fdfe..f35768d933 100644 --- a/osu.Game/Screens/Select/SongSelect.cs +++ b/osu.Game/Screens/Select/SongSelect.cs @@ -197,8 +197,8 @@ namespace osu.Game.Screens.Select if (osu != null) Ruleset.BindTo(osu.Ruleset); - this.beatmaps.BeatmapSetAdded += onBeatmapSetAdded; - this.beatmaps.BeatmapSetRemoved += onBeatmapSetRemoved; + this.beatmaps.ItemAdded += onBeatmapSetAdded; + this.beatmaps.ItemRemoved += onBeatmapSetRemoved; this.beatmaps.BeatmapHidden += onBeatmapHidden; this.beatmaps.BeatmapRestored += onBeatmapRestored; @@ -401,8 +401,8 @@ namespace osu.Game.Screens.Select if (beatmaps != null) { - beatmaps.BeatmapSetAdded -= onBeatmapSetAdded; - beatmaps.BeatmapSetRemoved -= onBeatmapSetRemoved; + beatmaps.ItemAdded -= onBeatmapSetAdded; + beatmaps.ItemRemoved -= onBeatmapSetRemoved; beatmaps.BeatmapHidden -= onBeatmapHidden; beatmaps.BeatmapRestored -= onBeatmapRestored; } diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index af2b1dfae5..91aaf9c092 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -274,7 +274,7 @@ - + @@ -282,10 +282,13 @@ + - + + + @@ -378,8 +381,6 @@ - - @@ -394,7 +395,6 @@ - From d3dd31dadb0d8312475bc2fc82c4595340217582 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 15 Feb 2018 13:30:17 +0900 Subject: [PATCH 067/544] Make deletion and purging logic even more global --- .../Visual/TestCasePlaySongSelect.cs | 2 +- osu.Game/Beatmaps/BeatmapManager.cs | 52 +------------- osu.Game/Beatmaps/BeatmapStore.cs | 38 ++++------- osu.Game/Database/ArchiveModelManager.cs | 68 ++++++++++++++++--- osu.Game/Database/DatabaseBackedStore.cs | 2 +- .../Database/MutableDatabaseBackedStore.cs | 35 ++++++++++ osu.Game/IO/FileStore.cs | 2 +- osu.Game/OsuGameBase.cs | 2 +- .../Sections/Maintenance/GeneralSettings.cs | 4 +- 9 files changed, 114 insertions(+), 91 deletions(-) diff --git a/osu.Game.Tests/Visual/TestCasePlaySongSelect.cs b/osu.Game.Tests/Visual/TestCasePlaySongSelect.cs index 8bb0d152f6..13b2be9fdb 100644 --- a/osu.Game.Tests/Visual/TestCasePlaySongSelect.cs +++ b/osu.Game.Tests/Visual/TestCasePlaySongSelect.cs @@ -75,7 +75,7 @@ namespace osu.Game.Tests.Visual { if (deleteMaps) { - manager.DeleteAll(); + manager.Delete(manager.GetAllUsableBeatmapSets()); game.Beatmap.SetDefault(); } diff --git a/osu.Game/Beatmaps/BeatmapManager.cs b/osu.Game/Beatmaps/BeatmapManager.cs index 8bc1f72c1f..4a6b6909b9 100644 --- a/osu.Game/Beatmaps/BeatmapManager.cs +++ b/osu.Game/Beatmaps/BeatmapManager.cs @@ -71,8 +71,6 @@ namespace osu.Game.Beatmaps this.rulesets = rulesets; this.api = api; - - beatmaps.Cleanup(); } protected override void Populate(BeatmapSetInfo model, ArchiveReader archive) @@ -102,7 +100,7 @@ namespace osu.Game.Beatmaps if (existingOnlineId != null) { Delete(existingOnlineId); - beatmaps.Cleanup(s => s.ID == existingOnlineId.ID); + beatmaps.PurgeDeletable(s => s.ID == existingOnlineId.ID); } } @@ -193,12 +191,6 @@ namespace osu.Game.Beatmaps /// The object if it exists, or null. public DownloadBeatmapSetRequest GetExistingDownload(BeatmapSetInfo beatmap) => currentDownloads.Find(d => d.BeatmapSet.OnlineBeatmapSetID == beatmap.OnlineBeatmapSetID); - /// - /// Update a BeatmapSetInfo with all changes. TODO: This only supports very basic updates currently. - /// - /// The beatmap set to update. - public void Update(BeatmapSetInfo beatmap) => beatmaps.Update(beatmap); - /// /// Delete a beatmap difficulty. /// @@ -239,13 +231,6 @@ namespace osu.Game.Beatmaps /// The first result for the provided query, or null if no results were found. public BeatmapSetInfo QueryBeatmapSet(Expression> query) => beatmaps.BeatmapSets.AsNoTracking().FirstOrDefault(query); - /// - /// Refresh an existing instance of a from the store. - /// - /// A stale instance. - /// A fresh instance. - public BeatmapSetInfo Refresh(BeatmapSetInfo beatmapSet) => QueryBeatmapSet(s => s.ID == beatmapSet.ID); - /// /// Returns a list of all usable s. /// @@ -294,41 +279,6 @@ namespace osu.Game.Beatmaps await Task.Factory.StartNew(() => Import(stable.GetDirectories("Songs")), TaskCreationOptions.LongRunning); } - /// - /// Delete all beatmaps. - /// This will post notifications tracking progress. - /// - public void DeleteAll() - { - var maps = GetAllUsableBeatmapSets(); - - if (maps.Count == 0) return; - - var notification = new ProgressNotification - { - Progress = 0, - CompletionText = "Deleted all beatmaps!", - State = ProgressNotificationState.Active, - }; - - PostNotification?.Invoke(notification); - - int i = 0; - - foreach (var b in maps) - { - if (notification.State == ProgressNotificationState.Cancelled) - // user requested abort - return; - - notification.Text = $"Deleting ({i} of {maps.Count})"; - notification.Progress = (float)++i / maps.Count; - Delete(b); - } - - notification.State = ProgressNotificationState.Completed; - } - /// /// Create a SHA-2 hash from the provided archive based on contained beatmap (.osu) file content. /// diff --git a/osu.Game/Beatmaps/BeatmapStore.cs b/osu.Game/Beatmaps/BeatmapStore.cs index 3e4840f4e1..e695c3bf28 100644 --- a/osu.Game/Beatmaps/BeatmapStore.cs +++ b/osu.Game/Beatmaps/BeatmapStore.cs @@ -2,8 +2,8 @@ // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using System; +using System.Collections.Generic; using System.Linq; -using System.Linq.Expressions; using Microsoft.EntityFrameworkCore; using osu.Game.Database; @@ -63,32 +63,24 @@ namespace osu.Game.Beatmaps return true; } - public override void Cleanup() => Cleanup(_ => true); - - public void Cleanup(Expression> query) + protected override IQueryable AddIncludesForDeletion(IQueryable query) { - using (var usage = ContextFactory.GetForWrite()) - { - var context = usage.Context; + return base.AddIncludesForDeletion(query) + .Include(s => s.Beatmaps).ThenInclude(b => b.Metadata) + .Include(s => s.Beatmaps).ThenInclude(b => b.BaseDifficulty) + .Include(s => s.Metadata); + } - var purgeable = context.BeatmapSetInfo.Where(s => s.DeletePending && !s.Protected) - .Where(query) - .Include(s => s.Beatmaps).ThenInclude(b => b.Metadata) - .Include(s => s.Beatmaps).ThenInclude(b => b.BaseDifficulty) - .Include(s => s.Metadata).ToList(); + protected override void Purge(List items, OsuDbContext context) + { + // metadata is M-N so we can't rely on cascades + context.BeatmapMetadata.RemoveRange(items.Select(s => s.Metadata)); + context.BeatmapMetadata.RemoveRange(items.SelectMany(s => s.Beatmaps.Select(b => b.Metadata).Where(m => m != null))); - if (!purgeable.Any()) return; + // todo: we can probably make cascades work here with a FK in BeatmapDifficulty. just make to make it work correctly. + context.BeatmapDifficulty.RemoveRange(items.SelectMany(s => s.Beatmaps.Select(b => b.BaseDifficulty))); - // metadata is M-N so we can't rely on cascades - context.BeatmapMetadata.RemoveRange(purgeable.Select(s => s.Metadata)); - context.BeatmapMetadata.RemoveRange(purgeable.SelectMany(s => s.Beatmaps.Select(b => b.Metadata).Where(m => m != null))); - - // todo: we can probably make cascades work here with a FK in BeatmapDifficulty. just make to make it work correctly. - context.BeatmapDifficulty.RemoveRange(purgeable.SelectMany(s => s.Beatmaps.Select(b => b.BaseDifficulty))); - - // cascades down to beatmaps. - context.BeatmapSetInfo.RemoveRange(purgeable); - } + base.Purge(items, context); } public IQueryable BeatmapSets => ContextFactory.Get().BeatmapSetInfo diff --git a/osu.Game/Database/ArchiveModelManager.cs b/osu.Game/Database/ArchiveModelManager.cs index 9c558a6c12..31eab79127 100644 --- a/osu.Game/Database/ArchiveModelManager.cs +++ b/osu.Game/Database/ArchiveModelManager.cs @@ -62,6 +62,8 @@ namespace osu.Game.Database if (importHost != null) ipc = new ArchiveImportIPCChannel(importHost, this); + + ModelStore.PurgeDeletable(); } /// @@ -154,6 +156,13 @@ namespace osu.Game.Database /// The model to be imported. public void Import(TModel item) => ModelStore.Add(item); + /// + /// Perform an update of the specified item. + /// TODO: Support file changes. + /// + /// The item to update. + public void Update(TModel item) => ModelStore.Update(item); + /// /// Delete an item from the manager. /// Is a no-op for already deleted items. @@ -180,14 +189,48 @@ namespace osu.Game.Database } /// - /// Restore all items that were previously deleted. + /// Delete multiple items. /// This will post notifications tracking progress. /// - public void UndeleteAll() + public void Delete(List items) { - var deletedItems = queryModel().Where(m => m.DeletePending).ToList(); + if (items.Count == 0) return; - if (!deletedItems.Any()) return; + var notification = new ProgressNotification + { + Progress = 0, + CompletionText = "Deleted all beatmaps!", + State = ProgressNotificationState.Active, + }; + + PostNotification?.Invoke(notification); + + int i = 0; + + using (ContextFactory.GetForWrite()) + { + foreach (var b in items) + { + if (notification.State == ProgressNotificationState.Cancelled) + // user requested abort + return; + + notification.Text = $"Deleting ({i} of {items.Count})"; + notification.Progress = (float)++i / items.Count; + Delete(b); + } + } + + notification.State = ProgressNotificationState.Completed; + } + + /// + /// Restore multiple items that were previously deleted. + /// This will post notifications tracking progress. + /// + public void Undelete(List items) + { + if (!items.Any()) return; var notification = new ProgressNotification { @@ -200,15 +243,18 @@ namespace osu.Game.Database int i = 0; - foreach (var item in deletedItems) + using (ContextFactory.GetForWrite()) { - if (notification.State == ProgressNotificationState.Cancelled) - // user requested abort - return; + foreach (var item in items) + { + if (notification.State == ProgressNotificationState.Cancelled) + // user requested abort + return; - notification.Text = $"Restoring ({i} of {deletedItems.Count})"; - notification.Progress = (float)++i / deletedItems.Count; - Undelete(item); + notification.Text = $"Restoring ({i} of {items.Count})"; + notification.Progress = (float)++i / items.Count; + Undelete(item); + } } notification.State = ProgressNotificationState.Completed; diff --git a/osu.Game/Database/DatabaseBackedStore.cs b/osu.Game/Database/DatabaseBackedStore.cs index cf46b66422..a1ed992f03 100644 --- a/osu.Game/Database/DatabaseBackedStore.cs +++ b/osu.Game/Database/DatabaseBackedStore.cs @@ -49,7 +49,7 @@ namespace osu.Game.Database /// /// Perform any common clean-up tasks. Should be run when idle, or whenever necessary. /// - public virtual void Cleanup() + public virtual void PurgeDeletable() { } } diff --git a/osu.Game/Database/MutableDatabaseBackedStore.cs b/osu.Game/Database/MutableDatabaseBackedStore.cs index c6af1aa475..9de6068d10 100644 --- a/osu.Game/Database/MutableDatabaseBackedStore.cs +++ b/osu.Game/Database/MutableDatabaseBackedStore.cs @@ -1,4 +1,7 @@ using System; +using System.Collections.Generic; +using System.Linq; +using System.Linq.Expressions; using osu.Framework.Platform; namespace osu.Game.Database @@ -72,5 +75,37 @@ namespace osu.Game.Database ItemAdded?.Invoke(item); return true; } + + protected virtual IQueryable AddIncludesForDeletion(IQueryable query) => query; + + protected virtual void Purge(List items, OsuDbContext context) + { + // cascades down to beatmaps. + context.RemoveRange(items); + } + + /// + /// Purge items in a pending delete state. + /// + /// An optional query limiting the scope of the purge. + public void PurgeDeletable(Expression> query = null) + { + using (var usage = ContextFactory.GetForWrite()) + { + var context = usage.Context; + + var lookup = context.Set().Where(s => s.DeletePending); + + if (query != null) lookup = lookup.Where(query); + + AddIncludesForDeletion(lookup); + + var purgeable = lookup.ToList(); + + if (!purgeable.Any()) return; + + Purge(purgeable, context); + } + } } } diff --git a/osu.Game/IO/FileStore.cs b/osu.Game/IO/FileStore.cs index ab81ba4851..6f262fd8fa 100644 --- a/osu.Game/IO/FileStore.cs +++ b/osu.Game/IO/FileStore.cs @@ -90,7 +90,7 @@ namespace osu.Game.IO } } - public override void Cleanup() + public override void PurgeDeletable() { using (var usage = ContextFactory.GetForWrite()) { diff --git a/osu.Game/OsuGameBase.cs b/osu.Game/OsuGameBase.cs index 505577416d..ce50f160f7 100644 --- a/osu.Game/OsuGameBase.cs +++ b/osu.Game/OsuGameBase.cs @@ -172,7 +172,7 @@ namespace osu.Game API.Register(this); - FileStore.Cleanup(); + FileStore.PurgeDeletable(); } private void runMigrations() diff --git a/osu.Game/Overlays/Settings/Sections/Maintenance/GeneralSettings.cs b/osu.Game/Overlays/Settings/Sections/Maintenance/GeneralSettings.cs index 1223310c74..eec99dc886 100644 --- a/osu.Game/Overlays/Settings/Sections/Maintenance/GeneralSettings.cs +++ b/osu.Game/Overlays/Settings/Sections/Maintenance/GeneralSettings.cs @@ -41,7 +41,7 @@ namespace osu.Game.Overlays.Settings.Sections.Maintenance dialogOverlay?.Push(new DeleteAllBeatmapsDialog(() => { deleteButton.Enabled.Value = false; - Task.Run(() => beatmaps.DeleteAll()).ContinueWith(t => Schedule(() => deleteButton.Enabled.Value = true)); + Task.Run(() => beatmaps.Delete(beatmaps.GetAllUsableBeatmapSets())).ContinueWith(t => Schedule(() => deleteButton.Enabled.Value = true)); })); } }, @@ -64,7 +64,7 @@ namespace osu.Game.Overlays.Settings.Sections.Maintenance Action = () => { undeleteButton.Enabled.Value = false; - Task.Run(() => beatmaps.UndeleteAll()).ContinueWith(t => Schedule(() => undeleteButton.Enabled.Value = true)); + Task.Run(() => beatmaps.Undelete(beatmaps.QueryBeatmapSet(b => b.DeletePending))).ContinueWith(t => Schedule(() => undeleteButton.Enabled.Value = true)); } }, }; From a0a65abcac810041ac20cc78134f4daf758a7961 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 15 Feb 2018 14:19:16 +0900 Subject: [PATCH 068/544] Crentalise all import logic --- osu.Desktop/OsuGameDesktop.cs | 16 +--------------- osu.Game/Database/ArchiveModelManager.cs | 2 +- ...anImportArchives.cs => ICanAcceptFiles.cs} | 2 +- osu.Game/IPC/ArchiveImportIPCChannel.cs | 4 ++-- osu.Game/OsuGame.cs | 5 ++++- osu.Game/OsuGameBase.cs | 19 ++++++++++++++++++- osu.Game/Rulesets/Scoring/ScoreStore.cs | 18 +++++++++++++++++- osu.Game/osu.Game.csproj | 2 +- 8 files changed, 45 insertions(+), 23 deletions(-) rename osu.Game/Database/{ICanImportArchives.cs => ICanAcceptFiles.cs} (73%) diff --git a/osu.Desktop/OsuGameDesktop.cs b/osu.Desktop/OsuGameDesktop.cs index c563201f0a..45ed66bad2 100644 --- a/osu.Desktop/OsuGameDesktop.cs +++ b/osu.Desktop/OsuGameDesktop.cs @@ -115,21 +115,7 @@ namespace osu.Desktop if (filePaths.Any(f => Path.GetExtension(f) != firstExtension)) return; - switch (firstExtension) - { - case ".osz": - Task.Factory.StartNew(() => BeatmapManager.Import(filePaths), TaskCreationOptions.LongRunning); - return; - case ".osr": - Task.Run(() => - { - var score = ScoreStore.ReadReplayFile(filePaths.First()); - Schedule(() => LoadScore(score)); - }); - return; - } + Task.Factory.StartNew(() => Import(filePaths), TaskCreationOptions.LongRunning); } - - private static readonly string[] allowed_extensions = { @".osz", @".osr" }; } } diff --git a/osu.Game/Database/ArchiveModelManager.cs b/osu.Game/Database/ArchiveModelManager.cs index 31eab79127..1b37e7e76c 100644 --- a/osu.Game/Database/ArchiveModelManager.cs +++ b/osu.Game/Database/ArchiveModelManager.cs @@ -20,7 +20,7 @@ namespace osu.Game.Database /// /// The model type. /// The associated file join type. - public abstract class ArchiveModelManager : ICanImportArchives + public abstract class ArchiveModelManager : ICanAcceptFiles where TModel : class, IHasFiles, IHasPrimaryKey, ISoftDelete where TFileModel : INamedFileInfo, new() { diff --git a/osu.Game/Database/ICanImportArchives.cs b/osu.Game/Database/ICanAcceptFiles.cs similarity index 73% rename from osu.Game/Database/ICanImportArchives.cs rename to osu.Game/Database/ICanAcceptFiles.cs index 0f863f3044..d09000525d 100644 --- a/osu.Game/Database/ICanImportArchives.cs +++ b/osu.Game/Database/ICanAcceptFiles.cs @@ -1,6 +1,6 @@ namespace osu.Game.Database { - public interface ICanImportArchives + public interface ICanAcceptFiles { void Import(params string[] paths); diff --git a/osu.Game/IPC/ArchiveImportIPCChannel.cs b/osu.Game/IPC/ArchiveImportIPCChannel.cs index 6e9787ca5a..9d7bf17c77 100644 --- a/osu.Game/IPC/ArchiveImportIPCChannel.cs +++ b/osu.Game/IPC/ArchiveImportIPCChannel.cs @@ -12,9 +12,9 @@ namespace osu.Game.IPC { public class ArchiveImportIPCChannel : IpcChannel { - private readonly ICanImportArchives importer; + private readonly ICanAcceptFiles importer; - public ArchiveImportIPCChannel(IIpcHost host, ICanImportArchives importer = null) + public ArchiveImportIPCChannel(IIpcHost host, ICanAcceptFiles importer = null) : base(host) { this.importer = importer; diff --git a/osu.Game/OsuGame.cs b/osu.Game/OsuGame.cs index 624179cfe1..14bc31aecf 100644 --- a/osu.Game/OsuGame.cs +++ b/osu.Game/OsuGame.cs @@ -105,6 +105,8 @@ namespace osu.Game { this.frameworkConfig = frameworkConfig; + ScoreStore.ScoreImported += score => Schedule(() => LoadScore(score)); + if (!Host.IsPrimaryInstance) { Logger.Log(@"osu! does not support multiple running instances.", LoggingTarget.Runtime, LogLevel.Error); @@ -114,7 +116,8 @@ namespace osu.Game if (args?.Length > 0) { var paths = args.Where(a => !a.StartsWith(@"-")); - Task.Run(() => BeatmapManager.Import(paths.ToArray())); + + Task.Run(() => Import(paths.ToArray())); } dependencies.CacheAs(this); diff --git a/osu.Game/OsuGameBase.cs b/osu.Game/OsuGameBase.cs index ce50f160f7..dba0250007 100644 --- a/osu.Game/OsuGameBase.cs +++ b/osu.Game/OsuGameBase.cs @@ -2,7 +2,10 @@ // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using System; +using System.Collections.Generic; using System.Diagnostics; +using System.IO; +using System.Linq; using System.Reflection; using osu.Framework.Allocation; using osu.Framework.Audio; @@ -30,7 +33,7 @@ using osu.Game.Rulesets.Scoring; namespace osu.Game { - public class OsuGameBase : Framework.Game, IOnlineComponent + public class OsuGameBase : Framework.Game, IOnlineComponent, ICanAcceptFiles { protected OsuConfigManager LocalConfig; @@ -114,6 +117,8 @@ namespace osu.Game dependencies.Cache(SettingsStore = new SettingsStore(contextFactory)); dependencies.Cache(new OsuColour()); + fileImporters.Add(BeatmapManager); + //this completely overrides the framework default. will need to change once we make a proper FontStore. dependencies.Cache(Fonts = new FontStore { ScaleAdjust = 100 }); @@ -257,5 +262,17 @@ namespace osu.Game base.Dispose(isDisposing); } + + private readonly List fileImporters = new List(); + + public void Import(params string[] paths) + { + var extension = Path.GetExtension(paths.First()); + + foreach (var importer in fileImporters) + if (importer.HandledExtensions.Contains(extension)) importer.Import(paths); + } + + public string[] HandledExtensions => fileImporters.SelectMany(i => i.HandledExtensions).ToArray(); } } diff --git a/osu.Game/Rulesets/Scoring/ScoreStore.cs b/osu.Game/Rulesets/Scoring/ScoreStore.cs index 8bde2747a2..7abee0b04f 100644 --- a/osu.Game/Rulesets/Scoring/ScoreStore.cs +++ b/osu.Game/Rulesets/Scoring/ScoreStore.cs @@ -1,6 +1,7 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using System; using System.Collections.Generic; using System.IO; using osu.Framework.Platform; @@ -14,7 +15,7 @@ using SharpCompress.Compressors.LZMA; namespace osu.Game.Rulesets.Scoring { - public class ScoreStore : DatabaseBackedStore + public class ScoreStore : DatabaseBackedStore, ICanAcceptFiles { private readonly Storage storage; @@ -23,6 +24,8 @@ namespace osu.Game.Rulesets.Scoring private const string replay_folder = @"replays"; + public event Action ScoreImported; + // ReSharper disable once NotAccessedField.Local (we should keep a reference to this so it is not finalised) private ScoreIPCChannel ipc; @@ -36,6 +39,18 @@ namespace osu.Game.Rulesets.Scoring ipc = new ScoreIPCChannel(importHost, this); } + public string[] HandledExtensions => new[] { ".osr" }; + + public void Import(params string[] paths) + { + foreach (var path in paths) + { + var score = ReadReplayFile(path); + if (score != null) + ScoreImported?.Invoke(score); + } + } + public Score ReadReplayFile(string replayFilename) { Score score; @@ -159,5 +174,6 @@ namespace osu.Game.Rulesets.Scoring return new Replay { Frames = frames }; } + } } diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index 91aaf9c092..bfe7ec1821 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -277,7 +277,7 @@ - + From fe5df663be1c648eb4c0c41398d447141e8eaa04 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 15 Feb 2018 15:14:46 +0900 Subject: [PATCH 069/544] Add more xmldoc --- osu.Game/Database/ICanAcceptFiles.cs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/osu.Game/Database/ICanAcceptFiles.cs b/osu.Game/Database/ICanAcceptFiles.cs index d09000525d..40978277b1 100644 --- a/osu.Game/Database/ICanAcceptFiles.cs +++ b/osu.Game/Database/ICanAcceptFiles.cs @@ -1,9 +1,19 @@ namespace osu.Game.Database { + /// + /// A class which can accept files for importing. + /// public interface ICanAcceptFiles { + /// + /// Import the specified paths. + /// + /// The files which should be imported. void Import(params string[] paths); + /// + /// An array of accepted file extensions (in the standard format of ".abc"). + /// string[] HandledExtensions { get; } } } From d07ab1fbea0f25ee28d7e1dfc2e2a08d690ff1bc Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 15 Feb 2018 15:14:55 +0900 Subject: [PATCH 070/544] Fix undelete all --- .../Overlays/Settings/Sections/Maintenance/GeneralSettings.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game/Overlays/Settings/Sections/Maintenance/GeneralSettings.cs b/osu.Game/Overlays/Settings/Sections/Maintenance/GeneralSettings.cs index eec99dc886..d9fedd0225 100644 --- a/osu.Game/Overlays/Settings/Sections/Maintenance/GeneralSettings.cs +++ b/osu.Game/Overlays/Settings/Sections/Maintenance/GeneralSettings.cs @@ -64,7 +64,7 @@ namespace osu.Game.Overlays.Settings.Sections.Maintenance Action = () => { undeleteButton.Enabled.Value = false; - Task.Run(() => beatmaps.Undelete(beatmaps.QueryBeatmapSet(b => b.DeletePending))).ContinueWith(t => Schedule(() => undeleteButton.Enabled.Value = true)); + Task.Run(() => beatmaps.Undelete(beatmaps.QueryBeatmapSets(b => b.DeletePending).ToList())).ContinueWith(t => Schedule(() => undeleteButton.Enabled.Value = true)); } }, }; From e51450a0645604d03af8fb1d610e84e85b3634e1 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 15 Feb 2018 15:24:28 +0900 Subject: [PATCH 071/544] Fix query construction --- osu.Game/Database/MutableDatabaseBackedStore.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game/Database/MutableDatabaseBackedStore.cs b/osu.Game/Database/MutableDatabaseBackedStore.cs index 9de6068d10..887f568864 100644 --- a/osu.Game/Database/MutableDatabaseBackedStore.cs +++ b/osu.Game/Database/MutableDatabaseBackedStore.cs @@ -98,7 +98,7 @@ namespace osu.Game.Database if (query != null) lookup = lookup.Where(query); - AddIncludesForDeletion(lookup); + lookup = AddIncludesForDeletion(lookup); var purgeable = lookup.ToList(); From 671475f3b40981f2105283da8aadec8a86b3952a Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 15 Feb 2018 15:51:59 +0900 Subject: [PATCH 072/544] Ensure undeleted items are populated with includes before firing events --- osu.Game/Database/DatabaseBackedStore.cs | 3 +-- osu.Game/Database/MutableDatabaseBackedStore.cs | 6 +++--- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/osu.Game/Database/DatabaseBackedStore.cs b/osu.Game/Database/DatabaseBackedStore.cs index a1ed992f03..6109475690 100644 --- a/osu.Game/Database/DatabaseBackedStore.cs +++ b/osu.Game/Database/DatabaseBackedStore.cs @@ -1,7 +1,6 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE -using System.Collections.Generic; using System.Linq; using Microsoft.EntityFrameworkCore; using osu.Framework.Platform; @@ -23,7 +22,7 @@ namespace osu.Game.Database /// The object to use as a reference when negotiating a local instance. /// An optional lookup source which will be used to query and populate a freshly retrieved replacement. If not provided, the refreshed object will still be returned but will not have any includes. /// A valid EF-stored type. - protected virtual void Refresh(ref T obj, IEnumerable lookupSource = null) where T : class, IHasPrimaryKey + protected virtual void Refresh(ref T obj, IQueryable lookupSource = null) where T : class, IHasPrimaryKey { using (var usage = ContextFactory.GetForWrite()) { diff --git a/osu.Game/Database/MutableDatabaseBackedStore.cs b/osu.Game/Database/MutableDatabaseBackedStore.cs index 887f568864..01fcfbfe43 100644 --- a/osu.Game/Database/MutableDatabaseBackedStore.cs +++ b/osu.Game/Database/MutableDatabaseBackedStore.cs @@ -53,7 +53,6 @@ namespace osu.Game.Database Refresh(ref item); if (item.DeletePending) return false; - item.DeletePending = true; } @@ -65,10 +64,9 @@ namespace osu.Game.Database { using (ContextFactory.GetForWrite()) { - Refresh(ref item); + Refresh(ref item, ConsumableItems); if (!item.DeletePending) return false; - item.DeletePending = false; } @@ -76,6 +74,8 @@ namespace osu.Game.Database return true; } + protected virtual IQueryable AddIncludesForConsumption(IQueryable query) => query; + protected virtual IQueryable AddIncludesForDeletion(IQueryable query) => query; protected virtual void Purge(List items, OsuDbContext context) From 89cf794f980e4ac6137b234e8850764c67cbc477 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 15 Feb 2018 15:52:17 +0900 Subject: [PATCH 073/544] Add a lower level ConsumableItems implementation --- osu.Game/Beatmaps/BeatmapManager.cs | 10 +++--- osu.Game/Beatmaps/BeatmapStore.cs | 34 +++++++++---------- .../Database/MutableDatabaseBackedStore.cs | 5 +++ 3 files changed, 27 insertions(+), 22 deletions(-) diff --git a/osu.Game/Beatmaps/BeatmapManager.cs b/osu.Game/Beatmaps/BeatmapManager.cs index 4a6b6909b9..1d6d8b6726 100644 --- a/osu.Game/Beatmaps/BeatmapManager.cs +++ b/osu.Game/Beatmaps/BeatmapManager.cs @@ -86,7 +86,7 @@ namespace osu.Game.Beatmaps protected override BeatmapSetInfo CheckForExisting(BeatmapSetInfo model) { // check if this beatmap has already been imported and exit early if so - var existingHashMatch = beatmaps.BeatmapSets.FirstOrDefault(b => b.Hash == model.Hash); + var existingHashMatch = beatmaps.ConsumableItems.FirstOrDefault(b => b.Hash == model.Hash); if (existingHashMatch != null) { Undelete(existingHashMatch); @@ -96,7 +96,7 @@ namespace osu.Game.Beatmaps // check if a set already exists with the same online id if (model.OnlineBeatmapSetID != null) { - var existingOnlineId = beatmaps.BeatmapSets.FirstOrDefault(b => b.OnlineBeatmapSetID == model.OnlineBeatmapSetID); + var existingOnlineId = beatmaps.ConsumableItems.FirstOrDefault(b => b.OnlineBeatmapSetID == model.OnlineBeatmapSetID); if (existingOnlineId != null) { Delete(existingOnlineId); @@ -229,20 +229,20 @@ namespace osu.Game.Beatmaps /// /// The query. /// The first result for the provided query, or null if no results were found. - public BeatmapSetInfo QueryBeatmapSet(Expression> query) => beatmaps.BeatmapSets.AsNoTracking().FirstOrDefault(query); + public BeatmapSetInfo QueryBeatmapSet(Expression> query) => beatmaps.ConsumableItems.AsNoTracking().FirstOrDefault(query); /// /// Returns a list of all usable s. /// /// A list of available . - public List GetAllUsableBeatmapSets() => beatmaps.BeatmapSets.Where(s => !s.DeletePending && !s.Protected).ToList(); + public List GetAllUsableBeatmapSets() => beatmaps.ConsumableItems.Where(s => !s.DeletePending && !s.Protected).ToList(); /// /// Perform a lookup query on available s. /// /// The query. /// Results from the provided query. - public IEnumerable QueryBeatmapSets(Expression> query) => beatmaps.BeatmapSets.AsNoTracking().Where(query); + public IEnumerable QueryBeatmapSets(Expression> query) => beatmaps.ConsumableItems.AsNoTracking().Where(query); /// /// Perform a lookup query on available s. diff --git a/osu.Game/Beatmaps/BeatmapStore.cs b/osu.Game/Beatmaps/BeatmapStore.cs index e695c3bf28..2e37076aca 100644 --- a/osu.Game/Beatmaps/BeatmapStore.cs +++ b/osu.Game/Beatmaps/BeatmapStore.cs @@ -63,13 +63,19 @@ namespace osu.Game.Beatmaps return true; } - protected override IQueryable AddIncludesForDeletion(IQueryable query) - { - return base.AddIncludesForDeletion(query) + protected override IQueryable AddIncludesForDeletion(IQueryable query) => + base.AddIncludesForDeletion(query) .Include(s => s.Beatmaps).ThenInclude(b => b.Metadata) .Include(s => s.Beatmaps).ThenInclude(b => b.BaseDifficulty) .Include(s => s.Metadata); - } + + protected override IQueryable AddIncludesForConsumption(IQueryable query) => + base.AddIncludesForConsumption(query) + .Include(s => s.Metadata) + .Include(s => s.Beatmaps).ThenInclude(s => s.Ruleset) + .Include(s => s.Beatmaps).ThenInclude(b => b.BaseDifficulty) + .Include(s => s.Beatmaps).ThenInclude(b => b.Metadata) + .Include(s => s.Files).ThenInclude(f => f.FileInfo); protected override void Purge(List items, OsuDbContext context) { @@ -83,18 +89,12 @@ namespace osu.Game.Beatmaps base.Purge(items, context); } - public IQueryable BeatmapSets => ContextFactory.Get().BeatmapSetInfo - .Include(s => s.Metadata) - .Include(s => s.Beatmaps).ThenInclude(s => s.Ruleset) - .Include(s => s.Beatmaps).ThenInclude(b => b.BaseDifficulty) - .Include(s => s.Beatmaps).ThenInclude(b => b.Metadata) - .Include(s => s.Files).ThenInclude(f => f.FileInfo); - - public IQueryable Beatmaps => ContextFactory.Get().BeatmapInfo - .Include(b => b.BeatmapSet).ThenInclude(s => s.Metadata) - .Include(b => b.BeatmapSet).ThenInclude(s => s.Files).ThenInclude(f => f.FileInfo) - .Include(b => b.Metadata) - .Include(b => b.Ruleset) - .Include(b => b.BaseDifficulty); + public IQueryable Beatmaps => + ContextFactory.Get().BeatmapInfo + .Include(b => b.BeatmapSet).ThenInclude(s => s.Metadata) + .Include(b => b.BeatmapSet).ThenInclude(s => s.Files).ThenInclude(f => f.FileInfo) + .Include(b => b.Metadata) + .Include(b => b.Ruleset) + .Include(b => b.BaseDifficulty); } } diff --git a/osu.Game/Database/MutableDatabaseBackedStore.cs b/osu.Game/Database/MutableDatabaseBackedStore.cs index 01fcfbfe43..3905942c8c 100644 --- a/osu.Game/Database/MutableDatabaseBackedStore.cs +++ b/osu.Game/Database/MutableDatabaseBackedStore.cs @@ -21,6 +21,11 @@ namespace osu.Game.Database { } + /// + /// Access items pre-populated with includes for consumption. + /// + public IQueryable ConsumableItems => AddIncludesForConsumption(ContextFactory.Get().Set()); + public void Add(T item) { using (var usage = ContextFactory.GetForWrite()) From 8c1d581fb34425849a373e25f92072337b724a4b Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 15 Feb 2018 16:15:30 +0900 Subject: [PATCH 074/544] Fix hiding beatmaps not refreshing correctly --- osu.Game/Beatmaps/BeatmapStore.cs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/osu.Game/Beatmaps/BeatmapStore.cs b/osu.Game/Beatmaps/BeatmapStore.cs index 2e37076aca..93ad1badd2 100644 --- a/osu.Game/Beatmaps/BeatmapStore.cs +++ b/osu.Game/Beatmaps/BeatmapStore.cs @@ -34,12 +34,10 @@ namespace osu.Game.Beatmaps Refresh(ref beatmap, Beatmaps); if (beatmap.Hidden) return false; - beatmap.Hidden = true; - - BeatmapHidden?.Invoke(beatmap); } + BeatmapHidden?.Invoke(beatmap); return true; } @@ -55,7 +53,6 @@ namespace osu.Game.Beatmaps Refresh(ref beatmap, Beatmaps); if (!beatmap.Hidden) return false; - beatmap.Hidden = false; } From 1b13be1372c7ab2e7983473c18a35c9904309363 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 15 Feb 2018 16:23:34 +0900 Subject: [PATCH 075/544] Cleanups and xmldoc additions --- osu.Game/Beatmaps/BeatmapSetInfo.cs | 1 - osu.Game/Database/IHasFiles.cs | 13 +++++++++++++ osu.Game/Database/ISoftDelete.cs | 6 ++++++ osu.Game/Database/MutableDatabaseBackedStore.cs | 6 +----- osu.Game/IO/IHasFiles.cs | 9 --------- osu.Game/osu.Game.csproj | 2 +- 6 files changed, 21 insertions(+), 16 deletions(-) create mode 100644 osu.Game/Database/IHasFiles.cs delete mode 100644 osu.Game/IO/IHasFiles.cs diff --git a/osu.Game/Beatmaps/BeatmapSetInfo.cs b/osu.Game/Beatmaps/BeatmapSetInfo.cs index 79983becb0..1736e3fa90 100644 --- a/osu.Game/Beatmaps/BeatmapSetInfo.cs +++ b/osu.Game/Beatmaps/BeatmapSetInfo.cs @@ -5,7 +5,6 @@ using System.Collections.Generic; using System.ComponentModel.DataAnnotations.Schema; using System.Linq; using osu.Game.Database; -using osu.Game.IO; namespace osu.Game.Beatmaps { diff --git a/osu.Game/Database/IHasFiles.cs b/osu.Game/Database/IHasFiles.cs new file mode 100644 index 0000000000..cae8ea66ef --- /dev/null +++ b/osu.Game/Database/IHasFiles.cs @@ -0,0 +1,13 @@ +using System.Collections.Generic; + +namespace osu.Game.Database +{ + /// + /// A model that contains a list of files it is responsible for. + /// + /// The model representing a file. + public interface IHasFiles + { + List Files { get; set; } + } +} diff --git a/osu.Game/Database/ISoftDelete.cs b/osu.Game/Database/ISoftDelete.cs index 19510421c4..c884d7af00 100644 --- a/osu.Game/Database/ISoftDelete.cs +++ b/osu.Game/Database/ISoftDelete.cs @@ -3,8 +3,14 @@ namespace osu.Game.Database { + /// + /// A model that can be deleted from user's view without being instantly lost. + /// public interface ISoftDelete { + /// + /// Whether this model is marked for future deletion. + /// bool DeletePending { get; set; } } } diff --git a/osu.Game/Database/MutableDatabaseBackedStore.cs b/osu.Game/Database/MutableDatabaseBackedStore.cs index 3905942c8c..96bc48fd8a 100644 --- a/osu.Game/Database/MutableDatabaseBackedStore.cs +++ b/osu.Game/Database/MutableDatabaseBackedStore.cs @@ -83,11 +83,7 @@ namespace osu.Game.Database protected virtual IQueryable AddIncludesForDeletion(IQueryable query) => query; - protected virtual void Purge(List items, OsuDbContext context) - { - // cascades down to beatmaps. - context.RemoveRange(items); - } + protected virtual void Purge(List items, OsuDbContext context) => context.RemoveRange(items); /// /// Purge items in a pending delete state. diff --git a/osu.Game/IO/IHasFiles.cs b/osu.Game/IO/IHasFiles.cs deleted file mode 100644 index df313b4eae..0000000000 --- a/osu.Game/IO/IHasFiles.cs +++ /dev/null @@ -1,9 +0,0 @@ -using System.Collections.Generic; - -namespace osu.Game.IO -{ - public interface IHasFiles - { - List Files { get; set; } - } -} diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index bfe7ec1821..7e440dacf8 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -279,6 +279,7 @@ + @@ -289,7 +290,6 @@ - From b9ef32b09bfb137eafaa034f2cd3e5524f496a4d Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 15 Feb 2018 16:31:42 +0900 Subject: [PATCH 076/544] Further xmldoc and restoring of Cleanup method --- osu.Game/Database/ArchiveModelManager.cs | 2 +- osu.Game/Database/DatabaseBackedStore.cs | 2 +- .../Database/MutableDatabaseBackedStore.cs | 34 +++++++++++++++++++ osu.Game/IO/FileStore.cs | 2 +- osu.Game/OsuGameBase.cs | 2 +- 5 files changed, 38 insertions(+), 4 deletions(-) diff --git a/osu.Game/Database/ArchiveModelManager.cs b/osu.Game/Database/ArchiveModelManager.cs index 1b37e7e76c..20f90a248b 100644 --- a/osu.Game/Database/ArchiveModelManager.cs +++ b/osu.Game/Database/ArchiveModelManager.cs @@ -63,7 +63,7 @@ namespace osu.Game.Database if (importHost != null) ipc = new ArchiveImportIPCChannel(importHost, this); - ModelStore.PurgeDeletable(); + ModelStore.Cleanup(); } /// diff --git a/osu.Game/Database/DatabaseBackedStore.cs b/osu.Game/Database/DatabaseBackedStore.cs index 6109475690..0fafb77339 100644 --- a/osu.Game/Database/DatabaseBackedStore.cs +++ b/osu.Game/Database/DatabaseBackedStore.cs @@ -48,7 +48,7 @@ namespace osu.Game.Database /// /// Perform any common clean-up tasks. Should be run when idle, or whenever necessary. /// - public virtual void PurgeDeletable() + public virtual void Cleanup() { } } diff --git a/osu.Game/Database/MutableDatabaseBackedStore.cs b/osu.Game/Database/MutableDatabaseBackedStore.cs index 96bc48fd8a..95d3dfc582 100644 --- a/osu.Game/Database/MutableDatabaseBackedStore.cs +++ b/osu.Game/Database/MutableDatabaseBackedStore.cs @@ -26,6 +26,10 @@ namespace osu.Game.Database /// public IQueryable ConsumableItems => AddIncludesForConsumption(ContextFactory.Get().Set()); + /// + /// Add a to the database. + /// + /// The item to add. public void Add(T item) { using (var usage = ContextFactory.GetForWrite()) @@ -51,6 +55,10 @@ namespace osu.Game.Database ItemAdded?.Invoke(item); } + /// + /// Delete a from the database. + /// + /// The item to delete. public bool Delete(T item) { using (ContextFactory.GetForWrite()) @@ -65,6 +73,10 @@ namespace osu.Game.Database return true; } + /// + /// Restore a from a deleted state. + /// + /// The item to undelete. public bool Undelete(T item) { using (ContextFactory.GetForWrite()) @@ -79,12 +91,34 @@ namespace osu.Game.Database return true; } + /// + /// Allow implementations to add database-side includes or constraints when querying for consumption of items. + /// + /// The input query. + /// A potentially modified output query. protected virtual IQueryable AddIncludesForConsumption(IQueryable query) => query; + /// + /// Allow implementations to add database-side includes or constraints when deleting items. + /// Included properties could then be subsequently deleted by overriding . + /// + /// The input query. + /// A potentially modified output query. protected virtual IQueryable AddIncludesForDeletion(IQueryable query) => query; + /// + /// Called when removing an item completely from the database. + /// + /// The items to be purged. + /// The write context which can be used to perform subsequent deletions. protected virtual void Purge(List items, OsuDbContext context) => context.RemoveRange(items); + public override void Cleanup() + { + base.Cleanup(); + PurgeDeletable(); + } + /// /// Purge items in a pending delete state. /// diff --git a/osu.Game/IO/FileStore.cs b/osu.Game/IO/FileStore.cs index 6f262fd8fa..ab81ba4851 100644 --- a/osu.Game/IO/FileStore.cs +++ b/osu.Game/IO/FileStore.cs @@ -90,7 +90,7 @@ namespace osu.Game.IO } } - public override void PurgeDeletable() + public override void Cleanup() { using (var usage = ContextFactory.GetForWrite()) { diff --git a/osu.Game/OsuGameBase.cs b/osu.Game/OsuGameBase.cs index dba0250007..de2a4d0b82 100644 --- a/osu.Game/OsuGameBase.cs +++ b/osu.Game/OsuGameBase.cs @@ -177,7 +177,7 @@ namespace osu.Game API.Register(this); - FileStore.PurgeDeletable(); + FileStore.Cleanup(); } private void runMigrations() From fa05822d7dd78ca6fc24dca9843cd762084e4859 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 15 Feb 2018 16:33:33 +0900 Subject: [PATCH 077/544] Add missing licence headers --- osu.Game/Database/ArchiveModelManager.cs | 5 ++++- osu.Game/Database/ICanAcceptFiles.cs | 5 ++++- osu.Game/Database/IHasFiles.cs | 5 ++++- osu.Game/Database/INamedFileInfo.cs | 5 ++++- osu.Game/Database/MutableDatabaseBackedStore.cs | 5 ++++- osu.Game/Online/API/APIDownloadRequest.cs | 7 +++++-- 6 files changed, 25 insertions(+), 7 deletions(-) diff --git a/osu.Game/Database/ArchiveModelManager.cs b/osu.Game/Database/ArchiveModelManager.cs index 20f90a248b..902a42c172 100644 --- a/osu.Game/Database/ArchiveModelManager.cs +++ b/osu.Game/Database/ArchiveModelManager.cs @@ -1,4 +1,7 @@ -using System; +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using System; using System.Collections.Generic; using System.IO; using System.Linq; diff --git a/osu.Game/Database/ICanAcceptFiles.cs b/osu.Game/Database/ICanAcceptFiles.cs index 40978277b1..ab26525619 100644 --- a/osu.Game/Database/ICanAcceptFiles.cs +++ b/osu.Game/Database/ICanAcceptFiles.cs @@ -1,4 +1,7 @@ -namespace osu.Game.Database +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +namespace osu.Game.Database { /// /// A class which can accept files for importing. diff --git a/osu.Game/Database/IHasFiles.cs b/osu.Game/Database/IHasFiles.cs index cae8ea66ef..deaf75360c 100644 --- a/osu.Game/Database/IHasFiles.cs +++ b/osu.Game/Database/IHasFiles.cs @@ -1,4 +1,7 @@ -using System.Collections.Generic; +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using System.Collections.Generic; namespace osu.Game.Database { diff --git a/osu.Game/Database/INamedFileInfo.cs b/osu.Game/Database/INamedFileInfo.cs index 7922c72974..8de451dd78 100644 --- a/osu.Game/Database/INamedFileInfo.cs +++ b/osu.Game/Database/INamedFileInfo.cs @@ -1,4 +1,7 @@ -using osu.Game.IO; +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using osu.Game.IO; namespace osu.Game.Database { diff --git a/osu.Game/Database/MutableDatabaseBackedStore.cs b/osu.Game/Database/MutableDatabaseBackedStore.cs index 95d3dfc582..4ab55691f2 100644 --- a/osu.Game/Database/MutableDatabaseBackedStore.cs +++ b/osu.Game/Database/MutableDatabaseBackedStore.cs @@ -1,4 +1,7 @@ -using System; +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; diff --git a/osu.Game/Online/API/APIDownloadRequest.cs b/osu.Game/Online/API/APIDownloadRequest.cs index f1cbd1eb0b..2dff07a847 100644 --- a/osu.Game/Online/API/APIDownloadRequest.cs +++ b/osu.Game/Online/API/APIDownloadRequest.cs @@ -1,4 +1,7 @@ -using osu.Framework.IO.Network; +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using osu.Framework.IO.Network; namespace osu.Game.Online.API { @@ -27,4 +30,4 @@ namespace osu.Game.Online.API public new event APISuccessHandler Success; } -} \ No newline at end of file +} From dcbc8c3dcd452487fd3ec75d7690374030c9fd5f Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Thu, 15 Feb 2018 18:06:33 +0900 Subject: [PATCH 078/544] Remove animated capture boxes for now --- .../Edit/Layers/Selection/CaptureBox.cs | 58 ++----------------- .../Edit/Layers/Selection/SelectionBox.cs | 2 +- .../Edit/Layers/Selection/SelectionLayer.cs | 11 ++-- 3 files changed, 11 insertions(+), 60 deletions(-) diff --git a/osu.Game/Rulesets/Edit/Layers/Selection/CaptureBox.cs b/osu.Game/Rulesets/Edit/Layers/Selection/CaptureBox.cs index 86e96f6d84..35e425c981 100644 --- a/osu.Game/Rulesets/Edit/Layers/Selection/CaptureBox.cs +++ b/osu.Game/Rulesets/Edit/Layers/Selection/CaptureBox.cs @@ -15,22 +15,12 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection /// /// A box which encloses s. /// - public abstract class CaptureBox : VisibilityContainer + public class CaptureBox : VisibilityContainer { - /// - /// Top-left corner of the rectangle that encloses the s. - /// - protected Vector2 FinalPosition { get; private set; } - - /// - /// Size of the rectangle that encloses the s. - /// - protected Vector2 FinalSize { get; private set; } - private readonly IDrawable captureArea; private readonly IReadOnlyList capturedObjects; - protected CaptureBox(IDrawable captureArea, IReadOnlyList capturedObjects) + public CaptureBox(IDrawable captureArea, IReadOnlyList capturedObjects) { this.captureArea = captureArea; this.capturedObjects = capturedObjects; @@ -66,48 +56,12 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection topLeft -= new Vector2(5); bottomRight += new Vector2(5); - FinalSize = bottomRight - topLeft; - FinalPosition = topLeft; + Size = bottomRight - topLeft; + Position = topLeft; } - protected override void PopIn() => this.MoveTo(FinalPosition).ResizeTo(FinalSize).FadeIn(); + protected override void PopIn() => this.FadeIn(); + protected override void PopOut() => this.FadeOut(); } - - /// - /// A which fully encloses the s from the start. - /// - public class InstantCaptureBox : CaptureBox - { - public InstantCaptureBox(IDrawable captureArea, IReadOnlyList capturedObjects) - : base(captureArea, capturedObjects) - { - Origin = Anchor.Centre; - } - - protected override void PopIn() - => this.MoveTo(FinalPosition + FinalSize / 2f).ResizeTo(FinalSize).ScaleTo(1.1f) - .Then() - .ScaleTo(1f, 300, Easing.OutQuint).FadeIn(300, Easing.OutQuint); - - protected override void PopOut() => this.FadeOut(300, Easing.OutQuint); - } - - /// - /// A which moves from an initial position + size to enclose s. - /// - public class DragCaptureBox : CaptureBox - { - public DragCaptureBox(IDrawable captureArea, IReadOnlyList capturedObjects, Vector2 initialPosition, Vector2 initialSize) - : base(captureArea, capturedObjects) - { - Position = initialPosition; - Size = initialSize; - } - - protected override void PopIn() - => this.MoveTo(FinalPosition, 300, Easing.OutQuint).ResizeTo(FinalSize, 300, Easing.OutQuint).FadeIn(300, Easing.OutQuint); - - protected override void PopOut() => this.FadeOut(300, Easing.OutQuint); - } } diff --git a/osu.Game/Rulesets/Edit/Layers/Selection/SelectionBox.cs b/osu.Game/Rulesets/Edit/Layers/Selection/SelectionBox.cs index 87c6833f01..8907993173 100644 --- a/osu.Game/Rulesets/Edit/Layers/Selection/SelectionBox.cs +++ b/osu.Game/Rulesets/Edit/Layers/Selection/SelectionBox.cs @@ -52,6 +52,6 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection Size = bottomRight - topLeft; } - public override void Hide() => this.FadeOut(400, Easing.OutQuint).Expire(); + public override void Hide() => this.FadeOut(250, Easing.OutQuint).Expire(); } } diff --git a/osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs b/osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs index 0fceced040..f73820d534 100644 --- a/osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs +++ b/osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs @@ -57,7 +57,7 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection protected override bool OnDragEnd(InputState state) { selectionBox.Hide(); - finishSelection(true); + finishSelection(); return true; } @@ -65,7 +65,7 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection protected override bool OnClick(InputState state) { selectPoint(state.Mouse.NativeState.Position); - finishSelection(false); + finishSelection(); return true; } @@ -102,7 +102,7 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection selectedHitObjects.Add(selected); } - private void finishSelection(bool fromDrag) + private void finishSelection() { if (selectedHitObjects.Count == 0) return; @@ -111,10 +111,7 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection // OnDragEnd and OnClick methods within a single frame, OnMouseDown doesn't help us here captureBox?.Hide(); - if (fromDrag) - AddInternal(captureBox = new DragCaptureBox(this, selectedHitObjects.ToList(), selectionBox.Position, selectionBox.Size)); - else - AddInternal(captureBox = new InstantCaptureBox(this, selectedHitObjects.ToList())); + AddInternal(captureBox = new CaptureBox(this, selectedHitObjects.ToList())); } } } From 4ac0c48ba6229df35ae2850364aaa2ba599bc42e Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Thu, 15 Feb 2018 19:07:53 +0900 Subject: [PATCH 079/544] Add fadein to SelectionBox --- osu.Game/Rulesets/Edit/Layers/Selection/SelectionBox.cs | 5 +++-- osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs | 4 ++++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/osu.Game/Rulesets/Edit/Layers/Selection/SelectionBox.cs b/osu.Game/Rulesets/Edit/Layers/Selection/SelectionBox.cs index 8907993173..e0e52a41bc 100644 --- a/osu.Game/Rulesets/Edit/Layers/Selection/SelectionBox.cs +++ b/osu.Game/Rulesets/Edit/Layers/Selection/SelectionBox.cs @@ -12,7 +12,7 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection /// /// A box that represents a drag selection. /// - public class SelectionBox : CompositeDrawable + public class SelectionBox : VisibilityContainer { /// /// Creates a new . @@ -52,6 +52,7 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection Size = bottomRight - topLeft; } - public override void Hide() => this.FadeOut(250, Easing.OutQuint).Expire(); + protected override void PopIn() => this.FadeIn(250, Easing.OutQuint); + protected override void PopOut() => this.FadeOut(250, Easing.OutQuint); } } diff --git a/osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs b/osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs index f73820d534..e7acf05345 100644 --- a/osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs +++ b/osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs @@ -43,6 +43,8 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection protected override bool OnDrag(InputState state) { + selectionBox.Show(); + var dragPosition = state.Mouse.NativeState.Position; var dragStartPosition = state.Mouse.NativeState.PositionMouseDown ?? dragPosition; @@ -57,6 +59,8 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection protected override bool OnDragEnd(InputState state) { selectionBox.Hide(); + selectionBox.Expire(); + finishSelection(); return true; From 95831915565a117f53ac38f3afb0b53ac919d04a Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Thu, 15 Feb 2018 19:08:03 +0900 Subject: [PATCH 080/544] Dispose SelectionBoxes when they die --- osu.Game/Rulesets/Edit/Layers/Selection/SelectionBox.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/osu.Game/Rulesets/Edit/Layers/Selection/SelectionBox.cs b/osu.Game/Rulesets/Edit/Layers/Selection/SelectionBox.cs index e0e52a41bc..8eee15d0b2 100644 --- a/osu.Game/Rulesets/Edit/Layers/Selection/SelectionBox.cs +++ b/osu.Game/Rulesets/Edit/Layers/Selection/SelectionBox.cs @@ -52,6 +52,8 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection Size = bottomRight - topLeft; } + public override bool DisposeOnDeathRemoval => true; + protected override void PopIn() => this.FadeIn(250, Easing.OutQuint); protected override void PopOut() => this.FadeOut(250, Easing.OutQuint); } From ebcdb625702ac2f0711b0551ce2f4d8fe51e15f2 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Thu, 15 Feb 2018 19:10:55 +0900 Subject: [PATCH 081/544] Remove now unneeded hide --- osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs | 4 ---- 1 file changed, 4 deletions(-) diff --git a/osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs b/osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs index e7acf05345..af6a4144fd 100644 --- a/osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs +++ b/osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs @@ -111,10 +111,6 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection if (selectedHitObjects.Count == 0) return; - // Due to https://github.com/ppy/osu-framework/issues/1382, we may get here through both - // OnDragEnd and OnClick methods within a single frame, OnMouseDown doesn't help us here - captureBox?.Hide(); - AddInternal(captureBox = new CaptureBox(this, selectedHitObjects.ToList())); } } From cbac4de9c2a3207fe40144abfc8cadf95fe1f4bd Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Thu, 15 Feb 2018 19:11:29 +0900 Subject: [PATCH 082/544] Expire + dispose CaptureBoxes --- osu.Game/Rulesets/Edit/Layers/Selection/CaptureBox.cs | 3 ++- osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/osu.Game/Rulesets/Edit/Layers/Selection/CaptureBox.cs b/osu.Game/Rulesets/Edit/Layers/Selection/CaptureBox.cs index 35e425c981..48f6393ccc 100644 --- a/osu.Game/Rulesets/Edit/Layers/Selection/CaptureBox.cs +++ b/osu.Game/Rulesets/Edit/Layers/Selection/CaptureBox.cs @@ -60,8 +60,9 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection Position = topLeft; } - protected override void PopIn() => this.FadeIn(); + public override bool DisposeOnDeathRemoval => true; + protected override void PopIn() => this.FadeIn(); protected override void PopOut() => this.FadeOut(); } } diff --git a/osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs b/osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs index af6a4144fd..bda613f617 100644 --- a/osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs +++ b/osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs @@ -81,6 +81,7 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection { selectedHitObjects.Clear(); captureBox?.Hide(); + captureBox?.Expire(); } /// From e2421ffe3131683a287f09f5bece22dcf672a1b8 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 15 Feb 2018 19:41:03 +0900 Subject: [PATCH 083/544] Update framework --- osu-framework | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu-framework b/osu-framework index 52b97a5832..458ebc2d46 160000 --- a/osu-framework +++ b/osu-framework @@ -1 +1 @@ -Subproject commit 52b97a5832410eb868421fd7c55cdb67620330d0 +Subproject commit 458ebc2d4626c74bb8059cd28b44eb7adba74fbb From 96c23d2a627ed60902897579f86b86c82a92f588 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 15 Feb 2018 19:41:15 +0900 Subject: [PATCH 084/544] Add override to fix left/right arrow control --- osu.Game/Graphics/UserInterface/FocusedTextBox.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/osu.Game/Graphics/UserInterface/FocusedTextBox.cs b/osu.Game/Graphics/UserInterface/FocusedTextBox.cs index 6d9bf231c3..43a3f06236 100644 --- a/osu.Game/Graphics/UserInterface/FocusedTextBox.cs +++ b/osu.Game/Graphics/UserInterface/FocusedTextBox.cs @@ -18,6 +18,8 @@ namespace osu.Game.Graphics.UserInterface public Action Exit; + public override bool HandleLeftRightArrows => false; + private bool focus; public bool HoldFocus { From c57e8785e23a01145b395da7fea09854bdb10f4e Mon Sep 17 00:00:00 2001 From: TocoToucan Date: Thu, 15 Feb 2018 23:57:53 +0300 Subject: [PATCH 085/544] Move all storyboard loading to Player itself --- osu.Game/Screens/Play/Player.cs | 56 +++++++++-- osu.Game/Screens/Play/PlayerBase.cs | 98 ------------------- osu.Game/Screens/Play/PlayerLoader.cs | 10 +- .../Play/ScreenWithBeatmapBackground.cs | 58 +++++++++++ osu.Game/osu.Game.csproj | 2 +- 5 files changed, 118 insertions(+), 106 deletions(-) delete mode 100644 osu.Game/Screens/Play/PlayerBase.cs create mode 100644 osu.Game/Screens/Play/ScreenWithBeatmapBackground.cs diff --git a/osu.Game/Screens/Play/Player.cs b/osu.Game/Screens/Play/Player.cs index 8ebee96bae..38525b18b9 100644 --- a/osu.Game/Screens/Play/Player.cs +++ b/osu.Game/Screens/Play/Player.cs @@ -5,6 +5,8 @@ using System; using System.Linq; using System.Threading.Tasks; using osu.Framework.Allocation; +using osu.Framework.Audio; +using osu.Framework.Audio.Sample; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Cursor; @@ -14,7 +16,7 @@ using osu.Framework.Screens; using osu.Framework.Threading; using osu.Framework.Timing; using osu.Game.Beatmaps; -using osu.Game.Configuration; +using osu.Game.Graphics; using osu.Game.Graphics.Cursor; using osu.Game.Online.API; using osu.Game.Rulesets; @@ -23,10 +25,11 @@ using osu.Game.Rulesets.Scoring; using osu.Game.Rulesets.UI; using osu.Game.Screens.Play.BreaksOverlay; using osu.Game.Screens.Ranking; +using osu.Game.Storyboards.Drawables; namespace osu.Game.Screens.Play { - public class Player : PlayerBase, IProvideCursor + public class Player : ScreenWithBeatmapBackground, IProvideCursor { public override bool ShowOverlaysOnEnter => false; @@ -53,18 +56,24 @@ namespace osu.Game.Screens.Play private APIAccess api; + private SampleChannel sampleRestart; + private ScoreProcessor scoreProcessor; protected RulesetContainer RulesetContainer; private HUDOverlay hudOverlay; private FailOverlay failOverlay; + private DrawableStoryboard storyboard; + private Container storyboardContainer; + private bool loadedSuccessfully => RulesetContainer?.Objects.Any() == true; [BackgroundDependencyLoader] - private void load(OsuConfigManager config, APIAccess api) + private void load(AudioManager audio, APIAccess api) { this.api = api; + sampleRestart = audio.Sample.Get(@"Gameplay/restart"); WorkingBeatmap working = Beatmap.Value; Beatmap beatmap; @@ -123,7 +132,7 @@ namespace osu.Game.Screens.Play Children = new Drawable[] { - StoryboardContainer = new Container + storyboardContainer = new Container { RelativeSizeAxes = Axes.Both, Clock = offsetClock, @@ -185,7 +194,7 @@ namespace osu.Game.Screens.Play }; if (ShowStoryboard) - InitializeStoryboard(false); + initializeStoryboard(false); // Bind ScoreProcessor to ourselves scoreProcessor.AllJudged += onCompletion; @@ -206,7 +215,7 @@ namespace osu.Game.Screens.Play public void Restart() { - SampleRestart?.Play(); + sampleRestart?.Play(); ValidForResume = false; RestartRequested?.Invoke(); Exit(); @@ -330,5 +339,40 @@ namespace osu.Game.Screens.Play } protected override bool OnWheel(InputState state) => MouseWheelDisabled.Value && !pauseContainer.IsPaused; + + private void initializeStoryboard(bool asyncLoad) + { + if (storyboardContainer == null) + return; + + var beatmap = Beatmap.Value; + + storyboard = beatmap.Storyboard.CreateDrawable(Beatmap.Value); + storyboard.Masking = true; + + if (asyncLoad) + LoadComponentAsync(storyboard, storyboardContainer.Add); + else + storyboardContainer.Add(storyboard); + } + + protected override void UpdateBackgroundElements() + { + if (!IsCurrentScreen) return; + + base.UpdateBackgroundElements(); + + if (ShowStoryboard && storyboard == null) + initializeStoryboard(true); + + var beatmap = Beatmap.Value; + var storyboardVisible = ShowStoryboard && beatmap.Storyboard.HasDrawable; + + storyboardContainer? + .FadeColour(OsuColour.Gray(Opacity), Duration, Easing.OutQuint) + .FadeTo(storyboardVisible && Opacity > 0 ? 1 : 0, Duration, Easing.OutQuint); + + Background?.FadeTo(!storyboardVisible || beatmap.Background == null ? Opacity : 0, Duration, Easing.OutQuint); + } } } diff --git a/osu.Game/Screens/Play/PlayerBase.cs b/osu.Game/Screens/Play/PlayerBase.cs deleted file mode 100644 index 5f22645361..0000000000 --- a/osu.Game/Screens/Play/PlayerBase.cs +++ /dev/null @@ -1,98 +0,0 @@ -// Copyright (c) 2007-2018 ppy Pty Ltd . -// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE - -using osu.Framework.Allocation; -using osu.Framework.Audio; -using osu.Framework.Audio.Sample; -using osu.Framework.Configuration; -using osu.Framework.Graphics; -using osu.Framework.Graphics.Containers; -using osu.Game.Configuration; -using osu.Game.Graphics; -using osu.Game.Screens.Backgrounds; -using osu.Game.Storyboards.Drawables; -using OpenTK; - -namespace osu.Game.Screens.Play -{ - public abstract class PlayerBase : OsuScreen - { - protected override BackgroundScreen CreateBackground() => new BackgroundScreenBeatmap(Beatmap); - public override bool AllowBeatmapRulesetChange => false; - - #region User Settings - - protected Bindable DimLevel; - protected Bindable BlurLevel; - protected Bindable ShowStoryboard; - protected Bindable MouseWheelDisabled; - protected Bindable UserAudioOffset; - - protected SampleChannel SampleRestart; - - #endregion - - protected DrawableStoryboard Storyboard; - protected Container StoryboardContainer; - - [BackgroundDependencyLoader] - private void load(AudioManager audio, OsuConfigManager config) - { - DimLevel = config.GetBindable(OsuSetting.DimLevel); - BlurLevel = config.GetBindable(OsuSetting.BlurLevel); - ShowStoryboard = config.GetBindable(OsuSetting.ShowStoryboard); - - MouseWheelDisabled = config.GetBindable(OsuSetting.MouseDisableWheel); - - SampleRestart = audio.Sample.Get(@"Gameplay/restart"); - - UserAudioOffset = config.GetBindable(OsuSetting.AudioOffset); - } - - protected void ConfigureBackgroundUpdate() - { - DimLevel.ValueChanged += _ => UpdateBackgroundElements(); - BlurLevel.ValueChanged += _ => UpdateBackgroundElements(); - ShowStoryboard.ValueChanged += _ => UpdateBackgroundElements(); - UpdateBackgroundElements(); - } - - protected void UpdateBackgroundElements() - { - if (!IsCurrentScreen) return; - - const float duration = 800; - - var opacity = 1 - (float)DimLevel; - - if (ShowStoryboard && Storyboard == null) - InitializeStoryboard(true); - - var beatmap = Beatmap.Value; - var storyboardVisible = ShowStoryboard && beatmap.Storyboard.HasDrawable; - - StoryboardContainer? - .FadeColour(OsuColour.Gray(opacity), duration, Easing.OutQuint) - .FadeTo(storyboardVisible && opacity > 0 ? 1 : 0, duration, Easing.OutQuint); - - (Background as BackgroundScreenBeatmap)?.BlurTo(new Vector2((float)BlurLevel.Value * 25), duration, Easing.OutQuint); - Background?.FadeTo(!storyboardVisible || beatmap.Background == null ? opacity : 0, duration, Easing.OutQuint); - } - - protected void InitializeStoryboard(bool asyncLoad) - { - if (StoryboardContainer == null) - return; - - var beatmap = Beatmap.Value; - - Storyboard = beatmap.Storyboard.CreateDrawable(Beatmap.Value); - Storyboard.Masking = true; - - if (asyncLoad) - LoadComponentAsync(Storyboard, StoryboardContainer.Add); - else - StoryboardContainer.Add(Storyboard); - } - } -} diff --git a/osu.Game/Screens/Play/PlayerLoader.cs b/osu.Game/Screens/Play/PlayerLoader.cs index a4284efddb..fa5ed6365f 100644 --- a/osu.Game/Screens/Play/PlayerLoader.cs +++ b/osu.Game/Screens/Play/PlayerLoader.cs @@ -16,7 +16,7 @@ using osu.Game.Screens.Play.PlayerSettings; namespace osu.Game.Screens.Play { - public class PlayerLoader : PlayerBase + public class PlayerLoader : ScreenWithBeatmapBackground { private Player player; @@ -263,5 +263,13 @@ namespace osu.Game.Screens.Play }; } } + + protected override void UpdateBackgroundElements() + { + if (!IsCurrentScreen) return; + + base.UpdateBackgroundElements(); + Background?.FadeTo(Opacity, Duration, Easing.OutQuint); + } } } diff --git a/osu.Game/Screens/Play/ScreenWithBeatmapBackground.cs b/osu.Game/Screens/Play/ScreenWithBeatmapBackground.cs new file mode 100644 index 0000000000..83346d677c --- /dev/null +++ b/osu.Game/Screens/Play/ScreenWithBeatmapBackground.cs @@ -0,0 +1,58 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using osu.Framework.Allocation; +using osu.Framework.Configuration; +using osu.Framework.Graphics; +using osu.Game.Configuration; +using osu.Game.Screens.Backgrounds; +using OpenTK; + +namespace osu.Game.Screens.Play +{ + public abstract class ScreenWithBeatmapBackground : OsuScreen + { + protected override BackgroundScreen CreateBackground() => new BackgroundScreenBeatmap(Beatmap); + public override bool AllowBeatmapRulesetChange => false; + + protected float Duration => 800; + protected float Opacity => 1 - (float)DimLevel; + + #region User Settings + + protected Bindable DimLevel; + protected Bindable BlurLevel; + protected Bindable ShowStoryboard; + protected Bindable MouseWheelDisabled; + protected Bindable UserAudioOffset; + + #endregion + + [BackgroundDependencyLoader] + private void load(OsuConfigManager config) + { + DimLevel = config.GetBindable(OsuSetting.DimLevel); + BlurLevel = config.GetBindable(OsuSetting.BlurLevel); + ShowStoryboard = config.GetBindable(OsuSetting.ShowStoryboard); + + MouseWheelDisabled = config.GetBindable(OsuSetting.MouseDisableWheel); + + UserAudioOffset = config.GetBindable(OsuSetting.AudioOffset); + } + + protected void ConfigureBackgroundUpdate() + { + DimLevel.ValueChanged += _ => UpdateBackgroundElements(); + BlurLevel.ValueChanged += _ => UpdateBackgroundElements(); + ShowStoryboard.ValueChanged += _ => UpdateBackgroundElements(); + UpdateBackgroundElements(); + } + + protected virtual void UpdateBackgroundElements() + { + if (!IsCurrentScreen) return; + + (Background as BackgroundScreenBeatmap)?.BlurTo(new Vector2((float)BlurLevel.Value * 25), Duration, Easing.OutQuint); + } + } +} diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index cc5f5b92da..b9ab6e7c59 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -340,7 +340,7 @@ - + From ddf49c2e65e6e2af48c7ebfd3d69df4eb26387c8 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Fri, 16 Feb 2018 10:45:15 +0900 Subject: [PATCH 086/544] Fix intro not being replaced by a playable song when entering song select --- osu.Game/Screens/Select/SongSelect.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game/Screens/Select/SongSelect.cs b/osu.Game/Screens/Select/SongSelect.cs index f35768d933..de6847d866 100644 --- a/osu.Game/Screens/Select/SongSelect.cs +++ b/osu.Game/Screens/Select/SongSelect.cs @@ -448,7 +448,7 @@ namespace osu.Game.Screens.Select private void carouselBeatmapsLoaded() { - if (!Beatmap.IsDefault && Beatmap.Value.BeatmapSetInfo?.DeletePending == false) + if (!Beatmap.IsDefault && Beatmap.Value.BeatmapSetInfo?.DeletePending == false && Beatmap.Value.BeatmapSetInfo?.Protected == false) { Carousel.SelectBeatmap(Beatmap.Value.BeatmapInfo); } From 9760f30ce97637256b963cac3267c9ef3d8542b5 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Fri, 16 Feb 2018 12:08:21 +0900 Subject: [PATCH 087/544] Tidy things up to make more sense --- osu.Game/Screens/Play/Player.cs | 9 +++++---- osu.Game/Screens/Play/PlayerLoader.cs | 8 -------- osu.Game/Screens/Play/ScreenWithBeatmapBackground.cs | 9 ++++++--- 3 files changed, 11 insertions(+), 15 deletions(-) diff --git a/osu.Game/Screens/Play/Player.cs b/osu.Game/Screens/Play/Player.cs index 96ae4c7872..467332dbb9 100644 --- a/osu.Game/Screens/Play/Player.cs +++ b/osu.Game/Screens/Play/Player.cs @@ -347,7 +347,7 @@ namespace osu.Game.Screens.Play var beatmap = Beatmap.Value; - storyboard = beatmap.Storyboard.CreateDrawable(Beatmap.Value); + storyboard = beatmap.Storyboard.CreateDrawable(); storyboard.Masking = true; if (asyncLoad) @@ -369,10 +369,11 @@ namespace osu.Game.Screens.Play var storyboardVisible = ShowStoryboard && beatmap.Storyboard.HasDrawable; storyboardContainer? - .FadeColour(OsuColour.Gray(Opacity), Duration, Easing.OutQuint) - .FadeTo(storyboardVisible && Opacity > 0 ? 1 : 0, Duration, Easing.OutQuint); + .FadeColour(OsuColour.Gray(BackgroundOpacity), BACKGROUND_FADE_DURATION, Easing.OutQuint) + .FadeTo(storyboardVisible && BackgroundOpacity > 0 ? 1 : 0, BACKGROUND_FADE_DURATION, Easing.OutQuint); - Background?.FadeTo(!storyboardVisible || beatmap.Background == null ? Opacity : 0, Duration, Easing.OutQuint); + if (storyboardVisible && beatmap.Storyboard.ReplacesBackground) + Background?.FadeTo(0, BACKGROUND_FADE_DURATION, Easing.OutQuint); } } } diff --git a/osu.Game/Screens/Play/PlayerLoader.cs b/osu.Game/Screens/Play/PlayerLoader.cs index fa5ed6365f..042b4fc744 100644 --- a/osu.Game/Screens/Play/PlayerLoader.cs +++ b/osu.Game/Screens/Play/PlayerLoader.cs @@ -263,13 +263,5 @@ namespace osu.Game.Screens.Play }; } } - - protected override void UpdateBackgroundElements() - { - if (!IsCurrentScreen) return; - - base.UpdateBackgroundElements(); - Background?.FadeTo(Opacity, Duration, Easing.OutQuint); - } } } diff --git a/osu.Game/Screens/Play/ScreenWithBeatmapBackground.cs b/osu.Game/Screens/Play/ScreenWithBeatmapBackground.cs index 83346d677c..d83f7e087d 100644 --- a/osu.Game/Screens/Play/ScreenWithBeatmapBackground.cs +++ b/osu.Game/Screens/Play/ScreenWithBeatmapBackground.cs @@ -13,10 +13,12 @@ namespace osu.Game.Screens.Play public abstract class ScreenWithBeatmapBackground : OsuScreen { protected override BackgroundScreen CreateBackground() => new BackgroundScreenBeatmap(Beatmap); + public override bool AllowBeatmapRulesetChange => false; - protected float Duration => 800; - protected float Opacity => 1 - (float)DimLevel; + protected const float BACKGROUND_FADE_DURATION = 800; + + protected float BackgroundOpacity => 1 - (float)DimLevel; #region User Settings @@ -52,7 +54,8 @@ namespace osu.Game.Screens.Play { if (!IsCurrentScreen) return; - (Background as BackgroundScreenBeatmap)?.BlurTo(new Vector2((float)BlurLevel.Value * 25), Duration, Easing.OutQuint); + Background?.FadeTo(BackgroundOpacity, BACKGROUND_FADE_DURATION, Easing.OutQuint); + (Background as BackgroundScreenBeatmap)?.BlurTo(new Vector2((float)BlurLevel.Value * 25), BACKGROUND_FADE_DURATION, Easing.OutQuint); } } } From 21b641b302e8952e23cb6245022c976530d7b028 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Fri, 16 Feb 2018 12:07:59 +0900 Subject: [PATCH 088/544] Give storyboards a BeatmapInfo to reduce weird method calls Also removes unnecessary background texture (the actual storyboard background spec wasn't implemented correctly anyway). --- .../Beatmaps/BeatmapManager_WorkingBeatmap.cs | 19 ++++++++++---- osu.Game/Beatmaps/WorkingBeatmap.cs | 2 +- .../Drawables/DrawableStoryboard.cs | 18 ------------- osu.Game/Storyboards/Storyboard.cs | 26 ++++++++----------- 4 files changed, 26 insertions(+), 39 deletions(-) diff --git a/osu.Game/Beatmaps/BeatmapManager_WorkingBeatmap.cs b/osu.Game/Beatmaps/BeatmapManager_WorkingBeatmap.cs index 14a4028b44..07d05f470e 100644 --- a/osu.Game/Beatmaps/BeatmapManager_WorkingBeatmap.cs +++ b/osu.Game/Beatmaps/BeatmapManager_WorkingBeatmap.cs @@ -75,23 +75,32 @@ namespace osu.Game.Beatmaps protected override Storyboard GetStoryboard() { + Storyboard storyboard; try { using (var beatmap = new StreamReader(store.GetStream(getPathForFile(BeatmapInfo.Path)))) { Decoder decoder = Decoder.GetDecoder(beatmap); - if (BeatmapSetInfo?.StoryboardFile == null) - return decoder.GetStoryboardDecoder().DecodeStoryboard(beatmap); + // todo: support loading from both set-wide storyboard *and* baetmap specific. - using (var storyboard = new StreamReader(store.GetStream(getPathForFile(BeatmapSetInfo.StoryboardFile)))) - return decoder.GetStoryboardDecoder().DecodeStoryboard(beatmap, storyboard); + if (BeatmapSetInfo?.StoryboardFile == null) + storyboard = decoder.GetStoryboardDecoder().DecodeStoryboard(beatmap); + else + { + using (var reader = new StreamReader(store.GetStream(getPathForFile(BeatmapSetInfo.StoryboardFile)))) + storyboard = decoder.GetStoryboardDecoder().DecodeStoryboard(beatmap, reader); + } } } catch { - return new Storyboard(); + storyboard = new Storyboard(); } + + storyboard.BeatmapInfo = BeatmapInfo; + + return storyboard; } } } diff --git a/osu.Game/Beatmaps/WorkingBeatmap.cs b/osu.Game/Beatmaps/WorkingBeatmap.cs index c633b94951..8a2a7b01a1 100644 --- a/osu.Game/Beatmaps/WorkingBeatmap.cs +++ b/osu.Game/Beatmaps/WorkingBeatmap.cs @@ -57,7 +57,7 @@ namespace osu.Game.Beatmaps protected abstract Texture GetBackground(); protected abstract Track GetTrack(); protected virtual Waveform GetWaveform() => new Waveform(); - protected virtual Storyboard GetStoryboard() => new Storyboard(); + protected virtual Storyboard GetStoryboard() => new Storyboard { BeatmapInfo = BeatmapInfo }; public bool BeatmapLoaded => beatmap.IsResultAvailable; public Beatmap Beatmap => beatmap.Value.Result; diff --git a/osu.Game/Storyboards/Drawables/DrawableStoryboard.cs b/osu.Game/Storyboards/Drawables/DrawableStoryboard.cs index 2489369493..aaeaaabd55 100644 --- a/osu.Game/Storyboards/Drawables/DrawableStoryboard.cs +++ b/osu.Game/Storyboards/Drawables/DrawableStoryboard.cs @@ -5,7 +5,6 @@ using OpenTK; using osu.Framework.Allocation; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; -using osu.Framework.Graphics.Sprites; using osu.Framework.Graphics.Textures; using osu.Game.IO; @@ -15,13 +14,6 @@ namespace osu.Game.Storyboards.Drawables { public Storyboard Storyboard { get; private set; } - private readonly Background background; - public Texture BackgroundTexture - { - get { return background.Texture; } - set { background.Texture = value; } - } - private readonly Container content; protected override Container Content => content; @@ -52,11 +44,6 @@ namespace osu.Game.Storyboards.Drawables Anchor = Anchor.Centre; Origin = Anchor.Centre; - AddInternal(background = new Background - { - Anchor = Anchor.Centre, - Origin = Anchor.Centre, - }); AddInternal(content = new Container { Size = new Vector2(640, 480), @@ -79,10 +66,5 @@ namespace osu.Game.Storyboards.Drawables foreach (var layer in Children) layer.Enabled = passing ? layer.Layer.EnabledWhenPassing : layer.Layer.EnabledWhenFailing; } - - private class Background : Sprite - { - protected override Vector2 DrawScale => Texture != null ? new Vector2(Parent.DrawHeight / Texture.DisplayHeight) : base.DrawScale; - } } } diff --git a/osu.Game/Storyboards/Storyboard.cs b/osu.Game/Storyboards/Storyboard.cs index e2587debc9..9d4efadc81 100644 --- a/osu.Game/Storyboards/Storyboard.cs +++ b/osu.Game/Storyboards/Storyboard.cs @@ -14,6 +14,8 @@ namespace osu.Game.Storyboards private readonly Dictionary layers = new Dictionary(); public IEnumerable Layers => layers.Values; + public BeatmapInfo BeatmapInfo = new BeatmapInfo(); + public bool HasDrawable => Layers.Any(l => l.Elements.Any(e => e.IsDrawable)); public Storyboard() @@ -36,28 +38,22 @@ namespace osu.Game.Storyboards /// /// Whether the beatmap's background should be hidden while this storyboard is being displayed. /// - public bool ReplacesBackground(BeatmapInfo beatmapInfo) + public bool ReplacesBackground { - var backgroundPath = beatmapInfo.BeatmapSet?.Metadata?.BackgroundFile?.ToLowerInvariant(); - if (backgroundPath == null) - return false; + get + { + var backgroundPath = BeatmapInfo.BeatmapSet?.Metadata?.BackgroundFile?.ToLowerInvariant(); + if (backgroundPath == null) + return false; - return GetLayer("Background").Elements.Any(e => e.Path.ToLowerInvariant() == backgroundPath); + return GetLayer("Background").Elements.Any(e => e.Path.ToLowerInvariant() == backgroundPath); + } } - public float AspectRatio(BeatmapInfo beatmapInfo) - => beatmapInfo.WidescreenStoryboard ? 16 / 9f : 4 / 3f; - public DrawableStoryboard CreateDrawable(WorkingBeatmap working = null) { var drawable = new DrawableStoryboard(this); - if (working != null) - { - var beatmapInfo = working.Beatmap.BeatmapInfo; - drawable.Width = drawable.Height * AspectRatio(beatmapInfo); - if (!ReplacesBackground(beatmapInfo)) - drawable.BackgroundTexture = working.Background; - } + drawable.Width = drawable.Height * (BeatmapInfo.WidescreenStoryboard ? 16 / 9f : 4 / 3f); return drawable; } From 29adedfa96bf0882f4f54b4727069eca8a35cbac Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Fri, 16 Feb 2018 11:17:28 +0900 Subject: [PATCH 089/544] Collapse visual settings by default in player --- .../Screens/Play/HUD/PlayerSettingsOverlay.cs | 2 +- .../PlayerSettings/PlayerSettingsGroup.cs | 41 +++++++++++-------- 2 files changed, 24 insertions(+), 19 deletions(-) diff --git a/osu.Game/Screens/Play/HUD/PlayerSettingsOverlay.cs b/osu.Game/Screens/Play/HUD/PlayerSettingsOverlay.cs index e6cf1f7982..5dba10ffc1 100644 --- a/osu.Game/Screens/Play/HUD/PlayerSettingsOverlay.cs +++ b/osu.Game/Screens/Play/HUD/PlayerSettingsOverlay.cs @@ -39,7 +39,7 @@ namespace osu.Game.Screens.Play.HUD //CollectionSettings = new CollectionSettings(), //DiscussionSettings = new DiscussionSettings(), PlaybackSettings = new PlaybackSettings(), - VisualSettings = new VisualSettings() + VisualSettings = new VisualSettings { Expanded = false } } }; diff --git a/osu.Game/Screens/Play/PlayerSettings/PlayerSettingsGroup.cs b/osu.Game/Screens/Play/PlayerSettings/PlayerSettingsGroup.cs index e8a4bc6b27..95b464154a 100644 --- a/osu.Game/Screens/Play/PlayerSettings/PlayerSettingsGroup.cs +++ b/osu.Game/Screens/Play/PlayerSettings/PlayerSettingsGroup.cs @@ -31,6 +31,28 @@ namespace osu.Game.Screens.Play.PlayerSettings private bool expanded = true; + public bool Expanded + { + get { return expanded; } + set + { + if (expanded == value) return; + expanded = value; + + content.ClearTransforms(); + + if (expanded) + content.AutoSizeAxes = Axes.Y; + else + { + content.AutoSizeAxes = Axes.None; + content.ResizeHeightTo(0, transition_duration, Easing.OutQuint); + } + + button.FadeColour(expanded ? buttonActiveColour : Color4.White, 200, Easing.OutQuint); + } + } + private Color4 buttonActiveColour; protected PlayerSettingsGroup() @@ -82,7 +104,7 @@ namespace osu.Game.Screens.Play.PlayerSettings Position = new Vector2(-15, 0), Icon = FontAwesome.fa_bars, Scale = new Vector2(0.75f), - Action = toggleContentVisibility, + Action = () => Expanded = !Expanded, }, } }, @@ -111,22 +133,5 @@ namespace osu.Game.Screens.Play.PlayerSettings } protected override Container Content => content; - - private void toggleContentVisibility() - { - content.ClearTransforms(); - - expanded = !expanded; - - if (expanded) - content.AutoSizeAxes = Axes.Y; - else - { - content.AutoSizeAxes = Axes.None; - content.ResizeHeightTo(0, transition_duration, Easing.OutQuint); - } - - button.FadeColour(expanded ? buttonActiveColour : Color4.White, 200, Easing.OutQuint); - } } } From 75dcf72520fe3b1a8eb50130e4bc72a1f85f9177 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Fri, 16 Feb 2018 13:47:30 +0900 Subject: [PATCH 090/544] Improve testability of API --- osu.Game/Online/API/APIAccess.cs | 5 ++-- osu.Game/Online/API/DummyAPIAccess.cs | 31 ++++++++++++++++++++++++ osu.Game/Online/API/IAPIProvider.cs | 34 +++++++++++++++++++++++++++ osu.Game/OsuGameBase.cs | 1 + osu.Game/osu.Game.csproj | 2 ++ 5 files changed, 70 insertions(+), 3 deletions(-) create mode 100644 osu.Game/Online/API/DummyAPIAccess.cs create mode 100644 osu.Game/Online/API/IAPIProvider.cs diff --git a/osu.Game/Online/API/APIAccess.cs b/osu.Game/Online/API/APIAccess.cs index 1d657b8664..90f3999ddd 100644 --- a/osu.Game/Online/API/APIAccess.cs +++ b/osu.Game/Online/API/APIAccess.cs @@ -7,7 +7,6 @@ using System.Collections.Generic; using System.Diagnostics; using System.Net; using System.Threading; -using osu.Framework; using osu.Framework.Configuration; using osu.Framework.Logging; using osu.Framework.Threading; @@ -16,7 +15,7 @@ using osu.Game.Users; namespace osu.Game.Online.API { - public class APIAccess : IUpdateable + public class APIAccess : IAPIProvider { private readonly OAuth authentication; @@ -34,7 +33,7 @@ namespace osu.Game.Online.API public string Password; - public Bindable LocalUser = new Bindable(createGuestUser()); + public Bindable LocalUser { get; } = new Bindable(createGuestUser()); public string Token { diff --git a/osu.Game/Online/API/DummyAPIAccess.cs b/osu.Game/Online/API/DummyAPIAccess.cs new file mode 100644 index 0000000000..fc0dc0ef8b --- /dev/null +++ b/osu.Game/Online/API/DummyAPIAccess.cs @@ -0,0 +1,31 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using osu.Framework.Configuration; +using osu.Game.Users; + +namespace osu.Game.Online.API +{ + public class DummyAPIAccess : IAPIProvider + { + public Bindable LocalUser { get; } = new Bindable(new User + { + Username = @"Dummy", + Id = 1, + }); + + public bool IsLoggedIn => true; + + public void Update() + { + } + + public virtual void Queue(APIRequest request) + { + } + + public void Register(IOnlineComponent component) + { + } + } +} diff --git a/osu.Game/Online/API/IAPIProvider.cs b/osu.Game/Online/API/IAPIProvider.cs new file mode 100644 index 0000000000..b3c8774209 --- /dev/null +++ b/osu.Game/Online/API/IAPIProvider.cs @@ -0,0 +1,34 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using osu.Framework; +using osu.Framework.Configuration; +using osu.Game.Users; + +namespace osu.Game.Online.API +{ + public interface IAPIProvider : IUpdateable + { + /// + /// The local user. + /// + Bindable LocalUser { get; } + + /// + /// Returns whether the local user is logged in. + /// + bool IsLoggedIn { get; } + + /// + /// Queue a new request. + /// + /// The request to perform. + void Queue(APIRequest request); + + /// + /// Register a component to receive state changes. + /// + /// The component to register. + void Register(IOnlineComponent component); + } +} diff --git a/osu.Game/OsuGameBase.cs b/osu.Game/OsuGameBase.cs index 505577416d..b5d7836f49 100644 --- a/osu.Game/OsuGameBase.cs +++ b/osu.Game/OsuGameBase.cs @@ -105,6 +105,7 @@ namespace osu.Game Username = LocalConfig.Get(OsuSetting.Username), Token = LocalConfig.Get(OsuSetting.Token) }); + dependencies.CacheAs(API); dependencies.Cache(RulesetStore = new RulesetStore(contextFactory)); dependencies.Cache(FileStore = new FileStore(contextFactory, Host.Storage)); diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index 02801eb81f..42e54472d1 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -281,6 +281,8 @@ + + From e0faf14a3e6ac549608acc2f304abeeb4e381974 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Mon, 19 Feb 2018 12:33:07 +0900 Subject: [PATCH 091/544] Actually consume ReplacesBackground --- osu.Game/Screens/Play/Player.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game/Screens/Play/Player.cs b/osu.Game/Screens/Play/Player.cs index 5df88b2b23..4954618ef9 100644 --- a/osu.Game/Screens/Play/Player.cs +++ b/osu.Game/Screens/Play/Player.cs @@ -387,7 +387,7 @@ namespace osu.Game.Screens.Play .FadeTo(storyboardVisible && opacity > 0 ? 1 : 0, duration, Easing.OutQuint); (Background as BackgroundScreenBeatmap)?.BlurTo(new Vector2((float)blurLevel.Value * 25), duration, Easing.OutQuint); - Background?.FadeTo(!storyboardVisible || beatmap.Background == null ? opacity : 0, duration, Easing.OutQuint); + Background?.FadeTo(beatmap.Background != null && (!storyboardVisible || !beatmap.Storyboard.ReplacesBackground) ? opacity : 0, duration, Easing.OutQuint); } private void fadeOut() From a7915e70415a5c49f13ba5c2a4ccbb8781008dd0 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Mon, 19 Feb 2018 14:00:48 +0900 Subject: [PATCH 092/544] Fix typo --- osu.Game/Beatmaps/BeatmapManager_WorkingBeatmap.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game/Beatmaps/BeatmapManager_WorkingBeatmap.cs b/osu.Game/Beatmaps/BeatmapManager_WorkingBeatmap.cs index 07d05f470e..a72c1adfcd 100644 --- a/osu.Game/Beatmaps/BeatmapManager_WorkingBeatmap.cs +++ b/osu.Game/Beatmaps/BeatmapManager_WorkingBeatmap.cs @@ -82,7 +82,7 @@ namespace osu.Game.Beatmaps { Decoder decoder = Decoder.GetDecoder(beatmap); - // todo: support loading from both set-wide storyboard *and* baetmap specific. + // todo: support loading from both set-wide storyboard *and* beatmap specific. if (BeatmapSetInfo?.StoryboardFile == null) storyboard = decoder.GetStoryboardDecoder().DecodeStoryboard(beatmap); From 8b89735e9e5ee84a7d504c0a73b169484812ba0c Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Mon, 19 Feb 2018 14:17:41 +0900 Subject: [PATCH 093/544] Improve xmldoc for DatabaseContextFactory.Get --- osu.Game/Database/DatabaseContextFactory.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/osu.Game/Database/DatabaseContextFactory.cs b/osu.Game/Database/DatabaseContextFactory.cs index 2068d6bd8a..712ed2d0cc 100644 --- a/osu.Game/Database/DatabaseContextFactory.cs +++ b/osu.Game/Database/DatabaseContextFactory.cs @@ -26,7 +26,8 @@ namespace osu.Game.Database } /// - /// Get a context for read-only usage. + /// Get a context for the current thread for read-only usage. + /// If a is in progress, the existing write-safe context will be returned. /// public OsuDbContext Get() => threadContexts.Value; From 57e61b0b0e49fc6654fbcab291ea81a2841a396c Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Mon, 19 Feb 2018 14:50:42 +0900 Subject: [PATCH 094/544] Update xmldoc --- osu.Game/Database/ArchiveModelManager.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/osu.Game/Database/ArchiveModelManager.cs b/osu.Game/Database/ArchiveModelManager.cs index 902a42c172..a65593ff82 100644 --- a/osu.Game/Database/ArchiveModelManager.cs +++ b/osu.Game/Database/ArchiveModelManager.cs @@ -304,8 +304,8 @@ namespace osu.Game.Database /// Create a barebones model from the provided archive. /// Actual expensive population should be done in ; this should just prepare for duplicate checking. /// - /// - /// + /// The archive to create the model for. + /// A model populated with minimal information. protected abstract TModel CreateModel(ArchiveReader archive); /// From d70d40e3b8f5d6919b030281df21847c9eceffdb Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Mon, 19 Feb 2018 15:52:14 +0900 Subject: [PATCH 095/544] Add back forgotten score store to valid importers --- osu.Game/OsuGameBase.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/osu.Game/OsuGameBase.cs b/osu.Game/OsuGameBase.cs index de2a4d0b82..8974275da2 100644 --- a/osu.Game/OsuGameBase.cs +++ b/osu.Game/OsuGameBase.cs @@ -118,6 +118,7 @@ namespace osu.Game dependencies.Cache(new OsuColour()); fileImporters.Add(BeatmapManager); + fileImporters.Add(ScoreStore); //this completely overrides the framework default. will need to change once we make a proper FontStore. dependencies.Cache(Fonts = new FontStore { ScaleAdjust = 100 }); From ef11ce3dd121a2eabfbffb10c9d655705d087a77 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 19 Feb 2018 17:02:27 +0900 Subject: [PATCH 096/544] Remove Size override from OsuPlayfield --- osu.Game.Rulesets.Osu/UI/OsuPlayfield.cs | 17 ++--------------- osu.Game.Rulesets.Osu/UI/OsuRulesetContainer.cs | 6 +++++- 2 files changed, 7 insertions(+), 16 deletions(-) diff --git a/osu.Game.Rulesets.Osu/UI/OsuPlayfield.cs b/osu.Game.Rulesets.Osu/UI/OsuPlayfield.cs index 17521f8992..7f8cbce78e 100644 --- a/osu.Game.Rulesets.Osu/UI/OsuPlayfield.cs +++ b/osu.Game.Rulesets.Osu/UI/OsuPlayfield.cs @@ -27,21 +27,8 @@ namespace osu.Game.Rulesets.Osu.UI public static readonly Vector2 BASE_SIZE = new Vector2(512, 384); - public override Vector2 Size - { - get - { - if (Parent == null) - return Vector2.Zero; - - var parentSize = Parent.DrawSize; - var aspectSize = parentSize.X * 0.75f < parentSize.Y ? new Vector2(parentSize.X, parentSize.X * 0.75f) : new Vector2(parentSize.Y * 4f / 3f, parentSize.Y); - - return new Vector2(aspectSize.X / parentSize.X, aspectSize.Y / parentSize.Y) * base.Size; - } - } - - public OsuPlayfield() : base(BASE_SIZE.X) + public OsuPlayfield() + : base(BASE_SIZE.X) { Anchor = Anchor.Centre; Origin = Anchor.Centre; diff --git a/osu.Game.Rulesets.Osu/UI/OsuRulesetContainer.cs b/osu.Game.Rulesets.Osu/UI/OsuRulesetContainer.cs index 526348062f..07b59c1ef7 100644 --- a/osu.Game.Rulesets.Osu/UI/OsuRulesetContainer.cs +++ b/osu.Game.Rulesets.Osu/UI/OsuRulesetContainer.cs @@ -50,7 +50,11 @@ namespace osu.Game.Rulesets.Osu.UI protected override FramedReplayInputHandler CreateReplayInputHandler(Replay replay) => new OsuReplayInputHandler(replay); - protected override Vector2 GetPlayfieldAspectAdjust() => new Vector2(0.75f); + protected override Vector2 GetPlayfieldAspectAdjust() + { + var aspectSize = DrawSize.X * 0.75f < DrawSize.Y ? new Vector2(DrawSize.X, DrawSize.X * 0.75f) : new Vector2(DrawSize.Y * 4f / 3f, DrawSize.Y); + return new Vector2(aspectSize.X / DrawSize.X, aspectSize.Y / DrawSize.Y) * 0.75f; + } protected override CursorContainer CreateCursor() => new GameplayCursor(); } From cd2c9a9de69a7af6d50b6c9c820da7621b0cdb7d Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 19 Feb 2018 17:04:18 +0900 Subject: [PATCH 097/544] Adjust xmldoc and rename to GetAspectAdjustedSize --- osu.Game.Rulesets.Mania/UI/ManiaRulesetContainer.cs | 2 +- osu.Game.Rulesets.Osu/UI/OsuRulesetContainer.cs | 2 +- osu.Game.Rulesets.Taiko/UI/TaikoRulesetContainer.cs | 2 +- osu.Game/Rulesets/UI/RulesetContainer.cs | 9 +++++---- 4 files changed, 8 insertions(+), 7 deletions(-) diff --git a/osu.Game.Rulesets.Mania/UI/ManiaRulesetContainer.cs b/osu.Game.Rulesets.Mania/UI/ManiaRulesetContainer.cs index 436d5c1ea6..3c9647117e 100644 --- a/osu.Game.Rulesets.Mania/UI/ManiaRulesetContainer.cs +++ b/osu.Game.Rulesets.Mania/UI/ManiaRulesetContainer.cs @@ -101,7 +101,7 @@ namespace osu.Game.Rulesets.Mania.UI return null; } - protected override Vector2 GetPlayfieldAspectAdjust() => new Vector2(1, 0.8f); + protected override Vector2 GetAspectAdjustedSize() => new Vector2(1, 0.8f); protected override FramedReplayInputHandler CreateReplayInputHandler(Replay replay) => new ManiaFramedReplayInputHandler(replay, this); diff --git a/osu.Game.Rulesets.Osu/UI/OsuRulesetContainer.cs b/osu.Game.Rulesets.Osu/UI/OsuRulesetContainer.cs index 07b59c1ef7..9cb6a13cb2 100644 --- a/osu.Game.Rulesets.Osu/UI/OsuRulesetContainer.cs +++ b/osu.Game.Rulesets.Osu/UI/OsuRulesetContainer.cs @@ -50,7 +50,7 @@ namespace osu.Game.Rulesets.Osu.UI protected override FramedReplayInputHandler CreateReplayInputHandler(Replay replay) => new OsuReplayInputHandler(replay); - protected override Vector2 GetPlayfieldAspectAdjust() + protected override Vector2 GetAspectAdjustedSize() { var aspectSize = DrawSize.X * 0.75f < DrawSize.Y ? new Vector2(DrawSize.X, DrawSize.X * 0.75f) : new Vector2(DrawSize.Y * 4f / 3f, DrawSize.Y); return new Vector2(aspectSize.X / DrawSize.X, aspectSize.Y / DrawSize.Y) * 0.75f; diff --git a/osu.Game.Rulesets.Taiko/UI/TaikoRulesetContainer.cs b/osu.Game.Rulesets.Taiko/UI/TaikoRulesetContainer.cs index 1b9821d698..8342009e80 100644 --- a/osu.Game.Rulesets.Taiko/UI/TaikoRulesetContainer.cs +++ b/osu.Game.Rulesets.Taiko/UI/TaikoRulesetContainer.cs @@ -78,7 +78,7 @@ namespace osu.Game.Rulesets.Taiko.UI } } - protected override Vector2 GetPlayfieldAspectAdjust() + protected override Vector2 GetAspectAdjustedSize() { const float default_relative_height = TaikoPlayfield.DEFAULT_HEIGHT / 768; const float default_aspect = 16f / 9f; diff --git a/osu.Game/Rulesets/UI/RulesetContainer.cs b/osu.Game/Rulesets/UI/RulesetContainer.cs index 231250e858..8f91c3fcf2 100644 --- a/osu.Game/Rulesets/UI/RulesetContainer.cs +++ b/osu.Game/Rulesets/UI/RulesetContainer.cs @@ -324,7 +324,7 @@ namespace osu.Game.Rulesets.UI { base.Update(); - Playfield.Size = AspectAdjust ? GetPlayfieldAspectAdjust() : Vector2.One; + Playfield.Size = AspectAdjust ? GetAspectAdjustedSize() : Vector2.One; } /// @@ -335,10 +335,11 @@ namespace osu.Game.Rulesets.UI protected virtual BeatmapProcessor CreateBeatmapProcessor() => new BeatmapProcessor(); /// - /// In some cases we want to apply changes to the relative size of our contained based on custom conditions. + /// Computes the final size of the in relative coordinate space after all + /// aspect and scale adjustments. /// - /// - protected virtual Vector2 GetPlayfieldAspectAdjust() => new Vector2(0.75f); //a sane default + /// The aspect-adjusted size. + protected virtual Vector2 GetAspectAdjustedSize() => new Vector2(0.75f); // A sane default /// /// Creates a converter to convert Beatmap to a specific mode. From b7be162f28ab16cad692876ed5ebf9442bca2d30 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 19 Feb 2018 17:05:10 +0900 Subject: [PATCH 098/544] Remove AspectAdjust property (override GetAspectAdjustedSize instead) --- osu.Game/Rulesets/UI/RulesetContainer.cs | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/osu.Game/Rulesets/UI/RulesetContainer.cs b/osu.Game/Rulesets/UI/RulesetContainer.cs index 8f91c3fcf2..f4e700a8eb 100644 --- a/osu.Game/Rulesets/UI/RulesetContainer.cs +++ b/osu.Game/Rulesets/UI/RulesetContainer.cs @@ -33,11 +33,6 @@ namespace osu.Game.Rulesets.UI /// public abstract class RulesetContainer : Container { - /// - /// Whether to apply adjustments to the child based on our own size. - /// - public bool AspectAdjust = true; - /// /// The selected variant. /// @@ -324,7 +319,7 @@ namespace osu.Game.Rulesets.UI { base.Update(); - Playfield.Size = AspectAdjust ? GetAspectAdjustedSize() : Vector2.One; + Playfield.Size = GetAspectAdjustedSize(); } /// From 4a5cd6520ccd4c3e5977744763da3da4240c4e4a Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Tue, 20 Feb 2018 13:50:31 +0900 Subject: [PATCH 099/544] Extract playfield scaling into a separate class And make it more general. --- osu.Game/Rulesets/UI/Playfield.cs | 52 +++-------- osu.Game/Rulesets/UI/ScalableContainer.cs | 86 +++++++++++++++++++ .../UI/Scrolling/ScrollingPlayfield.cs | 11 ++- osu.Game/osu.Game.csproj | 1 + 4 files changed, 105 insertions(+), 45 deletions(-) create mode 100644 osu.Game/Rulesets/UI/ScalableContainer.cs diff --git a/osu.Game/Rulesets/UI/Playfield.cs b/osu.Game/Rulesets/UI/Playfield.cs index a7fed7059b..bbf20c2c26 100644 --- a/osu.Game/Rulesets/UI/Playfield.cs +++ b/osu.Game/Rulesets/UI/Playfield.cs @@ -3,52 +3,37 @@ using System.Collections.Generic; using osu.Framework.Graphics; -using osu.Framework.Graphics.Containers; using osu.Game.Rulesets.Objects.Drawables; -using OpenTK; using osu.Framework.Allocation; namespace osu.Game.Rulesets.UI { - public abstract class Playfield : Container + public abstract class Playfield : ScalableContainer { /// /// The HitObjects contained in this Playfield. /// public HitObjectContainer HitObjects { get; private set; } - public Container ScaledContent; - - protected override Container Content => content; - private readonly Container content; - - private List nestedPlayfields; - /// /// All the s nested inside this playfield. /// public IReadOnlyList NestedPlayfields => nestedPlayfields; + private List nestedPlayfields; /// /// A container for keeping track of DrawableHitObjects. /// - /// Whether we want our internal coordinate system to be scaled to a specified width. - protected Playfield(float? customWidth = null) + /// The width to scale the internal coordinate space to. + /// May be null if scaling based on is desired. If is also null, no scaling will occur. + /// + /// The height to scale the internal coordinate space to. + /// May be null if scaling based on is desired. If is also null, no scaling will occur. + /// + protected Playfield(float? customWidth = null, float? customHeight = null) + : base(customWidth, customHeight) { RelativeSizeAxes = Axes.Both; - - AddInternal(ScaledContent = new ScaledContainer - { - CustomWidth = customWidth, - RelativeSizeAxes = Axes.Both, - Children = new[] - { - content = new Container - { - RelativeSizeAxes = Axes.Both, - } - } - }); } [BackgroundDependencyLoader] @@ -94,22 +79,5 @@ namespace osu.Game.Rulesets.UI /// Creates the container that will be used to contain the s. /// protected virtual HitObjectContainer CreateHitObjectContainer() => new HitObjectContainer(); - - private class ScaledContainer : Container - { - /// - /// A value (in game pixels that we should scale our content to match). - /// - public float? CustomWidth; - - //dividing by the customwidth will effectively scale our content to the required container size. - protected override Vector2 DrawScale => CustomWidth.HasValue ? new Vector2(DrawSize.X / CustomWidth.Value) : base.DrawScale; - - protected override void Update() - { - base.Update(); - RelativeChildSize = new Vector2(DrawScale.X, RelativeChildSize.Y); - } - } } } diff --git a/osu.Game/Rulesets/UI/ScalableContainer.cs b/osu.Game/Rulesets/UI/ScalableContainer.cs new file mode 100644 index 0000000000..e1c1427470 --- /dev/null +++ b/osu.Game/Rulesets/UI/ScalableContainer.cs @@ -0,0 +1,86 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using osu.Framework.Graphics; +using osu.Framework.Graphics.Containers; +using OpenTK; + +namespace osu.Game.Rulesets.UI +{ + /// + /// A which can have its internal coordinate system scaled to a specific size. + /// + public class ScalableContainer : Container + { + /// + /// The scaled content. + /// + public readonly Container ScaledContent; + + protected override Container Content => content; + private readonly Container content; + + /// + /// A which can have its internal coordinate system scaled to a specific size. + /// + /// The width to scale the internal coordinate space to. + /// May be null if scaling based on is desired. If is also null, no scaling will occur. + /// + /// The height to scale the internal coordinate space to. + /// May be null if scaling based on is desired. If is also null, no scaling will occur. + /// + public ScalableContainer(float? customWidth = null, float? customHeight = null) + { + AddInternal(ScaledContent = new ScaledContainer + { + CustomWidth = customWidth, + CustomHeight = customHeight, + RelativeSizeAxes = Axes.Both, + Child = content = new Container { RelativeSizeAxes = Axes.Both } + }); + } + + public class ScaledContainer : Container + { + /// + /// The value to scale the width of the content to match. + /// If null, is used. + /// + public float? CustomWidth; + + /// + /// The value to scale the height of the content to match. + /// if null, is used. + /// + public float? CustomHeight; + + /// + /// The scale that is required for the size of the content to match and . + /// + private Vector2 sizeScale + { + get + { + if (CustomWidth.HasValue && CustomHeight.HasValue) + return Vector2.Divide(DrawSize, new Vector2(CustomWidth.Value, CustomHeight.Value)); + if (CustomWidth.HasValue) + return new Vector2(DrawSize.X / CustomWidth.Value); + if (CustomHeight.HasValue) + return new Vector2(DrawSize.Y / CustomHeight.Value); + return Vector2.One; + } + } + + /// + /// Scale the content to the required container size by multiplying by . + /// + protected override Vector2 DrawScale => sizeScale * base.DrawScale; + + protected override void Update() + { + base.Update(); + RelativeChildSize = sizeScale; + } + } + } +} diff --git a/osu.Game/Rulesets/UI/Scrolling/ScrollingPlayfield.cs b/osu.Game/Rulesets/UI/Scrolling/ScrollingPlayfield.cs index e168f6daec..1c1c8f7f61 100644 --- a/osu.Game/Rulesets/UI/Scrolling/ScrollingPlayfield.cs +++ b/osu.Game/Rulesets/UI/Scrolling/ScrollingPlayfield.cs @@ -62,9 +62,14 @@ namespace osu.Game.Rulesets.UI.Scrolling /// Creates a new . /// /// The direction in which s in this container should scroll. - /// Whether we want our internal coordinate system to be scaled to a specified width - protected ScrollingPlayfield(ScrollingDirection direction, float? customWidth = null) - : base(customWidth) + /// The width to scale the internal coordinate space to. + /// May be null if scaling based on is desired. If is also null, no scaling will occur. + /// + /// The height to scale the internal coordinate space to. + /// May be null if scaling based on is desired. If is also null, no scaling will occur. + /// + protected ScrollingPlayfield(ScrollingDirection direction, float? customWidth = null, float? customHeight = null) + : base(customWidth, customHeight) { this.direction = direction; } diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index 70c904e8b9..5a827e155b 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -355,6 +355,7 @@ + From 2c37a7e19fd64ec35628c40a3aa16528246c1647 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Tue, 20 Feb 2018 13:50:55 +0900 Subject: [PATCH 100/544] Rewrite SelectionLayer testcase to construct an entire HitObjectComposer --- .../Visual/TestCaseEditorSelectionLayer.cs | 61 +++++++------------ 1 file changed, 23 insertions(+), 38 deletions(-) diff --git a/osu.Game.Tests/Visual/TestCaseEditorSelectionLayer.cs b/osu.Game.Tests/Visual/TestCaseEditorSelectionLayer.cs index 50a39e6c33..5e0c0e165c 100644 --- a/osu.Game.Tests/Visual/TestCaseEditorSelectionLayer.cs +++ b/osu.Game.Tests/Visual/TestCaseEditorSelectionLayer.cs @@ -5,15 +5,13 @@ using System; using System.Collections.Generic; using osu.Framework.Allocation; using OpenTK; -using osu.Framework.Graphics; -using osu.Framework.Graphics.Containers; -using osu.Framework.Timing; using osu.Game.Beatmaps; -using osu.Game.Beatmaps.ControlPoints; using osu.Game.Rulesets.Edit.Layers.Selection; +using osu.Game.Rulesets.Objects; +using osu.Game.Rulesets.Osu; using osu.Game.Rulesets.Osu.Edit; using osu.Game.Rulesets.Osu.Objects; -using osu.Game.Rulesets.Osu.Objects.Drawables; +using osu.Game.Tests.Beatmaps; namespace osu.Game.Tests.Visual { @@ -27,44 +25,31 @@ namespace osu.Game.Tests.Visual }; [BackgroundDependencyLoader] - private void load() + private void load(OsuGameBase osuGame) { - var playfield = new OsuEditPlayfield(); - - Children = new Drawable[] + osuGame.Beatmap.Value = new TestWorkingBeatmap(new Beatmap { - new Container + HitObjects = new List { - RelativeSizeAxes = Axes.Both, - Clock = new FramedClock(new StopwatchClock()), - Child = playfield + new HitCircle { Position = new Vector2(256, 192), Scale = 0.5f }, + new HitCircle { Position = new Vector2(344, 148), Scale = 0.5f }, + new Slider + { + ControlPoints = new List + { + new Vector2(128, 256), + new Vector2(344, 256), + }, + Distance = 400, + Position = new Vector2(128, 256), + Velocity = 1, + TickDistance = 100, + Scale = 0.5f, + } }, - new SelectionLayer(playfield) - }; + }); - var hitCircle1 = new HitCircle { Position = new Vector2(256, 192), Scale = 0.5f }; - var hitCircle2 = new HitCircle { Position = new Vector2(344, 148), Scale = 0.5f }; - var slider = new Slider - { - ControlPoints = new List - { - new Vector2(128, 256), - new Vector2(344, 256), - }, - Distance = 400, - Position = new Vector2(128, 256), - Velocity = 1, - TickDistance = 100, - Scale = 0.5f, - }; - - hitCircle1.ApplyDefaults(new ControlPointInfo(), new BeatmapDifficulty()); - hitCircle2.ApplyDefaults(new ControlPointInfo(), new BeatmapDifficulty()); - slider.ApplyDefaults(new ControlPointInfo(), new BeatmapDifficulty()); - - playfield.Add(new DrawableHitCircle(hitCircle1)); - playfield.Add(new DrawableHitCircle(hitCircle2)); - playfield.Add(new DrawableSlider(slider)); + Child = new OsuHitObjectComposer(new OsuRuleset()); } } } From 8f25a5da664991ad72ceb3f6da6442fe27d33cf6 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Tue, 20 Feb 2018 14:01:33 +0900 Subject: [PATCH 101/544] Add playfield aspect ratio + scaling modifications to composer layers --- .../Edit/OsuHitObjectComposer.cs | 4 ++ osu.Game/Rulesets/Edit/HitObjectComposer.cs | 50 +++++++++++++++---- 2 files changed, 43 insertions(+), 11 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Edit/OsuHitObjectComposer.cs b/osu.Game.Rulesets.Osu/Edit/OsuHitObjectComposer.cs index 6652a5fde2..ae19706da3 100644 --- a/osu.Game.Rulesets.Osu/Edit/OsuHitObjectComposer.cs +++ b/osu.Game.Rulesets.Osu/Edit/OsuHitObjectComposer.cs @@ -2,10 +2,12 @@ // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using System.Collections.Generic; +using osu.Framework.Graphics; using osu.Game.Beatmaps; using osu.Game.Rulesets.Edit; using osu.Game.Rulesets.Edit.Tools; using osu.Game.Rulesets.Osu.Objects; +using osu.Game.Rulesets.Osu.UI; using osu.Game.Rulesets.UI; namespace osu.Game.Rulesets.Osu.Edit @@ -25,5 +27,7 @@ namespace osu.Game.Rulesets.Osu.Edit new HitObjectCompositionTool(), new HitObjectCompositionTool() }; + + protected override ScalableContainer CreateLayerContainer() => new ScalableContainer(OsuPlayfield.BASE_SIZE.X) { RelativeSizeAxes = Axes.Both }; } } diff --git a/osu.Game/Rulesets/Edit/HitObjectComposer.cs b/osu.Game/Rulesets/Edit/HitObjectComposer.cs index 7f22b3764c..62669150aa 100644 --- a/osu.Game/Rulesets/Edit/HitObjectComposer.cs +++ b/osu.Game/Rulesets/Edit/HitObjectComposer.cs @@ -6,6 +6,7 @@ using System.Collections.Generic; using System.Linq; using OpenTK.Graphics; using osu.Framework.Allocation; +using osu.Framework.Extensions.IEnumerableExtensions; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Shapes; @@ -25,6 +26,9 @@ namespace osu.Game.Rulesets.Edit protected ICompositionTool CurrentTool { get; private set; } + private RulesetContainer rulesetContainer; + private readonly Container[] layerContainers = new Container[2]; + protected HitObjectComposer(Ruleset ruleset) { this.ruleset = ruleset; @@ -35,7 +39,6 @@ namespace osu.Game.Rulesets.Edit [BackgroundDependencyLoader] private void load(OsuGameBase osuGame) { - RulesetContainer rulesetContainer; try { rulesetContainer = CreateRulesetContainer(ruleset, osuGame.Beatmap.Value); @@ -46,6 +49,20 @@ namespace osu.Game.Rulesets.Edit return; } + layerContainers[0] = CreateLayerContainer(); + layerContainers[0].Child = new Container + { + Name = "Border", + RelativeSizeAxes = Axes.Both, + Masking = true, + BorderColour = Color4.White, + BorderThickness = 2, + Child = new Box { RelativeSizeAxes = Axes.Both, Alpha = 0, AlwaysPresent = true } + }; + + layerContainers[1] = CreateLayerContainer(); + layerContainers[1].Child = new SelectionLayer(rulesetContainer.Playfield); + RadioButtonCollection toolboxCollection; InternalChild = new GridContainer { @@ -66,20 +83,13 @@ namespace osu.Game.Rulesets.Edit }, new Container { + Name = "Content", RelativeSizeAxes = Axes.Both, - Masking = true, - BorderColour = Color4.White, - BorderThickness = 2, Children = new Drawable[] { - new Box - { - RelativeSizeAxes = Axes.Both, - Alpha = 0, - AlwaysPresent = true, - }, + layerContainers[0], rulesetContainer, - new SelectionLayer(rulesetContainer.Playfield) + layerContainers[1] } } }, @@ -102,10 +112,28 @@ namespace osu.Game.Rulesets.Edit toolboxCollection.Items[0].Select(); } + protected override void UpdateAfterChildren() + { + base.UpdateAfterChildren(); + + layerContainers.ForEach(l => + { + l.Anchor = rulesetContainer.Playfield.Anchor; + l.Origin = rulesetContainer.Playfield.Origin; + l.Position = rulesetContainer.Playfield.Position; + l.Size = rulesetContainer.Playfield.Size; + }); + } + private void setCompositionTool(ICompositionTool tool) => CurrentTool = tool; protected virtual RulesetContainer CreateRulesetContainer(Ruleset ruleset, WorkingBeatmap beatmap) => ruleset.CreateRulesetContainerWith(beatmap, true); protected abstract IReadOnlyList CompositionTools { get; } + + /// + /// Creates a which provides a layer above or below the . + /// + protected virtual ScalableContainer CreateLayerContainer() => new ScalableContainer(); } } From 423fe4eba85876df212c17648adb74b02e075d34 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Tue, 20 Feb 2018 14:25:42 +0900 Subject: [PATCH 102/544] Combine border radiuses of selection and capture boxes --- .../Edit/Layers/Selection/CaptureBox.cs | 2 +- .../Edit/Layers/Selection/SelectionBox.cs | 29 ++++++------------- 2 files changed, 10 insertions(+), 21 deletions(-) diff --git a/osu.Game/Rulesets/Edit/Layers/Selection/CaptureBox.cs b/osu.Game/Rulesets/Edit/Layers/Selection/CaptureBox.cs index 48f6393ccc..269dd79bf7 100644 --- a/osu.Game/Rulesets/Edit/Layers/Selection/CaptureBox.cs +++ b/osu.Game/Rulesets/Edit/Layers/Selection/CaptureBox.cs @@ -26,7 +26,7 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection this.capturedObjects = capturedObjects; Masking = true; - BorderThickness = 3; + BorderThickness = SelectionBox.BORDER_RADIUS; InternalChild = new Box { diff --git a/osu.Game/Rulesets/Edit/Layers/Selection/SelectionBox.cs b/osu.Game/Rulesets/Edit/Layers/Selection/SelectionBox.cs index 8eee15d0b2..1c25846ee3 100644 --- a/osu.Game/Rulesets/Edit/Layers/Selection/SelectionBox.cs +++ b/osu.Game/Rulesets/Edit/Layers/Selection/SelectionBox.cs @@ -14,32 +14,21 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection /// public class SelectionBox : VisibilityContainer { + public const float BORDER_RADIUS = 2; + /// /// Creates a new . /// public SelectionBox() { - InternalChildren = new Drawable[] + Masking = true; + BorderColour = Color4.White; + BorderThickness = BORDER_RADIUS; + + Child = new Box { - new Container - { - RelativeSizeAxes = Axes.Both, - Padding = new MarginPadding(-1), - Child = new Container - { - RelativeSizeAxes = Axes.Both, - Masking = true, - BorderColour = Color4.White, - BorderThickness = 2, - MaskingSmoothness = 1, - Child = new Box - { - RelativeSizeAxes = Axes.Both, - Alpha = 0.1f, - AlwaysPresent = true - }, - } - } + RelativeSizeAxes = Axes.Both, + Alpha = 0.1f }; } From 87065a0b13618458cad8478d83bd31104dd15a94 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Tue, 20 Feb 2018 14:38:57 +0900 Subject: [PATCH 103/544] Rename + publicise DeselectAll --- osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs b/osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs index bda613f617..f397f15e39 100644 --- a/osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs +++ b/osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs @@ -31,7 +31,7 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection protected override bool OnMouseDown(InputState state, MouseDownEventArgs args) { - clearSelection(); + DeselectAll(); return true; } @@ -77,9 +77,10 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection /// /// Deselects all selected s. /// - private void clearSelection() + public void DeselectAll() { selectedHitObjects.Clear(); + captureBox?.Hide(); captureBox?.Expire(); } From 995ecb7d94fcfee4bc916e6d491137e1999ade61 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Tue, 20 Feb 2018 14:48:35 +0900 Subject: [PATCH 104/544] Make selectedHitObjects into a HashSet for quick Contains checks --- osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs b/osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs index f397f15e39..3a43abd0b0 100644 --- a/osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs +++ b/osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; +using osu.Framework.Extensions.IEnumerableExtensions; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Primitives; @@ -27,7 +28,7 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection private SelectionBox selectionBox; private CaptureBox captureBox; - private readonly List selectedHitObjects = new List(); + private readonly HashSet selectedHitObjects = new HashSet(); protected override bool OnMouseDown(InputState state, MouseDownEventArgs args) { From 285df52f43dffe9fadbb90fd6c7ffaa5cbef2112 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Tue, 20 Feb 2018 14:54:45 +0900 Subject: [PATCH 105/544] Encapsulate logic for selecting/deselecting further --- .../Edit/Layers/Selection/SelectionLayer.cs | 77 +++++++++++++++++-- 1 file changed, 70 insertions(+), 7 deletions(-) diff --git a/osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs b/osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs index 3a43abd0b0..1131389367 100644 --- a/osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs +++ b/osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs @@ -1,6 +1,7 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using System; using System.Collections.Generic; using System.Linq; using osu.Framework.Extensions.IEnumerableExtensions; @@ -16,6 +17,9 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection { public class SelectionLayer : CompositeDrawable { + public event Action ObjectSelected; + public event Action ObjectDeselected; + private readonly Playfield playfield; public SelectionLayer(Playfield playfield) @@ -75,15 +79,69 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection return true; } + /// + /// Selects a . + /// + /// The to select. + public void Select(DrawableHitObject hitObject) + { + if (!select(hitObject)) + return; + + clearCapture(); + finishSelection(); + } + + /// + /// Selects a without performing capture updates. + /// + /// The to select. + /// Whether was selected. + private bool select(DrawableHitObject hitObject) + { + if (!selectedHitObjects.Add(hitObject)) + return false; + + ObjectSelected?.Invoke(hitObject); + return true; + } + + /// + /// Deselects a . + /// + /// The to deselect. + public void Deselect(DrawableHitObject hitObject) + { + if (!deselect(hitObject)) + return; + + clearCapture(); + finishSelection(); + } + + /// + /// Deselects a without performing capture updates. + /// + /// The to deselect. + /// Whether the was deselected. + private bool deselect(DrawableHitObject hitObject) + { + if (!selectedHitObjects.Remove(hitObject)) + return false; + + ObjectDeselected?.Invoke(hitObject); + return true; + } + /// /// Deselects all selected s. /// public void DeselectAll() { + selectedHitObjects.ForEach(h => ObjectDeselected?.Invoke(h)); selectedHitObjects.Clear(); - captureBox?.Hide(); - captureBox?.Expire(); + clearCapture(); } /// @@ -92,8 +150,7 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection /// The selection . private void selectQuad(Quad screenSpaceQuad) { - foreach (var obj in playfield.HitObjects.Objects.Where(h => h.IsAlive && h.IsPresent && screenSpaceQuad.Contains(h.SelectionPoint))) - selectedHitObjects.Add(obj); + playfield.HitObjects.Objects.Where(h => h.IsAlive && h.IsPresent && screenSpaceQuad.Contains(h.SelectionPoint)).ForEach(h => select(h)); } /// @@ -102,11 +159,17 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection /// The to select at. private void selectPoint(Vector2 screenSpacePoint) { - var selected = playfield.HitObjects.Objects.Reverse().Where(h => h.IsAlive && h.IsPresent).FirstOrDefault(h => h.ReceiveMouseInputAt(screenSpacePoint)); - if (selected == null) + var target = playfield.HitObjects.Objects.Reverse().Where(h => h.IsAlive && h.IsPresent).FirstOrDefault(h => h.ReceiveMouseInputAt(screenSpacePoint)); + if (target == null) return; - selectedHitObjects.Add(selected); + select(target); + } + + private void clearCapture() + { + captureBox?.Hide(); + captureBox?.Expire(); } private void finishSelection() From 2f4925d031bde025574d532a75816425e0bd09a6 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Tue, 20 Feb 2018 15:06:14 +0900 Subject: [PATCH 106/544] Add some xmldocs --- osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs b/osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs index 1131389367..d827cc3b85 100644 --- a/osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs +++ b/osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs @@ -17,7 +17,14 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection { public class SelectionLayer : CompositeDrawable { + /// + /// Invoked when a is selected. + /// public event Action ObjectSelected; + + /// + /// Invoked when a is deselected. + /// public event Action ObjectDeselected; private readonly Playfield playfield; From 2a5bfdb4b85ecce29c159ed6fa208625fede7ac9 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Tue, 20 Feb 2018 15:06:51 +0900 Subject: [PATCH 107/544] Deselect hitobjects that are now not in the selection quad --- .../Rulesets/Edit/Layers/Selection/SelectionLayer.cs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs b/osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs index d827cc3b85..3895d34d7f 100644 --- a/osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs +++ b/osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs @@ -155,9 +155,16 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection /// Selects all hitobjects that are present within the area of a . /// /// The selection . + // Todo: If needed we can severely reduce allocations in this method private void selectQuad(Quad screenSpaceQuad) { - playfield.HitObjects.Objects.Where(h => h.IsAlive && h.IsPresent && screenSpaceQuad.Contains(h.SelectionPoint)).ForEach(h => select(h)); + var expectedSelection = playfield.HitObjects.Objects.Where(h => h.IsAlive && h.IsPresent && screenSpaceQuad.Contains(h.SelectionPoint)).ToList(); + + var toRemove = selectedHitObjects.Except(expectedSelection).ToList(); + foreach (var obj in toRemove) + deselect(obj); + + expectedSelection.ForEach(h => select(h)); } /// From ad2f556133ca365fa1a441ddaf1c35690947b8da Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Tue, 20 Feb 2018 18:01:45 +0900 Subject: [PATCH 108/544] Add hitobject overlays to selected hitobjects --- .../Selection/OsuHitObjectOverlayLayer.cs | 26 ++++++++ .../Selection/Overlays/HitCircleOverlay.cs | 33 +++++++++++ .../Selection/Overlays/SliderCircleOverlay.cs | 45 ++++++++++++++ .../Selection/Overlays/SliderOverlay.cs | 55 +++++++++++++++++ .../Edit/OsuHitObjectComposer.cs | 4 ++ .../Objects/Drawables/DrawableSlider.cs | 27 ++++++--- .../osu.Game.Rulesets.Osu.csproj | 4 ++ .../Visual/TestCaseEditorSelectionLayer.cs | 13 +++- osu.Game/Rulesets/Edit/HitObjectComposer.cs | 59 +++++++++++++------ .../Edit/Layers/Selection/HitObjectOverlay.cs | 20 +++++++ .../Layers/Selection/HitObjectOverlayLayer.cs | 53 +++++++++++++++++ osu.Game/osu.Game.csproj | 2 + 12 files changed, 315 insertions(+), 26 deletions(-) create mode 100644 osu.Game.Rulesets.Osu/Edit/Layers/Selection/OsuHitObjectOverlayLayer.cs create mode 100644 osu.Game.Rulesets.Osu/Edit/Layers/Selection/Overlays/HitCircleOverlay.cs create mode 100644 osu.Game.Rulesets.Osu/Edit/Layers/Selection/Overlays/SliderCircleOverlay.cs create mode 100644 osu.Game.Rulesets.Osu/Edit/Layers/Selection/Overlays/SliderOverlay.cs create mode 100644 osu.Game/Rulesets/Edit/Layers/Selection/HitObjectOverlay.cs create mode 100644 osu.Game/Rulesets/Edit/Layers/Selection/HitObjectOverlayLayer.cs diff --git a/osu.Game.Rulesets.Osu/Edit/Layers/Selection/OsuHitObjectOverlayLayer.cs b/osu.Game.Rulesets.Osu/Edit/Layers/Selection/OsuHitObjectOverlayLayer.cs new file mode 100644 index 0000000000..e0d1b34ca5 --- /dev/null +++ b/osu.Game.Rulesets.Osu/Edit/Layers/Selection/OsuHitObjectOverlayLayer.cs @@ -0,0 +1,26 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using osu.Game.Rulesets.Edit.Layers.Selection; +using osu.Game.Rulesets.Objects.Drawables; +using osu.Game.Rulesets.Osu.Edit.Layers.Selection.Overlays; +using osu.Game.Rulesets.Osu.Objects.Drawables; + +namespace osu.Game.Rulesets.Osu.Edit.Layers.Selection +{ + public class OsuHitObjectOverlayLayer : HitObjectOverlayLayer + { + protected override HitObjectOverlay CreateOverlayFor(DrawableHitObject hitObject) + { + switch (hitObject) + { + case DrawableHitCircle circle: + return new HitCircleOverlay(circle); + case DrawableSlider slider: + return new SliderOverlay(slider); + } + + return base.CreateOverlayFor(hitObject); + } + } +} diff --git a/osu.Game.Rulesets.Osu/Edit/Layers/Selection/Overlays/HitCircleOverlay.cs b/osu.Game.Rulesets.Osu/Edit/Layers/Selection/Overlays/HitCircleOverlay.cs new file mode 100644 index 0000000000..4e64783840 --- /dev/null +++ b/osu.Game.Rulesets.Osu/Edit/Layers/Selection/Overlays/HitCircleOverlay.cs @@ -0,0 +1,33 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using osu.Framework.Graphics; +using osu.Framework.Allocation; +using osu.Game.Graphics; +using osu.Game.Rulesets.Edit.Layers.Selection; +using osu.Game.Rulesets.Osu.Objects.Drawables; +using osu.Game.Rulesets.Osu.Objects.Drawables.Pieces; + +namespace osu.Game.Rulesets.Osu.Edit.Layers.Selection.Overlays +{ + public class HitCircleOverlay : HitObjectOverlay + { + public HitCircleOverlay(DrawableHitCircle hitCircle) + : base(hitCircle) + { + Origin = Anchor.Centre; + + Position = hitCircle.Position; + Size = hitCircle.Size; + Scale = hitCircle.Scale; + + AddInternal(new RingPiece()); + } + + [BackgroundDependencyLoader] + private void load(OsuColour colours) + { + Colour = colours.Yellow; + } + } +} diff --git a/osu.Game.Rulesets.Osu/Edit/Layers/Selection/Overlays/SliderCircleOverlay.cs b/osu.Game.Rulesets.Osu/Edit/Layers/Selection/Overlays/SliderCircleOverlay.cs new file mode 100644 index 0000000000..0d60f62a2f --- /dev/null +++ b/osu.Game.Rulesets.Osu/Edit/Layers/Selection/Overlays/SliderCircleOverlay.cs @@ -0,0 +1,45 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using osu.Framework.Allocation; +using osu.Framework.Graphics; +using osu.Game.Graphics; +using osu.Game.Rulesets.Edit.Layers.Selection; +using osu.Game.Rulesets.Osu.Objects; +using osu.Game.Rulesets.Osu.Objects.Drawables; +using osu.Game.Rulesets.Osu.Objects.Drawables.Pieces; +using OpenTK; + +namespace osu.Game.Rulesets.Osu.Edit.Layers.Selection.Overlays +{ + public class SliderCircleOverlay : HitObjectOverlay + { + public SliderCircleOverlay(DrawableHitCircle sliderHead, DrawableSlider slider) + : this(sliderHead, sliderHead.Position, slider) + { + } + + public SliderCircleOverlay(DrawableSliderTail sliderTail, DrawableSlider slider) + : this(sliderTail, ((Slider)slider.HitObject).Curve.PositionAt(1) + slider.HitObject.StackOffset, slider) + { + } + + private SliderCircleOverlay(DrawableOsuHitObject hitObject, Vector2 position, DrawableSlider slider) + : base(hitObject) + { + Origin = Anchor.Centre; + + Position = position; + Size = slider.HeadCircle.Size; + Scale = slider.HeadCircle.Scale; + + AddInternal(new RingPiece()); + } + + [BackgroundDependencyLoader] + private void load(OsuColour colours) + { + Colour = colours.Yellow; + } + } +} diff --git a/osu.Game.Rulesets.Osu/Edit/Layers/Selection/Overlays/SliderOverlay.cs b/osu.Game.Rulesets.Osu/Edit/Layers/Selection/Overlays/SliderOverlay.cs new file mode 100644 index 0000000000..0a9b5638ea --- /dev/null +++ b/osu.Game.Rulesets.Osu/Edit/Layers/Selection/Overlays/SliderOverlay.cs @@ -0,0 +1,55 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using osu.Framework.Allocation; +using osu.Framework.Graphics; +using osu.Game.Graphics; +using osu.Game.Rulesets.Edit.Layers.Selection; +using osu.Game.Rulesets.Osu.Objects; +using osu.Game.Rulesets.Osu.Objects.Drawables; +using osu.Game.Rulesets.Osu.Objects.Drawables.Pieces; +using OpenTK.Graphics; + +namespace osu.Game.Rulesets.Osu.Edit.Layers.Selection.Overlays +{ + public class SliderOverlay : HitObjectOverlay + { + private readonly SliderBody body; + + private readonly DrawableSlider hitObject; + + public SliderOverlay(DrawableSlider slider) + : base(slider) + { + hitObject = slider; + + var obj = (Slider)slider.HitObject; + + InternalChildren = new Drawable[] + { + body = new SliderBody(obj) + { + AccentColour = Color4.Transparent, + Position = obj.StackedPosition, + PathWidth = obj.Scale * 64 + }, + new SliderCircleOverlay(slider.HeadCircle, slider), + new SliderCircleOverlay(slider.TailCircle, slider), + }; + } + + [BackgroundDependencyLoader] + private void load(OsuColour colours) + { + body.BorderColour = colours.Yellow; + } + + protected override void Update() + { + base.Update(); + + hitObject.GetCurrentProgress(out int span, out double progress); + body.UpdateProgress(progress, span); + } + } +} diff --git a/osu.Game.Rulesets.Osu/Edit/OsuHitObjectComposer.cs b/osu.Game.Rulesets.Osu/Edit/OsuHitObjectComposer.cs index ae19706da3..70d49a6b4f 100644 --- a/osu.Game.Rulesets.Osu/Edit/OsuHitObjectComposer.cs +++ b/osu.Game.Rulesets.Osu/Edit/OsuHitObjectComposer.cs @@ -5,7 +5,9 @@ using System.Collections.Generic; using osu.Framework.Graphics; using osu.Game.Beatmaps; using osu.Game.Rulesets.Edit; +using osu.Game.Rulesets.Edit.Layers.Selection; using osu.Game.Rulesets.Edit.Tools; +using osu.Game.Rulesets.Osu.Edit.Layers.Selection; using osu.Game.Rulesets.Osu.Objects; using osu.Game.Rulesets.Osu.UI; using osu.Game.Rulesets.UI; @@ -29,5 +31,7 @@ namespace osu.Game.Rulesets.Osu.Edit }; protected override ScalableContainer CreateLayerContainer() => new ScalableContainer(OsuPlayfield.BASE_SIZE.X) { RelativeSizeAxes = Axes.Both }; + + protected override HitObjectOverlayLayer CreateHitObjectOverlayLayer() => new OsuHitObjectOverlayLayer(); } } diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs index 41df7ae4a4..b3f2f1850c 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs @@ -21,6 +21,8 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables private readonly List components = new List(); public readonly DrawableHitCircle HeadCircle; + public readonly DrawableSliderTail TailCircle; + public readonly SliderBody Body; public readonly SliderBall Ball; @@ -29,7 +31,6 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables { slider = s; - DrawableSliderTail tail; Container ticks; Container repeatPoints; @@ -51,7 +52,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables Alpha = 0 }, HeadCircle = new DrawableHitCircle(s.HeadCircle), - tail = new DrawableSliderTail(s.TailCircle) + TailCircle = new DrawableSliderTail(s.TailCircle) }; components.Add(Body); @@ -59,8 +60,8 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables AddNested(HeadCircle); - AddNested(tail); - components.Add(tail); + AddNested(TailCircle); + components.Add(TailCircle); foreach (var tick in s.NestedHitObjects.OfType()) { @@ -96,10 +97,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables Tracking = Ball.Tracking; - double progress = MathHelper.Clamp((Time.Current - slider.StartTime) / slider.Duration, 0, 1); - - int span = slider.SpanAt(progress); - progress = slider.ProgressAt(progress); + GetCurrentProgress(out int span, out double progress); if (span > currentSpan) currentSpan = span; @@ -155,6 +153,19 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables } } + /// + /// Finds the progress along the slider at the current time. + /// + /// The current span. + /// The current progress in the current span. + public void GetCurrentProgress(out int span, out double progress) + { + double offset = MathHelper.Clamp((Time.Current - slider.StartTime) / slider.Duration, 0, 1); + + span = slider.SpanAt(offset); + progress = slider.ProgressAt(offset); + } + public Drawable ProxiedLayer => HeadCircle.ApproachCircle; public override bool ReceiveMouseInputAt(Vector2 screenSpacePos) => Body.ReceiveMouseInputAt(screenSpacePos); diff --git a/osu.Game.Rulesets.Osu/osu.Game.Rulesets.Osu.csproj b/osu.Game.Rulesets.Osu/osu.Game.Rulesets.Osu.csproj index 7838fb7707..53923e36ba 100644 --- a/osu.Game.Rulesets.Osu/osu.Game.Rulesets.Osu.csproj +++ b/osu.Game.Rulesets.Osu/osu.Game.Rulesets.Osu.csproj @@ -64,6 +64,10 @@ + + + + diff --git a/osu.Game.Tests/Visual/TestCaseEditorSelectionLayer.cs b/osu.Game.Tests/Visual/TestCaseEditorSelectionLayer.cs index 5e0c0e165c..0db03b08a7 100644 --- a/osu.Game.Tests/Visual/TestCaseEditorSelectionLayer.cs +++ b/osu.Game.Tests/Visual/TestCaseEditorSelectionLayer.cs @@ -6,10 +6,13 @@ using System.Collections.Generic; using osu.Framework.Allocation; using OpenTK; using osu.Game.Beatmaps; +using osu.Game.Rulesets.Edit; using osu.Game.Rulesets.Edit.Layers.Selection; using osu.Game.Rulesets.Objects; using osu.Game.Rulesets.Osu; using osu.Game.Rulesets.Osu.Edit; +using osu.Game.Rulesets.Osu.Edit.Layers.Selection; +using osu.Game.Rulesets.Osu.Edit.Layers.Selection.Overlays; using osu.Game.Rulesets.Osu.Objects; using osu.Game.Tests.Beatmaps; @@ -21,7 +24,15 @@ namespace osu.Game.Tests.Visual { typeof(SelectionBox), typeof(SelectionLayer), - typeof(CaptureBox) + typeof(CaptureBox), + typeof(HitObjectComposer), + typeof(OsuHitObjectComposer), + typeof(HitObjectOverlayLayer), + typeof(OsuHitObjectOverlayLayer), + typeof(HitObjectOverlay), + typeof(HitCircleOverlay), + typeof(SliderOverlay), + typeof(SliderCircleOverlay) }; [BackgroundDependencyLoader] diff --git a/osu.Game/Rulesets/Edit/HitObjectComposer.cs b/osu.Game/Rulesets/Edit/HitObjectComposer.cs index 62669150aa..67d4e8cc92 100644 --- a/osu.Game/Rulesets/Edit/HitObjectComposer.cs +++ b/osu.Game/Rulesets/Edit/HitObjectComposer.cs @@ -27,7 +27,7 @@ namespace osu.Game.Rulesets.Edit protected ICompositionTool CurrentTool { get; private set; } private RulesetContainer rulesetContainer; - private readonly Container[] layerContainers = new Container[2]; + private readonly ScalableContainer[] layerContainers = new ScalableContainer[2]; protected HitObjectComposer(Ruleset ruleset) { @@ -49,20 +49,6 @@ namespace osu.Game.Rulesets.Edit return; } - layerContainers[0] = CreateLayerContainer(); - layerContainers[0].Child = new Container - { - Name = "Border", - RelativeSizeAxes = Axes.Both, - Masking = true, - BorderColour = Color4.White, - BorderThickness = 2, - Child = new Box { RelativeSizeAxes = Axes.Both, Alpha = 0, AlwaysPresent = true } - }; - - layerContainers[1] = CreateLayerContainer(); - layerContainers[1].Child = new SelectionLayer(rulesetContainer.Playfield); - RadioButtonCollection toolboxCollection; InternalChild = new GridContainer { @@ -87,9 +73,9 @@ namespace osu.Game.Rulesets.Edit RelativeSizeAxes = Axes.Both, Children = new Drawable[] { - layerContainers[0], + createBottomLayer(), rulesetContainer, - layerContainers[1] + createTopLayer() } } }, @@ -112,6 +98,40 @@ namespace osu.Game.Rulesets.Edit toolboxCollection.Items[0].Select(); } + private ScalableContainer createBottomLayer() + { + layerContainers[0] = CreateLayerContainer(); + layerContainers[0].Child = new Container + { + Name = "Border", + RelativeSizeAxes = Axes.Both, + Masking = true, + BorderColour = Color4.White, + BorderThickness = 2, + Child = new Box { RelativeSizeAxes = Axes.Both, Alpha = 0, AlwaysPresent = true } + }; + + return layerContainers[0]; + } + + private ScalableContainer createTopLayer() + { + var overlayLayer = CreateHitObjectOverlayLayer(); + var selectionLayer = new SelectionLayer(rulesetContainer.Playfield); + + selectionLayer.ObjectSelected += overlayLayer.AddOverlay; + selectionLayer.ObjectDeselected += overlayLayer.RemoveOverlay; + + layerContainers[1] = CreateLayerContainer(); + layerContainers[1].Children = new Drawable[] + { + overlayLayer, + selectionLayer, + }; + + return layerContainers[1]; + } + protected override void UpdateAfterChildren() { base.UpdateAfterChildren(); @@ -135,5 +155,10 @@ namespace osu.Game.Rulesets.Edit /// Creates a which provides a layer above or below the . /// protected virtual ScalableContainer CreateLayerContainer() => new ScalableContainer(); + + /// + /// Creates the which overlays selected s. + /// + protected virtual HitObjectOverlayLayer CreateHitObjectOverlayLayer() => new HitObjectOverlayLayer(); } } diff --git a/osu.Game/Rulesets/Edit/Layers/Selection/HitObjectOverlay.cs b/osu.Game/Rulesets/Edit/Layers/Selection/HitObjectOverlay.cs new file mode 100644 index 0000000000..e18627ea5d --- /dev/null +++ b/osu.Game/Rulesets/Edit/Layers/Selection/HitObjectOverlay.cs @@ -0,0 +1,20 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using osu.Framework.Graphics.Containers; +using osu.Game.Rulesets.Objects.Drawables; + +namespace osu.Game.Rulesets.Edit.Layers.Selection +{ + public class HitObjectOverlay : CompositeDrawable + { + // ReSharper disable once NotAccessedField.Local + // This will be used later to handle drag movement, etc + private readonly DrawableHitObject hitObject; + + public HitObjectOverlay(DrawableHitObject hitObject) + { + this.hitObject = hitObject; + } + } +} diff --git a/osu.Game/Rulesets/Edit/Layers/Selection/HitObjectOverlayLayer.cs b/osu.Game/Rulesets/Edit/Layers/Selection/HitObjectOverlayLayer.cs new file mode 100644 index 0000000000..0b6e63d1fe --- /dev/null +++ b/osu.Game/Rulesets/Edit/Layers/Selection/HitObjectOverlayLayer.cs @@ -0,0 +1,53 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using System.Collections.Generic; +using osu.Framework.Graphics; +using osu.Framework.Graphics.Containers; +using osu.Game.Rulesets.Objects.Drawables; + +namespace osu.Game.Rulesets.Edit.Layers.Selection +{ + public class HitObjectOverlayLayer : CompositeDrawable + { + private readonly Dictionary existingOverlays = new Dictionary(); + + public HitObjectOverlayLayer() + { + RelativeSizeAxes = Axes.Both; + } + + /// + /// Adds an overlay for a which adds movement support. + /// + /// The to create an overlay for. + public void AddOverlay(DrawableHitObject hitObject) + { + var overlay = CreateOverlayFor(hitObject); + if (overlay == null) + return; + + existingOverlays[hitObject] = overlay; + AddInternal(overlay); + } + + /// + /// Removes the overlay for a . + /// + /// The to remove the overlay for. + public void RemoveOverlay(DrawableHitObject hitObject) + { + if (!existingOverlays.TryGetValue(hitObject, out var existing)) + return; + + existing.Hide(); + existing.Expire(); + } + + /// + /// Creates a for a specific . + /// + /// The to create the overlay for. + protected virtual HitObjectOverlay CreateOverlayFor(DrawableHitObject hitObject) => null; + } +} diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index 5a827e155b..e4ddea49e8 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -347,6 +347,8 @@ + + From 8270e4d758728125c2ebaa24aaccdb57a303cf99 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Tue, 20 Feb 2018 20:51:28 +0900 Subject: [PATCH 109/544] Add BorderColour to SliderBody --- .../Objects/Drawables/Pieces/SliderBody.cs | 26 ++++++++++++++++--- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/SliderBody.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/SliderBody.cs index 89af67ba2a..f5910c8a02 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/SliderBody.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/SliderBody.cs @@ -51,6 +51,24 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces } } + private Color4 borderColour = Color4.White; + /// + /// Used to colour the path border. + /// + public new Color4 BorderColour + { + get { return borderColour; } + set + { + if (borderColour == value) + return; + borderColour = value; + + if (LoadState == LoadState.Ready) + Schedule(reloadTexture); + } + } + public Quad PathDrawQuad => container.ScreenSpaceDrawQuad; private int textureWidth => (int)PathWidth * 2; @@ -130,10 +148,10 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces if (progress <= border_portion) { - bytes[i * 4] = 255; - bytes[i * 4 + 1] = 255; - bytes[i * 4 + 2] = 255; - bytes[i * 4 + 3] = (byte)(Math.Min(progress / aa_portion, 1) * 255); + bytes[i * 4] = (byte)(BorderColour.R * 255); + bytes[i * 4 + 1] = (byte)(BorderColour.G * 255); + bytes[i * 4 + 2] = (byte)(BorderColour.B * 255); + bytes[i * 4 + 3] = (byte)(Math.Min(progress / aa_portion, 1) * (BorderColour.A * 255)); } else { From ee055b8e5c36d0a92fbef03c0e7779410d2a7fe3 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Tue, 20 Feb 2018 20:52:12 +0900 Subject: [PATCH 110/544] Allow customizing the snake-ability of sliders --- .../Objects/Drawables/DrawableSlider.cs | 9 +++++++++ .../Objects/Drawables/Pieces/SliderBody.cs | 18 +++++++----------- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs index 41df7ae4a4..a15c6ccd79 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs @@ -7,9 +7,11 @@ using osu.Game.Rulesets.Objects.Drawables; using osu.Game.Rulesets.Osu.Objects.Drawables.Pieces; using System.Collections.Generic; using System.Linq; +using osu.Framework.Allocation; using osu.Framework.Graphics.Containers; using osu.Game.Rulesets.Osu.Judgements; using osu.Framework.Graphics.Primitives; +using osu.Game.Configuration; using osu.Game.Rulesets.Objects.Types; using osu.Game.Rulesets.Scoring; @@ -87,6 +89,13 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables } } + [BackgroundDependencyLoader] + private void load(OsuConfigManager config) + { + config.BindWith(OsuSetting.SnakingInSliders, Body.SnakingIn); + config.BindWith(OsuSetting.SnakingOutSliders, Body.SnakingOut); + } + private int currentSpan; public bool Tracking; diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/SliderBody.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/SliderBody.cs index f5910c8a02..31ef1c05e6 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/SliderBody.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/SliderBody.cs @@ -10,7 +10,6 @@ using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.OpenGL.Textures; using osu.Framework.Graphics.Lines; using osu.Framework.Graphics.Textures; -using osu.Game.Configuration; using OpenTK; using OpenTK.Graphics.ES30; using OpenTK.Graphics; @@ -30,6 +29,9 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces set { path.PathWidth = value; } } + public readonly Bindable SnakingIn = new Bindable(); + public readonly Bindable SnakingOut = new Bindable(); + public double? SnakedStart { get; private set; } public double? SnakedEnd { get; private set; } @@ -115,15 +117,9 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces } } - private Bindable snakingIn; - private Bindable snakingOut; - [BackgroundDependencyLoader] - private void load(OsuConfigManager config) + private void load() { - snakingIn = config.GetBindable(OsuSetting.SnakingInSliders); - snakingOut = config.GetBindable(OsuSetting.SnakingOutSliders); - reloadTexture(); } @@ -188,18 +184,18 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces public void UpdateProgress(double progress, int span) { double start = 0; - double end = snakingIn ? MathHelper.Clamp((Time.Current - (slider.StartTime - slider.TimePreempt)) / slider.TimeFadein, 0, 1) : 1; + double end = SnakingIn ? MathHelper.Clamp((Time.Current - (slider.StartTime - slider.TimePreempt)) / slider.TimeFadein, 0, 1) : 1; if (span >= slider.SpanCount() - 1) { if (Math.Min(span, slider.SpanCount() - 1) % 2 == 1) { start = 0; - end = snakingOut ? progress : 1; + end = SnakingOut ? progress : 1; } else { - start = snakingOut ? progress : 0; + start = SnakingOut ? progress : 0; } } From 7fd7dc153846d4d8eb549d65f544ee84c35ab473 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Tue, 20 Feb 2018 13:50:31 +0900 Subject: [PATCH 111/544] Extract playfield scaling into a separate class And make it more general. --- osu.Game/Rulesets/UI/Playfield.cs | 52 +++-------- osu.Game/Rulesets/UI/ScalableContainer.cs | 86 +++++++++++++++++++ .../UI/Scrolling/ScrollingPlayfield.cs | 11 ++- osu.Game/osu.Game.csproj | 1 + 4 files changed, 105 insertions(+), 45 deletions(-) create mode 100644 osu.Game/Rulesets/UI/ScalableContainer.cs diff --git a/osu.Game/Rulesets/UI/Playfield.cs b/osu.Game/Rulesets/UI/Playfield.cs index a7fed7059b..bbf20c2c26 100644 --- a/osu.Game/Rulesets/UI/Playfield.cs +++ b/osu.Game/Rulesets/UI/Playfield.cs @@ -3,52 +3,37 @@ using System.Collections.Generic; using osu.Framework.Graphics; -using osu.Framework.Graphics.Containers; using osu.Game.Rulesets.Objects.Drawables; -using OpenTK; using osu.Framework.Allocation; namespace osu.Game.Rulesets.UI { - public abstract class Playfield : Container + public abstract class Playfield : ScalableContainer { /// /// The HitObjects contained in this Playfield. /// public HitObjectContainer HitObjects { get; private set; } - public Container ScaledContent; - - protected override Container Content => content; - private readonly Container content; - - private List nestedPlayfields; - /// /// All the s nested inside this playfield. /// public IReadOnlyList NestedPlayfields => nestedPlayfields; + private List nestedPlayfields; /// /// A container for keeping track of DrawableHitObjects. /// - /// Whether we want our internal coordinate system to be scaled to a specified width. - protected Playfield(float? customWidth = null) + /// The width to scale the internal coordinate space to. + /// May be null if scaling based on is desired. If is also null, no scaling will occur. + /// + /// The height to scale the internal coordinate space to. + /// May be null if scaling based on is desired. If is also null, no scaling will occur. + /// + protected Playfield(float? customWidth = null, float? customHeight = null) + : base(customWidth, customHeight) { RelativeSizeAxes = Axes.Both; - - AddInternal(ScaledContent = new ScaledContainer - { - CustomWidth = customWidth, - RelativeSizeAxes = Axes.Both, - Children = new[] - { - content = new Container - { - RelativeSizeAxes = Axes.Both, - } - } - }); } [BackgroundDependencyLoader] @@ -94,22 +79,5 @@ namespace osu.Game.Rulesets.UI /// Creates the container that will be used to contain the s. /// protected virtual HitObjectContainer CreateHitObjectContainer() => new HitObjectContainer(); - - private class ScaledContainer : Container - { - /// - /// A value (in game pixels that we should scale our content to match). - /// - public float? CustomWidth; - - //dividing by the customwidth will effectively scale our content to the required container size. - protected override Vector2 DrawScale => CustomWidth.HasValue ? new Vector2(DrawSize.X / CustomWidth.Value) : base.DrawScale; - - protected override void Update() - { - base.Update(); - RelativeChildSize = new Vector2(DrawScale.X, RelativeChildSize.Y); - } - } } } diff --git a/osu.Game/Rulesets/UI/ScalableContainer.cs b/osu.Game/Rulesets/UI/ScalableContainer.cs new file mode 100644 index 0000000000..e1c1427470 --- /dev/null +++ b/osu.Game/Rulesets/UI/ScalableContainer.cs @@ -0,0 +1,86 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using osu.Framework.Graphics; +using osu.Framework.Graphics.Containers; +using OpenTK; + +namespace osu.Game.Rulesets.UI +{ + /// + /// A which can have its internal coordinate system scaled to a specific size. + /// + public class ScalableContainer : Container + { + /// + /// The scaled content. + /// + public readonly Container ScaledContent; + + protected override Container Content => content; + private readonly Container content; + + /// + /// A which can have its internal coordinate system scaled to a specific size. + /// + /// The width to scale the internal coordinate space to. + /// May be null if scaling based on is desired. If is also null, no scaling will occur. + /// + /// The height to scale the internal coordinate space to. + /// May be null if scaling based on is desired. If is also null, no scaling will occur. + /// + public ScalableContainer(float? customWidth = null, float? customHeight = null) + { + AddInternal(ScaledContent = new ScaledContainer + { + CustomWidth = customWidth, + CustomHeight = customHeight, + RelativeSizeAxes = Axes.Both, + Child = content = new Container { RelativeSizeAxes = Axes.Both } + }); + } + + public class ScaledContainer : Container + { + /// + /// The value to scale the width of the content to match. + /// If null, is used. + /// + public float? CustomWidth; + + /// + /// The value to scale the height of the content to match. + /// if null, is used. + /// + public float? CustomHeight; + + /// + /// The scale that is required for the size of the content to match and . + /// + private Vector2 sizeScale + { + get + { + if (CustomWidth.HasValue && CustomHeight.HasValue) + return Vector2.Divide(DrawSize, new Vector2(CustomWidth.Value, CustomHeight.Value)); + if (CustomWidth.HasValue) + return new Vector2(DrawSize.X / CustomWidth.Value); + if (CustomHeight.HasValue) + return new Vector2(DrawSize.Y / CustomHeight.Value); + return Vector2.One; + } + } + + /// + /// Scale the content to the required container size by multiplying by . + /// + protected override Vector2 DrawScale => sizeScale * base.DrawScale; + + protected override void Update() + { + base.Update(); + RelativeChildSize = sizeScale; + } + } + } +} diff --git a/osu.Game/Rulesets/UI/Scrolling/ScrollingPlayfield.cs b/osu.Game/Rulesets/UI/Scrolling/ScrollingPlayfield.cs index e168f6daec..1c1c8f7f61 100644 --- a/osu.Game/Rulesets/UI/Scrolling/ScrollingPlayfield.cs +++ b/osu.Game/Rulesets/UI/Scrolling/ScrollingPlayfield.cs @@ -62,9 +62,14 @@ namespace osu.Game.Rulesets.UI.Scrolling /// Creates a new . /// /// The direction in which s in this container should scroll. - /// Whether we want our internal coordinate system to be scaled to a specified width - protected ScrollingPlayfield(ScrollingDirection direction, float? customWidth = null) - : base(customWidth) + /// The width to scale the internal coordinate space to. + /// May be null if scaling based on is desired. If is also null, no scaling will occur. + /// + /// The height to scale the internal coordinate space to. + /// May be null if scaling based on is desired. If is also null, no scaling will occur. + /// + protected ScrollingPlayfield(ScrollingDirection direction, float? customWidth = null, float? customHeight = null) + : base(customWidth, customHeight) { this.direction = direction; } diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index 39261fbe57..afeb791029 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -357,6 +357,7 @@ + From 6b8b39abc51bb07062ef22b92fa18ba9cbc3468a Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Tue, 20 Feb 2018 13:50:55 +0900 Subject: [PATCH 112/544] Rewrite SelectionLayer testcase to construct an entire HitObjectComposer --- .../Visual/TestCaseEditorSelectionLayer.cs | 61 +++++++------------ 1 file changed, 23 insertions(+), 38 deletions(-) diff --git a/osu.Game.Tests/Visual/TestCaseEditorSelectionLayer.cs b/osu.Game.Tests/Visual/TestCaseEditorSelectionLayer.cs index 50a39e6c33..5e0c0e165c 100644 --- a/osu.Game.Tests/Visual/TestCaseEditorSelectionLayer.cs +++ b/osu.Game.Tests/Visual/TestCaseEditorSelectionLayer.cs @@ -5,15 +5,13 @@ using System; using System.Collections.Generic; using osu.Framework.Allocation; using OpenTK; -using osu.Framework.Graphics; -using osu.Framework.Graphics.Containers; -using osu.Framework.Timing; using osu.Game.Beatmaps; -using osu.Game.Beatmaps.ControlPoints; using osu.Game.Rulesets.Edit.Layers.Selection; +using osu.Game.Rulesets.Objects; +using osu.Game.Rulesets.Osu; using osu.Game.Rulesets.Osu.Edit; using osu.Game.Rulesets.Osu.Objects; -using osu.Game.Rulesets.Osu.Objects.Drawables; +using osu.Game.Tests.Beatmaps; namespace osu.Game.Tests.Visual { @@ -27,44 +25,31 @@ namespace osu.Game.Tests.Visual }; [BackgroundDependencyLoader] - private void load() + private void load(OsuGameBase osuGame) { - var playfield = new OsuEditPlayfield(); - - Children = new Drawable[] + osuGame.Beatmap.Value = new TestWorkingBeatmap(new Beatmap { - new Container + HitObjects = new List { - RelativeSizeAxes = Axes.Both, - Clock = new FramedClock(new StopwatchClock()), - Child = playfield + new HitCircle { Position = new Vector2(256, 192), Scale = 0.5f }, + new HitCircle { Position = new Vector2(344, 148), Scale = 0.5f }, + new Slider + { + ControlPoints = new List + { + new Vector2(128, 256), + new Vector2(344, 256), + }, + Distance = 400, + Position = new Vector2(128, 256), + Velocity = 1, + TickDistance = 100, + Scale = 0.5f, + } }, - new SelectionLayer(playfield) - }; + }); - var hitCircle1 = new HitCircle { Position = new Vector2(256, 192), Scale = 0.5f }; - var hitCircle2 = new HitCircle { Position = new Vector2(344, 148), Scale = 0.5f }; - var slider = new Slider - { - ControlPoints = new List - { - new Vector2(128, 256), - new Vector2(344, 256), - }, - Distance = 400, - Position = new Vector2(128, 256), - Velocity = 1, - TickDistance = 100, - Scale = 0.5f, - }; - - hitCircle1.ApplyDefaults(new ControlPointInfo(), new BeatmapDifficulty()); - hitCircle2.ApplyDefaults(new ControlPointInfo(), new BeatmapDifficulty()); - slider.ApplyDefaults(new ControlPointInfo(), new BeatmapDifficulty()); - - playfield.Add(new DrawableHitCircle(hitCircle1)); - playfield.Add(new DrawableHitCircle(hitCircle2)); - playfield.Add(new DrawableSlider(slider)); + Child = new OsuHitObjectComposer(new OsuRuleset()); } } } From 4934ef742941b864efddf5d00d55ecf5ca71a135 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Tue, 20 Feb 2018 14:01:33 +0900 Subject: [PATCH 113/544] Add playfield aspect ratio + scaling modifications to composer layers --- .../Edit/OsuHitObjectComposer.cs | 4 ++ osu.Game/Rulesets/Edit/HitObjectComposer.cs | 50 +++++++++++++++---- 2 files changed, 43 insertions(+), 11 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Edit/OsuHitObjectComposer.cs b/osu.Game.Rulesets.Osu/Edit/OsuHitObjectComposer.cs index 6652a5fde2..ae19706da3 100644 --- a/osu.Game.Rulesets.Osu/Edit/OsuHitObjectComposer.cs +++ b/osu.Game.Rulesets.Osu/Edit/OsuHitObjectComposer.cs @@ -2,10 +2,12 @@ // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using System.Collections.Generic; +using osu.Framework.Graphics; using osu.Game.Beatmaps; using osu.Game.Rulesets.Edit; using osu.Game.Rulesets.Edit.Tools; using osu.Game.Rulesets.Osu.Objects; +using osu.Game.Rulesets.Osu.UI; using osu.Game.Rulesets.UI; namespace osu.Game.Rulesets.Osu.Edit @@ -25,5 +27,7 @@ namespace osu.Game.Rulesets.Osu.Edit new HitObjectCompositionTool(), new HitObjectCompositionTool() }; + + protected override ScalableContainer CreateLayerContainer() => new ScalableContainer(OsuPlayfield.BASE_SIZE.X) { RelativeSizeAxes = Axes.Both }; } } diff --git a/osu.Game/Rulesets/Edit/HitObjectComposer.cs b/osu.Game/Rulesets/Edit/HitObjectComposer.cs index 7f22b3764c..62669150aa 100644 --- a/osu.Game/Rulesets/Edit/HitObjectComposer.cs +++ b/osu.Game/Rulesets/Edit/HitObjectComposer.cs @@ -6,6 +6,7 @@ using System.Collections.Generic; using System.Linq; using OpenTK.Graphics; using osu.Framework.Allocation; +using osu.Framework.Extensions.IEnumerableExtensions; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Shapes; @@ -25,6 +26,9 @@ namespace osu.Game.Rulesets.Edit protected ICompositionTool CurrentTool { get; private set; } + private RulesetContainer rulesetContainer; + private readonly Container[] layerContainers = new Container[2]; + protected HitObjectComposer(Ruleset ruleset) { this.ruleset = ruleset; @@ -35,7 +39,6 @@ namespace osu.Game.Rulesets.Edit [BackgroundDependencyLoader] private void load(OsuGameBase osuGame) { - RulesetContainer rulesetContainer; try { rulesetContainer = CreateRulesetContainer(ruleset, osuGame.Beatmap.Value); @@ -46,6 +49,20 @@ namespace osu.Game.Rulesets.Edit return; } + layerContainers[0] = CreateLayerContainer(); + layerContainers[0].Child = new Container + { + Name = "Border", + RelativeSizeAxes = Axes.Both, + Masking = true, + BorderColour = Color4.White, + BorderThickness = 2, + Child = new Box { RelativeSizeAxes = Axes.Both, Alpha = 0, AlwaysPresent = true } + }; + + layerContainers[1] = CreateLayerContainer(); + layerContainers[1].Child = new SelectionLayer(rulesetContainer.Playfield); + RadioButtonCollection toolboxCollection; InternalChild = new GridContainer { @@ -66,20 +83,13 @@ namespace osu.Game.Rulesets.Edit }, new Container { + Name = "Content", RelativeSizeAxes = Axes.Both, - Masking = true, - BorderColour = Color4.White, - BorderThickness = 2, Children = new Drawable[] { - new Box - { - RelativeSizeAxes = Axes.Both, - Alpha = 0, - AlwaysPresent = true, - }, + layerContainers[0], rulesetContainer, - new SelectionLayer(rulesetContainer.Playfield) + layerContainers[1] } } }, @@ -102,10 +112,28 @@ namespace osu.Game.Rulesets.Edit toolboxCollection.Items[0].Select(); } + protected override void UpdateAfterChildren() + { + base.UpdateAfterChildren(); + + layerContainers.ForEach(l => + { + l.Anchor = rulesetContainer.Playfield.Anchor; + l.Origin = rulesetContainer.Playfield.Origin; + l.Position = rulesetContainer.Playfield.Position; + l.Size = rulesetContainer.Playfield.Size; + }); + } + private void setCompositionTool(ICompositionTool tool) => CurrentTool = tool; protected virtual RulesetContainer CreateRulesetContainer(Ruleset ruleset, WorkingBeatmap beatmap) => ruleset.CreateRulesetContainerWith(beatmap, true); protected abstract IReadOnlyList CompositionTools { get; } + + /// + /// Creates a which provides a layer above or below the . + /// + protected virtual ScalableContainer CreateLayerContainer() => new ScalableContainer(); } } From 9a9f53ddfd76731d76462bdcc287190749667a8e Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Tue, 20 Feb 2018 14:13:52 +0900 Subject: [PATCH 114/544] Remove 0.75 scale from osu! playfield in the editor --- osu.Game.Rulesets.Osu/Edit/OsuEditRulesetContainer.cs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/osu.Game.Rulesets.Osu/Edit/OsuEditRulesetContainer.cs b/osu.Game.Rulesets.Osu/Edit/OsuEditRulesetContainer.cs index 56efc25fa5..dd65cd470d 100644 --- a/osu.Game.Rulesets.Osu/Edit/OsuEditRulesetContainer.cs +++ b/osu.Game.Rulesets.Osu/Edit/OsuEditRulesetContainer.cs @@ -5,6 +5,7 @@ using osu.Framework.Graphics.Cursor; using osu.Game.Beatmaps; using osu.Game.Rulesets.Osu.UI; using osu.Game.Rulesets.UI; +using OpenTK; namespace osu.Game.Rulesets.Osu.Edit { @@ -17,6 +18,12 @@ namespace osu.Game.Rulesets.Osu.Edit protected override Playfield CreatePlayfield() => new OsuEditPlayfield(); + protected override Vector2 GetAspectAdjustedSize() + { + var aspectSize = DrawSize.X * 0.75f < DrawSize.Y ? new Vector2(DrawSize.X, DrawSize.X * 0.75f) : new Vector2(DrawSize.Y * 4f / 3f, DrawSize.Y); + return new Vector2(aspectSize.X / DrawSize.X, aspectSize.Y / DrawSize.Y); + } + protected override CursorContainer CreateCursor() => null; } } From cb1ed2fb892062538ad2195f49226a851c4a53ff Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 21 Feb 2018 16:14:39 +0900 Subject: [PATCH 115/544] Update framework --- osu-framework | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu-framework b/osu-framework index 458ebc2d46..f6fa5b80ed 160000 --- a/osu-framework +++ b/osu-framework @@ -1 +1 @@ -Subproject commit 458ebc2d4626c74bb8059cd28b44eb7adba74fbb +Subproject commit f6fa5b80ed06f84c8fd25a2576eea8d51565785c From 31edcfa35c107c19111bbbf05ef4bf7ece0a1b6a Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 21 Feb 2018 16:12:54 +0900 Subject: [PATCH 116/544] Attempt to fix beatmap carousel test failures As seen here: https://ci.appveyor.com/project/peppy/osu/build/master-7260#L1164 Potentially was continuing operation too early. --- osu.Game.Tests/Visual/TestCaseBeatmapCarousel.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/osu.Game.Tests/Visual/TestCaseBeatmapCarousel.cs b/osu.Game.Tests/Visual/TestCaseBeatmapCarousel.cs index 4a65d12977..901d24e531 100644 --- a/osu.Game.Tests/Visual/TestCaseBeatmapCarousel.cs +++ b/osu.Game.Tests/Visual/TestCaseBeatmapCarousel.cs @@ -60,7 +60,9 @@ namespace osu.Game.Tests.Visual AddStep("Load Beatmaps", () => { carousel.BeatmapSets = beatmapSets; }); - AddUntilStep(() => carousel.BeatmapSets.Any(), "Wait for load"); + bool changed = false; + carousel.BeatmapSetsChanged = () => changed = true; + AddUntilStep(() => changed, "Wait for load"); testTraversal(); testFiltering(); From f877b642da8a65310a52c0f98bac198a0bdda9ff Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Wed, 21 Feb 2018 17:10:18 +0900 Subject: [PATCH 117/544] Clean up and document better what "progress" means --- .../Objects/Drawables/DrawableSlider.cs | 12 ++---------- .../Objects/Drawables/Pieces/SliderBall.cs | 4 ++-- .../Objects/Drawables/Pieces/SliderBody.cs | 9 ++++++--- osu.Game.Rulesets.Osu/Objects/ISliderProgress.cs | 6 +++++- 4 files changed, 15 insertions(+), 16 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs index 41df7ae4a4..14650235c3 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs @@ -10,7 +10,6 @@ using System.Linq; using osu.Framework.Graphics.Containers; using osu.Game.Rulesets.Osu.Judgements; using osu.Framework.Graphics.Primitives; -using osu.Game.Rulesets.Objects.Types; using osu.Game.Rulesets.Scoring; namespace osu.Game.Rulesets.Osu.Objects.Drawables @@ -87,7 +86,6 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables } } - private int currentSpan; public bool Tracking; protected override void Update() @@ -96,19 +94,13 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables Tracking = Ball.Tracking; - double progress = MathHelper.Clamp((Time.Current - slider.StartTime) / slider.Duration, 0, 1); - - int span = slider.SpanAt(progress); - progress = slider.ProgressAt(progress); - - if (span > currentSpan) - currentSpan = span; + double completionProgress = MathHelper.Clamp((Time.Current - slider.StartTime) / slider.Duration, 0, 1); //todo: we probably want to reconsider this before adding scoring, but it looks and feels nice. if (!HeadCircle.IsHit) HeadCircle.Position = slider.Curve.PositionAt(progress); - foreach (var c in components.OfType()) c.UpdateProgress(progress, span); + foreach (var c in components.OfType()) c.UpdateProgress(completionProgress); foreach (var c in components.OfType()) c.UpdateSnakingPosition(slider.Curve.PositionAt(Body.SnakedStart ?? 0), slider.Curve.PositionAt(Body.SnakedEnd ?? 0)); foreach (var t in components.OfType()) t.Tracking = Ball.Tracking; } diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/SliderBall.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/SliderBall.cs index 2fda299389..61db10b694 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/SliderBall.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/SliderBall.cs @@ -139,9 +139,9 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces } } - public void UpdateProgress(double progress, int span) + public void UpdateProgress(double completionProgress) { - Position = slider.Curve.PositionAt(progress); + Position = slider.StackedPositionAt(completionProgress); } } } diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/SliderBody.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/SliderBody.cs index 89af67ba2a..fd63a3d954 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/SliderBody.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/SliderBody.cs @@ -167,8 +167,11 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces return true; } - public void UpdateProgress(double progress, int span) + public void UpdateProgress(double completionProgress) { + var span = slider.SpanAt(completionProgress); + var spanProgress = slider.ProgressAt(completionProgress); + double start = 0; double end = snakingIn ? MathHelper.Clamp((Time.Current - (slider.StartTime - slider.TimePreempt)) / slider.TimeFadein, 0, 1) : 1; @@ -177,11 +180,11 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces if (Math.Min(span, slider.SpanCount() - 1) % 2 == 1) { start = 0; - end = snakingOut ? progress : 1; + end = snakingOut ? spanProgress : 1; } else { - start = snakingOut ? progress : 0; + start = snakingOut ? spanProgress : 0; } } diff --git a/osu.Game.Rulesets.Osu/Objects/ISliderProgress.cs b/osu.Game.Rulesets.Osu/Objects/ISliderProgress.cs index 54f783b664..a0566eaf17 100644 --- a/osu.Game.Rulesets.Osu/Objects/ISliderProgress.cs +++ b/osu.Game.Rulesets.Osu/Objects/ISliderProgress.cs @@ -5,6 +5,10 @@ namespace osu.Game.Rulesets.Osu.Objects { public interface ISliderProgress { - void UpdateProgress(double progress, int span); + /// + /// Updates the progress of this element along the slider. + /// + /// Amount of the slider completed. + void UpdateProgress(double completionProgress); } } From f012cce6682568331c8b34f3a6b12c38722f7175 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Wed, 21 Feb 2018 17:33:22 +0900 Subject: [PATCH 118/544] Rewrite some xmldocs to make methods easier to understand --- osu.Game/Rulesets/Objects/Types/IHasCurve.cs | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/osu.Game/Rulesets/Objects/Types/IHasCurve.cs b/osu.Game/Rulesets/Objects/Types/IHasCurve.cs index 7f03854ea9..c03bdb240e 100644 --- a/osu.Game/Rulesets/Objects/Types/IHasCurve.cs +++ b/osu.Game/Rulesets/Objects/Types/IHasCurve.cs @@ -30,21 +30,19 @@ namespace osu.Game.Rulesets.Objects.Types public static class HasCurveExtensions { /// - /// Computes the position on the curve at a given progress, accounting for repeat logic. - /// - /// Ranges from [0, 1] where 0 is the beginning of the curve and 1 is the end of the curve. - /// + /// Computes the position on the curve relative to how much of the has been completed. /// /// The curve. - /// [0, 1] where 0 is the beginning of the curve and 1 is the end of the curve. + /// [0, 1] where 0 is the start time of the and 1 is the end time of the . + /// The position on the curve. public static Vector2 PositionAt(this IHasCurve obj, double progress) => obj.Curve.PositionAt(obj.ProgressAt(progress)); /// - /// Finds the progress along the curve, accounting for repeat logic. + /// Computes the progress along the curve relative to how much of the has been completed. /// /// The curve. - /// [0, 1] where 0 is the beginning of the curve and 1 is the end of the curve. + /// [0, 1] where 0 is the start time of the and 1 is the end time of the . /// [0, 1] where 0 is the beginning of the curve and 1 is the end of the curve. public static double ProgressAt(this IHasCurve obj, double progress) { From f903e6d241035330d7c7cc1ffaa3df207695738f Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Wed, 21 Feb 2018 17:46:45 +0900 Subject: [PATCH 119/544] Fix stacking not working with sliders Fixes #2093. --- .../Objects/Drawables/DrawableRepeatPoint.cs | 7 ++++--- .../Objects/Drawables/DrawableSlider.cs | 6 +++--- osu.Game.Rulesets.Osu/Objects/Slider.cs | 12 ------------ osu.Game.Rulesets.Osu/Tests/TestCaseSlider.cs | 10 ++++++++-- 4 files changed, 15 insertions(+), 20 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableRepeatPoint.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableRepeatPoint.cs index 79a4714e33..db704b0553 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableRepeatPoint.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableRepeatPoint.cs @@ -78,7 +78,8 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables bool isRepeatAtEnd = repeatPoint.RepeatIndex % 2 == 0; List curve = drawableSlider.Body.CurrentCurve; - Position = isRepeatAtEnd ? end : start; + var positionOnCurve = isRepeatAtEnd ? end : start; + Position = positionOnCurve + drawableSlider.HitObject.StackOffset; if (curve.Count < 2) return; @@ -89,10 +90,10 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables // find the next vector2 in the curve which is not equal to our current position to infer a rotation. for (int i = searchStart; i >= 0 && i < curve.Count; i += direction) { - if (curve[i] == Position) + if (curve[i] == positionOnCurve) continue; - Rotation = MathHelper.RadiansToDegrees((float)Math.Atan2(curve[i].Y - Position.Y, curve[i].X - Position.X)); + Rotation = MathHelper.RadiansToDegrees((float)Math.Atan2(curve[i].Y - positionOnCurve.Y, curve[i].X - positionOnCurve.X)); break; } } diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs index 14650235c3..86b9706d9c 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs @@ -65,7 +65,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables { var drawableTick = new DrawableSliderTick(tick) { - Position = tick.Position + Position = tick.StackedPosition }; ticks.Add(drawableTick); @@ -77,7 +77,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables { var drawableRepeatPoint = new DrawableRepeatPoint(repeatPoint, this) { - Position = repeatPoint.Position + Position = repeatPoint.StackedPosition }; repeatPoints.Add(drawableRepeatPoint); @@ -98,7 +98,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables //todo: we probably want to reconsider this before adding scoring, but it looks and feels nice. if (!HeadCircle.IsHit) - HeadCircle.Position = slider.Curve.PositionAt(progress); + HeadCircle.Position = slider.StackedPositionAt(completionProgress); foreach (var c in components.OfType()) c.UpdateProgress(completionProgress); foreach (var c in components.OfType()) c.UpdateSnakingPosition(slider.Curve.PositionAt(Body.SnakedStart ?? 0), slider.Curve.PositionAt(Body.SnakedEnd ?? 0)); diff --git a/osu.Game.Rulesets.Osu/Objects/Slider.cs b/osu.Game.Rulesets.Osu/Objects/Slider.cs index 5dd3d7aa89..ce6c88a340 100644 --- a/osu.Game.Rulesets.Osu/Objects/Slider.cs +++ b/osu.Game.Rulesets.Osu/Objects/Slider.cs @@ -66,18 +66,6 @@ namespace osu.Game.Rulesets.Osu.Objects /// public double SpanDuration => Duration / this.SpanCount(); - private int stackHeight; - - public override int StackHeight - { - get { return stackHeight; } - set - { - stackHeight = value; - Curve.Offset = StackOffset; - } - } - public double Velocity; public double TickDistance; diff --git a/osu.Game.Rulesets.Osu/Tests/TestCaseSlider.cs b/osu.Game.Rulesets.Osu/Tests/TestCaseSlider.cs index 55fa37882d..90a0a450a7 100644 --- a/osu.Game.Rulesets.Osu/Tests/TestCaseSlider.cs +++ b/osu.Game.Rulesets.Osu/Tests/TestCaseSlider.cs @@ -88,10 +88,15 @@ namespace osu.Game.Rulesets.Osu.Tests AddStep("Catmull Slider", () => testCatmull()); AddStep("Catmull Slider 1 Repeat", () => testCatmull(1)); AddStep("Catmull Slider 2 Repeats", () => testCatmull(2)); + + AddStep("Big Single, Large StackOffset", () => testSimpleBigLargeStackOffset()); + AddStep("Big 1 Repeat, Large StackOffset", () => testSimpleBigLargeStackOffset(1)); } private void testSimpleBig(int repeats = 0) => createSlider(2, repeats: repeats); + private void testSimpleBigLargeStackOffset(int repeats = 0) => createSlider(2, repeats: repeats, stackHeight: 10); + private void testSimpleMedium(int repeats = 0) => createSlider(5, repeats: repeats); private void testSimpleSmall(int repeats = 0) => createSlider(7, repeats: repeats); @@ -104,7 +109,7 @@ namespace osu.Game.Rulesets.Osu.Tests private void testShortHighSpeed(int repeats = 0) => createSlider(distance: 100, repeats: repeats, speedMultiplier: 15); - private void createSlider(float circleSize = 2, float distance = 400, int repeats = 0, double speedMultiplier = 2) + private void createSlider(float circleSize = 2, float distance = 400, int repeats = 0, double speedMultiplier = 2, int stackHeight = 0) { var slider = new Slider { @@ -118,7 +123,8 @@ namespace osu.Game.Rulesets.Osu.Tests }, Distance = distance, RepeatCount = repeats, - RepeatSamples = createEmptySamples(repeats) + RepeatSamples = createEmptySamples(repeats), + StackHeight = stackHeight }; addSlider(slider, circleSize, speedMultiplier); From 0d60a65c942a2e224188e5fe05620d621e3b7ac6 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Wed, 21 Feb 2018 17:51:34 +0900 Subject: [PATCH 120/544] Fix OsuAutoGenerator not considering stacking --- osu.Game.Rulesets.Osu/Replays/OsuAutoGenerator.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Replays/OsuAutoGenerator.cs b/osu.Game.Rulesets.Osu/Replays/OsuAutoGenerator.cs index a22ac6aed1..274f7bff62 100644 --- a/osu.Game.Rulesets.Osu/Replays/OsuAutoGenerator.cs +++ b/osu.Game.Rulesets.Osu/Replays/OsuAutoGenerator.cs @@ -315,11 +315,11 @@ namespace osu.Game.Rulesets.Osu.Replays for (double j = FrameDelay; j < s.Duration; j += FrameDelay) { - Vector2 pos = s.PositionAt(j / s.Duration); + Vector2 pos = s.StackedPositionAt(j / s.Duration); AddFrameToReplay(new ReplayFrame(h.StartTime + j, pos.X, pos.Y, button)); } - AddFrameToReplay(new ReplayFrame(s.EndTime, s.EndPosition.X, s.EndPosition.Y, button)); + AddFrameToReplay(new ReplayFrame(s.EndTime, s.StackedEndPosition.X, s.StackedEndPosition.Y, button)); } // We only want to let go of our button if we are at the end of the current replay. Otherwise something is still going on after us so we need to keep the button pressed! From 9cd9c83f2cc2c5947d7cc8aeb80e4111c2a26480 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Wed, 21 Feb 2018 18:00:46 +0900 Subject: [PATCH 121/544] Allow changing accentcolour/bordercolour post-load --- osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/SliderBody.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/SliderBody.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/SliderBody.cs index 31ef1c05e6..96afc35ad6 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/SliderBody.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/SliderBody.cs @@ -48,7 +48,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces return; accentColour = value; - if (LoadState == LoadState.Ready) + if (LoadState >= LoadState.Ready) Schedule(reloadTexture); } } @@ -66,7 +66,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces return; borderColour = value; - if (LoadState == LoadState.Ready) + if (LoadState >= LoadState.Ready) Schedule(reloadTexture); } } From 08e52e8c153afd0e2cf73fd39e4afb756e850ed3 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Wed, 21 Feb 2018 18:02:52 +0900 Subject: [PATCH 122/544] Remove unnecessary schedules --- osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/SliderBody.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/SliderBody.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/SliderBody.cs index 96afc35ad6..0098ddc20b 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/SliderBody.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/SliderBody.cs @@ -49,7 +49,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces accentColour = value; if (LoadState >= LoadState.Ready) - Schedule(reloadTexture); + reloadTexture(); } } @@ -67,7 +67,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces borderColour = value; if (LoadState >= LoadState.Ready) - Schedule(reloadTexture); + reloadTexture(); } } From 6757be200723d143dbb8cf574c08408c3326ed52 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Wed, 21 Feb 2018 20:15:42 +0900 Subject: [PATCH 123/544] Fix incorrect RelativeChildSize in Catch --- osu.Game/Rulesets/UI/ScalableContainer.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game/Rulesets/UI/ScalableContainer.cs b/osu.Game/Rulesets/UI/ScalableContainer.cs index e1c1427470..43ed770f77 100644 --- a/osu.Game/Rulesets/UI/ScalableContainer.cs +++ b/osu.Game/Rulesets/UI/ScalableContainer.cs @@ -79,7 +79,7 @@ namespace osu.Game.Rulesets.UI protected override void Update() { base.Update(); - RelativeChildSize = sizeScale; + RelativeChildSize = new Vector2(CustomWidth.HasValue ? sizeScale.X : RelativeChildSize.X, CustomHeight.HasValue ? sizeScale.Y : RelativeChildSize.Y); } } } From 5faec5c2f1b9e8cac6263124b59c60699136ea00 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Wed, 21 Feb 2018 19:52:36 +0900 Subject: [PATCH 124/544] Add a separate property to control playfield area --- .../UI/ManiaRulesetContainer.cs | 2 +- .../Edit/OsuEditRulesetContainer.cs | 6 +----- osu.Game.Rulesets.Osu/UI/OsuRulesetContainer.cs | 2 +- .../UI/TaikoRulesetContainer.cs | 2 ++ osu.Game/Rulesets/UI/RulesetContainer.cs | 14 ++++++++++---- 5 files changed, 15 insertions(+), 11 deletions(-) diff --git a/osu.Game.Rulesets.Mania/UI/ManiaRulesetContainer.cs b/osu.Game.Rulesets.Mania/UI/ManiaRulesetContainer.cs index 3c9647117e..732d5f4109 100644 --- a/osu.Game.Rulesets.Mania/UI/ManiaRulesetContainer.cs +++ b/osu.Game.Rulesets.Mania/UI/ManiaRulesetContainer.cs @@ -101,7 +101,7 @@ namespace osu.Game.Rulesets.Mania.UI return null; } - protected override Vector2 GetAspectAdjustedSize() => new Vector2(1, 0.8f); + protected override Vector2 PlayfieldArea => new Vector2(1, 0.8f); protected override FramedReplayInputHandler CreateReplayInputHandler(Replay replay) => new ManiaFramedReplayInputHandler(replay, this); diff --git a/osu.Game.Rulesets.Osu/Edit/OsuEditRulesetContainer.cs b/osu.Game.Rulesets.Osu/Edit/OsuEditRulesetContainer.cs index dd65cd470d..a8d895bc1d 100644 --- a/osu.Game.Rulesets.Osu/Edit/OsuEditRulesetContainer.cs +++ b/osu.Game.Rulesets.Osu/Edit/OsuEditRulesetContainer.cs @@ -18,11 +18,7 @@ namespace osu.Game.Rulesets.Osu.Edit protected override Playfield CreatePlayfield() => new OsuEditPlayfield(); - protected override Vector2 GetAspectAdjustedSize() - { - var aspectSize = DrawSize.X * 0.75f < DrawSize.Y ? new Vector2(DrawSize.X, DrawSize.X * 0.75f) : new Vector2(DrawSize.Y * 4f / 3f, DrawSize.Y); - return new Vector2(aspectSize.X / DrawSize.X, aspectSize.Y / DrawSize.Y); - } + protected override Vector2 PlayfieldArea => Vector2.One; protected override CursorContainer CreateCursor() => null; } diff --git a/osu.Game.Rulesets.Osu/UI/OsuRulesetContainer.cs b/osu.Game.Rulesets.Osu/UI/OsuRulesetContainer.cs index 9cb6a13cb2..2af381dd71 100644 --- a/osu.Game.Rulesets.Osu/UI/OsuRulesetContainer.cs +++ b/osu.Game.Rulesets.Osu/UI/OsuRulesetContainer.cs @@ -53,7 +53,7 @@ namespace osu.Game.Rulesets.Osu.UI protected override Vector2 GetAspectAdjustedSize() { var aspectSize = DrawSize.X * 0.75f < DrawSize.Y ? new Vector2(DrawSize.X, DrawSize.X * 0.75f) : new Vector2(DrawSize.Y * 4f / 3f, DrawSize.Y); - return new Vector2(aspectSize.X / DrawSize.X, aspectSize.Y / DrawSize.Y) * 0.75f; + return new Vector2(aspectSize.X / DrawSize.X, aspectSize.Y / DrawSize.Y); } protected override CursorContainer CreateCursor() => new GameplayCursor(); diff --git a/osu.Game.Rulesets.Taiko/UI/TaikoRulesetContainer.cs b/osu.Game.Rulesets.Taiko/UI/TaikoRulesetContainer.cs index 8342009e80..fd31f738ee 100644 --- a/osu.Game.Rulesets.Taiko/UI/TaikoRulesetContainer.cs +++ b/osu.Game.Rulesets.Taiko/UI/TaikoRulesetContainer.cs @@ -88,6 +88,8 @@ namespace osu.Game.Rulesets.Taiko.UI return new Vector2(1, default_relative_height * aspectAdjust); } + protected override Vector2 PlayfieldArea => Vector2.One; + public override ScoreProcessor CreateScoreProcessor() => new TaikoScoreProcessor(this); protected override BeatmapConverter CreateBeatmapConverter() => new TaikoBeatmapConverter(IsForCurrentRuleset); diff --git a/osu.Game/Rulesets/UI/RulesetContainer.cs b/osu.Game/Rulesets/UI/RulesetContainer.cs index f4e700a8eb..05cb0f741b 100644 --- a/osu.Game/Rulesets/UI/RulesetContainer.cs +++ b/osu.Game/Rulesets/UI/RulesetContainer.cs @@ -319,7 +319,7 @@ namespace osu.Game.Rulesets.UI { base.Update(); - Playfield.Size = GetAspectAdjustedSize(); + Playfield.Size = GetAspectAdjustedSize() * PlayfieldArea; } /// @@ -330,11 +330,17 @@ namespace osu.Game.Rulesets.UI protected virtual BeatmapProcessor CreateBeatmapProcessor() => new BeatmapProcessor(); /// - /// Computes the final size of the in relative coordinate space after all - /// aspect and scale adjustments. + /// Computes the size of the in relative coordinate space after aspect adjustments. /// /// The aspect-adjusted size. - protected virtual Vector2 GetAspectAdjustedSize() => new Vector2(0.75f); // A sane default + protected virtual Vector2 GetAspectAdjustedSize() => Vector2.One; + + /// + /// The area of this that is available for the to use. + /// Must be specified in relative coordinate space to this . + /// This affects the final size of the but does not affect the 's scale. + /// + protected virtual Vector2 PlayfieldArea => new Vector2(0.75f); // A sane default /// /// Creates a converter to convert Beatmap to a specific mode. From 426343f1364efd05152dd81c89a8d1b0990e4793 Mon Sep 17 00:00:00 2001 From: tgi74000 Date: Wed, 21 Feb 2018 15:05:51 +0100 Subject: [PATCH 125/544] Fix legacy Taiko replays having reversed inputs --- .../Replays/TaikoAutoGenerator.cs | 20 +++++++++---------- .../Replays/TaikoFramedReplayInputHandler.cs | 10 +++++----- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/osu.Game.Rulesets.Taiko/Replays/TaikoAutoGenerator.cs b/osu.Game.Rulesets.Taiko/Replays/TaikoAutoGenerator.cs index 002159439d..4c0eafe25c 100644 --- a/osu.Game.Rulesets.Taiko/Replays/TaikoAutoGenerator.cs +++ b/osu.Game.Rulesets.Taiko/Replays/TaikoAutoGenerator.cs @@ -63,16 +63,16 @@ namespace osu.Game.Rulesets.Taiko.Replays { default: case 0: - button = ReplayButtonState.Left1; - break; - case 1: button = ReplayButtonState.Right1; break; + case 1: + button = ReplayButtonState.Left1; + break; case 2: - button = ReplayButtonState.Left2; + button = ReplayButtonState.Right2; break; case 3: - button = ReplayButtonState.Right2; + button = ReplayButtonState.Left2; break; } @@ -86,7 +86,7 @@ namespace osu.Game.Rulesets.Taiko.Replays { foreach (var tick in drumRoll.NestedHitObjects.OfType()) { - Frames.Add(new TaikoReplayFrame(tick.StartTime, hitButton ? ReplayButtonState.Right1 : ReplayButtonState.Right2)); + Frames.Add(new TaikoReplayFrame(tick.StartTime, hitButton ? ReplayButtonState.Left1 : ReplayButtonState.Left2)); hitButton = !hitButton; } } @@ -95,16 +95,16 @@ namespace osu.Game.Rulesets.Taiko.Replays if (hit is CentreHit) { if (h.IsStrong) - button = ReplayButtonState.Right1 | ReplayButtonState.Right2; + button = ReplayButtonState.Left1 | ReplayButtonState.Left2; else - button = hitButton ? ReplayButtonState.Right1 : ReplayButtonState.Right2; + button = hitButton ? ReplayButtonState.Left1 : ReplayButtonState.Left2; } else { if (h.IsStrong) - button = ReplayButtonState.Left1 | ReplayButtonState.Left2; + button = ReplayButtonState.Right1 | ReplayButtonState.Right2; else - button = hitButton ? ReplayButtonState.Left1 : ReplayButtonState.Left2; + button = hitButton ? ReplayButtonState.Right1 : ReplayButtonState.Right2; } Frames.Add(new TaikoReplayFrame(h.StartTime, button)); diff --git a/osu.Game.Rulesets.Taiko/Replays/TaikoFramedReplayInputHandler.cs b/osu.Game.Rulesets.Taiko/Replays/TaikoFramedReplayInputHandler.cs index 05e10b6fce..1a96b26d34 100644 --- a/osu.Game.Rulesets.Taiko/Replays/TaikoFramedReplayInputHandler.cs +++ b/osu.Game.Rulesets.Taiko/Replays/TaikoFramedReplayInputHandler.cs @@ -19,13 +19,13 @@ namespace osu.Game.Rulesets.Taiko.Replays var actions = new List(); if (CurrentFrame?.MouseRight1 == true) - actions.Add(TaikoAction.LeftCentre); - if (CurrentFrame?.MouseRight2 == true) - actions.Add(TaikoAction.RightCentre); - if (CurrentFrame?.MouseLeft1 == true) actions.Add(TaikoAction.LeftRim); - if (CurrentFrame?.MouseLeft2 == true) + if (CurrentFrame?.MouseRight2 == true) actions.Add(TaikoAction.RightRim); + if (CurrentFrame?.MouseLeft1 == true) + actions.Add(TaikoAction.LeftCentre); + if (CurrentFrame?.MouseLeft2 == true) + actions.Add(TaikoAction.RightCentre); return new List { new ReplayState { PressedActions = actions } }; } From c84ded258fba3057db1e875d22f53a280cc8698e Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 22 Feb 2018 10:08:22 +0900 Subject: [PATCH 126/544] Reset mouse confine mode on input setting reset hotkey --- osu.Game/OsuGame.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/osu.Game/OsuGame.cs b/osu.Game/OsuGame.cs index 14bc31aecf..4a451b3655 100644 --- a/osu.Game/OsuGame.cs +++ b/osu.Game/OsuGame.cs @@ -20,6 +20,7 @@ using System.Linq; using System.Threading; using System.Threading.Tasks; using osu.Framework.Audio; +using osu.Framework.Input; using osu.Framework.Input.Bindings; using osu.Framework.Platform; using osu.Framework.Threading; @@ -401,6 +402,7 @@ namespace osu.Game sensitivity.Disabled = true; frameworkConfig.Set(FrameworkSetting.ActiveInputHandlers, string.Empty); + frameworkConfig.GetBindable(FrameworkSetting.ConfineMouseMode).SetDefault(); return true; case GlobalAction.ToggleToolbar: Toolbar.ToggleVisibility(); From 7c942eb592d5e06b54e31828ae8cb0291318bcfd Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 22 Feb 2018 13:42:31 +0900 Subject: [PATCH 127/544] Tidy up layer container logic --- osu.Game/Rulesets/Edit/HitObjectComposer.cs | 41 +++++++++++---------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/osu.Game/Rulesets/Edit/HitObjectComposer.cs b/osu.Game/Rulesets/Edit/HitObjectComposer.cs index 62669150aa..1246127257 100644 --- a/osu.Game/Rulesets/Edit/HitObjectComposer.cs +++ b/osu.Game/Rulesets/Edit/HitObjectComposer.cs @@ -6,7 +6,6 @@ using System.Collections.Generic; using System.Linq; using OpenTK.Graphics; using osu.Framework.Allocation; -using osu.Framework.Extensions.IEnumerableExtensions; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Shapes; @@ -27,12 +26,11 @@ namespace osu.Game.Rulesets.Edit protected ICompositionTool CurrentTool { get; private set; } private RulesetContainer rulesetContainer; - private readonly Container[] layerContainers = new Container[2]; + private readonly List layerContainers = new List(); protected HitObjectComposer(Ruleset ruleset) { this.ruleset = ruleset; - RelativeSizeAxes = Axes.Both; } @@ -42,6 +40,9 @@ namespace osu.Game.Rulesets.Edit try { rulesetContainer = CreateRulesetContainer(ruleset, osuGame.Beatmap.Value); + + // TODO: should probably be done at a RulesetContainer level to share logic with Player. + rulesetContainer.Clock = new InterpolatingFramedClock((IAdjustableClock)osuGame.Beatmap.Value.Track ?? new StopwatchClock()); } catch (Exception e) { @@ -49,19 +50,13 @@ namespace osu.Game.Rulesets.Edit return; } - layerContainers[0] = CreateLayerContainer(); - layerContainers[0].Child = new Container + ScalableContainer createLayerContainerWithContent(Drawable content) { - Name = "Border", - RelativeSizeAxes = Axes.Both, - Masking = true, - BorderColour = Color4.White, - BorderThickness = 2, - Child = new Box { RelativeSizeAxes = Axes.Both, Alpha = 0, AlwaysPresent = true } - }; - - layerContainers[1] = CreateLayerContainer(); - layerContainers[1].Child = new SelectionLayer(rulesetContainer.Playfield); + var container = CreateLayerContainer(); + container.Child = content; + layerContainers.Add(container); + return container; + } RadioButtonCollection toolboxCollection; InternalChild = new GridContainer @@ -87,9 +82,17 @@ namespace osu.Game.Rulesets.Edit RelativeSizeAxes = Axes.Both, Children = new Drawable[] { - layerContainers[0], + createLayerContainerWithContent(new Container + { + Name = "Border", + RelativeSizeAxes = Axes.Both, + Masking = true, + BorderColour = Color4.White, + BorderThickness = 2, + Child = new Box { RelativeSizeAxes = Axes.Both, Alpha = 0, AlwaysPresent = true } + }), rulesetContainer, - layerContainers[1] + createLayerContainerWithContent(new SelectionLayer(rulesetContainer.Playfield)) } } }, @@ -100,8 +103,6 @@ namespace osu.Game.Rulesets.Edit } }; - rulesetContainer.Clock = new InterpolatingFramedClock((IAdjustableClock)osuGame.Beatmap.Value.Track ?? new StopwatchClock()); - toolboxCollection.Items = new[] { new RadioButton("Select", () => setCompositionTool(null)) } .Concat( @@ -134,6 +135,6 @@ namespace osu.Game.Rulesets.Edit /// /// Creates a which provides a layer above or below the . /// - protected virtual ScalableContainer CreateLayerContainer() => new ScalableContainer(); + protected virtual ScalableContainer CreateLayerContainer() => new ScalableContainer { RelativeSizeAxes = Axes.Both }; } } From 3d4bed462b55f792ebfd8a66b4c5b00581334568 Mon Sep 17 00:00:00 2001 From: Joseph Madamba <35318437+Joehuu@users.noreply.github.com> Date: Wed, 21 Feb 2018 20:54:47 -0800 Subject: [PATCH 128/544] Reword sign in text --- .../Overlays/Settings/Sections/General/LoginSettings.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/osu.Game/Overlays/Settings/Sections/General/LoginSettings.cs b/osu.Game/Overlays/Settings/Sections/General/LoginSettings.cs index d959da52f3..a5d068adbd 100644 --- a/osu.Game/Overlays/Settings/Sections/General/LoginSettings.cs +++ b/osu.Game/Overlays/Settings/Sections/General/LoginSettings.cs @@ -208,7 +208,7 @@ namespace osu.Game.Overlays.Settings.Sections.General { username = new OsuTextBox { - PlaceholderText = "Username", + PlaceholderText = "Email address", RelativeSizeAxes = Axes.X, Text = api?.Username ?? string.Empty, TabbableContentContainer = this @@ -222,12 +222,12 @@ namespace osu.Game.Overlays.Settings.Sections.General }, new SettingsCheckbox { - LabelText = "Remember username", + LabelText = "Remember email address", Bindable = config.GetBindable(OsuSetting.SaveUsername), }, new SettingsCheckbox { - LabelText = "Stay logged in", + LabelText = "Stay signed in", Bindable = config.GetBindable(OsuSetting.SavePassword), }, new SettingsButton @@ -237,7 +237,7 @@ namespace osu.Game.Overlays.Settings.Sections.General }, new SettingsButton { - Text = "Register new account", + Text = "Register", //Action = registerLink } }; From 604b0fa20abe871b1369a16ebc7258e2e4111fbc Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Thu, 22 Feb 2018 14:11:06 +0900 Subject: [PATCH 129/544] Fix post-merge issues --- .../Edit/Layers/Selection/Overlays/SliderOverlay.cs | 8 ++------ .../Objects/Drawables/DrawableSlider.cs | 13 ------------- 2 files changed, 2 insertions(+), 19 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Edit/Layers/Selection/Overlays/SliderOverlay.cs b/osu.Game.Rulesets.Osu/Edit/Layers/Selection/Overlays/SliderOverlay.cs index 0a9b5638ea..4de44a7ae1 100644 --- a/osu.Game.Rulesets.Osu/Edit/Layers/Selection/Overlays/SliderOverlay.cs +++ b/osu.Game.Rulesets.Osu/Edit/Layers/Selection/Overlays/SliderOverlay.cs @@ -16,13 +16,9 @@ namespace osu.Game.Rulesets.Osu.Edit.Layers.Selection.Overlays { private readonly SliderBody body; - private readonly DrawableSlider hitObject; - public SliderOverlay(DrawableSlider slider) : base(slider) { - hitObject = slider; - var obj = (Slider)slider.HitObject; InternalChildren = new Drawable[] @@ -48,8 +44,8 @@ namespace osu.Game.Rulesets.Osu.Edit.Layers.Selection.Overlays { base.Update(); - hitObject.GetCurrentProgress(out int span, out double progress); - body.UpdateProgress(progress, span); + // Need to cause one update + body.UpdateProgress(0); } } } diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs index 278f3d79f4..cc6f8ad34f 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs @@ -157,19 +157,6 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables } } - /// - /// Finds the progress along the slider at the current time. - /// - /// The current span. - /// The current progress in the current span. - public void GetCurrentProgress(out int span, out double progress) - { - double offset = MathHelper.Clamp((Time.Current - slider.StartTime) / slider.Duration, 0, 1); - - span = slider.SpanAt(offset); - progress = slider.ProgressAt(offset); - } - public Drawable ProxiedLayer => HeadCircle.ApproachCircle; public override bool ReceiveMouseInputAt(Vector2 screenSpacePos) => Body.ReceiveMouseInputAt(screenSpacePos); From f2b3d9a0e89ad1bdbfba21e025f1bbd7f5ea5570 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 22 Feb 2018 14:17:35 +0900 Subject: [PATCH 130/544] Change some missed instances --- osu.Game/Overlays/ChatOverlay.cs | 2 +- osu.Game/Screens/Select/Leaderboards/Leaderboard.cs | 2 +- osu.Game/Tests/Visual/TestCasePerformancePoints.cs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/osu.Game/Overlays/ChatOverlay.cs b/osu.Game/Overlays/ChatOverlay.cs index beb2b3b746..7c6e563c5b 100644 --- a/osu.Game/Overlays/ChatOverlay.cs +++ b/osu.Game/Overlays/ChatOverlay.cs @@ -477,7 +477,7 @@ namespace osu.Game.Overlays if (!api.IsLoggedIn) { - target.AddNewMessages(new ErrorMessage("Please login to participate in chat!")); + target.AddNewMessages(new ErrorMessage("Please sign in to participate in chat!")); return; } diff --git a/osu.Game/Screens/Select/Leaderboards/Leaderboard.cs b/osu.Game/Screens/Select/Leaderboards/Leaderboard.cs index 6be6523175..273cceeeda 100644 --- a/osu.Game/Screens/Select/Leaderboards/Leaderboard.cs +++ b/osu.Game/Screens/Select/Leaderboards/Leaderboard.cs @@ -133,7 +133,7 @@ namespace osu.Game.Screens.Select.Leaderboards replacePlaceholder(new MessagePlaceholder(@"No records yet!")); break; case PlaceholderState.NotLoggedIn: - replacePlaceholder(new MessagePlaceholder(@"Please login to view online leaderboards!")); + replacePlaceholder(new MessagePlaceholder(@"Please sign in to view online leaderboards!")); break; case PlaceholderState.NotSupporter: replacePlaceholder(new MessagePlaceholder(@"Please invest in a supporter tag to view this leaderboard!")); diff --git a/osu.Game/Tests/Visual/TestCasePerformancePoints.cs b/osu.Game/Tests/Visual/TestCasePerformancePoints.cs index c531edb893..5b32433467 100644 --- a/osu.Game/Tests/Visual/TestCasePerformancePoints.cs +++ b/osu.Game/Tests/Visual/TestCasePerformancePoints.cs @@ -230,7 +230,7 @@ namespace osu.Game.Tests.Visual { Anchor = Anchor.TopCentre, Origin = Anchor.TopCentre, - Text = "Please login to see online scores", + Text = "Please sign in to see online scores", }; } From 07252254eb1cf769e3be516d3dae5c5d5bf82ad6 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Thu, 22 Feb 2018 14:22:04 +0900 Subject: [PATCH 131/544] Fix post-merge issues --- .../Visual/TestCaseEditorSelectionLayer.cs | 1 + osu.Game/Rulesets/Edit/HitObjectComposer.cs | 17 +++++++++++++---- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/osu.Game.Tests/Visual/TestCaseEditorSelectionLayer.cs b/osu.Game.Tests/Visual/TestCaseEditorSelectionLayer.cs index 1724acaf1a..0db03b08a7 100644 --- a/osu.Game.Tests/Visual/TestCaseEditorSelectionLayer.cs +++ b/osu.Game.Tests/Visual/TestCaseEditorSelectionLayer.cs @@ -6,6 +6,7 @@ using System.Collections.Generic; using osu.Framework.Allocation; using OpenTK; using osu.Game.Beatmaps; +using osu.Game.Rulesets.Edit; using osu.Game.Rulesets.Edit.Layers.Selection; using osu.Game.Rulesets.Objects; using osu.Game.Rulesets.Osu; diff --git a/osu.Game/Rulesets/Edit/HitObjectComposer.cs b/osu.Game/Rulesets/Edit/HitObjectComposer.cs index 0754a67bd2..4420f1a6b8 100644 --- a/osu.Game/Rulesets/Edit/HitObjectComposer.cs +++ b/osu.Game/Rulesets/Edit/HitObjectComposer.cs @@ -6,7 +6,6 @@ using System.Collections.Generic; using System.Linq; using OpenTK.Graphics; using osu.Framework.Allocation; -using osu.Framework.Extensions.IEnumerableExtensions; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Shapes; @@ -51,14 +50,17 @@ namespace osu.Game.Rulesets.Edit return; } - ScalableContainer createLayerContainerWithContent(Drawable content) + ScalableContainer createLayerContainerWithContent(params Drawable[] content) { var container = CreateLayerContainer(); - container.Child = content; + container.Children = content; layerContainers.Add(container); return container; } + HitObjectOverlayLayer hitObjectOverlayLayer; + SelectionLayer selectionLayer; + RadioButtonCollection toolboxCollection; InternalChild = new GridContainer { @@ -93,7 +95,11 @@ namespace osu.Game.Rulesets.Edit Child = new Box { RelativeSizeAxes = Axes.Both, Alpha = 0, AlwaysPresent = true } }), rulesetContainer, - createLayerContainerWithContent(new SelectionLayer(rulesetContainer.Playfield)) + createLayerContainerWithContent + ( + hitObjectOverlayLayer = CreateHitObjectOverlayLayer(), + selectionLayer = new SelectionLayer(rulesetContainer.Playfield) + ) } } }, @@ -104,6 +110,9 @@ namespace osu.Game.Rulesets.Edit } }; + selectionLayer.ObjectSelected += hitObjectOverlayLayer.AddOverlay; + selectionLayer.ObjectDeselected += hitObjectOverlayLayer.RemoveOverlay; + toolboxCollection.Items = new[] { new RadioButton("Select", () => setCompositionTool(null)) } .Concat( From 844e87aafeb7cfc7ef43066222dd21f0e39fc242 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Thu, 22 Feb 2018 14:25:10 +0900 Subject: [PATCH 132/544] Use the true head position rather than capturing current position --- .../Edit/Layers/Selection/Overlays/SliderCircleOverlay.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game.Rulesets.Osu/Edit/Layers/Selection/Overlays/SliderCircleOverlay.cs b/osu.Game.Rulesets.Osu/Edit/Layers/Selection/Overlays/SliderCircleOverlay.cs index 0d60f62a2f..b3bf25fe67 100644 --- a/osu.Game.Rulesets.Osu/Edit/Layers/Selection/Overlays/SliderCircleOverlay.cs +++ b/osu.Game.Rulesets.Osu/Edit/Layers/Selection/Overlays/SliderCircleOverlay.cs @@ -15,7 +15,7 @@ namespace osu.Game.Rulesets.Osu.Edit.Layers.Selection.Overlays public class SliderCircleOverlay : HitObjectOverlay { public SliderCircleOverlay(DrawableHitCircle sliderHead, DrawableSlider slider) - : this(sliderHead, sliderHead.Position, slider) + : this(sliderHead, ((Slider)slider.HitObject).StackedPositionAt(0), slider) { } From 45c579630daf86bdcd0bb836fba89da1714974bf Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Thu, 22 Feb 2018 14:34:37 +0900 Subject: [PATCH 133/544] Make selectionLayer handle input below object overlays --- osu.Game/Rulesets/Edit/HitObjectComposer.cs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/osu.Game/Rulesets/Edit/HitObjectComposer.cs b/osu.Game/Rulesets/Edit/HitObjectComposer.cs index 4420f1a6b8..2a799a460f 100644 --- a/osu.Game/Rulesets/Edit/HitObjectComposer.cs +++ b/osu.Game/Rulesets/Edit/HitObjectComposer.cs @@ -58,8 +58,8 @@ namespace osu.Game.Rulesets.Edit return container; } - HitObjectOverlayLayer hitObjectOverlayLayer; - SelectionLayer selectionLayer; + HitObjectOverlayLayer hitObjectOverlayLayer = CreateHitObjectOverlayLayer(); + SelectionLayer selectionLayer = new SelectionLayer(rulesetContainer.Playfield); RadioButtonCollection toolboxCollection; InternalChild = new GridContainer @@ -97,8 +97,9 @@ namespace osu.Game.Rulesets.Edit rulesetContainer, createLayerContainerWithContent ( - hitObjectOverlayLayer = CreateHitObjectOverlayLayer(), - selectionLayer = new SelectionLayer(rulesetContainer.Playfield) + selectionLayer, // Below object overlays for input + hitObjectOverlayLayer, + selectionLayer.CreateProxy() // Proxy above object overlays for selections ) } } From 0cdf6fa7e2bc847024d34bd25558d4565a84f834 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Thu, 22 Feb 2018 14:36:58 +0900 Subject: [PATCH 134/544] Make HitObjectOverlay into an OverlayContainer --- .../Rulesets/Edit/Layers/Selection/HitObjectOverlay.cs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/osu.Game/Rulesets/Edit/Layers/Selection/HitObjectOverlay.cs b/osu.Game/Rulesets/Edit/Layers/Selection/HitObjectOverlay.cs index e18627ea5d..543dd2cc54 100644 --- a/osu.Game/Rulesets/Edit/Layers/Selection/HitObjectOverlay.cs +++ b/osu.Game/Rulesets/Edit/Layers/Selection/HitObjectOverlay.cs @@ -6,7 +6,7 @@ using osu.Game.Rulesets.Objects.Drawables; namespace osu.Game.Rulesets.Edit.Layers.Selection { - public class HitObjectOverlay : CompositeDrawable + public class HitObjectOverlay : OverlayContainer { // ReSharper disable once NotAccessedField.Local // This will be used later to handle drag movement, etc @@ -15,6 +15,11 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection public HitObjectOverlay(DrawableHitObject hitObject) { this.hitObject = hitObject; + + State = Visibility.Visible; } + + protected override void PopIn() => Alpha = 1; + protected override void PopOut() => Alpha = 0; } } From c070c695229a0b8ec13b2f36743178edec0b5ceb Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 22 Feb 2018 15:01:53 +0900 Subject: [PATCH 135/544] Update framework --- osu-framework | 2 +- osu.Game/Overlays/Direct/PlayButton.cs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/osu-framework b/osu-framework index f6fa5b80ed..16a4bef775 160000 --- a/osu-framework +++ b/osu-framework @@ -1 +1 @@ -Subproject commit f6fa5b80ed06f84c8fd25a2576eea8d51565785c +Subproject commit 16a4bef775a49166f38faa6e952d83d8823fe3e0 diff --git a/osu.Game/Overlays/Direct/PlayButton.cs b/osu.Game/Overlays/Direct/PlayButton.cs index 1d67bc2d90..0fb988ead7 100644 --- a/osu.Game/Overlays/Direct/PlayButton.cs +++ b/osu.Game/Overlays/Direct/PlayButton.cs @@ -22,6 +22,7 @@ namespace osu.Game.Overlays.Direct public Track Preview { get; private set; } private BeatmapSetInfo beatmapSet; + public BeatmapSetInfo BeatmapSet { get { return beatmapSet; } @@ -199,8 +200,7 @@ namespace osu.Game.Overlays.Direct // add back the user's music volume setting (since we are no longer in the global TrackManager's hierarchy). config.BindWith(FrameworkSetting.VolumeMusic, trackManager.Volume); - if (!string.IsNullOrEmpty(preview)) - Preview = trackManager.Get(preview); + Preview = trackManager.Get(preview); } protected override void Dispose(bool isDisposing) From 4c14b32783ada771f7e7e75dec301688bf98713b Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 15 Feb 2018 13:45:39 +0900 Subject: [PATCH 136/544] Add basic skin database model layout and importing --- osu.Game/Database/OsuDbContext.cs | 2 ++ osu.Game/OsuGame.cs | 2 ++ osu.Game/OsuGameBase.cs | 6 +++++ osu.Game/Skinning/SkinFileInfo.cs | 25 ++++++++++++++++++++ osu.Game/Skinning/SkinInfo.cs | 25 ++++++++++++++++++++ osu.Game/Skinning/SkinManager.cs | 39 +++++++++++++++++++++++++++++++ osu.Game/Skinning/SkinStore.cs | 22 +++++++++++++++++ osu.Game/osu.Game.csproj | 4 ++++ 8 files changed, 125 insertions(+) create mode 100644 osu.Game/Skinning/SkinFileInfo.cs create mode 100644 osu.Game/Skinning/SkinInfo.cs create mode 100644 osu.Game/Skinning/SkinManager.cs create mode 100644 osu.Game/Skinning/SkinStore.cs diff --git a/osu.Game/Database/OsuDbContext.cs b/osu.Game/Database/OsuDbContext.cs index e83b30595e..a4b0c30478 100644 --- a/osu.Game/Database/OsuDbContext.cs +++ b/osu.Game/Database/OsuDbContext.cs @@ -13,6 +13,7 @@ using osu.Game.IO; using osu.Game.Rulesets; using DatabasedKeyBinding = osu.Game.Input.Bindings.DatabasedKeyBinding; using LogLevel = Microsoft.Extensions.Logging.LogLevel; +using osu.Game.Skinning; namespace osu.Game.Database { @@ -26,6 +27,7 @@ namespace osu.Game.Database public DbSet DatabasedSetting { get; set; } public DbSet FileInfo { get; set; } public DbSet RulesetInfo { get; set; } + public DbSet SkinInfo { get; set; } private readonly string connectionString; diff --git a/osu.Game/OsuGame.cs b/osu.Game/OsuGame.cs index 14bc31aecf..15ee62c5e5 100644 --- a/osu.Game/OsuGame.cs +++ b/osu.Game/OsuGame.cs @@ -187,7 +187,9 @@ namespace osu.Game CursorOverrideContainer.CanShowCursor = currentScreen?.CursorVisible ?? false; // hook up notifications to components. + SkinManager.PostNotification = n => notifications?.Post(n); BeatmapManager.PostNotification = n => notifications?.Post(n); + BeatmapManager.GetStableStorage = GetStorageForStableInstall; AddRange(new Drawable[] diff --git a/osu.Game/OsuGameBase.cs b/osu.Game/OsuGameBase.cs index b70055cc00..94ed696e49 100644 --- a/osu.Game/OsuGameBase.cs +++ b/osu.Game/OsuGameBase.cs @@ -30,6 +30,7 @@ using osu.Game.Input.Bindings; using osu.Game.IO; using osu.Game.Rulesets; using osu.Game.Rulesets.Scoring; +using osu.Game.Skinning; namespace osu.Game { @@ -39,6 +40,8 @@ namespace osu.Game protected BeatmapManager BeatmapManager; + protected SkinManager SkinManager; + protected RulesetStore RulesetStore; protected FileStore FileStore; @@ -103,6 +106,8 @@ namespace osu.Game runMigrations(); + dependencies.Cache(SkinManager = new SkinManager(Host.Storage, contextFactory, Host)); + dependencies.Cache(API = new APIAccess { Username = LocalConfig.Get(OsuSetting.Username), @@ -120,6 +125,7 @@ namespace osu.Game fileImporters.Add(BeatmapManager); fileImporters.Add(ScoreStore); + fileImporters.Add(SkinManager); //this completely overrides the framework default. will need to change once we make a proper FontStore. dependencies.Cache(Fonts = new FontStore { ScaleAdjust = 100 }); diff --git a/osu.Game/Skinning/SkinFileInfo.cs b/osu.Game/Skinning/SkinFileInfo.cs new file mode 100644 index 0000000000..e8caf8f44a --- /dev/null +++ b/osu.Game/Skinning/SkinFileInfo.cs @@ -0,0 +1,25 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; +using osu.Game.Database; +using osu.Game.IO; + +namespace osu.Game.Skinning +{ + public class SkinFileInfo : INamedFileInfo + { + [DatabaseGenerated(DatabaseGeneratedOption.Identity)] + public int ID { get; set; } + + public int SkinInfoID { get; set; } + + public int FileInfoID { get; set; } + + public FileInfo FileInfo { get; set; } + + [Required] + public string Filename { get; set; } + } +} diff --git a/osu.Game/Skinning/SkinInfo.cs b/osu.Game/Skinning/SkinInfo.cs new file mode 100644 index 0000000000..ee9f63bec9 --- /dev/null +++ b/osu.Game/Skinning/SkinInfo.cs @@ -0,0 +1,25 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations.Schema; +using osu.Game.Database; + +namespace osu.Game.Skinning +{ + public class SkinInfo : IHasFiles, IHasPrimaryKey, ISoftDelete + { + [DatabaseGenerated(DatabaseGeneratedOption.Identity)] + public int ID { get; set; } + + public string Name { get; set; } + + public string Creator { get; set; } + + public List Files { get; set; } + + public bool DeletePending { get; set; } + + public static SkinInfo Default { get; } = new SkinInfo { Name = "osu!lazer", Creator = "team osu!" }; + } +} diff --git a/osu.Game/Skinning/SkinManager.cs b/osu.Game/Skinning/SkinManager.cs new file mode 100644 index 0000000000..ac3347e1d0 --- /dev/null +++ b/osu.Game/Skinning/SkinManager.cs @@ -0,0 +1,39 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using System.Collections.Generic; +using System.Linq; +using osu.Framework.Configuration; +using osu.Framework.Platform; +using osu.Game.Database; +using osu.Game.IO.Archives; + +namespace osu.Game.Skinning +{ + public class SkinManager : ArchiveModelManager + { + public readonly Bindable CurrentSkinInfo = new Bindable(SkinInfo.Default) { Default = SkinInfo.Default }; + + public override string[] HandledExtensions => new[] { ".osk" }; + + /// + /// Returns a list of all usable s. + /// + /// A list of available . + public List GetAllUsableSkins() + { + var userSkins = ModelStore.ConsumableItems.Where(s => !s.DeletePending).ToList(); + userSkins.Insert(0, SkinInfo.Default); + return userSkins; + } + + protected override SkinInfo CreateModel(ArchiveReader archive) => new SkinInfo { Name = archive.Name }; + + private SkinStore store; + + public SkinManager(Storage storage, DatabaseContextFactory contextFactory, IIpcHost importHost) + : base(storage, contextFactory, new SkinStore(contextFactory, storage), importHost) + { + } + } +} diff --git a/osu.Game/Skinning/SkinStore.cs b/osu.Game/Skinning/SkinStore.cs new file mode 100644 index 0000000000..ffd9873901 --- /dev/null +++ b/osu.Game/Skinning/SkinStore.cs @@ -0,0 +1,22 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using System.Linq; +using Microsoft.EntityFrameworkCore; +using osu.Framework.Platform; +using osu.Game.Database; + +namespace osu.Game.Skinning +{ + public class SkinStore : MutableDatabaseBackedStore + { + public SkinStore(DatabaseContextFactory contextFactory, Storage storage = null) + : base(contextFactory, storage) + { + } + + protected override IQueryable AddIncludesForConsumption(IQueryable query) => + base.AddIncludesForConsumption(query) + .Include(s => s.Files).ThenInclude(f => f.FileInfo); + } +} diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index afeb791029..4b1dad28db 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -850,6 +850,10 @@ + + + + From 2351b6ab269d7d4623dd9817ecbaf6b4571c691b Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 22 Feb 2018 15:44:13 +0900 Subject: [PATCH 137/544] Add migration --- .../20180219060912_AddSkins.Designer.cs | 379 ++++++++++++++++++ .../Migrations/20180219060912_AddSkins.cs | 73 ++++ .../Migrations/OsuDbContextModelSnapshot.cs | 50 +++ osu.Game/osu.Game.csproj | 4 + 4 files changed, 506 insertions(+) create mode 100644 osu.Game/Migrations/20180219060912_AddSkins.Designer.cs create mode 100644 osu.Game/Migrations/20180219060912_AddSkins.cs diff --git a/osu.Game/Migrations/20180219060912_AddSkins.Designer.cs b/osu.Game/Migrations/20180219060912_AddSkins.Designer.cs new file mode 100644 index 0000000000..83b8d6cf8a --- /dev/null +++ b/osu.Game/Migrations/20180219060912_AddSkins.Designer.cs @@ -0,0 +1,379 @@ +// +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage; +using osu.Game.Database; +using System; + +namespace osu.Game.Migrations +{ + [DbContext(typeof(OsuDbContext))] + [Migration("20180219060912_AddSkins")] + partial class AddSkins + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "2.0.0-rtm-26452"); + + modelBuilder.Entity("osu.Game.Beatmaps.BeatmapDifficulty", b => + { + b.Property("ID") + .ValueGeneratedOnAdd(); + + b.Property("ApproachRate"); + + b.Property("CircleSize"); + + b.Property("DrainRate"); + + b.Property("OverallDifficulty"); + + b.Property("SliderMultiplier"); + + b.Property("SliderTickRate"); + + b.HasKey("ID"); + + b.ToTable("BeatmapDifficulty"); + }); + + modelBuilder.Entity("osu.Game.Beatmaps.BeatmapInfo", b => + { + b.Property("ID") + .ValueGeneratedOnAdd(); + + b.Property("AudioLeadIn"); + + b.Property("BaseDifficultyID"); + + b.Property("BeatDivisor"); + + b.Property("BeatmapSetInfoID"); + + b.Property("Countdown"); + + b.Property("DistanceSpacing"); + + b.Property("GridSize"); + + b.Property("Hash"); + + b.Property("Hidden"); + + b.Property("LetterboxInBreaks"); + + b.Property("MD5Hash"); + + b.Property("MetadataID"); + + b.Property("OnlineBeatmapID"); + + b.Property("Path"); + + b.Property("RulesetID"); + + b.Property("SpecialStyle"); + + b.Property("StackLeniency"); + + b.Property("StarDifficulty"); + + b.Property("StoredBookmarks"); + + b.Property("TimelineZoom"); + + b.Property("Version"); + + b.Property("WidescreenStoryboard"); + + b.HasKey("ID"); + + b.HasIndex("BaseDifficultyID"); + + b.HasIndex("BeatmapSetInfoID"); + + b.HasIndex("Hash") + .IsUnique(); + + b.HasIndex("MD5Hash") + .IsUnique(); + + b.HasIndex("MetadataID"); + + b.HasIndex("OnlineBeatmapID") + .IsUnique(); + + b.HasIndex("RulesetID"); + + b.ToTable("BeatmapInfo"); + }); + + modelBuilder.Entity("osu.Game.Beatmaps.BeatmapMetadata", b => + { + b.Property("ID") + .ValueGeneratedOnAdd(); + + b.Property("Artist"); + + b.Property("ArtistUnicode"); + + b.Property("AudioFile"); + + b.Property("AuthorString") + .HasColumnName("Author"); + + b.Property("BackgroundFile"); + + b.Property("PreviewTime"); + + b.Property("Source"); + + b.Property("Tags"); + + b.Property("Title"); + + b.Property("TitleUnicode"); + + b.HasKey("ID"); + + b.ToTable("BeatmapMetadata"); + }); + + modelBuilder.Entity("osu.Game.Beatmaps.BeatmapSetFileInfo", b => + { + b.Property("ID") + .ValueGeneratedOnAdd(); + + b.Property("BeatmapSetInfoID"); + + b.Property("FileInfoID"); + + b.Property("Filename") + .IsRequired(); + + b.HasKey("ID"); + + b.HasIndex("BeatmapSetInfoID"); + + b.HasIndex("FileInfoID"); + + b.ToTable("BeatmapSetFileInfo"); + }); + + modelBuilder.Entity("osu.Game.Beatmaps.BeatmapSetInfo", b => + { + b.Property("ID") + .ValueGeneratedOnAdd(); + + b.Property("DeletePending"); + + b.Property("Hash"); + + b.Property("MetadataID"); + + b.Property("OnlineBeatmapSetID"); + + b.Property("Protected"); + + b.HasKey("ID"); + + b.HasIndex("DeletePending"); + + b.HasIndex("Hash") + .IsUnique(); + + b.HasIndex("MetadataID"); + + b.HasIndex("OnlineBeatmapSetID") + .IsUnique(); + + b.ToTable("BeatmapSetInfo"); + }); + + modelBuilder.Entity("osu.Game.Configuration.DatabasedSetting", b => + { + b.Property("ID") + .ValueGeneratedOnAdd(); + + b.Property("IntKey") + .HasColumnName("Key"); + + b.Property("RulesetID"); + + b.Property("StringValue") + .HasColumnName("Value"); + + b.Property("Variant"); + + b.HasKey("ID"); + + b.HasIndex("RulesetID", "Variant"); + + b.ToTable("Settings"); + }); + + modelBuilder.Entity("osu.Game.Input.Bindings.DatabasedKeyBinding", b => + { + b.Property("ID") + .ValueGeneratedOnAdd(); + + b.Property("IntAction") + .HasColumnName("Action"); + + b.Property("KeysString") + .HasColumnName("Keys"); + + b.Property("RulesetID"); + + b.Property("Variant"); + + b.HasKey("ID"); + + b.HasIndex("IntAction"); + + b.HasIndex("RulesetID", "Variant"); + + b.ToTable("KeyBinding"); + }); + + modelBuilder.Entity("osu.Game.IO.FileInfo", b => + { + b.Property("ID") + .ValueGeneratedOnAdd(); + + b.Property("Hash"); + + b.Property("ReferenceCount"); + + b.HasKey("ID"); + + b.HasIndex("Hash") + .IsUnique(); + + b.HasIndex("ReferenceCount"); + + b.ToTable("FileInfo"); + }); + + modelBuilder.Entity("osu.Game.Rulesets.RulesetInfo", b => + { + b.Property("ID") + .ValueGeneratedOnAdd(); + + b.Property("Available"); + + b.Property("InstantiationInfo"); + + b.Property("Name"); + + b.Property("ShortName"); + + b.HasKey("ID"); + + b.HasIndex("Available"); + + b.HasIndex("ShortName") + .IsUnique(); + + b.ToTable("RulesetInfo"); + }); + + modelBuilder.Entity("osu.Game.Skinning.SkinFileInfo", b => + { + b.Property("ID") + .ValueGeneratedOnAdd(); + + b.Property("FileInfoID"); + + b.Property("Filename") + .IsRequired(); + + b.Property("SkinInfoID"); + + b.HasKey("ID"); + + b.HasIndex("FileInfoID"); + + b.HasIndex("SkinInfoID"); + + b.ToTable("SkinFileInfo"); + }); + + modelBuilder.Entity("osu.Game.Skinning.SkinInfo", b => + { + b.Property("ID") + .ValueGeneratedOnAdd(); + + b.Property("Creator"); + + b.Property("DeletePending"); + + b.Property("Name"); + + b.HasKey("ID"); + + b.ToTable("SkinInfo"); + }); + + modelBuilder.Entity("osu.Game.Beatmaps.BeatmapInfo", b => + { + b.HasOne("osu.Game.Beatmaps.BeatmapDifficulty", "BaseDifficulty") + .WithMany() + .HasForeignKey("BaseDifficultyID") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("osu.Game.Beatmaps.BeatmapSetInfo", "BeatmapSet") + .WithMany("Beatmaps") + .HasForeignKey("BeatmapSetInfoID") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("osu.Game.Beatmaps.BeatmapMetadata", "Metadata") + .WithMany("Beatmaps") + .HasForeignKey("MetadataID"); + + b.HasOne("osu.Game.Rulesets.RulesetInfo", "Ruleset") + .WithMany() + .HasForeignKey("RulesetID") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("osu.Game.Beatmaps.BeatmapSetFileInfo", b => + { + b.HasOne("osu.Game.Beatmaps.BeatmapSetInfo") + .WithMany("Files") + .HasForeignKey("BeatmapSetInfoID") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("osu.Game.IO.FileInfo", "FileInfo") + .WithMany() + .HasForeignKey("FileInfoID") + .OnDelete(DeleteBehavior.Cascade); + }); + + modelBuilder.Entity("osu.Game.Beatmaps.BeatmapSetInfo", b => + { + b.HasOne("osu.Game.Beatmaps.BeatmapMetadata", "Metadata") + .WithMany("BeatmapSets") + .HasForeignKey("MetadataID"); + }); + + modelBuilder.Entity("osu.Game.Skinning.SkinFileInfo", b => + { + b.HasOne("osu.Game.IO.FileInfo", "FileInfo") + .WithMany() + .HasForeignKey("FileInfoID") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("osu.Game.Skinning.SkinInfo") + .WithMany("Files") + .HasForeignKey("SkinInfoID") + .OnDelete(DeleteBehavior.Cascade); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/osu.Game/Migrations/20180219060912_AddSkins.cs b/osu.Game/Migrations/20180219060912_AddSkins.cs new file mode 100644 index 0000000000..741fcf4079 --- /dev/null +++ b/osu.Game/Migrations/20180219060912_AddSkins.cs @@ -0,0 +1,73 @@ +using Microsoft.EntityFrameworkCore.Migrations; +using System; +using System.Collections.Generic; + +namespace osu.Game.Migrations +{ + public partial class AddSkins : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "SkinInfo", + columns: table => new + { + ID = table.Column(type: "INTEGER", nullable: false) + .Annotation("Sqlite:Autoincrement", true), + Creator = table.Column(type: "TEXT", nullable: true), + DeletePending = table.Column(type: "INTEGER", nullable: false), + Name = table.Column(type: "TEXT", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_SkinInfo", x => x.ID); + }); + + migrationBuilder.CreateTable( + name: "SkinFileInfo", + columns: table => new + { + ID = table.Column(type: "INTEGER", nullable: false) + .Annotation("Sqlite:Autoincrement", true), + FileInfoID = table.Column(type: "INTEGER", nullable: false), + Filename = table.Column(type: "TEXT", nullable: false), + SkinInfoID = table.Column(type: "INTEGER", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_SkinFileInfo", x => x.ID); + table.ForeignKey( + name: "FK_SkinFileInfo_FileInfo_FileInfoID", + column: x => x.FileInfoID, + principalTable: "FileInfo", + principalColumn: "ID", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_SkinFileInfo_SkinInfo_SkinInfoID", + column: x => x.SkinInfoID, + principalTable: "SkinInfo", + principalColumn: "ID", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateIndex( + name: "IX_SkinFileInfo_FileInfoID", + table: "SkinFileInfo", + column: "FileInfoID"); + + migrationBuilder.CreateIndex( + name: "IX_SkinFileInfo_SkinInfoID", + table: "SkinFileInfo", + column: "SkinInfoID"); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "SkinFileInfo"); + + migrationBuilder.DropTable( + name: "SkinInfo"); + } + } +} diff --git a/osu.Game/Migrations/OsuDbContextModelSnapshot.cs b/osu.Game/Migrations/OsuDbContextModelSnapshot.cs index 157125102f..1627627790 100644 --- a/osu.Game/Migrations/OsuDbContextModelSnapshot.cs +++ b/osu.Game/Migrations/OsuDbContextModelSnapshot.cs @@ -281,6 +281,43 @@ namespace osu.Game.Migrations b.ToTable("RulesetInfo"); }); + modelBuilder.Entity("osu.Game.Skinning.SkinFileInfo", b => + { + b.Property("ID") + .ValueGeneratedOnAdd(); + + b.Property("FileInfoID"); + + b.Property("Filename") + .IsRequired(); + + b.Property("SkinInfoID"); + + b.HasKey("ID"); + + b.HasIndex("FileInfoID"); + + b.HasIndex("SkinInfoID"); + + b.ToTable("SkinFileInfo"); + }); + + modelBuilder.Entity("osu.Game.Skinning.SkinInfo", b => + { + b.Property("ID") + .ValueGeneratedOnAdd(); + + b.Property("Creator"); + + b.Property("DeletePending"); + + b.Property("Name"); + + b.HasKey("ID"); + + b.ToTable("SkinInfo"); + }); + modelBuilder.Entity("osu.Game.Beatmaps.BeatmapInfo", b => { b.HasOne("osu.Game.Beatmaps.BeatmapDifficulty", "BaseDifficulty") @@ -322,6 +359,19 @@ namespace osu.Game.Migrations .WithMany("BeatmapSets") .HasForeignKey("MetadataID"); }); + + modelBuilder.Entity("osu.Game.Skinning.SkinFileInfo", b => + { + b.HasOne("osu.Game.IO.FileInfo", "FileInfo") + .WithMany() + .HasForeignKey("FileInfoID") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("osu.Game.Skinning.SkinInfo") + .WithMany("Files") + .HasForeignKey("SkinInfoID") + .OnDelete(DeleteBehavior.Cascade); + }); #pragma warning restore 612, 618 } } diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index 4b1dad28db..829addc360 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -322,6 +322,10 @@ 20171209034410_AddRulesetInfoShortName.cs + + + 20180219060912_AddSkins.cs + From 659cf629b6d62e614bc5bc87eefcaf6075b78182 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 22 Feb 2018 15:44:25 +0900 Subject: [PATCH 138/544] Add skin seleciton dropdown to settings --- .../Overlays/Settings/Sections/SkinSection.cs | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/osu.Game/Overlays/Settings/Sections/SkinSection.cs b/osu.Game/Overlays/Settings/Sections/SkinSection.cs index f6915896d7..1cd1cd0f7f 100644 --- a/osu.Game/Overlays/Settings/Sections/SkinSection.cs +++ b/osu.Game/Overlays/Settings/Sections/SkinSection.cs @@ -1,26 +1,33 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using System.Collections.Generic; +using System.Linq; using osu.Framework.Allocation; using osu.Framework.Graphics; using osu.Game.Configuration; using osu.Game.Graphics; using osu.Game.Graphics.UserInterface; +using osu.Game.Skinning; using OpenTK; namespace osu.Game.Overlays.Settings.Sections { public class SkinSection : SettingsSection { + private SettingsDropdown skinDropdown; + public override string Header => "Skin"; + public override FontAwesome Icon => FontAwesome.fa_paint_brush; [BackgroundDependencyLoader] - private void load(OsuConfigManager config) + private void load(OsuConfigManager config, SkinManager skins) { FlowContent.Spacing = new Vector2(0, 5); Children = new Drawable[] { + skinDropdown = new SettingsDropdown(), new SettingsSlider { LabelText = "Menu cursor size", @@ -39,6 +46,14 @@ namespace osu.Game.Overlays.Settings.Sections Bindable = config.GetBindable(OsuSetting.AutoCursorSize) }, }; + + void reloadSkins() => skinDropdown.Items = skins.GetAllUsableSkins().Select(s => new KeyValuePair(s.Name, s)); + skins.ItemAdded += _ => reloadSkins(); + skins.ItemRemoved += _ => reloadSkins(); + + reloadSkins(); + + skinDropdown.Bindable = skins.CurrentSkinInfo; } private class SizeSlider : OsuSliderBar From 402d71a8d9677b08f61130b5c0b269925f3cc772 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 22 Feb 2018 16:29:05 +0900 Subject: [PATCH 139/544] Add user skin setting storage --- osu.Game/Configuration/OsuConfigManager.cs | 5 ++++- osu.Game/Database/ArchiveModelManager.cs | 2 +- osu.Game/OsuGame.cs | 11 +++++++++++ osu.Game/Overlays/Settings/Sections/SkinSection.cs | 8 ++++---- osu.Game/Skinning/SkinInfo.cs | 5 ++++- 5 files changed, 24 insertions(+), 7 deletions(-) diff --git a/osu.Game/Configuration/OsuConfigManager.cs b/osu.Game/Configuration/OsuConfigManager.cs index c33dd91330..3d927ef67c 100644 --- a/osu.Game/Configuration/OsuConfigManager.cs +++ b/osu.Game/Configuration/OsuConfigManager.cs @@ -14,6 +14,8 @@ namespace osu.Game.Configuration { // UI/selection defaults Set(OsuSetting.Ruleset, 0, 0, int.MaxValue); + Set(OsuSetting.Skin, 0, 0, int.MaxValue); + Set(OsuSetting.BeatmapDetailTab, BeatmapDetailTab.Details); Set(OsuSetting.ShowConvertedBeatmaps, true); @@ -122,6 +124,7 @@ namespace osu.Game.Configuration ChatDisplayHeight, Version, ShowConvertedBeatmaps, - SpeedChangeVisualisation + SpeedChangeVisualisation, + Skin } } diff --git a/osu.Game/Database/ArchiveModelManager.cs b/osu.Game/Database/ArchiveModelManager.cs index a65593ff82..854bee99a5 100644 --- a/osu.Game/Database/ArchiveModelManager.cs +++ b/osu.Game/Database/ArchiveModelManager.cs @@ -48,7 +48,7 @@ namespace osu.Game.Database protected readonly IDatabaseContextFactory ContextFactory; - protected readonly MutableDatabaseBackedStore ModelStore; + public readonly MutableDatabaseBackedStore ModelStore; // ReSharper disable once NotAccessedField.Local (we should keep a reference to this so it is not finalised) private ArchiveImportIPCChannel ipc; diff --git a/osu.Game/OsuGame.cs b/osu.Game/OsuGame.cs index 15ee62c5e5..17a72d3c87 100644 --- a/osu.Game/OsuGame.cs +++ b/osu.Game/OsuGame.cs @@ -30,6 +30,7 @@ using osu.Game.Rulesets; using osu.Game.Screens.Play; using osu.Game.Input.Bindings; using osu.Game.Rulesets.Mods; +using osu.Game.Skinning; using OpenTK.Graphics; namespace osu.Game @@ -79,6 +80,8 @@ namespace osu.Game private Bindable configRuleset; public Bindable Ruleset = new Bindable(); + private Bindable configSkin; + private readonly string[] args; private SettingsOverlay settings; @@ -122,10 +125,18 @@ namespace osu.Game dependencies.CacheAs(this); + // bind config int to database RulesetInfo configRuleset = LocalConfig.GetBindable(OsuSetting.Ruleset); Ruleset.Value = RulesetStore.GetRuleset(configRuleset.Value) ?? RulesetStore.AvailableRulesets.First(); Ruleset.ValueChanged += r => configRuleset.Value = r.ID ?? 0; + // bind config int to database SkinInfo + configSkin = LocalConfig.GetBindable(OsuSetting.Skin); + + SkinManager.CurrentSkinInfo.ValueChanged += s => configSkin.Value = s.ID; + configSkin.ValueChanged += id => SkinManager.CurrentSkinInfo.Value = SkinManager.ModelStore.ConsumableItems.FirstOrDefault(s => s.ID == id) ?? SkinInfo.Default; + configSkin.TriggerChange(); + LocalConfig.BindWith(OsuSetting.VolumeInactive, inactiveVolumeAdjust); } diff --git a/osu.Game/Overlays/Settings/Sections/SkinSection.cs b/osu.Game/Overlays/Settings/Sections/SkinSection.cs index 1cd1cd0f7f..bc0b8b4aaa 100644 --- a/osu.Game/Overlays/Settings/Sections/SkinSection.cs +++ b/osu.Game/Overlays/Settings/Sections/SkinSection.cs @@ -15,7 +15,7 @@ namespace osu.Game.Overlays.Settings.Sections { public class SkinSection : SettingsSection { - private SettingsDropdown skinDropdown; + private SettingsDropdown skinDropdown; public override string Header => "Skin"; @@ -27,7 +27,7 @@ namespace osu.Game.Overlays.Settings.Sections FlowContent.Spacing = new Vector2(0, 5); Children = new Drawable[] { - skinDropdown = new SettingsDropdown(), + skinDropdown = new SettingsDropdown(), new SettingsSlider { LabelText = "Menu cursor size", @@ -47,13 +47,13 @@ namespace osu.Game.Overlays.Settings.Sections }, }; - void reloadSkins() => skinDropdown.Items = skins.GetAllUsableSkins().Select(s => new KeyValuePair(s.Name, s)); + void reloadSkins() => skinDropdown.Items = skins.GetAllUsableSkins().Select(s => new KeyValuePair(s.Name, s.ID)); skins.ItemAdded += _ => reloadSkins(); skins.ItemRemoved += _ => reloadSkins(); reloadSkins(); - skinDropdown.Bindable = skins.CurrentSkinInfo; + skinDropdown.Bindable = config.GetBindable(OsuSetting.Skin); } private class SizeSlider : OsuSliderBar diff --git a/osu.Game/Skinning/SkinInfo.cs b/osu.Game/Skinning/SkinInfo.cs index ee9f63bec9..45c8b97f63 100644 --- a/osu.Game/Skinning/SkinInfo.cs +++ b/osu.Game/Skinning/SkinInfo.cs @@ -1,13 +1,14 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations.Schema; using osu.Game.Database; namespace osu.Game.Skinning { - public class SkinInfo : IHasFiles, IHasPrimaryKey, ISoftDelete + public class SkinInfo : IHasFiles, IEquatable, IHasPrimaryKey, ISoftDelete { [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int ID { get; set; } @@ -21,5 +22,7 @@ namespace osu.Game.Skinning public bool DeletePending { get; set; } public static SkinInfo Default { get; } = new SkinInfo { Name = "osu!lazer", Creator = "team osu!" }; + + public bool Equals(SkinInfo other) => other != null && ID == other.ID; } } From e9c583438761b00e2b0332c4198a53afe45df946 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Fri, 23 Feb 2018 13:22:33 +0900 Subject: [PATCH 140/544] Add query method for now --- osu.Game/Database/ArchiveModelManager.cs | 2 +- osu.Game/OsuGame.cs | 2 +- osu.Game/Skinning/SkinManager.cs | 10 ++++++++++ 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/osu.Game/Database/ArchiveModelManager.cs b/osu.Game/Database/ArchiveModelManager.cs index 854bee99a5..a65593ff82 100644 --- a/osu.Game/Database/ArchiveModelManager.cs +++ b/osu.Game/Database/ArchiveModelManager.cs @@ -48,7 +48,7 @@ namespace osu.Game.Database protected readonly IDatabaseContextFactory ContextFactory; - public readonly MutableDatabaseBackedStore ModelStore; + protected readonly MutableDatabaseBackedStore ModelStore; // ReSharper disable once NotAccessedField.Local (we should keep a reference to this so it is not finalised) private ArchiveImportIPCChannel ipc; diff --git a/osu.Game/OsuGame.cs b/osu.Game/OsuGame.cs index 17a72d3c87..95eb88c5c8 100644 --- a/osu.Game/OsuGame.cs +++ b/osu.Game/OsuGame.cs @@ -134,7 +134,7 @@ namespace osu.Game configSkin = LocalConfig.GetBindable(OsuSetting.Skin); SkinManager.CurrentSkinInfo.ValueChanged += s => configSkin.Value = s.ID; - configSkin.ValueChanged += id => SkinManager.CurrentSkinInfo.Value = SkinManager.ModelStore.ConsumableItems.FirstOrDefault(s => s.ID == id) ?? SkinInfo.Default; + configSkin.ValueChanged += id => SkinManager.CurrentSkinInfo.Value = SkinManager.Query(s => s.ID == id) ?? SkinInfo.Default; configSkin.TriggerChange(); LocalConfig.BindWith(OsuSetting.VolumeInactive, inactiveVolumeAdjust); diff --git a/osu.Game/Skinning/SkinManager.cs b/osu.Game/Skinning/SkinManager.cs index ac3347e1d0..0031968b2b 100644 --- a/osu.Game/Skinning/SkinManager.cs +++ b/osu.Game/Skinning/SkinManager.cs @@ -1,8 +1,11 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using System; using System.Collections.Generic; using System.Linq; +using System.Linq.Expressions; +using Microsoft.EntityFrameworkCore; using osu.Framework.Configuration; using osu.Framework.Platform; using osu.Game.Database; @@ -35,5 +38,12 @@ namespace osu.Game.Skinning : base(storage, contextFactory, new SkinStore(contextFactory, storage), importHost) { } + + /// + /// Perform a lookup query on available s. + /// + /// The query. + /// The first result for the provided query, or null if no results were found. + public SkinInfo Query(Expression> query) => ModelStore.ConsumableItems.AsNoTracking().FirstOrDefault(query); } } From 3726db53b5537a90adfb85b108fd35e2064d5b49 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 22 Feb 2018 17:16:48 +0900 Subject: [PATCH 141/544] Allow instantiation of skins --- osu.Game/OsuGameBase.cs | 4 +-- osu.Game/Skinning/DefaultSkin.cs | 17 +++++++++++ osu.Game/Skinning/LegacySkin.cs | 49 ++++++++++++++++++++++++++++++++ osu.Game/Skinning/Skin.cs | 22 ++++++++++++++ osu.Game/Skinning/SkinManager.cs | 34 ++++++++++++++++++++-- osu.Game/osu.Game.csproj | 5 +++- 6 files changed, 125 insertions(+), 6 deletions(-) create mode 100644 osu.Game/Skinning/DefaultSkin.cs create mode 100644 osu.Game/Skinning/LegacySkin.cs create mode 100644 osu.Game/Skinning/Skin.cs diff --git a/osu.Game/OsuGameBase.cs b/osu.Game/OsuGameBase.cs index 94ed696e49..f3c46269d5 100644 --- a/osu.Game/OsuGameBase.cs +++ b/osu.Game/OsuGameBase.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2007-2018 ppy Pty Ltd . +// Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using System; @@ -106,7 +106,7 @@ namespace osu.Game runMigrations(); - dependencies.Cache(SkinManager = new SkinManager(Host.Storage, contextFactory, Host)); + dependencies.Cache(SkinManager = new SkinManager(Host.Storage, contextFactory, Host, Audio)); dependencies.Cache(API = new APIAccess { diff --git a/osu.Game/Skinning/DefaultSkin.cs b/osu.Game/Skinning/DefaultSkin.cs new file mode 100644 index 0000000000..794ed58fca --- /dev/null +++ b/osu.Game/Skinning/DefaultSkin.cs @@ -0,0 +1,17 @@ +using osu.Framework.Audio.Sample; +using osu.Framework.Graphics; + +namespace osu.Game.Skinning +{ + public class DefaultSkin : Skin + { + public DefaultSkin() + : base(SkinInfo.Default) + { + } + + public override Drawable GetDrawableComponent(string componentName) => null; + + public override SampleChannel GetSample(string sampleName) => null; + } +} diff --git a/osu.Game/Skinning/LegacySkin.cs b/osu.Game/Skinning/LegacySkin.cs new file mode 100644 index 0000000000..1c56a64048 --- /dev/null +++ b/osu.Game/Skinning/LegacySkin.cs @@ -0,0 +1,49 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using System; +using System.IO; +using System.Linq; +using osu.Framework.Audio; +using osu.Framework.Audio.Sample; +using osu.Framework.Graphics; +using osu.Framework.Graphics.Sprites; +using osu.Framework.Graphics.Textures; +using osu.Framework.IO.Stores; + +namespace osu.Game.Skinning +{ + public class LegacySkin : Skin + { + private readonly TextureStore textures; + + private readonly SampleManager samples; + + public LegacySkin(SkinInfo skin, IResourceStore storage, AudioManager audioManager) + : base(skin) + { + var audioStore = new ResourceStore(storage); + + samples = audioManager.GetSampleManager(audioStore); + textures = new TextureStore(new RawTextureLoaderStore(storage)); + } + + private string getPathForFile(string filename) => + SkinInfo.Files.FirstOrDefault(f => string.Equals(Path.GetFileNameWithoutExtension(f.Filename), filename, StringComparison.InvariantCultureIgnoreCase))?.FileInfo.StoragePath; + + public override Drawable GetDrawableComponent(string componentName) + { + var texture = textures.Get(getPathForFile(componentName.Split('/').Last())); + if (texture == null) return null; + + return new Sprite + { + RelativeSizeAxes = Axes.Both, + FillMode = FillMode.Fit, + Texture = texture, + }; + } + + public override SampleChannel GetSample(string sampleName) => samples.Get(getPathForFile(sampleName.Split('/').Last())); + } +} diff --git a/osu.Game/Skinning/Skin.cs b/osu.Game/Skinning/Skin.cs new file mode 100644 index 0000000000..fafbdec8f0 --- /dev/null +++ b/osu.Game/Skinning/Skin.cs @@ -0,0 +1,22 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using osu.Framework.Audio.Sample; +using osu.Framework.Graphics; + +namespace osu.Game.Skinning +{ + public abstract class Skin + { + public readonly SkinInfo SkinInfo; + + public abstract Drawable GetDrawableComponent(string componentName); + + public abstract SampleChannel GetSample(string sampleName); + + protected Skin(SkinInfo skin) + { + SkinInfo = skin; + } + } +} diff --git a/osu.Game/Skinning/SkinManager.cs b/osu.Game/Skinning/SkinManager.cs index 0031968b2b..12e34ec0a0 100644 --- a/osu.Game/Skinning/SkinManager.cs +++ b/osu.Game/Skinning/SkinManager.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2007-2018 ppy Pty Ltd . +// Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using System; @@ -6,6 +6,7 @@ using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using Microsoft.EntityFrameworkCore; +using osu.Framework.Audio; using osu.Framework.Configuration; using osu.Framework.Platform; using osu.Game.Database; @@ -15,6 +16,9 @@ namespace osu.Game.Skinning { public class SkinManager : ArchiveModelManager { + private readonly AudioManager audio; + + public readonly Bindable CurrentSkin = new Bindable(new DefaultSkin()); public readonly Bindable CurrentSkinInfo = new Bindable(SkinInfo.Default) { Default = SkinInfo.Default }; public override string[] HandledExtensions => new[] { ".osk" }; @@ -30,13 +34,37 @@ namespace osu.Game.Skinning return userSkins; } - protected override SkinInfo CreateModel(ArchiveReader archive) => new SkinInfo { Name = archive.Name }; + protected override SkinInfo CreateModel(ArchiveReader archive) => new SkinInfo + { + Name = archive.Name + }; + + /// + /// Retrieve a instance for the provided + /// + /// The skin to lookup. + /// A instance correlating to the provided . + public Skin GetSkin(SkinInfo skinInfo) + { + if (skinInfo == SkinInfo.Default) + return new DefaultSkin(); + + return new LegacySkin(skinInfo, Files.Store, audio); + } private SkinStore store; - public SkinManager(Storage storage, DatabaseContextFactory contextFactory, IIpcHost importHost) + public SkinManager(Storage storage, DatabaseContextFactory contextFactory, IIpcHost importHost, AudioManager audio) : base(storage, contextFactory, new SkinStore(contextFactory, storage), importHost) { + this.audio = audio; + + CurrentSkinInfo.ValueChanged += info => { CurrentSkin.Value = GetSkin(info); }; + CurrentSkin.ValueChanged += skin => + { + if (skin.SkinInfo != CurrentSkinInfo.Value) + throw new InvalidOperationException($"Setting {nameof(CurrentSkin)}'s value directly is not supported. Use {nameof(CurrentSkinInfo)} isntead."); + }; } /// diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index 829addc360..dc5914a76f 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -1,4 +1,4 @@ - + @@ -854,6 +854,9 @@ + + + From 84b707f4f8edd74c5c5f372c181cfccf679a15f9 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 22 Feb 2018 17:33:47 +0900 Subject: [PATCH 142/544] Add basic hitcircle skinning --- .../Drawables/Pieces/ApproachCircle.cs | 12 +--- .../Objects/Drawables/Pieces/CirclePiece.cs | 27 +-------- .../Drawables/Pieces/DefaultCirclePiece.cs | 35 +++++++++++ .../Objects/Drawables/Pieces/GlowPiece.cs | 24 ++++---- .../Objects/Drawables/Pieces/NumberPiece.cs | 10 ++-- .../Objects/Drawables/Pieces/RingPiece.cs | 27 +++++---- .../osu.Game.Rulesets.Osu.csproj | 1 + osu.Game/Skinning/SkinnableDrawable.cs | 58 +++++++++++++++++++ osu.Game/osu.Game.csproj | 1 + 9 files changed, 129 insertions(+), 66 deletions(-) create mode 100644 osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/DefaultCirclePiece.cs create mode 100644 osu.Game/Skinning/SkinnableDrawable.cs diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/ApproachCircle.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/ApproachCircle.cs index 61e9027157..51f8b7026a 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/ApproachCircle.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/ApproachCircle.cs @@ -6,30 +6,24 @@ using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Sprites; using osu.Framework.Graphics.Textures; +using osu.Game.Skinning; namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces { public class ApproachCircle : Container { - private readonly Sprite approachCircle; - public ApproachCircle() { Anchor = Anchor.Centre; Origin = Anchor.Centre; - AutoSizeAxes = Axes.Both; - - Children = new Drawable[] - { - approachCircle = new Sprite() - }; + RelativeSizeAxes = Axes.Both; } [BackgroundDependencyLoader] private void load(TextureStore textures) { - approachCircle.Texture = textures.Get(@"Play/osu/approachcircle"); + Child = new SkinnableDrawable("Play/osu/approachcircle", name => new Sprite { Texture = textures.Get(name) }); } } } diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/CirclePiece.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/CirclePiece.cs index 286df14056..e7b6598cf2 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/CirclePiece.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/CirclePiece.cs @@ -2,20 +2,16 @@ // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using System; -using osu.Framework.Allocation; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; -using osu.Framework.Graphics.Sprites; -using osu.Framework.Graphics.Textures; using osu.Framework.Input.Bindings; +using osu.Game.Skinning; using OpenTK; namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces { public class CirclePiece : Container, IKeyBindingHandler { - private readonly Sprite disc; - public Func Hit; public CirclePiece() @@ -27,26 +23,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces Anchor = Anchor.Centre; Origin = Anchor.Centre; - Children = new Drawable[] - { - disc = new Sprite - { - Anchor = Anchor.Centre, - Origin = Anchor.Centre - }, - new TrianglesPiece - { - RelativeSizeAxes = Axes.Both, - Blending = BlendingMode.Additive, - Alpha = 0.5f, - } - }; - } - - [BackgroundDependencyLoader] - private void load(TextureStore textures) - { - disc.Texture = textures.Get(@"Play/osu/disc"); + InternalChild = new SkinnableDrawable("Play/osu/hitcircle", _ => new DefaultCirclePiece()); } public bool OnPressed(OsuAction action) diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/DefaultCirclePiece.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/DefaultCirclePiece.cs new file mode 100644 index 0000000000..61f73b6d66 --- /dev/null +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/DefaultCirclePiece.cs @@ -0,0 +1,35 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using osu.Framework.Allocation; +using osu.Framework.Graphics; +using osu.Framework.Graphics.Containers; +using osu.Framework.Graphics.Sprites; +using osu.Framework.Graphics.Textures; + +namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces +{ + public class DefaultCirclePiece : Container + { + [BackgroundDependencyLoader] + private void load(TextureStore textures) + { + RelativeSizeAxes = Axes.Both; + Children = new Drawable[] + { + new Sprite + { + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + Texture = textures.Get(@"Play/osu/disc"), + }, + new TrianglesPiece + { + RelativeSizeAxes = Axes.Both, + Blending = BlendingMode.Additive, + Alpha = 0.5f, + } + }; + } + } +} diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/GlowPiece.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/GlowPiece.cs index 9a1208f998..a4e1916659 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/GlowPiece.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/GlowPiece.cs @@ -6,34 +6,30 @@ using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Sprites; using osu.Framework.Graphics.Textures; +using osu.Game.Skinning; namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces { public class GlowPiece : Container { - private readonly Sprite layer; - public GlowPiece() { Anchor = Anchor.Centre; Origin = Anchor.Centre; - - Children = new[] - { - layer = new Sprite - { - Anchor = Anchor.Centre, - Origin = Anchor.Centre, - Blending = BlendingMode.Additive, - Alpha = 0.5f - } - }; + RelativeSizeAxes = Axes.Both; } [BackgroundDependencyLoader] private void load(TextureStore textures) { - layer.Texture = textures.Get(@"Play/osu/ring-glow"); + Child = new SkinnableDrawable("Play/osu/ring-glow", name => new Sprite + { + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + Texture = textures.Get(name), + Blending = BlendingMode.Additive, + Alpha = 0.5f + }, false); } } } diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/NumberPiece.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/NumberPiece.cs index afbf00f320..4220299c66 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/NumberPiece.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/NumberPiece.cs @@ -8,6 +8,7 @@ using osu.Framework.Graphics.Sprites; using osu.Game.Graphics.Sprites; using OpenTK.Graphics; using osu.Framework.Graphics.Shapes; +using osu.Game.Skinning; namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces { @@ -28,7 +29,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces Children = new Drawable[] { - new CircularContainer + new SkinnableDrawable("Play/osu/number-glow", name => new CircularContainer { Masking = true, Origin = Anchor.Centre, @@ -38,11 +39,8 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces Radius = 60, Colour = Color4.White.Opacity(0.5f), }, - Children = new[] - { - new Box() - } - }, + Child = new Box() + }, false), number = new OsuSpriteText { Text = @"1", diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/RingPiece.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/RingPiece.cs index 2347927f2e..12cc0dc5d9 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/RingPiece.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/RingPiece.cs @@ -6,6 +6,7 @@ using osu.Framework.Graphics.Containers; using OpenTK; using OpenTK.Graphics; using osu.Framework.Graphics.Shapes; +using osu.Game.Skinning; namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces { @@ -15,24 +16,26 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces { Size = new Vector2(128); - Masking = true; - CornerRadius = Size.X / 2; - Anchor = Anchor.Centre; Origin = Anchor.Centre; - BorderThickness = 10; - BorderColour = Color4.White; - - Children = new Drawable[] + InternalChild = new SkinnableDrawable("Play/osu/hitcircleoverlay", _ => new Container { - new Box + Masking = true, + CornerRadius = Size.X / 2, + BorderThickness = 10, + BorderColour = Color4.White, + RelativeSizeAxes = Axes.Both, + Children = new Drawable[] { - AlwaysPresent = true, - Alpha = 0, - RelativeSizeAxes = Axes.Both + new Box + { + AlwaysPresent = true, + Alpha = 0, + RelativeSizeAxes = Axes.Both + } } - }; + }); } } } diff --git a/osu.Game.Rulesets.Osu/osu.Game.Rulesets.Osu.csproj b/osu.Game.Rulesets.Osu/osu.Game.Rulesets.Osu.csproj index 7838fb7707..04903d11bf 100644 --- a/osu.Game.Rulesets.Osu/osu.Game.Rulesets.Osu.csproj +++ b/osu.Game.Rulesets.Osu/osu.Game.Rulesets.Osu.csproj @@ -92,6 +92,7 @@ + diff --git a/osu.Game/Skinning/SkinnableDrawable.cs b/osu.Game/Skinning/SkinnableDrawable.cs new file mode 100644 index 0000000000..7310d1e476 --- /dev/null +++ b/osu.Game/Skinning/SkinnableDrawable.cs @@ -0,0 +1,58 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using System; +using osu.Framework.Allocation; +using osu.Framework.Configuration; +using osu.Framework.Graphics; +using osu.Framework.Graphics.Containers; + +namespace osu.Game.Skinning +{ + public class SkinnableDrawable : SkinnableDrawable + { + public SkinnableDrawable(string name, Func defaultImplementation, bool fallback = true) + : base(name, defaultImplementation, fallback) + { + RelativeSizeAxes = Axes.Both; + } + } + + public class SkinnableDrawable : CompositeDrawable + where T : Drawable + { + private Bindable skin; + protected Func CreateDefault; + + public string ComponentName { get; set; } + + public readonly bool DefaultFallback; + + public SkinnableDrawable(string name, Func defaultImplementation, bool fallback = true) + { + DefaultFallback = fallback; + ComponentName = name; + CreateDefault = defaultImplementation; + } + + [BackgroundDependencyLoader] + private void load(SkinManager skinManager) + { + skin = skinManager.CurrentSkin.GetBoundCopy(); + skin.ValueChanged += updateComponent; + skin.TriggerChange(); + } + + private void updateComponent(Skin skin) + { + var drawable = skin.GetDrawableComponent(ComponentName); + if (drawable == null && (DefaultFallback || skin.SkinInfo == SkinInfo.Default)) + drawable = CreateDefault(ComponentName); + + if (drawable != null) + InternalChild = drawable; + else + ClearInternal(); + } + } +} diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index dc5914a76f..f61a2a8dc6 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -860,6 +860,7 @@ + From 6ceabfe19ebed5b433cc3ec9d15b439164826ca6 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 22 Feb 2018 17:34:35 +0900 Subject: [PATCH 143/544] Add basic hitsound skinning --- .../Audio/DrumSampleMapping.cs | 4 +-- osu.Game/Audio/SampleInfo.cs | 6 ++-- .../Objects/Drawables/DrawableHitObject.cs | 34 ++++++++++++------- 3 files changed, 27 insertions(+), 17 deletions(-) diff --git a/osu.Game.Rulesets.Taiko/Audio/DrumSampleMapping.cs b/osu.Game.Rulesets.Taiko/Audio/DrumSampleMapping.cs index 5493a5029b..85367b8bf6 100644 --- a/osu.Game.Rulesets.Taiko/Audio/DrumSampleMapping.cs +++ b/osu.Game.Rulesets.Taiko/Audio/DrumSampleMapping.cs @@ -29,8 +29,8 @@ namespace osu.Game.Rulesets.Taiko.Audio { mappings[s.Time] = new DrumSample { - Centre = s.GetSampleInfo().GetChannel(audio.Sample, "Taiko"), - Rim = s.GetSampleInfo(SampleInfo.HIT_CLAP).GetChannel(audio.Sample, "Taiko") + Centre = s.GetSampleInfo().GetChannel(audio.Sample.Get, "Taiko"), + Rim = s.GetSampleInfo(SampleInfo.HIT_CLAP).GetChannel(audio.Sample.Get, "Taiko") }; } } diff --git a/osu.Game/Audio/SampleInfo.cs b/osu.Game/Audio/SampleInfo.cs index e6f4a0b8d1..99d2da7ebc 100644 --- a/osu.Game/Audio/SampleInfo.cs +++ b/osu.Game/Audio/SampleInfo.cs @@ -14,16 +14,16 @@ namespace osu.Game.Audio public const string HIT_NORMAL = @"hitnormal"; public const string HIT_CLAP = @"hitclap"; - public SampleChannel GetChannel(SampleManager manager, string resourceNamespace = null) + public SampleChannel GetChannel(Func getChannel, string resourceNamespace = null) { SampleChannel channel = null; if (resourceNamespace != null) - channel = manager.Get($"Gameplay/{resourceNamespace}/{Bank}-{Name}"); + channel = getChannel($"Gameplay/{resourceNamespace}/{Bank}-{Name}"); // try without namespace as a fallback. if (channel == null) - channel = manager.Get($"Gameplay/{Bank}-{Name}"); + channel = getChannel($"Gameplay/{Bank}-{Name}"); if (channel != null) channel.Volume.Value = Volume / 100.0; diff --git a/osu.Game/Rulesets/Objects/Drawables/DrawableHitObject.cs b/osu.Game/Rulesets/Objects/Drawables/DrawableHitObject.cs index 2db02724ed..2ecdccc31f 100644 --- a/osu.Game/Rulesets/Objects/Drawables/DrawableHitObject.cs +++ b/osu.Game/Rulesets/Objects/Drawables/DrawableHitObject.cs @@ -17,6 +17,7 @@ using osu.Framework.Configuration; using OpenTK; using osu.Framework.Graphics.Primitives; using osu.Game.Rulesets.Scoring; +using osu.Game.Skinning; namespace osu.Game.Rulesets.Objects.Drawables { @@ -82,8 +83,10 @@ namespace osu.Game.Rulesets.Objects.Drawables HitObject = hitObject; } + private readonly Bindable skin = new Bindable(); + [BackgroundDependencyLoader] - private void load(AudioManager audio) + private void load(AudioManager audio, SkinManager skins) { var samples = GetSamples(); if (samples.Any()) @@ -91,23 +94,30 @@ namespace osu.Game.Rulesets.Objects.Drawables if (HitObject.SampleControlPoint == null) throw new ArgumentNullException(nameof(HitObject.SampleControlPoint), $"{nameof(HitObject)}s must always have an attached {nameof(HitObject.SampleControlPoint)}." + $" This is an indication that {nameof(HitObject.ApplyDefaults)} has not been invoked on {this}."); - - foreach (SampleInfo s in samples) + void loadSamples(Skin skin) { - SampleInfo localSampleInfo = new SampleInfo + Samples.Clear(); + + foreach (SampleInfo s in samples) { - Bank = s.Bank ?? HitObject.SampleControlPoint.SampleBank, - Name = s.Name, - Volume = s.Volume > 0 ? s.Volume : HitObject.SampleControlPoint.SampleVolume - }; + SampleInfo localSampleInfo = new SampleInfo + { + Bank = s.Bank ?? HitObject.SampleControlPoint.SampleBank, + Name = s.Name, + Volume = s.Volume > 0 ? s.Volume : HitObject.SampleControlPoint.SampleVolume + }; - SampleChannel channel = localSampleInfo.GetChannel(audio.Sample, SampleNamespace); - if (channel == null) - continue; + SampleChannel channel = localSampleInfo.GetChannel(skin.GetSample, SampleNamespace) ?? localSampleInfo.GetChannel(audio.Sample.Get, SampleNamespace); - Samples.Add(channel); + if (channel == null) return; + + Samples.Add(channel); + } } + + skin.ValueChanged += loadSamples; + skin.BindTo(skins.CurrentSkin); } } From 92d20eea8cb5d2cc7165847ba71891579f91ffc9 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Fri, 23 Feb 2018 12:35:25 +0900 Subject: [PATCH 144/544] Add missing licence header --- osu.Game/Skinning/DefaultSkin.cs | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/osu.Game/Skinning/DefaultSkin.cs b/osu.Game/Skinning/DefaultSkin.cs index 794ed58fca..e40a43d400 100644 --- a/osu.Game/Skinning/DefaultSkin.cs +++ b/osu.Game/Skinning/DefaultSkin.cs @@ -1,4 +1,7 @@ -using osu.Framework.Audio.Sample; +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using osu.Framework.Audio.Sample; using osu.Framework.Graphics; namespace osu.Game.Skinning @@ -10,8 +13,14 @@ namespace osu.Game.Skinning { } - public override Drawable GetDrawableComponent(string componentName) => null; + public override Drawable GetDrawableComponent(string componentName) + { + return null; + } - public override SampleChannel GetSample(string sampleName) => null; + public override SampleChannel GetSample(string sampleName) + { + return null; + } } } From f81eb2de65cf6f162e69836b1a0c0ccca0584f9a Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Fri, 23 Feb 2018 14:24:32 +0900 Subject: [PATCH 145/544] Remove unnecessary local store --- osu.Game/Skinning/LegacySkin.cs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/osu.Game/Skinning/LegacySkin.cs b/osu.Game/Skinning/LegacySkin.cs index 1c56a64048..5f34ddc2b5 100644 --- a/osu.Game/Skinning/LegacySkin.cs +++ b/osu.Game/Skinning/LegacySkin.cs @@ -22,9 +22,7 @@ namespace osu.Game.Skinning public LegacySkin(SkinInfo skin, IResourceStore storage, AudioManager audioManager) : base(skin) { - var audioStore = new ResourceStore(storage); - - samples = audioManager.GetSampleManager(audioStore); + samples = audioManager.GetSampleManager(storage); textures = new TextureStore(new RawTextureLoaderStore(storage)); } From ff75cf6b7596b6d5f5cd5c0ae9103a922a51cc07 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Fri, 23 Feb 2018 14:27:39 +0900 Subject: [PATCH 146/544] Remove unnecessary braces --- osu.Game/Skinning/SkinManager.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/osu.Game/Skinning/SkinManager.cs b/osu.Game/Skinning/SkinManager.cs index 12e34ec0a0..7235ccc46e 100644 --- a/osu.Game/Skinning/SkinManager.cs +++ b/osu.Game/Skinning/SkinManager.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2007-2018 ppy Pty Ltd . +// Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using System; @@ -59,7 +59,7 @@ namespace osu.Game.Skinning { this.audio = audio; - CurrentSkinInfo.ValueChanged += info => { CurrentSkin.Value = GetSkin(info); }; + CurrentSkinInfo.ValueChanged += info => CurrentSkin.Value = GetSkin(info); CurrentSkin.ValueChanged += skin => { if (skin.SkinInfo != CurrentSkinInfo.Value) From 0e20c4e6bbbe71d2582080588c0718f0532f0d12 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Fri, 23 Feb 2018 14:27:53 +0900 Subject: [PATCH 147/544] Fix typo --- osu.Game/Skinning/SkinManager.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game/Skinning/SkinManager.cs b/osu.Game/Skinning/SkinManager.cs index 7235ccc46e..88d51eca10 100644 --- a/osu.Game/Skinning/SkinManager.cs +++ b/osu.Game/Skinning/SkinManager.cs @@ -63,7 +63,7 @@ namespace osu.Game.Skinning CurrentSkin.ValueChanged += skin => { if (skin.SkinInfo != CurrentSkinInfo.Value) - throw new InvalidOperationException($"Setting {nameof(CurrentSkin)}'s value directly is not supported. Use {nameof(CurrentSkinInfo)} isntead."); + throw new InvalidOperationException($"Setting {nameof(CurrentSkin)}'s value directly is not supported. Use {nameof(CurrentSkinInfo)} instead."); }; } From a36986ef5af94df2f50ed2232e44a71484fe1165 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Fri, 23 Feb 2018 14:28:57 +0900 Subject: [PATCH 148/544] Make ComponentName readonly --- osu.Game/Skinning/SkinnableDrawable.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game/Skinning/SkinnableDrawable.cs b/osu.Game/Skinning/SkinnableDrawable.cs index 7310d1e476..c1c78fdb05 100644 --- a/osu.Game/Skinning/SkinnableDrawable.cs +++ b/osu.Game/Skinning/SkinnableDrawable.cs @@ -24,7 +24,7 @@ namespace osu.Game.Skinning private Bindable skin; protected Func CreateDefault; - public string ComponentName { get; set; } + public readonly string ComponentName; public readonly bool DefaultFallback; From 3fdb6845da70be4047b821fe7a2e5e2a81bfb16a Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Fri, 23 Feb 2018 14:40:25 +0900 Subject: [PATCH 149/544] Revert unneeded change This was already correct as per osu-stable. --- osu.Game.Rulesets.Taiko/Replays/TaikoAutoGenerator.cs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/osu.Game.Rulesets.Taiko/Replays/TaikoAutoGenerator.cs b/osu.Game.Rulesets.Taiko/Replays/TaikoAutoGenerator.cs index 4c0eafe25c..cb45ce2dce 100644 --- a/osu.Game.Rulesets.Taiko/Replays/TaikoAutoGenerator.cs +++ b/osu.Game.Rulesets.Taiko/Replays/TaikoAutoGenerator.cs @@ -63,16 +63,16 @@ namespace osu.Game.Rulesets.Taiko.Replays { default: case 0: - button = ReplayButtonState.Right1; - break; - case 1: button = ReplayButtonState.Left1; break; + case 1: + button = ReplayButtonState.Right1; + break; case 2: - button = ReplayButtonState.Right2; + button = ReplayButtonState.Left2; break; case 3: - button = ReplayButtonState.Left2; + button = ReplayButtonState.Right2; break; } From d72290ee241cbcadab934c4c0960255aabcfda7b Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Fri, 23 Feb 2018 15:06:08 +0900 Subject: [PATCH 150/544] Make ScaledContainer private --- osu.Game/Rulesets/UI/ScalableContainer.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game/Rulesets/UI/ScalableContainer.cs b/osu.Game/Rulesets/UI/ScalableContainer.cs index 43ed770f77..9762828e7d 100644 --- a/osu.Game/Rulesets/UI/ScalableContainer.cs +++ b/osu.Game/Rulesets/UI/ScalableContainer.cs @@ -40,7 +40,7 @@ namespace osu.Game.Rulesets.UI }); } - public class ScaledContainer : Container + private class ScaledContainer : Container { /// /// The value to scale the width of the content to match. From 278b25bcbd6568c6da03e0c25934d089a928bd63 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Fri, 23 Feb 2018 15:29:56 +0900 Subject: [PATCH 151/544] Fix border being the wrong size --- osu.Game/Rulesets/Edit/HitObjectComposer.cs | 45 +++++++++----------- osu.Game/Rulesets/Edit/Layers/BorderLayer.cs | 38 +++++++++++++++++ osu.Game/osu.Game.csproj | 1 + 3 files changed, 59 insertions(+), 25 deletions(-) create mode 100644 osu.Game/Rulesets/Edit/Layers/BorderLayer.cs diff --git a/osu.Game/Rulesets/Edit/HitObjectComposer.cs b/osu.Game/Rulesets/Edit/HitObjectComposer.cs index 2a799a460f..e6a51cc39b 100644 --- a/osu.Game/Rulesets/Edit/HitObjectComposer.cs +++ b/osu.Game/Rulesets/Edit/HitObjectComposer.cs @@ -4,14 +4,13 @@ using System; using System.Collections.Generic; using System.Linq; -using OpenTK.Graphics; using osu.Framework.Allocation; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; -using osu.Framework.Graphics.Shapes; using osu.Framework.Logging; using osu.Framework.Timing; using osu.Game.Beatmaps; +using osu.Game.Rulesets.Edit.Layers; using osu.Game.Rulesets.Edit.Layers.Selection; using osu.Game.Rulesets.Edit.Tools; using osu.Game.Rulesets.UI; @@ -50,17 +49,26 @@ namespace osu.Game.Rulesets.Edit return; } - ScalableContainer createLayerContainerWithContent(params Drawable[] content) - { - var container = CreateLayerContainer(); - container.Children = content; - layerContainers.Add(container); - return container; - } - HitObjectOverlayLayer hitObjectOverlayLayer = CreateHitObjectOverlayLayer(); SelectionLayer selectionLayer = new SelectionLayer(rulesetContainer.Playfield); + var layerBelowRuleset = new BorderLayer + { + RelativeSizeAxes = Axes.Both, + Child = CreateLayerContainer() + }; + + var layerAboveRuleset = CreateLayerContainer(); + layerAboveRuleset.Children = new Drawable[] + { + selectionLayer, // Below object overlays for input + hitObjectOverlayLayer, + selectionLayer.CreateProxy() // Proxy above object overlays for selections + }; + + layerContainers.Add(layerBelowRuleset); + layerContainers.Add(layerAboveRuleset); + RadioButtonCollection toolboxCollection; InternalChild = new GridContainer { @@ -85,22 +93,9 @@ namespace osu.Game.Rulesets.Edit RelativeSizeAxes = Axes.Both, Children = new Drawable[] { - createLayerContainerWithContent(new Container - { - Name = "Border", - RelativeSizeAxes = Axes.Both, - Masking = true, - BorderColour = Color4.White, - BorderThickness = 2, - Child = new Box { RelativeSizeAxes = Axes.Both, Alpha = 0, AlwaysPresent = true } - }), + layerBelowRuleset, rulesetContainer, - createLayerContainerWithContent - ( - selectionLayer, // Below object overlays for input - hitObjectOverlayLayer, - selectionLayer.CreateProxy() // Proxy above object overlays for selections - ) + layerAboveRuleset } } }, diff --git a/osu.Game/Rulesets/Edit/Layers/BorderLayer.cs b/osu.Game/Rulesets/Edit/Layers/BorderLayer.cs new file mode 100644 index 0000000000..54c30b8d89 --- /dev/null +++ b/osu.Game/Rulesets/Edit/Layers/BorderLayer.cs @@ -0,0 +1,38 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using osu.Framework.Graphics; +using osu.Framework.Graphics.Containers; +using osu.Framework.Graphics.Shapes; +using OpenTK.Graphics; + +namespace osu.Game.Rulesets.Edit.Layers +{ + public class BorderLayer : Container + { + protected override Container Content => content; + private readonly Container content; + + public BorderLayer() + { + InternalChildren = new Drawable[] + { + new Container + { + Name = "Border", + RelativeSizeAxes = Axes.Both, + Masking = true, + BorderColour = Color4.White, + BorderThickness = 2, + Child = new Box + { + RelativeSizeAxes = Axes.Both, + Alpha = 0, + AlwaysPresent = true + } + }, + content = new Container { RelativeSizeAxes = Axes.Both } + }; + } + } +} diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index 5bd279d2a8..2fe059cb84 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -348,6 +348,7 @@ + From 08bb25347c8746736dd81b299cc18d9d58272011 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Fri, 23 Feb 2018 20:27:05 +0900 Subject: [PATCH 152/544] Make DrawableSlider contain the slider body --- .../Objects/Drawables/DrawableRepeatPoint.cs | 2 +- .../Objects/Drawables/DrawableSlider.cs | 19 +- .../Objects/Drawables/DrawableSliderTail.cs | 6 +- .../Objects/Drawables/Pieces/SliderBody.cs | 37 +++- osu.Game.Rulesets.Osu/Objects/Slider.cs | 14 +- .../Tests/TestCaseNewSliderBody.cs | 171 ++++++++++++++++++ .../osu.Game.Rulesets.Osu.csproj | 1 + 7 files changed, 232 insertions(+), 18 deletions(-) create mode 100644 osu.Game.Rulesets.Osu/Tests/TestCaseNewSliderBody.cs diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableRepeatPoint.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableRepeatPoint.cs index db704b0553..3e1b64bb86 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableRepeatPoint.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableRepeatPoint.cs @@ -79,7 +79,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables List curve = drawableSlider.Body.CurrentCurve; var positionOnCurve = isRepeatAtEnd ? end : start; - Position = positionOnCurve + drawableSlider.HitObject.StackOffset; + Position = positionOnCurve - curve[0] + drawableSlider.HitObject.StackOffset; if (curve.Count < 2) return; diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs index 391e0ff023..866631468a 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs @@ -30,6 +30,8 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables { slider = s; + Position = s.StackedPosition; + DrawableSliderTail tail; Container ticks; Container repeatPoints; @@ -39,20 +41,20 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables Body = new SliderBody(s) { AccentColour = AccentColour, - Position = s.StackedPosition, PathWidth = s.Scale * 64, }, - ticks = new Container(), - repeatPoints = new Container(), + ticks = new Container { RelativeSizeAxes = Axes.Both }, + repeatPoints = new Container { RelativeSizeAxes = Axes.Both }, Ball = new SliderBall(s) { + BypassAutoSizeAxes = Axes.Both, Scale = new Vector2(s.Scale), AccentColour = AccentColour, AlwaysPresent = true, Alpha = 0 }, - HeadCircle = new DrawableHitCircle(s.HeadCircle), - tail = new DrawableSliderTail(s.TailCircle) + HeadCircle = new DrawableHitCircle(s.HeadCircle) { Position = s.HeadCircle.StackedPosition }, + tail = new DrawableSliderTail(s.TailCircle) { Position = s.TailCircle.StackedPosition } }; components.Add(Body); @@ -112,6 +114,13 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables foreach (var c in components.OfType()) c.UpdateProgress(completionProgress); foreach (var c in components.OfType()) c.UpdateSnakingPosition(slider.Curve.PositionAt(Body.SnakedStart ?? 0), slider.Curve.PositionAt(Body.SnakedEnd ?? 0)); foreach (var t in components.OfType()) t.Tracking = Ball.Tracking; + + Size = Body.Size; + OriginPosition = Body.PathOffset; + + foreach (var obj in NestedHitObjects) + obj.RelativeAnchorPosition = Vector2.Divide(OriginPosition, Body.DrawSize); + Ball.RelativeAnchorPosition = Vector2.Divide(OriginPosition, Body.DrawSize); } protected override void CheckForJudgements(bool userTriggered, double timeOffset) diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSliderTail.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSliderTail.cs index 8835fc2b29..b907aea8c3 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSliderTail.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSliderTail.cs @@ -19,8 +19,12 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables public DrawableSliderTail(HitCircle hitCircle) : base(hitCircle) { - AlwaysPresent = true; + Origin = Anchor.Centre; + RelativeSizeAxes = Axes.Both; + FillMode = FillMode.Fit; + + AlwaysPresent = true; } protected override void CheckForJudgements(bool userTriggered, double timeOffset) diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/SliderBody.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/SliderBody.cs index a83ee3a2e1..8c0eb7ff7d 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/SliderBody.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/SliderBody.cs @@ -29,6 +29,13 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces set { path.PathWidth = value; } } + /// + /// Offset in absolute coordinates from the start of the curve. + /// + public Vector2 PathOffset { get; private set; } + + public readonly List CurrentCurve = new List(); + public readonly Bindable SnakingIn = new Bindable(); public readonly Bindable SnakingOut = new Bindable(); @@ -75,6 +82,8 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces private int textureWidth => (int)PathWidth * 2; + private Vector2 topLeftOffset; + private readonly Slider slider; public SliderBody(Slider s) { @@ -84,6 +93,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces { container = new BufferedContainer { + RelativeSizeAxes = Axes.Both, CacheDrawnFrameBuffer = true, Children = new Drawable[] { @@ -107,11 +117,11 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces if (updateSnaking(p0, p1)) { - // Autosizing does not give us the desired behaviour here. - // We want the container to have the same size as the slider, - // and to be positioned such that the slider head is at (0,0). - container.Size = path.Size; - container.Position = -path.PositionInBoundingBox(slider.Curve.PositionAt(0) - CurrentCurve[0]); + // The path is generated such that its size encloses it. This change of size causes the path + // to move around while snaking, so we need to offset it to make sure it maintains the + // same position as when it is fully snaked. + var newTopLeftOffset = path.PositionInBoundingBox(Vector2.Zero); + path.Position = topLeftOffset - newTopLeftOffset; container.ForceRedraw(); } @@ -121,6 +131,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces private void load() { reloadTexture(); + computeSize(); } private void reloadTexture() @@ -164,7 +175,19 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces path.Texture = texture; } - public readonly List CurrentCurve = new List(); + private void computeSize() + { + // Generate the entire curve + slider.Curve.GetPathToProgress(CurrentCurve, 0, 1); + foreach (Vector2 p in CurrentCurve) + path.AddVertex(p); + + Size = path.Size; + + topLeftOffset = path.PositionInBoundingBox(Vector2.Zero); + PathOffset = path.PositionInBoundingBox(CurrentCurve[0]); + } + private bool updateSnaking(double p0, double p1) { if (SnakedStart == p0 && SnakedEnd == p1) return false; @@ -176,7 +199,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces path.ClearVertices(); foreach (Vector2 p in CurrentCurve) - path.AddVertex(p - CurrentCurve[0]); + path.AddVertex(p); return true; } diff --git a/osu.Game.Rulesets.Osu/Objects/Slider.cs b/osu.Game.Rulesets.Osu/Objects/Slider.cs index ce6c88a340..4905972e6f 100644 --- a/osu.Game.Rulesets.Osu/Objects/Slider.cs +++ b/osu.Game.Rulesets.Osu/Objects/Slider.cs @@ -99,7 +99,7 @@ namespace osu.Game.Rulesets.Osu.Objects HeadCircle = new HitCircle { StartTime = StartTime, - Position = StackedPosition, + Position = this.PositionAt(0), IndexInCurrentCombo = IndexInCurrentCombo, ComboColour = ComboColour, Samples = Samples, @@ -109,7 +109,7 @@ namespace osu.Game.Rulesets.Osu.Objects TailCircle = new HitCircle { StartTime = EndTime, - Position = StackedEndPosition, + Position = this.PositionAt(1), IndexInCurrentCombo = IndexInCurrentCombo, ComboColour = ComboColour }; @@ -156,7 +156,7 @@ namespace osu.Game.Rulesets.Osu.Objects SpanIndex = span, SpanStartTime = spanStartTime, StartTime = spanStartTime + timeProgress * SpanDuration, - Position = Curve.PositionAt(distanceProgress), + Position = Curve.PositionAt(distanceProgress) - Curve.PositionAt(0), StackHeight = StackHeight, Scale = Scale, ComboColour = ComboColour, @@ -175,7 +175,7 @@ namespace osu.Game.Rulesets.Osu.Objects RepeatIndex = repeatIndex, SpanDuration = SpanDuration, StartTime = StartTime + repeat * SpanDuration, - Position = Curve.PositionAt(repeat % 2), + Position = Curve.PositionAt(repeat % 2) - Curve.PositionAt(0), StackHeight = StackHeight, Scale = Scale, ComboColour = ComboColour, @@ -184,4 +184,10 @@ namespace osu.Game.Rulesets.Osu.Objects } } } + + public static class SliderExtensions + { + public static Vector2 PositionAt(this Slider slider, double progress) + => ((IHasCurve)slider).PositionAt(progress) - slider.Curve.PositionAt(0); + } } diff --git a/osu.Game.Rulesets.Osu/Tests/TestCaseNewSliderBody.cs b/osu.Game.Rulesets.Osu/Tests/TestCaseNewSliderBody.cs new file mode 100644 index 0000000000..a23bfb11ca --- /dev/null +++ b/osu.Game.Rulesets.Osu/Tests/TestCaseNewSliderBody.cs @@ -0,0 +1,171 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using System; +using System.Collections.Generic; +using osu.Framework.Allocation; +using osu.Framework.Graphics; +using osu.Framework.Graphics.Containers; +using osu.Framework.Graphics.Lines; +using osu.Framework.Graphics.OpenGL.Textures; +using osu.Framework.Graphics.Textures; +using osu.Game.Rulesets.Objects; +using osu.Game.Rulesets.Objects.Types; +using osu.Game.Tests.Visual; +using OpenTK; +using OpenTK.Graphics; + +namespace osu.Game.Rulesets.Osu.Tests +{ + public class TestCaseNewSliderBody : OsuTestCase + { + public override IReadOnlyList RequiredTypes => new[] { typeof(Path) }; + + private readonly NewSliderBody body; + + public TestCaseNewSliderBody() + { + Add(body = new NewSliderBody(new SliderCurve + { + ControlPoints = new List + { + new Vector2(-200, 0), + new Vector2(-50, 75), + new Vector2(0, 100), + new Vector2(100, -200), + new Vector2(230, 0) + }, + Distance = 480, + CurveType = CurveType.Bezier + }) + { + Anchor = Anchor.Centre, + Origin = Anchor.Centre + }); + + AddSliderStep("In", 0f, 1f, 0f, v => inLength = v); + AddSliderStep("Out", 0f, 1f, 1f, v => outLength = v); + AddSliderStep("Path Width", 0f, 100f, 10f, v => body.PathWidth = v); + } + + private float _inLength; + + private float inLength + { + set + { + _inLength = value; + body.UpdateSnaking(_inLength, _outLength); + } + } + + private float _outLength; + + private float outLength + { + set + { + _outLength = value; + body.UpdateSnaking(_inLength, _outLength); + } + } + + private class NewSliderBody : CompositeDrawable + { + private readonly Path path; + private readonly SliderCurve curve; + + public NewSliderBody(SliderCurve curve) + { + this.curve = curve; + + InternalChild = path = new Path(); + } + + [BackgroundDependencyLoader] + private void load() + { + reloadTexture(); + computeSize(); + } + + public float PathWidth + { + get => path.PathWidth; + set { path.PathWidth = value; reloadTexture(); } + } + + private void reloadTexture() + { + var textureWidth = (int)PathWidth * 2; + + //initialise background + var texture = new Texture(textureWidth, 1); + var upload = new TextureUpload(textureWidth * 4); + var bytes = upload.Data; + + const float aa_portion = 0.02f; + const float border_portion = 0.128f; + const float gradient_portion = 1 - border_portion; + + const float opacity_at_centre = 0.3f; + const float opacity_at_edge = 0.8f; + + for (int i = 0; i < textureWidth; i++) + { + float progress = (float)i / (textureWidth - 1); + + if (progress <= border_portion) + { + bytes[i * 4] = (byte)(Color4.White.R * 255); + bytes[i * 4 + 1] = (byte)(Color4.White.G * 255); + bytes[i * 4 + 2] = (byte)(Color4.White.B * 255); + bytes[i * 4 + 3] = (byte)(Math.Min(progress / aa_portion, 1) * (Color4.White.A * 255)); + } + else + { + progress -= border_portion; + + bytes[i * 4] = (byte)(Color4.Blue.R * 255); + bytes[i * 4 + 1] = (byte)(Color4.Blue.G * 255); + bytes[i * 4 + 2] = (byte)(Color4.Blue.B * 255); + bytes[i * 4 + 3] = (byte)((opacity_at_edge - (opacity_at_edge - opacity_at_centre) * progress / gradient_portion) * (Color4.Blue.A * 255)); + } + } + + texture.SetData(upload); + path.Texture = texture; + } + + private Vector2 topLeftOffset; + + private void computeSize() + { + // Compute the final size + var fullPath = new List(); + curve.GetPathToProgress(fullPath, 0, 1); + + foreach (Vector2 p in fullPath) + path.AddVertex(p); + + Size = path.Size; + + topLeftOffset = path.PositionInBoundingBox(Vector2.Zero); + OriginPosition = path.PositionInBoundingBox(fullPath[0]); + } + + public void UpdateSnaking(float t0, float t1) + { + var curvePath = new List(); + curve.GetPathToProgress(curvePath, t0, t1); + + path.ClearVertices(); + foreach (Vector2 p in curvePath) + path.AddVertex(p); + + var newTopLeftOffset = path.PositionInBoundingBox(Vector2.Zero); + path.Position = topLeftOffset - newTopLeftOffset; + } + } + } +} diff --git a/osu.Game.Rulesets.Osu/osu.Game.Rulesets.Osu.csproj b/osu.Game.Rulesets.Osu/osu.Game.Rulesets.Osu.csproj index 7838fb7707..53075728ad 100644 --- a/osu.Game.Rulesets.Osu/osu.Game.Rulesets.Osu.csproj +++ b/osu.Game.Rulesets.Osu/osu.Game.Rulesets.Osu.csproj @@ -124,6 +124,7 @@ + From 8c90abe0dc826bdc3487cfc2a064dd6348000a87 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Fri, 23 Feb 2018 20:51:26 +0900 Subject: [PATCH 153/544] Make slider control points relative to start position --- .../Objects/Drawables/DrawableRepeatPoint.cs | 7 +++---- .../Objects/Drawables/DrawableSlider.cs | 17 ++++++----------- .../Objects/Drawables/Pieces/SliderBall.cs | 3 ++- osu.Game.Rulesets.Osu/Objects/Slider.cs | 18 ++++++------------ .../Objects/Legacy/ConvertHitObjectParser.cs | 8 +++++--- 5 files changed, 22 insertions(+), 31 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableRepeatPoint.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableRepeatPoint.cs index 3e1b64bb86..79a4714e33 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableRepeatPoint.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableRepeatPoint.cs @@ -78,8 +78,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables bool isRepeatAtEnd = repeatPoint.RepeatIndex % 2 == 0; List curve = drawableSlider.Body.CurrentCurve; - var positionOnCurve = isRepeatAtEnd ? end : start; - Position = positionOnCurve - curve[0] + drawableSlider.HitObject.StackOffset; + Position = isRepeatAtEnd ? end : start; if (curve.Count < 2) return; @@ -90,10 +89,10 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables // find the next vector2 in the curve which is not equal to our current position to infer a rotation. for (int i = searchStart; i >= 0 && i < curve.Count; i += direction) { - if (curve[i] == positionOnCurve) + if (curve[i] == Position) continue; - Rotation = MathHelper.RadiansToDegrees((float)Math.Atan2(curve[i].Y - positionOnCurve.Y, curve[i].X - positionOnCurve.X)); + Rotation = MathHelper.RadiansToDegrees((float)Math.Atan2(curve[i].Y - Position.Y, curve[i].X - Position.X)); break; } } diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs index 866631468a..c2f3d4a314 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs @@ -12,6 +12,7 @@ using osu.Framework.Graphics.Containers; using osu.Game.Rulesets.Osu.Judgements; using osu.Framework.Graphics.Primitives; using osu.Game.Configuration; +using osu.Game.Rulesets.Objects.Types; using osu.Game.Rulesets.Scoring; namespace osu.Game.Rulesets.Osu.Objects.Drawables @@ -53,8 +54,8 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables AlwaysPresent = true, Alpha = 0 }, - HeadCircle = new DrawableHitCircle(s.HeadCircle) { Position = s.HeadCircle.StackedPosition }, - tail = new DrawableSliderTail(s.TailCircle) { Position = s.TailCircle.StackedPosition } + HeadCircle = new DrawableHitCircle(s.HeadCircle) { Position = s.HeadCircle.Position - s.Position }, + tail = new DrawableSliderTail(s.TailCircle) { Position = s.TailCircle.Position - s.Position } }; components.Add(Body); @@ -67,10 +68,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables foreach (var tick in s.NestedHitObjects.OfType()) { - var drawableTick = new DrawableSliderTick(tick) - { - Position = tick.StackedPosition - }; + var drawableTick = new DrawableSliderTick(tick) { Position = tick.Position - s.Position }; ticks.Add(drawableTick); components.Add(drawableTick); @@ -79,10 +77,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables foreach (var repeatPoint in s.NestedHitObjects.OfType()) { - var drawableRepeatPoint = new DrawableRepeatPoint(repeatPoint, this) - { - Position = repeatPoint.StackedPosition - }; + var drawableRepeatPoint = new DrawableRepeatPoint(repeatPoint, this) { Position = repeatPoint.Position - s.Position }; repeatPoints.Add(drawableRepeatPoint); components.Add(drawableRepeatPoint); @@ -109,7 +104,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables //todo: we probably want to reconsider this before adding scoring, but it looks and feels nice. if (!HeadCircle.IsHit) - HeadCircle.Position = slider.StackedPositionAt(completionProgress); + HeadCircle.Position = slider.PositionAt(completionProgress); foreach (var c in components.OfType()) c.UpdateProgress(completionProgress); foreach (var c in components.OfType()) c.UpdateSnakingPosition(slider.Curve.PositionAt(Body.SnakedStart ?? 0), slider.Curve.PositionAt(Body.SnakedEnd ?? 0)); diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/SliderBall.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/SliderBall.cs index 61db10b694..4cfe3c3445 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/SliderBall.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/SliderBall.cs @@ -6,6 +6,7 @@ using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Shapes; using osu.Framework.Input; +using osu.Game.Rulesets.Objects.Types; using OpenTK; using OpenTK.Graphics; @@ -141,7 +142,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces public void UpdateProgress(double completionProgress) { - Position = slider.StackedPositionAt(completionProgress); + Position = slider.PositionAt(completionProgress); } } } diff --git a/osu.Game.Rulesets.Osu/Objects/Slider.cs b/osu.Game.Rulesets.Osu/Objects/Slider.cs index 4905972e6f..308fc37270 100644 --- a/osu.Game.Rulesets.Osu/Objects/Slider.cs +++ b/osu.Game.Rulesets.Osu/Objects/Slider.cs @@ -23,8 +23,8 @@ namespace osu.Game.Rulesets.Osu.Objects public double EndTime => StartTime + this.SpanCount() * Curve.Distance / Velocity; public double Duration => EndTime - StartTime; - public Vector2 StackedPositionAt(double t) => this.PositionAt(t) + StackOffset; - public override Vector2 EndPosition => this.PositionAt(1); + public Vector2 StackedPositionAt(double t) => StackedPosition + this.PositionAt(t); + public override Vector2 EndPosition => Position + this.PositionAt(1); public SliderCurve Curve { get; } = new SliderCurve(); @@ -99,7 +99,7 @@ namespace osu.Game.Rulesets.Osu.Objects HeadCircle = new HitCircle { StartTime = StartTime, - Position = this.PositionAt(0), + Position = Position, IndexInCurrentCombo = IndexInCurrentCombo, ComboColour = ComboColour, Samples = Samples, @@ -109,7 +109,7 @@ namespace osu.Game.Rulesets.Osu.Objects TailCircle = new HitCircle { StartTime = EndTime, - Position = this.PositionAt(1), + Position = EndPosition, IndexInCurrentCombo = IndexInCurrentCombo, ComboColour = ComboColour }; @@ -156,7 +156,7 @@ namespace osu.Game.Rulesets.Osu.Objects SpanIndex = span, SpanStartTime = spanStartTime, StartTime = spanStartTime + timeProgress * SpanDuration, - Position = Curve.PositionAt(distanceProgress) - Curve.PositionAt(0), + Position = Position + Curve.PositionAt(distanceProgress), StackHeight = StackHeight, Scale = Scale, ComboColour = ComboColour, @@ -175,7 +175,7 @@ namespace osu.Game.Rulesets.Osu.Objects RepeatIndex = repeatIndex, SpanDuration = SpanDuration, StartTime = StartTime + repeat * SpanDuration, - Position = Curve.PositionAt(repeat % 2) - Curve.PositionAt(0), + Position = Position + Curve.PositionAt(repeat % 2), StackHeight = StackHeight, Scale = Scale, ComboColour = ComboColour, @@ -184,10 +184,4 @@ namespace osu.Game.Rulesets.Osu.Objects } } } - - public static class SliderExtensions - { - public static Vector2 PositionAt(this Slider slider, double progress) - => ((IHasCurve)slider).PositionAt(progress) - slider.Curve.PositionAt(0); - } } diff --git a/osu.Game/Rulesets/Objects/Legacy/ConvertHitObjectParser.cs b/osu.Game/Rulesets/Objects/Legacy/ConvertHitObjectParser.cs index 5fdc9a07e1..2fcf3205c1 100644 --- a/osu.Game/Rulesets/Objects/Legacy/ConvertHitObjectParser.cs +++ b/osu.Game/Rulesets/Objects/Legacy/ConvertHitObjectParser.cs @@ -41,9 +41,11 @@ namespace osu.Game.Rulesets.Objects.Legacy } else if ((type & ConvertHitObjectType.Slider) > 0) { + var pos = new Vector2(int.Parse(split[0]), int.Parse(split[1])); + CurveType curveType = CurveType.Catmull; double length = 0; - var points = new List { new Vector2(int.Parse(split[0]), int.Parse(split[1])) }; + var points = new List { Vector2.Zero }; string[] pointsplit = split[5].Split('|'); foreach (string t in pointsplit) @@ -69,7 +71,7 @@ namespace osu.Game.Rulesets.Objects.Legacy } string[] temp = t.Split(':'); - points.Add(new Vector2((int)Convert.ToDouble(temp[0], CultureInfo.InvariantCulture), (int)Convert.ToDouble(temp[1], CultureInfo.InvariantCulture))); + points.Add(new Vector2((int)Convert.ToDouble(temp[0], CultureInfo.InvariantCulture), (int)Convert.ToDouble(temp[1], CultureInfo.InvariantCulture)) - pos); } int repeatCount = Convert.ToInt32(split[6], CultureInfo.InvariantCulture); @@ -134,7 +136,7 @@ namespace osu.Game.Rulesets.Objects.Legacy for (int i = 0; i < nodes; i++) nodeSamples.Add(convertSoundType(nodeSoundTypes[i], nodeBankInfos[i])); - result = CreateSlider(new Vector2(int.Parse(split[0]), int.Parse(split[1])), combo, points, length, curveType, repeatCount, nodeSamples); + result = CreateSlider(pos, combo, points, length, curveType, repeatCount, nodeSamples); } else if ((type & ConvertHitObjectType.Spinner) > 0) { From 1e1df2aafff35fb7bda56cead1d1437bbe0b514a Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Fri, 23 Feb 2018 21:03:45 +0900 Subject: [PATCH 154/544] Fix up testcases --- osu.Game.Rulesets.Osu/Tests/TestCaseSlider.cs | 40 +++++++++---------- .../Visual/TestCaseEditorSelectionLayer.cs | 6 +-- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Tests/TestCaseSlider.cs b/osu.Game.Rulesets.Osu/Tests/TestCaseSlider.cs index 90a0a450a7..ed212b48cd 100644 --- a/osu.Game.Rulesets.Osu/Tests/TestCaseSlider.cs +++ b/osu.Game.Rulesets.Osu/Tests/TestCaseSlider.cs @@ -118,8 +118,8 @@ namespace osu.Game.Rulesets.Osu.Tests ComboColour = Color4.LightSeaGreen, ControlPoints = new List { - new Vector2(-(distance / 2), 0), - new Vector2(distance / 2, 0), + Vector2.Zero, + new Vector2(distance, 0), }, Distance = distance, RepeatCount = repeats, @@ -139,9 +139,9 @@ namespace osu.Game.Rulesets.Osu.Tests ComboColour = Color4.LightSeaGreen, ControlPoints = new List { - new Vector2(-200, 0), - new Vector2(0, 200), - new Vector2(200, 0) + Vector2.Zero, + new Vector2(200, 200), + new Vector2(400, 0) }, Distance = 600, RepeatCount = repeats, @@ -163,12 +163,12 @@ namespace osu.Game.Rulesets.Osu.Tests ComboColour = Color4.LightSeaGreen, ControlPoints = new List { - new Vector2(-200, 0), - new Vector2(-50, 75), - new Vector2(0, 100), - new Vector2(100, -200), + Vector2.Zero, + new Vector2(150, 75), new Vector2(200, 0), - new Vector2(230, 0) + new Vector2(300, -200), + new Vector2(400, 0), + new Vector2(430, 0) }, Distance = 793.4417, RepeatCount = repeats, @@ -190,11 +190,11 @@ namespace osu.Game.Rulesets.Osu.Tests ComboColour = Color4.LightSeaGreen, ControlPoints = new List { - new Vector2(-200, 0), - new Vector2(-50, 75), - new Vector2(0, 100), - new Vector2(100, -200), - new Vector2(230, 0) + Vector2.Zero, + new Vector2(150, 75), + new Vector2(200, 100), + new Vector2(300, -200), + new Vector2(430, 0) }, Distance = 480, RepeatCount = repeats, @@ -216,7 +216,7 @@ namespace osu.Game.Rulesets.Osu.Tests ComboColour = Color4.LightSeaGreen, ControlPoints = new List { - new Vector2(0, 0), + Vector2.Zero, new Vector2(-200, 0), new Vector2(0, 0), new Vector2(0, -200), @@ -247,10 +247,10 @@ namespace osu.Game.Rulesets.Osu.Tests CurveType = CurveType.Catmull, ControlPoints = new List { - new Vector2(-100, 0), - new Vector2(-50, -50), - new Vector2(50, 50), - new Vector2(100, 0) + Vector2.Zero, + new Vector2(50, -50), + new Vector2(150, 50), + new Vector2(200, 0) }, Distance = 300, RepeatCount = repeats, diff --git a/osu.Game.Tests/Visual/TestCaseEditorSelectionLayer.cs b/osu.Game.Tests/Visual/TestCaseEditorSelectionLayer.cs index 5e0c0e165c..60ddff64ba 100644 --- a/osu.Game.Tests/Visual/TestCaseEditorSelectionLayer.cs +++ b/osu.Game.Tests/Visual/TestCaseEditorSelectionLayer.cs @@ -35,13 +35,13 @@ namespace osu.Game.Tests.Visual new HitCircle { Position = new Vector2(344, 148), Scale = 0.5f }, new Slider { + Position = new Vector2(128, 256), ControlPoints = new List { - new Vector2(128, 256), - new Vector2(344, 256), + Vector2.Zero, + new Vector2(216, 0), }, Distance = 400, - Position = new Vector2(128, 256), Velocity = 1, TickDistance = 100, Scale = 0.5f, From 996e605e61628523cabd5d676753d1918ad872ad Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Sat, 24 Feb 2018 02:39:44 +0900 Subject: [PATCH 155/544] Remove temporary testcase --- .../Tests/TestCaseNewSliderBody.cs | 171 ------------------ .../osu.Game.Rulesets.Osu.csproj | 1 - 2 files changed, 172 deletions(-) delete mode 100644 osu.Game.Rulesets.Osu/Tests/TestCaseNewSliderBody.cs diff --git a/osu.Game.Rulesets.Osu/Tests/TestCaseNewSliderBody.cs b/osu.Game.Rulesets.Osu/Tests/TestCaseNewSliderBody.cs deleted file mode 100644 index a23bfb11ca..0000000000 --- a/osu.Game.Rulesets.Osu/Tests/TestCaseNewSliderBody.cs +++ /dev/null @@ -1,171 +0,0 @@ -// Copyright (c) 2007-2018 ppy Pty Ltd . -// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE - -using System; -using System.Collections.Generic; -using osu.Framework.Allocation; -using osu.Framework.Graphics; -using osu.Framework.Graphics.Containers; -using osu.Framework.Graphics.Lines; -using osu.Framework.Graphics.OpenGL.Textures; -using osu.Framework.Graphics.Textures; -using osu.Game.Rulesets.Objects; -using osu.Game.Rulesets.Objects.Types; -using osu.Game.Tests.Visual; -using OpenTK; -using OpenTK.Graphics; - -namespace osu.Game.Rulesets.Osu.Tests -{ - public class TestCaseNewSliderBody : OsuTestCase - { - public override IReadOnlyList RequiredTypes => new[] { typeof(Path) }; - - private readonly NewSliderBody body; - - public TestCaseNewSliderBody() - { - Add(body = new NewSliderBody(new SliderCurve - { - ControlPoints = new List - { - new Vector2(-200, 0), - new Vector2(-50, 75), - new Vector2(0, 100), - new Vector2(100, -200), - new Vector2(230, 0) - }, - Distance = 480, - CurveType = CurveType.Bezier - }) - { - Anchor = Anchor.Centre, - Origin = Anchor.Centre - }); - - AddSliderStep("In", 0f, 1f, 0f, v => inLength = v); - AddSliderStep("Out", 0f, 1f, 1f, v => outLength = v); - AddSliderStep("Path Width", 0f, 100f, 10f, v => body.PathWidth = v); - } - - private float _inLength; - - private float inLength - { - set - { - _inLength = value; - body.UpdateSnaking(_inLength, _outLength); - } - } - - private float _outLength; - - private float outLength - { - set - { - _outLength = value; - body.UpdateSnaking(_inLength, _outLength); - } - } - - private class NewSliderBody : CompositeDrawable - { - private readonly Path path; - private readonly SliderCurve curve; - - public NewSliderBody(SliderCurve curve) - { - this.curve = curve; - - InternalChild = path = new Path(); - } - - [BackgroundDependencyLoader] - private void load() - { - reloadTexture(); - computeSize(); - } - - public float PathWidth - { - get => path.PathWidth; - set { path.PathWidth = value; reloadTexture(); } - } - - private void reloadTexture() - { - var textureWidth = (int)PathWidth * 2; - - //initialise background - var texture = new Texture(textureWidth, 1); - var upload = new TextureUpload(textureWidth * 4); - var bytes = upload.Data; - - const float aa_portion = 0.02f; - const float border_portion = 0.128f; - const float gradient_portion = 1 - border_portion; - - const float opacity_at_centre = 0.3f; - const float opacity_at_edge = 0.8f; - - for (int i = 0; i < textureWidth; i++) - { - float progress = (float)i / (textureWidth - 1); - - if (progress <= border_portion) - { - bytes[i * 4] = (byte)(Color4.White.R * 255); - bytes[i * 4 + 1] = (byte)(Color4.White.G * 255); - bytes[i * 4 + 2] = (byte)(Color4.White.B * 255); - bytes[i * 4 + 3] = (byte)(Math.Min(progress / aa_portion, 1) * (Color4.White.A * 255)); - } - else - { - progress -= border_portion; - - bytes[i * 4] = (byte)(Color4.Blue.R * 255); - bytes[i * 4 + 1] = (byte)(Color4.Blue.G * 255); - bytes[i * 4 + 2] = (byte)(Color4.Blue.B * 255); - bytes[i * 4 + 3] = (byte)((opacity_at_edge - (opacity_at_edge - opacity_at_centre) * progress / gradient_portion) * (Color4.Blue.A * 255)); - } - } - - texture.SetData(upload); - path.Texture = texture; - } - - private Vector2 topLeftOffset; - - private void computeSize() - { - // Compute the final size - var fullPath = new List(); - curve.GetPathToProgress(fullPath, 0, 1); - - foreach (Vector2 p in fullPath) - path.AddVertex(p); - - Size = path.Size; - - topLeftOffset = path.PositionInBoundingBox(Vector2.Zero); - OriginPosition = path.PositionInBoundingBox(fullPath[0]); - } - - public void UpdateSnaking(float t0, float t1) - { - var curvePath = new List(); - curve.GetPathToProgress(curvePath, t0, t1); - - path.ClearVertices(); - foreach (Vector2 p in curvePath) - path.AddVertex(p); - - var newTopLeftOffset = path.PositionInBoundingBox(Vector2.Zero); - path.Position = topLeftOffset - newTopLeftOffset; - } - } - } -} diff --git a/osu.Game.Rulesets.Osu/osu.Game.Rulesets.Osu.csproj b/osu.Game.Rulesets.Osu/osu.Game.Rulesets.Osu.csproj index 53075728ad..7838fb7707 100644 --- a/osu.Game.Rulesets.Osu/osu.Game.Rulesets.Osu.csproj +++ b/osu.Game.Rulesets.Osu/osu.Game.Rulesets.Osu.csproj @@ -124,7 +124,6 @@ - From 066abfbdbc37cd184bbc7d9e6a8d35c2e51ca280 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Sat, 24 Feb 2018 02:43:36 +0900 Subject: [PATCH 156/544] Rename PositionAt -> CurvePositionAt to represent its new meaning --- osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs | 2 +- osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/SliderBall.cs | 2 +- osu.Game.Rulesets.Osu/Objects/Slider.cs | 4 ++-- osu.Game/Rulesets/Objects/Types/IHasCurve.cs | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs index c2f3d4a314..560d13801a 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs @@ -104,7 +104,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables //todo: we probably want to reconsider this before adding scoring, but it looks and feels nice. if (!HeadCircle.IsHit) - HeadCircle.Position = slider.PositionAt(completionProgress); + HeadCircle.Position = slider.CurvePositionAt(completionProgress); foreach (var c in components.OfType()) c.UpdateProgress(completionProgress); foreach (var c in components.OfType()) c.UpdateSnakingPosition(slider.Curve.PositionAt(Body.SnakedStart ?? 0), slider.Curve.PositionAt(Body.SnakedEnd ?? 0)); diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/SliderBall.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/SliderBall.cs index 4cfe3c3445..1921c51889 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/SliderBall.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/SliderBall.cs @@ -142,7 +142,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces public void UpdateProgress(double completionProgress) { - Position = slider.PositionAt(completionProgress); + Position = slider.CurvePositionAt(completionProgress); } } } diff --git a/osu.Game.Rulesets.Osu/Objects/Slider.cs b/osu.Game.Rulesets.Osu/Objects/Slider.cs index 308fc37270..61056832e9 100644 --- a/osu.Game.Rulesets.Osu/Objects/Slider.cs +++ b/osu.Game.Rulesets.Osu/Objects/Slider.cs @@ -23,8 +23,8 @@ namespace osu.Game.Rulesets.Osu.Objects public double EndTime => StartTime + this.SpanCount() * Curve.Distance / Velocity; public double Duration => EndTime - StartTime; - public Vector2 StackedPositionAt(double t) => StackedPosition + this.PositionAt(t); - public override Vector2 EndPosition => Position + this.PositionAt(1); + public Vector2 StackedPositionAt(double t) => StackedPosition + this.CurvePositionAt(t); + public override Vector2 EndPosition => Position + this.CurvePositionAt(1); public SliderCurve Curve { get; } = new SliderCurve(); diff --git a/osu.Game/Rulesets/Objects/Types/IHasCurve.cs b/osu.Game/Rulesets/Objects/Types/IHasCurve.cs index c03bdb240e..251ad3e3cd 100644 --- a/osu.Game/Rulesets/Objects/Types/IHasCurve.cs +++ b/osu.Game/Rulesets/Objects/Types/IHasCurve.cs @@ -35,7 +35,7 @@ namespace osu.Game.Rulesets.Objects.Types /// The curve. /// [0, 1] where 0 is the start time of the and 1 is the end time of the . /// The position on the curve. - public static Vector2 PositionAt(this IHasCurve obj, double progress) + public static Vector2 CurvePositionAt(this IHasCurve obj, double progress) => obj.Curve.PositionAt(obj.ProgressAt(progress)); /// From 50d1183ec2deb5182484874404ad0c40d47f04d1 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Sat, 24 Feb 2018 02:53:02 +0900 Subject: [PATCH 157/544] Division-by-zero safety + reference our own size --- .../Objects/Drawables/DrawableSlider.cs | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs index 560d13801a..39908e9fa7 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs @@ -113,9 +113,13 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables Size = Body.Size; OriginPosition = Body.PathOffset; - foreach (var obj in NestedHitObjects) - obj.RelativeAnchorPosition = Vector2.Divide(OriginPosition, Body.DrawSize); - Ball.RelativeAnchorPosition = Vector2.Divide(OriginPosition, Body.DrawSize); + if (DrawSize.X > 0 && DrawSize.Y > 0) + { + var childAnchorPosition = Vector2.Divide(OriginPosition, DrawSize); + foreach (var obj in NestedHitObjects) + obj.RelativeAnchorPosition = childAnchorPosition; + Ball.RelativeAnchorPosition = childAnchorPosition; + } } protected override void CheckForJudgements(bool userTriggered, double timeOffset) From f5fc9cdfba7d66d1f85e997d15b205803c9d6603 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Sat, 24 Feb 2018 02:59:55 +0900 Subject: [PATCH 158/544] Fix catch now having incorrect offsets --- osu.Game.Rulesets.Catch/Objects/JuiceStream.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/osu.Game.Rulesets.Catch/Objects/JuiceStream.cs b/osu.Game.Rulesets.Catch/Objects/JuiceStream.cs index be1e360fce..a3e5aba2db 100644 --- a/osu.Game.Rulesets.Catch/Objects/JuiceStream.cs +++ b/osu.Game.Rulesets.Catch/Objects/JuiceStream.cs @@ -83,7 +83,7 @@ namespace osu.Game.Rulesets.Catch.Objects { StartTime = lastTickTime, ComboColour = ComboColour, - X = Curve.PositionAt(distanceProgress).X / CatchPlayfield.BASE_WIDTH, + X = X + Curve.PositionAt(distanceProgress).X / CatchPlayfield.BASE_WIDTH, Samples = new List(Samples.Select(s => new SampleInfo { Bank = s.Bank, @@ -105,7 +105,7 @@ namespace osu.Game.Rulesets.Catch.Objects { StartTime = spanStartTime + t, ComboColour = ComboColour, - X = Curve.PositionAt(progress).X / CatchPlayfield.BASE_WIDTH, + X = X + Curve.PositionAt(progress).X / CatchPlayfield.BASE_WIDTH, Samples = new List(Samples.Select(s => new SampleInfo { Bank = s.Bank, @@ -120,14 +120,14 @@ namespace osu.Game.Rulesets.Catch.Objects Samples = Samples, ComboColour = ComboColour, StartTime = spanStartTime + spanDuration, - X = Curve.PositionAt(reversed ? 0 : 1).X / CatchPlayfield.BASE_WIDTH + X = X + Curve.PositionAt(reversed ? 0 : 1).X / CatchPlayfield.BASE_WIDTH }); } } public double EndTime => StartTime + this.SpanCount() * Curve.Distance / Velocity; - public float EndX => Curve.PositionAt(this.ProgressAt(1)).X / CatchPlayfield.BASE_WIDTH; + public float EndX => X + this.CurvePositionAt(1).X / CatchPlayfield.BASE_WIDTH; public double Duration => EndTime - StartTime; From ef6b207c7e6a536a794751ea2e8f4265f0530ad5 Mon Sep 17 00:00:00 2001 From: "V.Kalyuzhny" Date: Sat, 24 Feb 2018 14:18:53 +0200 Subject: [PATCH 159/544] Fix file case --- osu.Game/osu.Game.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index 829addc360..e41ca5f0be 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -323,7 +323,7 @@ 20171209034410_AddRulesetInfoShortName.cs - + 20180219060912_AddSkins.cs @@ -930,4 +930,4 @@ - \ No newline at end of file + From 6d4016e18bf9d1691683217975fe1c86ef579225 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Sat, 24 Feb 2018 22:41:04 +0900 Subject: [PATCH 160/544] Update framework --- osu-framework | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu-framework b/osu-framework index 16a4bef775..9a773e62eb 160000 --- a/osu-framework +++ b/osu-framework @@ -1 +1 @@ -Subproject commit 16a4bef775a49166f38faa6e952d83d8823fe3e0 +Subproject commit 9a773e62eb246206b918ba4fccf9f2507aaa4595 From 768e0a4e2a912c44d7a139ff8243a8b88435a228 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Fri, 23 Feb 2018 20:34:08 +0900 Subject: [PATCH 161/544] Add SkinnableSound class Tidy things up, move logic out of SampleInfo. --- .../Audio/DrumSampleMapping.cs | 29 ++++++-- osu.Game.Rulesets.Taiko/UI/InputDrum.cs | 7 +- osu.Game/Audio/SampleInfo.cs | 21 ++---- .../Objects/Drawables/DrawableHitObject.cs | 66 +++++++------------ osu.Game/Skinning/SkinReloadableDrawable.cs | 53 +++++++++++++++ osu.Game/Skinning/SkinnableDrawable.cs | 38 ++++------- osu.Game/Skinning/SkinnableSound.cs | 62 +++++++++++++++++ osu.Game/osu.Game.csproj | 4 +- 8 files changed, 184 insertions(+), 96 deletions(-) create mode 100644 osu.Game/Skinning/SkinReloadableDrawable.cs create mode 100644 osu.Game/Skinning/SkinnableSound.cs diff --git a/osu.Game.Rulesets.Taiko/Audio/DrumSampleMapping.cs b/osu.Game.Rulesets.Taiko/Audio/DrumSampleMapping.cs index 85367b8bf6..ef96e4c48a 100644 --- a/osu.Game.Rulesets.Taiko/Audio/DrumSampleMapping.cs +++ b/osu.Game.Rulesets.Taiko/Audio/DrumSampleMapping.cs @@ -2,10 +2,9 @@ // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using System.Collections.Generic; -using osu.Framework.Audio; -using osu.Framework.Audio.Sample; using osu.Game.Audio; using osu.Game.Beatmaps.ControlPoints; +using osu.Game.Skinning; namespace osu.Game.Rulesets.Taiko.Audio { @@ -14,7 +13,9 @@ namespace osu.Game.Rulesets.Taiko.Audio private readonly ControlPointInfo controlPoints; private readonly Dictionary mappings = new Dictionary(); - public DrumSampleMapping(ControlPointInfo controlPoints, AudioManager audio) + public readonly List Drawables = new List(); + + public DrumSampleMapping(ControlPointInfo controlPoints) { this.controlPoints = controlPoints; @@ -27,20 +28,34 @@ namespace osu.Game.Rulesets.Taiko.Audio foreach (var s in samplePoints) { + var centre = s.GetSampleInfo(); + var rim = s.GetSampleInfo(SampleInfo.HIT_CLAP); + + // todo: this is ugly + centre.Namespace = "taiko"; + rim.Namespace = "taiko"; + mappings[s.Time] = new DrumSample { - Centre = s.GetSampleInfo().GetChannel(audio.Sample.Get, "Taiko"), - Rim = s.GetSampleInfo(SampleInfo.HIT_CLAP).GetChannel(audio.Sample.Get, "Taiko") + Centre = addDrawableSound(centre), + Rim = addDrawableSound(rim) }; } } + private SkinnableSound addDrawableSound(SampleInfo rim) + { + var drawable = new SkinnableSound(rim); + Drawables.Add(drawable); + return drawable; + } + public DrumSample SampleAt(double time) => mappings[controlPoints.SamplePointAt(time).Time]; public class DrumSample { - public SampleChannel Centre; - public SampleChannel Rim; + public SkinnableSound Centre; + public SkinnableSound Rim; } } } diff --git a/osu.Game.Rulesets.Taiko/UI/InputDrum.cs b/osu.Game.Rulesets.Taiko/UI/InputDrum.cs index 98f20fd558..ac4c077515 100644 --- a/osu.Game.Rulesets.Taiko/UI/InputDrum.cs +++ b/osu.Game.Rulesets.Taiko/UI/InputDrum.cs @@ -4,7 +4,6 @@ using System; using OpenTK; using osu.Framework.Allocation; -using osu.Framework.Audio; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Sprites; @@ -34,9 +33,9 @@ namespace osu.Game.Rulesets.Taiko.UI } [BackgroundDependencyLoader] - private void load(AudioManager audio) + private void load() { - var sampleMappings = new DrumSampleMapping(controlPoints, audio); + var sampleMappings = new DrumSampleMapping(controlPoints); Children = new Drawable[] { @@ -63,6 +62,8 @@ namespace osu.Game.Rulesets.Taiko.UI CentreAction = TaikoAction.RightCentre } }; + + AddRangeInternal(sampleMappings.Drawables); } /// diff --git a/osu.Game/Audio/SampleInfo.cs b/osu.Game/Audio/SampleInfo.cs index 99d2da7ebc..2014db6c61 100644 --- a/osu.Game/Audio/SampleInfo.cs +++ b/osu.Game/Audio/SampleInfo.cs @@ -2,7 +2,6 @@ // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using System; -using osu.Framework.Audio.Sample; namespace osu.Game.Audio { @@ -14,22 +13,10 @@ namespace osu.Game.Audio public const string HIT_NORMAL = @"hitnormal"; public const string HIT_CLAP = @"hitclap"; - public SampleChannel GetChannel(Func getChannel, string resourceNamespace = null) - { - SampleChannel channel = null; - - if (resourceNamespace != null) - channel = getChannel($"Gameplay/{resourceNamespace}/{Bank}-{Name}"); - - // try without namespace as a fallback. - if (channel == null) - channel = getChannel($"Gameplay/{Bank}-{Name}"); - - if (channel != null) - channel.Volume.Value = Volume / 100.0; - - return channel; - } + /// + /// An optional ruleset namespace. + /// + public string Namespace; /// /// The bank to load the sample from. diff --git a/osu.Game/Rulesets/Objects/Drawables/DrawableHitObject.cs b/osu.Game/Rulesets/Objects/Drawables/DrawableHitObject.cs index 2ecdccc31f..fcb472995a 100644 --- a/osu.Game/Rulesets/Objects/Drawables/DrawableHitObject.cs +++ b/osu.Game/Rulesets/Objects/Drawables/DrawableHitObject.cs @@ -3,21 +3,19 @@ using System; using System.Collections.Generic; -using osu.Framework.Allocation; -using osu.Framework.Audio; -using osu.Framework.Audio.Sample; -using osu.Game.Rulesets.Judgements; -using Container = osu.Framework.Graphics.Containers.Container; -using osu.Game.Rulesets.Objects.Types; -using OpenTK.Graphics; -using osu.Game.Audio; using System.Linq; -using osu.Game.Graphics; +using osu.Framework.Allocation; using osu.Framework.Configuration; -using OpenTK; +using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Primitives; +using osu.Game.Audio; +using osu.Game.Graphics; +using osu.Game.Rulesets.Judgements; +using osu.Game.Rulesets.Objects.Types; using osu.Game.Rulesets.Scoring; using osu.Game.Skinning; +using OpenTK; +using OpenTK.Graphics; namespace osu.Game.Rulesets.Objects.Drawables { @@ -33,8 +31,12 @@ namespace osu.Game.Rulesets.Objects.Drawables // Todo: Rulesets should be overriding the resources instead, but we need to figure out where/when to apply overrides first protected virtual string SampleNamespace => null; - protected List Samples = new List(); - protected virtual IEnumerable GetSamples() => HitObject.Samples; + protected SkinnableSound Samples; + + protected virtual IEnumerable GetSamples() + { + return HitObject.Samples; + } private List nestedHitObjects; public IReadOnlyList NestedHitObjects => nestedHitObjects; @@ -83,41 +85,23 @@ namespace osu.Game.Rulesets.Objects.Drawables HitObject = hitObject; } - private readonly Bindable skin = new Bindable(); - [BackgroundDependencyLoader] - private void load(AudioManager audio, SkinManager skins) + private void load() { - var samples = GetSamples(); + var samples = GetSamples().ToArray(); + if (samples.Any()) { if (HitObject.SampleControlPoint == null) throw new ArgumentNullException(nameof(HitObject.SampleControlPoint), $"{nameof(HitObject)}s must always have an attached {nameof(HitObject.SampleControlPoint)}." + $" This is an indication that {nameof(HitObject.ApplyDefaults)} has not been invoked on {this}."); - void loadSamples(Skin skin) + AddInternal(Samples = new SkinnableSound(samples.Select(s => new SampleInfo { - Samples.Clear(); - - foreach (SampleInfo s in samples) - { - SampleInfo localSampleInfo = new SampleInfo - { - Bank = s.Bank ?? HitObject.SampleControlPoint.SampleBank, - Name = s.Name, - Volume = s.Volume > 0 ? s.Volume : HitObject.SampleControlPoint.SampleVolume - }; - - - SampleChannel channel = localSampleInfo.GetChannel(skin.GetSample, SampleNamespace) ?? localSampleInfo.GetChannel(audio.Sample.Get, SampleNamespace); - - if (channel == null) return; - - Samples.Add(channel); - } - } - - skin.ValueChanged += loadSamples; - skin.BindTo(skins.CurrentSkin); + Bank = s.Bank ?? HitObject.SampleControlPoint.SampleBank, + Name = s.Name, + Volume = s.Volume > 0 ? s.Volume : HitObject.SampleControlPoint.SampleVolume, + Namespace = SampleNamespace + }).ToArray())); } } @@ -149,7 +133,7 @@ namespace osu.Game.Rulesets.Objects.Drawables /// /// Plays all the hitsounds for this . /// - public void PlaySamples() => Samples.ForEach(s => s?.Play()); + public void PlaySamples() => Samples?.Play(); protected override void Update() { @@ -231,10 +215,8 @@ namespace osu.Game.Rulesets.Objects.Drawables return false; if (NestedHitObjects != null) - { foreach (var d in NestedHitObjects) judgementOccurred |= d.UpdateJudgement(userTriggered); - } if (!ProvidesJudgement || judgementFinalized || judgementOccurred) return judgementOccurred; diff --git a/osu.Game/Skinning/SkinReloadableDrawable.cs b/osu.Game/Skinning/SkinReloadableDrawable.cs new file mode 100644 index 0000000000..1abfd8976e --- /dev/null +++ b/osu.Game/Skinning/SkinReloadableDrawable.cs @@ -0,0 +1,53 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using osu.Framework.Allocation; +using osu.Framework.Configuration; +using osu.Framework.Graphics.Containers; + +namespace osu.Game.Skinning +{ + /// + /// A drawable which has a callback when the skin changes. + /// + public abstract class SkinReloadableDrawable : CompositeDrawable + { + private Bindable skin; + + /// + /// Whether fallback to default skin should be allowed if the custom skin is missing this resource. + /// + private readonly bool allowDefaultFallback; + + /// + /// Create a new + /// + /// Whether fallback to default skin should be allowed if the custom skin is missing this resource. + protected SkinReloadableDrawable(bool fallback = true) + { + allowDefaultFallback = fallback; + } + + [BackgroundDependencyLoader] + private void load(SkinManager skinManager) + { + skin = skinManager.CurrentSkin.GetBoundCopy(); + skin.ValueChanged += skin => SkinChanged(skin, allowDefaultFallback || skin.SkinInfo == SkinInfo.Default); + } + + protected override void LoadAsyncComplete() + { + base.LoadAsyncComplete(); + skin.TriggerChange(); + } + + /// + /// Called when a change is made to the skin. + /// + /// The new skin. + /// Whether fallback to default skin should be allowed if the custom skin is missing this resource. + protected virtual void SkinChanged(Skin skin, bool allowFallback) + { + } + } +} diff --git a/osu.Game/Skinning/SkinnableDrawable.cs b/osu.Game/Skinning/SkinnableDrawable.cs index c1c78fdb05..cd669778a6 100644 --- a/osu.Game/Skinning/SkinnableDrawable.cs +++ b/osu.Game/Skinning/SkinnableDrawable.cs @@ -2,10 +2,7 @@ // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using System; -using osu.Framework.Allocation; -using osu.Framework.Configuration; using osu.Framework.Graphics; -using osu.Framework.Graphics.Containers; namespace osu.Game.Skinning { @@ -14,40 +11,29 @@ namespace osu.Game.Skinning public SkinnableDrawable(string name, Func defaultImplementation, bool fallback = true) : base(name, defaultImplementation, fallback) { - RelativeSizeAxes = Axes.Both; } } - public class SkinnableDrawable : CompositeDrawable + public class SkinnableDrawable : SkinReloadableDrawable where T : Drawable { - private Bindable skin; - protected Func CreateDefault; + private readonly Func createDefault; - public readonly string ComponentName; + private readonly string componentName; - public readonly bool DefaultFallback; - - public SkinnableDrawable(string name, Func defaultImplementation, bool fallback = true) + public SkinnableDrawable(string name, Func defaultImplementation, bool fallback = true) : base(fallback) { - DefaultFallback = fallback; - ComponentName = name; - CreateDefault = defaultImplementation; + componentName = name; + createDefault = defaultImplementation; + + RelativeSizeAxes = Axes.Both; } - [BackgroundDependencyLoader] - private void load(SkinManager skinManager) + protected override void SkinChanged(Skin skin, bool allowFallback) { - skin = skinManager.CurrentSkin.GetBoundCopy(); - skin.ValueChanged += updateComponent; - skin.TriggerChange(); - } - - private void updateComponent(Skin skin) - { - var drawable = skin.GetDrawableComponent(ComponentName); - if (drawable == null && (DefaultFallback || skin.SkinInfo == SkinInfo.Default)) - drawable = CreateDefault(ComponentName); + var drawable = skin.GetDrawableComponent(componentName); + if (drawable == null && allowFallback) + drawable = createDefault(componentName); if (drawable != null) InternalChild = drawable; diff --git a/osu.Game/Skinning/SkinnableSound.cs b/osu.Game/Skinning/SkinnableSound.cs new file mode 100644 index 0000000000..7cc13519da --- /dev/null +++ b/osu.Game/Skinning/SkinnableSound.cs @@ -0,0 +1,62 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using System; +using System.Linq; +using osu.Framework.Allocation; +using osu.Framework.Audio; +using osu.Framework.Audio.Sample; +using osu.Framework.Extensions.IEnumerableExtensions; +using osu.Game.Audio; + +namespace osu.Game.Skinning +{ + public class SkinnableSound : SkinReloadableDrawable + { + private readonly SampleInfo[] samples; + private SampleChannel[] channels; + + private AudioManager audio; + + public SkinnableSound(params SampleInfo[] samples) + { + this.samples = samples; + } + + [BackgroundDependencyLoader] + private void load(AudioManager audio) + { + this.audio = audio; + } + + public void Play() => channels?.ForEach(c => c.Play()); + + protected override void SkinChanged(Skin skin, bool allowFallback) + { + channels = samples.Select(s => + { + var ch = loadChannel(s, skin.GetSample); + if (ch == null && allowFallback) + ch = loadChannel(s, audio.Sample.Get); + return ch; + }).ToArray(); + } + + private SampleChannel loadChannel(SampleInfo info, Func getSampleFunction) + { + SampleChannel ch = null; + + if (info.Namespace != null) + ch = getSampleFunction($"Gameplay/{info.Namespace}/{info.Bank}-{info.Name}"); + + // try without namespace as a fallback. + if (ch == null) + ch = getSampleFunction($"Gameplay/{info.Bank}-{info.Name}"); + + if (ch != null) + ch.Volume.Value = info.Volume / 100.0; + + return ch; + } + } +} diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index 6a2ce82b23..6a06bf540b 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -1,4 +1,4 @@ - + @@ -861,6 +861,8 @@ + + From 4a52df2dd4f2e5b4b8c9efbeb6485132a380b100 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Sat, 24 Feb 2018 23:07:02 +0900 Subject: [PATCH 162/544] Apply review --- osu.Game.Rulesets.Taiko/Audio/DrumSampleMapping.cs | 12 ++++++------ osu.Game.Rulesets.Taiko/UI/InputDrum.cs | 2 +- .../Rulesets/Objects/Drawables/DrawableHitObject.cs | 5 +---- osu.Game/Skinning/SkinReloadableDrawable.cs | 2 +- 4 files changed, 9 insertions(+), 12 deletions(-) diff --git a/osu.Game.Rulesets.Taiko/Audio/DrumSampleMapping.cs b/osu.Game.Rulesets.Taiko/Audio/DrumSampleMapping.cs index ef96e4c48a..afa3d162f4 100644 --- a/osu.Game.Rulesets.Taiko/Audio/DrumSampleMapping.cs +++ b/osu.Game.Rulesets.Taiko/Audio/DrumSampleMapping.cs @@ -13,7 +13,7 @@ namespace osu.Game.Rulesets.Taiko.Audio private readonly ControlPointInfo controlPoints; private readonly Dictionary mappings = new Dictionary(); - public readonly List Drawables = new List(); + public readonly List Sounds = new List(); public DrumSampleMapping(ControlPointInfo controlPoints) { @@ -37,16 +37,16 @@ namespace osu.Game.Rulesets.Taiko.Audio mappings[s.Time] = new DrumSample { - Centre = addDrawableSound(centre), - Rim = addDrawableSound(rim) + Centre = addSound(centre), + Rim = addSound(rim) }; } } - private SkinnableSound addDrawableSound(SampleInfo rim) + private SkinnableSound addSound(SampleInfo sampleInfo) { - var drawable = new SkinnableSound(rim); - Drawables.Add(drawable); + var drawable = new SkinnableSound(sampleInfo); + Sounds.Add(drawable); return drawable; } diff --git a/osu.Game.Rulesets.Taiko/UI/InputDrum.cs b/osu.Game.Rulesets.Taiko/UI/InputDrum.cs index ac4c077515..b918f495fc 100644 --- a/osu.Game.Rulesets.Taiko/UI/InputDrum.cs +++ b/osu.Game.Rulesets.Taiko/UI/InputDrum.cs @@ -63,7 +63,7 @@ namespace osu.Game.Rulesets.Taiko.UI } }; - AddRangeInternal(sampleMappings.Drawables); + AddRangeInternal(sampleMappings.Sounds); } /// diff --git a/osu.Game/Rulesets/Objects/Drawables/DrawableHitObject.cs b/osu.Game/Rulesets/Objects/Drawables/DrawableHitObject.cs index fcb472995a..4c2683b389 100644 --- a/osu.Game/Rulesets/Objects/Drawables/DrawableHitObject.cs +++ b/osu.Game/Rulesets/Objects/Drawables/DrawableHitObject.cs @@ -33,10 +33,7 @@ namespace osu.Game.Rulesets.Objects.Drawables protected SkinnableSound Samples; - protected virtual IEnumerable GetSamples() - { - return HitObject.Samples; - } + protected virtual IEnumerable GetSamples() => HitObject.Samples; private List nestedHitObjects; public IReadOnlyList NestedHitObjects => nestedHitObjects; diff --git a/osu.Game/Skinning/SkinReloadableDrawable.cs b/osu.Game/Skinning/SkinReloadableDrawable.cs index 1abfd8976e..3e33f952cd 100644 --- a/osu.Game/Skinning/SkinReloadableDrawable.cs +++ b/osu.Game/Skinning/SkinReloadableDrawable.cs @@ -20,7 +20,7 @@ namespace osu.Game.Skinning private readonly bool allowDefaultFallback; /// - /// Create a new + /// Create a new /// /// Whether fallback to default skin should be allowed if the custom skin is missing this resource. protected SkinReloadableDrawable(bool fallback = true) From f1ddfa05817b0c54aba47768c1f2bb8ea8fddb87 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Sun, 25 Feb 2018 05:48:54 +0900 Subject: [PATCH 163/544] Fix sliders never getting a correct lifetime set --- osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs index 391e0ff023..0288e96b3b 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs @@ -154,6 +154,8 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables this.FadeOut(fade_out_time, Easing.OutQuint).Expire(); } + + Expire(true); } public Drawable ProxiedLayer => HeadCircle.ApproachCircle; From ab9aed351fc691b83f2da760c71e71562d2aaa80 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Sun, 25 Feb 2018 17:14:06 +0900 Subject: [PATCH 164/544] Remove null channels from SkinnableSound playable channels --- osu.Game/Skinning/SkinnableSound.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game/Skinning/SkinnableSound.cs b/osu.Game/Skinning/SkinnableSound.cs index 7cc13519da..fd52d62d59 100644 --- a/osu.Game/Skinning/SkinnableSound.cs +++ b/osu.Game/Skinning/SkinnableSound.cs @@ -39,7 +39,7 @@ namespace osu.Game.Skinning if (ch == null && allowFallback) ch = loadChannel(s, audio.Sample.Get); return ch; - }).ToArray(); + }).Where(c => c != null).ToArray(); } private SampleChannel loadChannel(SampleInfo info, Func getSampleFunction) From e3a1b07172ec3253b1de7af5e450bcdfc48976c2 Mon Sep 17 00:00:00 2001 From: naoey Date: Sun, 25 Feb 2018 19:18:39 +0530 Subject: [PATCH 165/544] Create API request and reponse model. --- .../GetUserRecentActivitiesRequest.cs | 89 +++++++++++++++++++ .../PaginatedRecentActivityContainer.cs | 63 +++++++++++++ .../Profile/Sections/RecentSection.cs | 10 ++- osu.Game/Overlays/UserProfileOverlay.cs | 2 +- osu.Game/osu.Game.csproj | 4 +- 5 files changed, 165 insertions(+), 3 deletions(-) create mode 100644 osu.Game/Online/API/Requests/GetUserRecentActivitiesRequest.cs create mode 100644 osu.Game/Overlays/Profile/Sections/Recent/PaginatedRecentActivityContainer.cs diff --git a/osu.Game/Online/API/Requests/GetUserRecentActivitiesRequest.cs b/osu.Game/Online/API/Requests/GetUserRecentActivitiesRequest.cs new file mode 100644 index 0000000000..cb7d0323f4 --- /dev/null +++ b/osu.Game/Online/API/Requests/GetUserRecentActivitiesRequest.cs @@ -0,0 +1,89 @@ +using Newtonsoft.Json; +using osu.Game.Rulesets.Scoring; +using Humanizer; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using osu.Game.Rulesets; +using osu.Game.Overlays.Profile.Sections.Recent; + +namespace osu.Game.Online.API.Requests +{ + public class GetUserRecentActivitiesRequest : APIRequest> + { + } + + public class RecentActivity + { + [JsonProperty("id")] + public int ID; + + [JsonProperty("created_at")] + public DateTimeOffset CreatedAt; + + [JsonProperty] + private string type + { + set => Type = (RecentActivityType)Enum.Parse(typeof(RecentActivityType), value.Pascalize()); + } + + public RecentActivityType Type; + + [JsonProperty] + private string scoreRank + { + set => ScoreRank = (ScoreRank)Enum.Parse(typeof(ScoreRank), value); + } + + public ScoreRank ScoreRank; + + [JsonProperty("rank")] + public int Rank; + + [JsonProperty("mode")] + public string Mode; + + [JsonProperty("beatmap")] + public RecentActivityBeatmap Beatmap; + + [JsonProperty("user")] + public RecentActivityUser User; + + public class RecentActivityBeatmap + { + [JsonProperty("title")] + public string Title; + + [JsonProperty("url")] + public string Url; + } + + public class RecentActivityUser + { + [JsonProperty("username")] + public string Username; + + [JsonProperty("url")] + public string Url; + } + } + + public enum RecentActivityType + { + Achievement, + BeatmapPlaycount, + BeatmapsetApprove, + BeatmapsetDelete, + BeatmapsetRevive, + BeatmapsetUpdate, + Medal, + Rank, + RankLost, + UserSupportAgain, + UserSupportFirst, + UserSupportGift, + UsernameChange, + } +} diff --git a/osu.Game/Overlays/Profile/Sections/Recent/PaginatedRecentActivityContainer.cs b/osu.Game/Overlays/Profile/Sections/Recent/PaginatedRecentActivityContainer.cs new file mode 100644 index 0000000000..11b48ad68e --- /dev/null +++ b/osu.Game/Overlays/Profile/Sections/Recent/PaginatedRecentActivityContainer.cs @@ -0,0 +1,63 @@ +using osu.Framework.Configuration; +using osu.Game.Online.API.Requests; +using osu.Game.Users; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace osu.Game.Overlays.Profile.Sections +{ + class PaginatedRecentActivityContainer : PaginatedContainer + { + public PaginatedRecentActivityContainer(Bindable user, string header, string missing) + : base(user, header, missing) + { + ItemsPerPage = 5; + } + + //protected override void ShowMore() + //{ + // base.ShowMore(); + + // var req = new GetUserRecentActivitiesRequest(User.Value.Id, VisiblePages++ * ItemsPerPage); + + // req.Success += scores => + // { + // foreach (var s in scores) + // s.ApplyRuleset(Rulesets.GetRuleset(s.OnlineRulesetID)); + + // ShowMoreButton.FadeTo(scores.Count == ItemsPerPage ? 1 : 0); + // ShowMoreLoading.Hide(); + + // if (!scores.Any() && VisiblePages == 1) + // { + // MissingText.Show(); + // return; + // } + + // MissingText.Hide(); + + // foreach (OnlineScore score in scores) + // { + // DrawableProfileScore drawableScore; + + // switch (type) + // { + // default: + // drawableScore = new DrawablePerformanceScore(score, includeWeight ? Math.Pow(0.95, ItemsContainer.Count) : (double?)null); + // break; + // case ScoreType.Recent: + // drawableScore = new DrawableTotalScore(score); + // break; + // } + + // ItemsContainer.Add(drawableScore); + // } + // }; + + // Api.Queue(req); + //} + } +} diff --git a/osu.Game/Overlays/Profile/Sections/RecentSection.cs b/osu.Game/Overlays/Profile/Sections/RecentSection.cs index 78b139efe8..757e2457d2 100644 --- a/osu.Game/Overlays/Profile/Sections/RecentSection.cs +++ b/osu.Game/Overlays/Profile/Sections/RecentSection.cs @@ -7,6 +7,14 @@ namespace osu.Game.Overlays.Profile.Sections { public override string Title => "Recent"; - public override string Identifier => "recent_activities"; + public override string Identifier => "recent_activity"; + + public RecentSection() + { + Children = new[] + { + new PaginatedRecentActivityContainer(User, @"Recent", @"This user hasn't done anything notable recently!"), + }; + } } } diff --git a/osu.Game/Overlays/UserProfileOverlay.cs b/osu.Game/Overlays/UserProfileOverlay.cs index 59f940a19d..3bc12ccb24 100644 --- a/osu.Game/Overlays/UserProfileOverlay.cs +++ b/osu.Game/Overlays/UserProfileOverlay.cs @@ -82,7 +82,7 @@ namespace osu.Game.Overlays sections = new ProfileSection[] { //new AboutSection(), - //new RecentSection(), + new RecentSection(), new RanksSection(), //new MedalsSection(), new HistoricalSection(), diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index 6a06bf540b..ad9105f1e8 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -293,12 +293,14 @@ + 20180125143340_Settings.cs + @@ -936,4 +938,4 @@ - + \ No newline at end of file From 7e4bd363916f6c85b18b94807c3b83981c7f323f Mon Sep 17 00:00:00 2001 From: naoey Date: Sun, 25 Feb 2018 22:41:47 +0530 Subject: [PATCH 166/544] Create drawable and add response to profile. - Add missing JSON fields to response model - Add missing enum value --- .../GetUserRecentActivitiesRequest.cs | 21 +++- .../Sections/Recent/DrawableRecentActivity.cs | 117 ++++++++++++++++++ .../PaginatedRecentActivityContainer.cs | 59 ++++----- osu.Game/osu.Game.csproj | 1 + 4 files changed, 161 insertions(+), 37 deletions(-) create mode 100644 osu.Game/Overlays/Profile/Sections/Recent/DrawableRecentActivity.cs diff --git a/osu.Game/Online/API/Requests/GetUserRecentActivitiesRequest.cs b/osu.Game/Online/API/Requests/GetUserRecentActivitiesRequest.cs index cb7d0323f4..14997b070b 100644 --- a/osu.Game/Online/API/Requests/GetUserRecentActivitiesRequest.cs +++ b/osu.Game/Online/API/Requests/GetUserRecentActivitiesRequest.cs @@ -7,12 +7,21 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using osu.Game.Rulesets; -using osu.Game.Overlays.Profile.Sections.Recent; namespace osu.Game.Online.API.Requests { public class GetUserRecentActivitiesRequest : APIRequest> { + private readonly long userId; + private readonly int offset; + + public GetUserRecentActivitiesRequest(long userId, int offset = 0) + { + this.userId = userId; + this.offset = offset; + } + + protected override string Target => $"users/{userId}/recent_activity?offset={offset}"; } public class RecentActivity @@ -42,6 +51,9 @@ namespace osu.Game.Online.API.Requests [JsonProperty("rank")] public int Rank; + [JsonProperty("count")] + public int Count; + [JsonProperty("mode")] public string Mode; @@ -51,6 +63,9 @@ namespace osu.Game.Online.API.Requests [JsonProperty("user")] public RecentActivityUser User; + [JsonProperty("achivementName")] + public string AchivementName; + public class RecentActivityBeatmap { [JsonProperty("title")] @@ -67,6 +82,9 @@ namespace osu.Game.Online.API.Requests [JsonProperty("url")] public string Url; + + [JsonProperty("previousUsername")] + public string PreviousUsername; } } @@ -78,6 +96,7 @@ namespace osu.Game.Online.API.Requests BeatmapsetDelete, BeatmapsetRevive, BeatmapsetUpdate, + BeatmapsetUpload, Medal, Rank, RankLost, diff --git a/osu.Game/Overlays/Profile/Sections/Recent/DrawableRecentActivity.cs b/osu.Game/Overlays/Profile/Sections/Recent/DrawableRecentActivity.cs new file mode 100644 index 0000000000..e0f7a97140 --- /dev/null +++ b/osu.Game/Overlays/Profile/Sections/Recent/DrawableRecentActivity.cs @@ -0,0 +1,117 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using osu.Framework.Allocation; +using osu.Framework.Graphics; +using osu.Framework.Graphics.Containers; +using osu.Game.Graphics; +using osu.Game.Graphics.Sprites; +using osu.Game.Online.API.Requests; +using osu.Game.Screens.Select.Leaderboards; +using osu.Game.Users; + +namespace osu.Game.Overlays.Profile.Sections.Recent +{ + public class DrawableRecentActivity : DrawableProfileRow + { + private RecentActivity activity; + private User user; + + public DrawableRecentActivity(RecentActivity activity, User user) + { + this.activity = activity; + this.user = user; + } + + [BackgroundDependencyLoader] + private void load() + { + LeftFlowContainer.Add(new OsuSpriteText + { + Text = activityToString(), + }); + + RightFlowContainer.Add(new OsuSpriteText + { + Text = activity.CreatedAt.LocalDateTime.ToShortDateString(), + Anchor = Anchor.TopRight, + Origin = Anchor.TopRight, + Font = "Exo2.0-RegularItalic", + TextSize = 12, + Colour = OsuColour.Gray(0xAA), + }); + } + + protected override Drawable CreateLeftVisual() + { + switch (activity.Type) + { + case RecentActivityType.Rank: + return new DrawableRank(activity.ScoreRank) + { + RelativeSizeAxes = Axes.Y, + Width = 60, + FillMode = FillMode.Fit, + }; + + default: + return new Container + { + RelativeSizeAxes = Axes.Y, + Width = 60, + FillMode = FillMode.Fit, + }; + } + } + + private string activityToString() + { + switch (activity.Type) + { + case RecentActivityType.Achievement: + return $"{activity.User.Username} unlocked the {activity.AchivementName} achievement!"; + + case RecentActivityType.BeatmapPlaycount: + return $"{activity.Beatmap.Title} has been played {activity.Count} times!"; + + case RecentActivityType.BeatmapsetDelete: + return $"{activity.Beatmap.Title} has been deleted."; + + case RecentActivityType.BeatmapsetRevive: + return $"{activity.Beatmap.Title} has been revived from eternal slumber by ${activity.User.Username}"; + + case RecentActivityType.BeatmapsetUpdate: + return $"{activity.User.Username} has updated the beatmap ${activity.Beatmap.Title}"; + + case RecentActivityType.BeatmapsetUpload: + return $"{activity.User.Username} has submitted a new beatmap ${activity.Beatmap.Title}"; + + case RecentActivityType.Medal: + return $"{activity.User.Username} has unlocked the {activity.AchivementName} medal!"; + + case RecentActivityType.Rank: + return $"{activity.User.Username} achieved rank #{activity.Rank} on {activity.Beatmap?.Title}"; + + case RecentActivityType.RankLost: + return $"{activity.User.Username} has lost first place on {activity.Beatmap.Title}!"; + + case RecentActivityType.UserSupportAgain: + return $"{activity.User.Username} has once again chosen to support osu! - thanks for your generosity!"; + + case RecentActivityType.UserSupportFirst: + return $"{activity.User.Username} has become an osu! supporter - thanks for your generosity!"; + + case RecentActivityType.UsernameChange: + return $"{activity.User.PreviousUsername} has changed their username to {activity.User.Username}"; + + case RecentActivityType.UserSupportGift: + return $"{activity.User.Username} has received the gift of osu! supporter!"; + + default: + return string.Empty; + } + } + } +} diff --git a/osu.Game/Overlays/Profile/Sections/Recent/PaginatedRecentActivityContainer.cs b/osu.Game/Overlays/Profile/Sections/Recent/PaginatedRecentActivityContainer.cs index 11b48ad68e..307c06b744 100644 --- a/osu.Game/Overlays/Profile/Sections/Recent/PaginatedRecentActivityContainer.cs +++ b/osu.Game/Overlays/Profile/Sections/Recent/PaginatedRecentActivityContainer.cs @@ -1,5 +1,7 @@ using osu.Framework.Configuration; +using osu.Framework.Graphics; using osu.Game.Online.API.Requests; +using osu.Game.Overlays.Profile.Sections.Recent; using osu.Game.Users; using System; using System.Collections.Generic; @@ -17,47 +19,32 @@ namespace osu.Game.Overlays.Profile.Sections ItemsPerPage = 5; } - //protected override void ShowMore() - //{ - // base.ShowMore(); + protected override void ShowMore() + { + base.ShowMore(); - // var req = new GetUserRecentActivitiesRequest(User.Value.Id, VisiblePages++ * ItemsPerPage); + var req = new GetUserRecentActivitiesRequest(User.Value.Id, VisiblePages++ * ItemsPerPage); - // req.Success += scores => - // { - // foreach (var s in scores) - // s.ApplyRuleset(Rulesets.GetRuleset(s.OnlineRulesetID)); + req.Success += activities => + { + ShowMoreButton.FadeTo(activities.Count == ItemsPerPage ? 1 : 0); + ShowMoreLoading.Hide(); - // ShowMoreButton.FadeTo(scores.Count == ItemsPerPage ? 1 : 0); - // ShowMoreLoading.Hide(); + if (!activities.Any() && VisiblePages == 1) + { + MissingText.Show(); + return; + } - // if (!scores.Any() && VisiblePages == 1) - // { - // MissingText.Show(); - // return; - // } + MissingText.Hide(); - // MissingText.Hide(); + foreach (RecentActivity activity in activities) + { + ItemsContainer.Add(new DrawableRecentActivity(activity, User)); + } + }; - // foreach (OnlineScore score in scores) - // { - // DrawableProfileScore drawableScore; - - // switch (type) - // { - // default: - // drawableScore = new DrawablePerformanceScore(score, includeWeight ? Math.Pow(0.95, ItemsContainer.Count) : (double?)null); - // break; - // case ScoreType.Recent: - // drawableScore = new DrawableTotalScore(score); - // break; - // } - - // ItemsContainer.Add(drawableScore); - // } - // }; - - // Api.Queue(req); - //} + Api.Queue(req); + } } } diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index ad9105f1e8..cd40b42365 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -300,6 +300,7 @@ 20180125143340_Settings.cs + From bb40919f9ce2e8948ac73548cd075ac3024ce1d3 Mon Sep 17 00:00:00 2001 From: naoey Date: Mon, 26 Feb 2018 00:36:55 +0530 Subject: [PATCH 167/544] Add link handling to recent activities. - Add a show user action to link handling --- .../Graphics/Containers/LinkFlowContainer.cs | 7 ++- osu.Game/Online/Chat/MessageFormatter.cs | 15 ++++++ .../Sections/Recent/DrawableRecentActivity.cs | 54 +++++++++++++------ osu.Game/Overlays/UserProfileOverlay.cs | 5 ++ 4 files changed, 64 insertions(+), 17 deletions(-) diff --git a/osu.Game/Graphics/Containers/LinkFlowContainer.cs b/osu.Game/Graphics/Containers/LinkFlowContainer.cs index 9f1b44af44..8edae7a976 100644 --- a/osu.Game/Graphics/Containers/LinkFlowContainer.cs +++ b/osu.Game/Graphics/Containers/LinkFlowContainer.cs @@ -23,14 +23,16 @@ namespace osu.Game.Graphics.Containers public override bool HandleMouseInput => true; private OsuGame game; + private UserProfileOverlay userProfile; private Action showNotImplementedError; [BackgroundDependencyLoader(true)] - private void load(OsuGame game, NotificationOverlay notifications) + private void load(OsuGame game, NotificationOverlay notifications, UserProfileOverlay userProfile) { // will be null in tests this.game = game; + this.userProfile = userProfile; showNotImplementedError = () => notifications?.Post(new SimpleNotification { @@ -90,6 +92,9 @@ namespace osu.Game.Graphics.Containers case LinkAction.External: Process.Start(url); break; + case LinkAction.OpenUserProfile: + userProfile?.ShowUser(Convert.ToInt64(linkArgument)); + break; default: throw new NotImplementedException($"This {nameof(LinkAction)} ({linkType.ToString()}) is missing an associated action."); } diff --git a/osu.Game/Online/Chat/MessageFormatter.cs b/osu.Game/Online/Chat/MessageFormatter.cs index 906f42d50e..3fdce3ec12 100644 --- a/osu.Game/Online/Chat/MessageFormatter.cs +++ b/osu.Game/Online/Chat/MessageFormatter.cs @@ -118,6 +118,8 @@ namespace osu.Game.Online.Chat case "beatmapsets": case "d": return new LinkDetails(LinkAction.OpenBeatmapSet, args[3]); + case "u": + return new LinkDetails(LinkAction.OpenUserProfile, args[3]); } } @@ -146,6 +148,9 @@ namespace osu.Game.Online.Chat case "spectate": linkType = LinkAction.Spectate; break; + case "u": + linkType = LinkAction.OpenUserProfile; + break; default: linkType = LinkAction.External; break; @@ -205,6 +210,15 @@ namespace osu.Game.Online.Chat return inputMessage; } + public static List GetLinks(string text) + { + var result = format(text); + + result.Links.Sort(); + + return result.Links; + } + public class MessageFormatterResult { public List Links = new List(); @@ -239,6 +253,7 @@ namespace osu.Game.Online.Chat OpenEditorTimestamp, JoinMultiplayerMatch, Spectate, + OpenUserProfile, } public class Link : IComparable diff --git a/osu.Game/Overlays/Profile/Sections/Recent/DrawableRecentActivity.cs b/osu.Game/Overlays/Profile/Sections/Recent/DrawableRecentActivity.cs index e0f7a97140..6abf68e3e9 100644 --- a/osu.Game/Overlays/Profile/Sections/Recent/DrawableRecentActivity.cs +++ b/osu.Game/Overlays/Profile/Sections/Recent/DrawableRecentActivity.cs @@ -7,10 +7,14 @@ using osu.Framework.Allocation; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Game.Graphics; +using osu.Game.Graphics.Containers; using osu.Game.Graphics.Sprites; +using osu.Game.Online.API; using osu.Game.Online.API.Requests; +using osu.Game.Online.Chat; using osu.Game.Screens.Select.Leaderboards; using osu.Game.Users; +using static osu.Game.Online.API.Requests.RecentActivity; namespace osu.Game.Overlays.Profile.Sections.Recent { @@ -18,19 +22,31 @@ namespace osu.Game.Overlays.Profile.Sections.Recent { private RecentActivity activity; private User user; + private APIAccess api; + + private string userLinkTemplate; + private string beatmapLinkTemplate; + + private LinkFlowContainer content; public DrawableRecentActivity(RecentActivity activity, User user) { this.activity = activity; this.user = user; + + userLinkTemplate = $"[{activity.User?.Username}]({urlToAbsolute(activity.User?.Url)})"; + beatmapLinkTemplate = $"[{activity.Beatmap?.Title}]({urlToAbsolute(activity.Beatmap?.Url)})"; } [BackgroundDependencyLoader] - private void load() + private void load(APIAccess api) { - LeftFlowContainer.Add(new OsuSpriteText + this.api = api; + + LeftFlowContainer.Add(content = new LinkFlowContainer { - Text = activityToString(), + AutoSizeAxes = Axes.Y, + RelativeSizeAxes = Axes.X, }); RightFlowContainer.Add(new OsuSpriteText @@ -42,6 +58,10 @@ namespace osu.Game.Overlays.Profile.Sections.Recent TextSize = 12, Colour = OsuColour.Gray(0xAA), }); + + string text = activityToString(); + + content.AddLinks(text, MessageFormatter.GetLinks(text)); } protected override Drawable CreateLeftVisual() @@ -66,48 +86,50 @@ namespace osu.Game.Overlays.Profile.Sections.Recent } } + private string urlToAbsolute(string url) => $"{api?.Endpoint ?? @"https://osu.ppy.sh"}{url}"; + private string activityToString() { switch (activity.Type) { case RecentActivityType.Achievement: - return $"{activity.User.Username} unlocked the {activity.AchivementName} achievement!"; + return $"{userLinkTemplate} unlocked the {activity.AchivementName} achievement!"; case RecentActivityType.BeatmapPlaycount: - return $"{activity.Beatmap.Title} has been played {activity.Count} times!"; + return $"{beatmapLinkTemplate} has been played {activity.Count} times!"; case RecentActivityType.BeatmapsetDelete: - return $"{activity.Beatmap.Title} has been deleted."; + return $"{beatmapLinkTemplate} has been deleted."; case RecentActivityType.BeatmapsetRevive: - return $"{activity.Beatmap.Title} has been revived from eternal slumber by ${activity.User.Username}"; + return $"{beatmapLinkTemplate} has been revived from eternal slumber by ${userLinkTemplate}"; case RecentActivityType.BeatmapsetUpdate: - return $"{activity.User.Username} has updated the beatmap ${activity.Beatmap.Title}"; + return $"{userLinkTemplate} has updated the beatmap ${beatmapLinkTemplate}"; case RecentActivityType.BeatmapsetUpload: - return $"{activity.User.Username} has submitted a new beatmap ${activity.Beatmap.Title}"; + return $"{userLinkTemplate} has submitted a new beatmap ${beatmapLinkTemplate}"; case RecentActivityType.Medal: - return $"{activity.User.Username} has unlocked the {activity.AchivementName} medal!"; + return $"{userLinkTemplate} has unlocked the {activity.AchivementName} medal!"; case RecentActivityType.Rank: - return $"{activity.User.Username} achieved rank #{activity.Rank} on {activity.Beatmap?.Title}"; + return $"{userLinkTemplate} achieved rank #{activity.Rank} on {beatmapLinkTemplate}"; case RecentActivityType.RankLost: - return $"{activity.User.Username} has lost first place on {activity.Beatmap.Title}!"; + return $"{userLinkTemplate} has lost first place on {beatmapLinkTemplate}!"; case RecentActivityType.UserSupportAgain: - return $"{activity.User.Username} has once again chosen to support osu! - thanks for your generosity!"; + return $"{userLinkTemplate} has once again chosen to support osu! - thanks for your generosity!"; case RecentActivityType.UserSupportFirst: - return $"{activity.User.Username} has become an osu! supporter - thanks for your generosity!"; + return $"{userLinkTemplate} has become an osu! supporter - thanks for your generosity!"; case RecentActivityType.UsernameChange: - return $"{activity.User.PreviousUsername} has changed their username to {activity.User.Username}"; + return $"{activity.User.PreviousUsername} has changed their username to {userLinkTemplate}"; case RecentActivityType.UserSupportGift: - return $"{activity.User.Username} has received the gift of osu! supporter!"; + return $"{userLinkTemplate} has received the gift of osu! supporter!"; default: return string.Empty; diff --git a/osu.Game/Overlays/UserProfileOverlay.cs b/osu.Game/Overlays/UserProfileOverlay.cs index 3bc12ccb24..39cb71ea27 100644 --- a/osu.Game/Overlays/UserProfileOverlay.cs +++ b/osu.Game/Overlays/UserProfileOverlay.cs @@ -73,6 +73,11 @@ namespace osu.Game.Overlays FadeEdgeEffectTo(0, DISAPPEAR_DURATION, Easing.Out); } + public void ShowUser(long userId) + { + ShowUser(new User { Id = userId }, true); + } + public void ShowUser(User user, bool fetchOnline = true) { userReq?.Cancel(); From 75fdca928e9d19ae12e2a8ce739cc9af42fda20b Mon Sep 17 00:00:00 2001 From: naoey Date: Mon, 26 Feb 2018 00:58:20 +0530 Subject: [PATCH 168/544] Handle links correctly and don't re-open profile if the user is same. --- osu.Game/Online/Chat/MessageFormatter.cs | 4 ++-- .../Profile/Sections/Recent/DrawableRecentActivity.cs | 8 ++++---- osu.Game/Overlays/UserProfileOverlay.cs | 3 +++ 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/osu.Game/Online/Chat/MessageFormatter.cs b/osu.Game/Online/Chat/MessageFormatter.cs index 3fdce3ec12..9966f78435 100644 --- a/osu.Game/Online/Chat/MessageFormatter.cs +++ b/osu.Game/Online/Chat/MessageFormatter.cs @@ -210,13 +210,13 @@ namespace osu.Game.Online.Chat return inputMessage; } - public static List GetLinks(string text) + public static MessageFormatterResult FormatText(string text) { var result = format(text); result.Links.Sort(); - return result.Links; + return result; } public class MessageFormatterResult diff --git a/osu.Game/Overlays/Profile/Sections/Recent/DrawableRecentActivity.cs b/osu.Game/Overlays/Profile/Sections/Recent/DrawableRecentActivity.cs index 6abf68e3e9..4d215467bb 100644 --- a/osu.Game/Overlays/Profile/Sections/Recent/DrawableRecentActivity.cs +++ b/osu.Game/Overlays/Profile/Sections/Recent/DrawableRecentActivity.cs @@ -34,8 +34,8 @@ namespace osu.Game.Overlays.Profile.Sections.Recent this.activity = activity; this.user = user; - userLinkTemplate = $"[{activity.User?.Username}]({urlToAbsolute(activity.User?.Url)})"; - beatmapLinkTemplate = $"[{activity.Beatmap?.Title}]({urlToAbsolute(activity.Beatmap?.Url)})"; + userLinkTemplate = $"[{urlToAbsolute(activity.User?.Url)} {activity.User?.Username}]"; + beatmapLinkTemplate = $"[{urlToAbsolute(activity.Beatmap?.Url)} {activity.Beatmap?.Title}]"; } [BackgroundDependencyLoader] @@ -59,9 +59,9 @@ namespace osu.Game.Overlays.Profile.Sections.Recent Colour = OsuColour.Gray(0xAA), }); - string text = activityToString(); + var formatted = MessageFormatter.FormatText(activityToString()); - content.AddLinks(text, MessageFormatter.GetLinks(text)); + content.AddLinks(formatted.Text, formatted.Links); } protected override Drawable CreateLeftVisual() diff --git a/osu.Game/Overlays/UserProfileOverlay.cs b/osu.Game/Overlays/UserProfileOverlay.cs index 39cb71ea27..f19fc4062c 100644 --- a/osu.Game/Overlays/UserProfileOverlay.cs +++ b/osu.Game/Overlays/UserProfileOverlay.cs @@ -75,6 +75,9 @@ namespace osu.Game.Overlays public void ShowUser(long userId) { + if (userId == Header.User.Id) + return; + ShowUser(new User { Id = userId }, true); } From 1ad45b094178dc644ffcbc3ca808a2cb1c4ad0ac Mon Sep 17 00:00:00 2001 From: naoey Date: Mon, 26 Feb 2018 01:16:46 +0530 Subject: [PATCH 169/544] R# fixes. --- .../GetUserRecentActivitiesRequest.cs | 4 ---- .../Sections/Recent/DrawableRecentActivity.cs | 19 +++++-------------- .../PaginatedRecentActivityContainer.cs | 11 +++-------- .../Profile/Sections/RecentSection.cs | 2 ++ osu.Game/Overlays/UserProfileOverlay.cs | 2 +- 5 files changed, 11 insertions(+), 27 deletions(-) diff --git a/osu.Game/Online/API/Requests/GetUserRecentActivitiesRequest.cs b/osu.Game/Online/API/Requests/GetUserRecentActivitiesRequest.cs index 14997b070b..d52d0c884e 100644 --- a/osu.Game/Online/API/Requests/GetUserRecentActivitiesRequest.cs +++ b/osu.Game/Online/API/Requests/GetUserRecentActivitiesRequest.cs @@ -3,10 +3,6 @@ using osu.Game.Rulesets.Scoring; using Humanizer; using System; using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using osu.Game.Rulesets; namespace osu.Game.Online.API.Requests { diff --git a/osu.Game/Overlays/Profile/Sections/Recent/DrawableRecentActivity.cs b/osu.Game/Overlays/Profile/Sections/Recent/DrawableRecentActivity.cs index 4d215467bb..940cd7f5ac 100644 --- a/osu.Game/Overlays/Profile/Sections/Recent/DrawableRecentActivity.cs +++ b/osu.Game/Overlays/Profile/Sections/Recent/DrawableRecentActivity.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using osu.Framework.Allocation; +using osu.Framework.Allocation; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Game.Graphics; @@ -13,26 +8,22 @@ using osu.Game.Online.API; using osu.Game.Online.API.Requests; using osu.Game.Online.Chat; using osu.Game.Screens.Select.Leaderboards; -using osu.Game.Users; -using static osu.Game.Online.API.Requests.RecentActivity; namespace osu.Game.Overlays.Profile.Sections.Recent { public class DrawableRecentActivity : DrawableProfileRow { - private RecentActivity activity; - private User user; private APIAccess api; - private string userLinkTemplate; - private string beatmapLinkTemplate; + private readonly RecentActivity activity; + private readonly string userLinkTemplate; + private readonly string beatmapLinkTemplate; private LinkFlowContainer content; - public DrawableRecentActivity(RecentActivity activity, User user) + public DrawableRecentActivity(RecentActivity activity) { this.activity = activity; - this.user = user; userLinkTemplate = $"[{urlToAbsolute(activity.User?.Url)} {activity.User?.Username}]"; beatmapLinkTemplate = $"[{urlToAbsolute(activity.Beatmap?.Url)} {activity.Beatmap?.Title}]"; diff --git a/osu.Game/Overlays/Profile/Sections/Recent/PaginatedRecentActivityContainer.cs b/osu.Game/Overlays/Profile/Sections/Recent/PaginatedRecentActivityContainer.cs index 307c06b744..f1857096aa 100644 --- a/osu.Game/Overlays/Profile/Sections/Recent/PaginatedRecentActivityContainer.cs +++ b/osu.Game/Overlays/Profile/Sections/Recent/PaginatedRecentActivityContainer.cs @@ -1,17 +1,12 @@ using osu.Framework.Configuration; using osu.Framework.Graphics; using osu.Game.Online.API.Requests; -using osu.Game.Overlays.Profile.Sections.Recent; using osu.Game.Users; -using System; -using System.Collections.Generic; using System.Linq; -using System.Text; -using System.Threading.Tasks; -namespace osu.Game.Overlays.Profile.Sections +namespace osu.Game.Overlays.Profile.Sections.Recent { - class PaginatedRecentActivityContainer : PaginatedContainer + internal class PaginatedRecentActivityContainer : PaginatedContainer { public PaginatedRecentActivityContainer(Bindable user, string header, string missing) : base(user, header, missing) @@ -40,7 +35,7 @@ namespace osu.Game.Overlays.Profile.Sections foreach (RecentActivity activity in activities) { - ItemsContainer.Add(new DrawableRecentActivity(activity, User)); + ItemsContainer.Add(new DrawableRecentActivity(activity)); } }; diff --git a/osu.Game/Overlays/Profile/Sections/RecentSection.cs b/osu.Game/Overlays/Profile/Sections/RecentSection.cs index 757e2457d2..db97dca440 100644 --- a/osu.Game/Overlays/Profile/Sections/RecentSection.cs +++ b/osu.Game/Overlays/Profile/Sections/RecentSection.cs @@ -1,6 +1,8 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using osu.Game.Overlays.Profile.Sections.Recent; + namespace osu.Game.Overlays.Profile.Sections { public class RecentSection : ProfileSection diff --git a/osu.Game/Overlays/UserProfileOverlay.cs b/osu.Game/Overlays/UserProfileOverlay.cs index f19fc4062c..f3fd7aeac5 100644 --- a/osu.Game/Overlays/UserProfileOverlay.cs +++ b/osu.Game/Overlays/UserProfileOverlay.cs @@ -78,7 +78,7 @@ namespace osu.Game.Overlays if (userId == Header.User.Id) return; - ShowUser(new User { Id = userId }, true); + ShowUser(new User { Id = userId }); } public void ShowUser(User user, bool fetchOnline = true) From 5724618b2a3f8109254246c493b00738fa1117df Mon Sep 17 00:00:00 2001 From: naoey Date: Mon, 26 Feb 2018 09:38:37 +0530 Subject: [PATCH 170/544] Add license headers and sanitise open profile argument. --- osu.Game/Graphics/Containers/LinkFlowContainer.cs | 3 ++- .../Online/API/Requests/GetUserRecentActivitiesRequest.cs | 5 ++++- .../Profile/Sections/Recent/DrawableRecentActivity.cs | 5 ++++- .../Sections/Recent/PaginatedRecentActivityContainer.cs | 5 ++++- 4 files changed, 14 insertions(+), 4 deletions(-) diff --git a/osu.Game/Graphics/Containers/LinkFlowContainer.cs b/osu.Game/Graphics/Containers/LinkFlowContainer.cs index 8edae7a976..c16ccbce86 100644 --- a/osu.Game/Graphics/Containers/LinkFlowContainer.cs +++ b/osu.Game/Graphics/Containers/LinkFlowContainer.cs @@ -93,7 +93,8 @@ namespace osu.Game.Graphics.Containers Process.Start(url); break; case LinkAction.OpenUserProfile: - userProfile?.ShowUser(Convert.ToInt64(linkArgument)); + if (long.TryParse(linkArgument, out long userId)) + userProfile?.ShowUser(userId); break; default: throw new NotImplementedException($"This {nameof(LinkAction)} ({linkType.ToString()}) is missing an associated action."); diff --git a/osu.Game/Online/API/Requests/GetUserRecentActivitiesRequest.cs b/osu.Game/Online/API/Requests/GetUserRecentActivitiesRequest.cs index d52d0c884e..451c39fdfe 100644 --- a/osu.Game/Online/API/Requests/GetUserRecentActivitiesRequest.cs +++ b/osu.Game/Online/API/Requests/GetUserRecentActivitiesRequest.cs @@ -1,4 +1,7 @@ -using Newtonsoft.Json; +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using Newtonsoft.Json; using osu.Game.Rulesets.Scoring; using Humanizer; using System; diff --git a/osu.Game/Overlays/Profile/Sections/Recent/DrawableRecentActivity.cs b/osu.Game/Overlays/Profile/Sections/Recent/DrawableRecentActivity.cs index 940cd7f5ac..901791d340 100644 --- a/osu.Game/Overlays/Profile/Sections/Recent/DrawableRecentActivity.cs +++ b/osu.Game/Overlays/Profile/Sections/Recent/DrawableRecentActivity.cs @@ -1,4 +1,7 @@ -using osu.Framework.Allocation; +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using osu.Framework.Allocation; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Game.Graphics; diff --git a/osu.Game/Overlays/Profile/Sections/Recent/PaginatedRecentActivityContainer.cs b/osu.Game/Overlays/Profile/Sections/Recent/PaginatedRecentActivityContainer.cs index f1857096aa..3de005cf9b 100644 --- a/osu.Game/Overlays/Profile/Sections/Recent/PaginatedRecentActivityContainer.cs +++ b/osu.Game/Overlays/Profile/Sections/Recent/PaginatedRecentActivityContainer.cs @@ -1,4 +1,7 @@ -using osu.Framework.Configuration; +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using osu.Framework.Configuration; using osu.Framework.Graphics; using osu.Game.Online.API.Requests; using osu.Game.Users; From a20e4bc2c3494f37d14448f8ccb1d712dad5a0f5 Mon Sep 17 00:00:00 2001 From: naoey Date: Mon, 26 Feb 2018 11:46:16 +0530 Subject: [PATCH 171/544] Fix typos and missing fields in JSON mappings. --- .../GetUserRecentActivitiesRequest.cs | 17 +++++++++++-- .../Sections/Recent/DrawableRecentActivity.cs | 25 ++++++++++++------- 2 files changed, 31 insertions(+), 11 deletions(-) diff --git a/osu.Game/Online/API/Requests/GetUserRecentActivitiesRequest.cs b/osu.Game/Online/API/Requests/GetUserRecentActivitiesRequest.cs index 451c39fdfe..7926bd9d34 100644 --- a/osu.Game/Online/API/Requests/GetUserRecentActivitiesRequest.cs +++ b/osu.Game/Online/API/Requests/GetUserRecentActivitiesRequest.cs @@ -28,7 +28,7 @@ namespace osu.Game.Online.API.Requests [JsonProperty("id")] public int ID; - [JsonProperty("created_at")] + [JsonProperty("createdAt")] public DateTimeOffset CreatedAt; [JsonProperty] @@ -50,6 +50,9 @@ namespace osu.Game.Online.API.Requests [JsonProperty("rank")] public int Rank; + [JsonProperty("approval")] + public BeatmapApproval Approval; + [JsonProperty("count")] public int Count; @@ -59,10 +62,13 @@ namespace osu.Game.Online.API.Requests [JsonProperty("beatmap")] public RecentActivityBeatmap Beatmap; + [JsonProperty("beatmapset")] + public RecentActivityBeatmap Beatmapset; + [JsonProperty("user")] public RecentActivityUser User; - [JsonProperty("achivementName")] + [JsonProperty("achievementName")] public string AchivementName; public class RecentActivityBeatmap @@ -104,4 +110,11 @@ namespace osu.Game.Online.API.Requests UserSupportGift, UsernameChange, } + + public enum BeatmapApproval + { + Ranked, + Approved, + Qualified, + } } diff --git a/osu.Game/Overlays/Profile/Sections/Recent/DrawableRecentActivity.cs b/osu.Game/Overlays/Profile/Sections/Recent/DrawableRecentActivity.cs index 901791d340..012418967f 100644 --- a/osu.Game/Overlays/Profile/Sections/Recent/DrawableRecentActivity.cs +++ b/osu.Game/Overlays/Profile/Sections/Recent/DrawableRecentActivity.cs @@ -21,6 +21,7 @@ namespace osu.Game.Overlays.Profile.Sections.Recent private readonly RecentActivity activity; private readonly string userLinkTemplate; private readonly string beatmapLinkTemplate; + private readonly string beatmapsetLinkTemplate; private LinkFlowContainer content; @@ -30,6 +31,7 @@ namespace osu.Game.Overlays.Profile.Sections.Recent userLinkTemplate = $"[{urlToAbsolute(activity.User?.Url)} {activity.User?.Username}]"; beatmapLinkTemplate = $"[{urlToAbsolute(activity.Beatmap?.Url)} {activity.Beatmap?.Title}]"; + beatmapsetLinkTemplate = $"[{urlToAbsolute(activity.Beatmapset?.Url)} {activity.Beatmapset?.Title}]"; } [BackgroundDependencyLoader] @@ -70,6 +72,8 @@ namespace osu.Game.Overlays.Profile.Sections.Recent FillMode = FillMode.Fit, }; + case RecentActivityType.Medal: + // TODO: add medal visual default: return new Container { @@ -92,26 +96,29 @@ namespace osu.Game.Overlays.Profile.Sections.Recent case RecentActivityType.BeatmapPlaycount: return $"{beatmapLinkTemplate} has been played {activity.Count} times!"; + case RecentActivityType.BeatmapsetApprove: + return $"{beatmapsetLinkTemplate} has been {activity.Approval.ToString().ToLowerInvariant()}!"; + case RecentActivityType.BeatmapsetDelete: - return $"{beatmapLinkTemplate} has been deleted."; + return $"{beatmapsetLinkTemplate} has been deleted."; case RecentActivityType.BeatmapsetRevive: - return $"{beatmapLinkTemplate} has been revived from eternal slumber by ${userLinkTemplate}"; + return $"{beatmapsetLinkTemplate} has been revived from eternal slumber by {userLinkTemplate}."; case RecentActivityType.BeatmapsetUpdate: - return $"{userLinkTemplate} has updated the beatmap ${beatmapLinkTemplate}"; + return $"{userLinkTemplate} has updated the beatmap {beatmapsetLinkTemplate}!"; case RecentActivityType.BeatmapsetUpload: - return $"{userLinkTemplate} has submitted a new beatmap ${beatmapLinkTemplate}"; + return $"{userLinkTemplate} has submitted a new beatmap {beatmapsetLinkTemplate}!"; case RecentActivityType.Medal: return $"{userLinkTemplate} has unlocked the {activity.AchivementName} medal!"; case RecentActivityType.Rank: - return $"{userLinkTemplate} achieved rank #{activity.Rank} on {beatmapLinkTemplate}"; + return $"{userLinkTemplate} achieved rank #{activity.Rank} on {beatmapLinkTemplate} ({activity.Mode}!)"; case RecentActivityType.RankLost: - return $"{userLinkTemplate} has lost first place on {beatmapLinkTemplate}!"; + return $"{userLinkTemplate} has lost first place on {beatmapLinkTemplate} ({activity.Mode}!)"; case RecentActivityType.UserSupportAgain: return $"{userLinkTemplate} has once again chosen to support osu! - thanks for your generosity!"; @@ -119,12 +126,12 @@ namespace osu.Game.Overlays.Profile.Sections.Recent case RecentActivityType.UserSupportFirst: return $"{userLinkTemplate} has become an osu! supporter - thanks for your generosity!"; - case RecentActivityType.UsernameChange: - return $"{activity.User.PreviousUsername} has changed their username to {userLinkTemplate}"; - case RecentActivityType.UserSupportGift: return $"{userLinkTemplate} has received the gift of osu! supporter!"; + case RecentActivityType.UsernameChange: + return $"{activity.User.PreviousUsername} has changed their username to {userLinkTemplate}!"; + default: return string.Empty; } From 1218a75b7f2c2e49c821502e5d15867d77298db3 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Mon, 26 Feb 2018 16:11:26 +0900 Subject: [PATCH 172/544] Improve vector conditional --- osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs index d5c2067fec..ede84e7737 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs @@ -113,7 +113,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables Size = Body.Size; OriginPosition = Body.PathOffset; - if (DrawSize.X > 0 && DrawSize.Y > 0) + if (DrawSize != Vector2.Zero) { var childAnchorPosition = Vector2.Divide(OriginPosition, DrawSize); foreach (var obj in NestedHitObjects) From a77d1eedae0b2756e5ad7cb6ac96d87eb7c8d129 Mon Sep 17 00:00:00 2001 From: naoey Date: Mon, 26 Feb 2018 13:08:12 +0530 Subject: [PATCH 173/544] Fix achievements parsing and add badges to recent activity. --- .../GetUserRecentActivitiesRequest.cs | 14 ++++++- .../Sections/Recent/DrawableRecentActivity.cs | 15 ++++++-- .../Profile/Sections/Recent/MedalIcon.cs | 38 +++++++++++++++++++ osu.Game/osu.Game.csproj | 1 + 4 files changed, 62 insertions(+), 6 deletions(-) create mode 100644 osu.Game/Overlays/Profile/Sections/Recent/MedalIcon.cs diff --git a/osu.Game/Online/API/Requests/GetUserRecentActivitiesRequest.cs b/osu.Game/Online/API/Requests/GetUserRecentActivitiesRequest.cs index 7926bd9d34..d1685b01f3 100644 --- a/osu.Game/Online/API/Requests/GetUserRecentActivitiesRequest.cs +++ b/osu.Game/Online/API/Requests/GetUserRecentActivitiesRequest.cs @@ -68,8 +68,8 @@ namespace osu.Game.Online.API.Requests [JsonProperty("user")] public RecentActivityUser User; - [JsonProperty("achievementName")] - public string AchivementName; + [JsonProperty("achievement")] + public RecentActivityAchievement Achievement; public class RecentActivityBeatmap { @@ -91,6 +91,16 @@ namespace osu.Game.Online.API.Requests [JsonProperty("previousUsername")] public string PreviousUsername; } + + public class RecentActivityAchievement + { + [JsonProperty("slug")] + public string Slug; + + [JsonProperty("name")] + public string Name; + } + } public enum RecentActivityType diff --git a/osu.Game/Overlays/Profile/Sections/Recent/DrawableRecentActivity.cs b/osu.Game/Overlays/Profile/Sections/Recent/DrawableRecentActivity.cs index 012418967f..282b2e242a 100644 --- a/osu.Game/Overlays/Profile/Sections/Recent/DrawableRecentActivity.cs +++ b/osu.Game/Overlays/Profile/Sections/Recent/DrawableRecentActivity.cs @@ -72,8 +72,14 @@ namespace osu.Game.Overlays.Profile.Sections.Recent FillMode = FillMode.Fit, }; - case RecentActivityType.Medal: - // TODO: add medal visual + case RecentActivityType.Achievement: + return new MedalIcon(activity.Achievement.Slug) + { + RelativeSizeAxes = Axes.Y, + Width = 60, + FillMode = FillMode.Fit, + }; + default: return new Container { @@ -91,7 +97,7 @@ namespace osu.Game.Overlays.Profile.Sections.Recent switch (activity.Type) { case RecentActivityType.Achievement: - return $"{userLinkTemplate} unlocked the {activity.AchivementName} achievement!"; + return $"{userLinkTemplate} unlocked the {activity.Achievement.Name} medal!"; case RecentActivityType.BeatmapPlaycount: return $"{beatmapLinkTemplate} has been played {activity.Count} times!"; @@ -112,7 +118,8 @@ namespace osu.Game.Overlays.Profile.Sections.Recent return $"{userLinkTemplate} has submitted a new beatmap {beatmapsetLinkTemplate}!"; case RecentActivityType.Medal: - return $"{userLinkTemplate} has unlocked the {activity.AchivementName} medal!"; + // apparently this shouldn't exist look at achievement instead (https://github.com/ppy/osu-web/blob/master/resources/assets/coffee/react/profile-page/recent-activity.coffee#L111) + return string.Empty; case RecentActivityType.Rank: return $"{userLinkTemplate} achieved rank #{activity.Rank} on {beatmapLinkTemplate} ({activity.Mode}!)"; diff --git a/osu.Game/Overlays/Profile/Sections/Recent/MedalIcon.cs b/osu.Game/Overlays/Profile/Sections/Recent/MedalIcon.cs new file mode 100644 index 0000000000..9ef2b89269 --- /dev/null +++ b/osu.Game/Overlays/Profile/Sections/Recent/MedalIcon.cs @@ -0,0 +1,38 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using osu.Framework.Allocation; +using osu.Framework.Graphics.Containers; +using osu.Framework.Graphics; +using osu.Framework.Graphics.Sprites; +using osu.Framework.Graphics.Textures; + +namespace osu.Game.Overlays.Profile.Sections.Recent +{ + internal class MedalIcon : Container + { + private readonly string slug; + private readonly Sprite sprite; + + private string url => $@"https://s.ppy.sh/images/medals-client/{slug}@2x.png"; + + public MedalIcon(string slug) + { + this.slug = slug; + + Child = sprite = new Sprite + { + Height = 40, + Width = 40, + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + }; + } + + [BackgroundDependencyLoader] + private void load(TextureStore textures) + { + sprite.Texture = textures.Get(url); + } + } +} diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index cd40b42365..e420ec6b71 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -301,6 +301,7 @@ + From 31cf00e3b83f04aee8c2d28325239f0b1060431d Mon Sep 17 00:00:00 2001 From: Poyo Date: Sun, 25 Feb 2018 23:52:38 -0800 Subject: [PATCH 174/544] Implement mania star difficulty calculation --- .../ManiaDifficultyCalculator.cs | 124 +++++++++++++++++- .../Objects/ManiaHitObjectDifficulty.cs | 114 ++++++++++++++++ .../osu.Game.Rulesets.Mania.csproj | 1 + 3 files changed, 238 insertions(+), 1 deletion(-) create mode 100644 osu.Game.Rulesets.Mania/Objects/ManiaHitObjectDifficulty.cs diff --git a/osu.Game.Rulesets.Mania/ManiaDifficultyCalculator.cs b/osu.Game.Rulesets.Mania/ManiaDifficultyCalculator.cs index 75a8543548..62d2929f27 100644 --- a/osu.Game.Rulesets.Mania/ManiaDifficultyCalculator.cs +++ b/osu.Game.Rulesets.Mania/ManiaDifficultyCalculator.cs @@ -4,18 +4,140 @@ using osu.Game.Beatmaps; using osu.Game.Rulesets.Mania.Beatmaps; using osu.Game.Rulesets.Mania.Objects; +using System; using System.Collections.Generic; namespace osu.Game.Rulesets.Mania { public class ManiaDifficultyCalculator : DifficultyCalculator { + private const double star_scaling_factor = 0.018; + + /// + /// In milliseconds. For difficulty calculation we will only look at the highest strain value in each time interval of size strain_step. + /// This is to eliminate higher influence of stream over aim by simply having more HitObjects with high strain. + /// The higher this value, the less strains there will be, indirectly giving long beatmaps an advantage. + /// + protected const double strain_step = 400; + + /// + /// The weighting of each strain value decays to this number * it's previous value + /// + protected const double decay_weight = 0.9; + + /// + /// HitObjects are stored as a member variable. + /// + private readonly List difficultyHitObjects = new List(); + public ManiaDifficultyCalculator(Beatmap beatmap) : base(beatmap) { } - public override double Calculate(Dictionary categoryDifficulty = null) => 0; + public override double Calculate(Dictionary categoryDifficulty = null) + { + // Fill our custom DifficultyHitObject class, that carries additional information + difficultyHitObjects.Clear(); + + int columnCount = (Beatmap as ManiaBeatmap).TotalColumns; + + foreach (var hitObject in Beatmap.HitObjects) + difficultyHitObjects.Add(new ManiaHitObjectDifficulty(hitObject, columnCount)); + + // Sort DifficultyHitObjects by StartTime of the HitObjects - just to make sure. + difficultyHitObjects.Sort((a, b) => a.BaseHitObject.StartTime.CompareTo(b.BaseHitObject.StartTime)); + + if (!calculateStrainValues()) + return 0; + + double starRating = calculateDifficulty() * star_scaling_factor; + + if (categoryDifficulty != null) + { + categoryDifficulty.Add("Strain", starRating); + // categoryDifficulty.Add("Hit window 300", 35 /*HitObjectManager.HitWindow300*/ / TimeRate); + } + + return starRating; + } + + private bool calculateStrainValues() + { + // Traverse hitObjects in pairs to calculate the strain value of NextHitObject from the strain value of CurrentHitObject and environment. + using (List.Enumerator hitObjectsEnumerator = difficultyHitObjects.GetEnumerator()) + { + if (!hitObjectsEnumerator.MoveNext()) + return false; + + ManiaHitObjectDifficulty current = hitObjectsEnumerator.Current; + + // First hitObject starts at strain 1. 1 is the default for strain values, so we don't need to set it here. See DifficultyHitObject. + while (hitObjectsEnumerator.MoveNext()) + { + var next = hitObjectsEnumerator.Current; + next?.CalculateStrains(current, TimeRate); + current = next; + } + + return true; + } + } + + private double calculateDifficulty() + { + double actualStrainStep = strain_step * TimeRate; + + // Find the highest strain value within each strain step + List highestStrains = new List(); + double intervalEndTime = actualStrainStep; + double maximumStrain = 0; // We need to keep track of the maximum strain in the current interval + + ManiaHitObjectDifficulty previousHitObject = null; + foreach (var hitObject in difficultyHitObjects) + { + // While we are beyond the current interval push the currently available maximum to our strain list + while (hitObject.BaseHitObject.StartTime > intervalEndTime) + { + highestStrains.Add(maximumStrain); + + // The maximum strain of the next interval is not zero by default! We need to take the last hitObject we encountered, take its strain and apply the decay + // until the beginning of the next interval. + if (previousHitObject == null) + { + maximumStrain = 0; + } + else + { + double individualDecay = Math.Pow(ManiaHitObjectDifficulty.INDIVIDUAL_DECAY_BASE, (intervalEndTime - previousHitObject.BaseHitObject.StartTime) / 1000); + double overallDecay = Math.Pow(ManiaHitObjectDifficulty.OVERALL_DECAY_BASE, (intervalEndTime - previousHitObject.BaseHitObject.StartTime) / 1000); + maximumStrain = previousHitObject.IndividualStrain * individualDecay + previousHitObject.OverallStrain * overallDecay; + } + + // Go to the next time interval + intervalEndTime += actualStrainStep; + } + + // Obtain maximum strain + double strain = hitObject.IndividualStrain + hitObject.OverallStrain; + maximumStrain = Math.Max(strain, maximumStrain); + + previousHitObject = hitObject; + } + + // Build the weighted sum over the highest strains for each interval + double difficulty = 0; + double weight = 1; + highestStrains.Sort((a, b) => b.CompareTo(a)); // Sort from highest to lowest strain. + + foreach (double strain in highestStrains) + { + difficulty += weight * strain; + weight *= decay_weight; + } + + return difficulty; + } protected override BeatmapConverter CreateBeatmapConverter(Beatmap beatmap) => new ManiaBeatmapConverter(true, beatmap); } diff --git a/osu.Game.Rulesets.Mania/Objects/ManiaHitObjectDifficulty.cs b/osu.Game.Rulesets.Mania/Objects/ManiaHitObjectDifficulty.cs new file mode 100644 index 0000000000..e8b47092f6 --- /dev/null +++ b/osu.Game.Rulesets.Mania/Objects/ManiaHitObjectDifficulty.cs @@ -0,0 +1,114 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using osu.Game.Rulesets.Objects.Types; +using System; + +namespace osu.Game.Rulesets.Mania.Objects +{ + class ManiaHitObjectDifficulty + { + /// + /// Factor by how much individual / overall strain decays per second. + /// + /// + /// These values are results of tweaking a lot and taking into account general feedback. + /// + internal const double INDIVIDUAL_DECAY_BASE = 0.125; + internal const double OVERALL_DECAY_BASE = 0.30; + + internal ManiaHitObject BaseHitObject; + + private int beatmapColumnCount; + + + private double endTime; + private double[] heldUntil; + + /// + /// Measures jacks or more generally: repeated presses of the same button + /// + private double[] individualStrains; + + internal double IndividualStrain + { + get + { + return individualStrains[BaseHitObject.Column]; + } + + set + { + individualStrains[BaseHitObject.Column] = value; + } + } + + /// + /// Measures note density in a way + /// + internal double OverallStrain = 1; + + public ManiaHitObjectDifficulty(ManiaHitObject baseHitObject, int columnCount) + { + BaseHitObject = baseHitObject; + + endTime = (baseHitObject as IHasEndTime)?.EndTime ?? baseHitObject.StartTime; + + beatmapColumnCount = columnCount; + heldUntil = new double[beatmapColumnCount]; + individualStrains = new double[beatmapColumnCount]; + + for (int i = 0; i < beatmapColumnCount; ++i) + { + individualStrains[i] = 0; + heldUntil[i] = 0; + } + } + + internal void CalculateStrains(ManiaHitObjectDifficulty previousHitObject, double timeRate) + { + // TODO: Factor in holds + double addition = 1.0; + double timeElapsed = (BaseHitObject.StartTime - previousHitObject.BaseHitObject.StartTime) / timeRate; + double individualDecay = Math.Pow(INDIVIDUAL_DECAY_BASE, timeElapsed / 1000); + double overallDecay = Math.Pow(OVERALL_DECAY_BASE, timeElapsed / 1000); + + double holdFactor = 1.0; // Factor to all additional strains in case something else is held + double holdAddition = 0; // Addition to the current note in case it's a hold and has to be released awkwardly + + // Fill up the heldUntil array + for (int i = 0; i < beatmapColumnCount; ++i) + { + heldUntil[i] = previousHitObject.heldUntil[i]; + + // If there is at least one other overlapping end or note, then we get an addition, buuuuuut... + if (BaseHitObject.StartTime < heldUntil[i] && endTime > heldUntil[i]) + { + holdAddition = 1.0; + } + + // ... this addition only is valid if there is _no_ other note with the same ending. Releasing multiple notes at the same time is just as easy as releasing 1 + if (endTime == heldUntil[i]) + { + holdAddition = 0; + } + + // We give a slight bonus to everything if something is held meanwhile + if (heldUntil[i] > endTime) + { + holdFactor = 1.25; + } + + // Decay individual strains + individualStrains[i] = previousHitObject.individualStrains[i] * individualDecay; + } + + heldUntil[BaseHitObject.Column] = endTime; + + // Increase individual strain in own column + IndividualStrain += (2.0/* + (double)SpeedMania.Column / 8.0*/) * holdFactor; + + OverallStrain = previousHitObject.OverallStrain * overallDecay + (addition + holdAddition) * holdFactor; + } + } +} diff --git a/osu.Game.Rulesets.Mania/osu.Game.Rulesets.Mania.csproj b/osu.Game.Rulesets.Mania/osu.Game.Rulesets.Mania.csproj index a2e21e2053..b9c62cf40b 100644 --- a/osu.Game.Rulesets.Mania/osu.Game.Rulesets.Mania.csproj +++ b/osu.Game.Rulesets.Mania/osu.Game.Rulesets.Mania.csproj @@ -114,6 +114,7 @@ + From 96f416fef382bad61da66454de0f8f688ae75d27 Mon Sep 17 00:00:00 2001 From: Poyo Date: Mon, 26 Feb 2018 00:18:54 -0800 Subject: [PATCH 175/544] Update code style Sorry, bot overlords. --- osu.Game.Rulesets.Mania/ManiaDifficultyCalculator.cs | 8 ++++---- .../Objects/ManiaHitObjectDifficulty.cs | 9 ++++----- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/osu.Game.Rulesets.Mania/ManiaDifficultyCalculator.cs b/osu.Game.Rulesets.Mania/ManiaDifficultyCalculator.cs index 62d2929f27..e1d3b6212f 100644 --- a/osu.Game.Rulesets.Mania/ManiaDifficultyCalculator.cs +++ b/osu.Game.Rulesets.Mania/ManiaDifficultyCalculator.cs @@ -9,7 +9,7 @@ using System.Collections.Generic; namespace osu.Game.Rulesets.Mania { - public class ManiaDifficultyCalculator : DifficultyCalculator + internal class ManiaDifficultyCalculator : DifficultyCalculator { private const double star_scaling_factor = 0.018; @@ -18,12 +18,12 @@ namespace osu.Game.Rulesets.Mania /// This is to eliminate higher influence of stream over aim by simply having more HitObjects with high strain. /// The higher this value, the less strains there will be, indirectly giving long beatmaps an advantage. /// - protected const double strain_step = 400; + private const double strain_step = 400; /// /// The weighting of each strain value decays to this number * it's previous value /// - protected const double decay_weight = 0.9; + private const double decay_weight = 0.9; /// /// HitObjects are stored as a member variable. @@ -40,7 +40,7 @@ namespace osu.Game.Rulesets.Mania // Fill our custom DifficultyHitObject class, that carries additional information difficultyHitObjects.Clear(); - int columnCount = (Beatmap as ManiaBeatmap).TotalColumns; + int columnCount = (Beatmap as ManiaBeatmap)?.TotalColumns ?? 7; foreach (var hitObject in Beatmap.HitObjects) difficultyHitObjects.Add(new ManiaHitObjectDifficulty(hitObject, columnCount)); diff --git a/osu.Game.Rulesets.Mania/Objects/ManiaHitObjectDifficulty.cs b/osu.Game.Rulesets.Mania/Objects/ManiaHitObjectDifficulty.cs index e8b47092f6..0b5e7d7e4c 100644 --- a/osu.Game.Rulesets.Mania/Objects/ManiaHitObjectDifficulty.cs +++ b/osu.Game.Rulesets.Mania/Objects/ManiaHitObjectDifficulty.cs @@ -6,7 +6,7 @@ using System; namespace osu.Game.Rulesets.Mania.Objects { - class ManiaHitObjectDifficulty + internal class ManiaHitObjectDifficulty { /// /// Factor by how much individual / overall strain decays per second. @@ -19,7 +19,7 @@ namespace osu.Game.Rulesets.Mania.Objects internal ManiaHitObject BaseHitObject; - private int beatmapColumnCount; + private readonly int beatmapColumnCount; private double endTime; @@ -68,7 +68,6 @@ namespace osu.Game.Rulesets.Mania.Objects internal void CalculateStrains(ManiaHitObjectDifficulty previousHitObject, double timeRate) { // TODO: Factor in holds - double addition = 1.0; double timeElapsed = (BaseHitObject.StartTime - previousHitObject.BaseHitObject.StartTime) / timeRate; double individualDecay = Math.Pow(INDIVIDUAL_DECAY_BASE, timeElapsed / 1000); double overallDecay = Math.Pow(OVERALL_DECAY_BASE, timeElapsed / 1000); @@ -106,9 +105,9 @@ namespace osu.Game.Rulesets.Mania.Objects heldUntil[BaseHitObject.Column] = endTime; // Increase individual strain in own column - IndividualStrain += (2.0/* + (double)SpeedMania.Column / 8.0*/) * holdFactor; + IndividualStrain += 2.0 * holdFactor; - OverallStrain = previousHitObject.OverallStrain * overallDecay + (addition + holdAddition) * holdFactor; + OverallStrain = previousHitObject.OverallStrain * overallDecay + (1.0 + holdAddition) * holdFactor; } } } From 73fb1851328c416c712937bb1be401ba958af47b Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 27 Feb 2018 16:00:50 +0900 Subject: [PATCH 176/544] Change the way ShouldProcessClock is specified in line with framework changes --- osu.Game.Rulesets.Osu/UI/Cursor/CursorTrail.cs | 1 + osu.Game/Rulesets/UI/RulesetInputManager.cs | 2 -- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/osu.Game.Rulesets.Osu/UI/Cursor/CursorTrail.cs b/osu.Game.Rulesets.Osu/UI/Cursor/CursorTrail.cs index 37ca0c021b..3cbe37fed2 100644 --- a/osu.Game.Rulesets.Osu/UI/Cursor/CursorTrail.cs +++ b/osu.Game.Rulesets.Osu/UI/Cursor/CursorTrail.cs @@ -62,6 +62,7 @@ namespace osu.Game.Rulesets.Osu.UI.Cursor { // as we are currently very dependent on having a running clock, let's make our own clock for the time being. Clock = new FramedClock(); + ShouldProcessClock = true; RelativeSizeAxes = Axes.Both; diff --git a/osu.Game/Rulesets/UI/RulesetInputManager.cs b/osu.Game/Rulesets/UI/RulesetInputManager.cs index f465d0e202..5053d582e2 100644 --- a/osu.Game/Rulesets/UI/RulesetInputManager.cs +++ b/osu.Game/Rulesets/UI/RulesetInputManager.cs @@ -91,8 +91,6 @@ namespace osu.Game.Rulesets.UI #region Clock control - protected override bool ShouldProcessClock => false; // We handle processing the clock ourselves - private ManualClock clock; private IFrameBasedClock parentClock; From 9c0dfb7c8c3b4a5667e408904897f460a8d57093 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 27 Feb 2018 16:01:30 +0900 Subject: [PATCH 177/544] Avoid creating an extra framed clock in SkipButton --- osu.Game/Screens/Play/Player.cs | 5 ++++- osu.Game/Screens/Play/SkipButton.cs | 10 ++++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/osu.Game/Screens/Play/Player.cs b/osu.Game/Screens/Play/Player.cs index 4954618ef9..5ea070d4ff 100644 --- a/osu.Game/Screens/Play/Player.cs +++ b/osu.Game/Screens/Play/Player.cs @@ -185,9 +185,12 @@ namespace osu.Game.Screens.Play Clock = offsetClock, Child = RulesetContainer, }, - new SkipButton(firstObjectTime) { AudioClock = decoupledClock }, hudOverlay = new HUDOverlay(scoreProcessor, RulesetContainer, decoupledClock, working, adjustableSourceClock) + new SkipButton(firstObjectTime) { + SeekableClock = decoupledClock, + FramedClock = offsetClock, + }, Anchor = Anchor.Centre, Origin = Anchor.Centre }, diff --git a/osu.Game/Screens/Play/SkipButton.cs b/osu.Game/Screens/Play/SkipButton.cs index f67a9b801e..463dcc1644 100644 --- a/osu.Game/Screens/Play/SkipButton.cs +++ b/osu.Game/Screens/Play/SkipButton.cs @@ -24,7 +24,9 @@ namespace osu.Game.Screens.Play public class SkipButton : OverlayContainer, IKeyBindingHandler { private readonly double startTime; - public IAdjustableClock AudioClock; + + public IAdjustableClock SeekableClock; + public IFrameBasedClock FramedClock; private Button button; private Box remainingTimeBox; @@ -60,8 +62,8 @@ namespace osu.Game.Screens.Play { var baseClock = Clock; - if (AudioClock != null) - Clock = new FramedClock(AudioClock) { ProcessSourceClockFrames = false }; + if (FramedClock != null) + Clock = FramedClock; Children = new Drawable[] { @@ -109,7 +111,7 @@ namespace osu.Game.Screens.Play using (BeginAbsoluteSequence(beginFadeTime)) this.FadeOut(fade_time); - button.Action = () => AudioClock?.Seek(startTime - skip_required_cutoff - fade_time); + button.Action = () => SeekableClock?.Seek(startTime - skip_required_cutoff - fade_time); displayTime = Time.Current; From 0635ae2293180d986f435570bd41f672dc906c9f Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 27 Feb 2018 16:01:55 +0900 Subject: [PATCH 178/544] Include missing offset --- osu.Game/Screens/Play/Player.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game/Screens/Play/Player.cs b/osu.Game/Screens/Play/Player.cs index 5ea070d4ff..a0310a93ed 100644 --- a/osu.Game/Screens/Play/Player.cs +++ b/osu.Game/Screens/Play/Player.cs @@ -198,7 +198,7 @@ namespace osu.Game.Screens.Play { Anchor = Anchor.Centre, Origin = Anchor.Centre, - Clock = decoupledClock, + Clock = offsetClock, Breaks = beatmap.Breaks } } From d4f1723ae63a6616cb3094e8ca9105e6af4ba2b7 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 27 Feb 2018 16:02:48 +0900 Subject: [PATCH 179/544] Remove unnecessary secondary argument from HUDOverlay --- osu.Game/Screens/Play/HUDOverlay.cs | 8 ++++---- osu.Game/Screens/Play/Player.cs | 3 ++- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/osu.Game/Screens/Play/HUDOverlay.cs b/osu.Game/Screens/Play/HUDOverlay.cs index e68a17f014..231fcfb3e2 100644 --- a/osu.Game/Screens/Play/HUDOverlay.cs +++ b/osu.Game/Screens/Play/HUDOverlay.cs @@ -41,7 +41,7 @@ namespace osu.Game.Screens.Play private static bool hasShownNotificationOnce; - public HUDOverlay(ScoreProcessor scoreProcessor, RulesetContainer rulesetContainer, DecoupleableInterpolatingFramedClock decoupledClock, WorkingBeatmap working, IAdjustableClock adjustableSourceClock) + public HUDOverlay(ScoreProcessor scoreProcessor, RulesetContainer rulesetContainer, IAdjustableClock seekableClock, WorkingBeatmap working) { RelativeSizeAxes = Axes.Both; @@ -66,13 +66,13 @@ namespace osu.Game.Screens.Play BindRulesetContainer(rulesetContainer); Progress.Objects = rulesetContainer.Objects; - Progress.AudioClock = decoupledClock; + Progress.AudioClock = seekableClock; Progress.AllowSeeking = rulesetContainer.HasReplayLoaded; - Progress.OnSeek = pos => decoupledClock.Seek(pos); + Progress.OnSeek = pos => seekableClock.Seek(pos); ModDisplay.Current.BindTo(working.Mods); - PlayerSettingsOverlay.PlaybackSettings.AdjustableClock = adjustableSourceClock; + PlayerSettingsOverlay.PlaybackSettings.AdjustableClock = seekableClock; } [BackgroundDependencyLoader(true)] diff --git a/osu.Game/Screens/Play/Player.cs b/osu.Game/Screens/Play/Player.cs index a0310a93ed..a4fdc8a053 100644 --- a/osu.Game/Screens/Play/Player.cs +++ b/osu.Game/Screens/Play/Player.cs @@ -185,12 +185,13 @@ namespace osu.Game.Screens.Play Clock = offsetClock, Child = RulesetContainer, }, - hudOverlay = new HUDOverlay(scoreProcessor, RulesetContainer, decoupledClock, working, adjustableSourceClock) new SkipButton(firstObjectTime) { SeekableClock = decoupledClock, FramedClock = offsetClock, }, + hudOverlay = new HUDOverlay(scoreProcessor, RulesetContainer, decoupledClock, working) + { Anchor = Anchor.Centre, Origin = Anchor.Centre }, From fee258f2f210c3a31381c4cba89af480d5484cff Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 27 Feb 2018 16:02:57 +0900 Subject: [PATCH 180/544] Rework PauseContainer to better pause --- osu.Game/Screens/Play/PauseContainer.cs | 54 ++++++++++++------------- osu.Game/Screens/Play/Player.cs | 24 +++++------ 2 files changed, 39 insertions(+), 39 deletions(-) diff --git a/osu.Game/Screens/Play/PauseContainer.cs b/osu.Game/Screens/Play/PauseContainer.cs index 669bcd600c..b2f2fe2d4c 100644 --- a/osu.Game/Screens/Play/PauseContainer.cs +++ b/osu.Game/Screens/Play/PauseContainer.cs @@ -44,14 +44,21 @@ namespace osu.Game.Screens.Play public Action OnResume; public Action OnPause; - public IAdjustableClock AudioClock; - public FramedClock FramedClock; + public readonly IAdjustableClock SeekableClock; + public readonly FramedClock FramedClock; - public PauseContainer() + public PauseContainer(FramedClock framedClock, IAdjustableClock seekableClock) { + FramedClock = framedClock; + SeekableClock = seekableClock; + RelativeSizeAxes = Axes.Both; - AddInternal(content = new Container { RelativeSizeAxes = Axes.Both }); + AddInternal(content = new Container + { + Clock = FramedClock, + RelativeSizeAxes = Axes.Both + }); AddInternal(pauseOverlay = new PauseOverlay { @@ -65,47 +72,37 @@ namespace osu.Game.Screens.Play }); } - public void Pause(bool force = false) + public void Pause(bool force = false) => Schedule(() => // Scheduled to ensure a stable position in execution order, no matter how it was called. { if (!CanPause && !force) return; if (IsPaused) return; - // stop the decoupled clock (stops the audio eventually) - AudioClock.Stop(); - - // stop processing updatess on the offset clock (instantly freezes time for all our components) - FramedClock.ProcessSourceClockFrames = false; - + // stop the seekable clock (stops the audio eventually) + SeekableClock.Stop(); IsPaused = true; - // we need to do a final check after all of our children have processed up to the paused clock time. - // this is to cover cases where, for instance, the player fails in the current processing frame. - Schedule(() => - { - if (!CanPause) return; + OnPause?.Invoke(); + pauseOverlay.Show(); - lastPauseActionTime = Time.Current; - - OnPause?.Invoke(); - pauseOverlay.Show(); - }); - } + lastPauseActionTime = Time.Current; + }); public void Resume() { if (!IsPaused) return; IsPaused = false; - FramedClock.ProcessSourceClockFrames = true; - + IsResuming = false; lastPauseActionTime = Time.Current; - OnResume?.Invoke(); + // seek back to the time of the framed clock. + // this accounts for the audio clock potentially taking time to enter a completely stopped state. + SeekableClock.Seek(FramedClock.CurrentTime); + SeekableClock.Start(); + OnResume?.Invoke(); pauseOverlay.Hide(); - AudioClock.Start(); - IsResuming = false; } private OsuGameBase game; @@ -122,6 +119,9 @@ namespace osu.Game.Screens.Play if (!game.IsActive && CanPause) Pause(); + if (!IsPaused) + FramedClock.ProcessFrame(); + base.Update(); } diff --git a/osu.Game/Screens/Play/Player.cs b/osu.Game/Screens/Play/Player.cs index a4fdc8a053..e3ef0d333c 100644 --- a/osu.Game/Screens/Play/Player.cs +++ b/osu.Game/Screens/Play/Player.cs @@ -158,16 +158,8 @@ namespace osu.Game.Screens.Play Children = new Drawable[] { - storyboardContainer = new Container + pauseContainer = new PauseContainer(offsetClock, decoupledClock) { - RelativeSizeAxes = Axes.Both, - Clock = offsetClock, - Alpha = 0, - }, - pauseContainer = new PauseContainer - { - AudioClock = decoupledClock, - FramedClock = offsetClock, OnRetry = Restart, OnQuit = Exit, CheckCanPause = () => AllowPause && ValidForResume && !HasFailed && !RulesetContainer.HasReplayLoaded, @@ -183,7 +175,15 @@ namespace osu.Game.Screens.Play { RelativeSizeAxes = Axes.Both, Clock = offsetClock, - Child = RulesetContainer, + Children = new[] + { + storyboardContainer = new Container + { + RelativeSizeAxes = Axes.Both, + Alpha = 0, + }, + RulesetContainer, + } }, new SkipButton(firstObjectTime) { @@ -338,7 +338,9 @@ namespace osu.Game.Screens.Play this.Delay(750).Schedule(() => { if (!pauseContainer.IsPaused) + { decoupledClock.Start(); + } }); }); }); @@ -365,9 +367,7 @@ namespace osu.Game.Screens.Play } if (loadedSuccessfully) - { pauseContainer?.Pause(); - } return true; } From 3d52ead213fe795cfaf0f7947a0ea2e6855a7156 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 27 Feb 2018 16:05:21 +0900 Subject: [PATCH 181/544] Rename sourceClock --- osu.Game/Screens/Play/Player.cs | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/osu.Game/Screens/Play/Player.cs b/osu.Game/Screens/Play/Player.cs index e3ef0d333c..ce2ae08bed 100644 --- a/osu.Game/Screens/Play/Player.cs +++ b/osu.Game/Screens/Play/Player.cs @@ -54,8 +54,13 @@ namespace osu.Game.Screens.Play public CursorContainer Cursor => RulesetContainer.Cursor; public bool ProvidingUserCursor => RulesetContainer?.Cursor != null && !RulesetContainer.HasReplayLoaded.Value; - private IAdjustableClock adjustableSourceClock; + private IAdjustableClock sourceClock; + + /// + /// The final usable gameplay clock with user-set offsets applied. + /// private FramedOffsetClock offsetClock; + private DecoupleableInterpolatingFramedClock decoupledClock; private PauseContainer pauseContainer; @@ -138,7 +143,7 @@ namespace osu.Game.Screens.Play return; } - adjustableSourceClock = (IAdjustableClock)working.Track ?? new StopwatchClock(); + sourceClock = (IAdjustableClock)working.Track ?? new StopwatchClock(); decoupledClock = new DecoupleableInterpolatingFramedClock { IsCoupled = false }; var firstObjectTime = RulesetContainer.Objects.First().StartTime; @@ -236,11 +241,11 @@ namespace osu.Game.Screens.Play private void applyRateFromMods() { - if (adjustableSourceClock == null) return; + if (sourceClock == null) return; - adjustableSourceClock.Rate = 1; + sourceClock.Rate = 1; foreach (var mod in Beatmap.Value.Mods.Value.OfType()) - mod.ApplyToClock(adjustableSourceClock); + mod.ApplyToClock(sourceClock); } private void initializeStoryboard(bool asyncLoad) @@ -328,11 +333,11 @@ namespace osu.Game.Screens.Play Task.Run(() => { - adjustableSourceClock.Reset(); + sourceClock.Reset(); Schedule(() => { - decoupledClock.ChangeSource(adjustableSourceClock); + decoupledClock.ChangeSource(sourceClock); applyRateFromMods(); this.Delay(750).Schedule(() => From 37d2a2c3ccbe280e92c41777ea2673ef93461126 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 27 Feb 2018 16:10:12 +0900 Subject: [PATCH 182/544] Rename clock types to match across classes --- osu.Game/Screens/Play/PauseContainer.cs | 12 ++++++------ osu.Game/Screens/Play/Player.cs | 23 +++++++++++++---------- osu.Game/Screens/Play/SkipButton.cs | 4 ++-- 3 files changed, 21 insertions(+), 18 deletions(-) diff --git a/osu.Game/Screens/Play/PauseContainer.cs b/osu.Game/Screens/Play/PauseContainer.cs index b2f2fe2d4c..8827b437ba 100644 --- a/osu.Game/Screens/Play/PauseContainer.cs +++ b/osu.Game/Screens/Play/PauseContainer.cs @@ -44,13 +44,13 @@ namespace osu.Game.Screens.Play public Action OnResume; public Action OnPause; - public readonly IAdjustableClock SeekableClock; + public readonly IAdjustableClock AdjustableClock; public readonly FramedClock FramedClock; - public PauseContainer(FramedClock framedClock, IAdjustableClock seekableClock) + public PauseContainer(FramedClock framedClock, IAdjustableClock adjustableClock) { FramedClock = framedClock; - SeekableClock = seekableClock; + AdjustableClock = adjustableClock; RelativeSizeAxes = Axes.Both; @@ -79,7 +79,7 @@ namespace osu.Game.Screens.Play if (IsPaused) return; // stop the seekable clock (stops the audio eventually) - SeekableClock.Stop(); + AdjustableClock.Stop(); IsPaused = true; OnPause?.Invoke(); @@ -98,8 +98,8 @@ namespace osu.Game.Screens.Play // seek back to the time of the framed clock. // this accounts for the audio clock potentially taking time to enter a completely stopped state. - SeekableClock.Seek(FramedClock.CurrentTime); - SeekableClock.Start(); + AdjustableClock.Seek(FramedClock.CurrentTime); + AdjustableClock.Start(); OnResume?.Invoke(); pauseOverlay.Hide(); diff --git a/osu.Game/Screens/Play/Player.cs b/osu.Game/Screens/Play/Player.cs index ce2ae08bed..a2e044b800 100644 --- a/osu.Game/Screens/Play/Player.cs +++ b/osu.Game/Screens/Play/Player.cs @@ -61,7 +61,10 @@ namespace osu.Game.Screens.Play /// private FramedOffsetClock offsetClock; - private DecoupleableInterpolatingFramedClock decoupledClock; + /// + /// The decoupled clock used for gameplay. Should be used for seeks and clock control. + /// + private DecoupleableInterpolatingFramedClock adjustableClock; private PauseContainer pauseContainer; @@ -144,16 +147,16 @@ namespace osu.Game.Screens.Play } sourceClock = (IAdjustableClock)working.Track ?? new StopwatchClock(); - decoupledClock = new DecoupleableInterpolatingFramedClock { IsCoupled = false }; + adjustableClock = new DecoupleableInterpolatingFramedClock { IsCoupled = false }; var firstObjectTime = RulesetContainer.Objects.First().StartTime; - decoupledClock.Seek(AllowLeadIn + adjustableClock.Seek(AllowLeadIn ? Math.Min(0, firstObjectTime - Math.Max(beatmap.ControlPointInfo.TimingPointAt(firstObjectTime).BeatLength * 4, beatmap.BeatmapInfo.AudioLeadIn)) : firstObjectTime); - decoupledClock.ProcessFrame(); + adjustableClock.ProcessFrame(); - offsetClock = new FramedOffsetClock(decoupledClock); + offsetClock = new FramedOffsetClock(adjustableClock); userAudioOffset = config.GetBindable(OsuSetting.AudioOffset); userAudioOffset.ValueChanged += v => offsetClock.Offset = v; @@ -163,7 +166,7 @@ namespace osu.Game.Screens.Play Children = new Drawable[] { - pauseContainer = new PauseContainer(offsetClock, decoupledClock) + pauseContainer = new PauseContainer(offsetClock, adjustableClock) { OnRetry = Restart, OnQuit = Exit, @@ -192,7 +195,7 @@ namespace osu.Game.Screens.Play }, new SkipButton(firstObjectTime) { - SeekableClock = decoupledClock, + AdjustableClock = adjustableClock, FramedClock = offsetClock, }, hudOverlay = new HUDOverlay(scoreProcessor, RulesetContainer, decoupledClock, working) @@ -304,7 +307,7 @@ namespace osu.Game.Screens.Play if (Beatmap.Value.Mods.Value.OfType().Any(m => !m.AllowFail)) return false; - decoupledClock.Stop(); + adjustableClock.Stop(); HasFailed = true; failOverlay.Retries = RestartCount; @@ -337,14 +340,14 @@ namespace osu.Game.Screens.Play Schedule(() => { - decoupledClock.ChangeSource(sourceClock); + adjustableClock.ChangeSource(sourceClock); applyRateFromMods(); this.Delay(750).Schedule(() => { if (!pauseContainer.IsPaused) { - decoupledClock.Start(); + adjustableClock.Start(); } }); }); diff --git a/osu.Game/Screens/Play/SkipButton.cs b/osu.Game/Screens/Play/SkipButton.cs index 463dcc1644..b7e075d893 100644 --- a/osu.Game/Screens/Play/SkipButton.cs +++ b/osu.Game/Screens/Play/SkipButton.cs @@ -25,7 +25,7 @@ namespace osu.Game.Screens.Play { private readonly double startTime; - public IAdjustableClock SeekableClock; + public IAdjustableClock AdjustableClock; public IFrameBasedClock FramedClock; private Button button; @@ -111,7 +111,7 @@ namespace osu.Game.Screens.Play using (BeginAbsoluteSequence(beginFadeTime)) this.FadeOut(fade_time); - button.Action = () => SeekableClock?.Seek(startTime - skip_required_cutoff - fade_time); + button.Action = () => AdjustableClock?.Seek(startTime - skip_required_cutoff - fade_time); displayTime = Time.Current; From 8e78a7b1143a2dc898adf645a691200bf7bdb05c Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 27 Feb 2018 16:10:21 +0900 Subject: [PATCH 183/544] Fix HUD using incorrect clock for time display --- osu.Game/Screens/Play/HUDOverlay.cs | 8 ++++---- osu.Game/Screens/Play/Player.cs | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/osu.Game/Screens/Play/HUDOverlay.cs b/osu.Game/Screens/Play/HUDOverlay.cs index 231fcfb3e2..b0fbde74d2 100644 --- a/osu.Game/Screens/Play/HUDOverlay.cs +++ b/osu.Game/Screens/Play/HUDOverlay.cs @@ -41,7 +41,7 @@ namespace osu.Game.Screens.Play private static bool hasShownNotificationOnce; - public HUDOverlay(ScoreProcessor scoreProcessor, RulesetContainer rulesetContainer, IAdjustableClock seekableClock, WorkingBeatmap working) + public HUDOverlay(ScoreProcessor scoreProcessor, RulesetContainer rulesetContainer, WorkingBeatmap working, IClock offsetClock, IAdjustableClock adjustableClock) { RelativeSizeAxes = Axes.Both; @@ -66,13 +66,13 @@ namespace osu.Game.Screens.Play BindRulesetContainer(rulesetContainer); Progress.Objects = rulesetContainer.Objects; - Progress.AudioClock = seekableClock; + Progress.AudioClock = offsetClock; Progress.AllowSeeking = rulesetContainer.HasReplayLoaded; - Progress.OnSeek = pos => seekableClock.Seek(pos); + Progress.OnSeek = pos => adjustableClock.Seek(pos); ModDisplay.Current.BindTo(working.Mods); - PlayerSettingsOverlay.PlaybackSettings.AdjustableClock = seekableClock; + PlayerSettingsOverlay.PlaybackSettings.AdjustableClock = adjustableClock; } [BackgroundDependencyLoader(true)] diff --git a/osu.Game/Screens/Play/Player.cs b/osu.Game/Screens/Play/Player.cs index a2e044b800..938a67190c 100644 --- a/osu.Game/Screens/Play/Player.cs +++ b/osu.Game/Screens/Play/Player.cs @@ -198,7 +198,7 @@ namespace osu.Game.Screens.Play AdjustableClock = adjustableClock, FramedClock = offsetClock, }, - hudOverlay = new HUDOverlay(scoreProcessor, RulesetContainer, decoupledClock, working) + hudOverlay = new HUDOverlay(scoreProcessor, RulesetContainer, working, offsetClock, adjustableClock) { Anchor = Anchor.Centre, Origin = Anchor.Centre From cff17f18648f273c71f0339cf73d81b0c508e64f Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 27 Feb 2018 17:23:12 +0900 Subject: [PATCH 184/544] Update in line with inverse ShoudProcessClock default --- .../UI/Cursor/CursorTrail.cs | 1 - osu.Game/Rulesets/UI/RulesetInputManager.cs | 1 + osu.Game/Screens/Play/PauseContainer.cs | 19 ++++++++++--------- osu.Game/Screens/Play/Player.cs | 2 ++ osu.Game/Screens/Play/SkipButton.cs | 3 +++ 5 files changed, 16 insertions(+), 10 deletions(-) diff --git a/osu.Game.Rulesets.Osu/UI/Cursor/CursorTrail.cs b/osu.Game.Rulesets.Osu/UI/Cursor/CursorTrail.cs index 3cbe37fed2..37ca0c021b 100644 --- a/osu.Game.Rulesets.Osu/UI/Cursor/CursorTrail.cs +++ b/osu.Game.Rulesets.Osu/UI/Cursor/CursorTrail.cs @@ -62,7 +62,6 @@ namespace osu.Game.Rulesets.Osu.UI.Cursor { // as we are currently very dependent on having a running clock, let's make our own clock for the time being. Clock = new FramedClock(); - ShouldProcessClock = true; RelativeSizeAxes = Axes.Both; diff --git a/osu.Game/Rulesets/UI/RulesetInputManager.cs b/osu.Game/Rulesets/UI/RulesetInputManager.cs index 5053d582e2..b00bbf1e3a 100644 --- a/osu.Game/Rulesets/UI/RulesetInputManager.cs +++ b/osu.Game/Rulesets/UI/RulesetInputManager.cs @@ -101,6 +101,7 @@ namespace osu.Game.Rulesets.UI //our clock will now be our parent's clock, but we want to replace this to allow manual control. parentClock = Clock; + ShouldProcessClock = false; Clock = new FramedClock(clock = new ManualClock { CurrentTime = parentClock.CurrentTime, diff --git a/osu.Game/Screens/Play/PauseContainer.cs b/osu.Game/Screens/Play/PauseContainer.cs index 8827b437ba..220a48e7c5 100644 --- a/osu.Game/Screens/Play/PauseContainer.cs +++ b/osu.Game/Screens/Play/PauseContainer.cs @@ -44,19 +44,20 @@ namespace osu.Game.Screens.Play public Action OnResume; public Action OnPause; - public readonly IAdjustableClock AdjustableClock; - public readonly FramedClock FramedClock; + private readonly IAdjustableClock adjustableClock; + private readonly FramedClock framedClock; public PauseContainer(FramedClock framedClock, IAdjustableClock adjustableClock) { - FramedClock = framedClock; - AdjustableClock = adjustableClock; + this.framedClock = framedClock; + this.adjustableClock = adjustableClock; RelativeSizeAxes = Axes.Both; AddInternal(content = new Container { - Clock = FramedClock, + Clock = this.framedClock, + ShouldProcessClock = false, RelativeSizeAxes = Axes.Both }); @@ -79,7 +80,7 @@ namespace osu.Game.Screens.Play if (IsPaused) return; // stop the seekable clock (stops the audio eventually) - AdjustableClock.Stop(); + adjustableClock.Stop(); IsPaused = true; OnPause?.Invoke(); @@ -98,8 +99,8 @@ namespace osu.Game.Screens.Play // seek back to the time of the framed clock. // this accounts for the audio clock potentially taking time to enter a completely stopped state. - AdjustableClock.Seek(FramedClock.CurrentTime); - AdjustableClock.Start(); + adjustableClock.Seek(framedClock.CurrentTime); + adjustableClock.Start(); OnResume?.Invoke(); pauseOverlay.Hide(); @@ -120,7 +121,7 @@ namespace osu.Game.Screens.Play Pause(); if (!IsPaused) - FramedClock.ProcessFrame(); + framedClock.ProcessFrame(); base.Update(); } diff --git a/osu.Game/Screens/Play/Player.cs b/osu.Game/Screens/Play/Player.cs index 938a67190c..a36d7e8e23 100644 --- a/osu.Game/Screens/Play/Player.cs +++ b/osu.Game/Screens/Play/Player.cs @@ -183,6 +183,7 @@ namespace osu.Game.Screens.Play { RelativeSizeAxes = Axes.Both, Clock = offsetClock, + ShouldProcessClock = false, Children = new[] { storyboardContainer = new Container @@ -208,6 +209,7 @@ namespace osu.Game.Screens.Play Anchor = Anchor.Centre, Origin = Anchor.Centre, Clock = offsetClock, + ShouldProcessClock = false, Breaks = beatmap.Breaks } } diff --git a/osu.Game/Screens/Play/SkipButton.cs b/osu.Game/Screens/Play/SkipButton.cs index b7e075d893..e8b43b7c4e 100644 --- a/osu.Game/Screens/Play/SkipButton.cs +++ b/osu.Game/Screens/Play/SkipButton.cs @@ -63,7 +63,10 @@ namespace osu.Game.Screens.Play var baseClock = Clock; if (FramedClock != null) + { Clock = FramedClock; + ShouldProcessClock = false; + } Children = new Drawable[] { From 9b44f447caa984fb55de7d5cdbc713b4bf185e0b Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 27 Feb 2018 17:50:26 +0900 Subject: [PATCH 185/544] Fix song select iteration when all panels are filtered Resolves #2069. --- osu.Game.Tests/Visual/TestCaseBeatmapCarousel.cs | 6 ++++++ osu.Game/Screens/Select/BeatmapCarousel.cs | 10 ++++++---- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/osu.Game.Tests/Visual/TestCaseBeatmapCarousel.cs b/osu.Game.Tests/Visual/TestCaseBeatmapCarousel.cs index 901d24e531..e50dc4b8fc 100644 --- a/osu.Game.Tests/Visual/TestCaseBeatmapCarousel.cs +++ b/osu.Game.Tests/Visual/TestCaseBeatmapCarousel.cs @@ -207,6 +207,12 @@ namespace osu.Game.Tests.Visual checkVisibleItemCount(true, 0); AddAssert("Selection is null", () => currentSelection == null); + advanceSelection(true); + AddAssert("Selection is null", () => currentSelection == null); + + advanceSelection(false); + AddAssert("Selection is null", () => currentSelection == null); + AddStep("Un-filter", () => carousel.Filter(new FilterCriteria(), false)); AddAssert("Selection is non-null", () => currentSelection != null); diff --git a/osu.Game/Screens/Select/BeatmapCarousel.cs b/osu.Game/Screens/Select/BeatmapCarousel.cs index 6a6042d7d4..3b837ffe7c 100644 --- a/osu.Game/Screens/Select/BeatmapCarousel.cs +++ b/osu.Game/Screens/Select/BeatmapCarousel.cs @@ -192,7 +192,9 @@ namespace osu.Game.Screens.Select /// Whether to skip individual difficulties and only increment over full groups. public void SelectNext(int direction = 1, bool skipDifficulties = true) { - if (!Items.Any()) + var visibleItems = Items.Where(s => !s.Item.Filtered).ToList(); + + if (!visibleItems.Any()) return; DrawableCarouselItem drawable = null; @@ -202,15 +204,15 @@ namespace osu.Game.Screens.Select // we can fix this by changing this method to not reference drawables / Items in the first place. return; - int originalIndex = Items.IndexOf(drawable); + int originalIndex = visibleItems.IndexOf(drawable); int currentIndex = originalIndex; // local function to increment the index in the required direction, wrapping over extremities. - int incrementIndex() => currentIndex = (currentIndex + direction + Items.Count) % Items.Count; + int incrementIndex() => currentIndex = (currentIndex + direction + visibleItems.Count) % visibleItems.Count; while (incrementIndex() != originalIndex) { - var item = Items[currentIndex].Item; + var item = visibleItems[currentIndex].Item; if (item.Filtered || item.State == CarouselItemState.Selected) continue; From 034875be47fb6cd9fdbb9ccc30bf3bb72fb5e2f3 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 27 Feb 2018 20:45:32 +0900 Subject: [PATCH 186/544] Fix bindings not being unbound on ModSelect Resolves #2018. Closes #2079. --- osu.Game/Overlays/Mods/ModSelectOverlay.cs | 8 ++++++++ osu.Game/Screens/Select/PlaySongSelect.cs | 16 ++++++++++------ 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/osu.Game/Overlays/Mods/ModSelectOverlay.cs b/osu.Game/Overlays/Mods/ModSelectOverlay.cs index d7268fb186..d0a507be98 100644 --- a/osu.Game/Overlays/Mods/ModSelectOverlay.cs +++ b/osu.Game/Overlays/Mods/ModSelectOverlay.cs @@ -65,6 +65,14 @@ namespace osu.Game.Overlays.Mods Ruleset.TriggerChange(); } + protected override void Dispose(bool isDisposing) + { + base.Dispose(isDisposing); + + Ruleset.UnbindAll(); + SelectedMods.UnbindAll(); + } + private void selectedModsChanged(IEnumerable obj) { foreach (ModSection section in ModSectionsContainer.Children) diff --git a/osu.Game/Screens/Select/PlaySongSelect.cs b/osu.Game/Screens/Select/PlaySongSelect.cs index 739bc39269..71aa85b116 100644 --- a/osu.Game/Screens/Select/PlaySongSelect.cs +++ b/osu.Game/Screens/Select/PlaySongSelect.cs @@ -1,11 +1,13 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using System.Collections.Generic; using System.Linq; using OpenTK.Input; using osu.Framework.Allocation; using osu.Framework.Audio; using osu.Framework.Audio.Sample; +using osu.Framework.Configuration; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Framework.Screens; @@ -47,13 +49,15 @@ namespace osu.Game.Screens.Select private SampleChannel sampleConfirm; + public readonly Bindable> SelectedMods = new Bindable>(new List()); + [BackgroundDependencyLoader(true)] private void load(OsuColour colours, AudioManager audio, BeatmapManager beatmaps, DialogOverlay dialogOverlay, OsuGame game) { - sampleConfirm = audio.Sample.Get(@"SongSelect/confirm-selection"); + SelectedMods.BindTo(game.SelectedMods); + modSelect.SelectedMods.BindTo(SelectedMods); - if (game != null) - modSelect.SelectedMods.BindTo(game.SelectedMods); + sampleConfirm = audio.Sample.Get(@"SongSelect/confirm-selection"); Footer.AddButton(@"mods", colours.Yellow, modSelect, Key.F1, float.MaxValue); @@ -80,7 +84,7 @@ namespace osu.Game.Screens.Select { base.UpdateBeatmap(beatmap); - beatmap.Mods.BindTo(modSelect.SelectedMods); + beatmap.Mods.BindTo(SelectedMods); BeatmapDetails.Beatmap = beatmap; @@ -95,7 +99,7 @@ namespace osu.Game.Screens.Select if (removeAutoModOnResume) { var autoType = Ruleset.Value.CreateInstance().GetAutoplayMod().GetType(); - modSelect.SelectedMods.Value = modSelect.SelectedMods.Value.Where(m => m.GetType() != autoType).ToArray(); + SelectedMods.Value = SelectedMods.Value.Where(m => m.GetType() != autoType).ToArray(); removeAutoModOnResume = false; } @@ -125,7 +129,7 @@ namespace osu.Game.Screens.Select if (Beatmap.Value.Track != null) Beatmap.Value.Track.Looping = false; - Beatmap.Value.Mods.UnbindBindings(); + SelectedMods.UnbindAll(); Beatmap.Value.Mods.Value = new Mod[] { }; return false; From 84a8fbe0b3a66194f5f46ea29b6d6f39cafa50b5 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 27 Feb 2018 21:26:06 +0900 Subject: [PATCH 187/544] Fix null ref --- osu.Game/Screens/Select/PlaySongSelect.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/osu.Game/Screens/Select/PlaySongSelect.cs b/osu.Game/Screens/Select/PlaySongSelect.cs index 71aa85b116..c347bfe70f 100644 --- a/osu.Game/Screens/Select/PlaySongSelect.cs +++ b/osu.Game/Screens/Select/PlaySongSelect.cs @@ -52,9 +52,9 @@ namespace osu.Game.Screens.Select public readonly Bindable> SelectedMods = new Bindable>(new List()); [BackgroundDependencyLoader(true)] - private void load(OsuColour colours, AudioManager audio, BeatmapManager beatmaps, DialogOverlay dialogOverlay, OsuGame game) + private void load(OsuColour colours, AudioManager audio, BeatmapManager beatmaps, DialogOverlay dialogOverlay, OsuGame osu) { - SelectedMods.BindTo(game.SelectedMods); + if (osu != null) SelectedMods.BindTo(osu.SelectedMods); modSelect.SelectedMods.BindTo(SelectedMods); sampleConfirm = audio.Sample.Get(@"SongSelect/confirm-selection"); From ed99f26699fefc19165a061eb4070c0a4b454752 Mon Sep 17 00:00:00 2001 From: TocoToucan Date: Tue, 23 Jan 2018 20:49:48 +0300 Subject: [PATCH 188/544] Use Multicore JIT --- osu.Desktop/Program.cs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/osu.Desktop/Program.cs b/osu.Desktop/Program.cs index 048fe93c11..1284883dd7 100644 --- a/osu.Desktop/Program.cs +++ b/osu.Desktop/Program.cs @@ -4,6 +4,7 @@ using System; using System.IO; using System.Linq; +using System.Runtime; using osu.Framework; using osu.Framework.Platform; using osu.Game.IPC; @@ -15,6 +16,8 @@ namespace osu.Desktop [STAThread] public static int Main(string[] args) { + useMulticoreJit(); + // Back up the cwd before DesktopGameHost changes it var cwd = Environment.CurrentDirectory; @@ -47,5 +50,15 @@ namespace osu.Desktop return 0; } } + + private static void useMulticoreJit() + { + var profilesFolder = Path.Combine(Environment.CurrentDirectory, "Profiles"); + if (!Directory.Exists(profilesFolder)) + Directory.CreateDirectory(profilesFolder); + + ProfileOptimization.SetProfileRoot(profilesFolder); + ProfileOptimization.StartProfile("Startup.Profile"); + } } } From 714d7b44778135ffbb5e2698d28d4f2f154d8730 Mon Sep 17 00:00:00 2001 From: TocoToucan Date: Wed, 24 Jan 2018 22:07:14 +0300 Subject: [PATCH 189/544] Do not use Multicore JIT on Mono --- osu.Desktop/Program.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/osu.Desktop/Program.cs b/osu.Desktop/Program.cs index 1284883dd7..7da01c17b1 100644 --- a/osu.Desktop/Program.cs +++ b/osu.Desktop/Program.cs @@ -16,7 +16,8 @@ namespace osu.Desktop [STAThread] public static int Main(string[] args) { - useMulticoreJit(); + if (!RuntimeInfo.IsMono) + useMulticoreJit(); // Back up the cwd before DesktopGameHost changes it var cwd = Environment.CurrentDirectory; @@ -47,6 +48,7 @@ namespace osu.Desktop break; } } + return 0; } } From 89bac13bf27eea58eb31aa6de6da05679f6972e9 Mon Sep 17 00:00:00 2001 From: TocoToucan Date: Wed, 24 Jan 2018 22:08:16 +0300 Subject: [PATCH 190/544] Fix profiles folder path --- osu.Desktop/Program.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Desktop/Program.cs b/osu.Desktop/Program.cs index 7da01c17b1..80d273a1b2 100644 --- a/osu.Desktop/Program.cs +++ b/osu.Desktop/Program.cs @@ -55,7 +55,7 @@ namespace osu.Desktop private static void useMulticoreJit() { - var profilesFolder = Path.Combine(Environment.CurrentDirectory, "Profiles"); + var profilesFolder = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Profiles"); if (!Directory.Exists(profilesFolder)) Directory.CreateDirectory(profilesFolder); From db9b5ebacafee8ffba5272c856e3925e2c9d67fd Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 27 Feb 2018 22:26:54 +0900 Subject: [PATCH 191/544] Reduce complexity of code --- osu.Desktop/Program.cs | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/osu.Desktop/Program.cs b/osu.Desktop/Program.cs index 80d273a1b2..d036a6822c 100644 --- a/osu.Desktop/Program.cs +++ b/osu.Desktop/Program.cs @@ -55,11 +55,8 @@ namespace osu.Desktop private static void useMulticoreJit() { - var profilesFolder = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Profiles"); - if (!Directory.Exists(profilesFolder)) - Directory.CreateDirectory(profilesFolder); - - ProfileOptimization.SetProfileRoot(profilesFolder); + var directory = Directory.CreateDirectory(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Profiles")); + ProfileOptimization.SetProfileRoot(directory.FullName); ProfileOptimization.StartProfile("Startup.Profile"); } } From f64afc738dd3773e6081effba6376baf9dba1409 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 27 Feb 2018 23:59:07 +0900 Subject: [PATCH 192/544] Fix incorrect exit block conditional Resolves #2130. --- osu.Game/Screens/Play/Player.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game/Screens/Play/Player.cs b/osu.Game/Screens/Play/Player.cs index 4954618ef9..b8d455a9c2 100644 --- a/osu.Game/Screens/Play/Player.cs +++ b/osu.Game/Screens/Play/Player.cs @@ -351,7 +351,7 @@ namespace osu.Game.Screens.Play protected override bool OnExiting(Screen next) { - if ((!AllowPause || HasFailed || !ValidForResume || pauseContainer?.IsPaused != false || RulesetContainer?.HasReplayLoaded != false) && (!pauseContainer?.IsResuming ?? false)) + if ((!AllowPause || HasFailed || !ValidForResume || pauseContainer?.IsPaused != false || RulesetContainer?.HasReplayLoaded != false) && (!pauseContainer?.IsResuming ?? true)) { // In the case of replays, we may have changed the playback rate. applyRateFromMods(); From 510ecd7c87d7b1fc93ab376c06dcca6874ad1b38 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 28 Feb 2018 00:07:28 +0900 Subject: [PATCH 193/544] Ensure selection is finalised before exiting song select Resolves #2080. --- osu.Game/Screens/Select/SongSelect.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/osu.Game/Screens/Select/SongSelect.cs b/osu.Game/Screens/Select/SongSelect.cs index de6847d866..43d7cb637a 100644 --- a/osu.Game/Screens/Select/SongSelect.cs +++ b/osu.Game/Screens/Select/SongSelect.cs @@ -386,6 +386,8 @@ namespace osu.Game.Screens.Select protected override bool OnExiting(Screen next) { + FinaliseSelection(); + beatmapInfoWedge.State = Visibility.Hidden; Content.FadeOut(100); From 62913163e02ca776174bcb1f01388ce6b2c95f53 Mon Sep 17 00:00:00 2001 From: naoey Date: Tue, 27 Feb 2018 21:21:53 +0530 Subject: [PATCH 194/544] Fix long recent activity text overlapping timestamp. - Also remove unnecessary fallback from absolute URL helper --- .../Sections/Recent/DrawableRecentActivity.cs | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/osu.Game/Overlays/Profile/Sections/Recent/DrawableRecentActivity.cs b/osu.Game/Overlays/Profile/Sections/Recent/DrawableRecentActivity.cs index 282b2e242a..4785b1e8d3 100644 --- a/osu.Game/Overlays/Profile/Sections/Recent/DrawableRecentActivity.cs +++ b/osu.Game/Overlays/Profile/Sections/Recent/DrawableRecentActivity.cs @@ -19,19 +19,16 @@ namespace osu.Game.Overlays.Profile.Sections.Recent private APIAccess api; private readonly RecentActivity activity; - private readonly string userLinkTemplate; - private readonly string beatmapLinkTemplate; - private readonly string beatmapsetLinkTemplate; + + private string userLinkTemplate; + private string beatmapLinkTemplate; + private string beatmapsetLinkTemplate; private LinkFlowContainer content; public DrawableRecentActivity(RecentActivity activity) { this.activity = activity; - - userLinkTemplate = $"[{urlToAbsolute(activity.User?.Url)} {activity.User?.Username}]"; - beatmapLinkTemplate = $"[{urlToAbsolute(activity.Beatmap?.Url)} {activity.Beatmap?.Title}]"; - beatmapsetLinkTemplate = $"[{urlToAbsolute(activity.Beatmapset?.Url)} {activity.Beatmapset?.Title}]"; } [BackgroundDependencyLoader] @@ -39,6 +36,12 @@ namespace osu.Game.Overlays.Profile.Sections.Recent { this.api = api; + userLinkTemplate = $"[{toAbsoluteUrl(activity.User?.Url)} {activity.User?.Username}]"; + beatmapLinkTemplate = $"[{toAbsoluteUrl(activity.Beatmap?.Url)} {activity.Beatmap?.Title}]"; + beatmapsetLinkTemplate = $"[{toAbsoluteUrl(activity.Beatmapset?.Url)} {activity.Beatmapset?.Title}]"; + + LeftFlowContainer.Padding = new MarginPadding { Left = 10, Right = 160 }; + LeftFlowContainer.Add(content = new LinkFlowContainer { AutoSizeAxes = Axes.Y, @@ -90,7 +93,7 @@ namespace osu.Game.Overlays.Profile.Sections.Recent } } - private string urlToAbsolute(string url) => $"{api?.Endpoint ?? @"https://osu.ppy.sh"}{url}"; + private string toAbsoluteUrl(string url) => $"{api.Endpoint}{url}"; private string activityToString() { From 0cd049c6b05d29b641e085a22101fdf34d37915d Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Sun, 25 Feb 2018 05:49:45 +0900 Subject: [PATCH 195/544] Rely less on zero-duration transform helpers They have huge overheads. See ppy/osu-framework#1411. --- osu.Game/Graphics/Containers/ParallaxContainer.cs | 6 ++++-- osu.Game/Screens/Play/SongProgressBar.cs | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/osu.Game/Graphics/Containers/ParallaxContainer.cs b/osu.Game/Graphics/Containers/ParallaxContainer.cs index cb894ca382..8ab264da8e 100644 --- a/osu.Game/Graphics/Containers/ParallaxContainer.cs +++ b/osu.Game/Graphics/Containers/ParallaxContainer.cs @@ -8,6 +8,7 @@ using OpenTK; using osu.Framework.Allocation; using osu.Game.Configuration; using osu.Framework.Configuration; +using osu.Framework.MathUtils; namespace osu.Game.Graphics.Containers { @@ -61,8 +62,9 @@ namespace osu.Game.Graphics.Containers if (parallaxEnabled) { - Vector2 offset = input.CurrentState.Mouse == null ? Vector2.Zero : ToLocalSpace(input.CurrentState.Mouse.NativeState.Position) - DrawSize / 2; - content.MoveTo(offset * ParallaxAmount, firstUpdate ? 0 : 1000, Easing.OutQuint); + Vector2 offset = (input.CurrentState.Mouse == null ? Vector2.Zero : ToLocalSpace(input.CurrentState.Mouse.NativeState.Position) - DrawSize / 2) * ParallaxAmount; + + content.Position = Interpolation.ValueAt(Clock.ElapsedFrameTime, content.Position, offset, 0, 1000, Easing.OutQuint); content.Scale = new Vector2(1 + ParallaxAmount); } diff --git a/osu.Game/Screens/Play/SongProgressBar.cs b/osu.Game/Screens/Play/SongProgressBar.cs index ffe7ae04f8..4f5cc79b53 100644 --- a/osu.Game/Screens/Play/SongProgressBar.cs +++ b/osu.Game/Screens/Play/SongProgressBar.cs @@ -109,7 +109,7 @@ namespace osu.Game.Screens.Play { var xFill = value * UsableWidth; fill.Width = xFill; - handleBase.MoveToX(xFill); + handleBase.X = xFill; } protected override void OnUserChange() => OnSeek?.Invoke(Current); From dd6cf1379e279307bb384c99ef8754c2311b6216 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 28 Feb 2018 11:42:28 +0900 Subject: [PATCH 196/544] Reduce parallax effect during gameplay This also cleans up some shared code in OsuScreen. --- .../Graphics/Containers/ParallaxContainer.cs | 4 ++- osu.Game/Screens/OsuScreen.cs | 27 ++++++++++++++----- osu.Game/Screens/Play/Player.cs | 2 ++ 3 files changed, 25 insertions(+), 8 deletions(-) diff --git a/osu.Game/Graphics/Containers/ParallaxContainer.cs b/osu.Game/Graphics/Containers/ParallaxContainer.cs index cb894ca382..9a61feb7c1 100644 --- a/osu.Game/Graphics/Containers/ParallaxContainer.cs +++ b/osu.Game/Graphics/Containers/ParallaxContainer.cs @@ -13,7 +13,9 @@ namespace osu.Game.Graphics.Containers { public class ParallaxContainer : Container, IRequireHighFrequencyMousePosition { - public float ParallaxAmount = 0.02f; + public const float DEFAULT_PARALLAX_AMOUNT = 0.02f; + + public float ParallaxAmount = DEFAULT_PARALLAX_AMOUNT; private Bindable parallaxEnabled; diff --git a/osu.Game/Screens/OsuScreen.cs b/osu.Game/Screens/OsuScreen.cs index a2d41dc206..8f4e08d4a2 100644 --- a/osu.Game/Screens/OsuScreen.cs +++ b/osu.Game/Screens/OsuScreen.cs @@ -52,6 +52,10 @@ namespace osu.Game.Screens protected readonly Bindable Beatmap = new Bindable(); + protected virtual float BackgroundParallaxAmount => 1; + + private ParallaxContainer backgroundParallaxContainer; + public WorkingBeatmap InitialBeatmap { set @@ -102,11 +106,10 @@ namespace osu.Game.Screens protected override void OnResuming(Screen last) { - base.OnResuming(last); - logo.AppendAnimatingAction(() => LogoArriving(logo, true), true); sampleExit?.Play(); + applyArrivingDefaults(true); - ShowOverlays.Value = ShowOverlaysOnEnter; + base.OnResuming(last); } protected override void OnSuspending(Screen next) @@ -123,6 +126,8 @@ namespace osu.Game.Screens if (lastOsu?.Background != null) { + backgroundParallaxContainer = lastOsu.backgroundParallaxContainer; + if (bg == null || lastOsu.Background.Equals(bg)) //we can keep the previous mode's background. Background = lastOsu.Background; @@ -136,7 +141,7 @@ namespace osu.Game.Screens // this makes up for the fact our padding changes when the global toolbar is visible. bg.Scale = new Vector2(1.06f); - AddInternal(new ParallaxContainer + AddInternal(backgroundParallaxContainer = new ParallaxContainer { Depth = float.MaxValue, Children = new[] @@ -149,11 +154,9 @@ namespace osu.Game.Screens if ((logo = lastOsu?.logo) == null) LoadComponentAsync(logo = new OsuLogo { Alpha = 0 }, AddInternal); - logo.AppendAnimatingAction(() => LogoArriving(logo, false), true); + applyArrivingDefaults(false); base.OnEntering(last); - - ShowOverlays.Value = ShowOverlaysOnEnter; } protected override bool OnExiting(Screen next) @@ -193,6 +196,16 @@ namespace osu.Game.Screens logo.Ripple = true; } + private void applyArrivingDefaults(bool isResuming) + { + logo.AppendAnimatingAction(() => LogoArriving(logo, isResuming), true); + + if (backgroundParallaxContainer != null) + backgroundParallaxContainer.ParallaxAmount = ParallaxContainer.DEFAULT_PARALLAX_AMOUNT * BackgroundParallaxAmount; + + ShowOverlays.Value = ShowOverlaysOnEnter; + } + private void onExitingLogo() { logo.AppendAnimatingAction(() => { LogoExiting(logo); }, false); diff --git a/osu.Game/Screens/Play/Player.cs b/osu.Game/Screens/Play/Player.cs index 4954618ef9..9a11f57754 100644 --- a/osu.Game/Screens/Play/Player.cs +++ b/osu.Game/Screens/Play/Player.cs @@ -37,6 +37,8 @@ namespace osu.Game.Screens.Play { protected override BackgroundScreen CreateBackground() => new BackgroundScreenBeatmap(Beatmap); + protected override float BackgroundParallaxAmount => 0.1f; + public override bool ShowOverlaysOnEnter => false; public Action RestartRequested; From 4a52db14d1781a0a89d8910128dae4cc3161cf10 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 28 Feb 2018 14:18:25 +0900 Subject: [PATCH 197/544] Fix depth of already-visible panels not being updates after a sorting change --- osu.Game/Screens/Select/BeatmapCarousel.cs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/osu.Game/Screens/Select/BeatmapCarousel.cs b/osu.Game/Screens/Select/BeatmapCarousel.cs index 6a6042d7d4..6da6fe6b1e 100644 --- a/osu.Game/Screens/Select/BeatmapCarousel.cs +++ b/osu.Game/Screens/Select/BeatmapCarousel.cs @@ -407,12 +407,14 @@ namespace osu.Game.Screens.Select continue; } + float depth = i + (item is DrawableCarouselBeatmapSet ? -Items.Count : 0); + // Only add if we're not already part of the content. if (!scrollableContent.Contains(item)) { // Makes sure headers are always _below_ items, // and depth flows downward. - item.Depth = i + (item is DrawableCarouselBeatmapSet ? -Items.Count : 0); + item.Depth = depth; switch (item.LoadState) { @@ -426,6 +428,10 @@ namespace osu.Game.Screens.Select break; } } + else + { + scrollableContent.ChangeChildDepth(item, depth); + } } // this is not actually useful right now, but once we have groups may well be. From a0a215bc4294d617664483b437e8522cef09d687 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 28 Feb 2018 14:22:16 +0900 Subject: [PATCH 198/544] Update framework --- osu-framework | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu-framework b/osu-framework index 9a773e62eb..500a791577 160000 --- a/osu-framework +++ b/osu-framework @@ -1 +1 @@ -Subproject commit 9a773e62eb246206b918ba4fccf9f2507aaa4595 +Subproject commit 500a791577979669e47eece699d5bd8b9068ee4b From 6f44db6de0d43feac5517dc691cdf36b27a5eaf3 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 28 Feb 2018 18:06:27 +0900 Subject: [PATCH 199/544] Clamp at DifficultyControlPoint This is what stable did. --- .../Beatmaps/ControlPoints/DifficultyControlPoint.cs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/osu.Game/Beatmaps/ControlPoints/DifficultyControlPoint.cs b/osu.Game/Beatmaps/ControlPoints/DifficultyControlPoint.cs index 69027ffd73..2b42553891 100644 --- a/osu.Game/Beatmaps/ControlPoints/DifficultyControlPoint.cs +++ b/osu.Game/Beatmaps/ControlPoints/DifficultyControlPoint.cs @@ -1,6 +1,8 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using OpenTK; + namespace osu.Game.Beatmaps.ControlPoints { public class DifficultyControlPoint : ControlPoint @@ -8,6 +10,12 @@ namespace osu.Game.Beatmaps.ControlPoints /// /// The speed multiplier at this control point. /// - public double SpeedMultiplier = 1; + public double SpeedMultiplier + { + get => speedMultiplier; + set => speedMultiplier = MathHelper.Clamp(value, 0.1, 10); + } + + private double speedMultiplier = 1; } } From 968291c61e03fae8856b229bea678fd3c18562a9 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 28 Feb 2018 17:40:04 +0900 Subject: [PATCH 200/544] Sort hitobjects imported from legacy beatmps Apaprently some ranked maps contain unordered hitobjects. We probably never want to allow for this. --- osu.Game/Beatmaps/Formats/LegacyBeatmapDecoder.cs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/osu.Game/Beatmaps/Formats/LegacyBeatmapDecoder.cs b/osu.Game/Beatmaps/Formats/LegacyBeatmapDecoder.cs index 3847787a4c..3e7b36f324 100644 --- a/osu.Game/Beatmaps/Formats/LegacyBeatmapDecoder.cs +++ b/osu.Game/Beatmaps/Formats/LegacyBeatmapDecoder.cs @@ -42,6 +42,10 @@ namespace osu.Game.Beatmaps.Formats ParseContent(stream); + // objects may be out of order *only* if a user has manually edited an .osu file. + // unfortunately there are ranked maps in this state (example: https://osu.ppy.sh/s/594828). + this.beatmap.HitObjects.Sort((x, y) => x.StartTime.CompareTo(y.StartTime)); + foreach (var hitObject in this.beatmap.HitObjects) hitObject.ApplyDefaults(this.beatmap.ControlPointInfo, this.beatmap.BeatmapInfo.BaseDifficulty); } From 5b4fef018069e5afd4394ce56081c84a8095ee89 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 28 Feb 2018 18:12:24 +0900 Subject: [PATCH 201/544] Add bare minimum sanity checking of beatmap input values to make broken maps load Resolves ppy/osu#1988. --- osu.Game.Rulesets.Osu/Objects/Slider.cs | 11 ++++++----- osu.Game/Beatmaps/Formats/LegacyBeatmapDecoder.cs | 3 ++- .../Objects/Legacy/Osu/ConvertHitObjectParser.cs | 3 ++- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Objects/Slider.cs b/osu.Game.Rulesets.Osu/Objects/Slider.cs index 61056832e9..76439ca530 100644 --- a/osu.Game.Rulesets.Osu/Objects/Slider.cs +++ b/osu.Game.Rulesets.Osu/Objects/Slider.cs @@ -3,7 +3,6 @@ using OpenTK; using osu.Game.Rulesets.Objects.Types; -using System; using System.Collections.Generic; using osu.Game.Rulesets.Objects; using System.Linq; @@ -120,14 +119,16 @@ namespace osu.Game.Rulesets.Osu.Objects private void createTicks() { - if (TickDistance == 0) return; - var length = Curve.Distance; - var tickDistance = Math.Min(TickDistance, length); + var tickDistance = MathHelper.Clamp(TickDistance, 0, length); + + if (tickDistance == 0) return; var minDistanceFromEnd = Velocity * 0.01; - for (var span = 0; span < this.SpanCount(); span++) + var spanCount = this.SpanCount(); + + for (var span = 0; span < spanCount; span++) { var spanStartTime = StartTime + span * SpanDuration; var reversed = span % 2 == 1; diff --git a/osu.Game/Beatmaps/Formats/LegacyBeatmapDecoder.cs b/osu.Game/Beatmaps/Formats/LegacyBeatmapDecoder.cs index 3e7b36f324..d58318994f 100644 --- a/osu.Game/Beatmaps/Formats/LegacyBeatmapDecoder.cs +++ b/osu.Game/Beatmaps/Formats/LegacyBeatmapDecoder.cs @@ -8,6 +8,7 @@ using OpenTK.Graphics; using osu.Game.Beatmaps.Timing; using osu.Game.Rulesets.Objects.Legacy; using osu.Game.Beatmaps.ControlPoints; +using OpenTK; namespace osu.Game.Beatmaps.Formats { @@ -319,7 +320,7 @@ namespace osu.Game.Beatmaps.Formats beatmap.ControlPointInfo.TimingPoints.Add(new TimingControlPoint { Time = time, - BeatLength = beatLength, + BeatLength = MathHelper.Clamp(beatLength, 100, 60000), TimeSignature = timeSignature }); } diff --git a/osu.Game/Rulesets/Objects/Legacy/Osu/ConvertHitObjectParser.cs b/osu.Game/Rulesets/Objects/Legacy/Osu/ConvertHitObjectParser.cs index 19f9a93976..d2a0530dd9 100644 --- a/osu.Game/Rulesets/Objects/Legacy/Osu/ConvertHitObjectParser.cs +++ b/osu.Game/Rulesets/Objects/Legacy/Osu/ConvertHitObjectParser.cs @@ -1,6 +1,7 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using System; using OpenTK; using osu.Game.Rulesets.Objects.Types; using System.Collections.Generic; @@ -29,7 +30,7 @@ namespace osu.Game.Rulesets.Objects.Legacy.Osu Position = position, NewCombo = newCombo, ControlPoints = controlPoints, - Distance = length, + Distance = Math.Max(0, length), CurveType = curveType, RepeatSamples = repeatSamples, RepeatCount = repeatCount From 2e535afb845bb1b6719d6df5611a771879c0d7de Mon Sep 17 00:00:00 2001 From: naoey Date: Wed, 28 Feb 2018 15:19:27 +0530 Subject: [PATCH 202/544] Remove redundant subsection title. - Also handle opening UserProfile in LinkFlowContainer similar to how beatmaps and channels are handled --- osu.Game/Graphics/Containers/LinkFlowContainer.cs | 6 ++---- osu.Game/OsuGame.cs | 6 ++++++ osu.Game/Overlays/Profile/Sections/RecentSection.cs | 2 +- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/osu.Game/Graphics/Containers/LinkFlowContainer.cs b/osu.Game/Graphics/Containers/LinkFlowContainer.cs index c16ccbce86..1d231ada23 100644 --- a/osu.Game/Graphics/Containers/LinkFlowContainer.cs +++ b/osu.Game/Graphics/Containers/LinkFlowContainer.cs @@ -23,16 +23,14 @@ namespace osu.Game.Graphics.Containers public override bool HandleMouseInput => true; private OsuGame game; - private UserProfileOverlay userProfile; private Action showNotImplementedError; [BackgroundDependencyLoader(true)] - private void load(OsuGame game, NotificationOverlay notifications, UserProfileOverlay userProfile) + private void load(OsuGame game, NotificationOverlay notifications) { // will be null in tests this.game = game; - this.userProfile = userProfile; showNotImplementedError = () => notifications?.Post(new SimpleNotification { @@ -94,7 +92,7 @@ namespace osu.Game.Graphics.Containers break; case LinkAction.OpenUserProfile: if (long.TryParse(linkArgument, out long userId)) - userProfile?.ShowUser(userId); + game?.ShowUser(userId); break; default: throw new NotImplementedException($"This {nameof(LinkAction)} ({linkType.ToString()}) is missing an associated action."); diff --git a/osu.Game/OsuGame.cs b/osu.Game/OsuGame.cs index 95eb88c5c8..cff7007fd5 100644 --- a/osu.Game/OsuGame.cs +++ b/osu.Game/OsuGame.cs @@ -154,6 +154,12 @@ namespace osu.Game /// The set to display. public void ShowBeatmapSet(int setId) => beatmapSetOverlay.ShowBeatmapSet(setId); + /// + /// Show a user's profile as an overlay. + /// + /// The user to display. + public void ShowUser(long userId) => userProfile.ShowUser(userId); + protected void LoadScore(Score s) { scoreLoad?.Cancel(); diff --git a/osu.Game/Overlays/Profile/Sections/RecentSection.cs b/osu.Game/Overlays/Profile/Sections/RecentSection.cs index db97dca440..84a941aa1a 100644 --- a/osu.Game/Overlays/Profile/Sections/RecentSection.cs +++ b/osu.Game/Overlays/Profile/Sections/RecentSection.cs @@ -15,7 +15,7 @@ namespace osu.Game.Overlays.Profile.Sections { Children = new[] { - new PaginatedRecentActivityContainer(User, @"Recent", @"This user hasn't done anything notable recently!"), + new PaginatedRecentActivityContainer(User, null, @"This user hasn't done anything notable recently!"), }; } } From 065630487a32b56b6473cb67b3439dd507b7ebb7 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 28 Feb 2018 20:07:44 +0900 Subject: [PATCH 203/544] Fix slider heads fading out too late --- osu.Game.Rulesets.Osu/Mods/OsuModHidden.cs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/osu.Game.Rulesets.Osu/Mods/OsuModHidden.cs b/osu.Game.Rulesets.Osu/Mods/OsuModHidden.cs index beabeb0a19..73ba39c31e 100644 --- a/osu.Game.Rulesets.Osu/Mods/OsuModHidden.cs +++ b/osu.Game.Rulesets.Osu/Mods/OsuModHidden.cs @@ -8,6 +8,7 @@ using osu.Framework.Graphics; using osu.Game.Rulesets.Mods; using osu.Game.Rulesets.Objects.Drawables; using osu.Game.Rulesets.Objects.Types; +using osu.Game.Rulesets.Osu.Objects; using osu.Game.Rulesets.Osu.Objects.Drawables; namespace osu.Game.Rulesets.Osu.Mods @@ -25,7 +26,10 @@ namespace osu.Game.Rulesets.Osu.Mods foreach (var d in drawables.OfType()) { d.ApplyCustomUpdateState += ApplyHiddenState; + d.HitObject.TimeFadein = d.HitObject.TimePreempt * fade_in_duration_multiplier; + foreach (var h in d.HitObject.NestedHitObjects.OfType()) + h.TimeFadein = h.TimePreempt * fade_in_duration_multiplier; } } From 3609c685d1afbbcdc28d237ad0238ace78f51b28 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 28 Feb 2018 20:35:15 +0900 Subject: [PATCH 204/544] Fix approach circle fading --- osu.Game.Rulesets.Osu/Mods/OsuModHidden.cs | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Mods/OsuModHidden.cs b/osu.Game.Rulesets.Osu/Mods/OsuModHidden.cs index 73ba39c31e..4aeb76121a 100644 --- a/osu.Game.Rulesets.Osu/Mods/OsuModHidden.cs +++ b/osu.Game.Rulesets.Osu/Mods/OsuModHidden.cs @@ -38,17 +38,20 @@ namespace osu.Game.Rulesets.Osu.Mods if (!(drawable is DrawableOsuHitObject d)) return; - var fadeOutStartTime = d.HitObject.StartTime - d.HitObject.TimePreempt + d.HitObject.TimeFadein; - var fadeOutDuration = d.HitObject.TimePreempt * fade_out_duration_multiplier; + var h = d.HitObject; + + var fadeOutStartTime = h.StartTime - h.TimePreempt + h.TimeFadein; + var fadeOutDuration = h.TimePreempt * fade_out_duration_multiplier; // new duration from completed fade in to end (before fading out) - var longFadeDuration = ((d.HitObject as IHasEndTime)?.EndTime ?? d.HitObject.StartTime) - fadeOutStartTime; + var longFadeDuration = ((h as IHasEndTime)?.EndTime ?? h.StartTime) - fadeOutStartTime; switch (drawable) { case DrawableHitCircle circle: // we don't want to see the approach circle - circle.ApproachCircle.Hide(); + using (circle.BeginAbsoluteSequence(h.StartTime - h.TimePreempt, true)) + circle.ApproachCircle.Hide(); // fade out immediately after fade in. using (drawable.BeginAbsoluteSequence(fadeOutStartTime, true)) From 01fcf9c813169f0bf2e90480d386aaa739838d18 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 28 Feb 2018 21:50:52 +0900 Subject: [PATCH 205/544] Update in line with framework changes --- osu.Game/Rulesets/UI/RulesetInputManager.cs | 2 +- osu.Game/Screens/Play/PauseContainer.cs | 2 +- osu.Game/Screens/Play/Player.cs | 4 ++-- osu.Game/Screens/Play/SkipButton.cs | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/osu.Game/Rulesets/UI/RulesetInputManager.cs b/osu.Game/Rulesets/UI/RulesetInputManager.cs index b00bbf1e3a..3f8a17e23d 100644 --- a/osu.Game/Rulesets/UI/RulesetInputManager.cs +++ b/osu.Game/Rulesets/UI/RulesetInputManager.cs @@ -101,7 +101,7 @@ namespace osu.Game.Rulesets.UI //our clock will now be our parent's clock, but we want to replace this to allow manual control. parentClock = Clock; - ShouldProcessClock = false; + ProcessCustomClock = false; Clock = new FramedClock(clock = new ManualClock { CurrentTime = parentClock.CurrentTime, diff --git a/osu.Game/Screens/Play/PauseContainer.cs b/osu.Game/Screens/Play/PauseContainer.cs index 220a48e7c5..40e734b7df 100644 --- a/osu.Game/Screens/Play/PauseContainer.cs +++ b/osu.Game/Screens/Play/PauseContainer.cs @@ -57,7 +57,7 @@ namespace osu.Game.Screens.Play AddInternal(content = new Container { Clock = this.framedClock, - ShouldProcessClock = false, + ProcessCustomClock = false, RelativeSizeAxes = Axes.Both }); diff --git a/osu.Game/Screens/Play/Player.cs b/osu.Game/Screens/Play/Player.cs index a36d7e8e23..e89d522d90 100644 --- a/osu.Game/Screens/Play/Player.cs +++ b/osu.Game/Screens/Play/Player.cs @@ -183,7 +183,7 @@ namespace osu.Game.Screens.Play { RelativeSizeAxes = Axes.Both, Clock = offsetClock, - ShouldProcessClock = false, + ProcessCustomClock = false, Children = new[] { storyboardContainer = new Container @@ -209,7 +209,7 @@ namespace osu.Game.Screens.Play Anchor = Anchor.Centre, Origin = Anchor.Centre, Clock = offsetClock, - ShouldProcessClock = false, + ProcessCustomClock = false, Breaks = beatmap.Breaks } } diff --git a/osu.Game/Screens/Play/SkipButton.cs b/osu.Game/Screens/Play/SkipButton.cs index e8b43b7c4e..08bb26c72b 100644 --- a/osu.Game/Screens/Play/SkipButton.cs +++ b/osu.Game/Screens/Play/SkipButton.cs @@ -65,7 +65,7 @@ namespace osu.Game.Screens.Play if (FramedClock != null) { Clock = FramedClock; - ShouldProcessClock = false; + ProcessCustomClock = false; } Children = new Drawable[] From f9faf8e3d826610200e5d32a2e8f2c455a528883 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 28 Feb 2018 22:01:52 +0900 Subject: [PATCH 206/544] Localise offset clock usage out of Player as much as possible --- osu.Game/Screens/Play/Player.cs | 28 +++++++++------------------- 1 file changed, 9 insertions(+), 19 deletions(-) diff --git a/osu.Game/Screens/Play/Player.cs b/osu.Game/Screens/Play/Player.cs index e89d522d90..cab791f3a5 100644 --- a/osu.Game/Screens/Play/Player.cs +++ b/osu.Game/Screens/Play/Player.cs @@ -56,11 +56,6 @@ namespace osu.Game.Screens.Play private IAdjustableClock sourceClock; - /// - /// The final usable gameplay clock with user-set offsets applied. - /// - private FramedOffsetClock offsetClock; - /// /// The decoupled clock used for gameplay. Should be used for seeks and clock control. /// @@ -156,7 +151,8 @@ namespace osu.Game.Screens.Play adjustableClock.ProcessFrame(); - offsetClock = new FramedOffsetClock(adjustableClock); + // the final usable gameplay clock with user-set offsets applied. + var offsetClock = new FramedOffsetClock(adjustableClock); userAudioOffset = config.GetBindable(OsuSetting.AudioOffset); userAudioOffset.ValueChanged += v => offsetClock.Offset = v; @@ -179,28 +175,23 @@ namespace osu.Game.Screens.Play OnResume = () => hudOverlay.KeyCounter.IsCounting = true, Children = new Drawable[] { - new Container + storyboardContainer = new Container { RelativeSizeAxes = Axes.Both, - Clock = offsetClock, - ProcessCustomClock = false, - Children = new[] - { - storyboardContainer = new Container - { - RelativeSizeAxes = Axes.Both, - Alpha = 0, - }, - RulesetContainer, - } + Alpha = 0, }, + RulesetContainer, new SkipButton(firstObjectTime) { + Clock = Clock, // skip button doesn't want to use the audio clock directly + ProcessCustomClock = false, AdjustableClock = adjustableClock, FramedClock = offsetClock, }, hudOverlay = new HUDOverlay(scoreProcessor, RulesetContainer, working, offsetClock, adjustableClock) { + Clock = Clock, // hud overlay doesn't want to use the audio clock directly + ProcessCustomClock = false, Anchor = Anchor.Centre, Origin = Anchor.Centre }, @@ -208,7 +199,6 @@ namespace osu.Game.Screens.Play { Anchor = Anchor.Centre, Origin = Anchor.Centre, - Clock = offsetClock, ProcessCustomClock = false, Breaks = beatmap.Breaks } From 6ac71abd0efdbeee69c5a7a47d302f29f3ef56eb Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 28 Feb 2018 22:48:30 +0900 Subject: [PATCH 207/544] Update framework --- osu-framework | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu-framework b/osu-framework index 500a791577..a0bcf76a1a 160000 --- a/osu-framework +++ b/osu-framework @@ -1 +1 @@ -Subproject commit 500a791577979669e47eece699d5bd8b9068ee4b +Subproject commit a0bcf76a1a9522b214700c9e3198d6b992042c75 From 572d3b1316a8033c42b2a0c09993ec0064ec1ded Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 28 Feb 2018 22:53:16 +0900 Subject: [PATCH 208/544] Move bpm clamping to TimingControlPoint, adjust range to 1-10000bpm In line with stable editor restrictions --- osu.Game/Beatmaps/ControlPoints/TimingControlPoint.cs | 9 ++++++++- osu.Game/Beatmaps/Formats/LegacyBeatmapDecoder.cs | 3 +-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/osu.Game/Beatmaps/ControlPoints/TimingControlPoint.cs b/osu.Game/Beatmaps/ControlPoints/TimingControlPoint.cs index 0592ef38c5..933eb93304 100644 --- a/osu.Game/Beatmaps/ControlPoints/TimingControlPoint.cs +++ b/osu.Game/Beatmaps/ControlPoints/TimingControlPoint.cs @@ -1,6 +1,7 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using OpenTK; using osu.Game.Beatmaps.Timing; namespace osu.Game.Beatmaps.ControlPoints @@ -15,6 +16,12 @@ namespace osu.Game.Beatmaps.ControlPoints /// /// The beat length at this control point. /// - public double BeatLength = 1000; + public double BeatLength + { + get => beatLength; + set => beatLength = MathHelper.Clamp(value, 100, 60000); + } + + private double beatLength = 1000; } } diff --git a/osu.Game/Beatmaps/Formats/LegacyBeatmapDecoder.cs b/osu.Game/Beatmaps/Formats/LegacyBeatmapDecoder.cs index d58318994f..3e7b36f324 100644 --- a/osu.Game/Beatmaps/Formats/LegacyBeatmapDecoder.cs +++ b/osu.Game/Beatmaps/Formats/LegacyBeatmapDecoder.cs @@ -8,7 +8,6 @@ using OpenTK.Graphics; using osu.Game.Beatmaps.Timing; using osu.Game.Rulesets.Objects.Legacy; using osu.Game.Beatmaps.ControlPoints; -using OpenTK; namespace osu.Game.Beatmaps.Formats { @@ -320,7 +319,7 @@ namespace osu.Game.Beatmaps.Formats beatmap.ControlPointInfo.TimingPoints.Add(new TimingControlPoint { Time = time, - BeatLength = MathHelper.Clamp(beatLength, 100, 60000), + BeatLength = beatLength, TimeSignature = timeSignature }); } From 0ed13c3f9de094e4ad73b5f014be29ffaf63607a Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 28 Feb 2018 23:31:05 +0900 Subject: [PATCH 209/544] Update framework with regression fix --- osu-framework | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu-framework b/osu-framework index a0bcf76a1a..e8ae207769 160000 --- a/osu-framework +++ b/osu-framework @@ -1 +1 @@ -Subproject commit a0bcf76a1a9522b214700c9e3198d6b992042c75 +Subproject commit e8ae207769ec26fb7ddd67a2433514fcda354ecd From 46dfb761c57e1804576760ce217ddf4a44544cba Mon Sep 17 00:00:00 2001 From: jorolf Date: Wed, 28 Feb 2018 16:14:52 +0100 Subject: [PATCH 210/544] basic volume meter and testcase --- .../Visual/TestCaseVolumeControl.cs | 29 +++ osu.Game.Tests/osu.Game.Tests.csproj | 1 + osu.Game/Overlays/Volume/MuteButton.cs | 58 ++++++ osu.Game/Overlays/Volume/VolumeMeter.cs | 193 ++++++++++++++++++ osu.Game/osu.Game.csproj | 2 + 5 files changed, 283 insertions(+) create mode 100644 osu.Game.Tests/Visual/TestCaseVolumeControl.cs create mode 100644 osu.Game/Overlays/Volume/MuteButton.cs create mode 100644 osu.Game/Overlays/Volume/VolumeMeter.cs diff --git a/osu.Game.Tests/Visual/TestCaseVolumeControl.cs b/osu.Game.Tests/Visual/TestCaseVolumeControl.cs new file mode 100644 index 0000000000..04390d6d19 --- /dev/null +++ b/osu.Game.Tests/Visual/TestCaseVolumeControl.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using osu.Framework.Allocation; +using osu.Framework.Audio; +using osu.Framework.Graphics; +using osu.Framework.Testing; +using osu.Game.Graphics; +using osu.Game.Overlays.Volume; + +namespace osu.Game.Tests.Visual +{ + public class TestCaseVolumeControl : TestCase + { + public override IReadOnlyList RequiredTypes => new[] { typeof(VolumeMeter), typeof(MuteButton) }; + + [BackgroundDependencyLoader] + private void load(AudioManager audio, OsuColour colours) + { + VolumeMeter meter; + Add(meter = new VolumeMeter("MASTER", 125, colours.PinkDarker)); + Add(new MuteButton + { + Margin = new MarginPadding { Top = 200 } + }); + + meter.Bindable.BindTo(audio.Volume); + } + } +} diff --git a/osu.Game.Tests/osu.Game.Tests.csproj b/osu.Game.Tests/osu.Game.Tests.csproj index 8301f1f734..63adbc8b43 100644 --- a/osu.Game.Tests/osu.Game.Tests.csproj +++ b/osu.Game.Tests/osu.Game.Tests.csproj @@ -162,6 +162,7 @@ + diff --git a/osu.Game/Overlays/Volume/MuteButton.cs b/osu.Game/Overlays/Volume/MuteButton.cs new file mode 100644 index 0000000000..b45034c166 --- /dev/null +++ b/osu.Game/Overlays/Volume/MuteButton.cs @@ -0,0 +1,58 @@ +using osu.Framework.Allocation; +using osu.Framework.Configuration; +using osu.Framework.Extensions.Color4Extensions; +using osu.Framework.Graphics; +using osu.Framework.Graphics.Colour; +using osu.Framework.Graphics.Containers; +using osu.Framework.Graphics.Shapes; +using osu.Framework.Graphics.UserInterface; +using osu.Framework.Input; +using osu.Game.Graphics; +using OpenTK; +using OpenTK.Graphics; + +namespace osu.Game.Overlays.Volume +{ + public class MuteButton : Container, IHasCurrentValue + { + public Bindable Current { get; } = new Bindable(); + + private Color4 hoveredColour, unhoveredColour; + + public MuteButton() + { + Masking = true; + BorderThickness = 3; + CornerRadius = 20; + Size = new Vector2(100, 40); + } + + [BackgroundDependencyLoader] + private void load(OsuColour colours) + { + hoveredColour = colours.YellowDark; + BorderColour = unhoveredColour = colours.Gray1.Opacity(0.9f); + + AddRange(new Drawable[] + { + new Box + { + RelativeSizeAxes = Axes.Both, + Colour = colours.Gray1, + Alpha = 0.9f, + }, + }); + } + + protected override bool OnHover(InputState state) + { + this.TransformTo("BorderColour", hoveredColour, 500, Easing.OutQuint); + return true; + } + + protected override void OnHoverLost(InputState state) + { + this.TransformTo("BorderColour", unhoveredColour, 500, Easing.OutQuint); + } + } +} diff --git a/osu.Game/Overlays/Volume/VolumeMeter.cs b/osu.Game/Overlays/Volume/VolumeMeter.cs new file mode 100644 index 0000000000..3351dbed9a --- /dev/null +++ b/osu.Game/Overlays/Volume/VolumeMeter.cs @@ -0,0 +1,193 @@ +using System; +using System.Globalization; +using osu.Framework.Allocation; +using osu.Framework.Configuration; +using osu.Framework.Graphics; +using osu.Framework.Graphics.Containers; +using osu.Framework.Graphics.Effects; +using osu.Framework.Graphics.Shapes; +using osu.Framework.Graphics.Transforms; +using osu.Framework.Graphics.UserInterface; +using osu.Framework.Input.Bindings; +using osu.Framework.MathUtils; +using osu.Game.Graphics; +using osu.Game.Graphics.Sprites; +using osu.Game.Input.Bindings; +using OpenTK; +using OpenTK.Graphics; + +namespace osu.Game.Overlays.Volume +{ + public class VolumeMeter : Container, IKeyBindingHandler + { + private CircularProgress volumeCircle; + public BindableDouble Bindable { get; } = new BindableDouble(); + private readonly float circleSize; + private readonly Color4 meterColour; + private readonly string name; + + public VolumeMeter(string name, float circleSize, Color4 meterColour) + { + this.circleSize = circleSize; + this.meterColour = meterColour; + this.name = name; + + AutoSizeAxes = Axes.Both; + } + + [BackgroundDependencyLoader] + private void load(OsuColour colours) + { + Add(new Container + { + Size = new Vector2(120, 20), + CornerRadius = 10, + Masking = true, + Margin = new MarginPadding { Left = circleSize + 10 }, + Origin = Anchor.CentreLeft, + Anchor = Anchor.CentreLeft, + Children = new Drawable[] + { + new Box + { + RelativeSizeAxes = Axes.Both, + Colour = colours.Gray1, + Alpha = 0.9f, + }, + new OsuSpriteText + { + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + Font = "Exo2.0-Bold", + Text = name + } + } + }); + + + OsuSpriteText text, maxText; + CircularProgress bgProgress; + BufferedContainer maxGlow; + + Add(new CircularContainer + { + Masking = true, + Size = new Vector2(circleSize), + Children = new Drawable[] + { + new Box + { + RelativeSizeAxes = Axes.Both, + Colour = colours.Gray1, + Alpha = 0.9f, + }, + bgProgress = new CircularProgress + { + RelativeSizeAxes = Axes.Both, + InnerRadius = 0.05f, + Rotation = 180, + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + Colour = colours.Gray2, + Size = new Vector2(0.8f) + }, + (volumeCircle = new CircularProgress + { + RelativeSizeAxes = Axes.Both, + InnerRadius = 0.05f, + Rotation = 180, + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + Size = new Vector2(0.8f) + }).WithEffect(new GlowEffect + { + Colour = meterColour, + Strength = 2 + }), + maxGlow = new OsuSpriteText + { + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + Font = "Venera", + Text = "MAX", + TextSize = 0.16f * circleSize + }.WithEffect(new GlowEffect + { + Colour = meterColour, + PadExtent = true, + Strength = 2, + }), + text = new OsuSpriteText + { + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + Font = "Venera", + TextSize = 0.16f * circleSize + } + } + }); + + Bindable.ValueChanged += newVolume => this.TransformTo("circleBindable", newVolume * 0.75, 250, Easing.OutQuint); + volumeCircle.Current.ValueChanged += newVolume => + { + if (newVolume > 0.745) + { + text.Alpha = 0; + maxGlow.Alpha = 1; //show "MAX" + } + else + { + text.Text = Math.Round(newVolume / 0.0075).ToString(CultureInfo.CurrentCulture); + text.Alpha = 1; + maxGlow.Alpha = 0; + } + }; + + bgProgress.Current.Value = 0.75f; + } + + /// + /// This is needed because doesn't support + /// + private double circleBindable + { + get => volumeCircle.Current; + set => volumeCircle.Current.Value = value; + } + + public double Volume + { + get => Bindable; + private set => Bindable.Value = value; + } + + public void Increase() + { + Volume += 0.05f; + } + + public void Decrease() + { + Volume -= 0.05f; + } + + public bool OnPressed(GlobalAction action) + { + if (!IsHovered) return false; + + switch (action) + { + case GlobalAction.DecreaseVolume: + Decrease(); + return true; + case GlobalAction.IncreaseVolume: + Increase(); + return true; + } + + return false; + } + + public bool OnReleased(GlobalAction action) => false; + } +} diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index 4944613828..b94da5badb 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -330,6 +330,8 @@ + + From b8ea4b11ab87a100723da620798be433300dc811 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 1 Mar 2018 00:39:59 +0900 Subject: [PATCH 211/544] Adjust range further This is not a great idea. --- osu.Game/Beatmaps/ControlPoints/TimingControlPoint.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game/Beatmaps/ControlPoints/TimingControlPoint.cs b/osu.Game/Beatmaps/ControlPoints/TimingControlPoint.cs index 933eb93304..0db1f08a90 100644 --- a/osu.Game/Beatmaps/ControlPoints/TimingControlPoint.cs +++ b/osu.Game/Beatmaps/ControlPoints/TimingControlPoint.cs @@ -19,7 +19,7 @@ namespace osu.Game.Beatmaps.ControlPoints public double BeatLength { get => beatLength; - set => beatLength = MathHelper.Clamp(value, 100, 60000); + set => beatLength = MathHelper.Clamp(value, 6, 60000); } private double beatLength = 1000; From a3c7755ade849b1e99bfea39d3e53dc108f56746 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Wed, 28 Feb 2018 16:34:47 +0900 Subject: [PATCH 212/544] Implement a conversion process for ReplayFrames --- .../Replays/CatchAutoGenerator.cs | 6 +- .../Replays/CatchFramedReplayInputHandler.cs | 32 ++-- .../Replays/CatchReplayFrame.cs | 22 ++- .../UI/CatchRulesetContainer.cs | 3 +- .../Beatmaps/StageDefinition.cs | 12 ++ .../Mods/ManiaModAutoplay.cs | 3 +- .../Replays/ManiaAutoGenerator.cs | 33 +++- .../Replays/ManiaFramedReplayInputHandler.cs | 30 +--- .../Replays/ManiaReplayFrame.cs | 45 +++++- .../Tests/TestCaseAutoGeneration.cs | 60 +++---- .../UI/ManiaRulesetContainer.cs | 3 +- osu.Game.Rulesets.Mania/UI/ManiaStage.cs | 11 +- osu.Game.Rulesets.Osu/OsuRuleset.cs | 4 + .../Replays/OsuAutoGenerator.cs | 71 ++++---- .../Replays/OsuReplayFrame.cs | 38 +++++ .../Replays/OsuReplayInputHandler.cs | 21 ++- .../UI/OsuRulesetContainer.cs | 3 +- .../osu.Game.Rulesets.Osu.csproj | 1 + .../Replays/TaikoAutoGenerator.cs | 42 ++--- .../Replays/TaikoFramedReplayInputHandler.cs | 18 +-- .../Replays/TaikoReplayFrame.cs | 22 ++- .../UI/TaikoRulesetContainer.cs | 3 +- .../Replays/FramedReplayInputHandler.cs | 47 ++---- .../Replays/Legacy/LegacyReplayFrame.cs | 62 +++++++ .../Replays/{ => Legacy}/ReplayButtonState.cs | 2 +- osu.Game/Rulesets/Replays/Replay.cs | 1 - osu.Game/Rulesets/Replays/ReplayFrame.cs | 55 +------ .../Replays/Types/IConvertibleReplayFrame.cs | 14 ++ osu.Game/Rulesets/Ruleset.cs | 3 + osu.Game/Rulesets/Scoring/IScoreParser.cs | 12 ++ .../Scoring/Legacy/LegacyScoreParser.cs | 151 ++++++++++++++++++ osu.Game/Rulesets/Scoring/ScoreStore.cs | 127 +-------------- osu.Game/Rulesets/UI/RulesetContainer.cs | 3 +- osu.Game/osu.Game.csproj | 10 +- 34 files changed, 577 insertions(+), 393 deletions(-) create mode 100644 osu.Game.Rulesets.Osu/Replays/OsuReplayFrame.cs create mode 100644 osu.Game/Rulesets/Replays/Legacy/LegacyReplayFrame.cs rename osu.Game/Rulesets/Replays/{ => Legacy}/ReplayButtonState.cs (85%) create mode 100644 osu.Game/Rulesets/Replays/Types/IConvertibleReplayFrame.cs create mode 100644 osu.Game/Rulesets/Scoring/IScoreParser.cs create mode 100644 osu.Game/Rulesets/Scoring/Legacy/LegacyScoreParser.cs diff --git a/osu.Game.Rulesets.Catch/Replays/CatchAutoGenerator.cs b/osu.Game.Rulesets.Catch/Replays/CatchAutoGenerator.cs index f8ca75fae9..d0772bbaa1 100644 --- a/osu.Game.Rulesets.Catch/Replays/CatchAutoGenerator.cs +++ b/osu.Game.Rulesets.Catch/Replays/CatchAutoGenerator.cs @@ -63,7 +63,7 @@ namespace osu.Game.Rulesets.Catch.Replays } else if (h.HyperDash) { - Replay.Frames.Add(new CatchReplayFrame(h.StartTime - timeAvailable, lastPosition, ReplayButtonState.Right1)); + Replay.Frames.Add(new CatchReplayFrame(h.StartTime - timeAvailable, lastPosition, true)); Replay.Frames.Add(new CatchReplayFrame(h.StartTime, h.X)); } else if (dashRequired) @@ -76,7 +76,7 @@ namespace osu.Game.Rulesets.Catch.Replays float midPosition = (float)Interpolation.Lerp(lastPosition, h.X, (float)timeAtDashSpeed / timeAvailable); //dash movement - Replay.Frames.Add(new CatchReplayFrame(h.StartTime - timeAvailable + 1, lastPosition, ReplayButtonState.Left1)); + Replay.Frames.Add(new CatchReplayFrame(h.StartTime - timeAvailable + 1, lastPosition, true)); Replay.Frames.Add(new CatchReplayFrame(h.StartTime - timeAvailable + timeAtDashSpeed, midPosition)); Replay.Frames.Add(new CatchReplayFrame(h.StartTime, h.X)); } @@ -84,7 +84,7 @@ namespace osu.Game.Rulesets.Catch.Replays { double timeBefore = positionChange / movement_speed; - Replay.Frames.Add(new CatchReplayFrame(h.StartTime - timeBefore, lastPosition, ReplayButtonState.Right1)); + Replay.Frames.Add(new CatchReplayFrame(h.StartTime - timeBefore, lastPosition, true)); Replay.Frames.Add(new CatchReplayFrame(h.StartTime, h.X)); } diff --git a/osu.Game.Rulesets.Catch/Replays/CatchFramedReplayInputHandler.cs b/osu.Game.Rulesets.Catch/Replays/CatchFramedReplayInputHandler.cs index 2f296a2504..795a859f5f 100644 --- a/osu.Game.Rulesets.Catch/Replays/CatchFramedReplayInputHandler.cs +++ b/osu.Game.Rulesets.Catch/Replays/CatchFramedReplayInputHandler.cs @@ -3,37 +3,49 @@ using System.Collections.Generic; using osu.Framework.Input; +using osu.Framework.MathUtils; using osu.Game.Rulesets.Replays; namespace osu.Game.Rulesets.Catch.Replays { - public class CatchFramedReplayInputHandler : FramedReplayInputHandler + public class CatchFramedReplayInputHandler : FramedReplayInputHandler { public CatchFramedReplayInputHandler(Replay replay) : base(replay) { } + protected float? Position + { + get + { + if (!HasFrames) + return null; + + return Interpolation.ValueAt(CurrentTime, CurrentFrame.X, NextFrame.X, CurrentFrame.Time, NextFrame.Time); + } + } + public override List GetPendingStates() { if (!Position.HasValue) return new List(); - var action = new List(); + var actions = new List(); - if (CurrentFrame.ButtonState == ReplayButtonState.Left1) - action.Add(CatchAction.Dash); + if (CurrentFrame.Dashing) + actions.Add(CatchAction.Dash); - if (Position.Value.X > CurrentFrame.Position.X) - action.Add(CatchAction.MoveRight); - else if (Position.Value.X < CurrentFrame.Position.X) - action.Add(CatchAction.MoveLeft); + if (Position.Value > CurrentFrame.X) + actions.Add(CatchAction.MoveRight); + else if (Position.Value < CurrentFrame.X) + actions.Add(CatchAction.MoveLeft); return new List { new CatchReplayState { - PressedActions = action, - CatcherX = Position.Value.X + PressedActions = actions, + CatcherX = Position.Value }, }; } diff --git a/osu.Game.Rulesets.Catch/Replays/CatchReplayFrame.cs b/osu.Game.Rulesets.Catch/Replays/CatchReplayFrame.cs index 0194fc93a4..c81b095f30 100644 --- a/osu.Game.Rulesets.Catch/Replays/CatchReplayFrame.cs +++ b/osu.Game.Rulesets.Catch/Replays/CatchReplayFrame.cs @@ -1,17 +1,31 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using osu.Game.Beatmaps; using osu.Game.Rulesets.Replays; +using osu.Game.Rulesets.Replays.Legacy; +using osu.Game.Rulesets.Replays.Types; +using osu.Game.Rulesets.Scoring; namespace osu.Game.Rulesets.Catch.Replays { - public class CatchReplayFrame : ReplayFrame + public class CatchReplayFrame : ReplayFrame, IConvertibleReplayFrame { - public override bool IsImportant => MouseX > 0; + public float X; + public bool Dashing; - public CatchReplayFrame(double time, float? x = null, ReplayButtonState button = ReplayButtonState.None) - : base(time, x ?? -1, null, button) + public CatchReplayFrame(double time, float? x = null, bool dashing = false) + : base(time) { + X = x ?? -1; + Dashing = dashing; + } + + public void ConvertFrom(LegacyReplayFrame legacyFrame, Score score, Beatmap beatmap) + { + // Todo: This needs to be re-scaled + X = legacyFrame.Position.X; + Dashing = legacyFrame.ButtonState == ReplayButtonState.Left1; } } } diff --git a/osu.Game.Rulesets.Catch/UI/CatchRulesetContainer.cs b/osu.Game.Rulesets.Catch/UI/CatchRulesetContainer.cs index 956a524121..41dd7fdf4e 100644 --- a/osu.Game.Rulesets.Catch/UI/CatchRulesetContainer.cs +++ b/osu.Game.Rulesets.Catch/UI/CatchRulesetContainer.cs @@ -3,6 +3,7 @@ using osu.Framework.Input; using osu.Game.Beatmaps; +using osu.Game.Input.Handlers; using osu.Game.Rulesets.Catch.Beatmaps; using osu.Game.Rulesets.Catch.Objects; using osu.Game.Rulesets.Catch.Objects.Drawable; @@ -26,7 +27,7 @@ namespace osu.Game.Rulesets.Catch.UI public override ScoreProcessor CreateScoreProcessor() => new CatchScoreProcessor(this); - protected override FramedReplayInputHandler CreateReplayInputHandler(Replay replay) => new CatchFramedReplayInputHandler(replay); + protected override ReplayInputHandler CreateReplayInputHandler(Replay replay) => new CatchFramedReplayInputHandler(replay); protected override BeatmapProcessor CreateBeatmapProcessor() => new CatchBeatmapProcessor(); diff --git a/osu.Game.Rulesets.Mania/Beatmaps/StageDefinition.cs b/osu.Game.Rulesets.Mania/Beatmaps/StageDefinition.cs index aeefc2f396..113f4f2164 100644 --- a/osu.Game.Rulesets.Mania/Beatmaps/StageDefinition.cs +++ b/osu.Game.Rulesets.Mania/Beatmaps/StageDefinition.cs @@ -14,5 +14,17 @@ namespace osu.Game.Rulesets.Mania.Beatmaps /// The number of s which this stage contains. /// public int Columns; + + /// + /// Whether this stage has a special column. + /// + public bool HasSpecialColumn => Columns % 2 == 1; + + /// + /// Whether the column index is a special column for this stage. + /// + /// The 0-based column index. + /// Whether the column is a special column. + public bool IsSpecialColumn(int column) => Columns % 2 == 1 && column == Columns / 2; } } diff --git a/osu.Game.Rulesets.Mania/Mods/ManiaModAutoplay.cs b/osu.Game.Rulesets.Mania/Mods/ManiaModAutoplay.cs index 3c5179cef0..9ceb0ab7ea 100644 --- a/osu.Game.Rulesets.Mania/Mods/ManiaModAutoplay.cs +++ b/osu.Game.Rulesets.Mania/Mods/ManiaModAutoplay.cs @@ -2,6 +2,7 @@ // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using osu.Game.Beatmaps; +using osu.Game.Rulesets.Mania.Beatmaps; using osu.Game.Rulesets.Mania.Objects; using osu.Game.Rulesets.Mania.Replays; using osu.Game.Rulesets.Mods; @@ -17,7 +18,7 @@ namespace osu.Game.Rulesets.Mania.Mods return new Score { User = new User { Username = "osu!topus!" }, - Replay = new ManiaAutoGenerator(beatmap).Generate(), + Replay = new ManiaAutoGenerator((ManiaBeatmap)beatmap).Generate(), }; } } diff --git a/osu.Game.Rulesets.Mania/Replays/ManiaAutoGenerator.cs b/osu.Game.Rulesets.Mania/Replays/ManiaAutoGenerator.cs index 6f6217f540..5a992bb970 100644 --- a/osu.Game.Rulesets.Mania/Replays/ManiaAutoGenerator.cs +++ b/osu.Game.Rulesets.Mania/Replays/ManiaAutoGenerator.cs @@ -3,7 +3,7 @@ using System.Collections.Generic; using System.Linq; -using osu.Game.Beatmaps; +using osu.Game.Rulesets.Mania.Beatmaps; using osu.Game.Rulesets.Mania.Objects; using osu.Game.Rulesets.Objects.Types; using osu.Game.Rulesets.Replays; @@ -15,10 +15,31 @@ namespace osu.Game.Rulesets.Mania.Replays { public const double RELEASE_DELAY = 20; - public ManiaAutoGenerator(Beatmap beatmap) + public new ManiaBeatmap Beatmap => (ManiaBeatmap)base.Beatmap; + + private readonly ManiaAction[] columnActions; + + public ManiaAutoGenerator(ManiaBeatmap beatmap) : base(beatmap) { Replay = new Replay { User = new User { Username = @"Autoplay" } }; + + columnActions = new ManiaAction[Beatmap.TotalColumns]; + + var normalAction = ManiaAction.Key1; + var specialAction = ManiaAction.Special1; + int totalCounter = 0; + foreach (var stage in Beatmap.Stages) + { + for (int i = 0; i < stage.Columns; i++) + { + if (stage.IsSpecialColumn(i)) + columnActions[totalCounter] = specialAction++; + else + columnActions[totalCounter] = normalAction++; + totalCounter++; + } + } } protected Replay Replay; @@ -30,18 +51,18 @@ namespace osu.Game.Rulesets.Mania.Replays var pointGroups = generateActionPoints().GroupBy(a => a.Time).OrderBy(g => g.First().Time); - int activeColumns = 0; + var actions = new List(); foreach (var group in pointGroups) { foreach (var point in group) { if (point is HitPoint) - activeColumns |= 1 << point.Column; + actions.Add(columnActions[point.Column]); if (point is ReleasePoint) - activeColumns ^= 1 << point.Column; + actions.Remove(columnActions[point.Column]); } - Replay.Frames.Add(new ManiaReplayFrame(group.First().Time, activeColumns)); + Replay.Frames.Add(new ManiaReplayFrame(group.First().Time, actions.ToArray())); } return Replay; diff --git a/osu.Game.Rulesets.Mania/Replays/ManiaFramedReplayInputHandler.cs b/osu.Game.Rulesets.Mania/Replays/ManiaFramedReplayInputHandler.cs index fd084f138f..fb9ae37831 100644 --- a/osu.Game.Rulesets.Mania/Replays/ManiaFramedReplayInputHandler.cs +++ b/osu.Game.Rulesets.Mania/Replays/ManiaFramedReplayInputHandler.cs @@ -2,42 +2,18 @@ // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using System.Collections.Generic; -using System.Linq; using osu.Framework.Input; -using osu.Game.Rulesets.Mania.UI; using osu.Game.Rulesets.Replays; namespace osu.Game.Rulesets.Mania.Replays { - internal class ManiaFramedReplayInputHandler : FramedReplayInputHandler + internal class ManiaFramedReplayInputHandler : FramedReplayInputHandler { - private readonly ManiaRulesetContainer container; - - public ManiaFramedReplayInputHandler(Replay replay, ManiaRulesetContainer container) + public ManiaFramedReplayInputHandler(Replay replay) : base(replay) { - this.container = container; } - private ManiaPlayfield playfield; - public override List GetPendingStates() - { - var actions = new List(); - - if (playfield == null) - playfield = (ManiaPlayfield)container.Playfield; - - int activeColumns = (int)(CurrentFrame.MouseX ?? 0); - int counter = 0; - while (activeColumns > 0) - { - if ((activeColumns & 1) > 0) - actions.Add(playfield.Columns.ElementAt(counter).Action); - counter++; - activeColumns >>= 1; - } - - return new List { new ReplayState { PressedActions = actions } }; - } + public override List GetPendingStates() => new List { new ReplayState { PressedActions = CurrentFrame.Actions } }; } } diff --git a/osu.Game.Rulesets.Mania/Replays/ManiaReplayFrame.cs b/osu.Game.Rulesets.Mania/Replays/ManiaReplayFrame.cs index e5c5ac9eeb..ed1143d8ff 100644 --- a/osu.Game.Rulesets.Mania/Replays/ManiaReplayFrame.cs +++ b/osu.Game.Rulesets.Mania/Replays/ManiaReplayFrame.cs @@ -1,17 +1,54 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using System.Collections.Generic; +using osu.Game.Beatmaps; +using osu.Game.Rulesets.Mania.Beatmaps; using osu.Game.Rulesets.Replays; +using osu.Game.Rulesets.Replays.Legacy; +using osu.Game.Rulesets.Replays.Types; +using osu.Game.Rulesets.Scoring; namespace osu.Game.Rulesets.Mania.Replays { - public class ManiaReplayFrame : ReplayFrame + public class ManiaReplayFrame : ReplayFrame, IConvertibleReplayFrame { - public override bool IsImportant => MouseX > 0; + public List Actions = new List(); - public ManiaReplayFrame(double time, int activeColumns) - : base(time, activeColumns, null, ReplayButtonState.None) + public ManiaReplayFrame(double time, params ManiaAction[] actions) + : base(time) { + Actions.AddRange(actions); + } + + public void ConvertFrom(LegacyReplayFrame legacyFrame, Score score, Beatmap beatmap) + { + // We don't need to fully convert, just create the converter + var converter = new ManiaBeatmapConverter(beatmap.BeatmapInfo.Ruleset.Equals(score.Ruleset), beatmap); + + // Todo: Apply mods to converter + // NB: Via co-op mod, osu-stable can have two stages with floor(col/2) and ceil(col/2) columns. This will need special handling + // elsewhere in the game if we do choose to support the old co-op mod anyway. For now, assume that there is only one stage. + + bool isSpecialColumn(int column) => converter.TargetColumns % 2 == 1 && column == converter.TargetColumns / 2; + + var normalAction = ManiaAction.Key1; + var specialAction = ManiaAction.Special1; + + int activeColumns = (int)(legacyFrame.MouseX ?? 0); + int counter = 0; + while (activeColumns > 0) + { + Actions.Add((activeColumns & 1) > 0 ? specialAction : normalAction); + + if (isSpecialColumn(counter)) + normalAction++; + else + specialAction++; + + counter++; + activeColumns >>= 1; + } } } } diff --git a/osu.Game.Rulesets.Mania/Tests/TestCaseAutoGeneration.cs b/osu.Game.Rulesets.Mania/Tests/TestCaseAutoGeneration.cs index 07fb6ac670..5a5c47bc87 100644 --- a/osu.Game.Rulesets.Mania/Tests/TestCaseAutoGeneration.cs +++ b/osu.Game.Rulesets.Mania/Tests/TestCaseAutoGeneration.cs @@ -1,10 +1,12 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using System.Linq; using NUnit.Framework; -using osu.Game.Beatmaps; +using osu.Game.Rulesets.Mania.Beatmaps; using osu.Game.Rulesets.Mania.Objects; using osu.Game.Rulesets.Mania.Replays; +using osu.Game.Rulesets.Replays; using osu.Game.Tests.Visual; namespace osu.Game.Rulesets.Mania.Tests @@ -18,7 +20,7 @@ namespace osu.Game.Rulesets.Mania.Tests // | - | // | | - var beatmap = new Beatmap(); + var beatmap = new ManiaBeatmap(new StageDefinition { Columns = 1 }); beatmap.HitObjects.Add(new Note { StartTime = 1000 }); var generated = new ManiaAutoGenerator(beatmap).Generate(); @@ -26,8 +28,8 @@ namespace osu.Game.Rulesets.Mania.Tests Assert.IsTrue(generated.Frames.Count == 3, "Replay must have 3 frames"); Assert.AreEqual(1000, generated.Frames[1].Time, "Incorrect hit time"); Assert.AreEqual(1000 + ManiaAutoGenerator.RELEASE_DELAY, generated.Frames[2].Time, "Incorrect release time"); - Assert.AreEqual(1, generated.Frames[1].MouseX, "Key 0 has not been pressed"); - Assert.AreEqual(0, generated.Frames[2].MouseX, "Key 0 has not been released"); + Assert.IsTrue(checkContains(generated.Frames[1], ManiaAction.Special1), "Special1 has not been pressed"); + Assert.IsFalse(checkContains(generated.Frames[2], ManiaAction.Special1), "Special1 has not been released"); } [Test] @@ -39,7 +41,7 @@ namespace osu.Game.Rulesets.Mania.Tests // | * | // | | - var beatmap = new Beatmap(); + var beatmap = new ManiaBeatmap(new StageDefinition { Columns = 1 }); beatmap.HitObjects.Add(new HoldNote { StartTime = 1000, Duration = 2000 }); var generated = new ManiaAutoGenerator(beatmap).Generate(); @@ -47,8 +49,8 @@ namespace osu.Game.Rulesets.Mania.Tests Assert.IsTrue(generated.Frames.Count == 3, "Replay must have 3 frames"); Assert.AreEqual(1000, generated.Frames[1].Time, "Incorrect hit time"); Assert.AreEqual(3000 + ManiaAutoGenerator.RELEASE_DELAY, generated.Frames[2].Time, "Incorrect release time"); - Assert.AreEqual(1, generated.Frames[1].MouseX, "Key 0 has not been pressed"); - Assert.AreEqual(0, generated.Frames[2].MouseX, "Key 0 has not been released"); + Assert.IsTrue(checkContains(generated.Frames[1], ManiaAction.Special1), "Special1 has not been pressed"); + Assert.IsFalse(checkContains(generated.Frames[2], ManiaAction.Special1), "Special1 has not been released"); } [Test] @@ -58,7 +60,7 @@ namespace osu.Game.Rulesets.Mania.Tests // | - | - | // | | | - var beatmap = new Beatmap(); + var beatmap = new ManiaBeatmap(new StageDefinition { Columns = 2 }); beatmap.HitObjects.Add(new Note { StartTime = 1000 }); beatmap.HitObjects.Add(new Note { StartTime = 1000, Column = 1 }); @@ -67,8 +69,8 @@ namespace osu.Game.Rulesets.Mania.Tests Assert.IsTrue(generated.Frames.Count == 3, "Replay must have 3 frames"); Assert.AreEqual(1000, generated.Frames[1].Time, "Incorrect hit time"); Assert.AreEqual(1000 + ManiaAutoGenerator.RELEASE_DELAY, generated.Frames[2].Time, "Incorrect release time"); - Assert.AreEqual(3, generated.Frames[1].MouseX, "Keys 1 and 2 have not been pressed"); - Assert.AreEqual(0, generated.Frames[2].MouseX, "Keys 1 and 2 have not been released"); + Assert.IsTrue(checkContains(generated.Frames[1], ManiaAction.Key1, ManiaAction.Key2), "Key1 & Key2 have not been pressed"); + Assert.IsFalse(checkContains(generated.Frames[2], ManiaAction.Key1, ManiaAction.Key2), "Key1 & Key2 have not been released"); } [Test] @@ -80,7 +82,7 @@ namespace osu.Game.Rulesets.Mania.Tests // | * | * | // | | | - var beatmap = new Beatmap(); + var beatmap = new ManiaBeatmap(new StageDefinition { Columns = 2 }); beatmap.HitObjects.Add(new HoldNote { StartTime = 1000, Duration = 2000 }); beatmap.HitObjects.Add(new HoldNote { StartTime = 1000, Duration = 2000, Column = 1 }); @@ -89,8 +91,8 @@ namespace osu.Game.Rulesets.Mania.Tests Assert.IsTrue(generated.Frames.Count == 3, "Replay must have 3 frames"); Assert.AreEqual(1000, generated.Frames[1].Time, "Incorrect hit time"); Assert.AreEqual(3000 + ManiaAutoGenerator.RELEASE_DELAY, generated.Frames[2].Time, "Incorrect release time"); - Assert.AreEqual(3, generated.Frames[1].MouseX, "Keys 1 and 2 have not been pressed"); - Assert.AreEqual(0, generated.Frames[2].MouseX, "Keys 1 and 2 have not been released"); + Assert.IsTrue(checkContains(generated.Frames[1], ManiaAction.Key1, ManiaAction.Key2), "Key1 & Key2 have not been pressed"); + Assert.IsFalse(checkContains(generated.Frames[2], ManiaAction.Key1, ManiaAction.Key2), "Key1 & Key2 have not been released"); } [Test] @@ -101,7 +103,7 @@ namespace osu.Game.Rulesets.Mania.Tests // | - | | // | | | - var beatmap = new Beatmap(); + var beatmap = new ManiaBeatmap(new StageDefinition { Columns = 2 }); beatmap.HitObjects.Add(new Note { StartTime = 1000 }); beatmap.HitObjects.Add(new Note { StartTime = 2000, Column = 1 }); @@ -112,10 +114,10 @@ namespace osu.Game.Rulesets.Mania.Tests Assert.AreEqual(1000 + ManiaAutoGenerator.RELEASE_DELAY, generated.Frames[2].Time, "Incorrect first note release time"); Assert.AreEqual(2000, generated.Frames[3].Time, "Incorrect second note hit time"); Assert.AreEqual(2000 + ManiaAutoGenerator.RELEASE_DELAY, generated.Frames[4].Time, "Incorrect second note release time"); - Assert.AreEqual(1, generated.Frames[1].MouseX, "Key 1 has not been pressed"); - Assert.AreEqual(0, generated.Frames[2].MouseX, "Key 1 has not been released"); - Assert.AreEqual(2, generated.Frames[3].MouseX, "Key 2 has not been pressed"); - Assert.AreEqual(0, generated.Frames[4].MouseX, "Key 2 has not been released"); + Assert.IsTrue(checkContains(generated.Frames[1], ManiaAction.Key1), "Key1 has not been pressed"); + Assert.IsFalse(checkContains(generated.Frames[2], ManiaAction.Key1), "Key1 has not been released"); + Assert.IsTrue(checkContains(generated.Frames[3], ManiaAction.Key2), "Key2 has not been pressed"); + Assert.IsFalse(checkContains(generated.Frames[4], ManiaAction.Key2), "Key2 has not been released"); } [Test] @@ -128,7 +130,7 @@ namespace osu.Game.Rulesets.Mania.Tests // | * | | // | | | - var beatmap = new Beatmap(); + var beatmap = new ManiaBeatmap(new StageDefinition { Columns = 2 }); beatmap.HitObjects.Add(new HoldNote { StartTime = 1000, Duration = 2000 }); beatmap.HitObjects.Add(new HoldNote { StartTime = 2000, Duration = 2000, Column = 1 }); @@ -139,10 +141,11 @@ namespace osu.Game.Rulesets.Mania.Tests Assert.AreEqual(3000 + ManiaAutoGenerator.RELEASE_DELAY, generated.Frames[3].Time, "Incorrect first note release time"); Assert.AreEqual(2000, generated.Frames[2].Time, "Incorrect second note hit time"); Assert.AreEqual(4000 + ManiaAutoGenerator.RELEASE_DELAY, generated.Frames[4].Time, "Incorrect second note release time"); - Assert.AreEqual(1, generated.Frames[1].MouseX, "Key 1 has not been pressed"); - Assert.AreEqual(3, generated.Frames[2].MouseX, "Keys 1 and 2 have not been pressed"); - Assert.AreEqual(2, generated.Frames[3].MouseX, "Key 1 has not been released"); - Assert.AreEqual(0, generated.Frames[4].MouseX, "Key 2 has not been released"); + Assert.IsTrue(checkContains(generated.Frames[1], ManiaAction.Key1), "Key1 has not been pressed"); + Assert.IsTrue(checkContains(generated.Frames[2], ManiaAction.Key1, ManiaAction.Key2), "Key1 & Key2 have not been pressed"); + Assert.IsFalse(checkContains(generated.Frames[3], ManiaAction.Key1), "Key1 has not been released"); + Assert.IsTrue(checkContains(generated.Frames[3], ManiaAction.Key2), "Key2 has been released"); + Assert.IsFalse(checkContains(generated.Frames[4], ManiaAction.Key2), "Key2 has not been released"); } [Test] @@ -154,7 +157,7 @@ namespace osu.Game.Rulesets.Mania.Tests // | * | | // | | | - var beatmap = new Beatmap(); + var beatmap = new ManiaBeatmap(new StageDefinition { Columns = 2 }); beatmap.HitObjects.Add(new HoldNote { StartTime = 1000, Duration = 2000 - ManiaAutoGenerator.RELEASE_DELAY }); beatmap.HitObjects.Add(new Note { StartTime = 3000, Column = 1 }); @@ -164,9 +167,12 @@ namespace osu.Game.Rulesets.Mania.Tests Assert.AreEqual(1000, generated.Frames[1].Time, "Incorrect first note hit time"); Assert.AreEqual(3000, generated.Frames[2].Time, "Incorrect second note press time + first note release time"); Assert.AreEqual(3000 + ManiaAutoGenerator.RELEASE_DELAY, generated.Frames[3].Time, "Incorrect second note release time"); - Assert.AreEqual(1, generated.Frames[1].MouseX, "Key 1 has not been pressed"); - Assert.AreEqual(2, generated.Frames[2].MouseX, "Key 1 has not been released or key 2 has not been pressed"); - Assert.AreEqual(0, generated.Frames[3].MouseX, "Keys 1 and 2 have not been released"); + Assert.IsTrue(checkContains(generated.Frames[1], ManiaAction.Key1), "Key1 has not been pressed"); + Assert.IsFalse(checkContains(generated.Frames[2], ManiaAction.Key1), "Key1 has not been released"); + Assert.IsTrue(checkContains(generated.Frames[2], ManiaAction.Key2), "Key2 has not been pressed"); + Assert.IsFalse(checkContains(generated.Frames[3], ManiaAction.Key2), "Key2 has not been released"); } + + private bool checkContains(ReplayFrame frame, params ManiaAction[] actions) => actions.All(action => ((ManiaReplayFrame)frame).Actions.Contains(action)); } } diff --git a/osu.Game.Rulesets.Mania/UI/ManiaRulesetContainer.cs b/osu.Game.Rulesets.Mania/UI/ManiaRulesetContainer.cs index 732d5f4109..3ecfee1e8c 100644 --- a/osu.Game.Rulesets.Mania/UI/ManiaRulesetContainer.cs +++ b/osu.Game.Rulesets.Mania/UI/ManiaRulesetContainer.cs @@ -11,6 +11,7 @@ using osu.Framework.MathUtils; using osu.Game.Beatmaps; using osu.Game.Beatmaps.ControlPoints; using osu.Game.Configuration; +using osu.Game.Input.Handlers; using osu.Game.Rulesets.Configuration; using osu.Game.Rulesets.Mania.Beatmaps; using osu.Game.Rulesets.Mania.Mods; @@ -103,7 +104,7 @@ namespace osu.Game.Rulesets.Mania.UI protected override Vector2 PlayfieldArea => new Vector2(1, 0.8f); - protected override FramedReplayInputHandler CreateReplayInputHandler(Replay replay) => new ManiaFramedReplayInputHandler(replay, this); + protected override ReplayInputHandler CreateReplayInputHandler(Replay replay) => new ManiaFramedReplayInputHandler(replay); protected override IRulesetConfigManager CreateConfig(Ruleset ruleset, SettingsStore settings) => new ManiaConfigManager(settings, Ruleset.RulesetInfo, Variant); } diff --git a/osu.Game.Rulesets.Mania/UI/ManiaStage.cs b/osu.Game.Rulesets.Mania/UI/ManiaStage.cs index ebd73d7dca..2b8039f5df 100644 --- a/osu.Game.Rulesets.Mania/UI/ManiaStage.cs +++ b/osu.Game.Rulesets.Mania/UI/ManiaStage.cs @@ -48,13 +48,11 @@ namespace osu.Game.Rulesets.Mania.UI private Color4 specialColumnColour; private readonly int firstColumnIndex; - private readonly StageDefinition definition; public ManiaStage(int firstColumnIndex, StageDefinition definition, ref ManiaAction normalColumnStartAction, ref ManiaAction specialColumnStartAction) : base(ScrollingDirection.Up) { this.firstColumnIndex = firstColumnIndex; - this.definition = definition; Name = "Stage"; @@ -131,7 +129,7 @@ namespace osu.Game.Rulesets.Mania.UI for (int i = 0; i < definition.Columns; i++) { - var isSpecial = isSpecialColumn(i); + var isSpecial = definition.IsSpecialColumn(i); var column = new Column { IsSpecial = isSpecial, @@ -160,13 +158,6 @@ namespace osu.Game.Rulesets.Mania.UI AddNested(c); } - /// - /// Whether the column index is a special column for this playfield. - /// - /// The 0-based column index. - /// Whether the column is a special column. - private bool isSpecialColumn(int column) => definition.Columns % 2 == 1 && column == definition.Columns / 2; - public override void Add(DrawableHitObject h) { var maniaObject = (ManiaHitObject)h.HitObject; diff --git a/osu.Game.Rulesets.Osu/OsuRuleset.cs b/osu.Game.Rulesets.Osu/OsuRuleset.cs index b38f95694f..42ead91f0d 100644 --- a/osu.Game.Rulesets.Osu/OsuRuleset.cs +++ b/osu.Game.Rulesets.Osu/OsuRuleset.cs @@ -19,6 +19,8 @@ using osu.Game.Rulesets.Osu.Edit; using osu.Game.Rulesets.Edit; using osu.Game.Rulesets.Objects.Types; using osu.Game.Rulesets.Objects; +using osu.Game.Rulesets.Osu.Replays; +using osu.Game.Rulesets.Replays; namespace osu.Game.Rulesets.Osu { @@ -145,6 +147,8 @@ namespace osu.Game.Rulesets.Osu public override int LegacyID => 0; + public override ReplayFrame CreateReplayFrame() => new OsuReplayFrame(); + public OsuRuleset(RulesetInfo rulesetInfo = null) : base(rulesetInfo) { diff --git a/osu.Game.Rulesets.Osu/Replays/OsuAutoGenerator.cs b/osu.Game.Rulesets.Osu/Replays/OsuAutoGenerator.cs index 274f7bff62..7aa4108428 100644 --- a/osu.Game.Rulesets.Osu/Replays/OsuAutoGenerator.cs +++ b/osu.Game.Rulesets.Osu/Replays/OsuAutoGenerator.cs @@ -6,7 +6,7 @@ using osu.Framework.MathUtils; using osu.Game.Beatmaps; using osu.Game.Rulesets.Osu.Objects; using System; -using System.Diagnostics; +using System.Linq; using osu.Framework.Graphics; using osu.Game.Rulesets.Objects.Types; using osu.Game.Rulesets.Replays; @@ -64,9 +64,9 @@ namespace osu.Game.Rulesets.Osu.Replays { buttonIndex = 0; - AddFrameToReplay(new ReplayFrame(-100000, 256, 500, ReplayButtonState.None)); - AddFrameToReplay(new ReplayFrame(Beatmap.HitObjects[0].StartTime - 1500, 256, 500, ReplayButtonState.None)); - AddFrameToReplay(new ReplayFrame(Beatmap.HitObjects[0].StartTime - 1000, 256, 192, ReplayButtonState.None)); + AddFrameToReplay(new OsuReplayFrame(-100000, new Vector2(256, 500))); + AddFrameToReplay(new OsuReplayFrame(Beatmap.HitObjects[0].StartTime - 1500, new Vector2(256, 500))); + AddFrameToReplay(new OsuReplayFrame(Beatmap.HitObjects[0].StartTime - 1500, new Vector2(256, 500))); for (int i = 0; i < Beatmap.HitObjects.Count; i++) { @@ -91,18 +91,18 @@ namespace osu.Game.Rulesets.Osu.Replays // Make the cursor stay at a hitObject as long as possible (mainly for autopilot). if (h.StartTime - h.HitWindows.HalfWindowFor(HitResult.Miss) > endTime + h.HitWindows.HalfWindowFor(HitResult.Meh) + 50) { - if (!(prev is Spinner) && h.StartTime - endTime < 1000) AddFrameToReplay(new ReplayFrame(endTime + h.HitWindows.HalfWindowFor(HitResult.Meh), prev.StackedEndPosition.X, prev.StackedEndPosition.Y, ReplayButtonState.None)); - if (!(h is Spinner)) AddFrameToReplay(new ReplayFrame(h.StartTime - h.HitWindows.HalfWindowFor(HitResult.Meh), h.StackedPosition.X, h.StackedPosition.Y, ReplayButtonState.None)); + if (!(prev is Spinner) && h.StartTime - endTime < 1000) AddFrameToReplay(new OsuReplayFrame(endTime + h.HitWindows.HalfWindowFor(HitResult.Meh), new Vector2(prev.StackedEndPosition.X, prev.StackedEndPosition.Y))); + if (!(h is Spinner)) AddFrameToReplay(new OsuReplayFrame(h.StartTime - h.HitWindows.HalfWindowFor(HitResult.Meh), new Vector2(h.StackedPosition.X, h.StackedPosition.Y))); } else if (h.StartTime - h.HitWindows.HalfWindowFor(HitResult.Meh) > endTime + h.HitWindows.HalfWindowFor(HitResult.Meh) + 50) { - if (!(prev is Spinner) && h.StartTime - endTime < 1000) AddFrameToReplay(new ReplayFrame(endTime + h.HitWindows.HalfWindowFor(HitResult.Meh), prev.StackedEndPosition.X, prev.StackedEndPosition.Y, ReplayButtonState.None)); - if (!(h is Spinner)) AddFrameToReplay(new ReplayFrame(h.StartTime - h.HitWindows.HalfWindowFor(HitResult.Meh), h.StackedPosition.X, h.StackedPosition.Y, ReplayButtonState.None)); + if (!(prev is Spinner) && h.StartTime - endTime < 1000) AddFrameToReplay(new OsuReplayFrame(endTime + h.HitWindows.HalfWindowFor(HitResult.Meh), new Vector2(prev.StackedEndPosition.X, prev.StackedEndPosition.Y))); + if (!(h is Spinner)) AddFrameToReplay(new OsuReplayFrame(h.StartTime - h.HitWindows.HalfWindowFor(HitResult.Meh), new Vector2(h.StackedPosition.X, h.StackedPosition.Y))); } else if (h.StartTime - h.HitWindows.HalfWindowFor(HitResult.Meh) > endTime + h.HitWindows.HalfWindowFor(HitResult.Meh) + 50) { - if (!(prev is Spinner) && h.StartTime - endTime < 1000) AddFrameToReplay(new ReplayFrame(endTime + h.HitWindows.HalfWindowFor(HitResult.Meh), prev.StackedEndPosition.X, prev.StackedEndPosition.Y, ReplayButtonState.None)); - if (!(h is Spinner)) AddFrameToReplay(new ReplayFrame(h.StartTime - h.HitWindows.HalfWindowFor(HitResult.Meh), h.StackedPosition.X, h.StackedPosition.Y, ReplayButtonState.None)); + if (!(prev is Spinner) && h.StartTime - endTime < 1000) AddFrameToReplay(new OsuReplayFrame(endTime + h.HitWindows.HalfWindowFor(HitResult.Meh), new Vector2(prev.StackedEndPosition.X, prev.StackedEndPosition.Y))); + if (!(h is Spinner)) AddFrameToReplay(new OsuReplayFrame(h.StartTime - h.HitWindows.HalfWindowFor(HitResult.Meh), new Vector2(h.StackedPosition.X, h.StackedPosition.Y))); } } @@ -118,9 +118,9 @@ namespace osu.Game.Rulesets.Osu.Replays // TODO: Shouldn't the spinner always spin in the same direction? if (h is Spinner) { - calcSpinnerStartPosAndDirection(Frames[Frames.Count - 1].Position, out startPosition, out spinnerDirection); + calcSpinnerStartPosAndDirection(((OsuReplayFrame)Frames[Frames.Count - 1]).Position, out startPosition, out spinnerDirection); - Vector2 spinCentreOffset = SPINNER_CENTRE - Frames[Frames.Count - 1].Position; + Vector2 spinCentreOffset = SPINNER_CENTRE - ((OsuReplayFrame)Frames[Frames.Count - 1]).Position; if (spinCentreOffset.Length > SPIN_RADIUS) { @@ -192,13 +192,13 @@ namespace osu.Game.Rulesets.Osu.Replays private void moveToHitObject(OsuHitObject h, Vector2 targetPos, Easing easing) { - ReplayFrame lastFrame = Frames[Frames.Count - 1]; + OsuReplayFrame lastFrame = (OsuReplayFrame)Frames[Frames.Count - 1]; // Wait until Auto could "see and react" to the next note. double waitTime = h.StartTime - Math.Max(0.0, h.TimePreempt - reactionTime); if (waitTime > lastFrame.Time) { - lastFrame = new ReplayFrame(waitTime, lastFrame.MouseX, lastFrame.MouseY, lastFrame.ButtonState); + lastFrame = new OsuReplayFrame(waitTime, lastFrame.Position) { Actions = lastFrame.Actions }; AddFrameToReplay(lastFrame); } @@ -215,7 +215,7 @@ namespace osu.Game.Rulesets.Osu.Replays for (double time = lastFrame.Time + FrameDelay; time < h.StartTime; time += FrameDelay) { Vector2 currentPosition = Interpolation.ValueAt(time, lastPosition, targetPos, lastFrame.Time, h.StartTime, easing); - AddFrameToReplay(new ReplayFrame((int)time, currentPosition.X, currentPosition.Y, lastFrame.ButtonState)); + AddFrameToReplay(new OsuReplayFrame((int)time, new Vector2(currentPosition.X, currentPosition.Y)) { Actions = lastFrame.Actions }); } buttonIndex = 0; @@ -231,14 +231,14 @@ namespace osu.Game.Rulesets.Osu.Replays { // Time to insert the first frame which clicks the object // Here we mainly need to determine which button to use - ReplayButtonState button = buttonIndex % 2 == 0 ? ReplayButtonState.Left1 : ReplayButtonState.Right1; + var action = buttonIndex % 2 == 0 ? OsuAction.LeftButton : OsuAction.RightButton; - ReplayFrame startFrame = new ReplayFrame(h.StartTime, startPosition.X, startPosition.Y, button); + var startFrame = new OsuReplayFrame(h.StartTime, new Vector2(startPosition.X, startPosition.Y), action); // TODO: Why do we delay 1 ms if the object is a spinner? There already is KEY_UP_DELAY from hEndTime. double hEndTime = ((h as IHasEndTime)?.EndTime ?? h.StartTime) + KEY_UP_DELAY; int endDelay = h is Spinner ? 1 : 0; - ReplayFrame endFrame = new ReplayFrame(hEndTime + endDelay, h.StackedEndPosition.X, h.StackedEndPosition.Y, ReplayButtonState.None); + var endFrame = new OsuReplayFrame(hEndTime + endDelay, new Vector2(h.StackedEndPosition.X, h.StackedEndPosition.Y)); // Decrement because we want the previous frame, not the next one int index = FindInsertionIndex(startFrame) - 1; @@ -248,19 +248,18 @@ namespace osu.Game.Rulesets.Osu.Replays // Do we have a previous frame? No need to check for < replay.Count since we decremented! if (index >= 0) { - ReplayFrame previousFrame = Frames[index]; - var previousButton = previousFrame.ButtonState; + var previousFrame = (OsuReplayFrame)Frames[index]; + var previousActions = previousFrame.Actions; // If a button is already held, then we simply alternate - if (previousButton != ReplayButtonState.None) + if (previousActions.Any()) { - Debug.Assert(previousButton != (ReplayButtonState.Left1 | ReplayButtonState.Right1), "Previous button state was not Left1 nor Right1 despite only using those two states."); - // Force alternation if we have the same button. Otherwise we can just keep the naturally to us assigned button. - if (previousButton == button) + if (previousActions.Contains(action)) { - button = (ReplayButtonState.Left1 | ReplayButtonState.Right1) & ~button; - startFrame.ButtonState = button; + action = action == OsuAction.LeftButton ? OsuAction.RightButton : OsuAction.LeftButton; + startFrame.Actions.Clear(); + startFrame.Actions.Add(action); } // We always follow the most recent slider / spinner, so remove any other frames that occur while it exists. @@ -272,9 +271,14 @@ namespace osu.Game.Rulesets.Osu.Replays // After alternating we need to keep holding the other button in the future rather than the previous one. for (int j = index + 1; j < Frames.Count; ++j) { + var frame = (OsuReplayFrame)Frames[j]; + // Don't affect frames which stop pressing a button! - if (j < Frames.Count - 1 || Frames[j].ButtonState == previousButton) - Frames[j].ButtonState = button; + if (j < Frames.Count - 1 || frame.Actions.SequenceEqual(previousActions)) + { + frame.Actions.Clear(); + frame.Actions.Add(action); + } } } } @@ -298,16 +302,15 @@ namespace osu.Game.Rulesets.Osu.Replays t = ApplyModsToTime(j - h.StartTime) * spinnerDirection; Vector2 pos = SPINNER_CENTRE + CirclePosition(t / 20 + angle, SPIN_RADIUS); - AddFrameToReplay(new ReplayFrame((int)j, pos.X, pos.Y, button)); + AddFrameToReplay(new OsuReplayFrame((int)j, new Vector2(pos.X, pos.Y), action)); } t = ApplyModsToTime(s.EndTime - h.StartTime) * spinnerDirection; Vector2 endPosition = SPINNER_CENTRE + CirclePosition(t / 20 + angle, SPIN_RADIUS); - AddFrameToReplay(new ReplayFrame(s.EndTime, endPosition.X, endPosition.Y, button)); + AddFrameToReplay(new OsuReplayFrame(s.EndTime, new Vector2(endPosition.X, endPosition.Y), action)); - endFrame.MouseX = endPosition.X; - endFrame.MouseY = endPosition.Y; + endFrame.Position = endPosition; } else if (h is Slider) { @@ -316,10 +319,10 @@ namespace osu.Game.Rulesets.Osu.Replays for (double j = FrameDelay; j < s.Duration; j += FrameDelay) { Vector2 pos = s.StackedPositionAt(j / s.Duration); - AddFrameToReplay(new ReplayFrame(h.StartTime + j, pos.X, pos.Y, button)); + AddFrameToReplay(new OsuReplayFrame(h.StartTime + j, new Vector2(pos.X, pos.Y), action)); } - AddFrameToReplay(new ReplayFrame(s.EndTime, s.StackedEndPosition.X, s.StackedEndPosition.Y, button)); + AddFrameToReplay(new OsuReplayFrame(s.EndTime, new Vector2(s.StackedEndPosition.X, s.StackedEndPosition.Y), action)); } // We only want to let go of our button if we are at the end of the current replay. Otherwise something is still going on after us so we need to keep the button pressed! diff --git a/osu.Game.Rulesets.Osu/Replays/OsuReplayFrame.cs b/osu.Game.Rulesets.Osu/Replays/OsuReplayFrame.cs new file mode 100644 index 0000000000..5d0ff25109 --- /dev/null +++ b/osu.Game.Rulesets.Osu/Replays/OsuReplayFrame.cs @@ -0,0 +1,38 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using System.Collections.Generic; +using osu.Game.Beatmaps; +using osu.Game.Rulesets.Replays; +using osu.Game.Rulesets.Replays.Legacy; +using osu.Game.Rulesets.Replays.Types; +using osu.Game.Rulesets.Scoring; +using OpenTK; + +namespace osu.Game.Rulesets.Osu.Replays +{ + public class OsuReplayFrame : ReplayFrame, IConvertibleReplayFrame + { + public Vector2 Position; + public List Actions = new List(); + + public OsuReplayFrame() + : base(0) + { + } + + public OsuReplayFrame(double time, Vector2 position, params OsuAction[] actions) + : base(time) + { + Position = position; + Actions.AddRange(actions); + } + + public void ConvertFrom(LegacyReplayFrame legacyFrame, Score score, Beatmap beatmap) + { + Position = legacyFrame.Position; + if (legacyFrame.MouseLeft) Actions.Add(OsuAction.LeftButton); + if (legacyFrame.MouseRight) Actions.Add(OsuAction.RightButton); + } + } +} diff --git a/osu.Game.Rulesets.Osu/Replays/OsuReplayInputHandler.cs b/osu.Game.Rulesets.Osu/Replays/OsuReplayInputHandler.cs index 63c9111190..aef02dad7e 100644 --- a/osu.Game.Rulesets.Osu/Replays/OsuReplayInputHandler.cs +++ b/osu.Game.Rulesets.Osu/Replays/OsuReplayInputHandler.cs @@ -3,31 +3,38 @@ using System.Collections.Generic; using osu.Framework.Input; +using osu.Framework.MathUtils; using osu.Game.Rulesets.Replays; using OpenTK; namespace osu.Game.Rulesets.Osu.Replays { - public class OsuReplayInputHandler : FramedReplayInputHandler + public class OsuReplayInputHandler : FramedReplayInputHandler { public OsuReplayInputHandler(Replay replay) : base(replay) { } + protected Vector2? Position + { + get + { + if (!HasFrames) + return null; + + return Interpolation.ValueAt(CurrentTime, CurrentFrame.Position, NextFrame.Position, CurrentFrame.Time, NextFrame.Time); + } + } + public override List GetPendingStates() { - List actions = new List(); - - if (CurrentFrame?.MouseLeft ?? false) actions.Add(OsuAction.LeftButton); - if (CurrentFrame?.MouseRight ?? false) actions.Add(OsuAction.RightButton); - return new List { new ReplayState { Mouse = new ReplayMouseState(ToScreenSpace(Position ?? Vector2.Zero)), - PressedActions = actions + PressedActions = CurrentFrame.Actions } }; } diff --git a/osu.Game.Rulesets.Osu/UI/OsuRulesetContainer.cs b/osu.Game.Rulesets.Osu/UI/OsuRulesetContainer.cs index 2af381dd71..b825ba73b7 100644 --- a/osu.Game.Rulesets.Osu/UI/OsuRulesetContainer.cs +++ b/osu.Game.Rulesets.Osu/UI/OsuRulesetContainer.cs @@ -5,6 +5,7 @@ using osu.Framework.Graphics.Cursor; using osu.Framework.Input; using OpenTK; using osu.Game.Beatmaps; +using osu.Game.Input.Handlers; using osu.Game.Rulesets.Objects.Drawables; using osu.Game.Rulesets.Osu.Beatmaps; using osu.Game.Rulesets.Osu.Objects; @@ -48,7 +49,7 @@ namespace osu.Game.Rulesets.Osu.UI return null; } - protected override FramedReplayInputHandler CreateReplayInputHandler(Replay replay) => new OsuReplayInputHandler(replay); + protected override ReplayInputHandler CreateReplayInputHandler(Replay replay) => new OsuReplayInputHandler(replay); protected override Vector2 GetAspectAdjustedSize() { diff --git a/osu.Game.Rulesets.Osu/osu.Game.Rulesets.Osu.csproj b/osu.Game.Rulesets.Osu/osu.Game.Rulesets.Osu.csproj index 04903d11bf..a42dbeeb10 100644 --- a/osu.Game.Rulesets.Osu/osu.Game.Rulesets.Osu.csproj +++ b/osu.Game.Rulesets.Osu/osu.Game.Rulesets.Osu.csproj @@ -122,6 +122,7 @@ + diff --git a/osu.Game.Rulesets.Taiko/Replays/TaikoAutoGenerator.cs b/osu.Game.Rulesets.Taiko/Replays/TaikoAutoGenerator.cs index cb45ce2dce..1a556fe01d 100644 --- a/osu.Game.Rulesets.Taiko/Replays/TaikoAutoGenerator.cs +++ b/osu.Game.Rulesets.Taiko/Replays/TaikoAutoGenerator.cs @@ -35,15 +35,13 @@ namespace osu.Game.Rulesets.Taiko.Replays { bool hitButton = true; - Frames.Add(new TaikoReplayFrame(-100000, ReplayButtonState.None)); - Frames.Add(new TaikoReplayFrame(Beatmap.HitObjects[0].StartTime - 1000, ReplayButtonState.None)); + Frames.Add(new TaikoReplayFrame(-100000)); + Frames.Add(new TaikoReplayFrame(Beatmap.HitObjects[0].StartTime - 1000)); for (int i = 0; i < Beatmap.HitObjects.Count; i++) { TaikoHitObject h = Beatmap.HitObjects[i]; - ReplayButtonState button; - IHasEndTime endTimeData = h as IHasEndTime; double endTime = endTimeData?.EndTime ?? h.StartTime; @@ -59,24 +57,26 @@ namespace osu.Game.Rulesets.Taiko.Replays double hitRate = Math.Min(swell_hit_speed, swell.Duration / req); for (double j = h.StartTime; j < endTime; j += hitRate) { + TaikoAction action; + switch (d) { default: case 0: - button = ReplayButtonState.Left1; + action = TaikoAction.LeftCentre; break; case 1: - button = ReplayButtonState.Right1; + action = TaikoAction.LeftRim; break; case 2: - button = ReplayButtonState.Left2; + action = TaikoAction.RightCentre; break; case 3: - button = ReplayButtonState.Right2; + action = TaikoAction.RightRim; break; } - Frames.Add(new TaikoReplayFrame(j, button)); + Frames.Add(new TaikoReplayFrame(j, action)); d = (d + 1) % 4; if (++count == req) break; @@ -86,39 +86,39 @@ namespace osu.Game.Rulesets.Taiko.Replays { foreach (var tick in drumRoll.NestedHitObjects.OfType()) { - Frames.Add(new TaikoReplayFrame(tick.StartTime, hitButton ? ReplayButtonState.Left1 : ReplayButtonState.Left2)); + Frames.Add(new TaikoReplayFrame(tick.StartTime, hitButton ? TaikoAction.LeftCentre : TaikoAction.RightCentre)); hitButton = !hitButton; } } else if (hit != null) { + TaikoAction[] actions; + if (hit is CentreHit) { - if (h.IsStrong) - button = ReplayButtonState.Left1 | ReplayButtonState.Left2; - else - button = hitButton ? ReplayButtonState.Left1 : ReplayButtonState.Left2; + actions = h.IsStrong + ? new[] { TaikoAction.LeftCentre, TaikoAction.RightCentre } + : new[] { hitButton ? TaikoAction.LeftCentre : TaikoAction.RightCentre }; } else { - if (h.IsStrong) - button = ReplayButtonState.Right1 | ReplayButtonState.Right2; - else - button = hitButton ? ReplayButtonState.Right1 : ReplayButtonState.Right2; + actions = h.IsStrong + ? new[] { TaikoAction.LeftRim, TaikoAction.RightRim } + : new[] { hitButton ? TaikoAction.LeftRim : TaikoAction.RightRim }; } - Frames.Add(new TaikoReplayFrame(h.StartTime, button)); + Frames.Add(new TaikoReplayFrame(h.StartTime, actions)); } else throw new InvalidOperationException("Unknown hit object type."); - Frames.Add(new TaikoReplayFrame(endTime + KEY_UP_DELAY, ReplayButtonState.None)); + Frames.Add(new TaikoReplayFrame(endTime + KEY_UP_DELAY)); if (i < Beatmap.HitObjects.Count - 1) { double waitTime = Beatmap.HitObjects[i + 1].StartTime - 1000; if (waitTime > endTime) - Frames.Add(new TaikoReplayFrame(waitTime, ReplayButtonState.None)); + Frames.Add(new TaikoReplayFrame(waitTime)); } hitButton = !hitButton; diff --git a/osu.Game.Rulesets.Taiko/Replays/TaikoFramedReplayInputHandler.cs b/osu.Game.Rulesets.Taiko/Replays/TaikoFramedReplayInputHandler.cs index 1a96b26d34..1c525dcda0 100644 --- a/osu.Game.Rulesets.Taiko/Replays/TaikoFramedReplayInputHandler.cs +++ b/osu.Game.Rulesets.Taiko/Replays/TaikoFramedReplayInputHandler.cs @@ -7,27 +7,13 @@ using osu.Framework.Input; namespace osu.Game.Rulesets.Taiko.Replays { - internal class TaikoFramedReplayInputHandler : FramedReplayInputHandler + internal class TaikoFramedReplayInputHandler : FramedReplayInputHandler { public TaikoFramedReplayInputHandler(Replay replay) : base(replay) { } - public override List GetPendingStates() - { - var actions = new List(); - - if (CurrentFrame?.MouseRight1 == true) - actions.Add(TaikoAction.LeftRim); - if (CurrentFrame?.MouseRight2 == true) - actions.Add(TaikoAction.RightRim); - if (CurrentFrame?.MouseLeft1 == true) - actions.Add(TaikoAction.LeftCentre); - if (CurrentFrame?.MouseLeft2 == true) - actions.Add(TaikoAction.RightCentre); - - return new List { new ReplayState { PressedActions = actions } }; - } + public override List GetPendingStates() => new List { new ReplayState { PressedActions = CurrentFrame.Actions } }; } } diff --git a/osu.Game.Rulesets.Taiko/Replays/TaikoReplayFrame.cs b/osu.Game.Rulesets.Taiko/Replays/TaikoReplayFrame.cs index 0c60cdc109..b2fd62d751 100644 --- a/osu.Game.Rulesets.Taiko/Replays/TaikoReplayFrame.cs +++ b/osu.Game.Rulesets.Taiko/Replays/TaikoReplayFrame.cs @@ -1,17 +1,31 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using System.Collections.Generic; +using osu.Game.Beatmaps; using osu.Game.Rulesets.Replays; +using osu.Game.Rulesets.Replays.Legacy; +using osu.Game.Rulesets.Replays.Types; +using osu.Game.Rulesets.Scoring; namespace osu.Game.Rulesets.Taiko.Replays { - public class TaikoReplayFrame : ReplayFrame + public class TaikoReplayFrame : ReplayFrame, IConvertibleReplayFrame { - public override bool IsImportant => MouseLeft || MouseRight; + public List Actions = new List(); - public TaikoReplayFrame(double time, ReplayButtonState buttons) - : base(time, null, null, buttons) + public TaikoReplayFrame(double time, params TaikoAction[] actions) + : base(time) { + Actions.AddRange(actions); + } + + public void ConvertFrom(LegacyReplayFrame legacyFrame, Score score, Beatmap beatmap) + { + if (legacyFrame.MouseRight1) Actions.Add(TaikoAction.LeftRim); + if (legacyFrame.MouseRight2) Actions.Add(TaikoAction.RightRim); + if (legacyFrame.MouseLeft1) Actions.Add(TaikoAction.LeftCentre); + if (legacyFrame.MouseLeft2) Actions.Add(TaikoAction.RightCentre); } } } diff --git a/osu.Game.Rulesets.Taiko/UI/TaikoRulesetContainer.cs b/osu.Game.Rulesets.Taiko/UI/TaikoRulesetContainer.cs index fd31f738ee..eb282c53ca 100644 --- a/osu.Game.Rulesets.Taiko/UI/TaikoRulesetContainer.cs +++ b/osu.Game.Rulesets.Taiko/UI/TaikoRulesetContainer.cs @@ -17,6 +17,7 @@ using osu.Game.Rulesets.Taiko.Replays; using OpenTK; using System.Linq; using osu.Framework.Input; +using osu.Game.Input.Handlers; using osu.Game.Rulesets.UI.Scrolling; namespace osu.Game.Rulesets.Taiko.UI @@ -133,6 +134,6 @@ namespace osu.Game.Rulesets.Taiko.UI return null; } - protected override FramedReplayInputHandler CreateReplayInputHandler(Replay replay) => new TaikoFramedReplayInputHandler(replay); + protected override ReplayInputHandler CreateReplayInputHandler(Replay replay) => new TaikoFramedReplayInputHandler(replay); } } diff --git a/osu.Game/Rulesets/Replays/FramedReplayInputHandler.cs b/osu.Game/Rulesets/Replays/FramedReplayInputHandler.cs index c245407bbf..80fd099f2f 100644 --- a/osu.Game/Rulesets/Replays/FramedReplayInputHandler.cs +++ b/osu.Game/Rulesets/Replays/FramedReplayInputHandler.cs @@ -4,7 +4,6 @@ using System; using System.Collections.Generic; using osu.Framework.Input; -using osu.Framework.MathUtils; using osu.Game.Input.Handlers; using OpenTK; using OpenTK.Input; @@ -17,14 +16,15 @@ namespace osu.Game.Rulesets.Replays /// The ReplayHandler will take a replay and handle the propagation of updates to the input stack. /// It handles logic of any frames which *must* be executed. /// - public abstract class FramedReplayInputHandler : ReplayInputHandler + public abstract class FramedReplayInputHandler : ReplayInputHandler + where TFrame : ReplayFrame { private readonly Replay replay; protected List Frames => replay.Frames; - public ReplayFrame CurrentFrame => !hasFrames ? null : Frames[currentFrameIndex]; - public ReplayFrame NextFrame => !hasFrames ? null : Frames[nextFrameIndex]; + public TFrame CurrentFrame => !HasFrames ? null : (TFrame)Frames[currentFrameIndex]; + public TFrame NextFrame => !HasFrames ? null : (TFrame)Frames[nextFrameIndex]; private int currentFrameIndex; @@ -46,31 +46,14 @@ namespace osu.Game.Rulesets.Replays return true; } - public void SetPosition(Vector2 pos) - { - } - - protected Vector2? Position - { - get - { - if (!hasFrames) - return null; - - return Interpolation.ValueAt(currentTime, CurrentFrame.Position, NextFrame.Position, CurrentFrame.Time, NextFrame.Time); - } - } - public override List GetPendingStates() => new List(); public bool AtLastFrame => currentFrameIndex == Frames.Count - 1; public bool AtFirstFrame => currentFrameIndex == 0; - public Vector2 Size => new Vector2(512, 384); - private const double sixty_frame_time = 1000.0 / 60; - private double currentTime; + protected double CurrentTime; private int currentDirection; /// @@ -79,14 +62,16 @@ namespace osu.Game.Rulesets.Replays /// public bool FrameAccuratePlayback = true; - private bool hasFrames => Frames.Count > 0; + protected bool HasFrames => Frames.Count > 0; private bool inImportantSection => - FrameAccuratePlayback && + HasFrames && FrameAccuratePlayback && //a button is in a pressed state - ((currentDirection > 0 ? CurrentFrame : NextFrame)?.IsImportant ?? false) && + IsImportant(currentDirection > 0 ? CurrentFrame : NextFrame) && //the next frame is within an allowable time span - Math.Abs(currentTime - NextFrame?.Time ?? 0) <= sixty_frame_time * 1.2; + Math.Abs(CurrentTime - NextFrame?.Time ?? 0) <= sixty_frame_time * 1.2; + + protected virtual bool IsImportant(TFrame frame) => false; /// /// Update the current frame based on an incoming time value. @@ -97,10 +82,10 @@ namespace osu.Game.Rulesets.Replays /// The usable time value. If null, we should not advance time as we do not have enough data. public override double? SetFrameFromTime(double time) { - currentDirection = time.CompareTo(currentTime); + currentDirection = time.CompareTo(CurrentTime); if (currentDirection == 0) currentDirection = 1; - if (hasFrames) + if (HasFrames) { // check if the next frame is in the "future" for the current playback direction if (currentDirection != time.CompareTo(NextFrame.Time)) @@ -114,12 +99,12 @@ namespace osu.Game.Rulesets.Replays // If going backwards, we need to execute once _before_ the frame time to reverse any judgements // that would occur as a result of this frame in forward playback if (currentDirection == -1) - return currentTime = CurrentFrame.Time - 1; - return currentTime = CurrentFrame.Time; + return CurrentTime = CurrentFrame.Time - 1; + return CurrentTime = CurrentFrame.Time; } } - return currentTime = time; + return CurrentTime = time; } protected class ReplayMouseState : MouseState diff --git a/osu.Game/Rulesets/Replays/Legacy/LegacyReplayFrame.cs b/osu.Game/Rulesets/Replays/Legacy/LegacyReplayFrame.cs new file mode 100644 index 0000000000..76709cbf21 --- /dev/null +++ b/osu.Game/Rulesets/Replays/Legacy/LegacyReplayFrame.cs @@ -0,0 +1,62 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using OpenTK; + +namespace osu.Game.Rulesets.Replays.Legacy +{ + public class LegacyReplayFrame : ReplayFrame + { + public Vector2 Position => new Vector2(MouseX ?? 0, MouseY ?? 0); + + public float? MouseX; + public float? MouseY; + + public bool MouseLeft => MouseLeft1 || MouseLeft2; + public bool MouseRight => MouseRight1 || MouseRight2; + + public bool MouseLeft1 + { + get { return (ButtonState & ReplayButtonState.Left1) > 0; } + set { setButtonState(ReplayButtonState.Left1, value); } + } + public bool MouseRight1 + { + get { return (ButtonState & ReplayButtonState.Right1) > 0; } + set { setButtonState(ReplayButtonState.Right1, value); } + } + public bool MouseLeft2 + { + get { return (ButtonState & ReplayButtonState.Left2) > 0; } + set { setButtonState(ReplayButtonState.Left2, value); } + } + public bool MouseRight2 + { + get { return (ButtonState & ReplayButtonState.Right2) > 0; } + set { setButtonState(ReplayButtonState.Right2, value); } + } + + private void setButtonState(ReplayButtonState singleButton, bool pressed) + { + if (pressed) + ButtonState |= singleButton; + else + ButtonState &= ~singleButton; + } + + public ReplayButtonState ButtonState; + + public LegacyReplayFrame(double time, float? mouseX, float? mouseY, ReplayButtonState buttonState) + : base(time) + { + MouseX = mouseX; + MouseY = mouseY; + ButtonState = buttonState; + } + + public override string ToString() + { + return $"{Time}\t({MouseX},{MouseY})\t{MouseLeft}\t{MouseRight}\t{MouseLeft1}\t{MouseRight1}\t{MouseLeft2}\t{MouseRight2}\t{ButtonState}"; + } + } +} diff --git a/osu.Game/Rulesets/Replays/ReplayButtonState.cs b/osu.Game/Rulesets/Replays/Legacy/ReplayButtonState.cs similarity index 85% rename from osu.Game/Rulesets/Replays/ReplayButtonState.cs rename to osu.Game/Rulesets/Replays/Legacy/ReplayButtonState.cs index 4421a79af8..d0706411d2 100644 --- a/osu.Game/Rulesets/Replays/ReplayButtonState.cs +++ b/osu.Game/Rulesets/Replays/Legacy/ReplayButtonState.cs @@ -3,7 +3,7 @@ using System; -namespace osu.Game.Rulesets.Replays +namespace osu.Game.Rulesets.Replays.Legacy { [Flags] public enum ReplayButtonState diff --git a/osu.Game/Rulesets/Replays/Replay.cs b/osu.Game/Rulesets/Replays/Replay.cs index 27a77addba..a0ea2c5655 100644 --- a/osu.Game/Rulesets/Replays/Replay.cs +++ b/osu.Game/Rulesets/Replays/Replay.cs @@ -9,7 +9,6 @@ namespace osu.Game.Rulesets.Replays public class Replay { public User User; - public List Frames = new List(); } } diff --git a/osu.Game/Rulesets/Replays/ReplayFrame.cs b/osu.Game/Rulesets/Replays/ReplayFrame.cs index 4f8ed5163e..61a3646024 100644 --- a/osu.Game/Rulesets/Replays/ReplayFrame.cs +++ b/osu.Game/Rulesets/Replays/ReplayFrame.cs @@ -1,70 +1,19 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE -using OpenTK; - namespace osu.Game.Rulesets.Replays { public class ReplayFrame { - public Vector2 Position => new Vector2(MouseX ?? 0, MouseY ?? 0); - - public virtual bool IsImportant => MouseX.HasValue && MouseY.HasValue && (MouseLeft || MouseRight); - - public float? MouseX; - public float? MouseY; - - public bool MouseLeft => MouseLeft1 || MouseLeft2; - public bool MouseRight => MouseRight1 || MouseRight2; - - public bool MouseLeft1 - { - get { return (ButtonState & ReplayButtonState.Left1) > 0; } - set { setButtonState(ReplayButtonState.Left1, value); } - } - public bool MouseRight1 - { - get { return (ButtonState & ReplayButtonState.Right1) > 0; } - set { setButtonState(ReplayButtonState.Right1, value); } - } - public bool MouseLeft2 - { - get { return (ButtonState & ReplayButtonState.Left2) > 0; } - set { setButtonState(ReplayButtonState.Left2, value); } - } - public bool MouseRight2 - { - get { return (ButtonState & ReplayButtonState.Right2) > 0; } - set { setButtonState(ReplayButtonState.Right2, value); } - } - - private void setButtonState(ReplayButtonState singleButton, bool pressed) - { - if (pressed) - ButtonState |= singleButton; - else - ButtonState &= ~singleButton; - } - public double Time; - public ReplayButtonState ButtonState; - - protected ReplayFrame() + public ReplayFrame() { } - public ReplayFrame(double time, float? mouseX, float? mouseY, ReplayButtonState buttonState) + public ReplayFrame(double time) { - MouseX = mouseX; - MouseY = mouseY; - ButtonState = buttonState; Time = time; } - - public override string ToString() - { - return $"{Time}\t({MouseX},{MouseY})\t{MouseLeft}\t{MouseRight}\t{MouseLeft1}\t{MouseRight1}\t{MouseLeft2}\t{MouseRight2}\t{ButtonState}"; - } } } diff --git a/osu.Game/Rulesets/Replays/Types/IConvertibleReplayFrame.cs b/osu.Game/Rulesets/Replays/Types/IConvertibleReplayFrame.cs new file mode 100644 index 0000000000..16943e5c1d --- /dev/null +++ b/osu.Game/Rulesets/Replays/Types/IConvertibleReplayFrame.cs @@ -0,0 +1,14 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using osu.Game.Beatmaps; +using osu.Game.Rulesets.Replays.Legacy; +using osu.Game.Rulesets.Scoring; + +namespace osu.Game.Rulesets.Replays.Types +{ + public interface IConvertibleReplayFrame + { + void ConvertFrom(LegacyReplayFrame legacyFrame, Score score, Beatmap beatmap); + } +} diff --git a/osu.Game/Rulesets/Ruleset.cs b/osu.Game/Rulesets/Ruleset.cs index 4f256621fb..9d49ebe37d 100644 --- a/osu.Game/Rulesets/Ruleset.cs +++ b/osu.Game/Rulesets/Ruleset.cs @@ -11,6 +11,7 @@ using osu.Game.Graphics; using osu.Game.Overlays.Settings; using osu.Game.Rulesets.Edit; using osu.Game.Rulesets.Mods; +using osu.Game.Rulesets.Replays; using osu.Game.Rulesets.Scoring; using osu.Game.Rulesets.UI; @@ -89,6 +90,8 @@ namespace osu.Game.Rulesets /// A descriptive name of the variant. public virtual string GetVariantName(int variant) => string.Empty; + public virtual ReplayFrame CreateReplayFrame() => new ReplayFrame(); + /// /// Create a ruleset info based on this ruleset. /// diff --git a/osu.Game/Rulesets/Scoring/IScoreParser.cs b/osu.Game/Rulesets/Scoring/IScoreParser.cs new file mode 100644 index 0000000000..c7295deb2d --- /dev/null +++ b/osu.Game/Rulesets/Scoring/IScoreParser.cs @@ -0,0 +1,12 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using System.IO; + +namespace osu.Game.Rulesets.Scoring +{ + public interface IScoreParser + { + Score Parse(Stream stream); + } +} diff --git a/osu.Game/Rulesets/Scoring/Legacy/LegacyScoreParser.cs b/osu.Game/Rulesets/Scoring/Legacy/LegacyScoreParser.cs new file mode 100644 index 0000000000..73350919de --- /dev/null +++ b/osu.Game/Rulesets/Scoring/Legacy/LegacyScoreParser.cs @@ -0,0 +1,151 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using System.IO; +using osu.Game.Beatmaps; +using osu.Game.IO.Legacy; +using osu.Game.Rulesets.Replays; +using osu.Game.Rulesets.Replays.Legacy; +using osu.Game.Rulesets.Replays.Types; +using osu.Game.Users; +using SharpCompress.Compressors.LZMA; + +namespace osu.Game.Rulesets.Scoring.Legacy +{ + public class LegacyScoreParser : IScoreParser + { + private readonly RulesetStore rulesets; + private readonly BeatmapManager beatmaps; + + public LegacyScoreParser(RulesetStore rulesets, BeatmapManager beatmaps) + { + this.rulesets = rulesets; + this.beatmaps = beatmaps; + } + + private Beatmap currentBeatmap; + private Score currentScore; + private Ruleset currentRuleset; + + public Score Parse(Stream stream) + { + Score score; + + using (SerializationReader sr = new SerializationReader(stream)) + { + currentScore = score = new Score { Ruleset = rulesets.GetRuleset(sr.ReadByte()) }; + currentRuleset = score.Ruleset.CreateInstance(); + + /* score.Pass = true;*/ + var version = sr.ReadInt32(); + + /* score.FileChecksum = */ + var beatmapHash = sr.ReadString(); + score.Beatmap = beatmaps.QueryBeatmap(b => b.MD5Hash == beatmapHash); + currentBeatmap = beatmaps.GetWorkingBeatmap(score.Beatmap).Beatmap; + + /* score.PlayerName = */ + score.User = new User { Username = sr.ReadString() }; + /* var localScoreChecksum = */ + sr.ReadString(); + /* score.Count300 = */ + sr.ReadUInt16(); + /* score.Count100 = */ + sr.ReadUInt16(); + /* score.Count50 = */ + sr.ReadUInt16(); + /* score.CountGeki = */ + sr.ReadUInt16(); + /* score.CountKatu = */ + sr.ReadUInt16(); + /* score.CountMiss = */ + sr.ReadUInt16(); + score.TotalScore = sr.ReadInt32(); + score.MaxCombo = sr.ReadUInt16(); + /* score.Perfect = */ + sr.ReadBoolean(); + /* score.EnabledMods = (Mods)*/ + sr.ReadInt32(); + /* score.HpGraphString = */ + sr.ReadString(); + /* score.Date = */ + sr.ReadDateTime(); + + var compressedReplay = sr.ReadByteArray(); + + if (version >= 20140721) + /*OnlineId =*/ + sr.ReadInt64(); + else if (version >= 20121008) + /*OnlineId =*/ + sr.ReadInt32(); + + using (var replayInStream = new MemoryStream(compressedReplay)) + { + byte[] properties = new byte[5]; + if (replayInStream.Read(properties, 0, 5) != 5) + throw new IOException("input .lzma is too short"); + long outSize = 0; + for (int i = 0; i < 8; i++) + { + int v = replayInStream.ReadByte(); + if (v < 0) + throw new IOException("Can't Read 1"); + outSize |= (long)(byte)v << (8 * i); + } + + long compressedSize = replayInStream.Length - replayInStream.Position; + + using (var lzma = new LzmaStream(properties, replayInStream, compressedSize, outSize)) + using (var reader = new StreamReader(lzma)) + { + score.Replay = new Replay { User = score.User }; + readLegacyReplay(score.Replay, reader); + } + } + } + + return score; + } + + private void readLegacyReplay(Replay replay, StreamReader reader) + { + float lastTime = 0; + + foreach (var l in reader.ReadToEnd().Split(',')) + { + var split = l.Split('|'); + + if (split.Length < 4) + continue; + + if (split[0] == "-12345") + { + // Todo: The seed is provided in split[3], which we'll need to use at some point + continue; + } + + var diff = float.Parse(split[0]); + lastTime += diff; + + // Todo: At some point we probably want to rewind and play back the negative-time frames + // but for now we'll achieve equal playback to stable by skipping negative frames + if (diff < 0) + continue; + + replay.Frames.Add(convertFrame(new LegacyReplayFrame(lastTime, float.Parse(split[1]), float.Parse(split[2]), (ReplayButtonState)int.Parse(split[3])))); + } + } + + private ReplayFrame convertFrame(LegacyReplayFrame legacyFrame) + { + var converted = currentRuleset.CreateReplayFrame(); + converted.Time = legacyFrame.Time; + + if (converted is IConvertibleReplayFrame convertible) + convertible.ConvertFrom(legacyFrame, currentScore, currentBeatmap); + + return converted; + } + } +} diff --git a/osu.Game/Rulesets/Scoring/ScoreStore.cs b/osu.Game/Rulesets/Scoring/ScoreStore.cs index 7abee0b04f..cb2b76cdcf 100644 --- a/osu.Game/Rulesets/Scoring/ScoreStore.cs +++ b/osu.Game/Rulesets/Scoring/ScoreStore.cs @@ -2,16 +2,12 @@ // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using System; -using System.Collections.Generic; using System.IO; using osu.Framework.Platform; using osu.Game.Beatmaps; using osu.Game.Database; -using osu.Game.IO.Legacy; using osu.Game.IPC; -using osu.Game.Rulesets.Replays; -using osu.Game.Users; -using SharpCompress.Compressors.LZMA; +using osu.Game.Rulesets.Scoring.Legacy; namespace osu.Game.Rulesets.Scoring { @@ -53,127 +49,8 @@ namespace osu.Game.Rulesets.Scoring public Score ReadReplayFile(string replayFilename) { - Score score; - using (Stream s = storage.GetStream(Path.Combine(replay_folder, replayFilename))) - using (SerializationReader sr = new SerializationReader(s)) - { - score = new Score - { - Ruleset = rulesets.GetRuleset(sr.ReadByte()) - }; - - /* score.Pass = true;*/ - var version = sr.ReadInt32(); - /* score.FileChecksum = */ - var beatmapHash = sr.ReadString(); - score.Beatmap = beatmaps.QueryBeatmap(b => b.MD5Hash == beatmapHash); - /* score.PlayerName = */ - score.User = new User { Username = sr.ReadString() }; - /* var localScoreChecksum = */ - sr.ReadString(); - /* score.Count300 = */ - sr.ReadUInt16(); - /* score.Count100 = */ - sr.ReadUInt16(); - /* score.Count50 = */ - sr.ReadUInt16(); - /* score.CountGeki = */ - sr.ReadUInt16(); - /* score.CountKatu = */ - sr.ReadUInt16(); - /* score.CountMiss = */ - sr.ReadUInt16(); - score.TotalScore = sr.ReadInt32(); - score.MaxCombo = sr.ReadUInt16(); - /* score.Perfect = */ - sr.ReadBoolean(); - /* score.EnabledMods = (Mods)*/ - sr.ReadInt32(); - /* score.HpGraphString = */ - sr.ReadString(); - /* score.Date = */ - sr.ReadDateTime(); - - var compressedReplay = sr.ReadByteArray(); - - if (version >= 20140721) - /*OnlineId =*/ - sr.ReadInt64(); - else if (version >= 20121008) - /*OnlineId =*/ - sr.ReadInt32(); - - using (var replayInStream = new MemoryStream(compressedReplay)) - { - byte[] properties = new byte[5]; - if (replayInStream.Read(properties, 0, 5) != 5) - throw new IOException("input .lzma is too short"); - long outSize = 0; - for (int i = 0; i < 8; i++) - { - int v = replayInStream.ReadByte(); - if (v < 0) - throw new IOException("Can't Read 1"); - outSize |= (long)(byte)v << (8 * i); - } - - long compressedSize = replayInStream.Length - replayInStream.Position; - - using (var lzma = new LzmaStream(properties, replayInStream, compressedSize, outSize)) - using (var reader = new StreamReader(lzma)) - { - score.Replay = createLegacyReplay(reader); - score.Replay.User = score.User; - } - } - } - - return score; + return new LegacyScoreParser(rulesets, beatmaps).Parse(s); } - - /// - /// Creates a legacy replay which is read from a stream. - /// - /// The stream reader. - /// The legacy replay. - private Replay createLegacyReplay(StreamReader reader) - { - var frames = new List(); - - float lastTime = 0; - - foreach (var l in reader.ReadToEnd().Split(',')) - { - var split = l.Split('|'); - - if (split.Length < 4) - continue; - - if (split[0] == "-12345") - { - // Todo: The seed is provided in split[3], which we'll need to use at some point - continue; - } - - var diff = float.Parse(split[0]); - lastTime += diff; - - // Todo: At some point we probably want to rewind and play back the negative-time frames - // but for now we'll achieve equal playback to stable by skipping negative frames - if (diff < 0) - continue; - - frames.Add(new ReplayFrame( - lastTime, - float.Parse(split[1]), - float.Parse(split[2]), - (ReplayButtonState)int.Parse(split[3]) - )); - } - - return new Replay { Frames = frames }; - } - } } diff --git a/osu.Game/Rulesets/UI/RulesetContainer.cs b/osu.Game/Rulesets/UI/RulesetContainer.cs index 05cb0f741b..780bc5c86b 100644 --- a/osu.Game/Rulesets/UI/RulesetContainer.cs +++ b/osu.Game/Rulesets/UI/RulesetContainer.cs @@ -17,6 +17,7 @@ using osu.Framework.Configuration; using osu.Framework.Graphics.Cursor; using osu.Framework.Input; using osu.Game.Configuration; +using osu.Game.Input.Handlers; using osu.Game.Overlays; using osu.Game.Rulesets.Configuration; using osu.Game.Rulesets.Replays; @@ -110,7 +111,7 @@ namespace osu.Game.Rulesets.UI /// The input manager. public abstract PassThroughInputManager CreateInputManager(); - protected virtual FramedReplayInputHandler CreateReplayInputHandler(Replay replay) => null; + protected virtual ReplayInputHandler CreateReplayInputHandler(Replay replay) => null; public Replay Replay { get; private set; } diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index 6a06bf540b..568a176e8a 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -361,6 +361,12 @@ + + + + + + @@ -706,8 +712,6 @@ - - @@ -936,4 +940,4 @@ - + \ No newline at end of file From b8b869e8b76ce041fb065071cfe637141353f5d2 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Thu, 1 Mar 2018 00:33:20 +0900 Subject: [PATCH 213/544] Remove now unused property --- osu.Game.Rulesets.Mania/Beatmaps/StageDefinition.cs | 5 ----- 1 file changed, 5 deletions(-) diff --git a/osu.Game.Rulesets.Mania/Beatmaps/StageDefinition.cs b/osu.Game.Rulesets.Mania/Beatmaps/StageDefinition.cs index 113f4f2164..cb500735f7 100644 --- a/osu.Game.Rulesets.Mania/Beatmaps/StageDefinition.cs +++ b/osu.Game.Rulesets.Mania/Beatmaps/StageDefinition.cs @@ -15,11 +15,6 @@ namespace osu.Game.Rulesets.Mania.Beatmaps /// public int Columns; - /// - /// Whether this stage has a special column. - /// - public bool HasSpecialColumn => Columns % 2 == 1; - /// /// Whether the column index is a special column for this stage. /// From a02eaf0e94ad08817eb70e16899918109e499f53 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Thu, 1 Mar 2018 00:36:32 +0900 Subject: [PATCH 214/544] Use StageDefinition to determine special column in ManiaReplayFrame --- osu.Game.Rulesets.Mania/Replays/ManiaReplayFrame.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/osu.Game.Rulesets.Mania/Replays/ManiaReplayFrame.cs b/osu.Game.Rulesets.Mania/Replays/ManiaReplayFrame.cs index ed1143d8ff..6c38c5e91a 100644 --- a/osu.Game.Rulesets.Mania/Replays/ManiaReplayFrame.cs +++ b/osu.Game.Rulesets.Mania/Replays/ManiaReplayFrame.cs @@ -30,7 +30,7 @@ namespace osu.Game.Rulesets.Mania.Replays // NB: Via co-op mod, osu-stable can have two stages with floor(col/2) and ceil(col/2) columns. This will need special handling // elsewhere in the game if we do choose to support the old co-op mod anyway. For now, assume that there is only one stage. - bool isSpecialColumn(int column) => converter.TargetColumns % 2 == 1 && column == converter.TargetColumns / 2; + var stage = new StageDefinition { Columns = converter.TargetColumns }; var normalAction = ManiaAction.Key1; var specialAction = ManiaAction.Special1; @@ -41,7 +41,7 @@ namespace osu.Game.Rulesets.Mania.Replays { Actions.Add((activeColumns & 1) > 0 ? specialAction : normalAction); - if (isSpecialColumn(counter)) + if (stage.IsSpecialColumn(counter)) normalAction++; else specialAction++; From 222ae700624c7ced4daf7cde9a9a62f8b1861e2f Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Thu, 1 Mar 2018 00:57:35 +0900 Subject: [PATCH 215/544] Populate rulesets with their replay frames --- osu.Game.Rulesets.Catch/CatchRuleset.cs | 4 ++++ osu.Game.Rulesets.Catch/Replays/CatchReplayFrame.cs | 4 ++++ osu.Game.Rulesets.Mania/ManiaRuleset.cs | 4 ++++ osu.Game.Rulesets.Mania/Replays/ManiaReplayFrame.cs | 4 ++++ osu.Game.Rulesets.Osu/Replays/OsuReplayFrame.cs | 1 - osu.Game.Rulesets.Taiko/Replays/TaikoReplayFrame.cs | 4 ++++ osu.Game.Rulesets.Taiko/TaikoRuleset.cs | 4 ++++ 7 files changed, 24 insertions(+), 1 deletion(-) diff --git a/osu.Game.Rulesets.Catch/CatchRuleset.cs b/osu.Game.Rulesets.Catch/CatchRuleset.cs index 5e70239c7c..0228a23166 100644 --- a/osu.Game.Rulesets.Catch/CatchRuleset.cs +++ b/osu.Game.Rulesets.Catch/CatchRuleset.cs @@ -10,6 +10,8 @@ using osu.Game.Rulesets.UI; using System.Collections.Generic; using osu.Framework.Graphics; using osu.Framework.Input.Bindings; +using osu.Game.Rulesets.Catch.Replays; +using osu.Game.Rulesets.Replays; namespace osu.Game.Rulesets.Catch { @@ -101,6 +103,8 @@ namespace osu.Game.Rulesets.Catch public override int LegacyID => 2; + public override ReplayFrame CreateReplayFrame() => new CatchReplayFrame(); + public CatchRuleset(RulesetInfo rulesetInfo = null) : base(rulesetInfo) { diff --git a/osu.Game.Rulesets.Catch/Replays/CatchReplayFrame.cs b/osu.Game.Rulesets.Catch/Replays/CatchReplayFrame.cs index c81b095f30..3909522b52 100644 --- a/osu.Game.Rulesets.Catch/Replays/CatchReplayFrame.cs +++ b/osu.Game.Rulesets.Catch/Replays/CatchReplayFrame.cs @@ -14,6 +14,10 @@ namespace osu.Game.Rulesets.Catch.Replays public float X; public bool Dashing; + public CatchReplayFrame() + { + } + public CatchReplayFrame(double time, float? x = null, bool dashing = false) : base(time) { diff --git a/osu.Game.Rulesets.Mania/ManiaRuleset.cs b/osu.Game.Rulesets.Mania/ManiaRuleset.cs index 3bfb4d3e44..611c5e7143 100644 --- a/osu.Game.Rulesets.Mania/ManiaRuleset.cs +++ b/osu.Game.Rulesets.Mania/ManiaRuleset.cs @@ -12,6 +12,8 @@ using System.Linq; using osu.Framework.Graphics; using osu.Framework.Input.Bindings; using osu.Game.Graphics; +using osu.Game.Rulesets.Mania.Replays; +using osu.Game.Rulesets.Replays; namespace osu.Game.Rulesets.Mania { @@ -114,6 +116,8 @@ namespace osu.Game.Rulesets.Mania public override int LegacyID => 3; + public override ReplayFrame CreateReplayFrame() => new ManiaReplayFrame(); + public ManiaRuleset(RulesetInfo rulesetInfo = null) : base(rulesetInfo) { diff --git a/osu.Game.Rulesets.Mania/Replays/ManiaReplayFrame.cs b/osu.Game.Rulesets.Mania/Replays/ManiaReplayFrame.cs index 6c38c5e91a..d9c998be67 100644 --- a/osu.Game.Rulesets.Mania/Replays/ManiaReplayFrame.cs +++ b/osu.Game.Rulesets.Mania/Replays/ManiaReplayFrame.cs @@ -15,6 +15,10 @@ namespace osu.Game.Rulesets.Mania.Replays { public List Actions = new List(); + public ManiaReplayFrame() + { + } + public ManiaReplayFrame(double time, params ManiaAction[] actions) : base(time) { diff --git a/osu.Game.Rulesets.Osu/Replays/OsuReplayFrame.cs b/osu.Game.Rulesets.Osu/Replays/OsuReplayFrame.cs index 5d0ff25109..4e0d22abd1 100644 --- a/osu.Game.Rulesets.Osu/Replays/OsuReplayFrame.cs +++ b/osu.Game.Rulesets.Osu/Replays/OsuReplayFrame.cs @@ -17,7 +17,6 @@ namespace osu.Game.Rulesets.Osu.Replays public List Actions = new List(); public OsuReplayFrame() - : base(0) { } diff --git a/osu.Game.Rulesets.Taiko/Replays/TaikoReplayFrame.cs b/osu.Game.Rulesets.Taiko/Replays/TaikoReplayFrame.cs index b2fd62d751..335e5e1b6f 100644 --- a/osu.Game.Rulesets.Taiko/Replays/TaikoReplayFrame.cs +++ b/osu.Game.Rulesets.Taiko/Replays/TaikoReplayFrame.cs @@ -14,6 +14,10 @@ namespace osu.Game.Rulesets.Taiko.Replays { public List Actions = new List(); + public TaikoReplayFrame() + { + } + public TaikoReplayFrame(double time, params TaikoAction[] actions) : base(time) { diff --git a/osu.Game.Rulesets.Taiko/TaikoRuleset.cs b/osu.Game.Rulesets.Taiko/TaikoRuleset.cs index 50cc80db50..9965b3d3f2 100644 --- a/osu.Game.Rulesets.Taiko/TaikoRuleset.cs +++ b/osu.Game.Rulesets.Taiko/TaikoRuleset.cs @@ -10,6 +10,8 @@ using osu.Game.Rulesets.UI; using System.Collections.Generic; using osu.Framework.Graphics; using osu.Framework.Input.Bindings; +using osu.Game.Rulesets.Replays; +using osu.Game.Rulesets.Taiko.Replays; namespace osu.Game.Rulesets.Taiko { @@ -103,6 +105,8 @@ namespace osu.Game.Rulesets.Taiko public override int LegacyID => 1; + public override ReplayFrame CreateReplayFrame() => new TaikoReplayFrame(); + public TaikoRuleset(RulesetInfo rulesetInfo = null) : base(rulesetInfo) { From 91460f27daf5adabeb1fe40347f6121263998001 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Thu, 1 Mar 2018 00:57:45 +0900 Subject: [PATCH 216/544] Fix incorrect isForCurrentRuleset value --- osu.Game.Tests/Visual/TestCaseReplay.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game.Tests/Visual/TestCaseReplay.cs b/osu.Game.Tests/Visual/TestCaseReplay.cs index 237687458d..115ac11919 100644 --- a/osu.Game.Tests/Visual/TestCaseReplay.cs +++ b/osu.Game.Tests/Visual/TestCaseReplay.cs @@ -18,7 +18,7 @@ namespace osu.Game.Tests.Visual // We create a dummy RulesetContainer just to get the replay - we don't want to use mods here // to simulate setting a replay rather than having the replay already set for us beatmap.Mods.Value = beatmap.Mods.Value.Concat(new[] { ruleset.GetAutoplayMod() }); - var dummyRulesetContainer = ruleset.CreateRulesetContainerWith(beatmap, false); + var dummyRulesetContainer = ruleset.CreateRulesetContainerWith(beatmap, beatmap.BeatmapInfo.Ruleset.Equals(ruleset.RulesetInfo)); // We have the replay var replay = dummyRulesetContainer.Replay; From 4a20513fc49aa0d234966145f0605155bae39eaf Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Thu, 1 Mar 2018 01:02:12 +0900 Subject: [PATCH 217/544] Fix catch always dashing --- osu.Game.Rulesets.Catch/Replays/CatchAutoGenerator.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/osu.Game.Rulesets.Catch/Replays/CatchAutoGenerator.cs b/osu.Game.Rulesets.Catch/Replays/CatchAutoGenerator.cs index d0772bbaa1..f1503a14ee 100644 --- a/osu.Game.Rulesets.Catch/Replays/CatchAutoGenerator.cs +++ b/osu.Game.Rulesets.Catch/Replays/CatchAutoGenerator.cs @@ -63,7 +63,7 @@ namespace osu.Game.Rulesets.Catch.Replays } else if (h.HyperDash) { - Replay.Frames.Add(new CatchReplayFrame(h.StartTime - timeAvailable, lastPosition, true)); + Replay.Frames.Add(new CatchReplayFrame(h.StartTime - timeAvailable, lastPosition)); Replay.Frames.Add(new CatchReplayFrame(h.StartTime, h.X)); } else if (dashRequired) @@ -84,7 +84,7 @@ namespace osu.Game.Rulesets.Catch.Replays { double timeBefore = positionChange / movement_speed; - Replay.Frames.Add(new CatchReplayFrame(h.StartTime - timeBefore, lastPosition, true)); + Replay.Frames.Add(new CatchReplayFrame(h.StartTime - timeBefore, lastPosition)); Replay.Frames.Add(new CatchReplayFrame(h.StartTime, h.X)); } From a7e6c19e61d15a22d665b3405bd62b882988d98f Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Thu, 1 Mar 2018 01:18:18 +0900 Subject: [PATCH 218/544] Remove todo (probably not a consideration going forward) --- osu.Game.Rulesets.Mania/Replays/ManiaReplayFrame.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/osu.Game.Rulesets.Mania/Replays/ManiaReplayFrame.cs b/osu.Game.Rulesets.Mania/Replays/ManiaReplayFrame.cs index d9c998be67..a9d0e96110 100644 --- a/osu.Game.Rulesets.Mania/Replays/ManiaReplayFrame.cs +++ b/osu.Game.Rulesets.Mania/Replays/ManiaReplayFrame.cs @@ -30,7 +30,6 @@ namespace osu.Game.Rulesets.Mania.Replays // We don't need to fully convert, just create the converter var converter = new ManiaBeatmapConverter(beatmap.BeatmapInfo.Ruleset.Equals(score.Ruleset), beatmap); - // Todo: Apply mods to converter // NB: Via co-op mod, osu-stable can have two stages with floor(col/2) and ceil(col/2) columns. This will need special handling // elsewhere in the game if we do choose to support the old co-op mod anyway. For now, assume that there is only one stage. From ab4d7fa46ec0cc0bd62d1cc5057e6536401b38f4 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Thu, 1 Mar 2018 01:24:36 +0900 Subject: [PATCH 219/544] Remove IScoreParser interface It's too early for this. --- osu.Game/Rulesets/Scoring/IScoreParser.cs | 12 ------------ .../Rulesets/Scoring/Legacy/LegacyScoreParser.cs | 2 +- osu.Game/osu.Game.csproj | 1 - 3 files changed, 1 insertion(+), 14 deletions(-) delete mode 100644 osu.Game/Rulesets/Scoring/IScoreParser.cs diff --git a/osu.Game/Rulesets/Scoring/IScoreParser.cs b/osu.Game/Rulesets/Scoring/IScoreParser.cs deleted file mode 100644 index c7295deb2d..0000000000 --- a/osu.Game/Rulesets/Scoring/IScoreParser.cs +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright (c) 2007-2018 ppy Pty Ltd . -// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE - -using System.IO; - -namespace osu.Game.Rulesets.Scoring -{ - public interface IScoreParser - { - Score Parse(Stream stream); - } -} diff --git a/osu.Game/Rulesets/Scoring/Legacy/LegacyScoreParser.cs b/osu.Game/Rulesets/Scoring/Legacy/LegacyScoreParser.cs index 73350919de..5610a36a83 100644 --- a/osu.Game/Rulesets/Scoring/Legacy/LegacyScoreParser.cs +++ b/osu.Game/Rulesets/Scoring/Legacy/LegacyScoreParser.cs @@ -12,7 +12,7 @@ using SharpCompress.Compressors.LZMA; namespace osu.Game.Rulesets.Scoring.Legacy { - public class LegacyScoreParser : IScoreParser + public class LegacyScoreParser { private readonly RulesetStore rulesets; private readonly BeatmapManager beatmaps; diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index 568a176e8a..6d3746e30a 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -365,7 +365,6 @@ - From c9c65cab53548490585ee0c650ed7956345aa1de Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Thu, 1 Mar 2018 01:32:32 +0900 Subject: [PATCH 220/544] CreateReplayFrame -> CreateConvertibleReplayFrame --- osu.Game.Rulesets.Catch/CatchRuleset.cs | 4 ++-- osu.Game.Rulesets.Mania/ManiaRuleset.cs | 4 ++-- osu.Game.Rulesets.Osu/OsuRuleset.cs | 4 ++-- osu.Game.Rulesets.Taiko/TaikoRuleset.cs | 4 ++-- osu.Game/Rulesets/Ruleset.cs | 4 ++-- .../Rulesets/Scoring/Legacy/LegacyScoreParser.cs | 13 ++++++------- 6 files changed, 16 insertions(+), 17 deletions(-) diff --git a/osu.Game.Rulesets.Catch/CatchRuleset.cs b/osu.Game.Rulesets.Catch/CatchRuleset.cs index 0228a23166..d49e9c7c26 100644 --- a/osu.Game.Rulesets.Catch/CatchRuleset.cs +++ b/osu.Game.Rulesets.Catch/CatchRuleset.cs @@ -11,7 +11,7 @@ using System.Collections.Generic; using osu.Framework.Graphics; using osu.Framework.Input.Bindings; using osu.Game.Rulesets.Catch.Replays; -using osu.Game.Rulesets.Replays; +using osu.Game.Rulesets.Replays.Types; namespace osu.Game.Rulesets.Catch { @@ -103,7 +103,7 @@ namespace osu.Game.Rulesets.Catch public override int LegacyID => 2; - public override ReplayFrame CreateReplayFrame() => new CatchReplayFrame(); + public override IConvertibleReplayFrame CreateConvertibleReplayFrame() => new CatchReplayFrame(); public CatchRuleset(RulesetInfo rulesetInfo = null) : base(rulesetInfo) diff --git a/osu.Game.Rulesets.Mania/ManiaRuleset.cs b/osu.Game.Rulesets.Mania/ManiaRuleset.cs index 611c5e7143..3ad498e6ea 100644 --- a/osu.Game.Rulesets.Mania/ManiaRuleset.cs +++ b/osu.Game.Rulesets.Mania/ManiaRuleset.cs @@ -13,7 +13,7 @@ using osu.Framework.Graphics; using osu.Framework.Input.Bindings; using osu.Game.Graphics; using osu.Game.Rulesets.Mania.Replays; -using osu.Game.Rulesets.Replays; +using osu.Game.Rulesets.Replays.Types; namespace osu.Game.Rulesets.Mania { @@ -116,7 +116,7 @@ namespace osu.Game.Rulesets.Mania public override int LegacyID => 3; - public override ReplayFrame CreateReplayFrame() => new ManiaReplayFrame(); + public override IConvertibleReplayFrame CreateConvertibleReplayFrame() => new ManiaReplayFrame(); public ManiaRuleset(RulesetInfo rulesetInfo = null) : base(rulesetInfo) diff --git a/osu.Game.Rulesets.Osu/OsuRuleset.cs b/osu.Game.Rulesets.Osu/OsuRuleset.cs index 42ead91f0d..3f0aea5cb2 100644 --- a/osu.Game.Rulesets.Osu/OsuRuleset.cs +++ b/osu.Game.Rulesets.Osu/OsuRuleset.cs @@ -20,7 +20,7 @@ using osu.Game.Rulesets.Edit; using osu.Game.Rulesets.Objects.Types; using osu.Game.Rulesets.Objects; using osu.Game.Rulesets.Osu.Replays; -using osu.Game.Rulesets.Replays; +using osu.Game.Rulesets.Replays.Types; namespace osu.Game.Rulesets.Osu { @@ -147,7 +147,7 @@ namespace osu.Game.Rulesets.Osu public override int LegacyID => 0; - public override ReplayFrame CreateReplayFrame() => new OsuReplayFrame(); + public override IConvertibleReplayFrame CreateConvertibleReplayFrame() => new OsuReplayFrame(); public OsuRuleset(RulesetInfo rulesetInfo = null) : base(rulesetInfo) diff --git a/osu.Game.Rulesets.Taiko/TaikoRuleset.cs b/osu.Game.Rulesets.Taiko/TaikoRuleset.cs index 9965b3d3f2..713506e831 100644 --- a/osu.Game.Rulesets.Taiko/TaikoRuleset.cs +++ b/osu.Game.Rulesets.Taiko/TaikoRuleset.cs @@ -10,7 +10,7 @@ using osu.Game.Rulesets.UI; using System.Collections.Generic; using osu.Framework.Graphics; using osu.Framework.Input.Bindings; -using osu.Game.Rulesets.Replays; +using osu.Game.Rulesets.Replays.Types; using osu.Game.Rulesets.Taiko.Replays; namespace osu.Game.Rulesets.Taiko @@ -105,7 +105,7 @@ namespace osu.Game.Rulesets.Taiko public override int LegacyID => 1; - public override ReplayFrame CreateReplayFrame() => new TaikoReplayFrame(); + public override IConvertibleReplayFrame CreateConvertibleReplayFrame() => new TaikoReplayFrame(); public TaikoRuleset(RulesetInfo rulesetInfo = null) : base(rulesetInfo) diff --git a/osu.Game/Rulesets/Ruleset.cs b/osu.Game/Rulesets/Ruleset.cs index 9d49ebe37d..7b6219da9a 100644 --- a/osu.Game/Rulesets/Ruleset.cs +++ b/osu.Game/Rulesets/Ruleset.cs @@ -11,7 +11,7 @@ using osu.Game.Graphics; using osu.Game.Overlays.Settings; using osu.Game.Rulesets.Edit; using osu.Game.Rulesets.Mods; -using osu.Game.Rulesets.Replays; +using osu.Game.Rulesets.Replays.Types; using osu.Game.Rulesets.Scoring; using osu.Game.Rulesets.UI; @@ -90,7 +90,7 @@ namespace osu.Game.Rulesets /// A descriptive name of the variant. public virtual string GetVariantName(int variant) => string.Empty; - public virtual ReplayFrame CreateReplayFrame() => new ReplayFrame(); + public virtual IConvertibleReplayFrame CreateConvertibleReplayFrame() => null; /// /// Create a ruleset info based on this ruleset. diff --git a/osu.Game/Rulesets/Scoring/Legacy/LegacyScoreParser.cs b/osu.Game/Rulesets/Scoring/Legacy/LegacyScoreParser.cs index 5610a36a83..ea36b818b3 100644 --- a/osu.Game/Rulesets/Scoring/Legacy/LegacyScoreParser.cs +++ b/osu.Game/Rulesets/Scoring/Legacy/LegacyScoreParser.cs @@ -1,12 +1,12 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using System; using System.IO; using osu.Game.Beatmaps; using osu.Game.IO.Legacy; using osu.Game.Rulesets.Replays; using osu.Game.Rulesets.Replays.Legacy; -using osu.Game.Rulesets.Replays.Types; using osu.Game.Users; using SharpCompress.Compressors.LZMA; @@ -139,13 +139,12 @@ namespace osu.Game.Rulesets.Scoring.Legacy private ReplayFrame convertFrame(LegacyReplayFrame legacyFrame) { - var converted = currentRuleset.CreateReplayFrame(); - converted.Time = legacyFrame.Time; + var convertible = currentRuleset.CreateConvertibleReplayFrame(); + if (convertible == null) + throw new InvalidOperationException($"Legacy replay cannot be converted for the ruleset: {currentRuleset.Description}"); + convertible.ConvertFrom(legacyFrame, currentScore, currentBeatmap); - if (converted is IConvertibleReplayFrame convertible) - convertible.ConvertFrom(legacyFrame, currentScore, currentBeatmap); - - return converted; + return (ReplayFrame)convertible; } } } From cf42d5bbd50f0df1cddb05826d234ead27921b89 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Thu, 1 Mar 2018 01:38:40 +0900 Subject: [PATCH 221/544] Remove mostly-unused Score parameter --- osu.Game.Rulesets.Catch/Replays/CatchReplayFrame.cs | 3 +-- osu.Game.Rulesets.Mania/Replays/ManiaReplayFrame.cs | 5 ++--- osu.Game.Rulesets.Osu/Replays/OsuReplayFrame.cs | 3 +-- osu.Game.Rulesets.Taiko/Replays/TaikoReplayFrame.cs | 3 +-- .../Replays/Types/IConvertibleReplayFrame.cs | 12 ++++++++++-- .../Rulesets/Scoring/Legacy/LegacyScoreParser.cs | 5 ++--- 6 files changed, 17 insertions(+), 14 deletions(-) diff --git a/osu.Game.Rulesets.Catch/Replays/CatchReplayFrame.cs b/osu.Game.Rulesets.Catch/Replays/CatchReplayFrame.cs index 3909522b52..d45223a1cb 100644 --- a/osu.Game.Rulesets.Catch/Replays/CatchReplayFrame.cs +++ b/osu.Game.Rulesets.Catch/Replays/CatchReplayFrame.cs @@ -5,7 +5,6 @@ using osu.Game.Beatmaps; using osu.Game.Rulesets.Replays; using osu.Game.Rulesets.Replays.Legacy; using osu.Game.Rulesets.Replays.Types; -using osu.Game.Rulesets.Scoring; namespace osu.Game.Rulesets.Catch.Replays { @@ -25,7 +24,7 @@ namespace osu.Game.Rulesets.Catch.Replays Dashing = dashing; } - public void ConvertFrom(LegacyReplayFrame legacyFrame, Score score, Beatmap beatmap) + public void ConvertFrom(LegacyReplayFrame legacyFrame, Beatmap beatmap) { // Todo: This needs to be re-scaled X = legacyFrame.Position.X; diff --git a/osu.Game.Rulesets.Mania/Replays/ManiaReplayFrame.cs b/osu.Game.Rulesets.Mania/Replays/ManiaReplayFrame.cs index a9d0e96110..9e773d0e24 100644 --- a/osu.Game.Rulesets.Mania/Replays/ManiaReplayFrame.cs +++ b/osu.Game.Rulesets.Mania/Replays/ManiaReplayFrame.cs @@ -7,7 +7,6 @@ using osu.Game.Rulesets.Mania.Beatmaps; using osu.Game.Rulesets.Replays; using osu.Game.Rulesets.Replays.Legacy; using osu.Game.Rulesets.Replays.Types; -using osu.Game.Rulesets.Scoring; namespace osu.Game.Rulesets.Mania.Replays { @@ -25,10 +24,10 @@ namespace osu.Game.Rulesets.Mania.Replays Actions.AddRange(actions); } - public void ConvertFrom(LegacyReplayFrame legacyFrame, Score score, Beatmap beatmap) + public void ConvertFrom(LegacyReplayFrame legacyFrame, Beatmap beatmap) { // We don't need to fully convert, just create the converter - var converter = new ManiaBeatmapConverter(beatmap.BeatmapInfo.Ruleset.Equals(score.Ruleset), beatmap); + var converter = new ManiaBeatmapConverter(beatmap.BeatmapInfo.RulesetID == 3, beatmap); // NB: Via co-op mod, osu-stable can have two stages with floor(col/2) and ceil(col/2) columns. This will need special handling // elsewhere in the game if we do choose to support the old co-op mod anyway. For now, assume that there is only one stage. diff --git a/osu.Game.Rulesets.Osu/Replays/OsuReplayFrame.cs b/osu.Game.Rulesets.Osu/Replays/OsuReplayFrame.cs index 4e0d22abd1..bcdfe07417 100644 --- a/osu.Game.Rulesets.Osu/Replays/OsuReplayFrame.cs +++ b/osu.Game.Rulesets.Osu/Replays/OsuReplayFrame.cs @@ -6,7 +6,6 @@ using osu.Game.Beatmaps; using osu.Game.Rulesets.Replays; using osu.Game.Rulesets.Replays.Legacy; using osu.Game.Rulesets.Replays.Types; -using osu.Game.Rulesets.Scoring; using OpenTK; namespace osu.Game.Rulesets.Osu.Replays @@ -27,7 +26,7 @@ namespace osu.Game.Rulesets.Osu.Replays Actions.AddRange(actions); } - public void ConvertFrom(LegacyReplayFrame legacyFrame, Score score, Beatmap beatmap) + public void ConvertFrom(LegacyReplayFrame legacyFrame, Beatmap beatmap) { Position = legacyFrame.Position; if (legacyFrame.MouseLeft) Actions.Add(OsuAction.LeftButton); diff --git a/osu.Game.Rulesets.Taiko/Replays/TaikoReplayFrame.cs b/osu.Game.Rulesets.Taiko/Replays/TaikoReplayFrame.cs index 335e5e1b6f..6cd63f6c70 100644 --- a/osu.Game.Rulesets.Taiko/Replays/TaikoReplayFrame.cs +++ b/osu.Game.Rulesets.Taiko/Replays/TaikoReplayFrame.cs @@ -6,7 +6,6 @@ using osu.Game.Beatmaps; using osu.Game.Rulesets.Replays; using osu.Game.Rulesets.Replays.Legacy; using osu.Game.Rulesets.Replays.Types; -using osu.Game.Rulesets.Scoring; namespace osu.Game.Rulesets.Taiko.Replays { @@ -24,7 +23,7 @@ namespace osu.Game.Rulesets.Taiko.Replays Actions.AddRange(actions); } - public void ConvertFrom(LegacyReplayFrame legacyFrame, Score score, Beatmap beatmap) + public void ConvertFrom(LegacyReplayFrame legacyFrame, Beatmap beatmap) { if (legacyFrame.MouseRight1) Actions.Add(TaikoAction.LeftRim); if (legacyFrame.MouseRight2) Actions.Add(TaikoAction.RightRim); diff --git a/osu.Game/Rulesets/Replays/Types/IConvertibleReplayFrame.cs b/osu.Game/Rulesets/Replays/Types/IConvertibleReplayFrame.cs index 16943e5c1d..ac1e5e29ec 100644 --- a/osu.Game/Rulesets/Replays/Types/IConvertibleReplayFrame.cs +++ b/osu.Game/Rulesets/Replays/Types/IConvertibleReplayFrame.cs @@ -3,12 +3,20 @@ using osu.Game.Beatmaps; using osu.Game.Rulesets.Replays.Legacy; -using osu.Game.Rulesets.Scoring; namespace osu.Game.Rulesets.Replays.Types { + /// + /// A type of which can be converted from a . + /// public interface IConvertibleReplayFrame { - void ConvertFrom(LegacyReplayFrame legacyFrame, Score score, Beatmap beatmap); + /// + /// Populates this using values from a . + /// + /// The to extract values from. + /// The score. + /// The beatmap. + void ConvertFrom(LegacyReplayFrame legacyFrame, Beatmap beatmap); } } diff --git a/osu.Game/Rulesets/Scoring/Legacy/LegacyScoreParser.cs b/osu.Game/Rulesets/Scoring/Legacy/LegacyScoreParser.cs index ea36b818b3..998d2aa0b7 100644 --- a/osu.Game/Rulesets/Scoring/Legacy/LegacyScoreParser.cs +++ b/osu.Game/Rulesets/Scoring/Legacy/LegacyScoreParser.cs @@ -24,7 +24,6 @@ namespace osu.Game.Rulesets.Scoring.Legacy } private Beatmap currentBeatmap; - private Score currentScore; private Ruleset currentRuleset; public Score Parse(Stream stream) @@ -33,7 +32,7 @@ namespace osu.Game.Rulesets.Scoring.Legacy using (SerializationReader sr = new SerializationReader(stream)) { - currentScore = score = new Score { Ruleset = rulesets.GetRuleset(sr.ReadByte()) }; + score = new Score { Ruleset = rulesets.GetRuleset(sr.ReadByte()) }; currentRuleset = score.Ruleset.CreateInstance(); /* score.Pass = true;*/ @@ -142,7 +141,7 @@ namespace osu.Game.Rulesets.Scoring.Legacy var convertible = currentRuleset.CreateConvertibleReplayFrame(); if (convertible == null) throw new InvalidOperationException($"Legacy replay cannot be converted for the ruleset: {currentRuleset.Description}"); - convertible.ConvertFrom(legacyFrame, currentScore, currentBeatmap); + convertible.ConvertFrom(legacyFrame, currentBeatmap); return (ReplayFrame)convertible; } From 19911193cf35bbb89e00297203c310f95595352b Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Thu, 1 Mar 2018 01:39:33 +0900 Subject: [PATCH 222/544] Minify LegacyReplayFrame --- .../Replays/Legacy/LegacyReplayFrame.cs | 32 +++---------------- 1 file changed, 4 insertions(+), 28 deletions(-) diff --git a/osu.Game/Rulesets/Replays/Legacy/LegacyReplayFrame.cs b/osu.Game/Rulesets/Replays/Legacy/LegacyReplayFrame.cs index 76709cbf21..945cb95e79 100644 --- a/osu.Game/Rulesets/Replays/Legacy/LegacyReplayFrame.cs +++ b/osu.Game/Rulesets/Replays/Legacy/LegacyReplayFrame.cs @@ -15,34 +15,10 @@ namespace osu.Game.Rulesets.Replays.Legacy public bool MouseLeft => MouseLeft1 || MouseLeft2; public bool MouseRight => MouseRight1 || MouseRight2; - public bool MouseLeft1 - { - get { return (ButtonState & ReplayButtonState.Left1) > 0; } - set { setButtonState(ReplayButtonState.Left1, value); } - } - public bool MouseRight1 - { - get { return (ButtonState & ReplayButtonState.Right1) > 0; } - set { setButtonState(ReplayButtonState.Right1, value); } - } - public bool MouseLeft2 - { - get { return (ButtonState & ReplayButtonState.Left2) > 0; } - set { setButtonState(ReplayButtonState.Left2, value); } - } - public bool MouseRight2 - { - get { return (ButtonState & ReplayButtonState.Right2) > 0; } - set { setButtonState(ReplayButtonState.Right2, value); } - } - - private void setButtonState(ReplayButtonState singleButton, bool pressed) - { - if (pressed) - ButtonState |= singleButton; - else - ButtonState &= ~singleButton; - } + public bool MouseLeft1 => (ButtonState & ReplayButtonState.Left1) > 0; + public bool MouseRight1 => (ButtonState & ReplayButtonState.Right1) > 0; + public bool MouseLeft2 => (ButtonState & ReplayButtonState.Left2) > 0; + public bool MouseRight2 => (ButtonState & ReplayButtonState.Right2) > 0; public ReplayButtonState ButtonState; From fb16c3db877ad71cfaf6f81243e58aac27d42005 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Thu, 1 Mar 2018 01:40:35 +0900 Subject: [PATCH 223/544] Privatise CurrentTime's setter --- osu.Game/Rulesets/Replays/FramedReplayInputHandler.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game/Rulesets/Replays/FramedReplayInputHandler.cs b/osu.Game/Rulesets/Replays/FramedReplayInputHandler.cs index 80fd099f2f..5ffd67423e 100644 --- a/osu.Game/Rulesets/Replays/FramedReplayInputHandler.cs +++ b/osu.Game/Rulesets/Replays/FramedReplayInputHandler.cs @@ -53,7 +53,7 @@ namespace osu.Game.Rulesets.Replays private const double sixty_frame_time = 1000.0 / 60; - protected double CurrentTime; + protected double CurrentTime { get; private set; } private int currentDirection; /// From 195b6642e62438ad3c08b02d8df5b4e69b84dc14 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Thu, 1 Mar 2018 01:45:41 +0900 Subject: [PATCH 224/544] Reimplement important frames --- .../Replays/CatchFramedReplayInputHandler.cs | 2 ++ .../Replays/ManiaFramedReplayInputHandler.cs | 3 +++ osu.Game.Rulesets.Osu/Replays/OsuReplayInputHandler.cs | 3 +++ .../Replays/TaikoFramedReplayInputHandler.cs | 3 +++ 4 files changed, 11 insertions(+) diff --git a/osu.Game.Rulesets.Catch/Replays/CatchFramedReplayInputHandler.cs b/osu.Game.Rulesets.Catch/Replays/CatchFramedReplayInputHandler.cs index 795a859f5f..9c0d05d4cd 100644 --- a/osu.Game.Rulesets.Catch/Replays/CatchFramedReplayInputHandler.cs +++ b/osu.Game.Rulesets.Catch/Replays/CatchFramedReplayInputHandler.cs @@ -15,6 +15,8 @@ namespace osu.Game.Rulesets.Catch.Replays { } + protected override bool IsImportant(CatchReplayFrame frame) => frame.X > 0; + protected float? Position { get diff --git a/osu.Game.Rulesets.Mania/Replays/ManiaFramedReplayInputHandler.cs b/osu.Game.Rulesets.Mania/Replays/ManiaFramedReplayInputHandler.cs index fb9ae37831..3541561418 100644 --- a/osu.Game.Rulesets.Mania/Replays/ManiaFramedReplayInputHandler.cs +++ b/osu.Game.Rulesets.Mania/Replays/ManiaFramedReplayInputHandler.cs @@ -2,6 +2,7 @@ // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using System.Collections.Generic; +using System.Linq; using osu.Framework.Input; using osu.Game.Rulesets.Replays; @@ -14,6 +15,8 @@ namespace osu.Game.Rulesets.Mania.Replays { } + protected override bool IsImportant(ManiaReplayFrame frame) => frame.Actions.Any(); + public override List GetPendingStates() => new List { new ReplayState { PressedActions = CurrentFrame.Actions } }; } } diff --git a/osu.Game.Rulesets.Osu/Replays/OsuReplayInputHandler.cs b/osu.Game.Rulesets.Osu/Replays/OsuReplayInputHandler.cs index aef02dad7e..0a61b0f199 100644 --- a/osu.Game.Rulesets.Osu/Replays/OsuReplayInputHandler.cs +++ b/osu.Game.Rulesets.Osu/Replays/OsuReplayInputHandler.cs @@ -2,6 +2,7 @@ // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using System.Collections.Generic; +using System.Linq; using osu.Framework.Input; using osu.Framework.MathUtils; using osu.Game.Rulesets.Replays; @@ -16,6 +17,8 @@ namespace osu.Game.Rulesets.Osu.Replays { } + protected override bool IsImportant(OsuReplayFrame frame) => frame.Actions.Any(); + protected Vector2? Position { get diff --git a/osu.Game.Rulesets.Taiko/Replays/TaikoFramedReplayInputHandler.cs b/osu.Game.Rulesets.Taiko/Replays/TaikoFramedReplayInputHandler.cs index 1c525dcda0..c80bddc304 100644 --- a/osu.Game.Rulesets.Taiko/Replays/TaikoFramedReplayInputHandler.cs +++ b/osu.Game.Rulesets.Taiko/Replays/TaikoFramedReplayInputHandler.cs @@ -3,6 +3,7 @@ using osu.Game.Rulesets.Replays; using System.Collections.Generic; +using System.Linq; using osu.Framework.Input; namespace osu.Game.Rulesets.Taiko.Replays @@ -14,6 +15,8 @@ namespace osu.Game.Rulesets.Taiko.Replays { } + protected override bool IsImportant(TaikoReplayFrame frame) => frame.Actions.Any(); + public override List GetPendingStates() => new List { new ReplayState { PressedActions = CurrentFrame.Actions } }; } } From a24e8b02e806618a0209e0611890567cd71f3620 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Thu, 1 Mar 2018 01:48:13 +0900 Subject: [PATCH 225/544] Rename catch frame's X to Position --- .../Replays/CatchFramedReplayInputHandler.cs | 8 ++++---- osu.Game.Rulesets.Catch/Replays/CatchReplayFrame.cs | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/osu.Game.Rulesets.Catch/Replays/CatchFramedReplayInputHandler.cs b/osu.Game.Rulesets.Catch/Replays/CatchFramedReplayInputHandler.cs index 9c0d05d4cd..9c9b06fcea 100644 --- a/osu.Game.Rulesets.Catch/Replays/CatchFramedReplayInputHandler.cs +++ b/osu.Game.Rulesets.Catch/Replays/CatchFramedReplayInputHandler.cs @@ -15,7 +15,7 @@ namespace osu.Game.Rulesets.Catch.Replays { } - protected override bool IsImportant(CatchReplayFrame frame) => frame.X > 0; + protected override bool IsImportant(CatchReplayFrame frame) => frame.Position > 0; protected float? Position { @@ -24,7 +24,7 @@ namespace osu.Game.Rulesets.Catch.Replays if (!HasFrames) return null; - return Interpolation.ValueAt(CurrentTime, CurrentFrame.X, NextFrame.X, CurrentFrame.Time, NextFrame.Time); + return Interpolation.ValueAt(CurrentTime, CurrentFrame.Position, NextFrame.Position, CurrentFrame.Time, NextFrame.Time); } } @@ -37,9 +37,9 @@ namespace osu.Game.Rulesets.Catch.Replays if (CurrentFrame.Dashing) actions.Add(CatchAction.Dash); - if (Position.Value > CurrentFrame.X) + if (Position.Value > CurrentFrame.Position) actions.Add(CatchAction.MoveRight); - else if (Position.Value < CurrentFrame.X) + else if (Position.Value < CurrentFrame.Position) actions.Add(CatchAction.MoveLeft); return new List diff --git a/osu.Game.Rulesets.Catch/Replays/CatchReplayFrame.cs b/osu.Game.Rulesets.Catch/Replays/CatchReplayFrame.cs index d45223a1cb..3b2d0d58b3 100644 --- a/osu.Game.Rulesets.Catch/Replays/CatchReplayFrame.cs +++ b/osu.Game.Rulesets.Catch/Replays/CatchReplayFrame.cs @@ -10,24 +10,24 @@ namespace osu.Game.Rulesets.Catch.Replays { public class CatchReplayFrame : ReplayFrame, IConvertibleReplayFrame { - public float X; + public float Position; public bool Dashing; public CatchReplayFrame() { } - public CatchReplayFrame(double time, float? x = null, bool dashing = false) + public CatchReplayFrame(double time, float? position = null, bool dashing = false) : base(time) { - X = x ?? -1; + Position = position ?? -1; Dashing = dashing; } public void ConvertFrom(LegacyReplayFrame legacyFrame, Beatmap beatmap) { // Todo: This needs to be re-scaled - X = legacyFrame.Position.X; + Position = legacyFrame.Position.X; Dashing = legacyFrame.ButtonState == ReplayButtonState.Left1; } } From e869f7d05be3bd0eb1e2de5b03e67c9c96ceca2e Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Thu, 1 Mar 2018 02:09:23 +0900 Subject: [PATCH 226/544] Fix converted frames not getting time values --- osu.Game/Rulesets/Scoring/Legacy/LegacyScoreParser.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/osu.Game/Rulesets/Scoring/Legacy/LegacyScoreParser.cs b/osu.Game/Rulesets/Scoring/Legacy/LegacyScoreParser.cs index 998d2aa0b7..9ebb62a368 100644 --- a/osu.Game/Rulesets/Scoring/Legacy/LegacyScoreParser.cs +++ b/osu.Game/Rulesets/Scoring/Legacy/LegacyScoreParser.cs @@ -143,7 +143,10 @@ namespace osu.Game.Rulesets.Scoring.Legacy throw new InvalidOperationException($"Legacy replay cannot be converted for the ruleset: {currentRuleset.Description}"); convertible.ConvertFrom(legacyFrame, currentBeatmap); - return (ReplayFrame)convertible; + var frame = (ReplayFrame)convertible; + frame.Time = legacyFrame.Time; + + return frame; } } } From c783a19e41b431763eec7e725be5f97df78f0e32 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Thu, 1 Mar 2018 02:09:35 +0900 Subject: [PATCH 227/544] Fix mania frame conversion not working at all --- osu.Game.Rulesets.Mania/Replays/ManiaReplayFrame.cs | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/osu.Game.Rulesets.Mania/Replays/ManiaReplayFrame.cs b/osu.Game.Rulesets.Mania/Replays/ManiaReplayFrame.cs index 9e773d0e24..9990f89b99 100644 --- a/osu.Game.Rulesets.Mania/Replays/ManiaReplayFrame.cs +++ b/osu.Game.Rulesets.Mania/Replays/ManiaReplayFrame.cs @@ -41,12 +41,15 @@ namespace osu.Game.Rulesets.Mania.Replays int counter = 0; while (activeColumns > 0) { - Actions.Add((activeColumns & 1) > 0 ? specialAction : normalAction); + var isSpecial = stage.IsSpecialColumn(counter); - if (stage.IsSpecialColumn(counter)) - normalAction++; - else + if ((activeColumns & 1) > 0) + Actions.Add(isSpecial ? specialAction : normalAction); + + if (isSpecial) specialAction++; + else + normalAction++; counter++; activeColumns >>= 1; From e62fab6cc21321d93e212940b691a873d5d01692 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Thu, 1 Mar 2018 14:34:31 +0900 Subject: [PATCH 228/544] Fix overlay positions/sizes due to sliders now being fixed --- .../Selection/Overlays/SliderCircleOverlay.cs | 16 +++++++++++++--- .../Layers/Selection/Overlays/SliderOverlay.cs | 8 +++++++- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Edit/Layers/Selection/Overlays/SliderCircleOverlay.cs b/osu.Game.Rulesets.Osu/Edit/Layers/Selection/Overlays/SliderCircleOverlay.cs index b3bf25fe67..3c7f8a067b 100644 --- a/osu.Game.Rulesets.Osu/Edit/Layers/Selection/Overlays/SliderCircleOverlay.cs +++ b/osu.Game.Rulesets.Osu/Edit/Layers/Selection/Overlays/SliderCircleOverlay.cs @@ -5,7 +5,6 @@ using osu.Framework.Allocation; using osu.Framework.Graphics; using osu.Game.Graphics; using osu.Game.Rulesets.Edit.Layers.Selection; -using osu.Game.Rulesets.Osu.Objects; using osu.Game.Rulesets.Osu.Objects.Drawables; using osu.Game.Rulesets.Osu.Objects.Drawables.Pieces; using OpenTK; @@ -15,18 +14,22 @@ namespace osu.Game.Rulesets.Osu.Edit.Layers.Selection.Overlays public class SliderCircleOverlay : HitObjectOverlay { public SliderCircleOverlay(DrawableHitCircle sliderHead, DrawableSlider slider) - : this(sliderHead, ((Slider)slider.HitObject).StackedPositionAt(0), slider) + : this(sliderHead, sliderHead.Position, slider) { } public SliderCircleOverlay(DrawableSliderTail sliderTail, DrawableSlider slider) - : this(sliderTail, ((Slider)slider.HitObject).Curve.PositionAt(1) + slider.HitObject.StackOffset, slider) + : this(sliderTail, sliderTail.Position, slider) { } + private readonly DrawableOsuHitObject hitObject; + private SliderCircleOverlay(DrawableOsuHitObject hitObject, Vector2 position, DrawableSlider slider) : base(hitObject) { + this.hitObject = hitObject; + Origin = Anchor.Centre; Position = position; @@ -41,5 +44,12 @@ namespace osu.Game.Rulesets.Osu.Edit.Layers.Selection.Overlays { Colour = colours.Yellow; } + + protected override void Update() + { + base.Update(); + + RelativeAnchorPosition = hitObject.RelativeAnchorPosition; + } } } diff --git a/osu.Game.Rulesets.Osu/Edit/Layers/Selection/Overlays/SliderOverlay.cs b/osu.Game.Rulesets.Osu/Edit/Layers/Selection/Overlays/SliderOverlay.cs index 4de44a7ae1..a035a683e9 100644 --- a/osu.Game.Rulesets.Osu/Edit/Layers/Selection/Overlays/SliderOverlay.cs +++ b/osu.Game.Rulesets.Osu/Edit/Layers/Selection/Overlays/SliderOverlay.cs @@ -15,10 +15,13 @@ namespace osu.Game.Rulesets.Osu.Edit.Layers.Selection.Overlays public class SliderOverlay : HitObjectOverlay { private readonly SliderBody body; + private readonly DrawableSlider slider; public SliderOverlay(DrawableSlider slider) : base(slider) { + this.slider = slider; + var obj = (Slider)slider.HitObject; InternalChildren = new Drawable[] @@ -26,7 +29,6 @@ namespace osu.Game.Rulesets.Osu.Edit.Layers.Selection.Overlays body = new SliderBody(obj) { AccentColour = Color4.Transparent, - Position = obj.StackedPosition, PathWidth = obj.Scale * 64 }, new SliderCircleOverlay(slider.HeadCircle, slider), @@ -44,6 +46,10 @@ namespace osu.Game.Rulesets.Osu.Edit.Layers.Selection.Overlays { base.Update(); + Position = slider.Position; + Size = slider.Size; + OriginPosition = slider.OriginPosition; + // Need to cause one update body.UpdateProgress(0); } From 7d7a3bab0e86251710f0825c602719805f742f9b Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Thu, 1 Mar 2018 14:43:45 +0900 Subject: [PATCH 229/544] Fix catch legacy replay positions not being relative to playfield size --- osu.Game.Rulesets.Catch/Replays/CatchReplayFrame.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/osu.Game.Rulesets.Catch/Replays/CatchReplayFrame.cs b/osu.Game.Rulesets.Catch/Replays/CatchReplayFrame.cs index 3b2d0d58b3..b444b0d7ba 100644 --- a/osu.Game.Rulesets.Catch/Replays/CatchReplayFrame.cs +++ b/osu.Game.Rulesets.Catch/Replays/CatchReplayFrame.cs @@ -2,6 +2,7 @@ // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using osu.Game.Beatmaps; +using osu.Game.Rulesets.Catch.UI; using osu.Game.Rulesets.Replays; using osu.Game.Rulesets.Replays.Legacy; using osu.Game.Rulesets.Replays.Types; @@ -26,8 +27,7 @@ namespace osu.Game.Rulesets.Catch.Replays public void ConvertFrom(LegacyReplayFrame legacyFrame, Beatmap beatmap) { - // Todo: This needs to be re-scaled - Position = legacyFrame.Position.X; + Position = legacyFrame.Position.X / CatchPlayfield.BASE_WIDTH; Dashing = legacyFrame.ButtonState == ReplayButtonState.Left1; } } From 6dc9411a90e63d72e76d9f0f20aa0fa1c9d378ee Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 1 Mar 2018 16:01:32 +0900 Subject: [PATCH 230/544] Don't use BufferedContainer for OsuLogo Minor performance improvement. Not sure why this was done but it's not required any more. --- osu.Game/Screens/Menu/OsuLogo.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game/Screens/Menu/OsuLogo.cs b/osu.Game/Screens/Menu/OsuLogo.cs index b91ff0d74b..3fcb885655 100644 --- a/osu.Game/Screens/Menu/OsuLogo.cs +++ b/osu.Game/Screens/Menu/OsuLogo.cs @@ -143,7 +143,7 @@ namespace osu.Game.Screens.Menu Alpha = 0.5f, Size = new Vector2(0.96f) }, - new BufferedContainer + new Container { AutoSizeAxes = Axes.Both, Children = new Drawable[] From 8cfb1193836a35fa2d52a43d97b27ad2bc5239eb Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Thu, 1 Mar 2018 16:17:01 +0900 Subject: [PATCH 231/544] Fix FastRandom using uint instead of int for NextDouble() --- osu.Game.Rulesets.Mania/MathUtils/FastRandom.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/osu.Game.Rulesets.Mania/MathUtils/FastRandom.cs b/osu.Game.Rulesets.Mania/MathUtils/FastRandom.cs index e14473c478..c8277af415 100644 --- a/osu.Game.Rulesets.Mania/MathUtils/FastRandom.cs +++ b/osu.Game.Rulesets.Mania/MathUtils/FastRandom.cs @@ -10,7 +10,7 @@ namespace osu.Game.Rulesets.Mania.MathUtils /// internal class FastRandom { - private const double uint_to_real = 1.0 / (uint.MaxValue + 1.0); + private const double int_to_real = 1.0 / (int.MaxValue + 1.0); private const uint int_mask = 0x7FFFFFFF; private const uint y = 842502087; private const uint z = 3579807591; @@ -65,7 +65,7 @@ namespace osu.Game.Rulesets.Mania.MathUtils /// Generates a random double value within the range [0, 1). /// /// The random value. - public double NextDouble() => uint_to_real * NextUInt(); + public double NextDouble() => int_to_real * Next(); private uint bitBuffer; private int bitIndex = 32; From 0704d823a954402522cb2d3a7782a75e726680ae Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 1 Mar 2018 22:02:53 +0900 Subject: [PATCH 232/544] Fix slider selection point not being set to new origin --- osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs index fd944dbdae..f715ed075c 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs @@ -171,7 +171,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables public override bool ReceiveMouseInputAt(Vector2 screenSpacePos) => Body.ReceiveMouseInputAt(screenSpacePos); - public override Vector2 SelectionPoint => ToScreenSpace(Body.Position); + public override Vector2 SelectionPoint => ToScreenSpace(OriginPosition); public override Quad SelectionQuad => Body.PathDrawQuad; } } From 49b24c2bbf08b6f2431db7a051cda63e58783754 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Fri, 2 Mar 2018 00:19:09 +0900 Subject: [PATCH 233/544] Fix HR not properly applying to sliders --- osu.Game.Rulesets.Osu/Mods/OsuModHardRock.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/osu.Game.Rulesets.Osu/Mods/OsuModHardRock.cs b/osu.Game.Rulesets.Osu/Mods/OsuModHardRock.cs index dfbe9ad021..bd875c1d90 100644 --- a/osu.Game.Rulesets.Osu/Mods/OsuModHardRock.cs +++ b/osu.Game.Rulesets.Osu/Mods/OsuModHardRock.cs @@ -22,8 +22,11 @@ namespace osu.Game.Rulesets.Osu.Mods if (slider == null) return; + slider.HeadCircle.Position = new Vector2(slider.HeadCircle.Position.X, OsuPlayfield.BASE_SIZE.Y - slider.HeadCircle.Position.Y); + slider.TailCircle.Position = new Vector2(slider.TailCircle.Position.X, OsuPlayfield.BASE_SIZE.Y - slider.TailCircle.Position.Y); + var newControlPoints = new List(); - slider.ControlPoints.ForEach(c => newControlPoints.Add(new Vector2(c.X, OsuPlayfield.BASE_SIZE.Y - c.Y))); + slider.ControlPoints.ForEach(c => newControlPoints.Add(new Vector2(c.X, -c.Y))); slider.ControlPoints = newControlPoints; slider.Curve?.Calculate(); // Recalculate the slider curve From cb39a88c5192bf353199728542b0c1c36ae8e95b Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Fri, 2 Mar 2018 00:25:14 +0900 Subject: [PATCH 234/544] Fix HR not affecting slider repeats and ticks --- osu.Game.Rulesets.Osu/Mods/OsuModHardRock.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/osu.Game.Rulesets.Osu/Mods/OsuModHardRock.cs b/osu.Game.Rulesets.Osu/Mods/OsuModHardRock.cs index bd875c1d90..29bf3e248d 100644 --- a/osu.Game.Rulesets.Osu/Mods/OsuModHardRock.cs +++ b/osu.Game.Rulesets.Osu/Mods/OsuModHardRock.cs @@ -2,6 +2,8 @@ // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using System.Collections.Generic; +using System.Linq; +using osu.Framework.Extensions.IEnumerableExtensions; using osu.Game.Rulesets.Mods; using osu.Game.Rulesets.Osu.Objects; using osu.Game.Rulesets.Osu.UI; @@ -25,6 +27,9 @@ namespace osu.Game.Rulesets.Osu.Mods slider.HeadCircle.Position = new Vector2(slider.HeadCircle.Position.X, OsuPlayfield.BASE_SIZE.Y - slider.HeadCircle.Position.Y); slider.TailCircle.Position = new Vector2(slider.TailCircle.Position.X, OsuPlayfield.BASE_SIZE.Y - slider.TailCircle.Position.Y); + slider.NestedHitObjects.OfType().ForEach(h => h.Position = new Vector2(h.Position.X, OsuPlayfield.BASE_SIZE.Y - h.Position.Y)); + slider.NestedHitObjects.OfType().ForEach(h => h.Position = new Vector2(h.Position.X, OsuPlayfield.BASE_SIZE.Y - h.Position.Y)); + var newControlPoints = new List(); slider.ControlPoints.ForEach(c => newControlPoints.Add(new Vector2(c.X, -c.Y))); From 797d03a65f295c528b1c86c5a97e33f75e19c674 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Fri, 2 Mar 2018 00:07:02 +0900 Subject: [PATCH 235/544] Implement basic structure for beatmap conversion testing --- .../Beatmaps/875945-expected-conversion.json | 1 + .../Resources/Testing/Beatmaps/875945.osu | 1824 +++++++++++++++++ .../Tests/OsuBeatmapConversionTest.cs | 70 + .../osu.Game.Rulesets.Osu.csproj | 8 + osu.Game/Beatmaps/BeatmapConverter.cs | 33 +- osu.Game/Properties/AssemblyInfo.cs | 5 + .../Tests/Beatmaps/BeatmapConversionTest.cs | 139 ++ osu.Game/osu.Game.csproj | 3 +- 8 files changed, 2080 insertions(+), 3 deletions(-) create mode 100644 osu.Game.Rulesets.Osu/Resources/Testing/Beatmaps/875945-expected-conversion.json create mode 100644 osu.Game.Rulesets.Osu/Resources/Testing/Beatmaps/875945.osu create mode 100644 osu.Game.Rulesets.Osu/Tests/OsuBeatmapConversionTest.cs create mode 100644 osu.Game/Tests/Beatmaps/BeatmapConversionTest.cs diff --git a/osu.Game.Rulesets.Osu/Resources/Testing/Beatmaps/875945-expected-conversion.json b/osu.Game.Rulesets.Osu/Resources/Testing/Beatmaps/875945-expected-conversion.json new file mode 100644 index 0000000000..354c238fb2 --- /dev/null +++ b/osu.Game.Rulesets.Osu/Resources/Testing/Beatmaps/875945-expected-conversion.json @@ -0,0 +1 @@ +{"Mappings":[{"StartTime":6590.0,"Objects":[{"StartTime":6590.0,"EndTime":8320.0,"StartX":88.0,"StartY":104.0,"EndX":420.097382,"EndY":110.315109}]},{"StartTime":8436.0,"Objects":[{"StartTime":8436.0,"EndTime":10166.0,"StartX":396.0,"StartY":213.0,"EndX":376.979553,"EndY":172.796143}]},{"StartTime":10282.0,"Objects":[{"StartTime":10282.0,"EndTime":12012.0,"StartX":472.0,"StartY":220.0,"EndX":222.380341,"EndY":303.344238}]},{"StartTime":12128.0,"Objects":[{"StartTime":12128.0,"EndTime":13858.0,"StartX":277.0,"StartY":200.0,"EndX":275.41626,"EndY":242.620255}]},{"StartTime":13974.0,"Objects":[{"StartTime":13974.0,"EndTime":15704.0,"StartX":224.0,"StartY":141.0,"EndX":473.000916,"EndY":224.508286}]},{"StartTime":15820.0,"Objects":[{"StartTime":15820.0,"EndTime":17550.0,"StartX":496.0,"StartY":301.0,"EndX":155.424408,"EndY":355.8156}]},{"StartTime":17666.0,"Objects":[{"StartTime":17666.0,"EndTime":19512.0,"StartX":76.0,"StartY":352.0,"EndX":151.558578,"EndY":193.103043}]},{"StartTime":19628.0,"Objects":[{"StartTime":19628.0,"EndTime":21128.0,"StartX":256.0,"StartY":192.0,"EndX":256.0,"EndY":192.0}]},{"StartTime":21359.0,"Objects":[{"StartTime":21359.0,"EndTime":21820.0,"StartX":213.0,"StartY":117.0,"EndX":119.631989,"EndY":121.966385}]},{"StartTime":22282.0,"Objects":[{"StartTime":22282.0,"EndTime":22743.0,"StartX":300.0,"StartY":161.0,"EndX":393.30603,"EndY":154.980255}]},{"StartTime":23205.0,"Objects":[{"StartTime":23205.0,"EndTime":23666.0,"StartX":233.0,"StartY":38.0,"EndX":139.631989,"EndY":42.9663849}]},{"StartTime":24128.0,"Objects":[{"StartTime":24128.0,"EndTime":24589.0,"StartX":280.0,"StartY":240.0,"EndX":373.30603,"EndY":233.980255}]},{"StartTime":25051.0,"Objects":[{"StartTime":25051.0,"EndTime":26666.0,"StartX":509.0,"StartY":22.0,"EndX":212.757538,"EndY":116.37236}]},{"StartTime":26897.0,"Objects":[{"StartTime":26897.0,"EndTime":28281.0,"StartX":139.0,"StartY":43.0,"EndX":118.957672,"EndY":293.130981}]},{"StartTime":28743.0,"Objects":[{"StartTime":28743.0,"EndTime":29204.0,"StartX":46.0,"StartY":366.0,"EndX":139.365158,"EndY":371.019623}]},{"StartTime":29666.0,"Objects":[{"StartTime":29666.0,"EndTime":30127.0,"StartX":280.0,"StartY":175.0,"EndX":186.68988,"EndY":169.044037}]},{"StartTime":30589.0,"Objects":[{"StartTime":30589.0,"EndTime":31050.0,"StartX":26.0,"StartY":287.0,"EndX":119.365158,"EndY":292.019623}]},{"StartTime":31513.0,"Objects":[{"StartTime":31513.0,"EndTime":31974.0,"StartX":300.0,"StartY":254.0,"EndX":206.68988,"EndY":248.044037}]},{"StartTime":32436.0,"Objects":[{"StartTime":32436.0,"EndTime":34282.0,"StartX":0.0,"StartY":57.0,"EndX":334.7409,"EndY":178.619827}]},{"StartTime":35205.0,"Objects":[{"StartTime":35205.0,"EndTime":36012.0,"StartX":334.0,"StartY":178.0,"EndX":316.137024,"EndY":340.647034}]},{"StartTime":36128.0,"Objects":[{"StartTime":36128.0,"EndTime":36474.0,"StartX":396.0,"StartY":313.0,"EndX":455.6553,"EndY":284.508118}]},{"StartTime":36590.0,"Objects":[{"StartTime":36590.0,"EndTime":39359.0,"StartX":508.0,"StartY":233.0,"EndX":10.77596,"EndY":46.88111}]},{"StartTime":39820.0,"Objects":[{"StartTime":39820.0,"EndTime":40281.0,"StartX":10.0,"StartY":47.0,"EndX":103.116005,"EndY":38.53491}]},{"StartTime":40743.0,"Objects":[{"StartTime":40743.0,"EndTime":41204.0,"StartX":233.0,"StartY":130.0,"EndX":139.884,"EndY":138.465088}]},{"StartTime":41666.0,"Objects":[{"StartTime":41666.0,"EndTime":42589.0,"StartX":268.0,"StartY":229.0,"EndX":454.201965,"EndY":211.742249}]},{"StartTime":43051.0,"Objects":[{"StartTime":43051.0,"EndTime":43281.0,"StartX":271.0,"StartY":366.0,"EndX":253.544708,"EndY":323.529846}]},{"StartTime":43513.0,"Objects":[{"StartTime":43513.0,"EndTime":43513.0,"StartX":268.0,"StartY":229.0,"EndX":268.0,"EndY":229.0}]},{"StartTime":43628.0,"Objects":[{"StartTime":43628.0,"EndTime":49051.0,"StartX":256.0,"StartY":192.0,"EndX":256.0,"EndY":192.0}]},{"StartTime":56435.0,"Objects":[{"StartTime":56435.0,"EndTime":56665.0,"StartX":45.0,"StartY":136.0,"EndX":218.481384,"EndY":87.55199}]},{"StartTime":56781.0,"Objects":[{"StartTime":56781.0,"EndTime":56781.0,"StartX":214.0,"StartY":252.0,"EndX":214.0,"EndY":252.0}]},{"StartTime":56897.0,"Objects":[{"StartTime":56897.0,"EndTime":57012.0,"StartX":214.0,"StartY":252.0,"EndX":192.823029,"EndY":161.0437}]},{"StartTime":57127.0,"Objects":[{"StartTime":57127.0,"EndTime":57242.0,"StartX":336.0,"StartY":48.0,"EndX":313.87915,"EndY":138.7325}]},{"StartTime":57358.0,"Objects":[{"StartTime":57358.0,"EndTime":57473.0,"StartX":319.0,"StartY":308.0,"EndX":406.663483,"EndY":309.0902}]},{"StartTime":57589.0,"Objects":[{"StartTime":57589.0,"EndTime":57704.0,"StartX":214.0,"StartY":252.0,"EndX":126.336525,"EndY":250.90979}]},{"StartTime":57820.0,"Objects":[{"StartTime":57820.0,"EndTime":57820.0,"StartX":58.0,"StartY":340.0,"EndX":58.0,"EndY":340.0}]},{"StartTime":57935.0,"Objects":[{"StartTime":57935.0,"EndTime":57935.0,"StartX":165.0,"StartY":370.0,"EndX":165.0,"EndY":370.0}]},{"StartTime":58051.0,"Objects":[{"StartTime":58051.0,"EndTime":58051.0,"StartX":263.0,"StartY":315.0,"EndX":263.0,"EndY":315.0}]},{"StartTime":58166.0,"Objects":[{"StartTime":58166.0,"EndTime":58166.0,"StartX":370.0,"StartY":345.0,"EndX":370.0,"EndY":345.0}]},{"StartTime":58224.0,"Objects":[{"StartTime":58224.0,"EndTime":58224.0,"StartX":370.0,"StartY":345.0,"EndX":370.0,"EndY":345.0}]},{"StartTime":58281.0,"Objects":[{"StartTime":58281.0,"EndTime":58511.0,"StartX":370.0,"StartY":345.0,"EndX":426.762177,"EndY":189.001526}]},{"StartTime":58627.0,"Objects":[{"StartTime":58627.0,"EndTime":58627.0,"StartX":507.0,"StartY":110.0,"EndX":507.0,"EndY":110.0}]},{"StartTime":58685.0,"Objects":[{"StartTime":58685.0,"EndTime":58685.0,"StartX":507.0,"StartY":110.0,"EndX":507.0,"EndY":110.0}]},{"StartTime":58743.0,"Objects":[{"StartTime":58743.0,"EndTime":58858.0,"StartX":507.0,"StartY":110.0,"EndX":493.172424,"EndY":17.5281219}]},{"StartTime":58974.0,"Objects":[{"StartTime":58974.0,"EndTime":59089.0,"StartX":412.0,"StartY":96.0,"EndX":425.827576,"EndY":188.471878}]},{"StartTime":59204.0,"Objects":[{"StartTime":59204.0,"EndTime":59319.0,"StartX":370.0,"StartY":344.0,"EndX":281.006439,"EndY":337.4498}]},{"StartTime":59435.0,"Objects":[{"StartTime":59435.0,"EndTime":59550.0,"StartX":273.0,"StartY":211.0,"EndX":330.438354,"EndY":279.7563}]},{"StartTime":59666.0,"Objects":[{"StartTime":59666.0,"EndTime":59781.0,"StartX":349.0,"StartY":206.0,"EndX":356.9348,"EndY":117.1017}]},{"StartTime":59897.0,"Objects":[{"StartTime":59897.0,"EndTime":60012.0,"StartX":482.0,"StartY":107.0,"EndX":414.039063,"EndY":164.9039}]},{"StartTime":60127.0,"Objects":[{"StartTime":60127.0,"EndTime":60357.0,"StartX":144.0,"StartY":273.0,"EndX":330.869141,"EndY":279.9951}]},{"StartTime":60474.0,"Objects":[{"StartTime":60474.0,"EndTime":60704.0,"StartX":349.0,"StartY":206.0,"EndX":162.130859,"EndY":199.0049}]},{"StartTime":60820.0,"Objects":[{"StartTime":60820.0,"EndTime":60935.0,"StartX":85.0,"StartY":115.0,"EndX":178.415466,"EndY":118.975128}]},{"StartTime":61051.0,"Objects":[{"StartTime":61051.0,"EndTime":61166.0,"StartX":126.0,"StartY":347.0,"EndX":66.6307449,"EndY":282.304321}]},{"StartTime":61281.0,"Objects":[{"StartTime":61281.0,"EndTime":61396.0,"StartX":162.0,"StartY":199.0,"EndX":221.369263,"EndY":263.695679}]},{"StartTime":61512.0,"Objects":[{"StartTime":61512.0,"EndTime":61627.0,"StartX":203.0,"StartY":375.0,"EndX":296.284821,"EndY":368.660248}]},{"StartTime":61743.0,"Objects":[{"StartTime":61743.0,"EndTime":61858.0,"StartX":443.0,"StartY":285.0,"EndX":349.68988,"EndY":290.955963}]},{"StartTime":61916.0,"Objects":[{"StartTime":61916.0,"EndTime":61916.0,"StartX":329.0,"StartY":279.0,"EndX":329.0,"EndY":279.0}]},{"StartTime":61974.0,"Objects":[{"StartTime":61974.0,"EndTime":62204.0,"StartX":309.0,"StartY":266.0,"EndX":290.392822,"EndY":79.9280548}]},{"StartTime":62320.0,"Objects":[{"StartTime":62320.0,"EndTime":62550.0,"StartX":203.0,"StartY":118.0,"EndX":221.6072,"EndY":304.07196}]},{"StartTime":62666.0,"Objects":[{"StartTime":62666.0,"EndTime":63127.0,"StartX":133.0,"StartY":342.0,"EndX":118.0,"EndY":186.076859}]},{"StartTime":63358.0,"Objects":[{"StartTime":63358.0,"EndTime":63358.0,"StartX":285.0,"StartY":26.0,"EndX":285.0,"EndY":26.0}]},{"StartTime":63474.0,"Objects":[{"StartTime":63474.0,"EndTime":63474.0,"StartX":352.0,"StartY":117.0,"EndX":352.0,"EndY":117.0}]},{"StartTime":63589.0,"Objects":[{"StartTime":63589.0,"EndTime":63589.0,"StartX":265.0,"StartY":189.0,"EndX":265.0,"EndY":189.0}]},{"StartTime":63705.0,"Objects":[{"StartTime":63705.0,"EndTime":63705.0,"StartX":332.0,"StartY":280.0,"EndX":332.0,"EndY":280.0}]},{"StartTime":63820.0,"Objects":[{"StartTime":63820.0,"EndTime":63820.0,"StartX":474.0,"StartY":81.0,"EndX":474.0,"EndY":81.0}]},{"StartTime":63877.0,"Objects":[{"StartTime":63877.0,"EndTime":63877.0,"StartX":456.0,"StartY":83.0,"EndX":456.0,"EndY":83.0}]},{"StartTime":63935.0,"Objects":[{"StartTime":63935.0,"EndTime":63935.0,"StartX":437.0,"StartY":85.0,"EndX":437.0,"EndY":85.0}]},{"StartTime":63993.0,"Objects":[{"StartTime":63993.0,"EndTime":63993.0,"StartX":419.0,"StartY":88.0,"EndX":419.0,"EndY":88.0}]},{"StartTime":64051.0,"Objects":[{"StartTime":64051.0,"EndTime":64166.0,"StartX":400.0,"StartY":90.0,"EndX":307.5588,"EndY":75.96875}]},{"StartTime":64281.0,"Objects":[{"StartTime":64281.0,"EndTime":64281.0,"StartX":217.0,"StartY":50.0,"EndX":217.0,"EndY":50.0}]},{"StartTime":64338.0,"Objects":[{"StartTime":64338.0,"EndTime":64338.0,"StartX":219.0,"StartY":68.0,"EndX":219.0,"EndY":68.0}]},{"StartTime":64396.0,"Objects":[{"StartTime":64396.0,"EndTime":64396.0,"StartX":221.0,"StartY":87.0,"EndX":221.0,"EndY":87.0}]},{"StartTime":64454.0,"Objects":[{"StartTime":64454.0,"EndTime":64454.0,"StartX":224.0,"StartY":105.0,"EndX":224.0,"EndY":105.0}]},{"StartTime":64512.0,"Objects":[{"StartTime":64512.0,"EndTime":64627.0,"StartX":226.0,"StartY":124.0,"EndX":211.96875,"EndY":216.4412}]},{"StartTime":64743.0,"Objects":[{"StartTime":64743.0,"EndTime":64743.0,"StartX":186.0,"StartY":307.0,"EndX":186.0,"EndY":307.0}]},{"StartTime":64800.0,"Objects":[{"StartTime":64800.0,"EndTime":64800.0,"StartX":204.0,"StartY":305.0,"EndX":204.0,"EndY":305.0}]},{"StartTime":64858.0,"Objects":[{"StartTime":64858.0,"EndTime":64858.0,"StartX":223.0,"StartY":303.0,"EndX":223.0,"EndY":303.0}]},{"StartTime":64916.0,"Objects":[{"StartTime":64916.0,"EndTime":64916.0,"StartX":241.0,"StartY":300.0,"EndX":241.0,"EndY":300.0}]},{"StartTime":64974.0,"Objects":[{"StartTime":64974.0,"EndTime":65089.0,"StartX":260.0,"StartY":298.0,"EndX":352.4412,"EndY":312.03125}]},{"StartTime":65205.0,"Objects":[{"StartTime":65205.0,"EndTime":65205.0,"StartX":443.0,"StartY":338.0,"EndX":443.0,"EndY":338.0}]},{"StartTime":65262.0,"Objects":[{"StartTime":65262.0,"EndTime":65262.0,"StartX":441.0,"StartY":320.0,"EndX":441.0,"EndY":320.0}]},{"StartTime":65320.0,"Objects":[{"StartTime":65320.0,"EndTime":65320.0,"StartX":439.0,"StartY":301.0,"EndX":439.0,"EndY":301.0}]},{"StartTime":65378.0,"Objects":[{"StartTime":65378.0,"EndTime":65378.0,"StartX":436.0,"StartY":283.0,"EndX":436.0,"EndY":283.0}]},{"StartTime":65436.0,"Objects":[{"StartTime":65436.0,"EndTime":65551.0,"StartX":434.0,"StartY":264.0,"EndX":448.03125,"EndY":171.5588}]},{"StartTime":65666.0,"Objects":[{"StartTime":65666.0,"EndTime":65666.0,"StartX":474.0,"StartY":81.0,"EndX":474.0,"EndY":81.0}]},{"StartTime":65723.0,"Objects":[{"StartTime":65723.0,"EndTime":65723.0,"StartX":456.0,"StartY":83.0,"EndX":456.0,"EndY":83.0}]},{"StartTime":65781.0,"Objects":[{"StartTime":65781.0,"EndTime":65781.0,"StartX":437.0,"StartY":85.0,"EndX":437.0,"EndY":85.0}]},{"StartTime":65839.0,"Objects":[{"StartTime":65839.0,"EndTime":65839.0,"StartX":419.0,"StartY":88.0,"EndX":419.0,"EndY":88.0}]},{"StartTime":65897.0,"Objects":[{"StartTime":65897.0,"EndTime":66012.0,"StartX":400.0,"StartY":90.0,"EndX":307.5588,"EndY":75.96875}]},{"StartTime":66127.0,"Objects":[{"StartTime":66127.0,"EndTime":66127.0,"StartX":226.0,"StartY":124.0,"EndX":226.0,"EndY":124.0}]},{"StartTime":66184.0,"Objects":[{"StartTime":66184.0,"EndTime":66184.0,"StartX":208.0,"StartY":126.0,"EndX":208.0,"EndY":126.0}]},{"StartTime":66242.0,"Objects":[{"StartTime":66242.0,"EndTime":66242.0,"StartX":189.0,"StartY":128.0,"EndX":189.0,"EndY":128.0}]},{"StartTime":66300.0,"Objects":[{"StartTime":66300.0,"EndTime":66300.0,"StartX":171.0,"StartY":131.0,"EndX":171.0,"EndY":131.0}]},{"StartTime":66358.0,"Objects":[{"StartTime":66358.0,"EndTime":66473.0,"StartX":152.0,"StartY":133.0,"EndX":59.5588074,"EndY":118.96875}]},{"StartTime":66589.0,"Objects":[{"StartTime":66589.0,"EndTime":66704.0,"StartX":14.0,"StartY":291.0,"EndX":1.656276,"EndY":199.842651}]},{"StartTime":66820.0,"Objects":[{"StartTime":66820.0,"EndTime":66935.0,"StartX":136.0,"StartY":292.0,"EndX":148.343719,"EndY":383.157349}]},{"StartTime":67051.0,"Objects":[{"StartTime":67051.0,"EndTime":67281.0,"StartX":80.0,"StartY":232.0,"EndX":249.358459,"EndY":226.52771}]},{"StartTime":67397.0,"Objects":[{"StartTime":67397.0,"EndTime":67397.0,"StartX":315.0,"StartY":159.0,"EndX":315.0,"EndY":159.0}]},{"StartTime":67512.0,"Objects":[{"StartTime":67512.0,"EndTime":67742.0,"StartX":491.0,"StartY":182.0,"EndX":472.807831,"EndY":367.1432}]},{"StartTime":67858.0,"Objects":[{"StartTime":67858.0,"EndTime":68088.0,"StartX":410.0,"StartY":124.0,"EndX":391.807831,"EndY":309.1432}]},{"StartTime":68204.0,"Objects":[{"StartTime":68204.0,"EndTime":68319.0,"StartX":329.0,"StartY":66.0,"EndX":314.227875,"EndY":158.3257}]},{"StartTime":68435.0,"Objects":[{"StartTime":68435.0,"EndTime":68550.0,"StartX":181.0,"StartY":294.0,"EndX":267.731628,"EndY":307.528839}]},{"StartTime":68666.0,"Objects":[{"StartTime":68666.0,"EndTime":68781.0,"StartX":440.0,"StartY":252.0,"EndX":353.268341,"EndY":238.47113}]},{"StartTime":68897.0,"Objects":[{"StartTime":68897.0,"EndTime":68897.0,"StartX":128.0,"StartY":371.0,"EndX":128.0,"EndY":371.0}]},{"StartTime":69012.0,"Objects":[{"StartTime":69012.0,"EndTime":69012.0,"StartX":181.0,"StartY":294.0,"EndX":181.0,"EndY":294.0}]},{"StartTime":69127.0,"Objects":[{"StartTime":69127.0,"EndTime":69127.0,"StartX":117.0,"StartY":225.0,"EndX":117.0,"EndY":225.0}]},{"StartTime":69242.0,"Objects":[{"StartTime":69242.0,"EndTime":69242.0,"StartX":170.0,"StartY":148.0,"EndX":170.0,"EndY":148.0}]},{"StartTime":69358.0,"Objects":[{"StartTime":69358.0,"EndTime":69473.0,"StartX":52.0,"StartY":88.0,"EndX":42.99369,"EndY":181.065216}]},{"StartTime":69589.0,"Objects":[{"StartTime":69589.0,"EndTime":69704.0,"StartX":181.0,"StartY":294.0,"EndX":191.103531,"EndY":201.047485}]},{"StartTime":69820.0,"Objects":[{"StartTime":69820.0,"EndTime":69935.0,"StartX":39.0,"StartY":101.0,"EndX":29.8967171,"EndY":194.055786}]},{"StartTime":70051.0,"Objects":[{"StartTime":70051.0,"EndTime":70166.0,"StartX":168.0,"StartY":307.0,"EndX":177.006317,"EndY":213.934784}]},{"StartTime":70281.0,"Objects":[{"StartTime":70281.0,"EndTime":70281.0,"StartX":198.0,"StartY":30.0,"EndX":198.0,"EndY":30.0}]},{"StartTime":70339.0,"Objects":[{"StartTime":70339.0,"EndTime":70339.0,"StartX":220.0,"StartY":46.0,"EndX":220.0,"EndY":46.0}]},{"StartTime":70397.0,"Objects":[{"StartTime":70397.0,"EndTime":70397.0,"StartX":244.0,"StartY":58.0,"EndX":244.0,"EndY":58.0}]},{"StartTime":70455.0,"Objects":[{"StartTime":70455.0,"EndTime":70455.0,"StartX":269.0,"StartY":65.0,"EndX":269.0,"EndY":65.0}]},{"StartTime":70512.0,"Objects":[{"StartTime":70512.0,"EndTime":70512.0,"StartX":296.0,"StartY":68.0,"EndX":296.0,"EndY":68.0}]},{"StartTime":70570.0,"Objects":[{"StartTime":70570.0,"EndTime":70570.0,"StartX":322.0,"StartY":66.0,"EndX":322.0,"EndY":66.0}]},{"StartTime":70627.0,"Objects":[{"StartTime":70627.0,"EndTime":70627.0,"StartX":348.0,"StartY":60.0,"EndX":348.0,"EndY":60.0}]},{"StartTime":70685.0,"Objects":[{"StartTime":70685.0,"EndTime":70685.0,"StartX":373.0,"StartY":49.0,"EndX":373.0,"EndY":49.0}]},{"StartTime":70742.0,"Objects":[{"StartTime":70742.0,"EndTime":70742.0,"StartX":396.0,"StartY":36.0,"EndX":396.0,"EndY":36.0}]},{"StartTime":70800.0,"Objects":[{"StartTime":70800.0,"EndTime":70800.0,"StartX":441.0,"StartY":30.0,"EndX":441.0,"EndY":30.0}]},{"StartTime":70858.0,"Objects":[{"StartTime":70858.0,"EndTime":70858.0,"StartX":483.0,"StartY":49.0,"EndX":483.0,"EndY":49.0}]},{"StartTime":70916.0,"Objects":[{"StartTime":70916.0,"EndTime":70916.0,"StartX":510.0,"StartY":87.0,"EndX":510.0,"EndY":87.0}]},{"StartTime":70974.0,"Objects":[{"StartTime":70974.0,"EndTime":70974.0,"StartX":512.0,"StartY":133.0,"EndX":512.0,"EndY":133.0}]},{"StartTime":71031.0,"Objects":[{"StartTime":71031.0,"EndTime":71031.0,"StartX":492.0,"StartY":175.0,"EndX":492.0,"EndY":175.0}]},{"StartTime":71089.0,"Objects":[{"StartTime":71089.0,"EndTime":71089.0,"StartX":453.0,"StartY":199.0,"EndX":453.0,"EndY":199.0}]},{"StartTime":71146.0,"Objects":[{"StartTime":71146.0,"EndTime":71146.0,"StartX":407.0,"StartY":200.0,"EndX":407.0,"EndY":200.0}]},{"StartTime":71204.0,"Objects":[{"StartTime":71204.0,"EndTime":71434.0,"StartX":364.0,"StartY":184.0,"EndX":311.518982,"EndY":334.204376}]},{"StartTime":71551.0,"Objects":[{"StartTime":71551.0,"EndTime":71781.0,"StartX":419.0,"StartY":372.0,"EndX":471.481018,"EndY":221.795639}]},{"StartTime":71897.0,"Objects":[{"StartTime":71897.0,"EndTime":72012.0,"StartX":332.0,"StartY":104.0,"EndX":425.4371,"EndY":100.571114}]},{"StartTime":72127.0,"Objects":[{"StartTime":72127.0,"EndTime":72127.0,"StartX":248.0,"StartY":179.0,"EndX":248.0,"EndY":179.0}]},{"StartTime":72243.0,"Objects":[{"StartTime":72243.0,"EndTime":72473.0,"StartX":248.0,"StartY":179.0,"EndX":61.1216278,"EndY":185.743042}]},{"StartTime":72589.0,"Objects":[{"StartTime":72589.0,"EndTime":72704.0,"StartX":144.0,"StartY":259.0,"EndX":237.418945,"EndY":255.107544}]},{"StartTime":72820.0,"Objects":[{"StartTime":72820.0,"EndTime":72935.0,"StartX":164.0,"StartY":104.0,"EndX":70.58106,"EndY":107.892456}]},{"StartTime":73051.0,"Objects":[{"StartTime":73051.0,"EndTime":73281.0,"StartX":111.0,"StartY":338.0,"EndX":227.3736,"EndY":241.712738}]},{"StartTime":73397.0,"Objects":[{"StartTime":73397.0,"EndTime":73627.0,"StartX":192.0,"StartY":136.0,"EndX":5.122879,"EndY":142.777924}]},{"StartTime":73743.0,"Objects":[{"StartTime":73743.0,"EndTime":73858.0,"StartX":78.0,"StartY":57.0,"EndX":171.418945,"EndY":53.1075439}]},{"StartTime":73974.0,"Objects":[{"StartTime":73974.0,"EndTime":73974.0,"StartX":365.0,"StartY":83.0,"EndX":365.0,"EndY":83.0}]},{"StartTime":74089.0,"Objects":[{"StartTime":74089.0,"EndTime":74319.0,"StartX":365.0,"StartY":83.0,"EndX":191.714233,"EndY":134.999924}]},{"StartTime":74435.0,"Objects":[{"StartTime":74435.0,"EndTime":74550.0,"StartX":45.0,"StartY":195.0,"EndX":103.137146,"EndY":257.4539}]},{"StartTime":74666.0,"Objects":[{"StartTime":74666.0,"EndTime":74839.0,"StartX":16.0,"StartY":332.0,"EndX":154.0101,"EndY":323.057037}]},{"StartTime":74897.0,"Objects":[{"StartTime":74897.0,"EndTime":75127.0,"StartX":240.0,"StartY":352.0,"EndX":286.697662,"EndY":192.015747}]},{"StartTime":75243.0,"Objects":[{"StartTime":75243.0,"EndTime":75473.0,"StartX":395.0,"StartY":224.0,"EndX":348.302338,"EndY":383.984253}]},{"StartTime":75589.0,"Objects":[{"StartTime":75589.0,"EndTime":75704.0,"StartX":249.0,"StartY":166.0,"EndX":239.00386,"EndY":73.03588}]},{"StartTime":75820.0,"Objects":[{"StartTime":75820.0,"EndTime":75820.0,"StartX":198.0,"StartY":230.0,"EndX":198.0,"EndY":230.0}]},{"StartTime":75935.0,"Objects":[{"StartTime":75935.0,"EndTime":76165.0,"StartX":198.0,"StartY":230.0,"EndX":307.749573,"EndY":256.112274}]},{"StartTime":76281.0,"Objects":[{"StartTime":76281.0,"EndTime":76396.0,"StartX":340.0,"StartY":364.0,"EndX":433.236267,"EndY":356.9822}]},{"StartTime":76512.0,"Objects":[{"StartTime":76512.0,"EndTime":76627.0,"StartX":236.0,"StartY":324.0,"EndX":142.721558,"EndY":330.432983}]},{"StartTime":76743.0,"Objects":[{"StartTime":76743.0,"EndTime":76973.0,"StartX":13.0,"StartY":228.0,"EndX":197.975418,"EndY":229.001831}]},{"StartTime":77089.0,"Objects":[{"StartTime":77089.0,"EndTime":77319.0,"StartX":324.0,"StartY":152.0,"EndX":139.0246,"EndY":150.99852}]},{"StartTime":77435.0,"Objects":[{"StartTime":77435.0,"EndTime":77550.0,"StartX":294.0,"StartY":235.0,"EndX":387.241821,"EndY":228.056458}]},{"StartTime":77666.0,"Objects":[{"StartTime":77666.0,"EndTime":77666.0,"StartX":452.0,"StartY":108.0,"EndX":452.0,"EndY":108.0}]},{"StartTime":77781.0,"Objects":[{"StartTime":77781.0,"EndTime":77781.0,"StartX":452.0,"StartY":108.0,"EndX":452.0,"EndY":108.0}]},{"StartTime":77897.0,"Objects":[{"StartTime":77897.0,"EndTime":77897.0,"StartX":492.0,"StartY":272.0,"EndX":492.0,"EndY":272.0}]},{"StartTime":78012.0,"Objects":[{"StartTime":78012.0,"EndTime":78012.0,"StartX":492.0,"StartY":272.0,"EndX":492.0,"EndY":272.0}]},{"StartTime":78127.0,"Objects":[{"StartTime":78127.0,"EndTime":78300.0,"StartX":376.0,"StartY":88.0,"EndX":485.975616,"EndY":38.9063225}]},{"StartTime":78358.0,"Objects":[{"StartTime":78358.0,"EndTime":78531.0,"StartX":452.0,"StartY":108.0,"EndX":312.1908,"EndY":119.110664}]},{"StartTime":78589.0,"Objects":[{"StartTime":78589.0,"EndTime":78819.0,"StartX":216.0,"StartY":60.0,"EndX":162.709442,"EndY":212.004089}]},{"StartTime":78935.0,"Objects":[{"StartTime":78935.0,"EndTime":79165.0,"StartX":56.0,"StartY":176.0,"EndX":109.290558,"EndY":23.9959145}]},{"StartTime":79281.0,"Objects":[{"StartTime":79281.0,"EndTime":79396.0,"StartX":216.0,"StartY":60.0,"EndX":223.017776,"EndY":153.236267}]},{"StartTime":79512.0,"Objects":[{"StartTime":79512.0,"EndTime":79512.0,"StartX":333.0,"StartY":284.0,"EndX":333.0,"EndY":284.0}]},{"StartTime":79627.0,"Objects":[{"StartTime":79627.0,"EndTime":79857.0,"StartX":333.0,"StartY":284.0,"EndX":318.234375,"EndY":97.58386}]},{"StartTime":79974.0,"Objects":[{"StartTime":79974.0,"EndTime":80089.0,"StartX":157.0,"StartY":170.0,"EndX":225.494568,"EndY":221.356689}]},{"StartTime":80204.0,"Objects":[{"StartTime":80204.0,"EndTime":80319.0,"StartX":400.0,"StartY":264.0,"EndX":331.505432,"EndY":212.643311}]},{"StartTime":80435.0,"Objects":[{"StartTime":80435.0,"EndTime":80665.0,"StartX":255.0,"StartY":374.0,"EndX":441.4319,"EndY":359.435}]},{"StartTime":80781.0,"Objects":[{"StartTime":80781.0,"EndTime":81011.0,"StartX":512.0,"StartY":272.0,"EndX":325.5681,"EndY":286.565}]},{"StartTime":81127.0,"Objects":[{"StartTime":81127.0,"EndTime":81242.0,"StartX":244.0,"StartY":210.0,"EndX":337.236267,"EndY":202.982224}]},{"StartTime":81358.0,"Objects":[{"StartTime":81358.0,"EndTime":81358.0,"StartX":464.0,"StartY":92.0,"EndX":464.0,"EndY":92.0}]},{"StartTime":81474.0,"Objects":[{"StartTime":81474.0,"EndTime":81704.0,"StartX":464.0,"StartY":92.0,"EndX":436.704865,"EndY":260.520569}]},{"StartTime":81820.0,"Objects":[{"StartTime":81820.0,"EndTime":81935.0,"StartX":321.0,"StartY":123.0,"EndX":310.776672,"EndY":30.060585}]},{"StartTime":82051.0,"Objects":[{"StartTime":82051.0,"EndTime":82224.0,"StartX":201.0,"StartY":117.0,"EndX":215.0548,"EndY":256.544}]},{"StartTime":82281.0,"Objects":[{"StartTime":82281.0,"EndTime":82511.0,"StartX":225.0,"StartY":332.0,"EndX":61.8697166,"EndY":290.136566}]},{"StartTime":82627.0,"Objects":[{"StartTime":82627.0,"EndTime":82857.0,"StartX":90.0,"StartY":181.0,"EndX":253.13028,"EndY":222.863434}]},{"StartTime":82974.0,"Objects":[{"StartTime":82974.0,"EndTime":83089.0,"StartX":315.0,"StartY":317.0,"EndX":408.2069,"EndY":309.602631}]},{"StartTime":83204.0,"Objects":[{"StartTime":83204.0,"EndTime":83204.0,"StartX":500.0,"StartY":169.0,"EndX":500.0,"EndY":169.0}]},{"StartTime":83320.0,"Objects":[{"StartTime":83320.0,"EndTime":83550.0,"StartX":500.0,"StartY":169.0,"EndX":313.556458,"EndY":183.415741}]},{"StartTime":83666.0,"Objects":[{"StartTime":83666.0,"EndTime":83781.0,"StartX":156.0,"StartY":120.0,"EndX":148.402573,"EndY":30.9772434}]},{"StartTime":83897.0,"Objects":[{"StartTime":83897.0,"EndTime":84012.0,"StartX":260.0,"StartY":20.0,"EndX":267.597443,"EndY":109.022758}]},{"StartTime":84127.0,"Objects":[{"StartTime":84127.0,"EndTime":84357.0,"StartX":196.0,"StartY":260.0,"EndX":10.0717621,"EndY":240.007721}]},{"StartTime":84474.0,"Objects":[{"StartTime":84474.0,"EndTime":84704.0,"StartX":80.0,"StartY":328.0,"EndX":266.0215,"EndY":347.104919}]},{"StartTime":84820.0,"Objects":[{"StartTime":84820.0,"EndTime":84935.0,"StartX":372.0,"StartY":382.0,"EndX":425.185242,"EndY":313.9457}]},{"StartTime":85051.0,"Objects":[{"StartTime":85051.0,"EndTime":85166.0,"StartX":506.0,"StartY":236.0,"EndX":420.3389,"EndY":225.319748}]},{"StartTime":85281.0,"Objects":[{"StartTime":85281.0,"EndTime":85396.0,"StartX":313.0,"StartY":195.0,"EndX":345.927277,"EndY":274.284271}]},{"StartTime":85512.0,"Objects":[{"StartTime":85512.0,"EndTime":85685.0,"StartX":163.0,"StartY":144.0,"EndX":23.0051575,"EndY":135.54393}]},{"StartTime":85743.0,"Objects":[{"StartTime":85743.0,"EndTime":85858.0,"StartX":44.0,"StartY":187.0,"EndX":137.3583,"EndY":192.145737}]},{"StartTime":85974.0,"Objects":[{"StartTime":85974.0,"EndTime":86089.0,"StartX":245.0,"StartY":159.0,"EndX":213.251648,"EndY":75.93215}]},{"StartTime":86204.0,"Objects":[{"StartTime":86204.0,"EndTime":86434.0,"StartX":214.0,"StartY":244.0,"EndX":400.07196,"EndY":225.3928}]},{"StartTime":86551.0,"Objects":[{"StartTime":86551.0,"EndTime":86551.0,"StartX":497.0,"StartY":283.0,"EndX":497.0,"EndY":283.0}]},{"StartTime":86666.0,"Objects":[{"StartTime":86666.0,"EndTime":86781.0,"StartX":497.0,"StartY":283.0,"EndX":418.634644,"EndY":323.512756}]},{"StartTime":86897.0,"Objects":[{"StartTime":86897.0,"EndTime":87127.0,"StartX":318.0,"StartY":374.0,"EndX":326.852631,"EndY":187.209656}]},{"StartTime":87243.0,"Objects":[{"StartTime":87243.0,"EndTime":87243.0,"StartX":238.0,"StartY":257.0,"EndX":238.0,"EndY":257.0}]},{"StartTime":87358.0,"Objects":[{"StartTime":87358.0,"EndTime":87588.0,"StartX":238.0,"StartY":257.0,"EndX":246.852631,"EndY":70.2096558}]},{"StartTime":87704.0,"Objects":[{"StartTime":87704.0,"EndTime":87704.0,"StartX":158.0,"StartY":140.0,"EndX":158.0,"EndY":140.0}]},{"StartTime":87820.0,"Objects":[{"StartTime":87820.0,"EndTime":87935.0,"StartX":158.0,"StartY":140.0,"EndX":162.405472,"EndY":46.60385}]},{"StartTime":88051.0,"Objects":[{"StartTime":88051.0,"EndTime":88166.0,"StartX":75.0,"StartY":118.0,"EndX":70.55266,"EndY":211.394165}]},{"StartTime":88281.0,"Objects":[{"StartTime":88281.0,"EndTime":88281.0,"StartX":113.0,"StartY":345.0,"EndX":113.0,"EndY":345.0}]},{"StartTime":88339.0,"Objects":[{"StartTime":88339.0,"EndTime":88339.0,"StartX":130.0,"StartY":335.0,"EndX":130.0,"EndY":335.0}]},{"StartTime":88397.0,"Objects":[{"StartTime":88397.0,"EndTime":88397.0,"StartX":150.0,"StartY":333.0,"EndX":150.0,"EndY":333.0}]},{"StartTime":88454.0,"Objects":[{"StartTime":88454.0,"EndTime":88454.0,"StartX":169.0,"StartY":339.0,"EndX":169.0,"EndY":339.0}]},{"StartTime":88512.0,"Objects":[{"StartTime":88512.0,"EndTime":88512.0,"StartX":188.0,"StartY":347.0,"EndX":188.0,"EndY":347.0}]},{"StartTime":88570.0,"Objects":[{"StartTime":88570.0,"EndTime":88570.0,"StartX":230.0,"StartY":365.0,"EndX":230.0,"EndY":365.0}]},{"StartTime":88628.0,"Objects":[{"StartTime":88628.0,"EndTime":88628.0,"StartX":276.0,"StartY":366.0,"EndX":276.0,"EndY":366.0}]},{"StartTime":88686.0,"Objects":[{"StartTime":88686.0,"EndTime":88686.0,"StartX":320.0,"StartY":349.0,"EndX":320.0,"EndY":349.0}]},{"StartTime":88743.0,"Objects":[{"StartTime":88743.0,"EndTime":88973.0,"StartX":353.0,"StartY":317.0,"EndX":361.241974,"EndY":130.181717}]},{"StartTime":89089.0,"Objects":[{"StartTime":89089.0,"EndTime":89089.0,"StartX":265.0,"StartY":71.0,"EndX":265.0,"EndY":71.0}]},{"StartTime":89204.0,"Objects":[{"StartTime":89204.0,"EndTime":89434.0,"StartX":265.0,"StartY":71.0,"EndX":243.2195,"EndY":225.605286}]},{"StartTime":89551.0,"Objects":[{"StartTime":89551.0,"EndTime":89551.0,"StartX":356.0,"StartY":237.0,"EndX":356.0,"EndY":237.0}]},{"StartTime":89666.0,"Objects":[{"StartTime":89666.0,"EndTime":89781.0,"StartX":356.0,"StartY":237.0,"EndX":449.1545,"EndY":228.969437}]},{"StartTime":89897.0,"Objects":[{"StartTime":89897.0,"EndTime":90070.0,"StartX":373.0,"StartY":145.0,"EndX":233.266891,"EndY":157.03}]},{"StartTime":90127.0,"Objects":[{"StartTime":90127.0,"EndTime":90242.0,"StartX":189.0,"StartY":190.0,"EndX":282.065216,"EndY":180.993683}]},{"StartTime":90358.0,"Objects":[{"StartTime":90358.0,"EndTime":90473.0,"StartX":147.0,"StartY":85.0,"EndX":53.8074875,"EndY":92.57663}]},{"StartTime":90589.0,"Objects":[{"StartTime":90589.0,"EndTime":90819.0,"StartX":129.0,"StartY":242.0,"EndX":265.9673,"EndY":193.421722}]},{"StartTime":90935.0,"Objects":[{"StartTime":90935.0,"EndTime":91165.0,"StartX":116.0,"StartY":165.0,"EndX":88.36763,"EndY":307.56366}]},{"StartTime":91281.0,"Objects":[{"StartTime":91281.0,"EndTime":91396.0,"StartX":189.0,"StartY":190.0,"EndX":166.779434,"EndY":104.921692}]},{"StartTime":91512.0,"Objects":[{"StartTime":91512.0,"EndTime":91627.0,"StartX":81.0,"StartY":31.0,"EndX":174.155975,"EndY":22.9865837}]},{"StartTime":91743.0,"Objects":[{"StartTime":91743.0,"EndTime":91858.0,"StartX":350.0,"StartY":92.0,"EndX":256.844025,"EndY":100.01342}]},{"StartTime":91974.0,"Objects":[{"StartTime":91974.0,"EndTime":92089.0,"StartX":95.0,"StartY":198.0,"EndX":188.155975,"EndY":189.986588}]},{"StartTime":92204.0,"Objects":[{"StartTime":92204.0,"EndTime":92204.0,"StartX":377.0,"StartY":205.0,"EndX":377.0,"EndY":205.0}]},{"StartTime":92262.0,"Objects":[{"StartTime":92262.0,"EndTime":92262.0,"StartX":365.0,"StartY":240.0,"EndX":365.0,"EndY":240.0}]},{"StartTime":92320.0,"Objects":[{"StartTime":92320.0,"EndTime":92320.0,"StartX":355.0,"StartY":276.0,"EndX":355.0,"EndY":276.0}]},{"StartTime":92377.0,"Objects":[{"StartTime":92377.0,"EndTime":92377.0,"StartX":345.0,"StartY":311.0,"EndX":345.0,"EndY":311.0}]},{"StartTime":92435.0,"Objects":[{"StartTime":92435.0,"EndTime":92665.0,"StartX":334.0,"StartY":347.0,"EndX":291.821869,"EndY":211.143036}]},{"StartTime":92781.0,"Objects":[{"StartTime":92781.0,"EndTime":92781.0,"StartX":392.0,"StartY":153.0,"EndX":392.0,"EndY":153.0}]},{"StartTime":92897.0,"Objects":[{"StartTime":92897.0,"EndTime":93127.0,"StartX":392.0,"StartY":153.0,"EndX":350.227783,"EndY":17.0176716}]},{"StartTime":93243.0,"Objects":[{"StartTime":93243.0,"EndTime":93243.0,"StartX":256.0,"StartY":79.0,"EndX":256.0,"EndY":79.0}]},{"StartTime":93358.0,"Objects":[{"StartTime":93358.0,"EndTime":93473.0,"StartX":256.0,"StartY":79.0,"EndX":261.632,"EndY":172.330215}]},{"StartTime":93589.0,"Objects":[{"StartTime":93589.0,"EndTime":93762.0,"StartX":152.0,"StartY":304.0,"EndX":143.41185,"EndY":164.0132}]},{"StartTime":93820.0,"Objects":[{"StartTime":93820.0,"EndTime":93935.0,"StartX":154.0,"StartY":109.0,"EndX":77.33286,"EndY":155.051788}]},{"StartTime":94051.0,"Objects":[{"StartTime":94051.0,"EndTime":94166.0,"StartX":0.0,"StartY":62.0,"EndX":75.5017853,"EndY":14.9673195}]},{"StartTime":94281.0,"Objects":[{"StartTime":94281.0,"EndTime":94511.0,"StartX":256.0,"StartY":79.0,"EndX":267.039856,"EndY":265.673828}]},{"StartTime":94627.0,"Objects":[{"StartTime":94627.0,"EndTime":94627.0,"StartX":198.0,"StartY":354.0,"EndX":198.0,"EndY":354.0}]},{"StartTime":94743.0,"Objects":[{"StartTime":94743.0,"EndTime":94973.0,"StartX":198.0,"StartY":354.0,"EndX":360.646973,"EndY":327.537933}]},{"StartTime":95089.0,"Objects":[{"StartTime":95089.0,"EndTime":95089.0,"StartX":407.0,"StartY":224.0,"EndX":407.0,"EndY":224.0}]},{"StartTime":95204.0,"Objects":[{"StartTime":95204.0,"EndTime":95377.0,"StartX":407.0,"StartY":224.0,"EndX":267.210632,"EndY":212.64212}]},{"StartTime":95435.0,"Objects":[{"StartTime":95435.0,"EndTime":95550.0,"StartX":218.0,"StartY":184.0,"EndX":311.1996,"EndY":191.489258}]},{"StartTime":95666.0,"Objects":[{"StartTime":95666.0,"EndTime":95781.0,"StartX":401.0,"StartY":124.0,"EndX":390.806671,"EndY":37.31835}]},{"StartTime":95897.0,"Objects":[{"StartTime":95897.0,"EndTime":96012.0,"StartX":300.0,"StartY":104.0,"EndX":310.698975,"EndY":190.649216}]},{"StartTime":96127.0,"Objects":[{"StartTime":96127.0,"EndTime":96357.0,"StartX":420.0,"StartY":317.0,"EndX":273.125153,"EndY":357.523529}]},{"StartTime":96474.0,"Objects":[{"StartTime":96474.0,"EndTime":96474.0,"StartX":159.0,"StartY":359.0,"EndX":159.0,"EndY":359.0}]},{"StartTime":96589.0,"Objects":[{"StartTime":96589.0,"EndTime":96819.0,"StartX":159.0,"StartY":359.0,"EndX":12.0078545,"EndY":317.029419}]},{"StartTime":96935.0,"Objects":[{"StartTime":96935.0,"EndTime":96935.0,"StartX":78.0,"StartY":186.0,"EndX":78.0,"EndY":186.0}]},{"StartTime":97051.0,"Objects":[{"StartTime":97051.0,"EndTime":97281.0,"StartX":174.0,"StartY":245.0,"EndX":194.12471,"EndY":59.08606}]},{"StartTime":97397.0,"Objects":[{"StartTime":97397.0,"EndTime":97397.0,"StartX":300.0,"StartY":104.0,"EndX":300.0,"EndY":104.0}]},{"StartTime":97512.0,"Objects":[{"StartTime":97512.0,"EndTime":97627.0,"StartX":300.0,"StartY":104.0,"EndX":288.732025,"EndY":191.6934}]},{"StartTime":97743.0,"Objects":[{"StartTime":97743.0,"EndTime":97858.0,"StartX":185.0,"StartY":332.0,"EndX":172.889053,"EndY":244.604034}]},{"StartTime":97974.0,"Objects":[{"StartTime":97974.0,"EndTime":98204.0,"StartX":450.0,"StartY":270.0,"EndX":263.309357,"EndY":280.751831}]},{"StartTime":98320.0,"Objects":[{"StartTime":98320.0,"EndTime":98320.0,"StartX":218.0,"StartY":184.0,"EndX":218.0,"EndY":184.0}]},{"StartTime":98435.0,"Objects":[{"StartTime":98435.0,"EndTime":98665.0,"StartX":218.0,"StartY":184.0,"EndX":404.690643,"EndY":173.248184}]},{"StartTime":98781.0,"Objects":[{"StartTime":98781.0,"EndTime":98781.0,"StartX":509.0,"StartY":216.0,"EndX":509.0,"EndY":216.0}]},{"StartTime":98897.0,"Objects":[{"StartTime":98897.0,"EndTime":99127.0,"StartX":509.0,"StartY":216.0,"EndX":511.477661,"EndY":33.17072}]},{"StartTime":99243.0,"Objects":[{"StartTime":99243.0,"EndTime":99243.0,"StartX":402.0,"StartY":4.0,"EndX":402.0,"EndY":4.0}]},{"StartTime":99358.0,"Objects":[{"StartTime":99358.0,"EndTime":99473.0,"StartX":207.0,"StartY":91.0,"EndX":217.103531,"EndY":183.952515}]},{"StartTime":99589.0,"Objects":[{"StartTime":99589.0,"EndTime":99704.0,"StartX":364.0,"StartY":222.0,"EndX":353.017426,"EndY":129.147247}]},{"StartTime":99820.0,"Objects":[{"StartTime":99820.0,"EndTime":99820.0,"StartX":300.0,"StartY":359.0,"EndX":300.0,"EndY":359.0}]},{"StartTime":99935.0,"Objects":[{"StartTime":99935.0,"EndTime":99935.0,"StartX":391.0,"StartY":372.0,"EndX":391.0,"EndY":372.0}]},{"StartTime":100051.0,"Objects":[{"StartTime":100051.0,"EndTime":100051.0,"StartX":432.0,"StartY":287.0,"EndX":432.0,"EndY":287.0}]},{"StartTime":100166.0,"Objects":[{"StartTime":100166.0,"EndTime":100166.0,"StartX":364.0,"StartY":222.0,"EndX":364.0,"EndY":222.0}]},{"StartTime":100281.0,"Objects":[{"StartTime":100281.0,"EndTime":100281.0,"StartX":282.0,"StartY":268.0,"EndX":282.0,"EndY":268.0}]},{"StartTime":100397.0,"Objects":[{"StartTime":100397.0,"EndTime":100397.0,"StartX":200.0,"StartY":314.0,"EndX":200.0,"EndY":314.0}]},{"StartTime":100512.0,"Objects":[{"StartTime":100512.0,"EndTime":100512.0,"StartX":132.0,"StartY":249.0,"EndX":132.0,"EndY":249.0}]},{"StartTime":100628.0,"Objects":[{"StartTime":100628.0,"EndTime":100628.0,"StartX":173.0,"StartY":164.0,"EndX":173.0,"EndY":164.0}]},{"StartTime":100743.0,"Objects":[{"StartTime":100743.0,"EndTime":100858.0,"StartX":264.0,"StartY":177.0,"EndX":249.782654,"EndY":84.58724}]},{"StartTime":100974.0,"Objects":[{"StartTime":100974.0,"EndTime":101089.0,"StartX":158.0,"StartY":71.0,"EndX":172.888229,"EndY":163.307037}]},{"StartTime":101204.0,"Objects":[{"StartTime":101204.0,"EndTime":101319.0,"StartX":146.0,"StartY":341.0,"EndX":131.782654,"EndY":248.58725}]},{"StartTime":101435.0,"Objects":[{"StartTime":101435.0,"EndTime":101550.0,"StartX":40.0,"StartY":235.0,"EndX":54.0663261,"EndY":327.435852}]},{"StartTime":101666.0,"Objects":[{"StartTime":101666.0,"EndTime":101781.0,"StartX":146.0,"StartY":341.0,"EndX":229.125732,"EndY":335.997467}]},{"StartTime":101897.0,"Objects":[{"StartTime":101897.0,"EndTime":102012.0,"StartX":321.0,"StartY":224.0,"EndX":237.874268,"EndY":229.002533}]},{"StartTime":102127.0,"Objects":[{"StartTime":102127.0,"EndTime":102127.0,"StartX":325.0,"StartY":317.0,"EndX":325.0,"EndY":317.0}]},{"StartTime":102243.0,"Objects":[{"StartTime":102243.0,"EndTime":102243.0,"StartX":353.0,"StartY":129.0,"EndX":353.0,"EndY":129.0}]},{"StartTime":102300.0,"Objects":[{"StartTime":102300.0,"EndTime":102300.0,"StartX":345.0,"StartY":116.0,"EndX":345.0,"EndY":116.0}]},{"StartTime":102358.0,"Objects":[{"StartTime":102358.0,"EndTime":102358.0,"StartX":351.0,"StartY":104.0,"EndX":351.0,"EndY":104.0}]},{"StartTime":102416.0,"Objects":[{"StartTime":102416.0,"EndTime":102416.0,"StartX":340.0,"StartY":93.0,"EndX":340.0,"EndY":93.0}]},{"StartTime":102474.0,"Objects":[{"StartTime":102474.0,"EndTime":102474.0,"StartX":342.0,"StartY":79.0,"EndX":342.0,"EndY":79.0}]},{"StartTime":102531.0,"Objects":[{"StartTime":102531.0,"EndTime":102531.0,"StartX":333.0,"StartY":68.0,"EndX":333.0,"EndY":68.0}]},{"StartTime":102589.0,"Objects":[{"StartTime":102589.0,"EndTime":102589.0,"StartX":322.0,"StartY":58.0,"EndX":322.0,"EndY":58.0}]},{"StartTime":102646.0,"Objects":[{"StartTime":102646.0,"EndTime":102646.0,"StartX":360.0,"StartY":78.0,"EndX":360.0,"EndY":78.0}]},{"StartTime":102704.0,"Objects":[{"StartTime":102704.0,"EndTime":102704.0,"StartX":404.0,"StartY":81.0,"EndX":404.0,"EndY":81.0}]},{"StartTime":102762.0,"Objects":[{"StartTime":102762.0,"EndTime":102762.0,"StartX":446.0,"StartY":65.0,"EndX":446.0,"EndY":65.0}]},{"StartTime":102819.0,"Objects":[{"StartTime":102819.0,"EndTime":102819.0,"StartX":477.0,"StartY":34.0,"EndX":477.0,"EndY":34.0}]},{"StartTime":102935.0,"Objects":[{"StartTime":102935.0,"EndTime":102992.0,"StartX":232.0,"StartY":124.0,"EndX":186.691376,"EndY":112.480858}]},{"StartTime":103051.0,"Objects":[{"StartTime":103051.0,"EndTime":103051.0,"StartX":256.0,"StartY":114.0,"EndX":256.0,"EndY":114.0}]},{"StartTime":103108.0,"Objects":[{"StartTime":103108.0,"EndTime":103108.0,"StartX":249.0,"StartY":146.0,"EndX":249.0,"EndY":146.0}]},{"StartTime":103166.0,"Objects":[{"StartTime":103166.0,"EndTime":103166.0,"StartX":271.0,"StartY":173.0,"EndX":271.0,"EndY":173.0}]},{"StartTime":103224.0,"Objects":[{"StartTime":103224.0,"EndTime":103224.0,"StartX":255.0,"StartY":200.0,"EndX":255.0,"EndY":200.0}]},{"StartTime":103281.0,"Objects":[{"StartTime":103281.0,"EndTime":103281.0,"StartX":271.0,"StartY":229.0,"EndX":271.0,"EndY":229.0}]},{"StartTime":103339.0,"Objects":[{"StartTime":103339.0,"EndTime":103339.0,"StartX":294.0,"StartY":258.0,"EndX":294.0,"EndY":258.0}]},{"StartTime":103397.0,"Objects":[{"StartTime":103397.0,"EndTime":103397.0,"StartX":277.0,"StartY":283.0,"EndX":277.0,"EndY":283.0}]},{"StartTime":103454.0,"Objects":[{"StartTime":103454.0,"EndTime":103454.0,"StartX":291.0,"StartY":312.0,"EndX":291.0,"EndY":312.0}]},{"StartTime":103512.0,"Objects":[{"StartTime":103512.0,"EndTime":103742.0,"StartX":285.0,"StartY":344.0,"EndX":468.7167,"EndY":315.6869}]},{"StartTime":103858.0,"Objects":[{"StartTime":103858.0,"EndTime":103858.0,"StartX":495.0,"StartY":206.0,"EndX":495.0,"EndY":206.0}]},{"StartTime":103974.0,"Objects":[{"StartTime":103974.0,"EndTime":104204.0,"StartX":495.0,"StartY":206.0,"EndX":364.1515,"EndY":126.091278}]},{"StartTime":104320.0,"Objects":[{"StartTime":104320.0,"EndTime":104320.0,"StartX":272.0,"StartY":191.0,"EndX":272.0,"EndY":191.0}]},{"StartTime":104435.0,"Objects":[{"StartTime":104435.0,"EndTime":104550.0,"StartX":272.0,"StartY":191.0,"EndX":277.742981,"EndY":97.6765442}]},{"StartTime":104666.0,"Objects":[{"StartTime":104666.0,"EndTime":104896.0,"StartX":362.0,"StartY":23.0,"EndX":195.2012,"EndY":67.52858}]},{"StartTime":105012.0,"Objects":[{"StartTime":105012.0,"EndTime":105012.0,"StartX":108.0,"StartY":121.0,"EndX":108.0,"EndY":121.0}]},{"StartTime":105127.0,"Objects":[{"StartTime":105127.0,"EndTime":105127.0,"StartX":97.0,"StartY":10.0,"EndX":97.0,"EndY":10.0}]},{"StartTime":105243.0,"Objects":[{"StartTime":105243.0,"EndTime":105243.0,"StartX":195.0,"StartY":67.0,"EndX":195.0,"EndY":67.0}]},{"StartTime":105301.0,"Objects":[{"StartTime":105301.0,"EndTime":105301.0,"StartX":195.0,"StartY":67.0,"EndX":195.0,"EndY":67.0}]},{"StartTime":105358.0,"Objects":[{"StartTime":105358.0,"EndTime":105588.0,"StartX":195.0,"StartY":67.0,"EndX":141.92659,"EndY":219.274048}]},{"StartTime":105704.0,"Objects":[{"StartTime":105704.0,"EndTime":105704.0,"StartX":33.0,"StartY":192.0,"EndX":33.0,"EndY":192.0}]},{"StartTime":105820.0,"Objects":[{"StartTime":105820.0,"EndTime":105935.0,"StartX":33.0,"StartY":192.0,"EndX":40.4561768,"EndY":285.20224}]},{"StartTime":106051.0,"Objects":[{"StartTime":106051.0,"EndTime":106166.0,"StartX":149.0,"StartY":312.0,"EndX":141.071213,"EndY":218.836792}]},{"StartTime":106281.0,"Objects":[{"StartTime":106281.0,"EndTime":106396.0,"StartX":239.0,"StartY":165.0,"EndX":279.132324,"EndY":242.779724}]},{"StartTime":106512.0,"Objects":[{"StartTime":106512.0,"EndTime":106627.0,"StartX":255.0,"StartY":354.0,"EndX":347.996826,"EndY":344.312836}]},{"StartTime":106743.0,"Objects":[{"StartTime":106743.0,"EndTime":106916.0,"StartX":460.0,"StartY":337.0,"EndX":384.705444,"EndY":225.777954}]},{"StartTime":106974.0,"Objects":[{"StartTime":106974.0,"EndTime":107089.0,"StartX":385.0,"StartY":226.0,"EndX":477.996826,"EndY":216.312836}]},{"StartTime":107204.0,"Objects":[{"StartTime":107204.0,"EndTime":107434.0,"StartX":391.0,"StartY":72.0,"EndX":204.95784,"EndY":90.90268}]},{"StartTime":107551.0,"Objects":[{"StartTime":107551.0,"EndTime":107551.0,"StartX":126.0,"StartY":7.0,"EndX":126.0,"EndY":7.0}]},{"StartTime":107666.0,"Objects":[{"StartTime":107666.0,"EndTime":107896.0,"StartX":126.0,"StartY":7.0,"EndX":121.048843,"EndY":173.544022}]},{"StartTime":108012.0,"Objects":[{"StartTime":108012.0,"EndTime":108012.0,"StartX":233.0,"StartY":165.0,"EndX":233.0,"EndY":165.0}]},{"StartTime":108127.0,"Objects":[{"StartTime":108127.0,"EndTime":108242.0,"StartX":233.0,"StartY":165.0,"EndX":220.6427,"EndY":257.6798}]},{"StartTime":108358.0,"Objects":[{"StartTime":108358.0,"EndTime":108588.0,"StartX":145.0,"StartY":342.0,"EndX":309.147552,"EndY":297.85675}]},{"StartTime":108704.0,"Objects":[{"StartTime":108704.0,"EndTime":108704.0,"StartX":414.0,"StartY":258.0,"EndX":414.0,"EndY":258.0}]},{"StartTime":108820.0,"Objects":[{"StartTime":108820.0,"EndTime":108820.0,"StartX":394.0,"StartY":369.0,"EndX":394.0,"EndY":369.0}]},{"StartTime":108935.0,"Objects":[{"StartTime":108935.0,"EndTime":108935.0,"StartX":309.0,"StartY":298.0,"EndX":309.0,"EndY":298.0}]},{"StartTime":108993.0,"Objects":[{"StartTime":108993.0,"EndTime":108993.0,"StartX":309.0,"StartY":298.0,"EndX":309.0,"EndY":298.0}]},{"StartTime":109051.0,"Objects":[{"StartTime":109051.0,"EndTime":109281.0,"StartX":309.0,"StartY":298.0,"EndX":301.334656,"EndY":111.157166}]},{"StartTime":109397.0,"Objects":[{"StartTime":109397.0,"EndTime":109397.0,"StartX":396.0,"StartY":51.0,"EndX":396.0,"EndY":51.0}]},{"StartTime":109512.0,"Objects":[{"StartTime":109512.0,"EndTime":109627.0,"StartX":396.0,"StartY":51.0,"EndX":423.202057,"EndY":133.881226}]},{"StartTime":109743.0,"Objects":[{"StartTime":109743.0,"EndTime":109858.0,"StartX":385.0,"StartY":240.0,"EndX":478.08667,"EndY":231.218231}]},{"StartTime":109974.0,"Objects":[{"StartTime":109974.0,"EndTime":110089.0,"StartX":445.0,"StartY":339.0,"EndX":351.91333,"EndY":347.781769}]},{"StartTime":110204.0,"Objects":[{"StartTime":110204.0,"EndTime":110319.0,"StartX":264.0,"StartY":278.0,"EndX":259.688171,"EndY":188.682465}]},{"StartTime":110435.0,"Objects":[{"StartTime":110435.0,"EndTime":110608.0,"StartX":150.0,"StartY":164.0,"EndX":146.468857,"EndY":297.5795}]},{"StartTime":110666.0,"Objects":[{"StartTime":110666.0,"EndTime":110781.0,"StartX":147.0,"StartY":298.0,"EndX":57.94221,"EndY":300.452057}]},{"StartTime":110897.0,"Objects":[{"StartTime":110897.0,"EndTime":111127.0,"StartX":214.0,"StartY":357.0,"EndX":400.130432,"EndY":338.987366}]},{"StartTime":111243.0,"Objects":[{"StartTime":111243.0,"EndTime":111243.0,"StartX":451.0,"StartY":239.0,"EndX":451.0,"EndY":239.0}]},{"StartTime":111358.0,"Objects":[{"StartTime":111358.0,"EndTime":111588.0,"StartX":451.0,"StartY":239.0,"EndX":264.767944,"EndY":255.930176}]},{"StartTime":111704.0,"Objects":[{"StartTime":111704.0,"EndTime":111704.0,"StartX":314.0,"StartY":155.0,"EndX":314.0,"EndY":155.0}]},{"StartTime":111820.0,"Objects":[{"StartTime":111820.0,"EndTime":111935.0,"StartX":314.0,"StartY":155.0,"EndX":407.065216,"EndY":145.993683}]},{"StartTime":112051.0,"Objects":[{"StartTime":112051.0,"EndTime":112281.0,"StartX":486.0,"StartY":65.0,"EndX":450.23877,"EndY":238.696548}]},{"StartTime":112397.0,"Objects":[{"StartTime":112397.0,"EndTime":112397.0,"StartX":499.0,"StartY":340.0,"EndX":499.0,"EndY":340.0}]},{"StartTime":112512.0,"Objects":[{"StartTime":112512.0,"EndTime":112512.0,"StartX":390.0,"StartY":312.0,"EndX":390.0,"EndY":312.0}]},{"StartTime":112627.0,"Objects":[{"StartTime":112627.0,"EndTime":112627.0,"StartX":288.0,"StartY":358.0,"EndX":288.0,"EndY":358.0}]},{"StartTime":112685.0,"Objects":[{"StartTime":112685.0,"EndTime":112685.0,"StartX":288.0,"StartY":358.0,"EndX":288.0,"EndY":358.0}]},{"StartTime":112743.0,"Objects":[{"StartTime":112743.0,"EndTime":112973.0,"StartX":288.0,"StartY":358.0,"EndX":101.516357,"EndY":344.1129}]},{"StartTime":113089.0,"Objects":[{"StartTime":113089.0,"EndTime":113089.0,"StartX":30.0,"StartY":256.0,"EndX":30.0,"EndY":256.0}]},{"StartTime":113204.0,"Objects":[{"StartTime":113204.0,"EndTime":113434.0,"StartX":30.0,"StartY":256.0,"EndX":216.483643,"EndY":269.8871}]},{"StartTime":113551.0,"Objects":[{"StartTime":113551.0,"EndTime":113551.0,"StartX":308.0,"StartY":202.0,"EndX":308.0,"EndY":202.0}]},{"StartTime":113666.0,"Objects":[{"StartTime":113666.0,"EndTime":113896.0,"StartX":308.0,"StartY":202.0,"EndX":257.027771,"EndY":43.50958}]},{"StartTime":114012.0,"Objects":[{"StartTime":114012.0,"EndTime":114012.0,"StartX":211.0,"StartY":146.0,"EndX":211.0,"EndY":146.0}]},{"StartTime":114127.0,"Objects":[{"StartTime":114127.0,"EndTime":114300.0,"StartX":211.0,"StartY":146.0,"EndX":219.4335,"EndY":285.996216}]},{"StartTime":114358.0,"Objects":[{"StartTime":114358.0,"EndTime":114473.0,"StartX":219.0,"StartY":285.0,"EndX":306.556854,"EndY":285.353943}]},{"StartTime":114589.0,"Objects":[{"StartTime":114589.0,"EndTime":115281.0,"StartX":166.0,"StartY":367.0,"EndX":351.058228,"EndY":20.7379055}]},{"StartTime":115512.0,"Objects":[{"StartTime":115512.0,"EndTime":115512.0,"StartX":292.0,"StartY":98.0,"EndX":292.0,"EndY":98.0}]},{"StartTime":116435.0,"Objects":[{"StartTime":116435.0,"EndTime":117127.0,"StartX":346.0,"StartY":367.0,"EndX":160.941772,"EndY":20.7379055}]},{"StartTime":117358.0,"Objects":[{"StartTime":117358.0,"EndTime":117358.0,"StartX":219.0,"StartY":98.0,"EndX":219.0,"EndY":98.0}]},{"StartTime":117589.0,"Objects":[{"StartTime":117589.0,"EndTime":117589.0,"StartX":292.0,"StartY":285.0,"EndX":292.0,"EndY":285.0}]},{"StartTime":117820.0,"Objects":[{"StartTime":117820.0,"EndTime":117820.0,"StartX":438.0,"StartY":147.0,"EndX":438.0,"EndY":147.0}]},{"StartTime":118051.0,"Objects":[{"StartTime":118051.0,"EndTime":118166.0,"StartX":219.0,"StartY":98.0,"EndX":125.6332,"EndY":93.01093}]},{"StartTime":118281.0,"Objects":[{"StartTime":118281.0,"EndTime":118396.0,"StartX":10.0,"StartY":235.0,"EndX":-0.844006062,"EndY":147.620377}]},{"StartTime":118512.0,"Objects":[{"StartTime":118512.0,"EndTime":118627.0,"StartX":154.0,"StartY":279.0,"EndX":164.4093,"EndY":366.252167}]},{"StartTime":118743.0,"Objects":[{"StartTime":118743.0,"EndTime":118743.0,"StartX":3.0,"StartY":339.0,"EndX":3.0,"EndY":339.0}]},{"StartTime":118858.0,"Objects":[{"StartTime":118858.0,"EndTime":119088.0,"StartX":219.0,"StartY":215.0,"EndX":239.6507,"EndY":29.1437378}]},{"StartTime":119204.0,"Objects":[{"StartTime":119204.0,"EndTime":119204.0,"StartX":114.0,"StartY":85.0,"EndX":114.0,"EndY":85.0}]},{"StartTime":119262.0,"Objects":[{"StartTime":119262.0,"EndTime":119262.0,"StartX":145.0,"StartY":112.0,"EndX":145.0,"EndY":112.0}]},{"StartTime":119319.0,"Objects":[{"StartTime":119319.0,"EndTime":119319.0,"StartX":151.0,"StartY":155.0,"EndX":151.0,"EndY":155.0}]},{"StartTime":119377.0,"Objects":[{"StartTime":119377.0,"EndTime":119377.0,"StartX":134.0,"StartY":195.0,"EndX":134.0,"EndY":195.0}]},{"StartTime":119434.0,"Objects":[{"StartTime":119434.0,"EndTime":119434.0,"StartX":102.0,"StartY":223.0,"EndX":102.0,"EndY":223.0}]},{"StartTime":119493.0,"Objects":[{"StartTime":119493.0,"EndTime":119493.0,"StartX":84.0,"StartY":265.0,"EndX":84.0,"EndY":265.0}]},{"StartTime":119551.0,"Objects":[{"StartTime":119551.0,"EndTime":119551.0,"StartX":80.0,"StartY":305.0,"EndX":80.0,"EndY":305.0}]},{"StartTime":119608.0,"Objects":[{"StartTime":119608.0,"EndTime":119608.0,"StartX":101.0,"StartY":342.0,"EndX":101.0,"EndY":342.0}]},{"StartTime":119666.0,"Objects":[{"StartTime":119666.0,"EndTime":119666.0,"StartX":135.0,"StartY":372.0,"EndX":135.0,"EndY":372.0}]},{"StartTime":119723.0,"Objects":[{"StartTime":119723.0,"EndTime":119723.0,"StartX":190.0,"StartY":375.0,"EndX":190.0,"EndY":375.0}]},{"StartTime":119781.0,"Objects":[{"StartTime":119781.0,"EndTime":119781.0,"StartX":230.0,"StartY":335.0,"EndX":230.0,"EndY":335.0}]},{"StartTime":119839.0,"Objects":[{"StartTime":119839.0,"EndTime":119839.0,"StartX":280.0,"StartY":309.0,"EndX":280.0,"EndY":309.0}]},{"StartTime":119897.0,"Objects":[{"StartTime":119897.0,"EndTime":119897.0,"StartX":336.0,"StartY":310.0,"EndX":336.0,"EndY":310.0}]},{"StartTime":119954.0,"Objects":[{"StartTime":119954.0,"EndTime":119954.0,"StartX":377.0,"StartY":346.0,"EndX":377.0,"EndY":346.0}]},{"StartTime":120012.0,"Objects":[{"StartTime":120012.0,"EndTime":120012.0,"StartX":425.0,"StartY":374.0,"EndX":425.0,"EndY":374.0}]},{"StartTime":120070.0,"Objects":[{"StartTime":120070.0,"EndTime":120070.0,"StartX":475.0,"StartY":348.0,"EndX":475.0,"EndY":348.0}]},{"StartTime":120127.0,"Objects":[{"StartTime":120127.0,"EndTime":120357.0,"StartX":495.0,"StartY":297.0,"EndX":512.6442,"EndY":110.837456}]},{"StartTime":120474.0,"Objects":[{"StartTime":120474.0,"EndTime":120704.0,"StartX":351.0,"StartY":20.0,"EndX":333.0354,"EndY":206.128}]},{"StartTime":120820.0,"Objects":[{"StartTime":120820.0,"EndTime":120935.0,"StartX":415.0,"StartY":362.0,"EndX":503.085052,"EndY":362.671082}]},{"StartTime":121051.0,"Objects":[{"StartTime":121051.0,"EndTime":121051.0,"StartX":407.0,"StartY":268.0,"EndX":407.0,"EndY":268.0}]},{"StartTime":121166.0,"Objects":[{"StartTime":121166.0,"EndTime":121396.0,"StartX":332.0,"StartY":321.0,"EndX":145.450241,"EndY":308.0313}]},{"StartTime":121512.0,"Objects":[{"StartTime":121512.0,"EndTime":121627.0,"StartX":213.0,"StartY":192.0,"EndX":197.601456,"EndY":105.648872}]},{"StartTime":121743.0,"Objects":[{"StartTime":121743.0,"EndTime":121858.0,"StartX":47.0,"StartY":283.0,"EndX":62.3985329,"EndY":369.351135}]},{"StartTime":121974.0,"Objects":[{"StartTime":121974.0,"EndTime":122204.0,"StartX":213.0,"StartY":192.0,"EndX":26.3879547,"EndY":179.96051}]},{"StartTime":122320.0,"Objects":[{"StartTime":122320.0,"EndTime":122550.0,"StartX":146.0,"StartY":308.0,"EndX":332.544922,"EndY":321.0381}]},{"StartTime":122666.0,"Objects":[{"StartTime":122666.0,"EndTime":122781.0,"StartX":226.0,"StartY":107.0,"EndX":213.894272,"EndY":190.829559}]},{"StartTime":122897.0,"Objects":[{"StartTime":122897.0,"EndTime":122897.0,"StartX":83.0,"StartY":365.0,"EndX":83.0,"EndY":365.0}]},{"StartTime":123012.0,"Objects":[{"StartTime":123012.0,"EndTime":123242.0,"StartX":31.0,"StartY":289.0,"EndX":14.0712194,"EndY":102.76796}]},{"StartTime":123358.0,"Objects":[{"StartTime":123358.0,"EndTime":123473.0,"StartX":214.0,"StartY":192.0,"EndX":128.038635,"EndY":208.01593}]},{"StartTime":123589.0,"Objects":[{"StartTime":123589.0,"EndTime":123704.0,"StartX":303.0,"StartY":114.0,"EndX":388.1753,"EndY":97.07513}]},{"StartTime":123820.0,"Objects":[{"StartTime":123820.0,"EndTime":124050.0,"StartX":498.0,"StartY":293.0,"EndX":311.364166,"EndY":281.335266}]},{"StartTime":124166.0,"Objects":[{"StartTime":124166.0,"EndTime":124396.0,"StartX":214.0,"StartY":192.0,"EndX":400.635834,"EndY":203.664734}]},{"StartTime":124512.0,"Objects":[{"StartTime":124512.0,"EndTime":124627.0,"StartX":278.0,"StartY":344.0,"EndX":241.45549,"EndY":265.492584}]},{"StartTime":124743.0,"Objects":[{"StartTime":124743.0,"EndTime":124743.0,"StartX":408.0,"StartY":48.0,"EndX":408.0,"EndY":48.0}]},{"StartTime":124858.0,"Objects":[{"StartTime":124858.0,"EndTime":125088.0,"StartX":327.0,"StartY":94.0,"EndX":311.058258,"EndY":280.319244}]},{"StartTime":125204.0,"Objects":[{"StartTime":125204.0,"EndTime":125319.0,"StartX":214.0,"StartY":192.0,"EndX":125.519653,"EndY":181.510071}]},{"StartTime":125435.0,"Objects":[{"StartTime":125435.0,"EndTime":125550.0,"StartX":60.0,"StartY":84.0,"EndX":148.480347,"EndY":94.48994}]},{"StartTime":125666.0,"Objects":[{"StartTime":125666.0,"EndTime":125666.0,"StartX":110.0,"StartY":374.0,"EndX":110.0,"EndY":374.0}]},{"StartTime":125781.0,"Objects":[{"StartTime":125781.0,"EndTime":125781.0,"StartX":10.0,"StartY":209.0,"EndX":10.0,"EndY":209.0}]},{"StartTime":125897.0,"Objects":[{"StartTime":125897.0,"EndTime":125897.0,"StartX":184.0,"StartY":284.0,"EndX":184.0,"EndY":284.0}]},{"StartTime":126012.0,"Objects":[{"StartTime":126012.0,"EndTime":126012.0,"StartX":0.0,"StartY":326.0,"EndX":0.0,"EndY":326.0}]},{"StartTime":126127.0,"Objects":[{"StartTime":126127.0,"EndTime":126357.0,"StartX":125.0,"StartY":181.0,"EndX":306.275452,"EndY":213.869308}]},{"StartTime":126474.0,"Objects":[{"StartTime":126474.0,"EndTime":126474.0,"StartX":398.0,"StartY":154.0,"EndX":398.0,"EndY":154.0}]},{"StartTime":126589.0,"Objects":[{"StartTime":126589.0,"EndTime":126762.0,"StartX":398.0,"StartY":154.0,"EndX":351.8152,"EndY":43.3314362}]},{"StartTime":126820.0,"Objects":[{"StartTime":126820.0,"EndTime":127050.0,"StartX":413.0,"StartY":83.0,"EndX":412.996582,"EndY":266.964874}]},{"StartTime":127166.0,"Objects":[{"StartTime":127166.0,"EndTime":127166.0,"StartX":367.0,"StartY":346.0,"EndX":367.0,"EndY":346.0}]},{"StartTime":127281.0,"Objects":[{"StartTime":127281.0,"EndTime":127281.0,"StartX":275.0,"StartY":323.0,"EndX":275.0,"EndY":323.0}]},{"StartTime":127397.0,"Objects":[{"StartTime":127397.0,"EndTime":127397.0,"StartX":195.0,"StartY":372.0,"EndX":195.0,"EndY":372.0}]},{"StartTime":127454.0,"Objects":[{"StartTime":127454.0,"EndTime":127454.0,"StartX":195.0,"StartY":372.0,"EndX":195.0,"EndY":372.0}]},{"StartTime":127512.0,"Objects":[{"StartTime":127512.0,"EndTime":127742.0,"StartX":195.0,"StartY":372.0,"EndX":261.4693,"EndY":228.10495}]},{"StartTime":127858.0,"Objects":[{"StartTime":127858.0,"EndTime":128088.0,"StartX":330.0,"StartY":85.0,"EndX":261.3013,"EndY":228.139435}]},{"StartTime":128204.0,"Objects":[{"StartTime":128204.0,"EndTime":128319.0,"StartX":157.0,"StartY":129.0,"EndX":250.31012,"EndY":134.955963}]},{"StartTime":128435.0,"Objects":[{"StartTime":128435.0,"EndTime":128435.0,"StartX":456.0,"StartY":206.0,"EndX":456.0,"EndY":206.0}]},{"StartTime":128551.0,"Objects":[{"StartTime":128551.0,"EndTime":128781.0,"StartX":394.0,"StartY":273.0,"EndX":207.316452,"EndY":262.125244}]},{"StartTime":128897.0,"Objects":[{"StartTime":128897.0,"EndTime":129012.0,"StartX":298.0,"StartY":358.0,"EndX":387.654083,"EndY":363.742249}]},{"StartTime":129127.0,"Objects":[{"StartTime":129127.0,"EndTime":129242.0,"StartX":303.0,"StartY":177.0,"EndX":213.581131,"EndY":169.7695}]},{"StartTime":129358.0,"Objects":[{"StartTime":129358.0,"EndTime":129588.0,"StartX":20.0,"StartY":270.0,"EndX":206.827255,"EndY":261.964417}]},{"StartTime":129704.0,"Objects":[{"StartTime":129704.0,"EndTime":129934.0,"StartX":303.0,"StartY":177.0,"EndX":116.172745,"EndY":185.035583}]},{"StartTime":130051.0,"Objects":[{"StartTime":130051.0,"EndTime":130166.0,"StartX":22.0,"StartY":90.0,"EndX":108.0569,"EndY":101.989265}]},{"StartTime":130281.0,"Objects":[{"StartTime":130281.0,"EndTime":130281.0,"StartX":206.0,"StartY":261.0,"EndX":206.0,"EndY":261.0}]},{"StartTime":130397.0,"Objects":[{"StartTime":130397.0,"EndTime":130627.0,"StartX":128.0,"StartY":351.0,"EndX":116.280022,"EndY":184.675079}]},{"StartTime":130743.0,"Objects":[{"StartTime":130743.0,"EndTime":130858.0,"StartX":206.0,"StartY":261.0,"EndX":222.803619,"EndY":352.977661}]},{"StartTime":130974.0,"Objects":[{"StartTime":130974.0,"EndTime":131089.0,"StartX":320.0,"StartY":268.0,"EndX":302.505,"EndY":176.151337}]},{"StartTime":131204.0,"Objects":[{"StartTime":131204.0,"EndTime":131434.0,"StartX":236.0,"StartY":21.0,"EndX":222.704208,"EndY":181.71843}]},{"StartTime":131551.0,"Objects":[{"StartTime":131551.0,"EndTime":131781.0,"StartX":368.0,"StartY":330.0,"EndX":379.811676,"EndY":168.8197}]},{"StartTime":131897.0,"Objects":[{"StartTime":131897.0,"EndTime":132012.0,"StartX":285.0,"StartY":84.0,"EndX":302.169983,"EndY":175.909973}]},{"StartTime":132127.0,"Objects":[{"StartTime":132127.0,"EndTime":132127.0,"StartX":256.0,"StartY":337.0,"EndX":256.0,"EndY":337.0}]},{"StartTime":132243.0,"Objects":[{"StartTime":132243.0,"EndTime":132473.0,"StartX":167.0,"StartY":301.0,"EndX":320.004059,"EndY":268.003876}]},{"StartTime":132589.0,"Objects":[{"StartTime":132589.0,"EndTime":132704.0,"StartX":104.0,"StartY":372.0,"EndX":10.6395264,"EndY":367.021637}]},{"StartTime":132820.0,"Objects":[{"StartTime":132820.0,"EndTime":132935.0,"StartX":155.0,"StartY":245.0,"EndX":248.357635,"EndY":239.988129}]},{"StartTime":133051.0,"Objects":[{"StartTime":133051.0,"EndTime":133051.0,"StartX":376.0,"StartY":268.0,"EndX":376.0,"EndY":268.0}]},{"StartTime":133108.0,"Objects":[{"StartTime":133108.0,"EndTime":133108.0,"StartX":363.0,"StartY":249.0,"EndX":363.0,"EndY":249.0}]},{"StartTime":133166.0,"Objects":[{"StartTime":133166.0,"EndTime":133166.0,"StartX":356.0,"StartY":228.0,"EndX":356.0,"EndY":228.0}]},{"StartTime":133224.0,"Objects":[{"StartTime":133224.0,"EndTime":133224.0,"StartX":355.0,"StartY":206.0,"EndX":355.0,"EndY":206.0}]},{"StartTime":133281.0,"Objects":[{"StartTime":133281.0,"EndTime":133281.0,"StartX":360.0,"StartY":184.0,"EndX":360.0,"EndY":184.0}]},{"StartTime":133339.0,"Objects":[{"StartTime":133339.0,"EndTime":133339.0,"StartX":372.0,"StartY":165.0,"EndX":372.0,"EndY":165.0}]},{"StartTime":133397.0,"Objects":[{"StartTime":133397.0,"EndTime":133397.0,"StartX":388.0,"StartY":150.0,"EndX":388.0,"EndY":150.0}]},{"StartTime":133454.0,"Objects":[{"StartTime":133454.0,"EndTime":133454.0,"StartX":408.0,"StartY":140.0,"EndX":408.0,"EndY":140.0}]},{"StartTime":133512.0,"Objects":[{"StartTime":133512.0,"EndTime":133512.0,"StartX":431.0,"StartY":136.0,"EndX":431.0,"EndY":136.0}]},{"StartTime":133743.0,"Objects":[{"StartTime":133743.0,"EndTime":133743.0,"StartX":433.0,"StartY":216.0,"EndX":433.0,"EndY":216.0}]},{"StartTime":133858.0,"Objects":[{"StartTime":133858.0,"EndTime":133858.0,"StartX":433.0,"StartY":216.0,"EndX":433.0,"EndY":216.0}]},{"StartTime":133973.0,"Objects":[{"StartTime":133973.0,"EndTime":133973.0,"StartX":500.0,"StartY":268.0,"EndX":500.0,"EndY":268.0}]},{"StartTime":134031.0,"Objects":[{"StartTime":134031.0,"EndTime":134031.0,"StartX":495.0,"StartY":296.0,"EndX":495.0,"EndY":296.0}]},{"StartTime":134088.0,"Objects":[{"StartTime":134088.0,"EndTime":134088.0,"StartX":490.0,"StartY":324.0,"EndX":490.0,"EndY":324.0}]},{"StartTime":134146.0,"Objects":[{"StartTime":134146.0,"EndTime":134146.0,"StartX":485.0,"StartY":352.0,"EndX":485.0,"EndY":352.0}]},{"StartTime":134204.0,"Objects":[{"StartTime":134204.0,"EndTime":134550.0,"StartX":480.0,"StartY":380.0,"EndX":215.65274,"EndY":306.0783}]},{"StartTime":134666.0,"Objects":[{"StartTime":134666.0,"EndTime":134781.0,"StartX":213.0,"StartY":83.0,"EndX":234.885178,"EndY":167.333}]},{"StartTime":134897.0,"Objects":[{"StartTime":134897.0,"EndTime":135012.0,"StartX":109.0,"StartY":244.0,"EndX":15.55278,"EndY":240.858917}]},{"StartTime":135127.0,"Objects":[{"StartTime":135127.0,"EndTime":135242.0,"StartX":236.0,"StartY":167.0,"EndX":329.4514,"EndY":170.014557}]},{"StartTime":135358.0,"Objects":[{"StartTime":135358.0,"EndTime":135588.0,"StartX":208.0,"StartY":383.0,"EndX":21.13086,"EndY":376.0049}]},{"StartTime":135704.0,"Objects":[{"StartTime":135704.0,"EndTime":135819.0,"StartX":297.0,"StartY":282.0,"EndX":203.584534,"EndY":278.024872}]},{"StartTime":135935.0,"Objects":[{"StartTime":135935.0,"EndTime":136050.0,"StartX":147.0,"StartY":80.0,"EndX":240.451385,"EndY":83.0145645}]},{"StartTime":136166.0,"Objects":[{"StartTime":136166.0,"EndTime":136281.0,"StartX":397.0,"StartY":51.0,"EndX":346.996429,"EndY":130.005646}]},{"StartTime":136397.0,"Objects":[{"StartTime":136397.0,"EndTime":136512.0,"StartX":297.0,"StartY":282.0,"EndX":253.206772,"EndY":199.390045}]},{"StartTime":136627.0,"Objects":[{"StartTime":136627.0,"EndTime":136627.0,"StartX":397.0,"StartY":51.0,"EndX":397.0,"EndY":51.0}]},{"StartTime":136743.0,"Objects":[{"StartTime":136743.0,"EndTime":136858.0,"StartX":502.0,"StartY":166.0,"EndX":408.5486,"EndY":169.014557}]},{"StartTime":136974.0,"Objects":[{"StartTime":136974.0,"EndTime":137089.0,"StartX":297.0,"StartY":282.0,"EndX":390.4514,"EndY":285.014557}]},{"StartTime":137204.0,"Objects":[{"StartTime":137204.0,"EndTime":137319.0,"StartX":296.0,"StartY":151.0,"EndX":202.548615,"EndY":154.014557}]},{"StartTime":137435.0,"Objects":[{"StartTime":137435.0,"EndTime":137550.0,"StartX":89.0,"StartY":242.0,"EndX":182.451385,"EndY":245.014557}]},{"StartTime":137666.0,"Objects":[{"StartTime":137666.0,"EndTime":137896.0,"StartX":220.0,"StartY":337.0,"EndX":33.1213074,"EndY":330.265625}]},{"StartTime":138012.0,"Objects":[{"StartTime":138012.0,"EndTime":138242.0,"StartX":202.0,"StartY":154.0,"EndX":388.9071,"EndY":159.893463}]},{"StartTime":138358.0,"Objects":[{"StartTime":138358.0,"EndTime":138473.0,"StartX":338.0,"StartY":61.0,"EndX":244.584534,"EndY":57.0248756}]},{"StartTime":138589.0,"Objects":[{"StartTime":138589.0,"EndTime":138819.0,"StartX":431.0,"StartY":315.0,"EndX":470.369141,"EndY":244.243286}]},{"StartTime":138935.0,"Objects":[{"StartTime":138935.0,"EndTime":138935.0,"StartX":507.0,"StartY":343.0,"EndX":507.0,"EndY":343.0}]},{"StartTime":139051.0,"Objects":[{"StartTime":139051.0,"EndTime":139281.0,"StartX":507.0,"StartY":343.0,"EndX":325.330963,"EndY":362.970032}]},{"StartTime":139397.0,"Objects":[{"StartTime":139397.0,"EndTime":139397.0,"StartX":177.0,"StartY":244.0,"EndX":177.0,"EndY":244.0}]},{"StartTime":139512.0,"Objects":[{"StartTime":139512.0,"EndTime":139742.0,"StartX":177.0,"StartY":244.0,"EndX":358.669037,"EndY":263.970032}]},{"StartTime":139858.0,"Objects":[{"StartTime":139858.0,"EndTime":139858.0,"StartX":424.0,"StartY":173.0,"EndX":424.0,"EndY":173.0}]},{"StartTime":139974.0,"Objects":[{"StartTime":139974.0,"EndTime":140089.0,"StartX":339.0,"StartY":99.0,"EndX":328.776672,"EndY":6.060585}]},{"StartTime":140204.0,"Objects":[{"StartTime":140204.0,"EndTime":140319.0,"StartX":177.0,"StartY":244.0,"EndX":167.00386,"EndY":151.035889}]},{"StartTime":140435.0,"Objects":[{"StartTime":140435.0,"EndTime":140550.0,"StartX":248.0,"StartY":95.0,"EndX":257.103271,"EndY":188.055786}]},{"StartTime":140666.0,"Objects":[{"StartTime":140666.0,"EndTime":140781.0,"StartX":96.0,"StartY":300.0,"EndX":86.00386,"EndY":207.035889}]},{"StartTime":140897.0,"Objects":[{"StartTime":140897.0,"EndTime":141012.0,"StartX":167.0,"StartY":151.0,"EndX":176.99614,"EndY":243.964111}]},{"StartTime":141127.0,"Objects":[{"StartTime":141127.0,"EndTime":141242.0,"StartX":355.0,"StartY":315.0,"EndX":345.993683,"EndY":221.934784}]},{"StartTime":141358.0,"Objects":[{"StartTime":141358.0,"EndTime":141588.0,"StartX":263.0,"StartY":380.0,"EndX":435.289673,"EndY":347.665344}]},{"StartTime":141704.0,"Objects":[{"StartTime":141704.0,"EndTime":141704.0,"StartX":177.0,"StartY":244.0,"EndX":177.0,"EndY":244.0}]},{"StartTime":141820.0,"Objects":[{"StartTime":141820.0,"EndTime":142050.0,"StartX":177.0,"StartY":244.0,"EndX":4.71032143,"EndY":276.334656}]},{"StartTime":142166.0,"Objects":[{"StartTime":142166.0,"EndTime":142166.0,"StartX":0.0,"StartY":182.0,"EndX":0.0,"EndY":182.0}]},{"StartTime":142281.0,"Objects":[{"StartTime":142281.0,"EndTime":142396.0,"StartX":176.0,"StartY":58.0,"EndX":166.993683,"EndY":151.065216}]},{"StartTime":142512.0,"Objects":[{"StartTime":142512.0,"EndTime":142627.0,"StartX":345.0,"StartY":221.0,"EndX":355.103546,"EndY":128.047485}]},{"StartTime":142743.0,"Objects":[{"StartTime":142743.0,"EndTime":142858.0,"StartX":257.0,"StartY":188.0,"EndX":247.993683,"EndY":281.065216}]},{"StartTime":142974.0,"Objects":[{"StartTime":142974.0,"EndTime":143089.0,"StartX":426.0,"StartY":351.0,"EndX":435.006317,"EndY":257.934784}]},{"StartTime":143204.0,"Objects":[{"StartTime":143204.0,"EndTime":143377.0,"StartX":203.0,"StartY":348.0,"EndX":320.980042,"EndY":313.05484}]},{"StartTime":143435.0,"Objects":[{"StartTime":143435.0,"EndTime":143608.0,"StartX":435.0,"StartY":258.0,"EndX":325.7411,"EndY":224.76}]},{"StartTime":143666.0,"Objects":[{"StartTime":143666.0,"EndTime":143839.0,"StartX":257.0,"StartY":188.0,"EndX":352.8504,"EndY":153.586121}]},{"StartTime":143897.0,"Objects":[{"StartTime":143897.0,"EndTime":144070.0,"StartX":419.0,"StartY":136.0,"EndX":338.0948,"EndY":97.87808}]},{"StartTime":144127.0,"Objects":[{"StartTime":144127.0,"EndTime":144357.0,"StartX":257.0,"StartY":188.0,"EndX":274.917175,"EndY":1.8603363}]},{"StartTime":144474.0,"Objects":[{"StartTime":144474.0,"EndTime":144474.0,"StartX":435.0,"StartY":258.0,"EndX":435.0,"EndY":258.0}]},{"StartTime":144589.0,"Objects":[{"StartTime":144589.0,"EndTime":144819.0,"StartX":435.0,"StartY":258.0,"EndX":452.917175,"EndY":71.86034}]},{"StartTime":144935.0,"Objects":[{"StartTime":144935.0,"EndTime":144935.0,"StartX":149.0,"StartY":337.0,"EndX":149.0,"EndY":337.0}]},{"StartTime":145051.0,"Objects":[{"StartTime":145051.0,"EndTime":145166.0,"StartX":149.0,"StartY":337.0,"EndX":157.864655,"EndY":243.921173}]},{"StartTime":145281.0,"Objects":[{"StartTime":145281.0,"EndTime":145396.0,"StartX":353.0,"StartY":153.0,"EndX":343.165436,"EndY":245.981354}]},{"StartTime":145512.0,"Objects":[{"StartTime":145512.0,"EndTime":145627.0,"StartX":169.0,"StartY":318.0,"EndX":178.381,"EndY":224.9718}]},{"StartTime":145742.0,"Objects":[{"StartTime":145742.0,"EndTime":145857.0,"StartX":332.0,"StartY":171.0,"EndX":322.625,"EndY":264.0288}]},{"StartTime":145974.0,"Objects":[{"StartTime":145974.0,"EndTime":146089.0,"StartX":95.0,"StartY":131.0,"EndX":103.138893,"EndY":37.8549042}]},{"StartTime":146204.0,"Objects":[{"StartTime":146204.0,"EndTime":146319.0,"StartX":247.0,"StartY":76.0,"EndX":237.00386,"EndY":168.964111}]},{"StartTime":146435.0,"Objects":[{"StartTime":146435.0,"EndTime":146550.0,"StartX":166.0,"StartY":150.0,"EndX":175.99614,"EndY":57.03588}]},{"StartTime":146666.0,"Objects":[{"StartTime":146666.0,"EndTime":146781.0,"StartX":318.0,"StartY":95.0,"EndX":308.003845,"EndY":187.964111}]},{"StartTime":146897.0,"Objects":[{"StartTime":146897.0,"EndTime":147012.0,"StartX":475.0,"StartY":319.0,"EndX":465.9648,"EndY":225.937561}]},{"StartTime":147127.0,"Objects":[{"StartTime":147127.0,"EndTime":147242.0,"StartX":322.0,"StartY":263.0,"EndX":331.891,"EndY":355.975342}]},{"StartTime":147358.0,"Objects":[{"StartTime":147358.0,"EndTime":147473.0,"StartX":403.0,"StartY":338.0,"EndX":393.993683,"EndY":244.934784}]},{"StartTime":147589.0,"Objects":[{"StartTime":147589.0,"EndTime":147704.0,"StartX":252.0,"StartY":283.0,"EndX":261.006317,"EndY":376.065216}]},{"StartTime":147820.0,"Objects":[{"StartTime":147820.0,"EndTime":147935.0,"StartX":38.0,"StartY":368.0,"EndX":131.053864,"EndY":358.877075}]},{"StartTime":148050.0,"Objects":[{"StartTime":148050.0,"EndTime":148165.0,"StartX":93.0,"StartY":215.0,"EndX":-0.07436371,"EndY":223.911377}]},{"StartTime":148281.0,"Objects":[{"StartTime":148281.0,"EndTime":148281.0,"StartX":247.0,"StartY":203.0,"EndX":247.0,"EndY":203.0}]},{"StartTime":148397.0,"Objects":[{"StartTime":148397.0,"EndTime":148397.0,"StartX":186.0,"StartY":101.0,"EndX":186.0,"EndY":101.0}]},{"StartTime":148512.0,"Objects":[{"StartTime":148512.0,"EndTime":148512.0,"StartX":365.0,"StartY":200.0,"EndX":365.0,"EndY":200.0}]},{"StartTime":148627.0,"Objects":[{"StartTime":148627.0,"EndTime":148627.0,"StartX":189.0,"StartY":304.0,"EndX":189.0,"EndY":304.0}]},{"StartTime":148743.0,"Objects":[{"StartTime":148743.0,"EndTime":148743.0,"StartX":237.0,"StartY":20.0,"EndX":237.0,"EndY":20.0}]},{"StartTime":148858.0,"Objects":[{"StartTime":148858.0,"EndTime":148858.0,"StartX":95.0,"StartY":132.0,"EndX":95.0,"EndY":132.0}]},{"StartTime":148916.0,"Objects":[{"StartTime":148916.0,"EndTime":148916.0,"StartX":95.0,"StartY":132.0,"EndX":95.0,"EndY":132.0}]},{"StartTime":148974.0,"Objects":[{"StartTime":148974.0,"EndTime":148974.0,"StartX":95.0,"StartY":132.0,"EndX":95.0,"EndY":132.0}]},{"StartTime":149089.0,"Objects":[{"StartTime":149089.0,"EndTime":149089.0,"StartX":276.0,"StartY":126.0,"EndX":276.0,"EndY":126.0}]},{"StartTime":149204.0,"Objects":[{"StartTime":149204.0,"EndTime":149204.0,"StartX":125.0,"StartY":24.0,"EndX":125.0,"EndY":24.0}]},{"StartTime":149320.0,"Objects":[{"StartTime":149320.0,"EndTime":149320.0,"StartX":189.0,"StartY":196.0,"EndX":189.0,"EndY":196.0}]},{"StartTime":149435.0,"Objects":[{"StartTime":149435.0,"EndTime":149435.0,"StartX":361.0,"StartY":132.0,"EndX":361.0,"EndY":132.0}]},{"StartTime":149551.0,"Objects":[{"StartTime":149551.0,"EndTime":149551.0,"StartX":425.0,"StartY":304.0,"EndX":425.0,"EndY":304.0}]},{"StartTime":149666.0,"Objects":[{"StartTime":149666.0,"EndTime":150358.0,"StartX":330.0,"StartY":357.0,"EndX":78.3954544,"EndY":327.4413}]},{"StartTime":150589.0,"Objects":[{"StartTime":150589.0,"EndTime":151281.0,"StartX":237.0,"StartY":168.0,"EndX":488.604553,"EndY":138.4413}]},{"StartTime":151512.0,"Objects":[{"StartTime":151512.0,"EndTime":152204.0,"StartX":401.0,"StartY":288.0,"EndX":122.215607,"EndY":257.023956}]},{"StartTime":152320.0,"Objects":[{"StartTime":152320.0,"EndTime":152320.0,"StartX":44.0,"StartY":309.0,"EndX":44.0,"EndY":309.0}]},{"StartTime":152377.0,"Objects":[{"StartTime":152377.0,"EndTime":152377.0,"StartX":44.0,"StartY":309.0,"EndX":44.0,"EndY":309.0}]},{"StartTime":152435.0,"Objects":[{"StartTime":152435.0,"EndTime":152435.0,"StartX":44.0,"StartY":309.0,"EndX":44.0,"EndY":309.0}]},{"StartTime":152551.0,"Objects":[{"StartTime":152551.0,"EndTime":152551.0,"StartX":44.0,"StartY":197.0,"EndX":44.0,"EndY":197.0}]},{"StartTime":152666.0,"Objects":[{"StartTime":152666.0,"EndTime":152666.0,"StartX":151.0,"StartY":162.0,"EndX":151.0,"EndY":162.0}]},{"StartTime":152781.0,"Objects":[{"StartTime":152781.0,"EndTime":152781.0,"StartX":216.0,"StartY":253.0,"EndX":216.0,"EndY":253.0}]},{"StartTime":152897.0,"Objects":[{"StartTime":152897.0,"EndTime":152897.0,"StartX":281.0,"StartY":344.0,"EndX":281.0,"EndY":344.0}]},{"StartTime":153012.0,"Objects":[{"StartTime":153012.0,"EndTime":153012.0,"StartX":388.0,"StartY":309.0,"EndX":388.0,"EndY":309.0}]},{"StartTime":153128.0,"Objects":[{"StartTime":153128.0,"EndTime":153128.0,"StartX":388.0,"StartY":197.0,"EndX":388.0,"EndY":197.0}]},{"StartTime":153243.0,"Objects":[{"StartTime":153243.0,"EndTime":153243.0,"StartX":281.0,"StartY":162.0,"EndX":281.0,"EndY":162.0}]},{"StartTime":153358.0,"Objects":[{"StartTime":153358.0,"EndTime":154050.0,"StartX":216.0,"StartY":253.0,"EndX":495.524353,"EndY":229.625137}]},{"StartTime":154281.0,"Objects":[{"StartTime":154281.0,"EndTime":154973.0,"StartX":296.0,"StartY":131.0,"EndX":16.475647,"EndY":154.374863}]},{"StartTime":155204.0,"Objects":[{"StartTime":155204.0,"EndTime":155896.0,"StartX":148.0,"StartY":338.0,"EndX":427.558441,"EndY":315.0363}]},{"StartTime":156127.0,"Objects":[{"StartTime":156127.0,"EndTime":156127.0,"StartX":492.0,"StartY":225.0,"EndX":492.0,"EndY":225.0}]},{"StartTime":156185.0,"Objects":[{"StartTime":156185.0,"EndTime":156185.0,"StartX":492.0,"StartY":225.0,"EndX":492.0,"EndY":225.0}]},{"StartTime":156243.0,"Objects":[{"StartTime":156243.0,"EndTime":156243.0,"StartX":492.0,"StartY":225.0,"EndX":492.0,"EndY":225.0}]},{"StartTime":156358.0,"Objects":[{"StartTime":156358.0,"EndTime":156358.0,"StartX":320.0,"StartY":168.0,"EndX":320.0,"EndY":168.0}]},{"StartTime":156474.0,"Objects":[{"StartTime":156474.0,"EndTime":156474.0,"StartX":427.0,"StartY":315.0,"EndX":427.0,"EndY":315.0}]},{"StartTime":156531.0,"Objects":[{"StartTime":156531.0,"EndTime":156531.0,"StartX":427.0,"StartY":315.0,"EndX":427.0,"EndY":315.0}]},{"StartTime":156589.0,"Objects":[{"StartTime":156589.0,"EndTime":156589.0,"StartX":427.0,"StartY":315.0,"EndX":427.0,"EndY":315.0}]},{"StartTime":156704.0,"Objects":[{"StartTime":156704.0,"EndTime":156704.0,"StartX":427.0,"StartY":133.0,"EndX":427.0,"EndY":133.0}]},{"StartTime":156820.0,"Objects":[{"StartTime":156820.0,"EndTime":156820.0,"StartX":320.0,"StartY":280.0,"EndX":320.0,"EndY":280.0}]},{"StartTime":156935.0,"Objects":[{"StartTime":156935.0,"EndTime":156935.0,"StartX":492.0,"StartY":225.0,"EndX":492.0,"EndY":225.0}]},{"StartTime":157051.0,"Objects":[{"StartTime":157051.0,"EndTime":157743.0,"StartX":320.0,"StartY":280.0,"EndX":49.3783264,"EndY":321.50528}]},{"StartTime":157974.0,"Objects":[{"StartTime":157974.0,"EndTime":158666.0,"StartX":0.0,"StartY":138.0,"EndX":189.926224,"EndY":191.60849}]},{"StartTime":158897.0,"Objects":[{"StartTime":158897.0,"EndTime":159589.0,"StartX":281.0,"StartY":344.0,"EndX":311.976044,"EndY":65.21561}]},{"StartTime":159704.0,"Objects":[{"StartTime":159704.0,"EndTime":159704.0,"StartX":419.0,"StartY":30.0,"EndX":419.0,"EndY":30.0}]},{"StartTime":159762.0,"Objects":[{"StartTime":159762.0,"EndTime":159762.0,"StartX":419.0,"StartY":30.0,"EndX":419.0,"EndY":30.0}]},{"StartTime":159820.0,"Objects":[{"StartTime":159820.0,"EndTime":159820.0,"StartX":419.0,"StartY":30.0,"EndX":419.0,"EndY":30.0}]},{"StartTime":159935.0,"Objects":[{"StartTime":159935.0,"EndTime":159935.0,"StartX":484.0,"StartY":121.0,"EndX":484.0,"EndY":121.0}]},{"StartTime":160051.0,"Objects":[{"StartTime":160051.0,"EndTime":160051.0,"StartX":419.0,"StartY":212.0,"EndX":419.0,"EndY":212.0}]},{"StartTime":160166.0,"Objects":[{"StartTime":160166.0,"EndTime":160166.0,"StartX":312.0,"StartY":177.0,"EndX":312.0,"EndY":177.0}]},{"StartTime":160281.0,"Objects":[{"StartTime":160281.0,"EndTime":160281.0,"StartX":312.0,"StartY":65.0,"EndX":312.0,"EndY":65.0}]},{"StartTime":160397.0,"Objects":[{"StartTime":160397.0,"EndTime":160397.0,"StartX":205.0,"StartY":30.0,"EndX":205.0,"EndY":30.0}]},{"StartTime":160513.0,"Objects":[{"StartTime":160513.0,"EndTime":160513.0,"StartX":140.0,"StartY":121.0,"EndX":140.0,"EndY":121.0}]},{"StartTime":160627.0,"Objects":[{"StartTime":160627.0,"EndTime":160627.0,"StartX":206.0,"StartY":210.0,"EndX":206.0,"EndY":210.0}]},{"StartTime":160743.0,"Objects":[{"StartTime":160743.0,"EndTime":160858.0,"StartX":312.0,"StartY":65.0,"EndX":404.320251,"EndY":50.193924}]},{"StartTime":160974.0,"Objects":[{"StartTime":160974.0,"EndTime":161089.0,"StartX":484.0,"StartY":121.0,"EndX":391.679749,"EndY":135.806076}]},{"StartTime":161204.0,"Objects":[{"StartTime":161204.0,"EndTime":161319.0,"StartX":206.0,"StartY":210.0,"EndX":298.320251,"EndY":195.193924}]},{"StartTime":161435.0,"Objects":[{"StartTime":161435.0,"EndTime":161550.0,"StartX":378.0,"StartY":266.0,"EndX":285.679749,"EndY":280.8061}]},{"StartTime":161666.0,"Objects":[{"StartTime":161666.0,"EndTime":161781.0,"StartX":44.0,"StartY":197.0,"EndX":32.89971,"EndY":289.838745}]},{"StartTime":161897.0,"Objects":[{"StartTime":161897.0,"EndTime":162012.0,"StartX":116.0,"StartY":362.0,"EndX":125.99614,"EndY":269.0359}]},{"StartTime":162127.0,"Objects":[{"StartTime":162127.0,"EndTime":162242.0,"StartX":216.0,"StartY":117.0,"EndX":204.899719,"EndY":209.838745}]},{"StartTime":162358.0,"Objects":[{"StartTime":162358.0,"EndTime":162473.0,"StartX":288.0,"StartY":282.0,"EndX":297.996155,"EndY":189.035889}]},{"StartTime":162589.0,"Objects":[{"StartTime":162589.0,"EndTime":162704.0,"StartX":388.0,"StartY":124.0,"EndX":471.636383,"EndY":147.4339}]},{"StartTime":162820.0,"Objects":[{"StartTime":162820.0,"EndTime":162935.0,"StartX":494.0,"StartY":219.0,"EndX":410.363617,"EndY":195.5661}]},{"StartTime":163051.0,"Objects":[{"StartTime":163051.0,"EndTime":163166.0,"StartX":496.0,"StartY":64.0,"EndX":472.107727,"EndY":147.907867}]},{"StartTime":163281.0,"Objects":[{"StartTime":163281.0,"EndTime":163396.0,"StartX":386.0,"StartY":278.0,"EndX":409.233765,"EndY":194.609177}]},{"StartTime":163512.0,"Objects":[{"StartTime":163512.0,"EndTime":163627.0,"StartX":511.0,"StartY":346.0,"EndX":418.102081,"EndY":356.593628}]},{"StartTime":163743.0,"Objects":[{"StartTime":163743.0,"EndTime":163858.0,"StartX":195.0,"StartY":271.0,"EndX":287.9525,"EndY":281.103546}]},{"StartTime":163974.0,"Objects":[{"StartTime":163974.0,"EndTime":164089.0,"StartX":410.0,"StartY":194.0,"EndX":317.102081,"EndY":204.593628}]},{"StartTime":164205.0,"Objects":[{"StartTime":164205.0,"EndTime":164320.0,"StartX":94.0,"StartY":119.0,"EndX":186.952515,"EndY":129.103531}]},{"StartTime":164435.0,"Objects":[{"StartTime":164435.0,"EndTime":164550.0,"StartX":440.0,"StartY":44.0,"EndX":400.919037,"EndY":121.451096}]},{"StartTime":164666.0,"Objects":[{"StartTime":164666.0,"EndTime":164781.0,"StartX":458.0,"StartY":266.0,"EndX":409.400452,"EndY":193.173218}]},{"StartTime":164897.0,"Objects":[{"StartTime":164897.0,"EndTime":165012.0,"StartX":255.0,"StartY":171.0,"EndX":341.989532,"EndY":164.008179}]},{"StartTime":165127.0,"Objects":[{"StartTime":165127.0,"EndTime":165127.0,"StartX":508.0,"StartY":108.0,"EndX":508.0,"EndY":108.0}]},{"StartTime":165243.0,"Objects":[{"StartTime":165243.0,"EndTime":165243.0,"StartX":494.0,"StartY":219.0,"EndX":494.0,"EndY":219.0}]},{"StartTime":165301.0,"Objects":[{"StartTime":165301.0,"EndTime":165301.0,"StartX":494.0,"StartY":219.0,"EndX":494.0,"EndY":219.0}]},{"StartTime":165358.0,"Objects":[{"StartTime":165358.0,"EndTime":165473.0,"StartX":494.0,"StartY":219.0,"EndX":483.075348,"EndY":311.8596}]},{"StartTime":165589.0,"Objects":[{"StartTime":165589.0,"EndTime":165589.0,"StartX":341.0,"StartY":164.0,"EndX":341.0,"EndY":164.0}]},{"StartTime":165704.0,"Objects":[{"StartTime":165704.0,"EndTime":165704.0,"StartX":341.0,"StartY":164.0,"EndX":341.0,"EndY":164.0}]},{"StartTime":165820.0,"Objects":[{"StartTime":165820.0,"EndTime":165820.0,"StartX":306.0,"StartY":264.0,"EndX":306.0,"EndY":264.0}]},{"StartTime":165877.0,"Objects":[{"StartTime":165877.0,"EndTime":165877.0,"StartX":271.0,"StartY":234.0,"EndX":271.0,"EndY":234.0}]},{"StartTime":165935.0,"Objects":[{"StartTime":165935.0,"EndTime":165935.0,"StartX":225.0,"StartY":232.0,"EndX":225.0,"EndY":232.0}]},{"StartTime":165993.0,"Objects":[{"StartTime":165993.0,"EndTime":165993.0,"StartX":188.0,"StartY":258.0,"EndX":188.0,"EndY":258.0}]},{"StartTime":166050.0,"Objects":[{"StartTime":166050.0,"EndTime":166050.0,"StartX":176.0,"StartY":303.0,"EndX":176.0,"EndY":303.0}]},{"StartTime":166108.0,"Objects":[{"StartTime":166108.0,"EndTime":166108.0,"StartX":164.0,"StartY":348.0,"EndX":164.0,"EndY":348.0}]},{"StartTime":166166.0,"Objects":[{"StartTime":166166.0,"EndTime":166166.0,"StartX":127.0,"StartY":374.0,"EndX":127.0,"EndY":374.0}]},{"StartTime":166224.0,"Objects":[{"StartTime":166224.0,"EndTime":166224.0,"StartX":81.0,"StartY":372.0,"EndX":81.0,"EndY":372.0}]},{"StartTime":166281.0,"Objects":[{"StartTime":166281.0,"EndTime":166511.0,"StartX":46.0,"StartY":343.0,"EndX":112.726479,"EndY":221.39711}]},{"StartTime":166627.0,"Objects":[{"StartTime":166627.0,"EndTime":166627.0,"StartX":225.0,"StartY":232.0,"EndX":225.0,"EndY":232.0}]},{"StartTime":166743.0,"Objects":[{"StartTime":166743.0,"EndTime":166973.0,"StartX":225.0,"StartY":232.0,"EndX":253.568863,"EndY":47.19519}]},{"StartTime":167089.0,"Objects":[{"StartTime":167089.0,"EndTime":167089.0,"StartX":150.0,"StartY":1.0,"EndX":150.0,"EndY":1.0}]},{"StartTime":167204.0,"Objects":[{"StartTime":167204.0,"EndTime":167319.0,"StartX":150.0,"StartY":1.0,"EndX":151.753357,"EndY":86.958}]},{"StartTime":167435.0,"Objects":[{"StartTime":167435.0,"EndTime":167608.0,"StartX":235.0,"StartY":165.0,"EndX":374.495239,"EndY":150.469254}]},{"StartTime":167666.0,"Objects":[{"StartTime":167666.0,"EndTime":167781.0,"StartX":426.0,"StartY":172.0,"EndX":332.9248,"EndY":180.902847}]},{"StartTime":167897.0,"Objects":[{"StartTime":167897.0,"EndTime":168012.0,"StartX":223.0,"StartY":301.0,"EndX":315.986267,"EndY":291.211975}]},{"StartTime":168127.0,"Objects":[{"StartTime":168127.0,"EndTime":168357.0,"StartX":476.0,"StartY":116.0,"EndX":352.612549,"EndY":187.116791}]},{"StartTime":168474.0,"Objects":[{"StartTime":168474.0,"EndTime":168704.0,"StartX":425.0,"StartY":314.0,"EndX":424.602539,"EndY":170.914032}]},{"StartTime":168820.0,"Objects":[{"StartTime":168820.0,"EndTime":168935.0,"StartX":280.0,"StartY":170.0,"EndX":315.84964,"EndY":249.782639}]},{"StartTime":169051.0,"Objects":[{"StartTime":169051.0,"EndTime":169166.0,"StartX":352.0,"StartY":356.0,"EndX":259.313049,"EndY":343.6964}]},{"StartTime":169281.0,"Objects":[{"StartTime":169281.0,"EndTime":169396.0,"StartX":122.0,"StartY":225.0,"EndX":214.599686,"EndY":237.944046}]},{"StartTime":169512.0,"Objects":[{"StartTime":169512.0,"EndTime":169627.0,"StartX":425.0,"StartY":171.0,"EndX":332.40033,"EndY":158.055954}]},{"StartTime":169743.0,"Objects":[{"StartTime":169743.0,"EndTime":169743.0,"StartX":200.0,"StartY":91.0,"EndX":200.0,"EndY":91.0}]},{"StartTime":169800.0,"Objects":[{"StartTime":169800.0,"EndTime":169800.0,"StartX":203.0,"StartY":126.0,"EndX":203.0,"EndY":126.0}]},{"StartTime":169858.0,"Objects":[{"StartTime":169858.0,"EndTime":169858.0,"StartX":206.0,"StartY":163.0,"EndX":206.0,"EndY":163.0}]},{"StartTime":169916.0,"Objects":[{"StartTime":169916.0,"EndTime":169916.0,"StartX":211.0,"StartY":201.0,"EndX":211.0,"EndY":201.0}]},{"StartTime":169974.0,"Objects":[{"StartTime":169974.0,"EndTime":170204.0,"StartX":215.0,"StartY":238.0,"EndX":73.0661545,"EndY":306.328583}]},{"StartTime":170320.0,"Objects":[{"StartTime":170320.0,"EndTime":170320.0,"StartX":29.0,"StartY":212.0,"EndX":29.0,"EndY":212.0}]},{"StartTime":170435.0,"Objects":[{"StartTime":170435.0,"EndTime":170665.0,"StartX":29.0,"StartY":212.0,"EndX":54.3065,"EndY":26.7202759}]},{"StartTime":170781.0,"Objects":[{"StartTime":170781.0,"EndTime":170781.0,"StartX":127.0,"StartY":111.0,"EndX":127.0,"EndY":111.0}]},{"StartTime":170897.0,"Objects":[{"StartTime":170897.0,"EndTime":171012.0,"StartX":127.0,"StartY":111.0,"EndX":205.322327,"EndY":145.04599}]},{"StartTime":171127.0,"Objects":[{"StartTime":171127.0,"EndTime":171300.0,"StartX":389.0,"StartY":111.0,"EndX":279.463837,"EndY":169.286285}]},{"StartTime":171358.0,"Objects":[{"StartTime":171358.0,"EndTime":171473.0,"StartX":264.0,"StartY":184.0,"EndX":275.884918,"EndY":276.729767}]},{"StartTime":171589.0,"Objects":[{"StartTime":171589.0,"EndTime":171704.0,"StartX":470.0,"StartY":358.0,"EndX":457.559143,"EndY":265.331421}]},{"StartTime":171820.0,"Objects":[{"StartTime":171820.0,"EndTime":172050.0,"StartX":508.0,"StartY":108.0,"EndX":322.475342,"EndY":99.5452957}]},{"StartTime":172166.0,"Objects":[{"StartTime":172166.0,"EndTime":172166.0,"StartX":214.0,"StartY":201.0,"EndX":214.0,"EndY":201.0}]},{"StartTime":172281.0,"Objects":[{"StartTime":172281.0,"EndTime":172511.0,"StartX":214.0,"StartY":201.0,"EndX":399.6029,"EndY":208.5455}]},{"StartTime":172628.0,"Objects":[{"StartTime":172628.0,"EndTime":172628.0,"StartX":223.0,"StartY":301.0,"EndX":223.0,"EndY":301.0}]},{"StartTime":172743.0,"Objects":[{"StartTime":172743.0,"EndTime":172916.0,"StartX":223.0,"StartY":301.0,"EndX":83.35077,"EndY":288.032562}]},{"StartTime":172974.0,"Objects":[{"StartTime":172974.0,"EndTime":173089.0,"StartX":59.0,"StartY":302.0,"EndX":152.155975,"EndY":310.013428}]},{"StartTime":173204.0,"Objects":[{"StartTime":173204.0,"EndTime":173319.0,"StartX":329.0,"StartY":295.0,"EndX":315.0967,"EndY":381.6435}]},{"StartTime":173435.0,"Objects":[{"StartTime":173435.0,"EndTime":173550.0,"StartX":264.0,"StartY":186.0,"EndX":277.903259,"EndY":99.356514}]},{"StartTime":173666.0,"Objects":[{"StartTime":173666.0,"EndTime":173896.0,"StartX":170.0,"StartY":178.0,"EndX":4.07558155,"EndY":248.999435}]},{"StartTime":174012.0,"Objects":[{"StartTime":174012.0,"EndTime":174012.0,"StartX":203.0,"StartY":99.0,"EndX":203.0,"EndY":99.0}]},{"StartTime":174127.0,"Objects":[{"StartTime":174127.0,"EndTime":174357.0,"StartX":203.0,"StartY":99.0,"EndX":368.4376,"EndY":26.9967422}]},{"StartTime":174474.0,"Objects":[{"StartTime":174474.0,"EndTime":174474.0,"StartX":484.0,"StartY":72.0,"EndX":484.0,"EndY":72.0}]},{"StartTime":174589.0,"Objects":[{"StartTime":174589.0,"EndTime":174819.0,"StartX":484.0,"StartY":72.0,"EndX":457.976868,"EndY":257.177124}]},{"StartTime":174935.0,"Objects":[{"StartTime":174935.0,"EndTime":174935.0,"StartX":361.0,"StartY":315.0,"EndX":361.0,"EndY":315.0}]},{"StartTime":175051.0,"Objects":[{"StartTime":175051.0,"EndTime":175166.0,"StartX":361.0,"StartY":315.0,"EndX":348.052032,"EndY":222.402908}]},{"StartTime":175281.0,"Objects":[{"StartTime":175281.0,"EndTime":175396.0,"StartX":249.0,"StartY":292.0,"EndX":261.933167,"EndY":384.591156}]},{"StartTime":175512.0,"Objects":[{"StartTime":175512.0,"EndTime":175742.0,"StartX":398.0,"StartY":152.0,"EndX":237.310669,"EndY":182.61557}]},{"StartTime":175858.0,"Objects":[{"StartTime":175858.0,"EndTime":175858.0,"StartX":164.0,"StartY":280.0,"EndX":164.0,"EndY":280.0}]},{"StartTime":175974.0,"Objects":[{"StartTime":175974.0,"EndTime":176204.0,"StartX":164.0,"StartY":280.0,"EndX":3.52966261,"EndY":248.588928}]},{"StartTime":176320.0,"Objects":[{"StartTime":176320.0,"EndTime":176320.0,"StartX":237.0,"StartY":182.0,"EndX":237.0,"EndY":182.0}]},{"StartTime":176435.0,"Objects":[{"StartTime":176435.0,"EndTime":176665.0,"StartX":237.0,"StartY":182.0,"EndX":267.121826,"EndY":0.465344548}]},{"StartTime":176781.0,"Objects":[{"StartTime":176781.0,"EndTime":176781.0,"StartX":151.0,"StartY":40.0,"EndX":151.0,"EndY":40.0}]},{"StartTime":176897.0,"Objects":[{"StartTime":176897.0,"EndTime":177012.0,"StartX":0.0,"StartY":156.0,"EndX":93.23626,"EndY":148.982224}]},{"StartTime":177127.0,"Objects":[{"StartTime":177127.0,"EndTime":177242.0,"StartX":164.0,"StartY":280.0,"EndX":70.66135,"EndY":285.4905}]},{"StartTime":177358.0,"Objects":[{"StartTime":177358.0,"EndTime":177358.0,"StartX":208.0,"StartY":145.0,"EndX":208.0,"EndY":145.0}]},{"StartTime":177474.0,"Objects":[{"StartTime":177474.0,"EndTime":177474.0,"StartX":242.0,"StartY":59.0,"EndX":242.0,"EndY":59.0}]},{"StartTime":177589.0,"Objects":[{"StartTime":177589.0,"EndTime":177589.0,"StartX":334.0,"StartY":63.0,"EndX":334.0,"EndY":63.0}]},{"StartTime":177704.0,"Objects":[{"StartTime":177704.0,"EndTime":177704.0,"StartX":358.0,"StartY":154.0,"EndX":358.0,"EndY":154.0}]},{"StartTime":177820.0,"Objects":[{"StartTime":177820.0,"EndTime":177820.0,"StartX":281.0,"StartY":204.0,"EndX":281.0,"EndY":204.0}]},{"StartTime":177935.0,"Objects":[{"StartTime":177935.0,"EndTime":177935.0,"StartX":208.0,"StartY":145.0,"EndX":208.0,"EndY":145.0}]},{"StartTime":178051.0,"Objects":[{"StartTime":178051.0,"EndTime":178051.0,"StartX":129.0,"StartY":196.0,"EndX":129.0,"EndY":196.0}]},{"StartTime":178166.0,"Objects":[{"StartTime":178166.0,"EndTime":178166.0,"StartX":153.0,"StartY":286.0,"EndX":153.0,"EndY":286.0}]},{"StartTime":178281.0,"Objects":[{"StartTime":178281.0,"EndTime":178396.0,"StartX":246.0,"StartY":290.0,"EndX":235.13266,"EndY":382.8663}]},{"StartTime":178512.0,"Objects":[{"StartTime":178512.0,"EndTime":178627.0,"StartX":142.0,"StartY":378.0,"EndX":153.100281,"EndY":285.161255}]},{"StartTime":178743.0,"Objects":[{"StartTime":178743.0,"EndTime":178858.0,"StartX":139.0,"StartY":103.0,"EndX":128.13266,"EndY":195.8663}]},{"StartTime":178974.0,"Objects":[{"StartTime":178974.0,"EndTime":179089.0,"StartX":35.0,"StartY":191.0,"EndX":44.9961433,"EndY":98.03588}]},{"StartTime":179204.0,"Objects":[{"StartTime":179204.0,"EndTime":179319.0,"StartX":139.0,"StartY":103.0,"EndX":224.03212,"EndY":121.828957}]},{"StartTime":179435.0,"Objects":[{"StartTime":179435.0,"EndTime":179550.0,"StartX":362.0,"StartY":179.0,"EndX":277.1364,"EndY":197.853836}]},{"StartTime":179666.0,"Objects":[{"StartTime":179666.0,"EndTime":179666.0,"StartX":392.0,"StartY":365.0,"EndX":392.0,"EndY":365.0}]},{"StartTime":179781.0,"Objects":[{"StartTime":179781.0,"EndTime":179781.0,"StartX":464.0,"StartY":306.0,"EndX":464.0,"EndY":306.0}]},{"StartTime":179839.0,"Objects":[{"StartTime":179839.0,"EndTime":179839.0,"StartX":464.0,"StartY":306.0,"EndX":464.0,"EndY":306.0}]},{"StartTime":179897.0,"Objects":[{"StartTime":179897.0,"EndTime":179897.0,"StartX":464.0,"StartY":306.0,"EndX":464.0,"EndY":306.0}]},{"StartTime":180012.0,"Objects":[{"StartTime":180012.0,"EndTime":180012.0,"StartX":378.0,"StartY":270.0,"EndX":378.0,"EndY":270.0}]},{"StartTime":180127.0,"Objects":[{"StartTime":180127.0,"EndTime":180127.0,"StartX":450.0,"StartY":211.0,"EndX":450.0,"EndY":211.0}]},{"StartTime":180243.0,"Objects":[{"StartTime":180243.0,"EndTime":180243.0,"StartX":362.0,"StartY":179.0,"EndX":362.0,"EndY":179.0}]},{"StartTime":180301.0,"Objects":[{"StartTime":180301.0,"EndTime":180301.0,"StartX":362.0,"StartY":179.0,"EndX":362.0,"EndY":179.0}]},{"StartTime":180358.0,"Objects":[{"StartTime":180358.0,"EndTime":180473.0,"StartX":362.0,"StartY":179.0,"EndX":269.439728,"EndY":165.7771}]},{"StartTime":180589.0,"Objects":[{"StartTime":180589.0,"EndTime":180589.0,"StartX":160.0,"StartY":37.0,"EndX":160.0,"EndY":37.0}]},{"StartTime":180704.0,"Objects":[{"StartTime":180704.0,"EndTime":180704.0,"StartX":105.0,"StartY":123.0,"EndX":105.0,"EndY":123.0}]},{"StartTime":180820.0,"Objects":[{"StartTime":180820.0,"EndTime":180820.0,"StartX":269.0,"StartY":165.0,"EndX":269.0,"EndY":165.0}]},{"StartTime":180935.0,"Objects":[{"StartTime":180935.0,"EndTime":180935.0,"StartX":259.0,"StartY":62.0,"EndX":259.0,"EndY":62.0}]},{"StartTime":181051.0,"Objects":[{"StartTime":181051.0,"EndTime":181281.0,"StartX":172.0,"StartY":203.0,"EndX":200.939163,"EndY":384.393158}]},{"StartTime":181397.0,"Objects":[{"StartTime":181397.0,"EndTime":181397.0,"StartX":121.0,"StartY":328.0,"EndX":121.0,"EndY":328.0}]},{"StartTime":181512.0,"Objects":[{"StartTime":181512.0,"EndTime":181742.0,"StartX":37.0,"StartY":358.0,"EndX":8.060843,"EndY":176.606842}]},{"StartTime":181858.0,"Objects":[{"StartTime":181858.0,"EndTime":181858.0,"StartX":58.0,"StartY":98.0,"EndX":58.0,"EndY":98.0}]},{"StartTime":181974.0,"Objects":[{"StartTime":181974.0,"EndTime":182089.0,"StartX":58.0,"StartY":98.0,"EndX":150.126,"EndY":106.04187}]},{"StartTime":182204.0,"Objects":[{"StartTime":182204.0,"EndTime":182377.0,"StartX":381.0,"StartY":158.0,"EndX":254.1083,"EndY":186.527328}]},{"StartTime":182435.0,"Objects":[{"StartTime":182435.0,"EndTime":182550.0,"StartX":214.0,"StartY":161.0,"EndX":222.465088,"EndY":254.116013}]},{"StartTime":182666.0,"Objects":[{"StartTime":182666.0,"EndTime":182666.0,"StartX":184.0,"StartY":337.0,"EndX":184.0,"EndY":337.0}]},{"StartTime":182781.0,"Objects":[{"StartTime":182781.0,"EndTime":183011.0,"StartX":278.0,"StartY":329.0,"EndX":460.104675,"EndY":344.549866}]},{"StartTime":183127.0,"Objects":[{"StartTime":183127.0,"EndTime":183357.0,"StartX":505.0,"StartY":267.0,"EndX":474.6805,"EndY":82.6349}]},{"StartTime":183474.0,"Objects":[{"StartTime":183474.0,"EndTime":183589.0,"StartX":403.0,"StartY":21.0,"EndX":384.290771,"EndY":108.182526}]},{"StartTime":183704.0,"Objects":[{"StartTime":183704.0,"EndTime":183704.0,"StartX":331.0,"StartY":198.0,"EndX":331.0,"EndY":198.0}]},{"StartTime":183820.0,"Objects":[{"StartTime":183820.0,"EndTime":184050.0,"StartX":287.0,"StartY":106.0,"EndX":124.792366,"EndY":82.3769}]},{"StartTime":184166.0,"Objects":[{"StartTime":184166.0,"EndTime":184166.0,"StartX":90.0,"StartY":168.0,"EndX":90.0,"EndY":168.0}]},{"StartTime":184281.0,"Objects":[{"StartTime":184281.0,"EndTime":184396.0,"StartX":29.0,"StartY":98.0,"EndX":36.2351723,"EndY":5.014922}]},{"StartTime":184512.0,"Objects":[{"StartTime":184512.0,"EndTime":184627.0,"StartX":183.0,"StartY":152.0,"EndX":175.764832,"EndY":244.985077}]},{"StartTime":184743.0,"Objects":[{"StartTime":184743.0,"EndTime":184973.0,"StartX":134.0,"StartY":324.0,"EndX":308.5132,"EndY":304.641235}]},{"StartTime":185089.0,"Objects":[{"StartTime":185089.0,"EndTime":185089.0,"StartX":370.0,"StartY":231.0,"EndX":370.0,"EndY":231.0}]},{"StartTime":185204.0,"Objects":[{"StartTime":185204.0,"EndTime":185434.0,"StartX":357.0,"StartY":132.0,"EndX":182.486786,"EndY":151.358765}]},{"StartTime":185551.0,"Objects":[{"StartTime":185551.0,"EndTime":185551.0,"StartX":102.0,"StartY":104.0,"EndX":102.0,"EndY":104.0}]},{"StartTime":185666.0,"Objects":[{"StartTime":185666.0,"EndTime":185781.0,"StartX":102.0,"StartY":104.0,"EndX":91.49733,"EndY":11.0917435}]},{"StartTime":185897.0,"Objects":[{"StartTime":185897.0,"EndTime":186070.0,"StartX":103.0,"StartY":202.0,"EndX":73.73589,"EndY":331.837036}]},{"StartTime":186127.0,"Objects":[{"StartTime":186127.0,"EndTime":186242.0,"StartX":101.0,"StartY":371.0,"EndX":194.129517,"EndY":362.684875}]},{"StartTime":186358.0,"Objects":[{"StartTime":186358.0,"EndTime":186358.0,"StartX":281.0,"StartY":384.0,"EndX":281.0,"EndY":384.0}]},{"StartTime":186474.0,"Objects":[{"StartTime":186474.0,"EndTime":186704.0,"StartX":254.0,"StartY":295.0,"EndX":233.4666,"EndY":109.158974}]},{"StartTime":186820.0,"Objects":[{"StartTime":186820.0,"EndTime":187050.0,"StartX":274.0,"StartY":29.0,"EndX":433.080933,"EndY":67.00046}]},{"StartTime":187166.0,"Objects":[{"StartTime":187166.0,"EndTime":187166.0,"StartX":509.0,"StartY":130.0,"EndX":509.0,"EndY":130.0}]},{"StartTime":187281.0,"Objects":[{"StartTime":187281.0,"EndTime":187396.0,"StartX":422.0,"StartY":165.0,"EndX":340.965149,"EndY":211.540863}]},{"StartTime":187512.0,"Objects":[{"StartTime":187512.0,"EndTime":187742.0,"StartX":268.0,"StartY":273.0,"EndX":105.566551,"EndY":242.5436}]},{"StartTime":187858.0,"Objects":[{"StartTime":187858.0,"EndTime":187858.0,"StartX":25.0,"StartY":205.0,"EndX":25.0,"EndY":205.0}]},{"StartTime":187974.0,"Objects":[{"StartTime":187974.0,"EndTime":188089.0,"StartX":36.0,"StartY":296.0,"EndX":42.7299232,"EndY":389.257477}]},{"StartTime":188204.0,"Objects":[{"StartTime":188204.0,"EndTime":188319.0,"StartX":95.0,"StartY":151.0,"EndX":88.27008,"EndY":57.7425156}]},{"StartTime":188435.0,"Objects":[{"StartTime":188435.0,"EndTime":188665.0,"StartX":164.0,"StartY":6.0,"EndX":347.91684,"EndY":29.5906925}]},{"StartTime":188781.0,"Objects":[{"StartTime":188781.0,"EndTime":188781.0,"StartX":438.0,"StartY":57.0,"EndX":438.0,"EndY":57.0}]},{"StartTime":188897.0,"Objects":[{"StartTime":188897.0,"EndTime":189127.0,"StartX":367.0,"StartY":123.0,"EndX":183.083176,"EndY":99.4093}]},{"StartTime":189243.0,"Objects":[{"StartTime":189243.0,"EndTime":189243.0,"StartX":95.0,"StartY":151.0,"EndX":95.0,"EndY":151.0}]},{"StartTime":189358.0,"Objects":[{"StartTime":189358.0,"EndTime":189473.0,"StartX":95.0,"StartY":151.0,"EndX":105.123306,"EndY":243.950363}]},{"StartTime":189589.0,"Objects":[{"StartTime":189589.0,"EndTime":189819.0,"StartX":54.0,"StartY":321.0,"EndX":211.608444,"EndY":357.31778}]},{"StartTime":189935.0,"Objects":[{"StartTime":189935.0,"EndTime":189935.0,"StartX":285.0,"StartY":305.0,"EndX":285.0,"EndY":305.0}]},{"StartTime":190051.0,"Objects":[{"StartTime":190051.0,"EndTime":190166.0,"StartX":370.0,"StartY":338.0,"EndX":456.4452,"EndY":316.0075}]},{"StartTime":190281.0,"Objects":[{"StartTime":190281.0,"EndTime":190511.0,"StartX":497.0,"StartY":235.0,"EndX":468.630341,"EndY":50.24517}]},{"StartTime":190627.0,"Objects":[{"StartTime":190627.0,"EndTime":190627.0,"StartX":387.0,"StartY":10.0,"EndX":387.0,"EndY":10.0}]},{"StartTime":190743.0,"Objects":[{"StartTime":190743.0,"EndTime":190858.0,"StartX":387.0,"StartY":10.0,"EndX":377.603363,"EndY":103.026627}]},{"StartTime":190974.0,"Objects":[{"StartTime":190974.0,"EndTime":191089.0,"StartX":294.0,"StartY":258.0,"EndX":303.396637,"EndY":164.973373}]},{"StartTime":191204.0,"Objects":[{"StartTime":191204.0,"EndTime":191434.0,"StartX":291.0,"StartY":73.0,"EndX":133.226776,"EndY":37.35746}]},{"StartTime":191551.0,"Objects":[{"StartTime":191551.0,"EndTime":191551.0,"StartX":110.0,"StartY":126.0,"EndX":110.0,"EndY":126.0}]},{"StartTime":191666.0,"Objects":[{"StartTime":191666.0,"EndTime":191781.0,"StartX":161.0,"StartY":202.0,"EndX":240.658936,"EndY":163.280289}]},{"StartTime":191897.0,"Objects":[{"StartTime":191897.0,"EndTime":192012.0,"StartX":133.0,"StartY":37.0,"EndX":45.915966,"EndY":57.7577744}]},{"StartTime":192127.0,"Objects":[{"StartTime":192127.0,"EndTime":192819.0,"StartX":13.0,"StartY":160.0,"EndX":492.059631,"EndY":209.3214}]},{"StartTime":193051.0,"Objects":[{"StartTime":193051.0,"EndTime":193051.0,"StartX":373.0,"StartY":263.0,"EndX":373.0,"EndY":263.0}]},{"StartTime":193974.0,"Objects":[{"StartTime":193974.0,"EndTime":194666.0,"StartX":13.0,"StartY":224.0,"EndX":492.059631,"EndY":174.6786}]},{"StartTime":194898.0,"Objects":[{"StartTime":194898.0,"EndTime":194898.0,"StartX":373.0,"StartY":121.0,"EndX":373.0,"EndY":121.0}]},{"StartTime":195127.0,"Objects":[{"StartTime":195127.0,"EndTime":195127.0,"StartX":139.0,"StartY":263.0,"EndX":139.0,"EndY":263.0}]},{"StartTime":195358.0,"Objects":[{"StartTime":195358.0,"EndTime":195358.0,"StartX":343.0,"StartY":342.0,"EndX":343.0,"EndY":342.0}]},{"StartTime":195589.0,"Objects":[{"StartTime":195589.0,"EndTime":195704.0,"StartX":373.0,"StartY":121.0,"EndX":361.7968,"EndY":28.1736145}]},{"StartTime":195820.0,"Objects":[{"StartTime":195820.0,"EndTime":195935.0,"StartX":232.0,"StartY":190.0,"EndX":251.556152,"EndY":275.567963}]},{"StartTime":196051.0,"Objects":[{"StartTime":196051.0,"EndTime":196166.0,"StartX":447.0,"StartY":186.0,"EndX":466.890839,"EndY":100.252876}]},{"StartTime":196281.0,"Objects":[{"StartTime":196281.0,"EndTime":196281.0,"StartX":327.0,"StartY":213.0,"EndX":327.0,"EndY":213.0}]},{"StartTime":196397.0,"Objects":[{"StartTime":196397.0,"EndTime":196397.0,"StartX":512.0,"StartY":262.0,"EndX":512.0,"EndY":262.0}]},{"StartTime":196454.0,"Objects":[{"StartTime":196454.0,"EndTime":196454.0,"StartX":496.0,"StartY":271.0,"EndX":496.0,"EndY":271.0}]},{"StartTime":196512.0,"Objects":[{"StartTime":196512.0,"EndTime":196512.0,"StartX":483.0,"StartY":284.0,"EndX":483.0,"EndY":284.0}]},{"StartTime":196570.0,"Objects":[{"StartTime":196570.0,"EndTime":196570.0,"StartX":472.0,"StartY":299.0,"EndX":472.0,"EndY":299.0}]},{"StartTime":196627.0,"Objects":[{"StartTime":196627.0,"EndTime":196627.0,"StartX":463.0,"StartY":316.0,"EndX":463.0,"EndY":316.0}]},{"StartTime":196685.0,"Objects":[{"StartTime":196685.0,"EndTime":196685.0,"StartX":456.0,"StartY":335.0,"EndX":456.0,"EndY":335.0}]},{"StartTime":196743.0,"Objects":[{"StartTime":196743.0,"EndTime":196743.0,"StartX":452.0,"StartY":358.0,"EndX":452.0,"EndY":358.0}]},{"StartTime":196801.0,"Objects":[{"StartTime":196801.0,"EndTime":196801.0,"StartX":426.0,"StartY":322.0,"EndX":426.0,"EndY":322.0}]},{"StartTime":196858.0,"Objects":[{"StartTime":196858.0,"EndTime":196858.0,"StartX":390.0,"StartY":303.0,"EndX":390.0,"EndY":303.0}]},{"StartTime":196916.0,"Objects":[{"StartTime":196916.0,"EndTime":196916.0,"StartX":347.0,"StartY":295.0,"EndX":347.0,"EndY":295.0}]},{"StartTime":196974.0,"Objects":[{"StartTime":196974.0,"EndTime":196974.0,"StartX":303.0,"StartY":298.0,"EndX":303.0,"EndY":298.0}]},{"StartTime":197031.0,"Objects":[{"StartTime":197031.0,"EndTime":197031.0,"StartX":269.0,"StartY":319.0,"EndX":269.0,"EndY":319.0}]},{"StartTime":197089.0,"Objects":[{"StartTime":197089.0,"EndTime":197089.0,"StartX":240.0,"StartY":350.0,"EndX":240.0,"EndY":350.0}]},{"StartTime":197147.0,"Objects":[{"StartTime":197147.0,"EndTime":197147.0,"StartX":199.0,"StartY":361.0,"EndX":199.0,"EndY":361.0}]},{"StartTime":197204.0,"Objects":[{"StartTime":197204.0,"EndTime":197204.0,"StartX":151.0,"StartY":345.0,"EndX":151.0,"EndY":345.0}]},{"StartTime":197262.0,"Objects":[{"StartTime":197262.0,"EndTime":197262.0,"StartX":112.0,"StartY":305.0,"EndX":112.0,"EndY":305.0}]},{"StartTime":197320.0,"Objects":[{"StartTime":197320.0,"EndTime":197320.0,"StartX":104.0,"StartY":251.0,"EndX":104.0,"EndY":251.0}]},{"StartTime":197377.0,"Objects":[{"StartTime":197377.0,"EndTime":197377.0,"StartX":127.0,"StartY":202.0,"EndX":127.0,"EndY":202.0}]},{"StartTime":197435.0,"Objects":[{"StartTime":197435.0,"EndTime":197435.0,"StartX":172.0,"StartY":171.0,"EndX":172.0,"EndY":171.0}]},{"StartTime":197493.0,"Objects":[{"StartTime":197493.0,"EndTime":197493.0,"StartX":226.0,"StartY":173.0,"EndX":226.0,"EndY":173.0}]},{"StartTime":197551.0,"Objects":[{"StartTime":197551.0,"EndTime":197551.0,"StartX":267.0,"StartY":207.0,"EndX":267.0,"EndY":207.0}]},{"StartTime":197608.0,"Objects":[{"StartTime":197608.0,"EndTime":197608.0,"StartX":319.0,"StartY":215.0,"EndX":319.0,"EndY":215.0}]},{"StartTime":197666.0,"Objects":[{"StartTime":197666.0,"EndTime":197896.0,"StartX":364.0,"StartY":185.0,"EndX":383.675659,"EndY":-0.795856953}]},{"StartTime":198012.0,"Objects":[{"StartTime":198012.0,"EndTime":198012.0,"StartX":293.0,"StartY":44.0,"EndX":293.0,"EndY":44.0}]},{"StartTime":198127.0,"Objects":[{"StartTime":198127.0,"EndTime":198357.0,"StartX":464.0,"StartY":131.0,"EndX":444.324158,"EndY":316.795837}]},{"StartTime":198473.0,"Objects":[{"StartTime":198473.0,"EndTime":198473.0,"StartX":364.0,"StartY":185.0,"EndX":364.0,"EndY":185.0}]},{"StartTime":198589.0,"Objects":[{"StartTime":198589.0,"EndTime":198704.0,"StartX":249.0,"StartY":278.0,"EndX":157.693237,"EndY":258.432983}]},{"StartTime":198820.0,"Objects":[{"StartTime":198820.0,"EndTime":198820.0,"StartX":30.0,"StartY":99.0,"EndX":30.0,"EndY":99.0}]},{"StartTime":199051.0,"Objects":[{"StartTime":199051.0,"EndTime":199166.0,"StartX":30.0,"StartY":99.0,"EndX":121.198547,"EndY":78.93929}]},{"StartTime":199281.0,"Objects":[{"StartTime":199281.0,"EndTime":199281.0,"StartX":199.0,"StartY":27.0,"EndX":199.0,"EndY":27.0}]},{"StartTime":199396.0,"Objects":[{"StartTime":199396.0,"EndTime":199396.0,"StartX":113.0,"StartY":175.0,"EndX":113.0,"EndY":175.0}]},{"StartTime":199512.0,"Objects":[{"StartTime":199512.0,"EndTime":199742.0,"StartX":355.0,"StartY":186.0,"EndX":197.701172,"EndY":127.579979}]},{"StartTime":199858.0,"Objects":[{"StartTime":199858.0,"EndTime":199858.0,"StartX":113.0,"StartY":175.0,"EndX":113.0,"EndY":175.0}]},{"StartTime":199974.0,"Objects":[{"StartTime":199974.0,"EndTime":200089.0,"StartX":180.0,"StartY":321.0,"EndX":192.352448,"EndY":228.483368}]},{"StartTime":200204.0,"Objects":[{"StartTime":200204.0,"EndTime":200319.0,"StartX":16.0,"StartY":163.0,"EndX":3.64754772,"EndY":255.516632}]},{"StartTime":200435.0,"Objects":[{"StartTime":200435.0,"EndTime":200435.0,"StartX":86.0,"StartY":315.0,"EndX":86.0,"EndY":315.0}]},{"StartTime":200551.0,"Objects":[{"StartTime":200551.0,"EndTime":200551.0,"StartX":192.0,"StartY":228.0,"EndX":192.0,"EndY":228.0}]},{"StartTime":200666.0,"Objects":[{"StartTime":200666.0,"EndTime":200781.0,"StartX":71.0,"StartY":107.0,"EndX":72.2961349,"EndY":18.71524}]},{"StartTime":200897.0,"Objects":[{"StartTime":200897.0,"EndTime":201012.0,"StartX":268.0,"StartY":190.0,"EndX":266.703857,"EndY":278.28476}]},{"StartTime":201127.0,"Objects":[{"StartTime":201127.0,"EndTime":201242.0,"StartX":86.0,"StartY":200.0,"EndX":178.4856,"EndY":186.264511}]},{"StartTime":201358.0,"Objects":[{"StartTime":201358.0,"EndTime":201588.0,"StartX":512.0,"StartY":85.0,"EndX":351.186523,"EndY":33.4245834}]},{"StartTime":201704.0,"Objects":[{"StartTime":201704.0,"EndTime":201704.0,"StartX":247.0,"StartY":2.0,"EndX":247.0,"EndY":2.0}]},{"StartTime":201820.0,"Objects":[{"StartTime":201820.0,"EndTime":201935.0,"StartX":190.0,"StartY":93.0,"EndX":177.555588,"EndY":185.637482}]},{"StartTime":202051.0,"Objects":[{"StartTime":202051.0,"EndTime":202166.0,"StartX":357.0,"StartY":153.0,"EndX":374.613831,"EndY":244.751144}]},{"StartTime":202281.0,"Objects":[{"StartTime":202281.0,"EndTime":202281.0,"StartX":427.0,"StartY":341.0,"EndX":427.0,"EndY":341.0}]},{"StartTime":202397.0,"Objects":[{"StartTime":202397.0,"EndTime":202397.0,"StartX":449.0,"StartY":182.0,"EndX":449.0,"EndY":182.0}]},{"StartTime":202512.0,"Objects":[{"StartTime":202512.0,"EndTime":202627.0,"StartX":287.0,"StartY":258.0,"EndX":195.426254,"EndY":276.8812}]},{"StartTime":202743.0,"Objects":[{"StartTime":202743.0,"EndTime":202973.0,"StartX":10.0,"StartY":123.0,"EndX":178.229935,"EndY":185.23645}]},{"StartTime":203089.0,"Objects":[{"StartTime":203089.0,"EndTime":203089.0,"StartX":249.0,"StartY":122.0,"EndX":249.0,"EndY":122.0}]},{"StartTime":203204.0,"Objects":[{"StartTime":203204.0,"EndTime":203319.0,"StartX":173.0,"StartY":0.0,"EndX":161.9855,"EndY":92.66878}]},{"StartTime":203435.0,"Objects":[{"StartTime":203435.0,"EndTime":203550.0,"StartX":327.0,"StartY":194.0,"EndX":336.995483,"EndY":101.1419}]},{"StartTime":203666.0,"Objects":[{"StartTime":203666.0,"EndTime":203896.0,"StartX":78.0,"StartY":274.0,"EndX":236.651749,"EndY":230.360184}]},{"StartTime":204012.0,"Objects":[{"StartTime":204012.0,"EndTime":204012.0,"StartX":297.0,"StartY":307.0,"EndX":297.0,"EndY":307.0}]},{"StartTime":204127.0,"Objects":[{"StartTime":204127.0,"EndTime":204242.0,"StartX":379.0,"StartY":366.0,"EndX":389.872437,"EndY":273.252167}]},{"StartTime":204358.0,"Objects":[{"StartTime":204358.0,"EndTime":204358.0,"StartX":327.0,"StartY":194.0,"EndX":327.0,"EndY":194.0}]},{"StartTime":204474.0,"Objects":[{"StartTime":204474.0,"EndTime":204474.0,"StartX":357.0,"StartY":100.0,"EndX":357.0,"EndY":100.0}]},{"StartTime":204589.0,"Objects":[{"StartTime":204589.0,"EndTime":204704.0,"StartX":512.0,"StartY":159.0,"EndX":420.056519,"EndY":175.989563}]},{"StartTime":204820.0,"Objects":[{"StartTime":204820.0,"EndTime":204820.0,"StartX":268.0,"StartY":121.0,"EndX":268.0,"EndY":121.0}]},{"StartTime":204935.0,"Objects":[{"StartTime":204935.0,"EndTime":204935.0,"StartX":385.0,"StartY":12.0,"EndX":385.0,"EndY":12.0}]},{"StartTime":205051.0,"Objects":[{"StartTime":205051.0,"EndTime":205281.0,"StartX":357.0,"StartY":100.0,"EndX":171.487839,"EndY":76.45785}]},{"StartTime":205397.0,"Objects":[{"StartTime":205397.0,"EndTime":205397.0,"StartX":1.0,"StartY":107.0,"EndX":1.0,"EndY":107.0}]},{"StartTime":205512.0,"Objects":[{"StartTime":205512.0,"EndTime":205627.0,"StartX":78.0,"StartY":143.0,"EndX":79.69282,"EndY":55.3405647}]},{"StartTime":205743.0,"Objects":[{"StartTime":205743.0,"EndTime":205858.0,"StartX":1.0,"StartY":291.0,"EndX":-0.692820549,"EndY":378.659424}]},{"StartTime":205974.0,"Objects":[{"StartTime":205974.0,"EndTime":206089.0,"StartX":130.0,"StartY":229.0,"EndX":37.09983,"EndY":218.426}]},{"StartTime":206204.0,"Objects":[{"StartTime":206204.0,"EndTime":206204.0,"StartX":183.0,"StartY":327.0,"EndX":183.0,"EndY":327.0}]},{"StartTime":206320.0,"Objects":[{"StartTime":206320.0,"EndTime":206320.0,"StartX":234.0,"StartY":177.0,"EndX":234.0,"EndY":177.0}]},{"StartTime":206435.0,"Objects":[{"StartTime":206435.0,"EndTime":206665.0,"StartX":286.0,"StartY":277.0,"EndX":455.482452,"EndY":240.731247}]},{"StartTime":206781.0,"Objects":[{"StartTime":206781.0,"EndTime":206781.0,"StartX":425.0,"StartY":123.0,"EndX":425.0,"EndY":123.0}]},{"StartTime":206897.0,"Objects":[{"StartTime":206897.0,"EndTime":207127.0,"StartX":322.0,"StartY":180.0,"EndX":140.309723,"EndY":142.40213}]},{"StartTime":207358.0,"Objects":[{"StartTime":207358.0,"EndTime":207473.0,"StartX":140.0,"StartY":142.0,"EndX":153.4727,"EndY":234.372437}]},{"StartTime":207589.0,"Objects":[{"StartTime":207589.0,"EndTime":207704.0,"StartX":323.0,"StartY":370.0,"EndX":309.527283,"EndY":277.627563}]},{"StartTime":207820.0,"Objects":[{"StartTime":207820.0,"EndTime":208050.0,"StartX":62.0,"StartY":268.0,"EndX":218.93959,"EndY":302.681671}]},{"StartTime":208166.0,"Objects":[{"StartTime":208166.0,"EndTime":208166.0,"StartX":243.0,"StartY":204.0,"EndX":243.0,"EndY":204.0}]},{"StartTime":208281.0,"Objects":[{"StartTime":208281.0,"EndTime":208396.0,"StartX":309.0,"StartY":277.0,"EndX":401.9958,"EndY":286.534271}]},{"StartTime":208512.0,"Objects":[{"StartTime":208512.0,"EndTime":208627.0,"StartX":461.0,"StartY":105.0,"EndX":368.04953,"EndY":94.88924}]},{"StartTime":208743.0,"Objects":[{"StartTime":208743.0,"EndTime":209204.0,"StartX":481.0,"StartY":338.0,"EndX":481.0,"EndY":338.0}]},{"StartTime":209320.0,"Objects":[{"StartTime":209320.0,"EndTime":209320.0,"StartX":323.0,"StartY":370.0,"EndX":323.0,"EndY":370.0}]},{"StartTime":209435.0,"Objects":[{"StartTime":209435.0,"EndTime":209550.0,"StartX":309.0,"StartY":277.0,"EndX":294.111755,"EndY":184.692947}]},{"StartTime":209666.0,"Objects":[{"StartTime":209666.0,"EndTime":209781.0,"StartX":145.0,"StartY":71.0,"EndX":232.516,"EndY":103.912}]},{"StartTime":209897.0,"Objects":[{"StartTime":209897.0,"EndTime":210012.0,"StartX":401.0,"StartY":28.0,"EndX":328.206665,"EndY":86.68034}]},{"StartTime":210127.0,"Objects":[{"StartTime":210127.0,"EndTime":210127.0,"StartX":206.0,"StartY":195.0,"EndX":206.0,"EndY":195.0}]},{"StartTime":210243.0,"Objects":[{"StartTime":210243.0,"EndTime":210243.0,"StartX":263.0,"StartY":16.0,"EndX":263.0,"EndY":16.0}]},{"StartTime":210358.0,"Objects":[{"StartTime":210358.0,"EndTime":210358.0,"StartX":380.0,"StartY":159.0,"EndX":380.0,"EndY":159.0}]},{"StartTime":210589.0,"Objects":[{"StartTime":210589.0,"EndTime":210704.0,"StartX":380.0,"StartY":159.0,"EndX":288.275177,"EndY":141.066971}]},{"StartTime":210820.0,"Objects":[{"StartTime":210820.0,"EndTime":210820.0,"StartX":197.0,"StartY":96.0,"EndX":197.0,"EndY":96.0}]},{"StartTime":210935.0,"Objects":[{"StartTime":210935.0,"EndTime":210935.0,"StartX":116.0,"StartY":158.0,"EndX":116.0,"EndY":158.0}]},{"StartTime":211051.0,"Objects":[{"StartTime":211051.0,"EndTime":211166.0,"StartX":12.0,"StartY":43.0,"EndX":103.829834,"EndY":60.2085228}]},{"StartTime":211281.0,"Objects":[{"StartTime":211281.0,"EndTime":211281.0,"StartX":206.0,"StartY":195.0,"EndX":206.0,"EndY":195.0}]},{"StartTime":211397.0,"Objects":[{"StartTime":211397.0,"EndTime":211397.0,"StartX":278.0,"StartY":43.0,"EndX":278.0,"EndY":43.0}]},{"StartTime":211512.0,"Objects":[{"StartTime":211512.0,"EndTime":211742.0,"StartX":448.0,"StartY":187.0,"EndX":287.3157,"EndY":140.56459}]},{"StartTime":211858.0,"Objects":[{"StartTime":211858.0,"EndTime":211858.0,"StartX":197.0,"StartY":96.0,"EndX":197.0,"EndY":96.0}]},{"StartTime":211974.0,"Objects":[{"StartTime":211974.0,"EndTime":211974.0,"StartX":206.0,"StartY":195.0,"EndX":206.0,"EndY":195.0}]},{"StartTime":212089.0,"Objects":[{"StartTime":212089.0,"EndTime":212089.0,"StartX":353.0,"StartY":85.0,"EndX":353.0,"EndY":85.0}]},{"StartTime":212204.0,"Objects":[{"StartTime":212204.0,"EndTime":212204.0,"StartX":234.0,"StartY":360.0,"EndX":234.0,"EndY":360.0}]},{"StartTime":212320.0,"Objects":[{"StartTime":212320.0,"EndTime":212320.0,"StartX":116.0,"StartY":158.0,"EndX":116.0,"EndY":158.0}]},{"StartTime":212435.0,"Objects":[{"StartTime":212435.0,"EndTime":212665.0,"StartX":320.0,"StartY":269.0,"EndX":504.5984,"EndY":239.321167}]},{"StartTime":212781.0,"Objects":[{"StartTime":212781.0,"EndTime":212781.0,"StartX":456.0,"StartY":334.0,"EndX":456.0,"EndY":334.0}]},{"StartTime":212897.0,"Objects":[{"StartTime":212897.0,"EndTime":213127.0,"StartX":354.0,"StartY":166.0,"EndX":169.401627,"EndY":195.678833}]},{"StartTime":213243.0,"Objects":[{"StartTime":213243.0,"EndTime":213243.0,"StartX":65.0,"StartY":238.0,"EndX":65.0,"EndY":238.0}]},{"StartTime":213358.0,"Objects":[{"StartTime":213358.0,"EndTime":213473.0,"StartX":129.0,"StartY":370.0,"EndX":144.934341,"EndY":277.980225}]},{"StartTime":213589.0,"Objects":[{"StartTime":213589.0,"EndTime":213589.0,"StartX":81.0,"StartY":67.0,"EndX":81.0,"EndY":67.0}]},{"StartTime":213820.0,"Objects":[{"StartTime":213820.0,"EndTime":213935.0,"StartX":81.0,"StartY":67.0,"EndX":96.02034,"EndY":159.207748}]},{"StartTime":214051.0,"Objects":[{"StartTime":214051.0,"EndTime":214051.0,"StartX":60.0,"StartY":324.0,"EndX":60.0,"EndY":324.0}]},{"StartTime":214166.0,"Objects":[{"StartTime":214166.0,"EndTime":214166.0,"StartX":224.0,"StartY":263.0,"EndX":224.0,"EndY":263.0}]},{"StartTime":214281.0,"Objects":[{"StartTime":214281.0,"EndTime":214396.0,"StartX":65.0,"StartY":238.0,"EndX":-28.1450958,"EndY":229.861115}]},{"StartTime":214512.0,"Objects":[{"StartTime":214512.0,"EndTime":214512.0,"StartX":130.0,"StartY":367.0,"EndX":130.0,"EndY":367.0}]},{"StartTime":214628.0,"Objects":[{"StartTime":214628.0,"EndTime":214628.0,"StartX":304.0,"StartY":314.0,"EndX":304.0,"EndY":314.0}]},{"StartTime":214743.0,"Objects":[{"StartTime":214743.0,"EndTime":214858.0,"StartX":224.0,"StartY":263.0,"EndX":221.139755,"EndY":349.521759}]},{"StartTime":214974.0,"Objects":[{"StartTime":214974.0,"EndTime":215089.0,"StartX":366.0,"StartY":147.0,"EndX":368.186127,"EndY":60.66312}]},{"StartTime":215204.0,"Objects":[{"StartTime":215204.0,"EndTime":215204.0,"StartX":204.0,"StartY":176.0,"EndX":204.0,"EndY":176.0}]},{"StartTime":215320.0,"Objects":[{"StartTime":215320.0,"EndTime":215320.0,"StartX":361.0,"StartY":243.0,"EndX":361.0,"EndY":243.0}]},{"StartTime":215435.0,"Objects":[{"StartTime":215435.0,"EndTime":215550.0,"StartX":294.0,"StartY":103.0,"EndX":287.3384,"EndY":196.26239}]},{"StartTime":215666.0,"Objects":[{"StartTime":215666.0,"EndTime":215896.0,"StartX":50.0,"StartY":91.0,"EndX":215.9359,"EndY":49.82467}]},{"StartTime":216012.0,"Objects":[{"StartTime":216012.0,"EndTime":216012.0,"StartX":432.0,"StartY":36.0,"EndX":432.0,"EndY":36.0}]},{"StartTime":216070.0,"Objects":[{"StartTime":216070.0,"EndTime":216070.0,"StartX":432.0,"StartY":36.0,"EndX":432.0,"EndY":36.0}]},{"StartTime":216127.0,"Objects":[{"StartTime":216127.0,"EndTime":216242.0,"StartX":432.0,"StartY":36.0,"EndX":340.248383,"EndY":18.7270851}]},{"StartTime":216358.0,"Objects":[{"StartTime":216358.0,"EndTime":216473.0,"StartX":393.0,"StartY":222.0,"EndX":461.9513,"EndY":159.0376}]},{"StartTime":216589.0,"Objects":[{"StartTime":216589.0,"EndTime":216819.0,"StartX":295.0,"StartY":134.0,"EndX":124.90863,"EndY":191.58371}]},{"StartTime":216935.0,"Objects":[{"StartTime":216935.0,"EndTime":216935.0,"StartX":48.0,"StartY":248.0,"EndX":48.0,"EndY":248.0}]},{"StartTime":217051.0,"Objects":[{"StartTime":217051.0,"EndTime":217166.0,"StartX":18.0,"StartY":62.0,"EndX":39.7845459,"EndY":152.926819}]},{"StartTime":217281.0,"Objects":[{"StartTime":217281.0,"EndTime":217511.0,"StartX":131.0,"StartY":296.0,"EndX":138.325424,"EndY":115.545959}]},{"StartTime":217627.0,"Objects":[{"StartTime":217627.0,"EndTime":217742.0,"StartX":279.0,"StartY":110.0,"EndX":219.329285,"EndY":181.983734}]},{"StartTime":217858.0,"Objects":[{"StartTime":217858.0,"EndTime":217858.0,"StartX":131.0,"StartY":296.0,"EndX":131.0,"EndY":296.0}]},{"StartTime":217974.0,"Objects":[{"StartTime":217974.0,"EndTime":218089.0,"StartX":194.0,"StartY":368.0,"EndX":224.419708,"EndY":284.240326}]},{"StartTime":218204.0,"Objects":[{"StartTime":218204.0,"EndTime":218319.0,"StartX":48.0,"StartY":248.0,"EndX":46.1122551,"EndY":337.2285}]},{"StartTime":218435.0,"Objects":[{"StartTime":218435.0,"EndTime":218550.0,"StartX":274.0,"StartY":225.0,"EndX":294.7216,"EndY":133.825073}]},{"StartTime":218666.0,"Objects":[{"StartTime":218666.0,"EndTime":218781.0,"StartX":2.0,"StartY":80.0,"EndX":22.0704327,"EndY":171.320465}]},{"StartTime":218897.0,"Objects":[{"StartTime":218897.0,"EndTime":219070.0,"StartX":254.0,"StartY":53.0,"EndX":135.86232,"EndY":12.4319439}]},{"StartTime":219127.0,"Objects":[{"StartTime":219127.0,"EndTime":219300.0,"StartX":195.0,"StartY":199.0,"EndX":264.2744,"EndY":138.449768}]},{"StartTime":219358.0,"Objects":[{"StartTime":219358.0,"EndTime":219531.0,"StartX":82.0,"StartY":73.0,"EndX":120.65477,"EndY":180.8838}]},{"StartTime":219589.0,"Objects":[{"StartTime":219589.0,"EndTime":219704.0,"StartX":171.0,"StartY":134.0,"EndX":179.589081,"EndY":78.56141}]},{"StartTime":219820.0,"Objects":[{"StartTime":219820.0,"EndTime":220050.0,"StartX":327.0,"StartY":237.0,"EndX":163.564453,"EndY":269.7495}]},{"StartTime":220166.0,"Objects":[{"StartTime":220166.0,"EndTime":220166.0,"StartX":0.0,"StartY":315.0,"EndX":0.0,"EndY":315.0}]},{"StartTime":220281.0,"Objects":[{"StartTime":220281.0,"EndTime":220396.0,"StartX":71.0,"StartY":260.0,"EndX":75.8352661,"EndY":348.541321}]},{"StartTime":220512.0,"Objects":[{"StartTime":220512.0,"EndTime":220627.0,"StartX":96.0,"StartY":99.0,"EndX":91.1647339,"EndY":10.4586678}]},{"StartTime":220743.0,"Objects":[{"StartTime":220743.0,"EndTime":220858.0,"StartX":121.0,"StartY":182.0,"EndX":28.03209,"EndY":172.039154}]},{"StartTime":220974.0,"Objects":[{"StartTime":220974.0,"EndTime":220974.0,"StartX":161.0,"StartY":53.0,"EndX":161.0,"EndY":53.0}]},{"StartTime":221089.0,"Objects":[{"StartTime":221089.0,"EndTime":221089.0,"StartX":242.0,"StartY":151.0,"EndX":242.0,"EndY":151.0}]},{"StartTime":221204.0,"Objects":[{"StartTime":221204.0,"EndTime":221434.0,"StartX":281.0,"StartY":9.0,"EndX":451.501068,"EndY":42.301693}]},{"StartTime":221551.0,"Objects":[{"StartTime":221551.0,"EndTime":221551.0,"StartX":389.0,"StartY":306.0,"EndX":389.0,"EndY":306.0}]},{"StartTime":221608.0,"Objects":[{"StartTime":221608.0,"EndTime":221608.0,"StartX":389.0,"StartY":306.0,"EndX":389.0,"EndY":306.0}]},{"StartTime":221666.0,"Objects":[{"StartTime":221666.0,"EndTime":221781.0,"StartX":389.0,"StartY":306.0,"EndX":369.661743,"EndY":217.040436}]},{"StartTime":221897.0,"Objects":[{"StartTime":221897.0,"EndTime":222127.0,"StartX":427.0,"StartY":130.0,"EndX":241.097244,"EndY":150.227753}]},{"StartTime":222243.0,"Objects":[{"StartTime":222243.0,"EndTime":222243.0,"StartX":120.0,"StartY":283.0,"EndX":120.0,"EndY":283.0}]},{"StartTime":222358.0,"Objects":[{"StartTime":222358.0,"EndTime":222473.0,"StartX":210.0,"StartY":299.0,"EndX":180.168533,"EndY":210.728531}]},{"StartTime":222589.0,"Objects":[{"StartTime":222589.0,"EndTime":222704.0,"StartX":267.0,"StartY":2.0,"EndX":204.82106,"EndY":71.31101}]},{"StartTime":222820.0,"Objects":[{"StartTime":222820.0,"EndTime":222935.0,"StartX":0.0,"StartY":103.0,"EndX":91.43494,"EndY":120.97924}]},{"StartTime":223051.0,"Objects":[{"StartTime":223051.0,"EndTime":223166.0,"StartX":301.0,"StartY":317.0,"EndX":209.844879,"EndY":297.902832}]},{"StartTime":223281.0,"Objects":[{"StartTime":223281.0,"EndTime":223281.0,"StartX":122.0,"StartY":344.0,"EndX":122.0,"EndY":344.0}]},{"StartTime":223397.0,"Objects":[{"StartTime":223397.0,"EndTime":223397.0,"StartX":180.0,"StartY":210.0,"EndX":180.0,"EndY":210.0}]},{"StartTime":223512.0,"Objects":[{"StartTime":223512.0,"EndTime":223742.0,"StartX":323.0,"StartY":244.0,"EndX":480.961945,"EndY":181.950119}]},{"StartTime":223858.0,"Objects":[{"StartTime":223858.0,"EndTime":224088.0,"StartX":425.0,"StartY":99.0,"EndX":267.038055,"EndY":161.049881}]},{"StartTime":224204.0,"Objects":[{"StartTime":224204.0,"EndTime":224319.0,"StartX":180.0,"StartY":210.0,"EndX":87.12355,"EndY":199.2197}]},{"StartTime":224435.0,"Objects":[{"StartTime":224435.0,"EndTime":224435.0,"StartX":5.0,"StartY":166.0,"EndX":5.0,"EndY":166.0}]},{"StartTime":224551.0,"Objects":[{"StartTime":224551.0,"EndTime":224551.0,"StartX":64.0,"StartY":286.0,"EndX":64.0,"EndY":286.0}]},{"StartTime":224666.0,"Objects":[{"StartTime":224666.0,"EndTime":224781.0,"StartX":154.0,"StartY":124.0,"EndX":158.953,"EndY":36.01687}]},{"StartTime":224897.0,"Objects":[{"StartTime":224897.0,"EndTime":224897.0,"StartX":84.0,"StartY":78.0,"EndX":84.0,"EndY":78.0}]},{"StartTime":225012.0,"Objects":[{"StartTime":225012.0,"EndTime":225012.0,"StartX":241.0,"StartY":118.0,"EndX":241.0,"EndY":118.0}]},{"StartTime":225127.0,"Objects":[{"StartTime":225127.0,"EndTime":225242.0,"StartX":84.0,"StartY":78.0,"EndX":-8.904526,"EndY":88.53557}]},{"StartTime":225358.0,"Objects":[{"StartTime":225358.0,"EndTime":225588.0,"StartX":149.0,"StartY":260.0,"EndX":329.855469,"EndY":271.825836}]},{"StartTime":225704.0,"Objects":[{"StartTime":225704.0,"EndTime":225934.0,"StartX":448.0,"StartY":184.0,"EndX":285.0467,"EndY":197.138382}]},{"StartTime":226051.0,"Objects":[{"StartTime":226051.0,"EndTime":226166.0,"StartX":406.0,"StartY":360.0,"EndX":416.920715,"EndY":267.141541}]},{"StartTime":226281.0,"Objects":[{"StartTime":226281.0,"EndTime":226281.0,"StartX":380.0,"StartY":80.0,"EndX":380.0,"EndY":80.0}]},{"StartTime":226512.0,"Objects":[{"StartTime":226512.0,"EndTime":226512.0,"StartX":380.0,"StartY":80.0,"EndX":380.0,"EndY":80.0}]},{"StartTime":226627.0,"Objects":[{"StartTime":226627.0,"EndTime":226627.0,"StartX":502.0,"StartY":257.0,"EndX":502.0,"EndY":257.0}]},{"StartTime":226743.0,"Objects":[{"StartTime":226743.0,"EndTime":226743.0,"StartX":480.0,"StartY":115.0,"EndX":480.0,"EndY":115.0}]},{"StartTime":226858.0,"Objects":[{"StartTime":226858.0,"EndTime":226858.0,"StartX":396.0,"StartY":231.0,"EndX":396.0,"EndY":231.0}]},{"StartTime":226974.0,"Objects":[{"StartTime":226974.0,"EndTime":226974.0,"StartX":485.0,"StartY":129.0,"EndX":485.0,"EndY":129.0}]},{"StartTime":227089.0,"Objects":[{"StartTime":227089.0,"EndTime":227089.0,"StartX":393.0,"StartY":213.0,"EndX":393.0,"EndY":213.0}]},{"StartTime":227204.0,"Objects":[{"StartTime":227204.0,"EndTime":227896.0,"StartX":439.0,"StartY":171.0,"EndX":299.417358,"EndY":157.334564}]},{"StartTime":228588.0,"Objects":[{"StartTime":228588.0,"EndTime":229049.0,"StartX":299.0,"StartY":157.0,"EndX":278.438263,"EndY":242.273743}]},{"StartTime":229280.0,"Objects":[{"StartTime":229280.0,"EndTime":229741.0,"StartX":422.0,"StartY":93.0,"EndX":407.2133,"EndY":6.2437005}]},{"StartTime":229973.0,"Objects":[{"StartTime":229973.0,"EndTime":229973.0,"StartX":324.0,"StartY":0.0,"EndX":324.0,"EndY":0.0}]},{"StartTime":230204.0,"Objects":[{"StartTime":230204.0,"EndTime":230204.0,"StartX":238.0,"StartY":105.0,"EndX":238.0,"EndY":105.0}]},{"StartTime":230434.0,"Objects":[{"StartTime":230434.0,"EndTime":230434.0,"StartX":172.0,"StartY":136.0,"EndX":172.0,"EndY":136.0}]},{"StartTime":230665.0,"Objects":[{"StartTime":230665.0,"EndTime":230665.0,"StartX":180.0,"StartY":63.0,"EndX":180.0,"EndY":63.0}]},{"StartTime":230896.0,"Objects":[{"StartTime":230896.0,"EndTime":231588.0,"StartX":250.0,"StartY":215.0,"EndX":232.25943,"EndY":354.123444}]},{"StartTime":232280.0,"Objects":[{"StartTime":232280.0,"EndTime":232741.0,"StartX":232.0,"StartY":354.0,"EndX":139.6582,"EndY":368.671143}]},{"StartTime":232973.0,"Objects":[{"StartTime":232973.0,"EndTime":233434.0,"StartX":289.0,"StartY":280.0,"EndX":381.3418,"EndY":294.671143}]},{"StartTime":233665.0,"Objects":[{"StartTime":233665.0,"EndTime":233665.0,"StartX":212.0,"StartY":226.0,"EndX":212.0,"EndY":226.0}]},{"StartTime":233896.0,"Objects":[{"StartTime":233896.0,"EndTime":233896.0,"StartX":356.0,"StartY":119.0,"EndX":356.0,"EndY":119.0}]},{"StartTime":234127.0,"Objects":[{"StartTime":234127.0,"EndTime":234127.0,"StartX":304.0,"StartY":62.0,"EndX":304.0,"EndY":62.0}]},{"StartTime":234357.0,"Objects":[{"StartTime":234357.0,"EndTime":234357.0,"StartX":231.0,"StartY":74.0,"EndX":231.0,"EndY":74.0}]},{"StartTime":234588.0,"Objects":[{"StartTime":234588.0,"EndTime":235280.0,"StartX":73.0,"StartY":213.0,"EndX":212.582657,"EndY":226.665436}]},{"StartTime":235973.0,"Objects":[{"StartTime":235973.0,"EndTime":236434.0,"StartX":213.0,"StartY":227.0,"EndX":233.561722,"EndY":141.726257}]},{"StartTime":236665.0,"Objects":[{"StartTime":236665.0,"EndTime":237126.0,"StartX":90.0,"StartY":291.0,"EndX":104.846085,"EndY":376.903625}]},{"StartTime":237357.0,"Objects":[{"StartTime":237357.0,"EndTime":237587.0,"StartX":209.0,"StartY":330.0,"EndX":163.101791,"EndY":321.1165}]},{"StartTime":237819.0,"Objects":[{"StartTime":237819.0,"EndTime":237819.0,"StartX":122.0,"StartY":166.0,"EndX":122.0,"EndY":166.0}]},{"StartTime":238050.0,"Objects":[{"StartTime":238050.0,"EndTime":238050.0,"StartX":303.0,"StartY":228.0,"EndX":303.0,"EndY":228.0}]},{"StartTime":238280.0,"Objects":[{"StartTime":238280.0,"EndTime":238972.0,"StartX":198.0,"StartY":241.0,"EndX":178.171066,"EndY":116.4422}]},{"StartTime":239204.0,"Objects":[{"StartTime":239204.0,"EndTime":239204.0,"StartX":340.0,"StartY":37.0,"EndX":340.0,"EndY":37.0}]},{"StartTime":239434.0,"Objects":[{"StartTime":239434.0,"EndTime":239434.0,"StartX":402.0,"StartY":74.0,"EndX":402.0,"EndY":74.0}]},{"StartTime":239665.0,"Objects":[{"StartTime":239665.0,"EndTime":239665.0,"StartX":470.0,"StartY":63.0,"EndX":470.0,"EndY":63.0}]},{"StartTime":239896.0,"Objects":[{"StartTime":239896.0,"EndTime":239896.0,"StartX":427.0,"StartY":182.0,"EndX":427.0,"EndY":182.0}]},{"StartTime":240127.0,"Objects":[{"StartTime":240127.0,"EndTime":240127.0,"StartX":497.0,"StartY":206.0,"EndX":497.0,"EndY":206.0}]},{"StartTime":240357.0,"Objects":[{"StartTime":240357.0,"EndTime":240357.0,"StartX":362.0,"StartY":265.0,"EndX":362.0,"EndY":265.0}]},{"StartTime":240588.0,"Objects":[{"StartTime":240588.0,"EndTime":240588.0,"StartX":417.0,"StartY":309.0,"EndX":417.0,"EndY":309.0}]},{"StartTime":240819.0,"Objects":[{"StartTime":240819.0,"EndTime":240819.0,"StartX":429.0,"StartY":379.0,"EndX":429.0,"EndY":379.0}]},{"StartTime":241050.0,"Objects":[{"StartTime":241050.0,"EndTime":241050.0,"StartX":256.0,"StartY":224.0,"EndX":256.0,"EndY":224.0}]},{"StartTime":241280.0,"Objects":[{"StartTime":241280.0,"EndTime":241280.0,"StartX":219.0,"StartY":285.0,"EndX":219.0,"EndY":285.0}]},{"StartTime":241511.0,"Objects":[{"StartTime":241511.0,"EndTime":241511.0,"StartX":184.0,"StartY":198.0,"EndX":184.0,"EndY":198.0}]},{"StartTime":241742.0,"Objects":[{"StartTime":241742.0,"EndTime":241742.0,"StartX":162.0,"StartY":327.0,"EndX":162.0,"EndY":327.0}]},{"StartTime":241973.0,"Objects":[{"StartTime":241973.0,"EndTime":242434.0,"StartX":110.0,"StartY":203.0,"EndX":24.3897762,"EndY":218.017288}]},{"StartTime":242665.0,"Objects":[{"StartTime":242665.0,"EndTime":242895.0,"StartX":140.0,"StartY":135.0,"EndX":147.002945,"EndY":89.82105}]},{"StartTime":243127.0,"Objects":[{"StartTime":243127.0,"EndTime":243127.0,"StartX":96.0,"StartY":37.0,"EndX":96.0,"EndY":37.0}]},{"StartTime":243357.0,"Objects":[{"StartTime":243357.0,"EndTime":243357.0,"StartX":75.0,"StartY":103.0,"EndX":75.0,"EndY":103.0}]},{"StartTime":243588.0,"Objects":[{"StartTime":243588.0,"EndTime":243588.0,"StartX":215.0,"StartY":150.0,"EndX":215.0,"EndY":150.0}]},{"StartTime":243819.0,"Objects":[{"StartTime":243819.0,"EndTime":243819.0,"StartX":322.0,"StartY":47.0,"EndX":322.0,"EndY":47.0}]},{"StartTime":244050.0,"Objects":[{"StartTime":244050.0,"EndTime":244280.0,"StartX":396.0,"StartY":39.0,"EndX":442.3321,"EndY":32.76299}]},{"StartTime":244511.0,"Objects":[{"StartTime":244511.0,"EndTime":244972.0,"StartX":497.0,"StartY":144.0,"EndX":404.039,"EndY":133.9748}]},{"StartTime":245204.0,"Objects":[{"StartTime":245204.0,"EndTime":245204.0,"StartX":335.0,"StartY":257.0,"EndX":335.0,"EndY":257.0}]},{"StartTime":245434.0,"Objects":[{"StartTime":245434.0,"EndTime":246126.0,"StartX":363.0,"StartY":327.0,"EndX":389.61557,"EndY":210.388672}]},{"StartTime":246357.0,"Objects":[{"StartTime":246357.0,"EndTime":246357.0,"StartX":265.0,"StartY":264.0,"EndX":265.0,"EndY":264.0}]},{"StartTime":246588.0,"Objects":[{"StartTime":246588.0,"EndTime":246588.0,"StartX":210.0,"StartY":314.0,"EndX":210.0,"EndY":314.0}]},{"StartTime":246819.0,"Objects":[{"StartTime":246819.0,"EndTime":247049.0,"StartX":140.0,"StartY":294.0,"EndX":131.233368,"EndY":248.422028}]},{"StartTime":247280.0,"Objects":[{"StartTime":247280.0,"EndTime":247280.0,"StartX":91.0,"StartY":67.0,"EndX":91.0,"EndY":67.0}]},{"StartTime":247511.0,"Objects":[{"StartTime":247511.0,"EndTime":247741.0,"StartX":166.0,"StartY":57.0,"EndX":156.782181,"EndY":102.687958}]},{"StartTime":247973.0,"Objects":[{"StartTime":247973.0,"EndTime":248434.0,"StartX":132.0,"StartY":178.0,"EndX":132.0,"EndY":178.0}]},{"StartTime":248665.0,"Objects":[{"StartTime":248665.0,"EndTime":248665.0,"StartX":309.0,"StartY":221.0,"EndX":309.0,"EndY":221.0}]},{"StartTime":248896.0,"Objects":[{"StartTime":248896.0,"EndTime":248896.0,"StartX":379.0,"StartY":95.0,"EndX":379.0,"EndY":95.0}]},{"StartTime":249127.0,"Objects":[{"StartTime":249127.0,"EndTime":249357.0,"StartX":238.0,"StartY":21.0,"EndX":227.795822,"EndY":66.32205}]},{"StartTime":249588.0,"Objects":[{"StartTime":249588.0,"EndTime":249588.0,"StartX":212.0,"StartY":135.0,"EndX":212.0,"EndY":135.0}]},{"StartTime":249819.0,"Objects":[{"StartTime":249819.0,"EndTime":249819.0,"StartX":225.0,"StartY":207.0,"EndX":225.0,"EndY":207.0}]},{"StartTime":250050.0,"Objects":[{"StartTime":250050.0,"EndTime":250280.0,"StartX":356.0,"StartY":282.0,"EndX":366.204163,"EndY":236.677948}]},{"StartTime":250511.0,"Objects":[{"StartTime":250511.0,"EndTime":250511.0,"StartX":382.0,"StartY":168.0,"EndX":382.0,"EndY":168.0}]},{"StartTime":250742.0,"Objects":[{"StartTime":250742.0,"EndTime":251203.0,"StartX":464.0,"StartY":93.0,"EndX":378.75058,"EndY":94.3556}]},{"StartTime":251550.0,"Objects":[{"StartTime":251550.0,"EndTime":251898.0,"StartX":310.0,"StartY":194.0,"EndX":240.3907,"EndY":185.511063}]},{"StartTime":252247.0,"Objects":[{"StartTime":252247.0,"EndTime":252247.0,"StartX":210.0,"StartY":103.0,"EndX":210.0,"EndY":103.0}]},{"StartTime":252702.0,"Objects":[{"StartTime":252702.0,"EndTime":253059.0,"StartX":210.0,"StartY":103.0,"EndX":140.341629,"EndY":111.076332}]},{"StartTime":253506.0,"Objects":[{"StartTime":253506.0,"EndTime":253506.0,"StartX":117.0,"StartY":195.0,"EndX":117.0,"EndY":195.0}]},{"StartTime":254095.0,"Objects":[{"StartTime":254095.0,"EndTime":254661.0,"StartX":117.0,"StartY":195.0,"EndX":47.512825,"EndY":185.563477}]},{"StartTime":255580.0,"Objects":[{"StartTime":255580.0,"EndTime":255580.0,"StartX":19.0,"StartY":113.0,"EndX":19.0,"EndY":113.0}]},{"StartTime":256480.0,"Objects":[{"StartTime":256480.0,"EndTime":257588.0,"StartX":71.0,"StartY":53.0,"EndX":176.631821,"EndY":88.00606}]},{"StartTime":257747.0,"Objects":[{"StartTime":257747.0,"EndTime":258697.0,"StartX":211.0,"StartY":259.0,"EndX":185.032272,"EndY":166.6231}]},{"StartTime":258892.0,"Objects":[{"StartTime":258892.0,"EndTime":263021.0,"StartX":474.0,"StartY":66.0,"EndX":246.531586,"EndY":119.942429}]},{"StartTime":263197.0,"Objects":[{"StartTime":263197.0,"EndTime":263427.0,"StartX":210.0,"StartY":216.0,"EndX":383.317047,"EndY":277.727753}]},{"StartTime":263543.0,"Objects":[{"StartTime":263543.0,"EndTime":263543.0,"StartX":456.0,"StartY":330.0,"EndX":456.0,"EndY":330.0}]},{"StartTime":263658.0,"Objects":[{"StartTime":263658.0,"EndTime":263888.0,"StartX":465.0,"StartY":242.0,"EndX":510.653168,"EndY":60.6925926}]},{"StartTime":264004.0,"Objects":[{"StartTime":264004.0,"EndTime":264004.0,"StartX":425.0,"StartY":84.0,"EndX":425.0,"EndY":84.0}]},{"StartTime":264120.0,"Objects":[{"StartTime":264120.0,"EndTime":264235.0,"StartX":368.0,"StartY":19.0,"EndX":275.061646,"EndY":8.803515}]},{"StartTime":264350.0,"Objects":[{"StartTime":264350.0,"EndTime":264465.0,"StartX":280.0,"StartY":139.0,"EndX":372.9198,"EndY":149.1365}]},{"StartTime":264581.0,"Objects":[{"StartTime":264581.0,"EndTime":264581.0,"StartX":197.0,"StartY":57.0,"EndX":197.0,"EndY":57.0}]},{"StartTime":264697.0,"Objects":[{"StartTime":264697.0,"EndTime":264697.0,"StartX":121.0,"StartY":35.0,"EndX":121.0,"EndY":35.0}]},{"StartTime":264812.0,"Objects":[{"StartTime":264812.0,"EndTime":264812.0,"StartX":50.0,"StartY":67.0,"EndX":50.0,"EndY":67.0}]},{"StartTime":264927.0,"Objects":[{"StartTime":264927.0,"EndTime":264927.0,"StartX":21.0,"StartY":139.0,"EndX":21.0,"EndY":139.0}]},{"StartTime":265043.0,"Objects":[{"StartTime":265043.0,"EndTime":265273.0,"StartX":37.0,"StartY":213.0,"EndX":222.8014,"EndY":233.043991}]},{"StartTime":265389.0,"Objects":[{"StartTime":265389.0,"EndTime":265389.0,"StartX":314.0,"StartY":216.0,"EndX":314.0,"EndY":216.0}]},{"StartTime":265504.0,"Objects":[{"StartTime":265504.0,"EndTime":265734.0,"StartX":283.0,"StartY":308.0,"EndX":126.098457,"EndY":351.288971}]},{"StartTime":265850.0,"Objects":[{"StartTime":265850.0,"EndTime":265850.0,"StartX":57.0,"StartY":295.0,"EndX":57.0,"EndY":295.0}]},{"StartTime":265966.0,"Objects":[{"StartTime":265966.0,"EndTime":266081.0,"StartX":142.0,"StartY":255.0,"EndX":157.97847,"EndY":162.960938}]},{"StartTime":266197.0,"Objects":[{"StartTime":266197.0,"EndTime":266312.0,"StartX":52.0,"StartY":120.0,"EndX":36.021534,"EndY":212.039063}]},{"StartTime":266427.0,"Objects":[{"StartTime":266427.0,"EndTime":266427.0,"StartX":217.0,"StartY":109.0,"EndX":217.0,"EndY":109.0}]},{"StartTime":266543.0,"Objects":[{"StartTime":266543.0,"EndTime":266543.0,"StartX":297.0,"StartY":102.0,"EndX":297.0,"EndY":102.0}]},{"StartTime":266658.0,"Objects":[{"StartTime":266658.0,"EndTime":266658.0,"StartX":368.0,"StartY":138.0,"EndX":368.0,"EndY":138.0}]},{"StartTime":266773.0,"Objects":[{"StartTime":266773.0,"EndTime":266773.0,"StartX":406.0,"StartY":207.0,"EndX":406.0,"EndY":207.0}]},{"StartTime":266889.0,"Objects":[{"StartTime":266889.0,"EndTime":267119.0,"StartX":404.0,"StartY":283.0,"EndX":450.385132,"EndY":101.907463}]},{"StartTime":267235.0,"Objects":[{"StartTime":267235.0,"EndTime":267235.0,"StartX":503.0,"StartY":22.0,"EndX":503.0,"EndY":22.0}]},{"StartTime":267350.0,"Objects":[{"StartTime":267350.0,"EndTime":267465.0,"StartX":411.0,"StartY":13.0,"EndX":318.369415,"EndY":25.6823864}]},{"StartTime":267581.0,"Objects":[{"StartTime":267581.0,"EndTime":267581.0,"StartX":237.0,"StartY":75.0,"EndX":237.0,"EndY":75.0}]},{"StartTime":267697.0,"Objects":[{"StartTime":267697.0,"EndTime":267697.0,"StartX":169.0,"StartY":6.0,"EndX":169.0,"EndY":6.0}]},{"StartTime":267812.0,"Objects":[{"StartTime":267812.0,"EndTime":267927.0,"StartX":148.0,"StartY":102.0,"EndX":160.723953,"EndY":194.627335}]},{"StartTime":268043.0,"Objects":[{"StartTime":268043.0,"EndTime":268158.0,"StartX":333.0,"StartY":216.0,"EndX":320.017151,"EndY":123.410454}]},{"StartTime":268273.0,"Objects":[{"StartTime":268273.0,"EndTime":268273.0,"StartX":63.0,"StartY":146.0,"EndX":63.0,"EndY":146.0}]},{"StartTime":268389.0,"Objects":[{"StartTime":268389.0,"EndTime":268389.0,"StartX":11.0,"StartY":206.0,"EndX":11.0,"EndY":206.0}]},{"StartTime":268504.0,"Objects":[{"StartTime":268504.0,"EndTime":268504.0,"StartX":2.0,"StartY":283.0,"EndX":2.0,"EndY":283.0}]},{"StartTime":268620.0,"Objects":[{"StartTime":268620.0,"EndTime":268620.0,"StartX":36.0,"StartY":352.0,"EndX":36.0,"EndY":352.0}]},{"StartTime":268735.0,"Objects":[{"StartTime":268735.0,"EndTime":268965.0,"StartX":107.0,"StartY":381.0,"EndX":291.10318,"EndY":348.609375}]},{"StartTime":269081.0,"Objects":[{"StartTime":269081.0,"EndTime":269081.0,"StartX":370.0,"StartY":299.0,"EndX":370.0,"EndY":299.0}]},{"StartTime":269197.0,"Objects":[{"StartTime":269197.0,"EndTime":269312.0,"StartX":333.0,"StartY":216.0,"EndX":344.8143,"EndY":123.299355}]},{"StartTime":269427.0,"Objects":[{"StartTime":269427.0,"EndTime":269427.0,"StartX":288.0,"StartY":44.0,"EndX":288.0,"EndY":44.0}]},{"StartTime":269543.0,"Objects":[{"StartTime":269543.0,"EndTime":269543.0,"StartX":368.0,"StartY":2.0,"EndX":368.0,"EndY":2.0}]},{"StartTime":269658.0,"Objects":[{"StartTime":269658.0,"EndTime":269773.0,"StartX":512.0,"StartY":90.0,"EndX":419.4197,"EndY":76.918}]},{"StartTime":269889.0,"Objects":[{"StartTime":269889.0,"EndTime":270004.0,"StartX":173.0,"StartY":113.0,"EndX":265.5803,"EndY":126.082}]},{"StartTime":270120.0,"Objects":[{"StartTime":270120.0,"EndTime":270120.0,"StartX":381.0,"StartY":222.0,"EndX":381.0,"EndY":222.0}]},{"StartTime":270235.0,"Objects":[{"StartTime":270235.0,"EndTime":270235.0,"StartX":306.0,"StartY":244.0,"EndX":306.0,"EndY":244.0}]},{"StartTime":270350.0,"Objects":[{"StartTime":270350.0,"EndTime":270350.0,"StartX":232.0,"StartY":267.0,"EndX":232.0,"EndY":267.0}]},{"StartTime":270466.0,"Objects":[{"StartTime":270466.0,"EndTime":270466.0,"StartX":158.0,"StartY":289.0,"EndX":158.0,"EndY":289.0}]},{"StartTime":270523.0,"Objects":[{"StartTime":270523.0,"EndTime":270523.0,"StartX":154.0,"StartY":280.0,"EndX":154.0,"EndY":280.0}]},{"StartTime":270581.0,"Objects":[{"StartTime":270581.0,"EndTime":270638.0,"StartX":150.0,"StartY":272.0,"EndX":158.515427,"EndY":226.578445}]},{"StartTime":270697.0,"Objects":[{"StartTime":270697.0,"EndTime":270754.0,"StartX":136.0,"StartY":76.0,"EndX":171.398178,"EndY":105.56749}]},{"StartTime":270812.0,"Objects":[{"StartTime":270812.0,"EndTime":270869.0,"StartX":318.0,"StartY":154.0,"EndX":274.58493,"EndY":169.758636}]},{"StartTime":270927.0,"Objects":[{"StartTime":270927.0,"EndTime":271042.0,"StartX":103.0,"StartY":158.0,"EndX":103.0,"EndY":158.0}]},{"StartTime":271158.0,"Objects":[{"StartTime":271158.0,"EndTime":271215.0,"StartX":407.0,"StartY":33.0,"EndX":360.912872,"EndY":25.15538}]},{"StartTime":271273.0,"Objects":[{"StartTime":271273.0,"EndTime":271273.0,"StartX":216.0,"StartY":97.0,"EndX":216.0,"EndY":97.0}]},{"StartTime":271331.0,"Objects":[{"StartTime":271331.0,"EndTime":271331.0,"StartX":221.0,"StartY":91.0,"EndX":221.0,"EndY":91.0}]},{"StartTime":271389.0,"Objects":[{"StartTime":271389.0,"EndTime":271389.0,"StartX":227.0,"StartY":87.0,"EndX":227.0,"EndY":87.0}]},{"StartTime":271447.0,"Objects":[{"StartTime":271447.0,"EndTime":271447.0,"StartX":235.0,"StartY":86.0,"EndX":235.0,"EndY":86.0}]},{"StartTime":271504.0,"Objects":[{"StartTime":271504.0,"EndTime":271619.0,"StartX":243.0,"StartY":87.0,"EndX":274.106384,"EndY":169.12706}]},{"StartTime":271735.0,"Objects":[{"StartTime":271735.0,"EndTime":271735.0,"StartX":389.0,"StartY":311.0,"EndX":389.0,"EndY":311.0}]},{"StartTime":271793.0,"Objects":[{"StartTime":271793.0,"EndTime":271793.0,"StartX":367.0,"StartY":268.0,"EndX":367.0,"EndY":268.0}]},{"StartTime":271850.0,"Objects":[{"StartTime":271850.0,"EndTime":271850.0,"StartX":377.0,"StartY":221.0,"EndX":377.0,"EndY":221.0}]},{"StartTime":271908.0,"Objects":[{"StartTime":271908.0,"EndTime":271908.0,"StartX":417.0,"StartY":190.0,"EndX":417.0,"EndY":190.0}]},{"StartTime":271966.0,"Objects":[{"StartTime":271966.0,"EndTime":272139.0,"StartX":466.0,"StartY":194.0,"EndX":501.0169,"EndY":222.893814}]},{"StartTime":272197.0,"Objects":[{"StartTime":272197.0,"EndTime":272312.0,"StartX":439.0,"StartY":260.0,"EndX":420.1435,"EndY":168.596786}]},{"StartTime":272370.0,"Objects":[{"StartTime":272370.0,"EndTime":272370.0,"StartX":436.0,"StartY":94.0,"EndX":436.0,"EndY":94.0}]},{"StartTime":272427.0,"Objects":[{"StartTime":272427.0,"EndTime":272427.0,"StartX":441.0,"StartY":88.0,"EndX":441.0,"EndY":88.0}]},{"StartTime":272485.0,"Objects":[{"StartTime":272485.0,"EndTime":272485.0,"StartX":391.0,"StartY":121.0,"EndX":391.0,"EndY":121.0}]},{"StartTime":272543.0,"Objects":[{"StartTime":272543.0,"EndTime":272543.0,"StartX":334.0,"StartY":118.0,"EndX":334.0,"EndY":118.0}]},{"StartTime":272600.0,"Objects":[{"StartTime":272600.0,"EndTime":272600.0,"StartX":285.0,"StartY":90.0,"EndX":285.0,"EndY":90.0}]},{"StartTime":272658.0,"Objects":[{"StartTime":272658.0,"EndTime":272658.0,"StartX":262.0,"StartY":39.0,"EndX":262.0,"EndY":39.0}]},{"StartTime":272716.0,"Objects":[{"StartTime":272716.0,"EndTime":272716.0,"StartX":219.0,"StartY":3.0,"EndX":219.0,"EndY":3.0}]},{"StartTime":272773.0,"Objects":[{"StartTime":272773.0,"EndTime":272830.0,"StartX":163.0,"StartY":0.0,"EndX":117.800331,"EndY":11.9395351}]},{"StartTime":272889.0,"Objects":[{"StartTime":272889.0,"EndTime":272889.0,"StartX":13.0,"StartY":60.0,"EndX":13.0,"EndY":60.0}]},{"StartTime":272947.0,"Objects":[{"StartTime":272947.0,"EndTime":272947.0,"StartX":49.0,"StartY":87.0,"EndX":49.0,"EndY":87.0}]},{"StartTime":273004.0,"Objects":[{"StartTime":273004.0,"EndTime":273004.0,"StartX":61.0,"StartY":128.0,"EndX":61.0,"EndY":128.0}]},{"StartTime":273062.0,"Objects":[{"StartTime":273062.0,"EndTime":273062.0,"StartX":53.0,"StartY":174.0,"EndX":53.0,"EndY":174.0}]},{"StartTime":273120.0,"Objects":[{"StartTime":273120.0,"EndTime":273120.0,"StartX":26.0,"StartY":207.0,"EndX":26.0,"EndY":207.0}]},{"StartTime":273177.0,"Objects":[{"StartTime":273177.0,"EndTime":273177.0,"StartX":13.0,"StartY":249.0,"EndX":13.0,"EndY":249.0}]},{"StartTime":273235.0,"Objects":[{"StartTime":273235.0,"EndTime":273292.0,"StartX":21.0,"StartY":291.0,"EndX":32.800724,"EndY":336.2361}]},{"StartTime":273350.0,"Objects":[{"StartTime":273350.0,"EndTime":273350.0,"StartX":126.0,"StartY":380.0,"EndX":126.0,"EndY":380.0}]},{"StartTime":273408.0,"Objects":[{"StartTime":273408.0,"EndTime":273408.0,"StartX":162.0,"StartY":383.0,"EndX":162.0,"EndY":383.0}]},{"StartTime":273466.0,"Objects":[{"StartTime":273466.0,"EndTime":273466.0,"StartX":194.0,"StartY":367.0,"EndX":194.0,"EndY":367.0}]},{"StartTime":273523.0,"Objects":[{"StartTime":273523.0,"EndTime":273523.0,"StartX":213.0,"StartY":339.0,"EndX":213.0,"EndY":339.0}]},{"StartTime":273581.0,"Objects":[{"StartTime":273581.0,"EndTime":273581.0,"StartX":242.0,"StartY":320.0,"EndX":242.0,"EndY":320.0}]},{"StartTime":273639.0,"Objects":[{"StartTime":273639.0,"EndTime":273639.0,"StartX":277.0,"StartY":322.0,"EndX":277.0,"EndY":322.0}]},{"StartTime":273697.0,"Objects":[{"StartTime":273697.0,"EndTime":273697.0,"StartX":307.0,"StartY":345.0,"EndX":307.0,"EndY":345.0}]},{"StartTime":273754.0,"Objects":[{"StartTime":273754.0,"EndTime":273754.0,"StartX":343.0,"StartY":352.0,"EndX":343.0,"EndY":352.0}]},{"StartTime":273812.0,"Objects":[{"StartTime":273812.0,"EndTime":273927.0,"StartX":375.0,"StartY":334.0,"EndX":384.45874,"EndY":241.25322}]},{"StartTime":273985.0,"Objects":[{"StartTime":273985.0,"EndTime":273985.0,"StartX":380.0,"StartY":221.0,"EndX":380.0,"EndY":221.0}]},{"StartTime":274043.0,"Objects":[{"StartTime":274043.0,"EndTime":274158.0,"StartX":370.0,"StartY":203.0,"EndX":462.594574,"EndY":215.980545}]},{"StartTime":274273.0,"Objects":[{"StartTime":274273.0,"EndTime":274388.0,"StartX":263.0,"StartY":211.0,"EndX":170.405426,"EndY":198.019455}]},{"StartTime":274447.0,"Objects":[{"StartTime":274447.0,"EndTime":274447.0,"StartX":103.0,"StartY":234.0,"EndX":103.0,"EndY":234.0}]},{"StartTime":274504.0,"Objects":[{"StartTime":274504.0,"EndTime":274619.0,"StartX":103.0,"StartY":234.0,"EndX":107.0641,"EndY":144.221436}]},{"StartTime":274735.0,"Objects":[{"StartTime":274735.0,"EndTime":274850.0,"StartX":315.0,"StartY":46.0,"EndX":310.935883,"EndY":135.778564}]},{"StartTime":274908.0,"Objects":[{"StartTime":274908.0,"EndTime":274908.0,"StartX":248.0,"StartY":83.0,"EndX":248.0,"EndY":83.0}]},{"StartTime":274966.0,"Objects":[{"StartTime":274966.0,"EndTime":275081.0,"StartX":248.0,"StartY":83.0,"EndX":155.405426,"EndY":70.019455}]},{"StartTime":275197.0,"Objects":[{"StartTime":275197.0,"EndTime":275197.0,"StartX":18.0,"StartY":156.0,"EndX":18.0,"EndY":156.0}]},{"StartTime":275312.0,"Objects":[{"StartTime":275312.0,"EndTime":275312.0,"StartX":115.0,"StartY":326.0,"EndX":115.0,"EndY":326.0}]},{"StartTime":275370.0,"Objects":[{"StartTime":275370.0,"EndTime":275370.0,"StartX":115.0,"StartY":326.0,"EndX":115.0,"EndY":326.0}]},{"StartTime":275427.0,"Objects":[{"StartTime":275427.0,"EndTime":275542.0,"StartX":115.0,"StartY":326.0,"EndX":102.681671,"EndY":233.426346}]},{"StartTime":275658.0,"Objects":[{"StartTime":275658.0,"EndTime":275773.0,"StartX":218.0,"StartY":50.0,"EndX":230.318329,"EndY":142.573654}]},{"StartTime":275889.0,"Objects":[{"StartTime":275889.0,"EndTime":276004.0,"StartX":307.0,"StartY":291.0,"EndX":399.981354,"EndY":281.165436}]},{"StartTime":276062.0,"Objects":[{"StartTime":276062.0,"EndTime":276062.0,"StartX":471.0,"StartY":313.0,"EndX":471.0,"EndY":313.0}]},{"StartTime":276120.0,"Objects":[{"StartTime":276120.0,"EndTime":276523.0,"StartX":471.0,"StartY":313.0,"EndX":475.382782,"EndY":267.408051}]},{"StartTime":276581.0,"Objects":[{"StartTime":276581.0,"EndTime":276984.0,"StartX":372.0,"StartY":161.0,"EndX":367.617218,"EndY":206.591965}]},{"StartTime":277043.0,"Objects":[{"StartTime":277043.0,"EndTime":277043.0,"StartX":446.0,"StartY":195.0,"EndX":446.0,"EndY":195.0}]},{"StartTime":277158.0,"Objects":[{"StartTime":277158.0,"EndTime":277158.0,"StartX":234.0,"StartY":69.0,"EndX":234.0,"EndY":69.0}]},{"StartTime":277273.0,"Objects":[{"StartTime":277273.0,"EndTime":277273.0,"StartX":307.0,"StartY":291.0,"EndX":307.0,"EndY":291.0}]},{"StartTime":277389.0,"Objects":[{"StartTime":277389.0,"EndTime":277389.0,"StartX":495.0,"StartY":131.0,"EndX":495.0,"EndY":131.0}]},{"StartTime":277504.0,"Objects":[{"StartTime":277504.0,"EndTime":277504.0,"StartX":327.0,"StartY":42.0,"EndX":327.0,"EndY":42.0}]},{"StartTime":277562.0,"Objects":[{"StartTime":277562.0,"EndTime":277562.0,"StartX":321.0,"StartY":85.0,"EndX":321.0,"EndY":85.0}]},{"StartTime":277620.0,"Objects":[{"StartTime":277620.0,"EndTime":277620.0,"StartX":303.0,"StartY":124.0,"EndX":303.0,"EndY":124.0}]},{"StartTime":277677.0,"Objects":[{"StartTime":277677.0,"EndTime":277677.0,"StartX":271.0,"StartY":153.0,"EndX":271.0,"EndY":153.0}]},{"StartTime":277735.0,"Objects":[{"StartTime":277735.0,"EndTime":277735.0,"StartX":231.0,"StartY":167.0,"EndX":231.0,"EndY":167.0}]},{"StartTime":277793.0,"Objects":[{"StartTime":277793.0,"EndTime":277793.0,"StartX":188.0,"StartY":170.0,"EndX":188.0,"EndY":170.0}]},{"StartTime":277850.0,"Objects":[{"StartTime":277850.0,"EndTime":277850.0,"StartX":147.0,"StartY":161.0,"EndX":147.0,"EndY":161.0}]},{"StartTime":277908.0,"Objects":[{"StartTime":277908.0,"EndTime":277908.0,"StartX":108.0,"StartY":142.0,"EndX":108.0,"EndY":142.0}]},{"StartTime":277966.0,"Objects":[{"StartTime":277966.0,"EndTime":278196.0,"StartX":80.0,"StartY":111.0,"EndX":15.99887,"EndY":267.260254}]},{"StartTime":278312.0,"Objects":[{"StartTime":278312.0,"EndTime":278542.0,"StartX":84.0,"StartY":330.0,"EndX":265.901367,"EndY":347.336456}]},{"StartTime":278658.0,"Objects":[{"StartTime":278658.0,"EndTime":278773.0,"StartX":351.0,"StartY":312.0,"EndX":441.5425,"EndY":331.41684}]},{"StartTime":278889.0,"Objects":[{"StartTime":278889.0,"EndTime":278889.0,"StartX":277.0,"StartY":257.0,"EndX":277.0,"EndY":257.0}]},{"StartTime":279004.0,"Objects":[{"StartTime":279004.0,"EndTime":279234.0,"StartX":277.0,"StartY":257.0,"EndX":250.534409,"EndY":72.973526}]},{"StartTime":279350.0,"Objects":[{"StartTime":279350.0,"EndTime":279465.0,"StartX":321.0,"StartY":3.0,"EndX":347.2083,"EndY":89.54563}]},{"StartTime":279581.0,"Objects":[{"StartTime":279581.0,"EndTime":279696.0,"StartX":178.0,"StartY":142.0,"EndX":151.791687,"EndY":55.45436}]},{"StartTime":279812.0,"Objects":[{"StartTime":279812.0,"EndTime":280042.0,"StartX":250.0,"StartY":72.0,"EndX":433.910248,"EndY":105.2337}]},{"StartTime":280158.0,"Objects":[{"StartTime":280158.0,"EndTime":280388.0,"StartX":452.0,"StartY":198.0,"EndX":268.089752,"EndY":164.7663}]},{"StartTime":280504.0,"Objects":[{"StartTime":280504.0,"EndTime":280619.0,"StartX":208.0,"StartY":235.0,"EndX":224.649811,"EndY":327.005127}]},{"StartTime":280735.0,"Objects":[{"StartTime":280735.0,"EndTime":280735.0,"StartX":125.0,"StartY":215.0,"EndX":125.0,"EndY":215.0}]},{"StartTime":280850.0,"Objects":[{"StartTime":280850.0,"EndTime":281080.0,"StartX":125.0,"StartY":215.0,"EndX":-12.85116,"EndY":135.932037}]},{"StartTime":281197.0,"Objects":[{"StartTime":281197.0,"EndTime":281312.0,"StartX":62.0,"StartY":10.0,"EndX":67.96667,"EndY":102.776062}]},{"StartTime":281427.0,"Objects":[{"StartTime":281427.0,"EndTime":281542.0,"StartX":189.0,"StartY":148.0,"EndX":193.9514,"EndY":55.2078743}]},{"StartTime":281600.0,"Objects":[{"StartTime":281600.0,"EndTime":281600.0,"StartX":205.0,"StartY":40.0,"EndX":205.0,"EndY":40.0}]},{"StartTime":281658.0,"Objects":[{"StartTime":281658.0,"EndTime":281888.0,"StartX":218.0,"StartY":29.0,"EndX":402.662872,"EndY":58.4550667}]},{"StartTime":282004.0,"Objects":[{"StartTime":282004.0,"EndTime":282234.0,"StartX":489.0,"StartY":32.0,"EndX":508.0971,"EndY":194.481369}]},{"StartTime":282350.0,"Objects":[{"StartTime":282350.0,"EndTime":282465.0,"StartX":424.0,"StartY":242.0,"EndX":412.63028,"EndY":149.281708}]},{"StartTime":282581.0,"Objects":[{"StartTime":282581.0,"EndTime":282581.0,"StartX":491.0,"StartY":313.0,"EndX":491.0,"EndY":313.0}]},{"StartTime":282697.0,"Objects":[{"StartTime":282697.0,"EndTime":282927.0,"StartX":491.0,"StartY":313.0,"EndX":314.45224,"EndY":276.9794}]},{"StartTime":283043.0,"Objects":[{"StartTime":283043.0,"EndTime":283158.0,"StartX":239.0,"StartY":360.0,"EndX":225.275238,"EndY":267.587952}]},{"StartTime":283273.0,"Objects":[{"StartTime":283273.0,"EndTime":283388.0,"StartX":266.0,"StartY":106.0,"EndX":279.724762,"EndY":198.412048}]},{"StartTime":283504.0,"Objects":[{"StartTime":283504.0,"EndTime":283734.0,"StartX":148.0,"StartY":315.0,"EndX":-17.67163,"EndY":292.1858}]},{"StartTime":283850.0,"Objects":[{"StartTime":283850.0,"EndTime":284080.0,"StartX":162.0,"StartY":217.0,"EndX":344.177246,"EndY":174.804657}]},{"StartTime":284197.0,"Objects":[{"StartTime":284197.0,"EndTime":284312.0,"StartX":95.0,"StartY":87.0,"EndX":85.31283,"EndY":179.996826}]},{"StartTime":284427.0,"Objects":[{"StartTime":284427.0,"EndTime":284427.0,"StartX":61.0,"StartY":358.0,"EndX":61.0,"EndY":358.0}]},{"StartTime":284543.0,"Objects":[{"StartTime":284543.0,"EndTime":284543.0,"StartX":61.0,"StartY":358.0,"EndX":61.0,"EndY":358.0}]},{"StartTime":284658.0,"Objects":[{"StartTime":284658.0,"EndTime":284658.0,"StartX":227.0,"StartY":288.0,"EndX":227.0,"EndY":288.0}]},{"StartTime":284773.0,"Objects":[{"StartTime":284773.0,"EndTime":284773.0,"StartX":227.0,"StartY":288.0,"EndX":227.0,"EndY":288.0}]},{"StartTime":284889.0,"Objects":[{"StartTime":284889.0,"EndTime":285062.0,"StartX":159.0,"StartY":375.0,"EndX":140.126938,"EndY":236.02565}]},{"StartTime":285120.0,"Objects":[{"StartTime":285120.0,"EndTime":285293.0,"StartX":216.0,"StartY":73.0,"EndX":182.363892,"EndY":169.107285}]},{"StartTime":285350.0,"Objects":[{"StartTime":285350.0,"EndTime":285580.0,"StartX":121.0,"StartY":113.0,"EndX":305.503845,"EndY":82.54791}]},{"StartTime":285697.0,"Objects":[{"StartTime":285697.0,"EndTime":285927.0,"StartX":377.0,"StartY":144.0,"EndX":415.3728,"EndY":-3.000608}]},{"StartTime":286043.0,"Objects":[{"StartTime":286043.0,"EndTime":286158.0,"StartX":299.0,"StartY":161.0,"EndX":284.9337,"EndY":253.435852}]},{"StartTime":286273.0,"Objects":[{"StartTime":286273.0,"EndTime":286273.0,"StartX":248.0,"StartY":96.0,"EndX":248.0,"EndY":96.0}]},{"StartTime":286389.0,"Objects":[{"StartTime":286389.0,"EndTime":286619.0,"StartX":248.0,"StartY":96.0,"EndX":87.4779053,"EndY":66.9705048}]},{"StartTime":286735.0,"Objects":[{"StartTime":286735.0,"EndTime":286850.0,"StartX":0.0,"StartY":199.0,"EndX":90.79614,"EndY":181.2921}]},{"StartTime":286966.0,"Objects":[{"StartTime":286966.0,"EndTime":287081.0,"StartX":285.0,"StartY":253.0,"EndX":208.507446,"EndY":201.0769}]},{"StartTime":287197.0,"Objects":[{"StartTime":287197.0,"EndTime":287427.0,"StartX":160.0,"StartY":122.0,"EndX":131.3117,"EndY":306.786316}]},{"StartTime":287543.0,"Objects":[{"StartTime":287543.0,"EndTime":287773.0,"StartX":196.0,"StartY":371.0,"EndX":360.606018,"EndY":340.6779}]},{"StartTime":287889.0,"Objects":[{"StartTime":287889.0,"EndTime":288004.0,"StartX":430.0,"StartY":284.0,"EndX":521.7903,"EndY":301.355865}]},{"StartTime":288120.0,"Objects":[{"StartTime":288120.0,"EndTime":288120.0,"StartX":349.0,"StartY":246.0,"EndX":349.0,"EndY":246.0}]},{"StartTime":288235.0,"Objects":[{"StartTime":288235.0,"EndTime":288465.0,"StartX":349.0,"StartY":246.0,"EndX":319.776855,"EndY":61.4960556}]},{"StartTime":288581.0,"Objects":[{"StartTime":288581.0,"EndTime":288696.0,"StartX":382.0,"StartY":5.0,"EndX":474.508667,"EndY":18.5792542}]},{"StartTime":288812.0,"Objects":[{"StartTime":288812.0,"EndTime":288927.0,"StartX":245.0,"StartY":108.0,"EndX":152.491333,"EndY":94.4207458}]},{"StartTime":288985.0,"Objects":[{"StartTime":288985.0,"EndTime":288985.0,"StartX":139.0,"StartY":86.0,"EndX":139.0,"EndY":86.0}]},{"StartTime":289043.0,"Objects":[{"StartTime":289043.0,"EndTime":289273.0,"StartX":124.0,"StartY":78.0,"EndX":81.78579,"EndY":237.990585}]},{"StartTime":289389.0,"Objects":[{"StartTime":289389.0,"EndTime":289619.0,"StartX":29.0,"StartY":315.0,"EndX":212.819092,"EndY":348.812439}]},{"StartTime":289735.0,"Objects":[{"StartTime":289735.0,"EndTime":289850.0,"StartX":301.0,"StartY":334.0,"EndX":286.956635,"EndY":241.579437}]},{"StartTime":289966.0,"Objects":[{"StartTime":289966.0,"EndTime":289966.0,"StartX":195.0,"StartY":82.0,"EndX":195.0,"EndY":82.0}]},{"StartTime":290081.0,"Objects":[{"StartTime":290081.0,"EndTime":290311.0,"StartX":195.0,"StartY":82.0,"EndX":205.152008,"EndY":249.399124}]},{"StartTime":290427.0,"Objects":[{"StartTime":290427.0,"EndTime":290542.0,"StartX":365.0,"StartY":164.0,"EndX":272.528137,"EndY":150.172424}]},{"StartTime":290658.0,"Objects":[{"StartTime":290658.0,"EndTime":290773.0,"StartX":375.0,"StartY":307.0,"EndX":467.471863,"EndY":320.827576}]},{"StartTime":290889.0,"Objects":[{"StartTime":290889.0,"EndTime":291119.0,"StartX":505.0,"StartY":239.0,"EndX":486.800751,"EndY":60.4442558}]},{"StartTime":291235.0,"Objects":[{"StartTime":291235.0,"EndTime":291465.0,"StartX":408.0,"StartY":9.0,"EndX":225.277878,"EndY":46.3209457}]},{"StartTime":291581.0,"Objects":[{"StartTime":291581.0,"EndTime":291696.0,"StartX":155.0,"StartY":110.0,"EndX":62.8730278,"EndY":94.62519}]},{"StartTime":291812.0,"Objects":[{"StartTime":291812.0,"EndTime":292042.0,"StartX":245.0,"StartY":138.0,"EndX":259.524231,"EndY":304.5021}]},{"StartTime":292158.0,"Objects":[{"StartTime":292158.0,"EndTime":292158.0,"StartX":186.0,"StartY":368.0,"EndX":186.0,"EndY":368.0}]},{"StartTime":292273.0,"Objects":[{"StartTime":292273.0,"EndTime":292446.0,"StartX":0.0,"StartY":252.0,"EndX":139.426544,"EndY":236.824326}]},{"StartTime":292504.0,"Objects":[{"StartTime":292504.0,"EndTime":292619.0,"StartX":179.0,"StartY":271.0,"EndX":86.0954742,"EndY":281.535553}]},{"StartTime":292735.0,"Objects":[{"StartTime":292735.0,"EndTime":292850.0,"StartX":43.0,"StartY":150.0,"EndX":135.777985,"EndY":138.402756}]},{"StartTime":292966.0,"Objects":[{"StartTime":292966.0,"EndTime":293196.0,"StartX":378.0,"StartY":221.0,"EndX":218.297974,"EndY":179.556229}]},{"StartTime":293312.0,"Objects":[{"StartTime":293312.0,"EndTime":293312.0,"StartX":132.0,"StartY":54.0,"EndX":132.0,"EndY":54.0}]},{"StartTime":293427.0,"Objects":[{"StartTime":293427.0,"EndTime":293542.0,"StartX":227.0,"StartY":0.0,"EndX":210.002319,"EndY":91.94199}]},{"StartTime":293658.0,"Objects":[{"StartTime":293658.0,"EndTime":293658.0,"StartX":147.0,"StartY":222.0,"EndX":147.0,"EndY":222.0}]},{"StartTime":293773.0,"Objects":[{"StartTime":293773.0,"EndTime":293773.0,"StartX":132.0,"StartY":54.0,"EndX":132.0,"EndY":54.0}]},{"StartTime":293889.0,"Objects":[{"StartTime":293889.0,"EndTime":294004.0,"StartX":285.0,"StartY":131.0,"EndX":377.143,"EndY":145.643051}]},{"StartTime":294120.0,"Objects":[{"StartTime":294120.0,"EndTime":294120.0,"StartX":450.0,"StartY":101.0,"EndX":450.0,"EndY":101.0}]},{"StartTime":294235.0,"Objects":[{"StartTime":294235.0,"EndTime":294235.0,"StartX":363.0,"StartY":231.0,"EndX":363.0,"EndY":231.0}]},{"StartTime":294350.0,"Objects":[{"StartTime":294350.0,"EndTime":294350.0,"StartX":334.0,"StartY":58.0,"EndX":334.0,"EndY":58.0}]},{"StartTime":294466.0,"Objects":[{"StartTime":294466.0,"EndTime":294466.0,"StartX":441.0,"StartY":199.0,"EndX":441.0,"EndY":199.0}]},{"StartTime":294581.0,"Objects":[{"StartTime":294581.0,"EndTime":294754.0,"StartX":303.0,"StartY":296.0,"EndX":257.591858,"EndY":307.120361}]},{"StartTime":294812.0,"Objects":[{"StartTime":294812.0,"EndTime":294985.0,"StartX":204.0,"StartY":367.0,"EndX":158.763885,"EndY":355.19928}]},{"StartTime":295043.0,"Objects":[{"StartTime":295043.0,"EndTime":295043.0,"StartX":80.0,"StartY":363.0,"EndX":80.0,"EndY":363.0}]},{"StartTime":295100.0,"Objects":[{"StartTime":295100.0,"EndTime":295100.0,"StartX":45.0,"StartY":330.0,"EndX":45.0,"EndY":330.0}]},{"StartTime":295158.0,"Objects":[{"StartTime":295158.0,"EndTime":295158.0,"StartX":26.0,"StartY":288.0,"EndX":26.0,"EndY":288.0}]},{"StartTime":295216.0,"Objects":[{"StartTime":295216.0,"EndTime":295216.0,"StartX":18.0,"StartY":242.0,"EndX":18.0,"EndY":242.0}]},{"StartTime":295273.0,"Objects":[{"StartTime":295273.0,"EndTime":295273.0,"StartX":22.0,"StartY":195.0,"EndX":22.0,"EndY":195.0}]},{"StartTime":295331.0,"Objects":[{"StartTime":295331.0,"EndTime":295331.0,"StartX":39.0,"StartY":149.0,"EndX":39.0,"EndY":149.0}]},{"StartTime":295389.0,"Objects":[{"StartTime":295389.0,"EndTime":295389.0,"StartX":71.0,"StartY":111.0,"EndX":71.0,"EndY":111.0}]},{"StartTime":295447.0,"Objects":[{"StartTime":295447.0,"EndTime":295447.0,"StartX":116.0,"StartY":93.0,"EndX":116.0,"EndY":93.0}]},{"StartTime":295504.0,"Objects":[{"StartTime":295504.0,"EndTime":295734.0,"StartX":168.0,"StartY":92.0,"EndX":352.204224,"EndY":124.215088}]},{"StartTime":295850.0,"Objects":[{"StartTime":295850.0,"EndTime":295850.0,"StartX":444.0,"StartY":197.0,"EndX":444.0,"EndY":197.0}]},{"StartTime":295966.0,"Objects":[{"StartTime":295966.0,"EndTime":296196.0,"StartX":338.0,"StartY":248.0,"EndX":153.795792,"EndY":215.784912}]},{"StartTime":296312.0,"Objects":[{"StartTime":296312.0,"EndTime":296312.0,"StartX":54.0,"StartY":275.0,"EndX":54.0,"EndY":275.0}]},{"StartTime":296427.0,"Objects":[{"StartTime":296427.0,"EndTime":296542.0,"StartX":152.0,"StartY":341.0,"EndX":244.270477,"EndY":356.113281}]},{"StartTime":296658.0,"Objects":[{"StartTime":296658.0,"EndTime":296831.0,"StartX":499.0,"StartY":283.0,"EndX":375.8472,"EndY":234.468475}]},{"StartTime":296889.0,"Objects":[{"StartTime":296889.0,"EndTime":297004.0,"StartX":338.0,"StartY":248.0,"EndX":327.5102,"EndY":155.0903}]},{"StartTime":297120.0,"Objects":[{"StartTime":297120.0,"EndTime":297120.0,"StartX":420.0,"StartY":129.0,"EndX":420.0,"EndY":129.0}]},{"StartTime":297235.0,"Objects":[{"StartTime":297235.0,"EndTime":297235.0,"StartX":397.0,"StartY":335.0,"EndX":397.0,"EndY":335.0}]},{"StartTime":297350.0,"Objects":[{"StartTime":297350.0,"EndTime":297580.0,"StartX":240.0,"StartY":266.0,"EndX":62.06865,"EndY":269.751831}]},{"StartTime":297697.0,"Objects":[{"StartTime":297697.0,"EndTime":297927.0,"StartX":143.0,"StartY":23.0,"EndX":320.931335,"EndY":19.2481613}]},{"StartTime":298043.0,"Objects":[{"StartTime":298043.0,"EndTime":298158.0,"StartX":150.0,"StartY":163.0,"EndX":57.6743,"EndY":148.22789}]},{"StartTime":298273.0,"Objects":[{"StartTime":298273.0,"EndTime":298503.0,"StartX":264.0,"StartY":129.0,"EndX":443.095062,"EndY":137.899429}]},{"StartTime":298620.0,"Objects":[{"StartTime":298620.0,"EndTime":298735.0,"StartX":306.0,"StartY":208.0,"EndX":275.675659,"EndY":296.445953}]},{"StartTime":298850.0,"Objects":[{"StartTime":298850.0,"EndTime":298850.0,"StartX":443.0,"StartY":137.0,"EndX":443.0,"EndY":137.0}]},{"StartTime":298966.0,"Objects":[{"StartTime":298966.0,"EndTime":298966.0,"StartX":321.0,"StartY":20.0,"EndX":321.0,"EndY":20.0}]},{"StartTime":299081.0,"Objects":[{"StartTime":299081.0,"EndTime":299081.0,"StartX":390.0,"StartY":236.0,"EndX":390.0,"EndY":236.0}]},{"StartTime":299197.0,"Objects":[{"StartTime":299197.0,"EndTime":299427.0,"StartX":465.0,"StartY":59.0,"EndX":289.129517,"EndY":98.52927}]},{"StartTime":299543.0,"Objects":[{"StartTime":299543.0,"EndTime":299543.0,"StartX":75.0,"StartY":82.0,"EndX":75.0,"EndY":82.0}]},{"StartTime":299658.0,"Objects":[{"StartTime":299658.0,"EndTime":299888.0,"StartX":75.0,"StartY":82.0,"EndX":228.278809,"EndY":32.1533127}]},{"StartTime":300004.0,"Objects":[{"StartTime":300004.0,"EndTime":300004.0,"StartX":214.0,"StartY":214.0,"EndX":214.0,"EndY":214.0}]},{"StartTime":300120.0,"Objects":[{"StartTime":300120.0,"EndTime":300235.0,"StartX":214.0,"StartY":214.0,"EndX":197.563568,"EndY":121.956024}]},{"StartTime":300350.0,"Objects":[{"StartTime":300350.0,"EndTime":300523.0,"StartX":325.0,"StartY":194.0,"EndX":306.7894,"EndY":333.0627}]},{"StartTime":300581.0,"Objects":[{"StartTime":300581.0,"EndTime":300696.0,"StartX":332.0,"StartY":378.0,"EndX":239.2482,"EndY":366.195221}]},{"StartTime":300812.0,"Objects":[{"StartTime":300812.0,"EndTime":300927.0,"StartX":391.0,"StartY":266.0,"EndX":483.7518,"EndY":277.804779}]},{"StartTime":301043.0,"Objects":[{"StartTime":301043.0,"EndTime":301273.0,"StartX":237.0,"StartY":290.0,"EndX":51.8984833,"EndY":263.421326}]},{"StartTime":301389.0,"Objects":[{"StartTime":301389.0,"EndTime":301389.0,"StartX":0.0,"StartY":154.0,"EndX":0.0,"EndY":154.0}]},{"StartTime":301504.0,"Objects":[{"StartTime":301504.0,"EndTime":301734.0,"StartX":53.0,"StartY":47.0,"EndX":238.101517,"EndY":73.57868}]},{"StartTime":301850.0,"Objects":[{"StartTime":301850.0,"EndTime":301850.0,"StartX":290.0,"StartY":183.0,"EndX":290.0,"EndY":183.0}]},{"StartTime":301966.0,"Objects":[{"StartTime":301966.0,"EndTime":302081.0,"StartX":237.0,"StartY":290.0,"EndX":144.5551,"EndY":275.9932}]},{"StartTime":302197.0,"Objects":[{"StartTime":302197.0,"EndTime":302312.0,"StartX":348.0,"StartY":127.0,"EndX":440.4449,"EndY":112.993195}]},{"StartTime":302427.0,"Objects":[{"StartTime":302427.0,"EndTime":302657.0,"StartX":482.0,"StartY":321.0,"EndX":332.600861,"EndY":256.5296}]},{"StartTime":302773.0,"Objects":[{"StartTime":302773.0,"EndTime":302773.0,"StartX":212.0,"StartY":183.0,"EndX":212.0,"EndY":183.0}]},{"StartTime":302889.0,"Objects":[{"StartTime":302889.0,"EndTime":303004.0,"StartX":296.0,"StartY":62.0,"EndX":307.855774,"EndY":154.117142}]},{"StartTime":303120.0,"Objects":[{"StartTime":303120.0,"EndTime":303235.0,"StartX":144.0,"StartY":275.0,"EndX":132.144226,"EndY":182.882858}]},{"StartTime":303350.0,"Objects":[{"StartTime":303350.0,"EndTime":303580.0,"StartX":289.0,"StartY":328.0,"EndX":112.767624,"EndY":359.539429}]},{"StartTime":303697.0,"Objects":[{"StartTime":303697.0,"EndTime":303697.0,"StartX":42.0,"StartY":263.0,"EndX":42.0,"EndY":263.0}]},{"StartTime":303812.0,"Objects":[{"StartTime":303812.0,"EndTime":304042.0,"StartX":132.0,"StartY":182.0,"EndX":163.28009,"EndY":20.0925751}]},{"StartTime":304158.0,"Objects":[{"StartTime":304158.0,"EndTime":304158.0,"StartX":68.0,"StartY":39.0,"EndX":68.0,"EndY":39.0}]},{"StartTime":304273.0,"Objects":[{"StartTime":304273.0,"EndTime":304388.0,"StartX":68.0,"StartY":39.0,"EndX":48.7815,"EndY":129.64296}]},{"StartTime":304504.0,"Objects":[{"StartTime":304504.0,"EndTime":304619.0,"StartX":269.0,"StartY":175.0,"EndX":288.2185,"EndY":84.35705}]},{"StartTime":304735.0,"Objects":[{"StartTime":304735.0,"EndTime":304965.0,"StartX":163.0,"StartY":20.0,"EndX":181.006531,"EndY":206.121765}]},{"StartTime":305081.0,"Objects":[{"StartTime":305081.0,"EndTime":305311.0,"StartX":146.0,"StartY":296.0,"EndX":311.379,"EndY":280.309662}]},{"StartTime":305427.0,"Objects":[{"StartTime":305427.0,"EndTime":305427.0,"StartX":378.0,"StartY":353.0,"EndX":378.0,"EndY":353.0}]},{"StartTime":305543.0,"Objects":[{"StartTime":305543.0,"EndTime":305543.0,"StartX":470.0,"StartY":323.0,"EndX":470.0,"EndY":323.0}]},{"StartTime":305658.0,"Objects":[{"StartTime":305658.0,"EndTime":305888.0,"StartX":403.0,"StartY":252.0,"EndX":420.897156,"EndY":65.87369}]},{"StartTime":306004.0,"Objects":[{"StartTime":306004.0,"EndTime":306004.0,"StartX":353.0,"StartY":1.0,"EndX":353.0,"EndY":1.0}]},{"StartTime":306120.0,"Objects":[{"StartTime":306120.0,"EndTime":306235.0,"StartX":248.0,"StartY":105.0,"EndX":334.8469,"EndY":88.42464}]},{"StartTime":306350.0,"Objects":[{"StartTime":306350.0,"EndTime":306465.0,"StartX":178.0,"StartY":48.0,"EndX":91.48886,"EndY":30.8236141}]},{"StartTime":306581.0,"Objects":[{"StartTime":306581.0,"EndTime":306696.0,"StartX":67.0,"StartY":171.0,"EndX":50.63526,"EndY":262.9844}]},{"StartTime":306812.0,"Objects":[{"StartTime":306812.0,"EndTime":306812.0,"StartX":101.0,"StartY":341.0,"EndX":101.0,"EndY":341.0}]},{"StartTime":306927.0,"Objects":[{"StartTime":306927.0,"EndTime":306927.0,"StartX":196.0,"StartY":332.0,"EndX":196.0,"EndY":332.0}]},{"StartTime":307043.0,"Objects":[{"StartTime":307043.0,"EndTime":307273.0,"StartX":148.0,"StartY":251.0,"EndX":316.875061,"EndY":222.402985}]},{"StartTime":307389.0,"Objects":[{"StartTime":307389.0,"EndTime":307389.0,"StartX":395.0,"StartY":165.0,"EndX":395.0,"EndY":165.0}]},{"StartTime":307504.0,"Objects":[{"StartTime":307504.0,"EndTime":307619.0,"StartX":327.0,"StartY":32.0,"EndX":308.544983,"EndY":123.509621}]},{"StartTime":307735.0,"Objects":[{"StartTime":307735.0,"EndTime":307850.0,"StartX":379.0,"StartY":356.0,"EndX":397.455017,"EndY":264.4904}]},{"StartTime":307966.0,"Objects":[{"StartTime":307966.0,"EndTime":308081.0,"StartX":511.0,"StartY":90.0,"EndX":488.880981,"EndY":-0.84601593}]},{"StartTime":308197.0,"Objects":[{"StartTime":308197.0,"EndTime":308312.0,"StartX":473.0,"StartY":292.0,"EndX":495.201874,"EndY":382.8258}]},{"StartTime":308427.0,"Objects":[{"StartTime":308427.0,"EndTime":308427.0,"StartX":512.0,"StartY":192.0,"EndX":512.0,"EndY":192.0}]},{"StartTime":308543.0,"Objects":[{"StartTime":308543.0,"EndTime":308543.0,"StartX":418.0,"StartY":163.0,"EndX":418.0,"EndY":163.0}]},{"StartTime":308658.0,"Objects":[{"StartTime":308658.0,"EndTime":308658.0,"StartX":375.0,"StartY":249.0,"EndX":375.0,"EndY":249.0}]},{"StartTime":308889.0,"Objects":[{"StartTime":308889.0,"EndTime":308889.0,"StartX":379.0,"StartY":256.0,"EndX":379.0,"EndY":256.0}]},{"StartTime":309004.0,"Objects":[{"StartTime":309004.0,"EndTime":309004.0,"StartX":281.0,"StartY":219.0,"EndX":281.0,"EndY":219.0}]},{"StartTime":309062.0,"Objects":[{"StartTime":309062.0,"EndTime":309062.0,"StartX":275.0,"StartY":203.0,"EndX":275.0,"EndY":203.0}]},{"StartTime":309120.0,"Objects":[{"StartTime":309120.0,"EndTime":309120.0,"StartX":271.0,"StartY":188.0,"EndX":271.0,"EndY":188.0}]},{"StartTime":309177.0,"Objects":[{"StartTime":309177.0,"EndTime":309177.0,"StartX":268.0,"StartY":171.0,"EndX":268.0,"EndY":171.0}]},{"StartTime":309235.0,"Objects":[{"StartTime":309235.0,"EndTime":309235.0,"StartX":265.0,"StartY":156.0,"EndX":265.0,"EndY":156.0}]},{"StartTime":309293.0,"Objects":[{"StartTime":309293.0,"EndTime":309293.0,"StartX":264.0,"StartY":140.0,"EndX":264.0,"EndY":140.0}]},{"StartTime":309350.0,"Objects":[{"StartTime":309350.0,"EndTime":309350.0,"StartX":263.0,"StartY":124.0,"EndX":263.0,"EndY":124.0}]},{"StartTime":309408.0,"Objects":[{"StartTime":309408.0,"EndTime":309408.0,"StartX":233.0,"StartY":165.0,"EndX":233.0,"EndY":165.0}]},{"StartTime":309466.0,"Objects":[{"StartTime":309466.0,"EndTime":309466.0,"StartX":189.0,"StartY":185.0,"EndX":189.0,"EndY":185.0}]},{"StartTime":309523.0,"Objects":[{"StartTime":309523.0,"EndTime":309523.0,"StartX":142.0,"StartY":183.0,"EndX":142.0,"EndY":183.0}]},{"StartTime":309581.0,"Objects":[{"StartTime":309581.0,"EndTime":309581.0,"StartX":105.0,"StartY":155.0,"EndX":105.0,"EndY":155.0}]},{"StartTime":309639.0,"Objects":[{"StartTime":309639.0,"EndTime":309639.0,"StartX":86.0,"StartY":111.0,"EndX":86.0,"EndY":111.0}]},{"StartTime":309697.0,"Objects":[{"StartTime":309697.0,"EndTime":309697.0,"StartX":90.0,"StartY":63.0,"EndX":90.0,"EndY":63.0}]},{"StartTime":309754.0,"Objects":[{"StartTime":309754.0,"EndTime":309754.0,"StartX":122.0,"StartY":27.0,"EndX":122.0,"EndY":27.0}]},{"StartTime":309812.0,"Objects":[{"StartTime":309812.0,"EndTime":309869.0,"StartX":169.0,"StartY":16.0,"EndX":215.4298,"EndY":21.462328}]},{"StartTime":309927.0,"Objects":[{"StartTime":309927.0,"EndTime":309984.0,"StartX":263.0,"StartY":124.0,"EndX":309.429779,"EndY":118.537674}]},{"StartTime":310043.0,"Objects":[{"StartTime":310043.0,"EndTime":310100.0,"StartX":361.0,"StartY":42.0,"EndX":407.429779,"EndY":47.46233}]},{"StartTime":310158.0,"Objects":[{"StartTime":310158.0,"EndTime":310158.0,"StartX":495.0,"StartY":106.0,"EndX":495.0,"EndY":106.0}]},{"StartTime":310216.0,"Objects":[{"StartTime":310216.0,"EndTime":310216.0,"StartX":495.0,"StartY":106.0,"EndX":495.0,"EndY":106.0}]},{"StartTime":310273.0,"Objects":[{"StartTime":310273.0,"EndTime":310503.0,"StartX":495.0,"StartY":106.0,"EndX":481.801849,"EndY":292.5337}]},{"StartTime":310620.0,"Objects":[{"StartTime":310620.0,"EndTime":310620.0,"StartX":428.0,"StartY":371.0,"EndX":428.0,"EndY":371.0}]},{"StartTime":310735.0,"Objects":[{"StartTime":310735.0,"EndTime":310965.0,"StartX":316.0,"StartY":222.0,"EndX":328.9687,"EndY":35.45024}]},{"StartTime":311081.0,"Objects":[{"StartTime":311081.0,"EndTime":311081.0,"StartX":242.0,"StartY":71.0,"EndX":242.0,"EndY":71.0}]},{"StartTime":311197.0,"Objects":[{"StartTime":311197.0,"EndTime":311312.0,"StartX":316.0,"StartY":222.0,"EndX":402.284546,"EndY":222.791611}]},{"StartTime":311427.0,"Objects":[{"StartTime":311427.0,"EndTime":311427.0,"StartX":481.0,"StartY":292.0,"EndX":481.0,"EndY":292.0}]},{"StartTime":311658.0,"Objects":[{"StartTime":311658.0,"EndTime":311773.0,"StartX":481.0,"StartY":292.0,"EndX":486.955963,"EndY":198.68988}]},{"StartTime":311889.0,"Objects":[{"StartTime":311889.0,"EndTime":311889.0,"StartX":495.0,"StartY":106.0,"EndX":495.0,"EndY":106.0}]},{"StartTime":312004.0,"Objects":[{"StartTime":312004.0,"EndTime":312004.0,"StartX":316.0,"StartY":222.0,"EndX":316.0,"EndY":222.0}]},{"StartTime":312120.0,"Objects":[{"StartTime":312120.0,"EndTime":312350.0,"StartX":428.0,"StartY":371.0,"EndX":247.0695,"EndY":341.194458}]},{"StartTime":312466.0,"Objects":[{"StartTime":312466.0,"EndTime":312466.0,"StartX":157.0,"StartY":369.0,"EndX":157.0,"EndY":369.0}]},{"StartTime":312581.0,"Objects":[{"StartTime":312581.0,"EndTime":312696.0,"StartX":61.0,"StartY":235.0,"EndX":73.8031,"EndY":323.714569}]},{"StartTime":312812.0,"Objects":[{"StartTime":312812.0,"EndTime":312927.0,"StartX":214.0,"StartY":214.0,"EndX":201.1969,"EndY":125.285431}]},{"StartTime":313043.0,"Objects":[{"StartTime":313043.0,"EndTime":313043.0,"StartX":90.0,"StartY":63.0,"EndX":90.0,"EndY":63.0}]},{"StartTime":313158.0,"Objects":[{"StartTime":313158.0,"EndTime":313158.0,"StartX":146.0,"StartY":259.0,"EndX":146.0,"EndY":259.0}]},{"StartTime":313273.0,"Objects":[{"StartTime":313273.0,"EndTime":313388.0,"StartX":288.0,"StartY":113.0,"EndX":304.056061,"EndY":20.8889084}]},{"StartTime":313504.0,"Objects":[{"StartTime":313504.0,"EndTime":313619.0,"StartX":129.0,"StartY":166.0,"EndX":145.8128,"EndY":257.975983}]},{"StartTime":313735.0,"Objects":[{"StartTime":313735.0,"EndTime":313850.0,"StartX":178.0,"StartY":48.0,"EndX":89.88275,"EndY":62.29895}]},{"StartTime":313966.0,"Objects":[{"StartTime":313966.0,"EndTime":314196.0,"StartX":357.0,"StartY":237.0,"EndX":510.901,"EndY":191.198853}]},{"StartTime":314312.0,"Objects":[{"StartTime":314312.0,"EndTime":314312.0,"StartX":490.0,"StartY":283.0,"EndX":490.0,"EndY":283.0}]},{"StartTime":314427.0,"Objects":[{"StartTime":314427.0,"EndTime":314542.0,"StartX":465.0,"StartY":372.0,"EndX":372.772156,"EndY":356.6287}]},{"StartTime":314658.0,"Objects":[{"StartTime":314658.0,"EndTime":314773.0,"StartX":264.0,"StartY":221.0,"EndX":356.227844,"EndY":236.3713}]},{"StartTime":314889.0,"Objects":[{"StartTime":314889.0,"EndTime":315062.0,"StartX":201.0,"StartY":356.0,"EndX":73.42414,"EndY":323.079651}]},{"StartTime":315120.0,"Objects":[{"StartTime":315120.0,"EndTime":315235.0,"StartX":32.0,"StartY":263.0,"EndX":25.1291542,"EndY":169.752792}]},{"StartTime":315350.0,"Objects":[{"StartTime":315350.0,"EndTime":315580.0,"StartX":258.0,"StartY":36.0,"EndX":213.486267,"EndY":213.907791}]},{"StartTime":315697.0,"Objects":[{"StartTime":315697.0,"EndTime":315697.0,"StartX":262.0,"StartY":294.0,"EndX":262.0,"EndY":294.0}]},{"StartTime":315812.0,"Objects":[{"StartTime":315812.0,"EndTime":315927.0,"StartX":353.0,"StartY":237.0,"EndX":371.1887,"EndY":150.509415}]},{"StartTime":316043.0,"Objects":[{"StartTime":316043.0,"EndTime":316158.0,"StartX":262.0,"StartY":294.0,"EndX":243.811325,"EndY":380.4906}]},{"StartTime":316273.0,"Objects":[{"StartTime":316273.0,"EndTime":316388.0,"StartX":372.0,"StartY":356.0,"EndX":464.0676,"EndY":339.69635}]},{"StartTime":316504.0,"Objects":[{"StartTime":316504.0,"EndTime":316619.0,"StartX":213.0,"StartY":213.0,"EndX":120.9324,"EndY":229.303635}]},{"StartTime":316735.0,"Objects":[{"StartTime":316735.0,"EndTime":316965.0,"StartX":36.0,"StartY":14.0,"EndX":103.725967,"EndY":151.469818}]},{"StartTime":317081.0,"Objects":[{"StartTime":317081.0,"EndTime":317081.0,"StartX":37.0,"StartY":357.0,"EndX":37.0,"EndY":357.0}]},{"StartTime":317197.0,"Objects":[{"StartTime":317197.0,"EndTime":317427.0,"StartX":37.0,"StartY":357.0,"EndX":120.612343,"EndY":228.825439}]},{"StartTime":317543.0,"Objects":[{"StartTime":317543.0,"EndTime":317543.0,"StartX":334.0,"StartY":185.0,"EndX":334.0,"EndY":185.0}]},{"StartTime":317600.0,"Objects":[{"StartTime":317600.0,"EndTime":317600.0,"StartX":334.0,"StartY":185.0,"EndX":334.0,"EndY":185.0}]},{"StartTime":317658.0,"Objects":[{"StartTime":317658.0,"EndTime":317888.0,"StartX":334.0,"StartY":185.0,"EndX":180.6072,"EndY":174.546585}]},{"StartTime":318004.0,"Objects":[{"StartTime":318004.0,"EndTime":318004.0,"StartX":207.0,"StartY":84.0,"EndX":207.0,"EndY":84.0}]},{"StartTime":318120.0,"Objects":[{"StartTime":318120.0,"EndTime":318235.0,"StartX":387.0,"StartY":119.0,"EndX":385.330536,"EndY":205.2478}]},{"StartTime":318350.0,"Objects":[{"StartTime":318350.0,"EndTime":318465.0,"StartX":491.0,"StartY":311.0,"EndX":492.6695,"EndY":224.752182}]},{"StartTime":318581.0,"Objects":[{"StartTime":318581.0,"EndTime":318811.0,"StartX":222.0,"StartY":356.0,"EndX":407.656677,"EndY":353.511017}]},{"StartTime":318927.0,"Objects":[{"StartTime":318927.0,"EndTime":318927.0,"StartX":491.0,"StartY":311.0,"EndX":491.0,"EndY":311.0}]},{"StartTime":319043.0,"Objects":[{"StartTime":319043.0,"EndTime":319273.0,"StartX":304.0,"StartY":229.0,"EndX":118.342148,"EndY":226.476974}]},{"StartTime":319389.0,"Objects":[{"StartTime":319389.0,"EndTime":319389.0,"StartX":35.0,"StartY":184.0,"EndX":35.0,"EndY":184.0}]},{"StartTime":319504.0,"Objects":[{"StartTime":319504.0,"EndTime":319734.0,"StartX":197.0,"StartY":0.0,"EndX":231.314728,"EndY":155.166412}]},{"StartTime":319966.0,"Objects":[{"StartTime":319966.0,"EndTime":320081.0,"StartX":231.0,"StartY":155.0,"EndX":323.294769,"EndY":141.212128}]},{"StartTime":320197.0,"Objects":[{"StartTime":320197.0,"EndTime":320312.0,"StartX":501.0,"StartY":305.0,"EndX":408.931366,"EndY":290.175568}]},{"StartTime":320427.0,"Objects":[{"StartTime":320427.0,"EndTime":320657.0,"StartX":152.0,"StartY":382.0,"EndX":117.685287,"EndY":226.833588}]},{"StartTime":320773.0,"Objects":[{"StartTime":320773.0,"EndTime":320773.0,"StartX":143.0,"StartY":136.0,"EndX":143.0,"EndY":136.0}]},{"StartTime":320889.0,"Objects":[{"StartTime":320889.0,"EndTime":321004.0,"StartX":221.0,"StartY":242.0,"EndX":206.995148,"EndY":334.165}]},{"StartTime":321120.0,"Objects":[{"StartTime":321120.0,"EndTime":321235.0,"StartX":63.0,"StartY":159.0,"EndX":49.1510544,"EndY":66.6488953}]},{"StartTime":321350.0,"Objects":[{"StartTime":321350.0,"EndTime":321811.0,"StartX":340.0,"StartY":49.0,"EndX":340.0,"EndY":49.0}]},{"StartTime":321927.0,"Objects":[{"StartTime":321927.0,"EndTime":321927.0,"StartX":173.0,"StartY":47.0,"EndX":173.0,"EndY":47.0}]},{"StartTime":322043.0,"Objects":[{"StartTime":322043.0,"EndTime":322158.0,"StartX":143.0,"StartY":136.0,"EndX":152.3036,"EndY":229.03598}]},{"StartTime":322273.0,"Objects":[{"StartTime":322273.0,"EndTime":322388.0,"StartX":400.0,"StartY":384.0,"EndX":409.3036,"EndY":290.96402}]},{"StartTime":322504.0,"Objects":[{"StartTime":322504.0,"EndTime":322619.0,"StartX":257.0,"StartY":173.0,"EndX":332.878479,"EndY":227.632492}]},{"StartTime":322735.0,"Objects":[{"StartTime":322735.0,"EndTime":322850.0,"StartX":512.0,"StartY":154.0,"EndX":426.4768,"EndY":191.789322}]},{"StartTime":322966.0,"Objects":[{"StartTime":322966.0,"EndTime":322966.0,"StartX":256.0,"StartY":352.0,"EndX":256.0,"EndY":352.0}]},{"StartTime":323081.0,"Objects":[{"StartTime":323081.0,"EndTime":323081.0,"StartX":170.0,"StartY":310.0,"EndX":170.0,"EndY":310.0}]},{"StartTime":323197.0,"Objects":[{"StartTime":323197.0,"EndTime":323312.0,"StartX":100.0,"StartY":373.0,"EndX":6.62146759,"EndY":368.235779}]},{"StartTime":323427.0,"Objects":[{"StartTime":323427.0,"EndTime":323542.0,"StartX":152.0,"StartY":229.0,"EndX":245.37854,"EndY":224.2358}]},{"StartTime":323658.0,"Objects":[{"StartTime":323658.0,"EndTime":323773.0,"StartX":93.0,"StartY":294.0,"EndX":-0.3785324,"EndY":289.235779}]},{"StartTime":323888.0,"Objects":[{"StartTime":323888.0,"EndTime":324003.0,"StartX":145.0,"StartY":150.0,"EndX":238.37854,"EndY":145.2358}]},{"StartTime":324120.0,"Objects":[{"StartTime":324120.0,"EndTime":324120.0,"StartX":82.0,"StartY":221.0,"EndX":82.0,"EndY":221.0}]},{"StartTime":324177.0,"Objects":[{"StartTime":324177.0,"EndTime":324177.0,"StartX":69.0,"StartY":207.0,"EndX":69.0,"EndY":207.0}]},{"StartTime":324235.0,"Objects":[{"StartTime":324235.0,"EndTime":324235.0,"StartX":60.0,"StartY":191.0,"EndX":60.0,"EndY":191.0}]},{"StartTime":324293.0,"Objects":[{"StartTime":324293.0,"EndTime":324293.0,"StartX":54.0,"StartY":173.0,"EndX":54.0,"EndY":173.0}]},{"StartTime":324350.0,"Objects":[{"StartTime":324350.0,"EndTime":324350.0,"StartX":52.0,"StartY":154.0,"EndX":52.0,"EndY":154.0}]},{"StartTime":324408.0,"Objects":[{"StartTime":324408.0,"EndTime":324408.0,"StartX":54.0,"StartY":136.0,"EndX":54.0,"EndY":136.0}]},{"StartTime":324466.0,"Objects":[{"StartTime":324466.0,"EndTime":324466.0,"StartX":60.0,"StartY":118.0,"EndX":60.0,"EndY":118.0}]},{"StartTime":324523.0,"Objects":[{"StartTime":324523.0,"EndTime":324523.0,"StartX":70.0,"StartY":102.0,"EndX":70.0,"EndY":102.0}]},{"StartTime":324581.0,"Objects":[{"StartTime":324581.0,"EndTime":324581.0,"StartX":82.0,"StartY":88.0,"EndX":82.0,"EndY":88.0}]},{"StartTime":324638.0,"Objects":[{"StartTime":324638.0,"EndTime":324638.0,"StartX":136.0,"StartY":92.0,"EndX":136.0,"EndY":92.0}]},{"StartTime":324696.0,"Objects":[{"StartTime":324696.0,"EndTime":324696.0,"StartX":176.0,"StartY":130.0,"EndX":176.0,"EndY":130.0}]},{"StartTime":324754.0,"Objects":[{"StartTime":324754.0,"EndTime":324754.0,"StartX":185.0,"StartY":185.0,"EndX":185.0,"EndY":185.0}]},{"StartTime":324811.0,"Objects":[{"StartTime":324811.0,"EndTime":324811.0,"StartX":157.0,"StartY":233.0,"EndX":157.0,"EndY":233.0}]},{"StartTime":324870.0,"Objects":[{"StartTime":324870.0,"EndTime":324870.0,"StartX":129.0,"StartY":280.0,"EndX":129.0,"EndY":280.0}]},{"StartTime":324927.0,"Objects":[{"StartTime":324927.0,"EndTime":324927.0,"StartX":137.0,"StartY":335.0,"EndX":137.0,"EndY":335.0}]},{"StartTime":324985.0,"Objects":[{"StartTime":324985.0,"EndTime":324985.0,"StartX":177.0,"StartY":373.0,"EndX":177.0,"EndY":373.0}]},{"StartTime":325043.0,"Objects":[{"StartTime":325043.0,"EndTime":325273.0,"StartX":232.0,"StartY":378.0,"EndX":417.921875,"EndY":380.0021}]},{"StartTime":325389.0,"Objects":[{"StartTime":325389.0,"EndTime":325389.0,"StartX":485.0,"StartY":314.0,"EndX":485.0,"EndY":314.0}]},{"StartTime":325504.0,"Objects":[{"StartTime":325504.0,"EndTime":325734.0,"StartX":267.0,"StartY":218.0,"EndX":81.07812,"EndY":220.0021}]},{"StartTime":325850.0,"Objects":[{"StartTime":325850.0,"EndTime":325850.0,"StartX":14.0,"StartY":154.0,"EndX":14.0,"EndY":154.0}]},{"StartTime":325966.0,"Objects":[{"StartTime":325966.0,"EndTime":326081.0,"StartX":323.0,"StartY":267.0,"EndX":330.8841,"EndY":179.774734}]},{"StartTime":326197.0,"Objects":[{"StartTime":326197.0,"EndTime":326197.0,"StartX":250.0,"StartY":19.0,"EndX":250.0,"EndY":19.0}]},{"StartTime":326427.0,"Objects":[{"StartTime":326427.0,"EndTime":326542.0,"StartX":250.0,"StartY":19.0,"EndX":240.312836,"EndY":111.996819}]},{"StartTime":326658.0,"Objects":[{"StartTime":326658.0,"EndTime":326773.0,"StartX":426.0,"StartY":191.0,"EndX":434.638153,"EndY":97.89988}]},{"StartTime":326889.0,"Objects":[{"StartTime":326889.0,"EndTime":327119.0,"StartX":82.0,"StartY":221.0,"EndX":266.5864,"EndY":217.909637}]},{"StartTime":327235.0,"Objects":[{"StartTime":327235.0,"EndTime":327235.0,"StartX":511.0,"StartY":288.0,"EndX":511.0,"EndY":288.0}]},{"StartTime":327350.0,"Objects":[{"StartTime":327350.0,"EndTime":327465.0,"StartX":449.0,"StartY":357.0,"EndX":355.981232,"EndY":347.525879}]},{"StartTime":327581.0,"Objects":[{"StartTime":327581.0,"EndTime":327696.0,"StartX":332.0,"StartY":181.0,"EndX":425.018768,"EndY":190.474136}]},{"StartTime":327812.0,"Objects":[{"StartTime":327812.0,"EndTime":327812.0,"StartX":505.0,"StartY":141.0,"EndX":505.0,"EndY":141.0}]},{"StartTime":327927.0,"Objects":[{"StartTime":327927.0,"EndTime":327927.0,"StartX":304.0,"StartY":46.0,"EndX":304.0,"EndY":46.0}]},{"StartTime":328043.0,"Objects":[{"StartTime":328043.0,"EndTime":328158.0,"StartX":323.0,"StartY":268.0,"EndX":333.2415,"EndY":180.425323}]},{"StartTime":328273.0,"Objects":[{"StartTime":328273.0,"EndTime":328388.0,"StartX":155.0,"StartY":62.0,"EndX":144.758514,"EndY":149.574677}]},{"StartTime":328504.0,"Objects":[{"StartTime":328504.0,"EndTime":328619.0,"StartX":248.0,"StartY":372.0,"EndX":154.981232,"EndY":381.474121}]},{"StartTime":328735.0,"Objects":[{"StartTime":328735.0,"EndTime":328965.0,"StartX":242.0,"StartY":206.0,"EndX":425.4981,"EndY":189.6447}]},{"StartTime":329081.0,"Objects":[{"StartTime":329081.0,"EndTime":329081.0,"StartX":503.0,"StartY":242.0,"EndX":503.0,"EndY":242.0}]},{"StartTime":329197.0,"Objects":[{"StartTime":329197.0,"EndTime":329312.0,"StartX":442.0,"StartY":9.0,"EndX":433.993866,"EndY":96.97322}]},{"StartTime":329427.0,"Objects":[{"StartTime":329427.0,"EndTime":329542.0,"StartX":323.0,"StartY":268.0,"EndX":330.1165,"EndY":179.508331}]},{"StartTime":329658.0,"Objects":[{"StartTime":329658.0,"EndTime":329831.0,"StartX":155.0,"StartY":62.0,"EndX":168.9554,"EndY":201.55397}]},{"StartTime":329889.0,"Objects":[{"StartTime":329889.0,"EndTime":330004.0,"StartX":168.0,"StartY":201.0,"EndX":87.631546,"EndY":174.194534}]},{"StartTime":330120.0,"Objects":[{"StartTime":330120.0,"EndTime":330235.0,"StartX":229.0,"StartY":277.0,"EndX":321.9641,"EndY":267.003845}]},{"StartTime":330350.0,"Objects":[{"StartTime":330350.0,"EndTime":330465.0,"StartX":137.0,"StartY":335.0,"EndX":44.0246429,"EndY":325.109}]},{"StartTime":330581.0,"Objects":[{"StartTime":330581.0,"EndTime":330754.0,"StartX":309.0,"StartY":359.0,"EndX":413.2007,"EndY":297.7038}]},{"StartTime":330812.0,"Objects":[{"StartTime":330812.0,"EndTime":330927.0,"StartX":415.0,"StartY":299.0,"EndX":421.031,"EndY":210.931259}]},{"StartTime":331043.0,"Objects":[{"StartTime":331043.0,"EndTime":331158.0,"StartX":512.0,"StartY":47.0,"EndX":502.003845,"EndY":139.964111}]},{"StartTime":331273.0,"Objects":[{"StartTime":331273.0,"EndTime":331388.0,"StartX":330.0,"StartY":179.0,"EndX":338.911377,"EndY":85.92564}]},{"StartTime":331504.0,"Objects":[{"StartTime":331504.0,"EndTime":331677.0,"StartX":512.0,"StartY":320.0,"EndX":385.767517,"EndY":370.49588}]},{"StartTime":331735.0,"Objects":[{"StartTime":331735.0,"EndTime":331850.0,"StartX":385.0,"StartY":370.0,"EndX":292.024658,"EndY":360.109}]},{"StartTime":331966.0,"Objects":[{"StartTime":331966.0,"EndTime":331966.0,"StartX":62.0,"StartY":381.0,"EndX":62.0,"EndY":381.0}]},{"StartTime":332081.0,"Objects":[{"StartTime":332081.0,"EndTime":332081.0,"StartX":161.0,"StartY":306.0,"EndX":161.0,"EndY":306.0}]},{"StartTime":332138.0,"Objects":[{"StartTime":332138.0,"EndTime":332138.0,"StartX":162.0,"StartY":259.0,"EndX":162.0,"EndY":259.0}]},{"StartTime":332196.0,"Objects":[{"StartTime":332196.0,"EndTime":332196.0,"StartX":140.0,"StartY":219.0,"EndX":140.0,"EndY":219.0}]},{"StartTime":332254.0,"Objects":[{"StartTime":332254.0,"EndTime":332254.0,"StartX":101.0,"StartY":194.0,"EndX":101.0,"EndY":194.0}]},{"StartTime":332312.0,"Objects":[{"StartTime":332312.0,"EndTime":332312.0,"StartX":73.0,"StartY":155.0,"EndX":73.0,"EndY":155.0}]},{"StartTime":332370.0,"Objects":[{"StartTime":332370.0,"EndTime":332370.0,"StartX":73.0,"StartY":108.0,"EndX":73.0,"EndY":108.0}]},{"StartTime":332427.0,"Objects":[{"StartTime":332427.0,"EndTime":332657.0,"StartX":96.0,"StartY":68.0,"EndX":265.196472,"EndY":68.65573}]},{"StartTime":332773.0,"Objects":[{"StartTime":332773.0,"EndTime":332773.0,"StartX":337.0,"StartY":9.0,"EndX":337.0,"EndY":9.0}]},{"StartTime":332889.0,"Objects":[{"StartTime":332889.0,"EndTime":333004.0,"StartX":421.0,"StartY":210.0,"EndX":418.8342,"EndY":121.502594}]},{"StartTime":333120.0,"Objects":[{"StartTime":333120.0,"EndTime":333235.0,"StartX":215.0,"StartY":213.0,"EndX":216.580368,"EndY":301.688629}]},{"StartTime":333350.0,"Objects":[{"StartTime":333350.0,"EndTime":333523.0,"StartX":344.0,"StartY":145.0,"EndX":336.286469,"EndY":8.384621}]},{"StartTime":333581.0,"Objects":[{"StartTime":333581.0,"EndTime":333696.0,"StartX":337.0,"StartY":9.0,"EndX":429.627045,"EndY":21.7468414}]},{"StartTime":333812.0,"Objects":[{"StartTime":333812.0,"EndTime":333927.0,"StartX":498.0,"StartY":196.0,"EndX":420.656433,"EndY":210.651871}]},{"StartTime":334043.0,"Objects":[{"StartTime":334043.0,"EndTime":334158.0,"StartX":292.0,"StartY":360.0,"EndX":213.406525,"EndY":372.487457}]},{"StartTime":334273.0,"Objects":[{"StartTime":334273.0,"EndTime":334503.0,"StartX":32.0,"StartY":201.0,"EndX":214.972687,"EndY":212.007431}]},{"StartTime":334735.0,"Objects":[{"StartTime":334735.0,"EndTime":334850.0,"StartX":214.0,"StartY":212.0,"EndX":199.81752,"EndY":119.635895}]},{"StartTime":334966.0,"Objects":[{"StartTime":334966.0,"EndTime":335081.0,"StartX":306.0,"StartY":267.0,"EndX":291.648315,"EndY":359.327148}]},{"StartTime":335197.0,"Objects":[{"StartTime":335197.0,"EndTime":335427.0,"StartX":72.0,"StartY":357.0,"EndX":216.634521,"EndY":300.623383}]},{"StartTime":335543.0,"Objects":[{"StartTime":335543.0,"EndTime":335543.0,"StartX":291.0,"StartY":359.0,"EndX":291.0,"EndY":359.0}]},{"StartTime":335658.0,"Objects":[{"StartTime":335658.0,"EndTime":335888.0,"StartX":498.0,"StartY":196.0,"EndX":314.288574,"EndY":188.752335}]},{"StartTime":336004.0,"Objects":[{"StartTime":336004.0,"EndTime":336004.0,"StartX":221.0,"StartY":176.0,"EndX":221.0,"EndY":176.0}]},{"StartTime":336120.0,"Objects":[{"StartTime":336120.0,"EndTime":336293.0,"StartX":10.0,"StartY":86.0,"EndX":143.863708,"EndY":50.2149963}]},{"StartTime":336350.0,"Objects":[{"StartTime":336350.0,"EndTime":336465.0,"StartX":143.0,"StartY":50.0,"EndX":112.3037,"EndY":133.231415}]},{"StartTime":336581.0,"Objects":[{"StartTime":336581.0,"EndTime":336696.0,"StartX":277.0,"StartY":245.0,"EndX":221.2786,"EndY":175.806427}]},{"StartTime":336812.0,"Objects":[{"StartTime":336812.0,"EndTime":336927.0,"StartX":41.0,"StartY":262.0,"EndX":128.285,"EndY":247.550751}]},{"StartTime":337043.0,"Objects":[{"StartTime":337043.0,"EndTime":337043.0,"StartX":223.0,"StartY":176.0,"EndX":223.0,"EndY":176.0}]},{"StartTime":337100.0,"Objects":[{"StartTime":337100.0,"EndTime":337100.0,"StartX":221.0,"StartY":157.0,"EndX":221.0,"EndY":157.0}]},{"StartTime":337158.0,"Objects":[{"StartTime":337158.0,"EndTime":337158.0,"StartX":219.0,"StartY":138.0,"EndX":219.0,"EndY":138.0}]},{"StartTime":337216.0,"Objects":[{"StartTime":337216.0,"EndTime":337216.0,"StartX":217.0,"StartY":120.0,"EndX":217.0,"EndY":120.0}]},{"StartTime":337273.0,"Objects":[{"StartTime":337273.0,"EndTime":337273.0,"StartX":215.0,"StartY":101.0,"EndX":215.0,"EndY":101.0}]},{"StartTime":337331.0,"Objects":[{"StartTime":337331.0,"EndTime":337331.0,"StartX":213.0,"StartY":82.0,"EndX":213.0,"EndY":82.0}]},{"StartTime":337389.0,"Objects":[{"StartTime":337389.0,"EndTime":337389.0,"StartX":211.0,"StartY":64.0,"EndX":211.0,"EndY":64.0}]},{"StartTime":337446.0,"Objects":[{"StartTime":337446.0,"EndTime":337446.0,"StartX":209.0,"StartY":45.0,"EndX":209.0,"EndY":45.0}]},{"StartTime":337504.0,"Objects":[{"StartTime":337504.0,"EndTime":337504.0,"StartX":208.0,"StartY":27.0,"EndX":208.0,"EndY":27.0}]},{"StartTime":337561.0,"Objects":[{"StartTime":337561.0,"EndTime":337561.0,"StartX":258.0,"StartY":48.0,"EndX":258.0,"EndY":48.0}]},{"StartTime":337619.0,"Objects":[{"StartTime":337619.0,"EndTime":337619.0,"StartX":283.0,"StartY":97.0,"EndX":283.0,"EndY":97.0}]},{"StartTime":337677.0,"Objects":[{"StartTime":337677.0,"EndTime":337677.0,"StartX":270.0,"StartY":151.0,"EndX":270.0,"EndY":151.0}]},{"StartTime":337734.0,"Objects":[{"StartTime":337734.0,"EndTime":337734.0,"StartX":227.0,"StartY":184.0,"EndX":227.0,"EndY":184.0}]},{"StartTime":337793.0,"Objects":[{"StartTime":337793.0,"EndTime":337793.0,"StartX":183.0,"StartY":217.0,"EndX":183.0,"EndY":217.0}]},{"StartTime":337851.0,"Objects":[{"StartTime":337851.0,"EndTime":337851.0,"StartX":170.0,"StartY":270.0,"EndX":170.0,"EndY":270.0}]},{"StartTime":337909.0,"Objects":[{"StartTime":337909.0,"EndTime":337909.0,"StartX":195.0,"StartY":319.0,"EndX":195.0,"EndY":319.0}]},{"StartTime":337966.0,"Objects":[{"StartTime":337966.0,"EndTime":338196.0,"StartX":246.0,"StartY":340.0,"EndX":430.9931,"EndY":337.685455}]},{"StartTime":338312.0,"Objects":[{"StartTime":338312.0,"EndTime":338312.0,"StartX":501.0,"StartY":276.0,"EndX":501.0,"EndY":276.0}]},{"StartTime":338427.0,"Objects":[{"StartTime":338427.0,"EndTime":338657.0,"StartX":266.0,"StartY":215.0,"EndX":81.00041,"EndY":212.782654}]},{"StartTime":338773.0,"Objects":[{"StartTime":338773.0,"EndTime":338773.0,"StartX":11.0,"StartY":151.0,"EndX":11.0,"EndY":151.0}]},{"StartTime":338889.0,"Objects":[{"StartTime":338889.0,"EndTime":339004.0,"StartX":252.0,"StartY":34.0,"EndX":248.010468,"EndY":121.030006}]},{"StartTime":339120.0,"Objects":[{"StartTime":339120.0,"EndTime":339235.0,"StartX":425.0,"StartY":190.0,"EndX":428.425751,"EndY":103.170822}]},{"StartTime":339350.0,"Objects":[{"StartTime":339350.0,"EndTime":339350.0,"StartX":336.0,"StartY":155.0,"EndX":336.0,"EndY":155.0}]},{"StartTime":339407.0,"Objects":[{"StartTime":339407.0,"EndTime":339407.0,"StartX":336.0,"StartY":173.0,"EndX":336.0,"EndY":173.0}]},{"StartTime":339465.0,"Objects":[{"StartTime":339465.0,"EndTime":339465.0,"StartX":337.0,"StartY":192.0,"EndX":337.0,"EndY":192.0}]},{"StartTime":339523.0,"Objects":[{"StartTime":339523.0,"EndTime":339523.0,"StartX":338.0,"StartY":211.0,"EndX":338.0,"EndY":211.0}]},{"StartTime":339580.0,"Objects":[{"StartTime":339580.0,"EndTime":339580.0,"StartX":338.0,"StartY":229.0,"EndX":338.0,"EndY":229.0}]},{"StartTime":339638.0,"Objects":[{"StartTime":339638.0,"EndTime":339638.0,"StartX":339.0,"StartY":248.0,"EndX":339.0,"EndY":248.0}]},{"StartTime":339696.0,"Objects":[{"StartTime":339696.0,"EndTime":339696.0,"StartX":340.0,"StartY":267.0,"EndX":340.0,"EndY":267.0}]},{"StartTime":339753.0,"Objects":[{"StartTime":339753.0,"EndTime":339753.0,"StartX":340.0,"StartY":285.0,"EndX":340.0,"EndY":285.0}]},{"StartTime":339812.0,"Objects":[{"StartTime":339812.0,"EndTime":340042.0,"StartX":340.0,"StartY":303.0,"EndX":486.874847,"EndY":262.476471}]},{"StartTime":340158.0,"Objects":[{"StartTime":340158.0,"EndTime":340158.0,"StartX":425.0,"StartY":190.0,"EndX":425.0,"EndY":190.0}]},{"StartTime":340273.0,"Objects":[{"StartTime":340273.0,"EndTime":340388.0,"StartX":246.0,"StartY":340.0,"EndX":221.6169,"EndY":257.034}]},{"StartTime":340504.0,"Objects":[{"StartTime":340504.0,"EndTime":340619.0,"StartX":56.0,"StartY":129.0,"EndX":80.38311,"EndY":211.965988}]},{"StartTime":340735.0,"Objects":[{"StartTime":340735.0,"EndTime":340965.0,"StartX":306.0,"StartY":198.0,"EndX":321.624359,"EndY":14.0174713}]},{"StartTime":341081.0,"Objects":[{"StartTime":341081.0,"EndTime":341081.0,"StartX":237.0,"StartY":53.0,"EndX":237.0,"EndY":53.0}]},{"StartTime":341197.0,"Objects":[{"StartTime":341197.0,"EndTime":341312.0,"StartX":340.0,"StartY":267.0,"EndX":432.88443,"EndY":256.536774}]},{"StartTime":341427.0,"Objects":[{"StartTime":341427.0,"EndTime":341542.0,"StartX":246.0,"StartY":340.0,"EndX":153.1035,"EndY":329.5818}]},{"StartTime":341658.0,"Objects":[{"StartTime":341658.0,"EndTime":341888.0,"StartX":13.0,"StartY":157.0,"EndX":186.088242,"EndY":213.289383}]},{"StartTime":342004.0,"Objects":[{"StartTime":342004.0,"EndTime":342004.0,"StartX":241.0,"StartY":137.0,"EndX":241.0,"EndY":137.0}]},{"StartTime":342120.0,"Objects":[{"StartTime":342120.0,"EndTime":342235.0,"StartX":42.0,"StartY":237.0,"EndX":50.8947067,"EndY":325.530121}]},{"StartTime":342350.0,"Objects":[{"StartTime":342350.0,"EndTime":342465.0,"StartX":162.0,"StartY":129.0,"EndX":153.1053,"EndY":40.4698868}]},{"StartTime":342581.0,"Objects":[{"StartTime":342581.0,"EndTime":342811.0,"StartX":153.0,"StartY":329.0,"EndX":336.57074,"EndY":330.948883}]},{"StartTime":342927.0,"Objects":[{"StartTime":342927.0,"EndTime":342927.0,"StartX":417.0,"StartY":379.0,"EndX":417.0,"EndY":379.0}]},{"StartTime":343043.0,"Objects":[{"StartTime":343043.0,"EndTime":343273.0,"StartX":306.0,"StartY":198.0,"EndX":362.014862,"EndY":25.198595}]},{"StartTime":343389.0,"Objects":[{"StartTime":343389.0,"EndTime":343389.0,"StartX":489.0,"StartY":112.0,"EndX":489.0,"EndY":112.0}]},{"StartTime":343447.0,"Objects":[{"StartTime":343447.0,"EndTime":343447.0,"StartX":489.0,"StartY":112.0,"EndX":489.0,"EndY":112.0}]},{"StartTime":343504.0,"Objects":[{"StartTime":343504.0,"EndTime":343734.0,"StartX":489.0,"StartY":112.0,"EndX":430.810028,"EndY":255.1297}]},{"StartTime":343850.0,"Objects":[{"StartTime":343850.0,"EndTime":344080.0,"StartX":248.0,"StartY":341.0,"EndX":303.8333,"EndY":197.0142}]},{"StartTime":344197.0,"Objects":[{"StartTime":344197.0,"EndTime":344312.0,"StartX":508.0,"StartY":361.0,"EndX":416.056519,"EndY":377.989563}]},{"StartTime":344370.0,"Objects":[{"StartTime":344370.0,"EndTime":344370.0,"StartX":401.0,"StartY":373.0,"EndX":401.0,"EndY":373.0}]},{"StartTime":344427.0,"Objects":[{"StartTime":344427.0,"EndTime":344657.0,"StartX":386.0,"StartY":367.0,"EndX":199.418442,"EndY":354.4971}]},{"StartTime":344773.0,"Objects":[{"StartTime":344773.0,"EndTime":344773.0,"StartX":107.0,"StartY":375.0,"EndX":107.0,"EndY":375.0}]},{"StartTime":344889.0,"Objects":[{"StartTime":344889.0,"EndTime":345004.0,"StartX":122.0,"StartY":199.0,"EndX":139.229675,"EndY":285.376923}]},{"StartTime":345120.0,"Objects":[{"StartTime":345120.0,"EndTime":345235.0,"StartX":13.0,"StartY":157.0,"EndX":28.3985329,"EndY":70.64887}]},{"StartTime":345350.0,"Objects":[{"StartTime":345350.0,"EndTime":345465.0,"StartX":200.0,"StartY":35.0,"EndX":292.961,"EndY":45.0252037}]},{"StartTime":345581.0,"Objects":[{"StartTime":345581.0,"EndTime":345696.0,"StartX":396.0,"StartY":207.0,"EndX":303.147247,"EndY":196.01741}]},{"StartTime":345812.0,"Objects":[{"StartTime":345812.0,"EndTime":345927.0,"StartX":384.0,"StartY":23.0,"EndX":372.899719,"EndY":115.838753}]},{"StartTime":346043.0,"Objects":[{"StartTime":346043.0,"EndTime":346158.0,"StartX":212.0,"StartY":219.0,"EndX":222.0252,"EndY":126.039009}]},{"StartTime":346273.0,"Objects":[{"StartTime":346273.0,"EndTime":346446.0,"StartX":512.0,"StartY":279.0,"EndX":372.54837,"EndY":293.938843}]},{"StartTime":346504.0,"Objects":[{"StartTime":346504.0,"EndTime":346677.0,"StartX":349.0,"StartY":363.0,"EndX":251.56488,"EndY":351.0558}]},{"StartTime":346735.0,"Objects":[{"StartTime":346735.0,"EndTime":346908.0,"StartX":212.0,"StartY":293.0,"EndX":86.40335,"EndY":305.496063}]},{"StartTime":346966.0,"Objects":[{"StartTime":346966.0,"EndTime":347081.0,"StartX":27.0,"StartY":257.0,"EndX":17.0992432,"EndY":204.344482}]},{"StartTime":347197.0,"Objects":[{"StartTime":347197.0,"EndTime":347427.0,"StartX":133.0,"StartY":13.0,"EndX":122.304,"EndY":199.693832}]},{"StartTime":347543.0,"Objects":[{"StartTime":347543.0,"EndTime":347543.0,"StartX":251.0,"StartY":351.0,"EndX":251.0,"EndY":351.0}]},{"StartTime":347658.0,"Objects":[{"StartTime":347658.0,"EndTime":347773.0,"StartX":311.0,"StartY":280.0,"EndX":321.293121,"EndY":193.711548}]},{"StartTime":347889.0,"Objects":[{"StartTime":347889.0,"EndTime":348004.0,"StartX":232.0,"StartY":39.0,"EndX":221.182831,"EndY":125.364609}]},{"StartTime":348120.0,"Objects":[{"StartTime":348120.0,"EndTime":348235.0,"StartX":466.0,"StartY":107.0,"EndX":372.7931,"EndY":114.397377}]},{"StartTime":348350.0,"Objects":[{"StartTime":348350.0,"EndTime":348465.0,"StartX":228.0,"StartY":202.0,"EndX":321.100616,"EndY":193.395279}]},{"StartTime":348581.0,"Objects":[{"StartTime":348581.0,"EndTime":348696.0,"StartX":489.0,"StartY":256.0,"EndX":395.7931,"EndY":263.397369}]},{"StartTime":348811.0,"Objects":[{"StartTime":348811.0,"EndTime":348926.0,"StartX":251.0,"StartY":351.0,"EndX":344.100616,"EndY":342.395264}]},{"StartTime":348985.0,"Objects":[{"StartTime":348985.0,"EndTime":348985.0,"StartX":360.0,"StartY":351.0,"EndX":360.0,"EndY":351.0}]},{"StartTime":349043.0,"Objects":[{"StartTime":349043.0,"EndTime":349273.0,"StartX":375.0,"StartY":359.0,"EndX":414.0389,"EndY":198.942963}]},{"StartTime":349389.0,"Objects":[{"StartTime":349389.0,"EndTime":349389.0,"StartX":372.0,"StartY":115.0,"EndX":372.0,"EndY":115.0}]},{"StartTime":349504.0,"Objects":[{"StartTime":349504.0,"EndTime":349619.0,"StartX":496.0,"StartY":18.0,"EndX":487.986572,"EndY":111.155975}]},{"StartTime":349735.0,"Objects":[{"StartTime":349735.0,"EndTime":349850.0,"StartX":328.0,"StartY":286.0,"EndX":320.071228,"EndY":192.836792}]},{"StartTime":349966.0,"Objects":[{"StartTime":349966.0,"EndTime":350196.0,"StartX":125.0,"StartY":50.0,"EndX":284.148956,"EndY":88.47991}]},{"StartTime":350312.0,"Objects":[{"StartTime":350312.0,"EndTime":350312.0,"StartX":356.0,"StartY":28.0,"EndX":356.0,"EndY":28.0}]},{"StartTime":350427.0,"Objects":[{"StartTime":350427.0,"EndTime":350657.0,"StartX":227.0,"StartY":184.0,"EndX":225.454483,"EndY":367.288971}]},{"StartTime":350773.0,"Objects":[{"StartTime":350773.0,"EndTime":350773.0,"StartX":134.0,"StartY":342.0,"EndX":134.0,"EndY":342.0}]},{"StartTime":350889.0,"Objects":[{"StartTime":350889.0,"EndTime":351119.0,"StartX":10.0,"StartY":277.0,"EndX":-0.06311858,"EndY":90.27113}]},{"StartTime":351235.0,"Objects":[{"StartTime":351235.0,"EndTime":351235.0,"StartX":51.0,"StartY":13.0,"EndX":51.0,"EndY":13.0}]},{"StartTime":351350.0,"Objects":[{"StartTime":351350.0,"EndTime":351580.0,"StartX":215.0,"StartY":180.0,"EndX":225.063126,"EndY":366.728882}]},{"StartTime":351812.0,"Objects":[{"StartTime":351812.0,"EndTime":352042.0,"StartX":502.0,"StartY":277.0,"EndX":512.0631,"EndY":90.27113}]},{"StartTime":352158.0,"Objects":[{"StartTime":352158.0,"EndTime":352158.0,"StartX":461.0,"StartY":13.0,"EndX":461.0,"EndY":13.0}]},{"StartTime":352273.0,"Objects":[{"StartTime":352273.0,"EndTime":352388.0,"StartX":372.0,"StartY":115.0,"EndX":357.579346,"EndY":202.246719}]},{"StartTime":352504.0,"Objects":[{"StartTime":352504.0,"EndTime":352619.0,"StartX":440.0,"StartY":349.0,"EndX":371.599976,"EndY":292.499023}]},{"StartTime":352735.0,"Objects":[{"StartTime":352735.0,"EndTime":352965.0,"StartX":99.0,"StartY":278.0,"EndX":284.928223,"EndY":258.007721}]},{"StartTime":353081.0,"Objects":[{"StartTime":353081.0,"EndTime":353081.0,"StartX":371.0,"StartY":292.0,"EndX":371.0,"EndY":292.0}]},{"StartTime":353197.0,"Objects":[{"StartTime":353197.0,"EndTime":353312.0,"StartX":450.0,"StartY":211.0,"EndX":357.0359,"EndY":201.00386}]},{"StartTime":353427.0,"Objects":[{"StartTime":353427.0,"EndTime":353542.0,"StartX":191.0,"StartY":152.0,"EndX":283.9525,"EndY":141.896469}]},{"StartTime":353658.0,"Objects":[{"StartTime":353658.0,"EndTime":353773.0,"StartX":393.0,"StartY":31.0,"EndX":371.820251,"EndY":114.7932}]},{"StartTime":353889.0,"Objects":[{"StartTime":353889.0,"EndTime":354004.0,"StartX":489.0,"StartY":256.0,"EndX":509.3886,"EndY":172.331635}]},{"StartTime":354120.0,"Objects":[{"StartTime":354120.0,"EndTime":354235.0,"StartX":357.0,"StartY":201.0,"EndX":371.809753,"EndY":293.072876}]},{"StartTime":354350.0,"Objects":[{"StartTime":354350.0,"EndTime":354465.0,"StartX":498.0,"StartY":96.0,"EndX":511.787018,"EndY":3.77911043}]},{"StartTime":354581.0,"Objects":[{"StartTime":354581.0,"EndTime":354811.0,"StartX":512.0,"StartY":333.0,"EndX":332.387054,"EndY":363.815735}]},{"StartTime":354927.0,"Objects":[{"StartTime":354927.0,"EndTime":354927.0,"StartX":284.0,"StartY":258.0,"EndX":284.0,"EndY":258.0}]},{"StartTime":355043.0,"Objects":[{"StartTime":355043.0,"EndTime":355273.0,"StartX":228.0,"StartY":334.0,"EndX":41.2429352,"EndY":324.4716}]},{"StartTime":355389.0,"Objects":[{"StartTime":355389.0,"EndTime":355389.0,"StartX":5.0,"StartY":239.0,"EndX":5.0,"EndY":239.0}]},{"StartTime":355504.0,"Objects":[{"StartTime":355504.0,"EndTime":355504.0,"StartX":199.0,"StartY":79.0,"EndX":199.0,"EndY":79.0}]},{"StartTime":355620.0,"Objects":[{"StartTime":355620.0,"EndTime":355620.0,"StartX":110.0,"StartY":108.0,"EndX":110.0,"EndY":108.0}]},{"StartTime":355735.0,"Objects":[{"StartTime":355735.0,"EndTime":355735.0,"StartX":208.0,"StartY":112.0,"EndX":208.0,"EndY":112.0}]},{"StartTime":355851.0,"Objects":[{"StartTime":355851.0,"EndTime":355851.0,"StartX":124.0,"StartY":116.0,"EndX":124.0,"EndY":116.0}]},{"StartTime":355966.0,"Objects":[{"StartTime":355966.0,"EndTime":355966.0,"StartX":211.0,"StartY":141.0,"EndX":211.0,"EndY":141.0}]},{"StartTime":356082.0,"Objects":[{"StartTime":356082.0,"EndTime":356082.0,"StartX":139.0,"StartY":124.0,"EndX":139.0,"EndY":124.0}]},{"StartTime":356197.0,"Objects":[{"StartTime":356197.0,"EndTime":356197.0,"StartX":210.0,"StartY":164.0,"EndX":210.0,"EndY":164.0}]},{"StartTime":356313.0,"Objects":[{"StartTime":356313.0,"EndTime":356313.0,"StartX":153.0,"StartY":133.0,"EndX":153.0,"EndY":133.0}]},{"StartTime":356427.0,"Objects":[{"StartTime":356427.0,"EndTime":356657.0,"StartX":90.0,"StartY":211.0,"EndX":276.261963,"EndY":194.4024}]},{"StartTime":356773.0,"Objects":[{"StartTime":356773.0,"EndTime":356773.0,"StartX":329.0,"StartY":116.0,"EndX":329.0,"EndY":116.0}]},{"StartTime":356889.0,"Objects":[{"StartTime":356889.0,"EndTime":357004.0,"StartX":450.0,"StartY":258.0,"EndX":356.8368,"EndY":265.928772}]},{"StartTime":357120.0,"Objects":[{"StartTime":357120.0,"EndTime":357235.0,"StartX":414.0,"StartY":101.0,"EndX":507.065216,"EndY":91.99369}]},{"StartTime":357350.0,"Objects":[{"StartTime":357350.0,"EndTime":357580.0,"StartX":304.0,"StartY":355.0,"EndX":275.4751,"EndY":193.381378}]},{"StartTime":357697.0,"Objects":[{"StartTime":357697.0,"EndTime":357697.0,"StartX":329.0,"StartY":116.0,"EndX":329.0,"EndY":116.0}]},{"StartTime":357812.0,"Objects":[{"StartTime":357812.0,"EndTime":357812.0,"StartX":110.0,"StartY":47.0,"EndX":110.0,"EndY":47.0}]},{"StartTime":357927.0,"Objects":[{"StartTime":357927.0,"EndTime":357927.0,"StartX":147.0,"StartY":134.0,"EndX":147.0,"EndY":134.0}]},{"StartTime":358043.0,"Objects":[{"StartTime":358043.0,"EndTime":358043.0,"StartX":93.0,"StartY":210.0,"EndX":93.0,"EndY":210.0}]},{"StartTime":358158.0,"Objects":[{"StartTime":358158.0,"EndTime":358158.0,"StartX":130.0,"StartY":297.0,"EndX":130.0,"EndY":297.0}]},{"StartTime":358273.0,"Objects":[{"StartTime":358273.0,"EndTime":358503.0,"StartX":304.0,"StartY":355.0,"EndX":117.738037,"EndY":338.4024}]},{"StartTime":358620.0,"Objects":[{"StartTime":358620.0,"EndTime":358620.0,"StartX":30.0,"StartY":374.0,"EndX":30.0,"EndY":374.0}]},{"StartTime":358735.0,"Objects":[{"StartTime":358735.0,"EndTime":358850.0,"StartX":0.0,"StartY":202.0,"EndX":93.1559753,"EndY":210.013412}]},{"StartTime":358966.0,"Objects":[{"StartTime":358966.0,"EndTime":359081.0,"StartX":218.0,"StartY":58.0,"EndX":124.925636,"EndY":49.088623}]},{"StartTime":359197.0,"Objects":[{"StartTime":359197.0,"EndTime":359658.0,"StartX":265.0,"StartY":250.0,"EndX":265.0,"EndY":250.0}]},{"StartTime":359773.0,"Objects":[{"StartTime":359773.0,"EndTime":359773.0,"StartX":202.0,"StartY":180.0,"EndX":202.0,"EndY":180.0}]},{"StartTime":359889.0,"Objects":[{"StartTime":359889.0,"EndTime":359889.0,"StartX":280.0,"StartY":128.0,"EndX":280.0,"EndY":128.0}]},{"StartTime":360004.0,"Objects":[{"StartTime":360004.0,"EndTime":360004.0,"StartX":218.0,"StartY":58.0,"EndX":218.0,"EndY":58.0}]},{"StartTime":360120.0,"Objects":[{"StartTime":360120.0,"EndTime":360350.0,"StartX":407.0,"StartY":0.0,"EndX":387.007721,"EndY":185.928238}]},{"StartTime":360466.0,"Objects":[{"StartTime":360466.0,"EndTime":360466.0,"StartX":449.0,"StartY":257.0,"EndX":449.0,"EndY":257.0}]},{"StartTime":360581.0,"Objects":[{"StartTime":360581.0,"EndTime":360696.0,"StartX":304.0,"StartY":355.0,"EndX":334.297119,"EndY":276.701324}]},{"StartTime":360812.0,"Objects":[{"StartTime":360812.0,"EndTime":360927.0,"StartX":479.0,"StartY":178.0,"EndX":448.5207,"EndY":255.8609}]},{"StartTime":361043.0,"Objects":[{"StartTime":361043.0,"EndTime":361158.0,"StartX":280.0,"StartY":128.0,"EndX":274.4001,"EndY":34.6678467}]},{"StartTime":361273.0,"Objects":[{"StartTime":361273.0,"EndTime":361388.0,"StartX":193.0,"StartY":261.0,"EndX":198.019638,"EndY":354.365173}]},{"StartTime":361504.0,"Objects":[{"StartTime":361504.0,"EndTime":361504.0,"StartX":36.0,"StartY":373.0,"EndX":36.0,"EndY":373.0}]},{"StartTime":361620.0,"Objects":[{"StartTime":361620.0,"EndTime":361620.0,"StartX":74.0,"StartY":286.0,"EndX":74.0,"EndY":286.0}]},{"StartTime":361735.0,"Objects":[{"StartTime":361735.0,"EndTime":361735.0,"StartX":8.0,"StartY":219.0,"EndX":8.0,"EndY":219.0}]},{"StartTime":361851.0,"Objects":[{"StartTime":361851.0,"EndTime":361851.0,"StartX":46.0,"StartY":134.0,"EndX":46.0,"EndY":134.0}]},{"StartTime":361966.0,"Objects":[{"StartTime":361966.0,"EndTime":362196.0,"StartX":193.0,"StartY":261.0,"EndX":336.945068,"EndY":197.733841}]},{"StartTime":362312.0,"Objects":[{"StartTime":362312.0,"EndTime":362312.0,"StartX":280.0,"StartY":128.0,"EndX":280.0,"EndY":128.0}]},{"StartTime":362427.0,"Objects":[{"StartTime":362427.0,"EndTime":362542.0,"StartX":136.0,"StartY":99.0,"EndX":136.619537,"EndY":186.493362}]},{"StartTime":362658.0,"Objects":[{"StartTime":362658.0,"EndTime":362773.0,"StartX":304.0,"StartY":355.0,"EndX":303.383759,"EndY":267.495758}]},{"StartTime":362831.0,"Objects":[{"StartTime":362831.0,"EndTime":362831.0,"StartX":291.0,"StartY":256.0,"EndX":291.0,"EndY":256.0}]},{"StartTime":362889.0,"Objects":[{"StartTime":362889.0,"EndTime":363119.0,"StartX":278.0,"StartY":244.0,"EndX":464.980377,"EndY":246.709854}]},{"StartTime":363235.0,"Objects":[{"StartTime":363235.0,"EndTime":363465.0,"StartX":202.0,"StartY":180.0,"EndX":15.0196228,"EndY":177.290146}]},{"StartTime":363581.0,"Objects":[{"StartTime":363581.0,"EndTime":363696.0,"StartX":280.0,"StartY":128.0,"EndX":373.482361,"EndY":126.184807}]},{"StartTime":363812.0,"Objects":[{"StartTime":363812.0,"EndTime":364273.0,"StartX":202.0,"StartY":180.0,"EndX":202.0,"EndY":180.0}]},{"StartTime":364389.0,"Objects":[{"StartTime":364389.0,"EndTime":364389.0,"StartX":280.0,"StartY":128.0,"EndX":280.0,"EndY":128.0}]},{"StartTime":364504.0,"Objects":[{"StartTime":364504.0,"EndTime":364619.0,"StartX":136.0,"StartY":99.0,"EndX":136.152527,"EndY":11.2166071}]},{"StartTime":364735.0,"Objects":[{"StartTime":364735.0,"EndTime":364850.0,"StartX":278.0,"StartY":244.0,"EndX":276.9106,"EndY":331.195862}]},{"StartTime":364966.0,"Objects":[{"StartTime":364966.0,"EndTime":365427.0,"StartX":36.0,"StartY":304.0,"EndX":191.452774,"EndY":291.6189}]},{"StartTime":365543.0,"Objects":[{"StartTime":365543.0,"EndTime":365543.0,"StartX":277.0,"StartY":331.0,"EndX":277.0,"EndY":331.0}]},{"StartTime":365658.0,"Objects":[{"StartTime":365658.0,"EndTime":365773.0,"StartX":437.0,"StartY":330.0,"EndX":464.182739,"EndY":246.050735}]},{"StartTime":365889.0,"Objects":[{"StartTime":365889.0,"EndTime":366004.0,"StartX":307.0,"StartY":44.0,"EndX":279.817261,"EndY":127.949265}]},{"StartTime":366120.0,"Objects":[{"StartTime":366120.0,"EndTime":366120.0,"StartX":374.0,"StartY":266.0,"EndX":374.0,"EndY":266.0}]},{"StartTime":366235.0,"Objects":[{"StartTime":366235.0,"EndTime":366465.0,"StartX":500.0,"StartY":153.0,"EndX":500.0,"EndY":153.0}]},{"StartTime":366581.0,"Objects":[{"StartTime":366581.0,"EndTime":366696.0,"StartX":374.0,"StartY":266.0,"EndX":386.0932,"EndY":358.714661}]},{"StartTime":366812.0,"Objects":[{"StartTime":366812.0,"EndTime":367042.0,"StartX":414.0,"StartY":164.0,"EndX":267.744141,"EndY":238.645279}]},{"StartTime":367158.0,"Objects":[{"StartTime":367158.0,"EndTime":367158.0,"StartX":188.0,"StartY":359.0,"EndX":188.0,"EndY":359.0}]},{"StartTime":367273.0,"Objects":[{"StartTime":367273.0,"EndTime":367388.0,"StartX":117.0,"StartY":297.0,"EndX":109.341568,"EndY":203.814987}]},{"StartTime":367504.0,"Objects":[{"StartTime":367504.0,"EndTime":367965.0,"StartX":15.0,"StartY":83.0,"EndX":378.823,"EndY":40.5067368}]},{"StartTime":368081.0,"Objects":[{"StartTime":368081.0,"EndTime":368081.0,"StartX":468.0,"StartY":13.0,"EndX":468.0,"EndY":13.0}]},{"StartTime":368197.0,"Objects":[{"StartTime":368197.0,"EndTime":368312.0,"StartX":445.0,"StartY":104.0,"EndX":452.021454,"EndY":197.2299}]},{"StartTime":368427.0,"Objects":[{"StartTime":368427.0,"EndTime":368657.0,"StartX":356.0,"StartY":295.0,"EndX":499.8424,"EndY":347.1567}]},{"StartTime":368773.0,"Objects":[{"StartTime":368773.0,"EndTime":369003.0,"StartX":284.0,"StartY":353.0,"EndX":140.1095,"EndY":298.577545}]},{"StartTime":369120.0,"Objects":[{"StartTime":369120.0,"EndTime":369235.0,"StartX":99.0,"StartY":213.0,"EndX":192.2299,"EndY":220.021469}]},{"StartTime":369350.0,"Objects":[{"StartTime":369350.0,"EndTime":369580.0,"StartX":378.0,"StartY":41.0,"EndX":197.235046,"EndY":62.3002167}]},{"StartTime":369697.0,"Objects":[{"StartTime":369697.0,"EndTime":369697.0,"StartX":111.0,"StartY":24.0,"EndX":111.0,"EndY":24.0}]},{"StartTime":369812.0,"Objects":[{"StartTime":369812.0,"EndTime":369927.0,"StartX":17.0,"StartY":161.0,"EndX":31.7866936,"EndY":74.24371}]},{"StartTime":370043.0,"Objects":[{"StartTime":370043.0,"EndTime":370158.0,"StartX":152.0,"StartY":211.0,"EndX":138.411133,"EndY":298.491272}]},{"StartTime":370273.0,"Objects":[{"StartTime":370273.0,"EndTime":370273.0,"StartX":5.0,"StartY":384.0,"EndX":5.0,"EndY":384.0}]},{"StartTime":370389.0,"Objects":[{"StartTime":370389.0,"EndTime":370389.0,"StartX":58.0,"StartY":268.0,"EndX":58.0,"EndY":268.0}]},{"StartTime":370504.0,"Objects":[{"StartTime":370504.0,"EndTime":370504.0,"StartX":130.0,"StartY":372.0,"EndX":130.0,"EndY":372.0}]},{"StartTime":370620.0,"Objects":[{"StartTime":370620.0,"EndTime":370620.0,"StartX":183.0,"StartY":256.0,"EndX":183.0,"EndY":256.0}]},{"StartTime":370677.0,"Objects":[{"StartTime":370677.0,"EndTime":370677.0,"StartX":187.0,"StartY":237.0,"EndX":187.0,"EndY":237.0}]},{"StartTime":370735.0,"Objects":[{"StartTime":370735.0,"EndTime":370735.0,"StartX":191.0,"StartY":219.0,"EndX":191.0,"EndY":219.0}]},{"StartTime":370793.0,"Objects":[{"StartTime":370793.0,"EndTime":370793.0,"StartX":196.0,"StartY":201.0,"EndX":196.0,"EndY":201.0}]},{"StartTime":370850.0,"Objects":[{"StartTime":370850.0,"EndTime":370850.0,"StartX":200.0,"StartY":183.0,"EndX":200.0,"EndY":183.0}]},{"StartTime":370908.0,"Objects":[{"StartTime":370908.0,"EndTime":370908.0,"StartX":205.0,"StartY":165.0,"EndX":205.0,"EndY":165.0}]},{"StartTime":370966.0,"Objects":[{"StartTime":370966.0,"EndTime":370966.0,"StartX":209.0,"StartY":146.0,"EndX":209.0,"EndY":146.0}]},{"StartTime":371081.0,"Objects":[{"StartTime":371081.0,"EndTime":371081.0,"StartX":111.0,"StartY":24.0,"EndX":111.0,"EndY":24.0}]},{"StartTime":371197.0,"Objects":[{"StartTime":371197.0,"EndTime":371427.0,"StartX":197.0,"StartY":62.0,"EndX":383.563843,"EndY":49.2351074}]},{"StartTime":371658.0,"Objects":[{"StartTime":371658.0,"EndTime":371888.0,"StartX":315.0,"StartY":322.0,"EndX":128.436172,"EndY":334.7649}]},{"StartTime":372120.0,"Objects":[{"StartTime":372120.0,"EndTime":372350.0,"StartX":457.0,"StartY":193.0,"EndX":443.9619,"EndY":379.544922}]},{"StartTime":372581.0,"Objects":[{"StartTime":372581.0,"EndTime":372696.0,"StartX":55.0,"StartY":191.0,"EndX":61.0197449,"EndY":97.693985}]},{"StartTime":372812.0,"Objects":[{"StartTime":372812.0,"EndTime":372812.0,"StartX":68.0,"StartY":4.0,"EndX":68.0,"EndY":4.0}]},{"StartTime":372927.0,"Objects":[{"StartTime":372927.0,"EndTime":372927.0,"StartX":152.0,"StartY":46.0,"EndX":152.0,"EndY":46.0}]},{"StartTime":373043.0,"Objects":[{"StartTime":373043.0,"EndTime":373273.0,"StartX":186.0,"StartY":263.0,"EndX":-0.5638275,"EndY":275.7649}]},{"StartTime":373504.0,"Objects":[{"StartTime":373504.0,"EndTime":373734.0,"StartX":326.0,"StartY":121.0,"EndX":512.563843,"EndY":108.235107}]},{"StartTime":373850.0,"Objects":[{"StartTime":373850.0,"EndTime":373850.0,"StartX":491.0,"StartY":199.0,"EndX":491.0,"EndY":199.0}]},{"StartTime":373966.0,"Objects":[{"StartTime":373966.0,"EndTime":374196.0,"StartX":468.0,"StartY":288.0,"EndX":281.455078,"EndY":301.0381}]},{"StartTime":374427.0,"Objects":[{"StartTime":374427.0,"EndTime":374542.0,"StartX":203.0,"StartY":5.0,"EndX":296.309082,"EndY":-0.9717822}]},{"StartTime":374658.0,"Objects":[{"StartTime":374658.0,"EndTime":374658.0,"StartX":389.0,"StartY":13.0,"EndX":389.0,"EndY":13.0}]},{"StartTime":374773.0,"Objects":[{"StartTime":374773.0,"EndTime":374773.0,"StartX":329.0,"StartY":84.0,"EndX":329.0,"EndY":84.0}]},{"StartTime":374830.0,"Objects":[{"StartTime":374830.0,"EndTime":374830.0,"StartX":327.0,"StartY":102.0,"EndX":327.0,"EndY":102.0}]},{"StartTime":374889.0,"Objects":[{"StartTime":374889.0,"EndTime":375119.0,"StartX":326.0,"StartY":121.0,"EndX":512.563843,"EndY":108.235107}]},{"StartTime":375350.0,"Objects":[{"StartTime":375350.0,"EndTime":375350.0,"StartX":227.0,"StartY":377.0,"EndX":227.0,"EndY":377.0}]},{"StartTime":375466.0,"Objects":[{"StartTime":375466.0,"EndTime":375466.0,"StartX":138.0,"StartY":348.0,"EndX":138.0,"EndY":348.0}]},{"StartTime":375581.0,"Objects":[{"StartTime":375581.0,"EndTime":375581.0,"StartX":138.0,"StartY":254.0,"EndX":138.0,"EndY":254.0}]},{"StartTime":375697.0,"Objects":[{"StartTime":375697.0,"EndTime":375697.0,"StartX":227.0,"StartY":225.0,"EndX":227.0,"EndY":225.0}]},{"StartTime":375812.0,"Objects":[{"StartTime":375812.0,"EndTime":376042.0,"StartX":282.0,"StartY":301.0,"EndX":468.544922,"EndY":287.9619}]},{"StartTime":376273.0,"Objects":[{"StartTime":376273.0,"EndTime":376503.0,"StartX":230.0,"StartY":83.0,"EndX":43.45508,"EndY":96.0380859}]},{"StartTime":376620.0,"Objects":[{"StartTime":376620.0,"EndTime":376620.0,"StartX":11.0,"StartY":185.0,"EndX":11.0,"EndY":185.0}]},{"StartTime":376735.0,"Objects":[{"StartTime":376735.0,"EndTime":376965.0,"StartX":303.0,"StartY":212.0,"EndX":316.0381,"EndY":25.4550781}]},{"StartTime":377197.0,"Objects":[{"StartTime":377197.0,"EndTime":377197.0,"StartX":43.0,"StartY":96.0,"EndX":43.0,"EndY":96.0}]},{"StartTime":377313.0,"Objects":[{"StartTime":377313.0,"EndTime":377313.0,"StartX":72.0,"StartY":7.0,"EndX":72.0,"EndY":7.0}]},{"StartTime":377428.0,"Objects":[{"StartTime":377428.0,"EndTime":377428.0,"StartX":166.0,"StartY":7.0,"EndX":166.0,"EndY":7.0}]},{"StartTime":377544.0,"Objects":[{"StartTime":377544.0,"EndTime":377544.0,"StartX":195.0,"StartY":96.0,"EndX":195.0,"EndY":96.0}]},{"StartTime":377658.0,"Objects":[{"StartTime":377658.0,"EndTime":377888.0,"StartX":119.0,"StartY":151.0,"EndX":132.038086,"EndY":337.544922}]},{"StartTime":378120.0,"Objects":[{"StartTime":378120.0,"EndTime":378350.0,"StartX":439.0,"StartY":382.0,"EndX":425.9619,"EndY":195.455078}]},{"StartTime":378581.0,"Objects":[{"StartTime":378581.0,"EndTime":379273.0,"StartX":348.0,"StartY":10.0,"EndX":132.2942,"EndY":337.2544}]},{"StartTime":379504.0,"Objects":[{"StartTime":379504.0,"EndTime":379734.0,"StartX":444.0,"StartY":354.0,"EndX":473.311646,"EndY":199.3194}]},{"StartTime":379850.0,"Objects":[{"StartTime":379850.0,"EndTime":380080.0,"StartX":348.0,"StartY":10.0,"EndX":318.688354,"EndY":164.6806}]},{"StartTime":380197.0,"Objects":[{"StartTime":380197.0,"EndTime":380312.0,"StartX":408.0,"StartY":139.0,"EndX":418.982574,"EndY":46.1472549}]},{"StartTime":380427.0,"Objects":[{"StartTime":380427.0,"EndTime":380427.0,"StartX":396.0,"StartY":231.0,"EndX":396.0,"EndY":231.0}]},{"StartTime":380543.0,"Objects":[{"StartTime":380543.0,"EndTime":380773.0,"StartX":396.0,"StartY":231.0,"EndX":255.399872,"EndY":294.9562}]},{"StartTime":380889.0,"Objects":[{"StartTime":380889.0,"EndTime":381004.0,"StartX":324.0,"StartY":358.0,"EndX":416.852753,"EndY":347.017426}]},{"StartTime":381120.0,"Objects":[{"StartTime":381120.0,"EndTime":381235.0,"StartX":255.0,"StartY":294.0,"EndX":162.147247,"EndY":283.017426}]},{"StartTime":381350.0,"Objects":[{"StartTime":381350.0,"EndTime":381350.0,"StartX":32.0,"StartY":66.0,"EndX":32.0,"EndY":66.0}]},{"StartTime":381466.0,"Objects":[{"StartTime":381466.0,"EndTime":381696.0,"StartX":32.0,"StartY":66.0,"EndX":172.600113,"EndY":129.956238}]},{"StartTime":381812.0,"Objects":[{"StartTime":381812.0,"EndTime":381927.0,"StartX":104.0,"StartY":193.0,"EndX":11.1472549,"EndY":182.01741}]},{"StartTime":382043.0,"Objects":[{"StartTime":382043.0,"EndTime":382158.0,"StartX":173.0,"StartY":129.0,"EndX":265.852753,"EndY":118.017418}]},{"StartTime":382273.0,"Objects":[{"StartTime":382273.0,"EndTime":382446.0,"StartX":490.0,"StartY":320.0,"EndX":444.2234,"EndY":310.509735}]},{"StartTime":382504.0,"Objects":[{"StartTime":382504.0,"EndTime":382677.0,"StartX":427.0,"StartY":332.0,"EndX":381.2234,"EndY":322.509735}]},{"StartTime":382735.0,"Objects":[{"StartTime":382735.0,"EndTime":382735.0,"StartX":349.0,"StartY":341.0,"EndX":349.0,"EndY":341.0}]},{"StartTime":382792.0,"Objects":[{"StartTime":382792.0,"EndTime":382792.0,"StartX":364.0,"StartY":312.0,"EndX":364.0,"EndY":312.0}]},{"StartTime":382850.0,"Objects":[{"StartTime":382850.0,"EndTime":382850.0,"StartX":365.0,"StartY":280.0,"EndX":365.0,"EndY":280.0}]},{"StartTime":382908.0,"Objects":[{"StartTime":382908.0,"EndTime":382908.0,"StartX":351.0,"StartY":251.0,"EndX":351.0,"EndY":251.0}]},{"StartTime":382966.0,"Objects":[{"StartTime":382966.0,"EndTime":382966.0,"StartX":325.0,"StartY":232.0,"EndX":325.0,"EndY":232.0}]},{"StartTime":383023.0,"Objects":[{"StartTime":383023.0,"EndTime":383023.0,"StartX":293.0,"StartY":227.0,"EndX":293.0,"EndY":227.0}]},{"StartTime":383080.0,"Objects":[{"StartTime":383080.0,"EndTime":383080.0,"StartX":267.0,"StartY":208.0,"EndX":267.0,"EndY":208.0}]},{"StartTime":383138.0,"Objects":[{"StartTime":383138.0,"EndTime":383138.0,"StartX":253.0,"StartY":179.0,"EndX":253.0,"EndY":179.0}]},{"StartTime":383197.0,"Objects":[{"StartTime":383197.0,"EndTime":383197.0,"StartX":254.0,"StartY":147.0,"EndX":254.0,"EndY":147.0}]},{"StartTime":383254.0,"Objects":[{"StartTime":383254.0,"EndTime":383254.0,"StartX":290.0,"StartY":174.0,"EndX":290.0,"EndY":174.0}]},{"StartTime":383312.0,"Objects":[{"StartTime":383312.0,"EndTime":383312.0,"StartX":303.0,"StartY":218.0,"EndX":303.0,"EndY":218.0}]},{"StartTime":383370.0,"Objects":[{"StartTime":383370.0,"EndTime":383370.0,"StartX":288.0,"StartY":262.0,"EndX":288.0,"EndY":262.0}]},{"StartTime":383427.0,"Objects":[{"StartTime":383427.0,"EndTime":383427.0,"StartX":250.0,"StartY":287.0,"EndX":250.0,"EndY":287.0}]},{"StartTime":383484.0,"Objects":[{"StartTime":383484.0,"EndTime":383484.0,"StartX":204.0,"StartY":280.0,"EndX":204.0,"EndY":280.0}]},{"StartTime":383542.0,"Objects":[{"StartTime":383542.0,"EndTime":383542.0,"StartX":171.0,"StartY":248.0,"EndX":171.0,"EndY":248.0}]},{"StartTime":383600.0,"Objects":[{"StartTime":383600.0,"EndTime":383600.0,"StartX":163.0,"StartY":203.0,"EndX":163.0,"EndY":203.0}]},{"StartTime":383657.0,"Objects":[{"StartTime":383657.0,"EndTime":383657.0,"StartX":182.0,"StartY":161.0,"EndX":182.0,"EndY":161.0}]},{"StartTime":383715.0,"Objects":[{"StartTime":383715.0,"EndTime":383715.0,"StartX":184.0,"StartY":102.0,"EndX":184.0,"EndY":102.0}]},{"StartTime":383773.0,"Objects":[{"StartTime":383773.0,"EndTime":383773.0,"StartX":144.0,"StartY":58.0,"EndX":144.0,"EndY":58.0}]},{"StartTime":383831.0,"Objects":[{"StartTime":383831.0,"EndTime":383831.0,"StartX":82.0,"StartY":54.0,"EndX":82.0,"EndY":54.0}]},{"StartTime":383889.0,"Objects":[{"StartTime":383889.0,"EndTime":383889.0,"StartX":35.0,"StartY":93.0,"EndX":35.0,"EndY":93.0}]},{"StartTime":383947.0,"Objects":[{"StartTime":383947.0,"EndTime":383947.0,"StartX":30.0,"StartY":153.0,"EndX":30.0,"EndY":153.0}]},{"StartTime":384004.0,"Objects":[{"StartTime":384004.0,"EndTime":384004.0,"StartX":58.0,"StartY":205.0,"EndX":58.0,"EndY":205.0}]},{"StartTime":384062.0,"Objects":[{"StartTime":384062.0,"EndTime":384062.0,"StartX":57.0,"StartY":266.0,"EndX":57.0,"EndY":266.0}]},{"StartTime":384120.0,"Objects":[{"StartTime":384120.0,"EndTime":384120.0,"StartX":18.0,"StartY":313.0,"EndX":18.0,"EndY":313.0}]}]} \ No newline at end of file diff --git a/osu.Game.Rulesets.Osu/Resources/Testing/Beatmaps/875945.osu b/osu.Game.Rulesets.Osu/Resources/Testing/Beatmaps/875945.osu new file mode 100644 index 0000000000..a24fcea30a --- /dev/null +++ b/osu.Game.Rulesets.Osu/Resources/Testing/Beatmaps/875945.osu @@ -0,0 +1,1824 @@ +osu file format v14 + +[General] +AudioFilename: imagematerial.mp3 +AudioLeadIn: 0 +PreviewTime: 165589 +Countdown: 0 +SampleSet: Soft +StackLeniency: 0.7 +Mode: 0 +LetterboxInBreaks: 0 +EpilepsyWarning: 1 +WidescreenStoryboard: 1 + +[Editor] +Bookmarks: 56435,71204,88743,103512,120127,134897,149666,181051,197666,310280,356434,371204,384127 +DistanceSpacing: 0.3 +BeatDivisor: 4 +GridSize: 4 +TimelineZoom: 5.700003 + +[Metadata] +Title:IMAGE -MATERIAL- +TitleUnicode:IMAGE -MATERIAL- +Artist:Tatsh +ArtistUnicode:Tatsh +Creator:Enon +Version:Revolution +Source: +Tags:(新曲) (Shinkyoku) REFLEC BEAT limelight 福山沙織 fukuyama saori Dailycare +BeatmapID:875945 +BeatmapSetID:402837 + +[Difficulty] +HPDrainRate:6 +CircleSize:4.2 +OverallDifficulty:9 +ApproachRate:9.8 +SliderMultiplier:1.87 +SliderTickRate:1 + +[Events] +//Background and Video events +0,0,"BG.jpg",0,0 +//Break Periods +2,49251,55956 +//Storyboard Layer 0 (Background) +//Storyboard Layer 1 (Fail) +//Storyboard Layer 2 (Pass) +//Storyboard Layer 3 (Foreground) +//Storyboard Sound Samples + +[TimingPoints] +6590,461.538461538462,4,2,2,15,1,0 +6590,-200,4,2,2,15,0,0 +8320,-200,4,2,2,5,0,0 +8436,-200,4,2,2,15,0,0 +10166,-200,4,2,2,5,0,0 +10282,-200,4,2,2,15,0,0 +12013,-200,4,2,2,5,0,0 +12128,-200,4,2,2,15,0,0 +13859,-200,4,2,2,5,0,0 +13974,-200,4,2,2,15,0,0 +15705,-200,4,2,2,5,0,0 +15820,-200,4,2,2,15,0,0 +17551,-200,4,2,2,5,0,0 +17666,-200,4,2,2,15,0,0 +49051,230.769230769231,4,2,1,15,1,0 +56435,-100,4,2,1,60,0,0 +62666,-200,4,2,1,60,0,0 +63820,-100,4,2,1,60,0,0 +69358,-100,4,2,1,55,0,0 +69589,-100,4,2,1,50,0,0 +69820,-100,4,2,1,45,0,0 +70051,-100,4,2,1,40,0,0 +70281,-100,4,2,1,30,0,0 +70512,-100,4,2,1,40,0,0 +70743,-100,4,2,1,50,0,0 +70974,-100,4,2,1,60,0,0 +71204,-100,4,2,1,70,0,0 +74839,-100,4,2,1,5,0,0 +74897,-100,4,2,1,70,0,0 +78301,-100,4,2,1,5,0,0 +78358,-100,4,2,1,70,0,0 +78531,-100,4,2,1,5,0,0 +78589,-100,4,2,1,70,0,0 +82224,-100,4,2,1,5,0,0 +82281,-100,4,2,1,70,0,0 +85685,-100,4,2,1,5,0,0 +85743,-100,4,2,1,70,0,0 +88743,-100,4,2,1,85,0,1 +90070,-100,4,2,1,5,0,1 +90127,-100,4,2,1,85,0,1 +93762,-100,4,2,1,5,0,1 +93820,-100,4,2,1,85,0,1 +95377,-100,4,2,1,5,0,1 +95435,-100,4,2,1,85,0,1 +103512,-100,4,2,1,60,0,0 +106916,-100,4,2,1,5,0,0 +106974,-100,4,2,1,60,0,0 +110608,-100,4,2,1,5,0,0 +110666,-100,4,2,1,60,0,0 +114301,-100,4,2,1,5,0,0 +114358,-100,4,2,1,60,0,0 +114820,-100,4,2,3,60,0,0 +114834,-100,4,2,1,60,0,0 +116666,-100,4,2,3,60,0,0 +116680,-100,4,2,1,60,0,0 +117358,-100,4,2,1,55,0,0 +117589,-100,4,2,1,50,0,0 +117820,-100,4,2,1,45,0,0 +118051,-100,4,2,1,40,0,0 +118281,-100,4,2,1,30,0,0 +118743,-100,4,2,1,40,0,0 +119204,-100,4,2,1,50,0,0 +119666,-100,4,2,1,60,0,0 +120127,-100,4,2,1,70,0,0 +126762,-100,4,2,1,5,0,0 +126820,-100,4,2,1,70,0,0 +143377,-100,4,2,1,5,0,0 +143435,-111.111111111111,4,2,1,70,0,0 +143608,-111.111111111111,4,2,1,5,0,0 +143666,-125,4,2,1,70,0,0 +143839,-125,4,2,1,5,0,0 +143897,-142.857142857143,4,2,1,70,0,0 +144070,-142.857142857143,4,2,1,5,0,0 +144127,-100,4,2,1,70,0,0 +149666,-200,4,2,1,40,0,0 +160743,-100,4,2,1,55,0,0 +166281,-100,4,2,1,85,0,1 +167608,-100,4,2,1,5,0,1 +167666,-100,4,2,1,85,0,1 +171301,-100,4,2,1,5,0,1 +171358,-100,4,2,1,85,0,1 +172916,-100,4,2,1,5,0,1 +172974,-100,4,2,1,85,0,1 +181051,-100,4,2,1,60,0,0 +182377,-100,4,2,1,5,0,0 +182435,-100,4,2,1,60,0,0 +192358,-100,4,2,3,60,0,0 +192373,-100,4,2,1,60,0,0 +194204,-100,4,2,3,60,0,0 +194219,-100,4,2,1,60,0,0 +194897,-100,4,2,1,55,0,0 +195127,-100,4,2,1,50,0,0 +195358,-100,4,2,1,45,0,0 +195589,-100,4,2,1,40,0,0 +195820,-100,4,2,1,30,0,0 +196281,-100,4,2,1,40,0,0 +196743,-100,4,2,1,50,0,0 +197204,-100,4,2,1,60,0,0 +197666,-100,4,2,1,85,0,1 +219070,-100,4,2,1,5,0,1 +219127,-142.857142857143,4,2,1,85,0,1 +219301,-142.857142857143,4,2,1,5,0,1 +219358,-111.111111111111,4,2,1,85,0,1 +219531,-111.111111111111,4,2,1,5,0,1 +219589,-166.666666666667,4,2,1,85,0,1 +219762,-166.666666666667,4,2,1,5,0,1 +219820,-100,4,2,1,85,0,1 +227204,461.538461538462,4,2,2,25,1,0 +227204,-200,4,2,2,25,0,0 +251550,697.674418604651,4,2,2,25,1,0 +251550,-133.333333333333,4,2,2,25,0,0 +252702,714.285714285714,4,2,2,20,1,0 +252702,-133.333333333333,4,2,2,20,0,0 +253506,800,4,2,2,18,1,0 +254095,1132.07547169811,4,2,2,15,1,0 +254095,-133.333333333333,4,2,2,15,0,0 +255580,1200,4,2,2,10,1,0 +256480,1267.10000000001,4,2,2,8,1,0 +256480,-133.333333333333,4,2,2,8,0,0 +258892,2131.45714285714,4,2,2,6,1,0 +258892,-133.333333333333,4,2,2,6,0,0 +263197,230.769230769231,4,2,1,65,1,0 +277966,-100,4,2,1,70,0,0 +285062,-100,4,2,1,5,0,0 +285120,-100,4,2,1,70,0,0 +285293,-100,4,2,1,5,0,0 +285350,-100,4,2,1,70,0,0 +292447,-100,4,2,1,5,0,0 +292504,-100,4,2,1,70,0,0 +295504,-100,4,2,1,85,0,1 +296831,-100,4,2,1,5,0,1 +296889,-100,4,2,1,85,0,1 +300523,-100,4,2,1,5,0,1 +300581,-100,4,2,1,85,0,1 +308889,-100,4,2,1,85,0,0 +310273,-100,4,2,1,85,0,1 +315062,-100,4,2,1,5,0,1 +315120,-100,4,2,1,85,0,1 +329831,-100,4,2,1,5,0,1 +329889,-100,4,2,1,85,0,1 +330754,-100,4,2,1,5,0,1 +330812,-100,4,2,1,85,0,1 +331677,-100,4,2,1,5,0,1 +331735,-100,4,2,1,85,0,1 +333523,-100,4,2,1,5,0,1 +333581,-100,4,2,1,85,0,1 +336293,-100,4,2,1,5,0,1 +336350,-100,4,2,1,85,0,1 +346447,-100,4,2,1,5,0,1 +346504,-142.857142857143,4,2,1,85,0,1 +346677,-142.857142857143,4,2,1,5,0,1 +346735,-111.111111111111,4,2,1,85,0,1 +346908,-111.111111111111,4,2,1,5,0,1 +346966,-166.666666666667,4,2,1,85,0,1 +347197,-100,4,2,1,85,0,1 +356427,-100,4,2,1,60,0,0 + + +[Colours] +Combo1 : 235,221,186 +Combo2 : 165,202,233 +Combo3 : 114,145,218 +Combo4 : 58,148,190 + +[HitObjects] +88,104,6590,6,0,B|176:156|256:108|256:108|336:60|423:112,1,350.625,6|0,0:0|0:0,0:0:0:0: +396,213,8436,2,0,P|277:247|376:172,1,350.625,6|0,0:0|0:0,0:0:0:0: +472,220,10282,2,0,P|456:288|220:300,1,350.625,6|0,0:0|0:0,0:0:0:0: +277,200,12128,2,0,P|398:225|276:244,1,350.625,6|0,0:0|0:0,0:0:0:0: +224,141,13974,6,0,P|379:90|473:224,1,350.625,6|0,0:0|0:0,0:0:0:0: +496,301,15820,2,0,B|304:277|329:378|139:354,1,350.625,6|0,0:0|0:0,0:0:0:0: +76,352,17666,2,0,B|128:271|43:128|43:128|96:217|173:187,1,374,6|2,0:0|0:0,0:0:0:0: +256,192,19628,12,0,21128,0:0:0:0: +213,117,21359,6,0,L|119:122,1,93.5,6|0,0:0|0:0,0:0:0:0: +300,161,22282,2,0,L|393:155,1,93.5,2|0,0:0|0:0,0:0:0:0: +233,38,23205,2,0,L|139:43,1,93.5,6|0,0:0|0:0,0:0:0:0: +280,240,24128,2,0,L|373:234,1,93.5,2|0,0:0|0:0,0:0:0:0: +509,22,25051,6,0,B|342:1|390:161|198:113,1,327.25,6|0,0:0|0:0,0:0:0:0: +139,43,26897,2,0,P|181:132|110:300,1,280.5,2|0,0:0|0:0,0:0:0:0: +46,366,28743,6,0,L|139:371,1,93.5,6|0,0:0|0:0,0:0:0:0: +280,175,29666,2,0,L|186:169,1,93.5,2|0,0:0|0:0,0:0:0:0: +26,287,30589,2,0,L|119:292,1,93.5,6|0,0:0|0:0,0:0:0:0: +300,254,31513,2,0,L|206:248,1,93.5,2|0,0:0|0:0,0:0:0:0: +0,57,32436,6,0,B|189:33|134:214|352:176,1,374,6|2,0:0|0:0,0:0:0:0: +334,178,35205,2,0,L|315:351,1,163.625,2|0,0:0|0:0,0:0:0:0: +396,313,36128,6,0,P|430:308|456:284,1,70.125,6|0,0:0|0:0,0:0:0:0: +508,233,36590,6,0,B|205:287|288:12|1:48,1,561,2|0,0:0|0:0,0:0:0:0: +10,47,39820,6,0,L|120:37,1,93.5,6|0,0:0|0:0,0:0:0:0: +233,130,40743,2,0,L|123:140,1,93.5,2|0,0:0|0:0,0:0:0:0: +268,229,41666,2,0,L|473:210,1,187,2|2,0:0|0:0,0:0:0:0: +271,366,43051,2,0,P|254:329|255:303,1,46.75 +268,229,43513,5,6,0:0:0:0: +256,192,43628,12,0,49051,0:0:0:0: +45,136,56435,6,0,B|140:151|119:74|222:88,1,187,6|8,0:0|0:0,0:0:0:0: +214,252,56781,1,0,0:0:0:0: +214,252,56897,2,0,P|209:223|187:144,1,93.5,2|0,0:0|0:0,0:0:0:0: +336,48,57127,2,0,P|323:93|314:138,1,93.5,8|0,0:0|0:0,0:0:0:0: +319,308,57358,6,0,P|379:321|411:306,1,93.5,2|0,0:0|0:0,0:0:0:0: +214,252,57589,2,0,P|154:239|122:254,1,93.5,8|0,0:0|0:0,0:0:0:0: +58,340,57820,1,2,0:0:0:0: +165,370,57935,1,0,0:0:0:0: +263,315,58051,1,8,0:0:0:0: +370,345,58166,1,8,0:0:0:0: +370,345,58224,1,0,0:0:0:0: +370,345,58281,6,0,P|361:263|435:186,1,187,2|8,0:0|0:0,0:0:0:0: +507,110,58627,1,0,0:0:0:0: +507,110,58685,1,0,0:0:0:0: +507,110,58743,2,0,L|491:3,1,93.5,2|0,0:0|0:0,0:0:0:0: +412,96,58974,2,0,L|428:203,1,93.5,8|2,0:0|0:0,0:0:0:0: +370,344,59204,6,0,P|331:353|275:333,1,93.5,2|0,0:0|0:0,0:0:0:0: +273,211,59435,2,0,P|293:253|331:280,1,93.5,8|0,0:0|0:0,0:0:0:0: +349,206,59666,2,0,P|341:160|357:117,1,93.5,2|0,0:0|0:0,0:0:0:0: +482,107,59897,2,0,P|440:127|414:165,1,93.5,8|0,0:0|0:0,0:0:0:0: +144,273,60127,6,0,L|331:280,1,187,2|8,0:0|0:0,0:0:0:0: +349,206,60474,2,0,L|162:199,1,187,0|2,0:0|0:0,0:0:0:0: +85,115,60820,2,0,L|179:119,1,93.5,8|2,0:0|0:0,0:0:0:0: +126,347,61051,6,0,P|88:326|66:277,1,93.5,2|0,0:0|0:0,0:0:0:0: +162,199,61281,2,0,P|200:220|222:269,1,93.5,8|0,0:0|0:0,0:0:0:0: +203,375,61512,2,0,L|306:368,1,93.5,2|2,0:0|0:0,0:0:0:0: +443,285,61743,2,0,L|349:291,1,93.5,8|0,0:0|0:0,0:0:0:0: +329,279,61916,1,0,0:0:0:0: +309,266,61974,6,0,L|289:66,1,187,2|8,0:0|0:0,0:0:0:0: +203,118,62320,2,0,L|223:318,1,187,0|2,0:0|0:0,0:0:0:0: +133,342,62666,2,0,B|132:316|132:316|128:316|128:316|130:295|130:295|126:296|126:296|129:275|129:275|125:275|125:275|127:254|127:254|123:255|123:255|125:234|125:234|121:234|121:234|123:213|123:213|119:214|119:214|121:193|121:193|118:193|118:193|118:172,1,187,8|8,0:0|0:0,0:0:0:0: +285,26,63358,5,2,0:0:0:0: +352,117,63474,1,8,0:0:0:0: +265,189,63589,1,10,0:0:0:0: +332,280,63705,1,8,0:0:0:0: +474,81,63820,5,2,0:0:0:0: +456,83,63877,1,2,0:0:0:0: +437,85,63935,1,2,0:0:0:0: +419,88,63993,1,2,0:0:0:0: +400,90,64051,2,0,L|288:73,1,93.5,8|0,0:0|0:0,0:0:0:0: +217,50,64281,5,2,0:0:0:0: +219,68,64338,1,2,0:0:0:0: +221,87,64396,1,2,0:0:0:0: +224,105,64454,1,2,0:0:0:0: +226,124,64512,2,0,L|209:236,1,93.5,8|0,0:0|0:0,0:0:0:0: +186,307,64743,5,2,0:0:0:0: +204,305,64800,1,2,0:0:0:0: +223,303,64858,1,2,0:0:0:0: +241,300,64916,1,2,0:0:0:0: +260,298,64974,2,0,L|372:315,1,93.5,8|0,0:0|0:0,0:0:0:0: +443,338,65205,5,2,0:0:0:0: +441,320,65262,1,2,0:0:0:0: +439,301,65320,1,2,0:0:0:0: +436,283,65378,1,2,0:0:0:0: +434,264,65436,2,0,L|451:152,1,93.5,8|0,0:0|0:0,0:0:0:0: +474,81,65666,5,2,0:0:0:0: +456,83,65723,1,2,0:0:0:0: +437,85,65781,1,2,0:0:0:0: +419,88,65839,1,2,0:0:0:0: +400,90,65897,2,0,L|288:73,1,93.5,8|0,0:0|0:0,0:0:0:0: +226,124,66127,5,2,0:0:0:0: +208,126,66184,1,2,0:0:0:0: +189,128,66242,1,2,0:0:0:0: +171,131,66300,1,2,0:0:0:0: +152,133,66358,2,0,L|40:116,1,93.5,8|0,0:0|0:0,0:0:0:0: +14,291,66589,6,0,P|0:241|8:176,1,93.5,2|2,0:0|0:0,0:0:0:0: +136,292,66820,2,0,P|150:342|142:407,1,93.5,8|2,0:0|0:0,0:0:0:0: +80,232,67051,2,0,P|154:263|265:207,1,187,2|8,0:0|0:0,0:0:0:0: +315,159,67397,1,0,0:0:0:0: +491,182,67512,6,0,B|480:253|480:253|484:286|484:286|472:373,1,187,6|8,0:1|0:0,0:0:0:0: +410,124,67858,2,0,B|399:195|399:195|403:228|403:228|391:315,1,187,2|8,0:1|0:0,0:0:0:0: +329,66,68204,2,0,L|313:166,1,93.5,10|0,1:2|0:0,0:0:0:0: +181,294,68435,6,0,P|226:315|288:293,1,93.5,2|2,0:0|0:0,0:0:0:0: +440,252,68666,2,0,P|395:231|333:253,1,93.5,8|2,0:0|0:0,0:0:0:0: +128,371,68897,5,10,0:0:0:0: +181,294,69012,1,8,0:0:0:0: +117,225,69127,1,10,0:0:0:0: +170,148,69242,1,8,0:0:0:0: +52,88,69358,6,0,L|43:181,1,93.5,2|2,0:0|0:0,0:0:0:0: +181,294,69589,2,0,L|191:202,1,93.5,8|2,0:0|0:0,0:0:0:0: +39,101,69820,6,0,L|30:193,1,93.5,2|2,0:0|0:0,0:0:0:0: +168,307,70051,2,0,L|177:214,1,93.5,8|2,0:0|0:0,0:0:0:0: +198,30,70281,5,8,0:0:0:0: +220,46,70339,1,0,0:0:0:0: +244,58,70397,1,8,0:0:0:0: +269,65,70455,1,0,0:0:0:0: +296,68,70512,1,2,0:0:0:0: +322,66,70570,1,2,0:0:0:0: +348,60,70627,1,2,0:0:0:0: +373,49,70685,1,2,0:0:0:0: +396,36,70742,5,10,0:0:0:0: +441,30,70800,1,2,0:0:0:0: +483,49,70858,1,10,0:0:0:0: +510,87,70916,1,2,0:0:0:0: +512,133,70974,1,10,0:0:0:0: +492,175,71031,1,2,0:0:0:0: +453,199,71089,1,10,0:0:0:0: +407,200,71146,1,2,0:0:0:0: +364,184,71204,6,0,P|321:209|338:359,1,187,6|8,0:0|0:0,0:0:0:0: +419,372,71551,2,0,P|462:347|445:197,1,187,2|2,0:0|0:0,0:0:0:0: +332,104,71897,2,0,L|441:100,1,93.5,8|0,0:0|0:0,0:0:0:0: +248,179,72127,5,2,0:0:0:0: +248,179,72243,2,0,L|54:186,1,187,2|2,0:0|0:0,0:0:0:0: +144,259,72589,2,0,L|240:255,1,93.5,2|0,0:0|0:0,0:0:0:0: +164,104,72820,2,0,L|68:108,1,93.5,8|0,0:0|0:0,0:0:0:0: +111,338,73051,6,0,P|200:325|223:228,1,187,2|8,0:0|0:0,0:0:0:0: +192,136,73397,2,0,L|-1:143,1,187,2|2,0:0|0:0,0:0:0:0: +78,57,73743,2,0,L|174:53,1,93.5,8|0,0:0|0:0,0:0:0:0: +365,83,73974,5,2,0:0:0:0: +365,83,74089,2,0,B|294:83|288:84|255:135|251:135|191:135,1,187,2|2,0:0|0:0,0:0:0:0: +45,195,74435,2,0,P|87:216|103:264,1,93.5,2|0,0:0|0:0,0:0:0:0: +16,332,74666,2,0,B|63:323|63:323|109:331|109:331|160:322,1,140.25,8|0,0:0|0:0,0:0:0:0: +240,352,74897,6,0,P|224:290|298:187,1,187,2|8,0:0|0:0,0:0:0:0: +395,224,75243,2,0,P|411:286|337:389,1,187,2|2,0:0|0:0,0:0:0:0: +249,166,75589,2,0,L|239:73,1,93.5,8|0,0:0|0:0,0:0:0:0: +198,230,75820,5,2,0:0:0:0: +198,230,75935,2,0,B|249:267|296:244|318:210|318:210|294:242|318:278,1,187,2|2,0:0|0:0,0:0:0:0: +340,364,76281,2,0,L|433:357,1,93.5,2|0,0:0|0:0,0:0:0:0: +236,324,76512,2,0,L|120:332,1,93.5,8|0,0:0|0:0,0:0:0:0: +13,228,76743,6,0,B|96:223|96:223|131:234|131:234|198:229,1,187,2|8,0:0|0:0,0:0:0:0: +324,152,77089,2,0,B|257:157|257:157|222:146|222:146|139:151,1,187,2|2,0:0|0:0,0:0:0:0: +294,235,77435,2,0,L|388:228,1,93.5,8|0,0:0|0:0,0:0:0:0: +452,108,77666,5,2,0:0:0:0: +452,108,77781,1,8,0:0:0:0: +492,272,77897,1,10,0:0:0:0: +492,272,78012,1,8,0:0:0:0: +376,88,78127,2,0,P|404:44|488:40,1,140.25,8|0,0:0|0:0,0:0:0:0: +452,108,78358,2,0,L|301:120,1,140.25,2|0,0:0|0:0,0:0:0:0: +216,60,78589,6,0,P|232:132|144:216,1,187,6|8,0:0|0:0,0:0:0:0: +56,176,78935,2,0,P|40:104|128:20,1,187,2|2,0:0|0:0,0:0:0:0: +216,60,79281,2,0,L|223:153,1,93.5,8|0,0:0|0:0,0:0:0:0: +333,284,79512,5,2,0:0:0:0: +333,284,79627,2,0,L|317:82,1,187,2|2,0:0|0:0,0:0:0:0: +157,170,79974,2,0,P|175:203|256:211,1,93.5,2|0,0:0|0:0,0:0:0:0: +400,264,80204,2,0,P|382:231|301:223,1,93.5,8|0,0:0|0:0,0:0:0:0: +255,374,80435,6,0,L|447:359,1,187,2|8,0:0|0:0,0:0:0:0: +512,272,80781,2,0,L|320:287,1,187,2|2,0:0|0:0,0:0:0:0: +244,210,81127,2,0,L|337:203,1,93.5,8|0,0:0|0:0,0:0:0:0: +464,92,81358,5,2,0:0:0:0: +464,92,81474,2,0,P|484:152|420:272,1,187,2|2,0:0|0:0,0:0:0:0: +321,123,81820,2,0,L|310:23,1,93.5,2|0,0:0|0:0,0:0:0:0: +201,117,82051,2,0,L|215:256,1,140.25,8|0,0:0|0:0,0:0:0:0: +225,332,82281,6,0,P|153:348|53:272,1,187,2|8,0:0|0:0,0:0:0:0: +90,181,82627,2,0,P|162:165|262:241,1,187,2|2,0:0|0:0,0:0:0:0: +315,317,82974,2,0,L|441:307,1,93.5,8|0,0:0|0:0,0:0:0:0: +500,169,83204,5,2,0:0:0:0: +500,169,83320,2,0,L|306:184,1,187,2|2,0:0|0:0,0:0:0:0: +156,120,83666,2,0,P|140:68|152:24,1,93.5,2|0,0:0|0:0,0:0:0:0: +260,20,83897,2,0,P|276:72|264:116,1,93.5,8|0,0:0|0:0,0:0:0:0: +196,260,84127,6,0,L|10:240,1,187,2|8,0:0|0:0,0:0:0:0: +80,328,84474,2,0,L|265:347,1,187,2|2,0:0|0:0,0:0:0:0: +372,382,84820,2,0,P|386:339|425:314,1,93.5,8|0,0:0|0:0,0:0:0:0: +506,236,85051,2,0,P|461:246|420:225,1,93.5,2|0,0:0|0:0,0:0:0:0: +313,195,85281,2,0,P|344:228|346:274,1,93.5,8|0,0:0|0:0,0:0:0:0: +163,144,85512,6,0,L|14:135,1,140.25,2|0,0:0|0:0,0:0:0:0: +44,187,85743,2,0,L|171:194,1,93.5,8|0,0:0|0:0,0:0:0:0: +245,159,85974,2,0,P|232:96|199:67,1,93.5,2|0,0:0|0:0,0:0:0:0: +214,244,86204,2,0,L|404:225,1,187,8|2,0:0|0:0,0:0:0:0: +497,283,86551,1,0,0:0:0:0: +497,283,86666,2,0,P|436:302|409:354,1,93.5,8|0,0:0|0:0,0:0:0:0: +318,374,86897,6,0,L|328:163,1,187,2|8,0:0|0:0,0:0:0:0: +238,257,87243,1,0,0:0:0:0: +238,257,87358,2,0,L|248:46,1,187,2|8,0:0|0:0,0:0:0:0: +158,140,87704,1,2,0:0:0:0: +158,140,87820,6,0,L|163:34,1,93.5,2|0,0:0|0:0,0:0:0:0: +75,118,88051,2,0,L|70:223,1,93.5,8|0,0:0|0:0,0:0:0:0: +113,345,88281,5,0,0:0:0:0: +130,335,88339,1,0,0:0:0:0: +150,333,88397,1,0,0:0:0:0: +169,339,88454,1,0,0:0:0:0: +188,347,88512,5,10,0:0:0:0: +230,365,88570,1,2,0:0:0:0: +276,366,88628,1,10,0:0:0:0: +320,349,88686,1,2,0:0:0:0: +353,317,88743,6,0,L|362:113,1,187,6|8,0:0|0:0,0:0:0:0: +265,71,89089,1,0,0:0:0:0: +265,71,89204,2,0,P|216:122|257:235,1,187,2|8,0:0|0:0,0:0:0:0: +356,237,89551,1,0,0:0:0:0: +356,237,89666,6,0,L|472:227,1,93.5,2|0,0:0|0:0,0:0:0:0: +373,145,89897,2,0,L|222:158,1,140.25,8|0,0:0|0:0,0:0:0:0: +189,190,90127,2,0,L|282:181,1,93.5,2|0,0:0|0:0,0:0:0:0: +147,85,90358,2,0,L|24:95,1,93.5,8|0,0:0|0:0,0:0:0:0: +129,242,90589,6,0,P|186:269|266:193,1,187,2|8,0:0|0:0,0:0:0:0: +116,165,90935,2,0,P|64:200|89:308,1,187,2|2,0:0|0:0,0:0:0:0: +189,190,91281,2,0,P|190:140|162:101,1,93.5,8|0,0:0|0:0,0:0:0:0: +81,31,91512,2,0,L|174:23,1,93.5,2|0,0:0|0:0,0:0:0:0: +350,92,91743,2,0,L|257:100,1,93.5,8|0,0:0|0:0,0:0:0:0: +95,198,91974,2,0,L|188:190,1,93.5,2|0,0:0|0:0,0:0:0:0: +377,205,92204,1,2,0:0:0:0: +365,240,92262,1,2,0:0:0:0: +355,276,92320,1,2,0:0:0:0: +345,311,92377,1,2,0:0:0:0: +334,347,92435,6,0,P|264:294|292:211,1,187,2|8,0:0|0:0,0:0:0:0: +392,153,92781,1,0,0:0:0:0: +392,153,92897,2,0,P|420:70|350:17,1,187,2|8,0:0|0:0,0:0:0:0: +256,79,93243,1,0,0:0:0:0: +256,79,93358,6,0,L|263:195,1,93.5,2|0,0:0|0:0,0:0:0:0: +152,304,93589,2,0,L|142:141,1,140.25,8|0,0:0|0:0,0:0:0:0: +154,109,93820,2,0,P|122:142|78:155,1,93.5,2|0,0:0|0:0,0:0:0:0: +0,62,94051,2,0,P|31:28|75:15,1,93.5,8|0,0:0|0:0,0:0:0:0: +256,79,94281,6,0,L|267:265,1,187,2|8,0:0|0:0,0:0:0:0: +198,354,94627,1,0,0:0:0:0: +198,354,94743,2,0,P|286:378|361:327,1,187,2|8,0:0|0:0,0:0:0:0: +407,224,95089,1,0,0:0:0:0: +407,224,95204,6,0,L|247:211,1,140.25,2|0,0:0|0:0,0:0:0:0: +218,184,95435,2,0,L|330:193,1,93.5,8|0,0:0|0:0,0:0:0:0: +401,124,95666,2,0,P|410:77|383:30,1,93.5,2|0,0:0|0:0,0:0:0:0: +300,104,95897,2,0,P|291:149|311:191,1,93.5,8|0,0:0|0:0,0:0:0:0: +420,317,96127,6,0,P|334:293|273:358,1,187,2|8,0:0|0:0,0:0:0:0: +159,359,96474,1,0,0:0:0:0: +159,359,96589,2,0,P|73:382|12:317,1,187,2|8,0:0|0:0,0:0:0:0: +78,186,96935,1,0,0:0:0:0: +174,245,97051,6,0,L|195:51,1,187,2|8,0:0|0:0,0:0:0:0: +300,104,97397,1,0,0:0:0:0: +300,104,97512,2,0,B|309:153|309:153|287:195,1,93.5,2|0,0:0|0:0,0:0:0:0: +185,332,97743,2,0,B|164:293|164:293|173:244,1,93.5,8|0,0:0|0:0,0:0:0:0: +450,270,97974,6,0,L|259:281,1,187,2|8,0:0|0:0,0:0:0:0: +218,184,98320,1,0,0:0:0:0: +218,184,98435,2,0,L|409:173,1,187,2|8,0:0|0:0,0:0:0:0: +509,216,98781,1,0,0:0:0:0: +509,216,98897,6,0,B|477:120|541:136|509:24,1,187,2|8,0:0|0:0,0:0:0:0: +402,4,99243,1,0,0:0:0:0: +207,91,99358,2,0,L|217:183,1,93.5,2|0,0:0|0:0,0:0:0:0: +364,222,99589,2,0,L|353:129,1,93.5,8|0,0:0|0:0,0:0:0:0: +300,359,99820,5,2,0:0:0:0: +391,372,99935,1,0,0:0:0:0: +432,287,100051,1,8,0:0:0:0: +364,222,100166,1,0,0:0:0:0: +282,268,100281,1,2,0:0:0:0: +200,314,100397,1,0,0:0:0:0: +132,249,100512,1,8,0:0:0:0: +173,164,100628,1,0,0:0:0:0: +264,177,100743,6,0,L|248:73,1,93.5,2|0,0:0|0:0,0:0:0:0: +158,71,100974,2,0,L|173:164,1,93.5,8|0,0:0|0:0,0:0:0:0: +146,341,101204,2,0,L|130:237,1,93.5,2|0,0:0|0:0,0:0:0:0: +40,235,101435,2,0,L|54:327,1,93.5,8|0,0:0|0:0,0:0:0:0: +146,341,101666,6,0,P|214:349|234:329,1,93.5,2|0,0:0|0:0,0:0:0:0: +321,224,101897,2,0,P|253:216|233:236,1,93.5,8|0,0:0|0:0,0:0:0:0: +325,317,102127,1,2,0:0:0:0: +353,129,102243,1,2,0:0:0:0: +345,116,102300,1,2,0:0:0:0: +351,104,102358,1,2,0:0:0:0: +340,93,102416,1,2,0:0:0:0: +342,79,102474,1,2,0:0:0:0: +333,68,102531,1,2,0:0:0:0: +322,58,102589,5,10,0:0:0:0: +360,78,102646,1,2,0:0:0:0: +404,81,102704,1,2,0:0:0:0: +446,65,102762,1,2,0:0:0:0: +477,34,102819,1,2,0:0:0:0: +232,124,102935,2,0,L|173:109,1,46.75,2|0,0:0|0:0,0:0:0:0: +256,114,103051,5,2,0:0:0:0: +249,146,103108,1,2,0:0:0:0: +271,173,103166,1,10,0:0:0:0: +255,200,103224,1,2,0:0:0:0: +271,229,103281,1,2,0:0:0:0: +294,258,103339,1,2,0:0:0:0: +277,283,103397,1,2,0:0:0:0: +291,312,103454,1,2,0:0:0:0: +285,344,103512,6,0,P|370:322|476:316,1,187,6|8,0:0|0:0,0:0:0:0: +495,206,103858,1,0,0:0:0:0: +495,206,103974,2,0,P|456:129|349:137,1,187,2|8,0:0|0:0,0:0:0:0: +272,191,104320,1,0,0:0:0:0: +272,191,104435,6,0,L|280:61,1,93.5,2|0,0:0|0:0,0:0:0:0: +362,23,104666,2,0,P|287:75|188:64,1,187,8|2,0:0|0:0,0:0:0:0: +108,121,105012,1,0,0:0:0:0: +97,10,105127,1,8,0:0:0:0: +195,67,105243,1,8,0:0:0:0: +195,67,105301,1,8,0:0:0:0: +195,67,105358,6,0,P|211:139|111:224,1,187,2|8,0:0|0:0,0:0:0:0: +33,192,105704,1,0,0:0:0:0: +33,192,105820,2,0,L|41:292,1,93.5,2|0,0:0|0:0,0:0:0:0: +149,312,106051,2,0,L|141:218,1,93.5,8|0,0:0|0:0,0:0:0:0: +239,165,106281,6,0,P|272:198|279:244,1,93.5,2|0,0:0|0:0,0:0:0:0: +255,354,106512,2,0,L|351:344,1,93.5,8|0,0:0|0:0,0:0:0:0: +460,337,106743,2,0,P|399:276|386:191,1,140.25,2|0,0:0|0:0,0:0:0:0: +385,226,106974,2,0,L|481:216,1,93.5,8|0,0:0|0:0,0:0:0:0: +391,72,107204,6,0,L|204:91,1,187,2|8,0:0|0:0,0:0:0:0: +126,7,107551,1,0,0:0:0:0: +126,7,107666,2,0,P|95:51|127:179,1,187,2|8,0:0|0:0,0:0:0:0: +233,165,108012,1,0,0:0:0:0: +233,165,108127,6,0,L|219:270,1,93.5,2|0,0:0|0:0,0:0:0:0: +145,342,108358,2,0,P|217:288|336:317,1,187,8|2,0:0|0:0,0:0:0:0: +414,258,108704,1,0,0:0:0:0: +394,369,108820,1,8,0:0:0:0: +309,298,108935,1,0,0:0:0:0: +309,298,108993,1,0,0:0:0:0: +309,298,109051,6,0,L|301:103,1,187,2|8,0:0|0:0,0:0:0:0: +396,51,109397,1,0,0:0:0:0: +396,51,109512,2,0,P|427:108|408:160,1,93.5,2|0,0:0|0:0,0:0:0:0: +385,240,109743,2,0,L|491:230,1,93.5,8|0,0:0|0:0,0:0:0:0: +445,339,109974,6,0,L|339:349,1,93.5,2|0,0:0|0:0,0:0:0:0: +264,278,110204,2,0,P|250:233|260:188,1,93.5,8|0,0:0|0:0,0:0:0:0: +150,164,110435,2,0,P|130:227|164:322,1,140.25,2|0,0:0|0:0,0:0:0:0: +147,298,110666,2,0,P|101:287|57:301,1,93.5,8|0,0:0|0:0,0:0:0:0: +214,357,110897,6,0,L|400:339,1,187,2|8,0:0|0:0,0:0:0:0: +451,239,111243,1,0,0:0:0:0: +451,239,111358,2,0,L|264:256,1,187,2|8,0:0|0:0,0:0:0:0: +314,155,111704,1,0,0:0:0:0: +314,155,111820,6,0,L|407:146,1,93.5,2|0,0:0|0:0,0:0:0:0: +486,65,112051,2,0,P|443:147|450:238,1,187,8|2,0:0|0:0,0:0:0:0: +499,340,112397,1,0,0:0:0:0: +390,312,112512,1,8,0:0:0:0: +288,358,112627,1,0,0:0:0:0: +288,358,112685,1,0,0:0:0:0: +288,358,112743,6,0,L|100:344,1,187,2|8,0:0|0:0,0:0:0:0: +30,256,113089,1,0,0:0:0:0: +30,256,113204,2,0,L|218:270,1,187,2|8,0:0|0:0,0:0:0:0: +308,202,113551,1,0,0:0:0:0: +308,202,113666,6,0,P|322:134|256:43,1,187,2|8,0:0|0:0,0:0:0:0: +211,146,114012,1,0,0:0:0:0: +211,146,114127,2,0,L|221:312,1,140.25,2|0,0:0|0:0,0:0:0:0: +219,285,114358,2,0,P|262:271|306:285,1,93.5,8|0,0:0|0:0,0:0:0:0: +166,367,114589,6,0,B|94:317|105:208|187:178|256:192|256:192|325:205|407:176|418:67|346:17,1,561,2|8,0:0|0:0,0:0:0:0: +292,98,115512,1,2,0:0:0:0: +346,367,116435,6,0,B|418:317|407:208|325:178|256:192|256:192|187:205|105:176|94:67|166:17,1,561,2|8,0:0|0:0,0:0:0:0: +219,98,117358,1,2,0:0:0:0: +292,285,117589,1,8,0:0:0:0: +438,147,117820,1,2,0:0:0:0: +219,98,118051,2,0,L|88:91,1,93.5,8|0,0:0|0:0,0:0:0:0: +10,235,118281,6,0,P|-9:192|1:144,1,93.5,2|2,0:0|0:0,0:0:0:0: +154,279,118512,2,0,P|173:322|163:369,1,93.5,8|0,0:0|0:0,0:0:0:0: +3,339,118743,1,8,0:0:0:0: +219,215,118858,2,0,P|224:170|244:-10,1,187,8|2,0:0|0:0,0:0:0:0: +114,85,119204,5,2,0:0:0:0: +145,112,119262,1,2,0:0:0:0: +151,155,119319,1,2,0:0:0:0: +134,195,119377,1,2,0:0:0:0: +102,223,119434,1,2,0:0:0:0: +84,265,119493,1,2,0:0:0:0: +80,305,119551,1,2,0:0:0:0: +101,342,119608,1,2,0:0:0:0: +135,372,119666,5,2,0:0:0:0: +190,375,119723,1,2,0:0:0:0: +230,335,119781,1,2,0:0:0:0: +280,309,119839,1,2,0:0:0:0: +336,310,119897,1,2,0:0:0:0: +377,346,119954,1,2,0:0:0:0: +425,374,120012,1,2,0:0:0:0: +475,348,120070,1,2,0:0:0:0: +495,297,120127,6,0,P|500:240|514:98,1,187,6|8,0:0|0:0,0:0:0:0: +351,20,120474,2,0,P|345:76|332:219,1,187,2|2,0:0|0:0,0:0:0:0: +415,362,120820,2,0,B|458:378|458:378|508:361,1,93.5,8|0,0:0|0:0,0:0:0:0: +407,268,121051,5,2,0:0:0:0: +332,321,121166,2,0,L|145:308,1,187,2|2,0:0|0:0,0:0:0:0: +213,192,121512,2,0,P|219:146|197:105,1,93.5,2|0,0:0|0:0,0:0:0:0: +47,283,121743,2,0,P|41:329|63:370,1,93.5,8|0,0:0|0:0,0:0:0:0: +213,192,121974,6,0,L|27:180,1,187,2|8,0:0|0:0,0:0:0:0: +146,308,122320,2,0,L|332:321,1,187,2|2,0:0|0:0,0:0:0:0: +226,107,122666,2,0,P|203:147|214:191,1,93.5,8|0,0:0|0:0,0:0:0:0: +83,365,122897,5,2,0:0:0:0: +31,289,123012,2,0,P|24:211|14:102,1,187,2|2,0:0|0:0,0:0:0:0: +214,192,123358,2,0,P|174:214|128:208,1,93.5,2|0,0:0|0:0,0:0:0:0: +303,114,123589,2,0,P|342:91|388:97,1,93.5,8|0,0:0|0:0,0:0:0:0: +498,293,123820,6,0,L|306:281,1,187,2|8,0:0|0:0,0:0:0:0: +214,192,124166,2,0,L|406:204,1,187,2|2,0:0|0:0,0:0:0:0: +278,344,124512,2,0,P|245:309|242:263,1,93.5,8|0,0:0|0:0,0:0:0:0: +408,48,124743,5,2,0:0:0:0: +327,94,124858,2,0,L|311:281,1,187,2|2,0:0|0:0,0:0:0:0: +214,192,125204,2,0,P|154:196|114:171,1,93.5,2|0,0:0|0:0,0:0:0:0: +60,84,125435,2,0,P|120:80|160:105,1,93.5,8|0,0:0|0:0,0:0:0:0: +110,374,125666,5,10,0:0:0:0: +10,209,125781,1,8,0:0:0:0: +184,284,125897,1,8,0:0:0:0: +0,326,126012,1,8,0:0:0:0: +125,181,126127,2,0,B|202:169|224:229|319:212,1,187,2|0,1:0|0:0,0:0:0:0: +398,154,126474,1,0,0:0:0:0: +398,154,126589,6,0,P|346:110|352:43,1,140.25,2|0,0:0|0:0,0:0:0:0: +413,83,126820,2,0,B|419:162|419:162|406:195|406:195|413:267,1,187,2|2,1:0|0:0,0:0:0:0: +367,346,127166,1,0,0:0:0:0: +275,323,127281,1,8,0:0:0:0: +195,372,127397,1,0,0:0:0:0: +195,372,127454,1,0,0:0:0:0: +195,372,127512,6,0,P|190:282|262:228,1,187,6|8,0:0|0:0,0:0:0:0: +330,85,127858,2,0,P|334:174|262:228,1,187,2|2,0:0|0:0,0:0:0:0: +157,129,128204,2,0,L|251:135,1,93.5,8|0,0:0|0:0,0:0:0:0: +456,206,128435,5,2,0:0:0:0: +394,273,128551,2,0,L|188:261,1,187,2|2,0:0|0:0,0:0:0:0: +298,358,128897,2,0,P|341:372|387:364,1,93.5,2|0,0:0|0:0,0:0:0:0: +303,177,129127,2,0,P|259:162|213:170,1,93.5,8|0,0:0|0:0,0:0:0:0: +20,270,129358,6,0,L|206:262,1,187,2|8,0:0|0:0,0:0:0:0: +303,177,129704,2,0,L|117:185,1,187,2|2,0:0|0:0,0:0:0:0: +22,90,130051,2,0,P|82:85|120:118,1,93.5,8|0,0:0|0:0,0:0:0:0: +206,261,130281,5,2,0:0:0:0: +128,351,130397,2,0,P|86:271|116:185,1,187,2|2,0:0|0:0,0:0:0:0: +206,261,130743,2,0,L|225:365,1,93.5,2|0,0:0|0:0,0:0:0:0: +320,268,130974,2,0,L|300:163,1,93.5,8|0,0:0|0:0,0:0:0:0: +236,21,131204,6,0,P|189:99|223:182,1,187,2|8,0:0|0:0,0:0:0:0: +368,330,131551,2,0,P|414:252|380:169,1,187,2|2,0:0|0:0,0:0:0:0: +285,84,131897,2,8,L|302:175,1,93.5,8|0,0:0|0:0,0:0:0:0: +256,337,132127,5,2,0:0:0:0: +167,301,132243,2,0,P|234:242|320:268,1,187,2|2,0:0|0:0,0:0:0:0: +104,372,132589,2,0,P|57:369|10:367,1,93.5,2|0,0:0|0:0,0:0:0:0: +155,245,132820,2,0,P|201:242|248:240,1,93.5,8|0,0:0|0:0,0:0:0:0: +376,268,133051,5,2,0:0:0:0: +363,249,133108,1,2,0:0:0:0: +356,228,133166,1,2,0:0:0:0: +355,206,133224,1,2,0:0:0:0: +360,184,133281,1,10,0:0:0:0: +372,165,133339,1,2,0:0:0:0: +388,150,133397,1,10,0:0:0:0: +408,140,133454,1,2,0:0:0:0: +431,136,133512,1,2,1:0:0:0: +433,216,133743,1,8,0:0:0:0: +433,216,133858,1,8,0:0:0:0: +500,268,133973,5,2,0:0:0:0: +495,296,134031,1,2,0:0:0:0: +490,324,134088,1,2,0:0:0:0: +485,352,134146,1,2,0:0:0:0: +480,380,134204,2,0,B|334:389|359:290|190:308,1,280.5,2|0,1:0|0:0,0:0:0:0: +213,83,134666,2,0,P|238:121|235:167,1,93.5,8|0,0:0|0:0,0:0:0:0: +109,244,134897,6,0,L|-10:240,1,93.5,4|0,0:0|0:0,0:0:0:0: +236,167,135127,2,0,L|329:170,1,93.5,8|0,0:0|0:0,0:0:0:0: +208,383,135358,2,0,L|21:376,1,187,2|8,0:0|0:0,0:0:0:0: +297,282,135704,2,0,L|203:278,1,93.5,0|2,0:0|0:0,0:0:0:0: +147,80,135935,6,0,L|240:83,1,93.5,0|8,0:0|0:0,0:0:0:0: +397,51,136166,2,0,L|347:130,1,93.5,0|2,0:0|0:0,0:0:0:0: +297,282,136397,2,0,L|253:199,1,93.5,0|8,0:0|0:0,0:0:0:0: +397,51,136627,1,0,0:0:0:0: +502,166,136743,6,0,L|409:169,1,93.5,2|0,0:0|0:0,0:0:0:0: +297,282,136974,2,0,L|390:285,1,93.5,8|0,0:0|0:0,0:0:0:0: +296,151,137204,6,0,L|203:154,1,93.5,2|0,0:0|0:0,0:0:0:0: +89,242,137435,2,0,L|182:245,1,93.5,8|0,0:0|0:0,0:0:0:0: +220,337,137666,6,0,L|-2:329,1,187,2|8,0:0|0:0,0:0:0:0: +202,154,138012,2,0,L|424:161,1,187,2|2,0:0|0:0,0:0:0:0: +338,61,138358,2,0,L|244:57,1,93.5,8|0,0:0|0:0,0:0:0:0: +431,315,138589,6,0,B|460:189|460:189|452:223|480:258,1,187,2|8,0:0|0:0,0:0:0:0: +507,343,138935,1,0,0:0:0:0: +507,343,139051,2,0,B|416:313|411:386|300:358,1,187,2|8,0:0|0:0,0:0:0:0: +177,244,139397,1,0,0:0:0:0: +177,244,139512,6,0,B|268:214|273:287|384:259,1,187,2|8,0:0|0:0,0:0:0:0: +424,173,139858,1,0,0:0:0:0: +339,99,139974,2,0,L|328:-1,1,93.5,2|2,0:0|0:0,0:0:0:0: +177,244,140204,2,0,L|167:151,1,93.5,8|0,0:0|0:0,0:0:0:0: +248,95,140435,6,0,L|257:187,1,93.5,2|0,0:0|0:0,0:0:0:0: +96,300,140666,2,0,L|86:207,1,93.5,8|0,0:0|0:0,0:0:0:0: +167,151,140897,6,0,L|177:244,1,93.5,2|0,0:0|0:0,0:0:0:0: +355,315,141127,2,0,L|346:222,1,93.5,8|0,0:0|0:0,0:0:0:0: +263,380,141358,6,0,P|317:344|444:352,1,187,2|8,0:0|0:0,0:0:0:0: +177,244,141704,1,0,0:0:0:0: +177,244,141820,2,0,P|123:280|-4:272,1,187,2|8,0:0|0:0,0:0:0:0: +0,182,142166,1,0,0:0:0:0: +176,58,142281,6,0,L|167:151,1,93.5,2|0,0:0|0:0,0:0:0:0: +345,221,142512,2,0,L|355:129,1,93.5,8|0,0:0|0:0,0:0:0:0: +257,188,142743,6,0,L|248:281,1,93.5,2|0,0:0|0:0,0:0:0:0: +426,351,142974,2,0,L|435:258,1,93.5,8|0,0:0|0:0,0:0:0:0: +203,348,143204,6,0,P|239:361|326:297,1,140.25,2|0,0:0|0:0,0:0:0:0: +435,258,143435,6,0,P|398:267|316:196,1,126.224996147919,8|0,0:0|0:0,0:0:0:0: +257,188,143666,6,0,P|292:194|361:121,1,112.2,2|0,0:0|0:0,0:0:0:0: +419,136,143897,6,0,P|388:138|333:70,1,98.1749970039369,8|0,0:0|0:0,0:0:0:0: +257,188,144127,6,0,L|275:1,1,187,2|8,0:0|0:0,0:0:0:0: +435,258,144474,1,0,0:0:0:0: +435,258,144589,2,0,L|453:71,1,187,2|8,0:0|0:0,0:0:0:0: +149,337,144935,1,0,0:0:0:0: +149,337,145051,6,0,L|159:232,1,93.5,2|0,0:0|0:0,0:0:0:0: +353,153,145281,2,0,L|342:257,1,93.5,8|0,0:0|0:0,0:0:0:0: +169,318,145512,6,0,L|181:199,1,93.5,2|0,0:0|0:0,0:0:0:0: +332,171,145742,2,0,L|319:300,1,93.5,8|0,0:0|0:0,0:0:0:0: +95,131,145974,6,0,L|104:28,1,93.5,2|0,0:0|0:0,0:0:0:0: +247,76,146204,2,0,L|237:169,1,93.5,8|0,0:0|0:0,0:0:0:0: +166,150,146435,2,0,L|176:57,1,93.5,2|0,0:0|0:0,0:0:0:0: +318,95,146666,2,0,L|308:188,1,93.5,8|0,0:0|0:0,0:0:0:0: +475,319,146897,6,0,L|465:216,1,93.5,2|0,0:0|0:0,0:0:0:0: +322,263,147127,2,0,L|332:357,1,93.5,8|0,0:0|0:0,0:0:0:0: +403,338,147358,2,0,L|394:245,1,93.5,2|0,0:0|0:0,0:0:0:0: +252,283,147589,2,0,L|261:376,1,93.5,8|0,0:0|0:0,0:0:0:0: +38,368,147820,6,0,L|140:358,1,93.5,2|0,0:0|0:0,0:0:0:0: +93,215,148050,2,0,L|-1:224,1,93.5,8|0,0:0|0:0,0:0:0:0: +247,203,148281,1,2,0:0:0:0: +186,101,148397,1,8,0:0:0:0: +365,200,148512,1,8,0:0:0:0: +189,304,148627,1,8,0:0:0:0: +237,20,148743,5,2,0:0:0:0: +95,132,148858,1,2,0:0:0:0: +95,132,148916,1,2,0:0:0:0: +95,132,148974,1,10,0:0:0:0: +276,126,149089,1,0,0:0:0:0: +125,24,149204,5,2,0:0:0:0: +189,196,149320,1,8,0:0:0:0: +361,132,149435,1,8,0:0:0:0: +425,304,149551,1,8,0:0:0:0: +330,357,149666,6,0,P|240:297|79:327,1,280.5,6|0,0:0|0:0,0:0:0:0: +237,168,150589,2,0,P|327:108|488:138,1,280.5,2|0,0:0|0:0,0:0:0:0: +401,288,151512,2,0,L|122:257,1,280.5,2|0,0:0|0:0,0:0:0:0: +44,309,152320,1,8,0:0:0:0: +44,309,152377,1,8,0:0:0:0: +44,309,152435,5,10,0:0:0:0: +44,197,152551,1,2,0:0:0:0: +151,162,152666,1,8,0:0:0:0: +216,253,152781,1,2,0:0:0:0: +281,344,152897,1,2,0:0:0:0: +388,309,153012,1,2,0:0:0:0: +388,197,153128,1,8,0:0:0:0: +281,162,153243,1,2,0:0:0:0: +216,253,153358,6,0,L|503:229,1,280.5,6|0,0:0|0:0,0:0:0:0: +296,131,154281,2,0,L|9:155,1,280.5,2|0,0:0|0:0,0:0:0:0: +148,338,155204,2,0,L|428:315,1,280.5,2|0,0:0|0:0,0:0:0:0: +492,225,156127,5,10,0:0:0:0: +492,225,156185,1,8,0:0:0:0: +492,225,156243,1,8,0:0:0:0: +320,168,156358,1,8,0:0:0:0: +427,315,156474,1,8,0:0:0:0: +427,315,156531,1,8,0:0:0:0: +427,315,156589,1,10,0:0:0:0: +427,133,156704,1,8,0:0:0:0: +320,280,156820,1,10,0:0:0:0: +492,225,156935,1,8,0:0:0:0: +320,280,157051,6,0,B|194:258|174:358|44:320,1,280.5,6|0,0:0|0:0,0:0:0:0: +0,138,157974,2,0,P|88:81|186:211,1,280.5,2|0,0:0|0:0,0:0:0:0: +281,344,158897,2,0,L|312:65,1,280.5,2|0,0:0|0:0,0:0:0:0: +419,30,159704,1,8,0:0:0:0: +419,30,159762,1,8,0:0:0:0: +419,30,159820,5,10,0:0:0:0: +484,121,159935,1,8,0:0:0:0: +419,212,160051,1,8,0:0:0:0: +312,177,160166,1,8,0:0:0:0: +312,65,160281,1,10,0:0:0:0: +205,30,160397,1,8,0:0:0:0: +140,121,160513,1,8,0:0:0:0: +206,210,160627,1,8,0:0:0:0: +312,65,160743,6,0,L|418:48,1,93.5,6|0,0:0|0:0,0:0:0:0: +484,121,160974,2,0,L|378:138,1,93.5,8|0,0:0|0:0,0:0:0:0: +206,210,161204,6,0,L|312:193,1,93.5,2|0,0:0|0:0,0:0:0:0: +378,266,161435,2,0,L|272:283,1,93.5,8|0,0:0|0:0,0:0:0:0: +44,197,161666,6,0,L|33:289,1,93.5,2|0,0:0|0:0,0:0:0:0: +116,362,161897,2,0,L|126:269,1,93.5,8|0,0:0|0:0,0:0:0:0: +216,117,162127,6,0,L|205:209,1,93.5,2|0,0:0|0:0,0:0:0:0: +288,282,162358,2,0,L|298:189,1,93.5,8|0,0:0|0:0,0:0:0:0: +388,124,162589,6,0,P|436:122|482:167,1,93.5,2|0,0:0|0:0,0:0:0:0: +494,219,162820,2,0,P|446:221|400:176,1,93.5,8|0,0:0|0:0,0:0:0:0: +496,64,163051,2,0,P|498:110|472:148,1,93.5,2|0,0:0|0:0,0:0:0:0: +386,278,163281,2,0,P|383:232|410:194,1,93.5,8|0,0:0|0:0,0:0:0:0: +511,346,163512,6,0,L|397:359,1,93.5,2|0,0:0|0:0,0:0:0:0: +195,271,163743,2,0,L|287:281,1,93.5,8|0,0:0|0:0,0:0:0:0: +410,194,163974,6,0,L|296:207,1,93.5,2|0,0:0|0:0,0:0:0:0: +94,119,164205,2,0,L|186:129,1,93.5,8|0,0:0|0:0,0:0:0:0: +440,44,164435,6,0,P|407:76|401:122,1,93.5,2|0,0:0|0:0,0:0:0:0: +458,266,164666,2,0,P|445:221|409:193,1,93.5,8|0,0:0|0:0,0:0:0:0: +255,171,164897,2,0,P|299:182|342:164,1,93.5,2|0,0:0|0:0,0:0:0:0: +508,108,165127,1,8,0:0:0:0: +494,219,165243,1,8,0:0:0:0: +494,219,165301,1,8,0:0:0:0: +494,219,165358,6,0,L|482:321,1,93.5,2|0,0:0|0:0,0:0:0:0: +341,164,165589,1,10,0:0:0:0: +341,164,165704,1,2,0:0:0:0: +306,264,165820,5,10,0:0:0:0: +271,234,165877,1,10,0:0:0:0: +225,232,165935,1,2,0:0:0:0: +188,258,165993,1,2,0:0:0:0: +176,303,166050,1,10,0:0:0:0: +164,348,166108,1,10,0:0:0:0: +127,374,166166,1,10,0:0:0:0: +81,372,166224,1,10,0:0:0:0: +46,343,166281,6,0,P|47:239|141:235,1,187,6|8,0:0|0:0,0:0:0:0: +225,232,166627,1,0,0:0:0:0: +225,232,166743,2,0,L|257:25,1,187,2|8,0:0|0:0,0:0:0:0: +150,1,167089,1,0,0:0:0:0: +150,1,167204,6,0,P|137:59|160:95,1,93.5,2|0,0:0|0:0,0:0:0:0: +235,165,167435,2,0,L|379:150,1,140.25,8|0,0:0|0:0,0:0:0:0: +426,172,167666,2,0,L|311:183,1,93.5,2|0,0:0|0:0,0:0:0:0: +223,301,167897,2,0,L|337:289,1,93.5,8|0,0:0|0:0,0:0:0:0: +476,116,168127,6,0,P|416:98|365:216,1,187,2|8,0:0|0:0,0:0:0:0: +425,314,168474,2,0,P|470:271|393:167,1,187,2|2,0:0|0:0,0:0:0:0: +280,170,168820,2,0,P|286:218|342:259,1,93.5,8|0,0:0|0:0,0:0:0:0: +352,356,169051,6,0,L|239:341,1,93.5,2|0,0:0|0:0,0:0:0:0: +122,225,169281,2,0,L|215:238,1,93.5,8|0,0:0|0:0,0:0:0:0: +425,171,169512,2,0,L|332:158,1,93.5,2|0,0:0|0:0,0:0:0:0: +200,91,169743,1,10,0:0:0:0: +203,126,169800,1,2,0:0:0:0: +206,163,169858,1,2,0:0:0:0: +211,201,169916,1,2,0:0:0:0: +215,238,169974,6,0,P|173:305|43:277,1,187,2|8,0:0|0:0,0:0:0:0: +29,212,170320,1,0,0:0:0:0: +29,212,170435,2,0,L|57:7,1,187,2|8,0:0|0:0,0:0:0:0: +127,111,170781,1,0,0:0:0:0: +127,111,170897,6,0,P|172:147|220:138,1,93.5,2|0,0:0|0:0,0:0:0:0: +389,111,171127,2,0,P|315:119|279:171,1,140.25,8|0,0:0|0:0,0:0:0:0: +264,184,171358,2,0,P|268:220|279:296,1,93.5,2|0,0:0|0:0,0:0:0:0: +470,358,171589,2,0,P|465:321|455:246,1,93.5,8|0,0:0|0:0,0:0:0:0: +508,108,171820,6,0,B|432:101|432:101|411:107|411:107|316:99,1,187,2|8,0:0|0:0,0:0:0:0: +214,201,172166,1,0,0:0:0:0: +214,201,172281,2,0,B|289:207|289:207|310:201|310:201|405:209,1,187,2|8,0:0|0:0,0:0:0:0: +223,301,172628,1,0,0:0:0:0: +223,301,172743,2,0,L|83:288,1,140.25,2|0,0:0|0:0,0:0:0:0: +59,302,172974,2,0,L|152:310,1,93.5,8|0,0:0|0:0,0:0:0:0: +329,295,173204,2,0,P|332:355|307:389,1,93.5,2|0,0:0|0:0,0:0:0:0: +264,186,173435,2,0,P|261:126|286:92,1,93.5,8|0,0:0|0:0,0:0:0:0: +170,178,173666,6,0,B|75:177|99:249|4:249,1,187,2|8,0:0|0:0,0:0:0:0: +203,99,174012,1,0,0:0:0:0: +203,99,174127,2,0,B|297:99|273:27|368:27,1,187,2|8,0:0|0:0,0:0:0:0: +484,72,174474,1,0,0:0:0:0: +484,72,174589,6,0,P|475:133|458:257,1,187,2|8,0:0|0:0,0:0:0:0: +361,315,174935,1,0,0:0:0:0: +361,315,175051,2,0,P|355:274|348:222,1,93.5,2|0,0:0|0:0,0:0:0:0: +249,292,175281,2,0,P|254:332|262:385,1,93.5,8|0,0:0|0:0,0:0:0:0: +398,152,175512,6,0,P|312:207|229:175,1,187,2|8,0:0|0:0,0:0:0:0: +164,280,175858,1,0,0:0:0:0: +164,280,175974,2,0,P|90:226|3:249,1,187,2|8,0:0|0:0,0:0:0:0: +237,182,176320,1,0,0:0:0:0: +237,182,176435,6,0,B|229:94|283:97|266:-7,1,187,2|8,0:0|0:0,0:0:0:0: +151,40,176781,1,0,0:0:0:0: +0,156,176897,2,0,L|93:149,1,93.5,2|0,0:0|0:0,0:0:0:0: +164,280,177127,2,0,L|62:286,1,93.5,8|0,0:0|0:0,0:0:0:0: +208,145,177358,5,6,0:0:0:0: +242,59,177474,1,0,0:0:0:0: +334,63,177589,1,8,0:0:0:0: +358,154,177704,1,0,0:0:0:0: +281,204,177820,1,2,0:0:0:0: +208,145,177935,1,0,0:0:0:0: +129,196,178051,1,8,0:0:0:0: +153,286,178166,1,0,0:0:0:0: +246,290,178281,6,0,L|235:384,1,93.5,2|0,0:0|0:0,0:0:0:0: +142,378,178512,2,0,L|153:286,1,93.5,8|0,0:0|0:0,0:0:0:0: +139,103,178743,2,0,L|128:197,1,93.5,2|0,0:0|0:0,0:0:0:0: +35,191,178974,2,0,L|45:98,1,93.5,8|0,0:0|0:0,0:0:0:0: +139,103,179204,6,0,P|186:128|228:120,1,93.5,2|0,0:0|0:0,0:0:0:0: +362,179,179435,2,0,P|316:174|277:198,1,93.5,8|0,0:0|0:0,0:0:0:0: +392,365,179666,5,2,0:0:0:0: +464,306,179781,1,8,0:0:0:0: +464,306,179839,1,8,0:0:0:0: +464,306,179897,1,8,0:0:0:0: +378,270,180012,1,8,0:0:0:0: +450,211,180127,5,2,0:0:0:0: +362,179,180243,1,8,0:0:0:0: +362,179,180301,1,8,0:0:0:0: +362,179,180358,2,0,L|257:164,1,93.5,8|0,0:0|0:0,0:0:0:0: +160,37,180589,5,2,0:0:0:0: +105,123,180704,1,8,0:0:0:0: +269,165,180820,1,8,0:0:0:0: +259,62,180935,1,8,0:0:0:0: +172,203,181051,6,0,P|205:334|201:384,1,187,6|8,0:0|0:0,0:0:0:0: +121,328,181397,1,0,0:0:0:0: +37,358,181512,2,0,P|4:227|8:177,1,187,2|8,0:0|0:0,0:0:0:0: +58,98,181858,1,0,0:0:0:0: +58,98,181974,6,0,P|104:96|150:106,1,93.5,2|0,0:0|0:0,0:0:0:0: +381,158,182204,2,0,P|334:191|224:165,1,140.25,8|0,0:0|0:0,0:0:0:0: +214,161,182435,2,0,L|223:260,1,93.5,2|0,0:0|0:0,0:0:0:0: +184,337,182666,1,8,0:0:0:0: +278,329,182781,6,0,B|383:304|353:370|477:341,1,187,2|2,0:0|0:0,0:0:0:0: +505,267,183127,2,0,P|488:184|474:75,1,187,8|2,0:0|0:0,0:0:0:0: +403,21,183474,2,0,P|382:61|397:133,1,93.5,0|8,0:0|0:0,0:0:0:0: +331,198,183704,1,0,0:0:0:0: +287,106,183820,6,0,P|225:59|118:89,1,187,2|8,0:0|0:0,0:0:0:0: +90,168,184166,1,0,0:0:0:0: +29,98,184281,2,0,P|36:44|36:0,1,93.5,2|0,0:0|0:0,0:0:0:0: +183,152,184512,2,0,P|176:206|176:250,1,93.5,8|0,0:0|0:0,0:0:0:0: +134,324,184743,6,0,P|183:295|325:315,1,187,2|8,0:0|0:0,0:0:0:0: +370,231,185089,1,0,0:0:0:0: +357,132,185204,2,0,P|308:161|166:141,1,187,2|8,0:0|0:0,0:0:0:0: +102,104,185551,1,0,0:0:0:0: +102,104,185666,6,0,L|89:-11,1,93.5,2|0,0:0|0:0,0:0:0:0: +103,202,185897,2,0,P|73:251|84:354,1,140.25,8|0,0:0|0:0,0:0:0:0: +101,371,186127,2,0,L|213:361,1,93.5,2|0,0:0|0:0,0:0:0:0: +281,384,186358,1,8,0:0:0:0: +254,295,186474,6,0,P|248:229|231:92,1,187,2|2,0:0|0:0,0:0:0:0: +274,29,186820,2,0,P|327:8|437:76,1,187,8|2,0:0|0:0,0:0:0:0: +509,130,187166,1,0,0:0:0:0: +422,165,187281,2,0,P|381:187|321:225,1,93.5,8|0,0:0|0:0,0:0:0:0: +268,273,187512,6,0,P|209:225|94:253,1,187,2|8,0:0|0:0,0:0:0:0: +25,205,187858,1,0,0:0:0:0: +36,296,187974,2,0,L|43:393,1,93.5,2|0,0:0|0:0,0:0:0:0: +95,151,188204,2,0,L|88:54,1,93.5,8|0,0:0|0:0,0:0:0:0: +164,6,188435,6,0,P|233:5|369:38,1,187,2|8,0:0|0:0,0:0:0:0: +438,57,188781,1,0,0:0:0:0: +367,123,188897,2,0,P|298:124|162:91,1,187,2|8,0:0|0:0,0:0:0:0: +95,151,189243,1,0,0:0:0:0: +95,151,189358,6,0,L|106:252,1,93.5,2|0,0:0|0:0,0:0:0:0: +54,321,189589,2,0,P|109:298|219:381,1,187,8|2,0:0|0:0,0:0:0:0: +285,305,189935,1,0,0:0:0:0: +370,338,190051,2,0,P|419:338|462:310,1,93.5,8|0,0:0|0:0,0:0:0:0: +497,235,190281,6,0,P|485:171|468:44,1,187,2|8,0:0|0:0,0:0:0:0: +387,10,190627,1,0,0:0:0:0: +387,10,190743,2,0,L|377:109,1,93.5,2|0,0:0|0:0,0:0:0:0: +294,258,190974,2,0,L|304:159,1,93.5,8|0,0:0|0:0,0:0:0:0: +291,73,191204,6,0,P|239:22|128:42,1,187,2|8,0:0|0:0,0:0:0:0: +110,126,191551,1,0,0:0:0:0: +161,202,191666,2,0,P|209:193|250:142,1,93.5,2|0,0:0|0:0,0:0:0:0: +133,37,191897,2,0,P|83:37|30:77,1,93.5,8|0,0:0|0:0,0:0:0:0: +13,160,192127,6,0,B|45:242|165:276|256:192|256:192|347:108|467:142|499:224,1,561,2|8,0:0|0:0,0:0:0:0: +373,263,193051,1,2,0:0:0:0: +13,224,193974,6,0,B|45:142|165:108|256:192|256:192|347:276|467:242|499:160,1,561,2|8,0:0|0:0,0:0:0:0: +373,121,194898,1,2,0:0:0:0: +139,263,195127,1,8,0:0:0:0: +343,342,195358,1,2,0:0:0:0: +373,121,195589,2,8,L|359:5,1,93.5 +232,190,195820,6,0,P|228:235|251:275,1,93.5,2|10,0:0|0:0,0:0:0:0: +447,186,196051,2,0,P|470:147|461:88,1,93.5,10|10,0:0|0:0,0:0:0:0: +327,213,196281,1,10,0:0:0:0: +512,262,196397,5,10,0:0:0:0: +496,271,196454,1,2,0:0:0:0: +483,284,196512,1,10,0:0:0:0: +472,299,196570,1,10,0:0:0:0: +463,316,196627,1,10,0:0:0:0: +456,335,196685,1,10,0:0:0:0: +452,358,196743,5,10,0:0:0:0: +426,322,196801,1,10,0:0:0:0: +390,303,196858,1,10,0:0:0:0: +347,295,196916,1,10,0:0:0:0: +303,298,196974,1,10,0:0:0:0: +269,319,197031,1,10,0:0:0:0: +240,350,197089,1,10,0:0:0:0: +199,361,197147,1,10,0:0:0:0: +151,345,197204,5,10,0:0:0:0: +112,305,197262,1,10,0:0:0:0: +104,251,197320,1,10,0:0:0:0: +127,202,197377,1,10,0:0:0:0: +172,171,197435,1,10,0:0:0:0: +226,173,197493,1,10,0:0:0:0: +267,207,197551,1,10,0:0:0:0: +319,215,197608,1,10,0:0:0:0: +364,185,197666,6,0,P|371:142|384:-12,1,187,6|8,0:0|0:0,0:0:0:0: +293,44,198012,1,0,0:0:0:0: +464,131,198127,2,0,P|457:174|444:328,1,187,2|8,0:0|0:0,0:0:0:0: +364,185,198473,1,0,0:0:0:0: +249,278,198589,6,0,P|198:265|118:255,1,93.5,2|0,0:0|0:0,0:0:0:0: +30,99,198820,1,8,0:0:0:0: +30,99,199051,2,0,P|76:91|121:79,1,93.5,2|0,0:0|0:0,0:0:0:0: +199,27,199281,1,8,0:0:0:0: +113,175,199396,1,0,0:0:0:0: +355,186,199512,6,0,P|284:122|191:131,1,187,2|8,0:0|0:0,0:0:0:0: +113,175,199858,1,0,0:0:0:0: +180,321,199974,2,0,P|188:279|192:191,1,93.5,2|0,0:0|0:0,0:0:0:0: +16,163,200204,2,0,P|8:205|4:293,1,93.5,8|0,0:0|0:0,0:0:0:0: +86,315,200435,5,2,0:0:0:0: +192,228,200551,1,0,0:0:0:0: +71,107,200666,2,0,B|57:79|57:79|74:12,1,93.5,8|0,0:0|0:0,0:0:0:0: +268,190,200897,2,0,B|282:218|282:218|265:285,1,93.5,2|0,0:0|0:0,0:0:0:0: +86,200,201127,2,0,L|187:185,1,93.5,8|0,0:0|0:0,0:0:0:0: +512,85,201358,6,0,P|428:94|348:27,1,187,2|8,0:0|0:0,0:0:0:0: +247,2,201704,1,0,0:0:0:0: +190,93,201820,2,0,P|185:138|171:219,1,93.5,2|0,0:0|0:0,0:0:0:0: +357,153,202051,2,0,P|364:198|384:277,1,93.5,8|0,0:0|0:0,0:0:0:0: +427,341,202281,5,2,0:0:0:0: +449,182,202397,1,0,0:0:0:0: +287,258,202512,2,0,L|190:278,1,93.5,8|0,0:0|0:0,0:0:0:0: +10,123,202743,2,0,B|78:138|78:138|103:170|103:170|182:186,1,187,2|8,0:0|0:0,0:0:0:0: +249,122,203089,1,0,0:0:0:0: +173,0,203204,6,0,P|165:46|162:92,1,93.5,2|0,0:0|0:0,0:0:0:0: +327,194,203435,2,0,P|334:147|337:101,1,93.5,8|0,0:0|0:0,0:0:0:0: +78,274,203666,2,0,P|159:213|264:257,1,187,2|8,0:0|0:0,0:0:0:0: +297,307,204012,1,0,0:0:0:0: +379,366,204127,6,0,P|387:315|390:269,1,93.5,2|0,0:0|0:0,0:0:0:0: +327,194,204358,1,8,0:0:0:0: +357,100,204474,1,0,0:0:0:0: +512,159,204589,6,0,L|420:176,1,93.5,2|0,0:0|0:0,0:0:0:0: +268,121,204820,1,8,0:0:0:0: +385,12,204935,1,0,0:0:0:0: +357,100,205051,6,0,L|160:75,1,187,2|8,0:0|0:0,0:0:0:0: +1,107,205397,1,0,0:0:0:0: +78,143,205512,2,0,B|94:114|94:114|74:32,1,93.5,2|0,0:0|0:0,0:0:0:0: +1,291,205743,2,0,B|-15:320|-15:320|5:402,1,93.5,8|0,0:0|0:0,0:0:0:0: +130,229,205974,6,0,L|7:215,1,93.5,2|0,0:0|0:0,0:0:0:0: +183,327,206204,1,8,0:0:0:0: +234,177,206320,1,0,0:0:0:0: +286,277,206435,2,0,P|374:289|468:223,1,187,2|8,0:0|0:0,0:0:0:0: +425,123,206781,1,0,0:0:0:0: +322,180,206897,6,0,P|224:170|135:140,1,187,2|8,0:0|0:0,0:0:0:0: +140,142,207358,2,0,P|150:195|154:258,1,93.5,2|0,0:0|0:0,0:0:0:0: +323,370,207589,2,0,P|313:317|309:254,1,93.5,8|0,0:0|0:0,0:0:0:0: +62,268,207820,6,0,P|127:324|222:300,1,187,2|8,0:0|0:0,0:0:0:0: +243,204,208166,1,0,0:0:0:0: +309,277,208281,2,0,P|365:282|426:290,1,93.5,2|0,0:0|0:0,0:0:0:0: +461,105,208512,2,0,P|404:99|344:92,1,93.5,8|0,0:0|0:0,0:0:0:0: +481,338,208743,6,0,P|492:262|383:195,2,187,2|8|2,0:0|0:0|0:0,0:0:0:0: +323,370,209320,1,0,0:0:0:0: +309,277,209435,6,0,L|289:153,1,93.5,8|0,0:0|0:0,0:0:0:0: +145,71,209666,2,0,L|262:115,1,93.5,2|0,0:0|0:0,0:0:0:0: +401,28,209897,2,0,L|303:107,1,93.5,8|0,0:0|0:0,0:0:0:0: +206,195,210127,5,2,0:0:0:0: +263,16,210243,1,0,0:0:0:0: +380,159,210358,1,8,0:0:0:0: +380,159,210589,6,0,P|333:151|288:141,1,93.5,2|0,0:0|0:0,0:0:0:0: +197,96,210820,1,8,0:0:0:0: +116,158,210935,1,0,0:0:0:0: +12,43,211051,6,0,P|58:50|103:60,1,93.5,2|0,0:0|0:0,0:0:0:0: +206,195,211281,1,8,0:0:0:0: +278,43,211397,1,0,0:0:0:0: +448,187,211512,6,0,P|357:198|287:140,1,187,2|8,0:0|0:0,0:0:0:0: +197,96,211858,1,0,0:0:0:0: +206,195,211974,5,10,0:0:0:0: +353,85,212089,1,0,0:0:0:0: +234,360,212204,1,8,0:0:0:0: +116,158,212320,1,8,0:0:0:0: +320,269,212435,6,0,P|392:256|515:238,1,187,6|8,0:0|0:0,0:0:0:0: +456,334,212781,1,0,0:0:0:0: +354,166,212897,2,0,P|282:179|159:197,1,187,2|8,0:0|0:0,0:0:0:0: +65,238,213243,1,0,0:0:0:0: +129,370,213358,6,0,P|139:303|154:247,1,93.5,2|0,0:0|0:0,0:0:0:0: +81,67,213589,1,8,0:0:0:0: +81,67,213820,2,0,P|90:112|96:159,1,93.5,2|0,0:0|0:0,0:0:0:0: +60,324,214051,1,8,0:0:0:0: +224,263,214166,1,0,0:0:0:0: +65,238,214281,6,0,L|-38:229,1,93.5,2|0,0:0|0:0,0:0:0:0: +130,367,214512,1,8,0:0:0:0: +304,314,214628,1,0,0:0:0:0: +224,263,214743,2,0,B|206:293|206:293|221:349,1,93.5,2|0,0:0|0:0,0:0:0:0: +366,147,214974,2,0,B|384:117|384:117|368:60,1,93.5,8|0,0:0|0:0,0:0:0:0: +204,176,215204,5,2,0:0:0:0: +361,243,215320,1,0,0:0:0:0: +294,103,215435,2,0,L|287:201,1,93.5,8|0,0:0|0:0,0:0:0:0: +50,91,215666,2,0,P|102:47|225:55,1,187,2|8,0:0|0:0,0:0:0:0: +432,36,216012,5,8,0:0:0:0: +432,36,216070,1,8,0:0:0:0: +432,36,216127,2,0,P|383:29|310:9,1,93.5,2|0,0:0|0:0,0:0:0:0: +393,222,216358,2,0,P|426:189|462:159,1,93.5,8|0,0:0|0:0,0:0:0:0: +295,134,216589,2,0,P|218:137|115:203,1,187,2|8,0:0|0:0,0:0:0:0: +48,248,216935,1,0,0:0:0:0: +18,62,217051,6,0,L|41:158,1,93.5,2|0,0:0|0:0,0:0:0:0: +131,296,217281,2,0,B|143:228|143:228|125:193|125:193|141:100,1,187,8|2,0:0|0:0,0:0:0:0: +279,110,217627,2,0,L|216:186,1,93.5,0|8,0:0|0:0,0:0:0:0: +131,296,217858,1,0,0:0:0:0: +194,368,217974,6,0,P|223:323|219:266,1,93.5,2|0,0:0|0:0,0:0:0:0: +48,248,218204,2,0,P|35:292|46:337,1,93.5,8|0,0:0|0:0,0:0:0:0: +274,225,218435,6,0,L|299:115,1,93.5,2|0,0:0|0:0,0:0:0:0: +2,80,218666,2,0,L|22:171,1,93.5,8|0,0:0|0:0,0:0:0:0: +254,53,218897,6,0,P|224:17|104:42,1,140.25,2|0,0:0|0:0,0:0:0:0: +195,199,219127,6,0,P|238:181|266:111,1,98.1749970039369,8|0,0:0|0:0,0:0:0:0: +82,73,219358,6,0,P|76:119|145:189,1,126.224996147919,2|0,2:0|2:0,2:0:0:0: +171,134,219589,6,0,L|182:63,1,56.0999982879639,8|0,0:0|0:0,0:0:0:0: +327,237,219820,6,0,P|229:220|153:292,1,187,2|8,0:0|0:0,0:0:0:0: +0,315,220166,1,0,0:0:0:0: +71,260,220281,2,0,B|87:291|87:291|74:358,1,93.5,2|0,0:0|0:0,0:0:0:0: +96,99,220512,2,0,B|80:68|80:68|93:1,1,93.5,8|0,0:0|0:0,0:0:0:0: +121,182,220743,6,0,L|9:170,1,93.5,2|0,0:0|0:0,0:0:0:0: +161,53,220974,1,8,0:0:0:0: +242,151,221089,1,0,0:0:0:0: +281,9,221204,2,0,P|379:-2|471:71,1,187,2|8,0:0|0:0,0:0:0:0: +389,306,221551,5,8,0:0:0:0: +389,306,221608,1,8,0:0:0:0: +389,306,221666,2,0,P|370:262|376:195,1,93.5,2|0,0:0|0:0,0:0:0:0: +427,130,221897,2,0,L|234:151,1,187,8|2,0:0|0:0,0:0:0:0: +120,283,222243,1,0,0:0:0:0: +210,299,222358,6,0,P|200:259|163:181,1,93.5,8|0,0:0|0:0,0:0:0:0: +267,2,222589,2,0,P|237:30|188:101,1,93.5,2|0,0:0|0:0,0:0:0:0: +0,103,222820,2,0,P|39:114|125:121,1,93.5,8|0,0:0|0:0,0:0:0:0: +301,317,223051,6,0,P|261:305|175:298,1,93.5,2|0,0:0|0:0,0:0:0:0: +122,344,223281,1,8,0:0:0:0: +180,210,223397,1,0,0:0:0:0: +323,244,223512,6,0,P|384:252|484:175,1,187,2|8,0:0|0:0,0:0:0:0: +425,99,223858,2,0,P|364:91|264:168,1,187,2|2,0:0|0:0,0:0:0:0: +180,210,224204,2,0,L|68:197,1,93.5,8|0,0:0|0:0,0:0:0:0: +5,166,224435,5,2,0:0:0:0: +64,286,224551,1,0,0:0:0:0: +154,124,224666,2,0,B|171:92|171:92|154:13,1,93.5,8|0,0:0|0:0,0:0:0:0: +84,78,224897,5,2,0:0:0:0: +241,118,225012,1,0,0:0:0:0: +84,78,225127,2,0,L|-13:89,1,93.5,8|0,0:0|0:0,0:0:0:0: +149,260,225358,6,0,B|251:234|212:312|352:265,1,187,2|8,0:0|0:0,0:0:0:0: +448,184,225704,2,0,B|324:153|324:153|310:177|284:198,1,187,2|2,0:0|0:0,0:0:0:0: +406,360,226051,2,0,P|412:311|418:257,1,93.5,8|0,0:0|0:0,0:0:0:0: +380,80,226281,1,2,0:0:0:0: +380,80,226512,5,8,0:0:0:0: +502,257,226627,1,2,0:0:0:0: +480,115,226743,5,2,0:0:0:0: +396,231,226858,1,8,0:0:0:0: +485,129,226974,5,8,0:0:0:0: +393,213,227089,1,8,0:0:0:0: +439,171,227204,6,0,L|296:157,1,140.25,2|2,0:0|0:0,0:0:0:0: +299,157,228588,6,0,P|275:197|283:252,1,93.5,2|0,0:0|0:0,0:0:0:0: +422,93,229280,2,0,P|428:47|407:6,1,93.5,2|0,0:0|0:0,0:0:0:0: +324,0,229973,1,2,0:0:0:0: +238,105,230204,5,0,0:0:0:0: +172,136,230434,1,0,0:0:0:0: +180,63,230665,1,0,0:0:0:0: +250,215,230896,6,0,L|231:364,1,140.25,2|2,0:0|0:0,0:0:0:0: +232,354,232280,6,0,L|125:371,1,93.5 +289,280,232973,2,0,L|396:297,1,93.5,2|0,0:0|0:0,0:0:0:0: +212,226,233665,1,2,0:0:0:0: +356,119,233896,5,0,0:0:0:0: +304,62,234127,1,0,0:0:0:0: +231,74,234357,1,0,0:0:0:0: +73,213,234588,6,0,L|216:227,1,140.25,2|2,0:0|0:0,0:0:0:0: +213,227,235973,6,0,P|237:187|229:132,1,93.5,2|0,0:0|0:0,0:0:0:0: +90,291,236665,2,0,P|83:336|107:379,1,93.5,2|0,0:0|0:0,0:0:0:0: +209,330,237357,6,0,L|147:318,1,46.75,2|0,0:0|0:0,0:0:0:0: +122,166,237819,1,0,0:0:0:0: +303,228,238050,1,0,0:0:0:0: +198,241,238280,6,0,P|161:169|186:107,1,140.25,2|0,0:0|0:0,0:0:0:0: +340,37,239204,5,0,0:0:0:0: +402,74,239434,1,0,0:0:0:0: +470,63,239665,1,2,0:0:0:0: +427,182,239896,5,0,0:0:0:0: +497,206,240127,1,0,0:0:0:0: +362,265,240357,5,2,0:0:0:0: +417,309,240588,1,0,0:0:0:0: +429,379,240819,1,0,0:0:0:0: +256,224,241050,5,2,0:0:0:0: +219,285,241280,1,0,0:0:0:0: +184,198,241511,1,0,0:0:0:0: +162,327,241742,1,0,0:0:0:0: +110,203,241973,6,0,P|64:196|16:229,1,93.5,2|2,0:0|0:0,0:0:0:0: +140,135,242665,2,0,P|148:95|140:71,1,46.75,2|0,0:0|0:0,0:0:0:0: +96,37,243127,1,2,0:0:0:0: +75,103,243357,1,0,0:0:0:0: +215,150,243588,5,2,0:0:0:0: +322,47,243819,1,0,0:0:0:0: +396,39,244050,2,0,L|448:32,1,46.75,2|0,0:0|0:0,0:0:0:0: +497,144,244511,2,0,L|395:133,1,93.5,2|0,0:0|0:0,0:0:0:0: +335,257,245204,1,0,0:0:0:0: +363,327,245434,6,0,P|405:282|382:203,1,140.25,2|0,0:0|0:0,0:0:0:0: +265,264,246357,1,2,0:0:0:0: +210,314,246588,1,0,0:0:0:0: +140,294,246819,2,0,P|132:264|133:230,1,46.75,2|0,0:0|0:0,0:0:0:0: +91,67,247280,5,2,0:0:0:0: +166,57,247511,2,0,P|163:80|157:102,1,46.75,2|0,0:0|0:0,0:0:0:0: +132,178,247973,2,0,L|194:170,2,46.75 +309,221,248665,1,2,0:0:0:0: +379,95,248896,1,0,0:0:0:0: +238,21,249127,6,0,P|228:61|228:79,1,46.75,2|0,0:0|0:0,0:0:0:0: +212,135,249588,1,0,0:0:0:0: +225,207,249819,1,2,0:0:0:0: +356,282,250050,6,0,P|366:242|366:224,1,46.75 +382,168,250511,1,0,0:0:0:0: +464,93,250742,6,0,B|441:76|441:76|363:99,1,93.5,2|0,0:0|0:0,0:0:0:0: +310,194,251550,2,0,L|228:184,1,70.1250026750566 +210,103,252247,1,0,0:0:0:0: +210,103,252702,6,0,L|141:111,1,70.1250026750566,2|0,0:0|0:0,0:0:0:0: +117,195,253506,1,2,0:0:0:0: +117,195,254095,6,0,L|36:184,1,70.1250026750566,2|2,0:0|0:0,0:0:0:0: +19,113,255580,1,2,0:0:0:0: +71,53,256480,6,0,P|126:48|182:100,1,122.718754681349,2|0,0:0|0:0,0:0:0:0: +211,259,257747,6,0,P|179:213|190:158,1,105.187504012585,2|0,0:0|0:0,0:0:0:0: +474,66,258892,6,0,P|433:121|242:116,1,271.734385365844,2|0,0:0|0:0,0:0:0:0: +210,216,263197,6,0,P|298:232|385:279,1,187,6|8,0:0|0:0,0:0:0:0: +456,330,263543,1,0,0:0:0:0: +465,242,263658,2,0,P|478:185|512:56,1,187,2|8,0:0|0:0,0:0:0:0: +425,84,264004,1,0,0:0:0:0: +368,19,264120,6,0,P|319:14|246:5,1,93.5,2|0,0:0|0:0,0:0:0:0: +280,139,264350,2,0,P|326:143|372:149,1,93.5,8|0,0:0|0:0,0:0:0:0: +197,57,264581,5,2,0:0:0:0: +121,35,264697,1,2,0:0:0:0: +50,67,264812,1,8,0:0:0:0: +21,139,264927,1,2,0:0:0:0: +37,213,265043,6,0,P|129:220|234:235,1,187,2|8,0:0|0:0,0:0:0:0: +314,216,265389,1,0,0:0:0:0: +283,308,265504,2,0,P|223:365|112:339,1,187,2|8,0:0|0:0,0:0:0:0: +57,295,265850,1,0,0:0:0:0: +142,255,265966,6,0,P|154:195|160:137,1,93.5,2|0,0:0|0:0,0:0:0:0: +52,120,266197,2,0,P|40:180|34:238,1,93.5,8|0,0:0|0:0,0:0:0:0: +217,109,266427,5,2,0:0:0:0: +297,102,266543,1,2,0:0:0:0: +368,138,266658,1,8,0:0:0:0: +406,207,266773,1,2,0:0:0:0: +404,283,266889,6,0,P|417:225|461:68,1,187,2|8,0:0|0:0,0:0:0:0: +503,22,267235,1,0,0:0:0:0: +411,13,267350,2,0,P|364:19|310:27,1,93.5,2|0,0:0|0:0,0:0:0:0: +237,75,267581,1,8,0:0:0:0: +169,6,267697,1,0,0:0:0:0: +148,102,267812,6,0,P|154:148|162:203,1,93.5,2|0,0:0|0:0,0:0:0:0: +333,216,268043,2,0,P|326:169|319:115,1,93.5,8|0,0:0|0:0,0:0:0:0: +63,146,268273,5,2,0:0:0:0: +11,206,268389,1,2,0:0:0:0: +2,283,268504,1,8,0:0:0:0: +36,352,268620,1,2,0:0:0:0: +107,381,268735,6,0,P|191:364|304:347,1,187,2|8,0:0|0:0,0:0:0:0: +370,299,269081,1,0,0:0:0:0: +333,216,269197,2,0,P|339:159|351:93,1,93.5,2|0,0:0|0:0,0:0:0:0: +288,44,269427,1,8,0:0:0:0: +368,2,269543,1,0,0:0:0:0: +512,90,269658,6,0,L|420:77,1,93.5,2|0,0:0|0:0,0:0:0:0: +173,113,269889,2,0,L|265:126,1,93.5,8|0,0:0|0:0,0:0:0:0: +381,222,270120,5,2,0:0:0:0: +306,244,270235,1,2,0:0:0:0: +232,267,270350,1,8,0:0:0:0: +158,289,270466,1,10,0:0:0:0: +154,280,270523,1,8,0:0:0:0: +150,272,270581,6,0,P|152:245|165:215,1,46.75,2|0,0:0|0:0,0:0:0:0: +136,76,270697,2,0,P|159:91|178:117,1,46.75,2|0,0:0|0:0,0:0:0:0: +318,154,270812,2,0,P|294:166|262:170,1,46.75,8|0,0:0|0:0,0:0:0:0: +103,158,270927,6,0,L|25:170,2,46.75,2|0|2,0:0|0:0|0:0,0:0:0:0: +407,33,271158,2,0,L|360:25,1,46.75,2|0,0:0|0:0,0:0:0:0: +216,97,271273,5,10,0:0:0:0: +221,91,271331,1,2,0:0:0:0: +227,87,271389,1,2,0:0:0:0: +235,86,271447,1,2,0:0:0:0: +243,87,271504,2,0,P|274:131|263:194,1,93.5,2|0,0:0|0:0,0:0:0:0: +389,311,271735,5,10,0:0:0:0: +367,268,271793,1,2,0:0:0:0: +377,221,271850,1,2,0:0:0:0: +417,190,271908,1,2,0:0:0:0: +466,194,271966,2,0,P|494:212|507:243,3,46.75,2|0|0|0,0:0|0:0|0:0|0:0,0:0:0:0: +439,260,272197,6,0,P|427:214|418:131,1,93.5,8|2,0:0|0:0,0:0:0:0: +436,94,272370,1,2,0:0:0:0: +441,88,272427,5,2,0:0:0:0: +391,121,272485,1,0,0:0:0:0: +334,118,272543,1,2,0:0:0:0: +285,90,272600,1,0,0:0:0:0: +262,39,272658,1,8,0:0:0:0: +219,3,272716,1,0,0:0:0:0: +163,0,272773,2,0,L|110:14,1,46.75,2|0,0:0|0:0,0:0:0:0: +13,60,272889,5,10,0:0:0:0: +49,87,272947,1,8,0:0:0:0: +61,128,273004,1,8,0:0:0:0: +53,174,273062,1,8,0:0:0:0: +26,207,273120,1,8,0:0:0:0: +13,249,273177,1,0,0:0:0:0: +21,291,273235,2,0,L|33:337,1,46.75,2|0,0:0|0:0,0:0:0:0: +126,380,273350,5,2,0:0:0:0: +162,383,273408,1,2,0:0:0:0: +194,367,273466,1,2,0:0:0:0: +213,339,273523,1,2,0:0:0:0: +242,320,273581,1,10,0:0:0:0: +277,322,273639,1,2,0:0:0:0: +307,345,273697,1,2,0:0:0:0: +343,352,273754,1,2,0:0:0:0: +375,334,273812,6,0,P|383:286|383:218,1,93.5,10|2,0:0|0:0,0:0:0:0: +380,221,273985,1,2,0:0:0:0: +370,203,274043,2,0,L|477:218,1,93.5,2|2,0:0|0:0,0:0:0:0: +263,211,274273,6,0,L|156:196,1,93.5,2|0,0:0|0:0,0:0:0:0: +103,234,274447,1,0,0:0:0:0: +103,234,274504,2,0,B|92:199|92:199|114:119,1,93.5,8|0,0:0|0:0,0:0:0:0: +315,46,274735,2,0,B|326:81|326:81|304:161,1,93.5,2|0,0:0|0:0,0:0:0:0: +248,83,274908,1,0,0:0:0:0: +248,83,274966,2,0,L|141:68,1,93.5,8|0,0:0|0:0,0:0:0:0: +18,156,275197,5,2,0:0:0:0: +115,326,275312,1,0,0:0:0:0: +115,326,275370,1,0,0:0:0:0: +115,326,275427,2,0,P|111:281|101:226,1,93.5,8|0,0:0|0:0,0:0:0:0: +218,50,275658,2,0,P|222:95|232:150,1,93.5,2|0,0:0|0:0,0:0:0:0: +307,291,275889,2,0,L|411:280,1,93.5,8|0,0:0|0:0,0:0:0:0: +471,313,276062,1,0,0:0:0:0: +471,313,276120,6,0,B|478:289|478:289|474:256,7,46.75,2|0|0|0|8|0|0|0,0:0|0:0|0:0|0:0|0:0|0:0|0:0|0:0,0:0:0:0: +372,161,276581,2,0,B|365:185|365:185|369:218,7,46.75,2|0|0|0|8|0|0|0,0:0|0:0|0:0|0:0|0:0|0:0|0:0|0:0,0:0:0:0: +446,195,277043,5,10,0:0:0:0: +234,69,277158,1,8,0:0:0:0: +307,291,277273,1,8,0:0:0:0: +495,131,277389,1,8,0:0:0:0: +327,42,277504,5,2,0:0:0:0: +321,85,277562,1,0,0:0:0:0: +303,124,277620,1,8,0:0:0:0: +271,153,277677,1,8,0:0:0:0: +231,167,277735,1,8,0:0:0:0: +188,170,277793,1,8,0:0:0:0: +147,161,277850,1,8,0:0:0:0: +108,142,277908,1,8,0:0:0:0: +80,111,277966,6,0,P|26:157|22:280,1,187,6|8,0:0|0:0,0:0:0:0: +84,330,278312,2,0,B|188:306|163:368|273:346,1,187,2|2,0:0|0:0,0:0:0:0: +351,312,278658,2,0,P|405:318|475:352,1,93.5,8|0,0:0|0:0,0:0:0:0: +277,257,278889,1,2,0:0:0:0: +277,257,279004,2,0,P|257:178|251:64,1,187,2|2,0:0|0:0,0:0:0:0: +321,3,279350,2,0,P|345:47|344:104,1,93.5,2|0,0:0|0:0,0:0:0:0: +178,142,279581,2,0,P|154:98|155:41,1,93.5,8|0,0:0|0:0,0:0:0:0: +250,72,279812,6,0,P|354:88|472:115,1,187,2|8,0:0|0:0,0:0:0:0: +452,198,280158,2,0,P|348:182|230:155,1,187,2|2,0:0|0:0,0:0:0:0: +208,235,280504,2,0,P|217:284|225:329,1,93.5,8|0,0:0|0:0,0:0:0:0: +125,215,280735,1,2,0:0:0:0: +125,215,280850,2,0,P|72:224|-13:122,1,187,2|2,0:0|0:0,0:0:0:0: +62,10,281197,2,0,P|69:52|67:110,1,93.5,2|0,0:0|0:0,0:0:0:0: +189,148,281427,2,0,P|187:101|194:55,1,93.5,8|0,0:0|0:0,0:0:0:0: +205,40,281600,1,0,0:0:0:0: +218,29,281658,6,0,P|303:43|413:60,1,187,2|8,0:0|0:0,0:0:0:0: +489,32,282004,2,0,P|524:69|499:203,1,187,2|2,0:0|0:0,0:0:0:0: +424,242,282350,2,0,P|416:191|412:130,1,93.5,8|0,0:0|0:0,0:0:0:0: +491,313,282581,1,2,0:0:0:0: +491,313,282697,2,0,P|427:279|296:283,1,187,2|2,0:0|0:0,0:0:0:0: +239,360,283043,2,0,P|230:291|217:234,1,93.5,2|0,0:0|0:0,0:0:0:0: +266,106,283273,2,0,P|275:175|288:232,1,93.5,8|0,0:0|0:0,0:0:0:0: +148,315,283504,6,0,P|91:273|-20:294,1,187,2|8,0:0|0:0,0:0:0:0: +162,217,283850,2,0,P|218:204|365:170,1,187,2|2,0:0|0:0,0:0:0:0: +95,87,284197,2,0,L|85:183,1,93.5,8|0,0:0|0:0,0:0:0:0: +61,358,284427,5,2,0:0:0:0: +61,358,284543,1,8,0:0:0:0: +227,288,284658,1,8,0:0:0:0: +227,288,284773,1,2,0:0:0:0: +159,375,284889,2,0,L|137:213,1,140.25,2|0,0:0|0:0,0:0:0:0: +216,73,285120,2,0,B|200:187|200:187|183:168|163:153,1,140.25,8|0,0:0|0:0,0:0:0:0: +121,113,285350,6,0,L|327:79,1,187,6|8,0:0|0:0,0:0:0:0: +377,144,285697,2,0,P|433:102|408:-9,1,187,2|2,0:0|0:0,0:0:0:0: +299,161,286043,2,0,L|285:253,1,93.5,8|0,0:0|0:0,0:0:0:0: +248,96,286273,1,2,0:0:0:0: +248,96,286389,2,0,P|202:52|83:71,1,187,2|2,0:0|0:0,0:0:0:0: +0,199,286735,2,0,P|51:195|108:172,1,93.5,2|0,0:0|0:0,0:0:0:0: +285,253,286966,2,8,P|239:229|196:185,1,93.5 +160,122,287197,6,0,L|126:341,1,187,2|8,0:0|0:0,0:0:0:0: +196,371,287543,2,0,P|276:320|373:351,1,187,2|2,0:0|0:0,0:0:0:0: +430,284,287889,2,0,P|479:295|538:303,1,93.5,8|0,0:0|0:0,0:0:0:0: +349,246,288120,1,2,0:0:0:0: +349,246,288235,2,0,P|336:185|319:51,1,187,2|2,0:0|0:0,0:0:0:0: +382,5,288581,2,0,L|491:21,1,93.5,2|0,0:0|0:0,0:0:0:0: +245,108,288812,2,0,L|136:92,1,93.5,8|0,0:0|0:0,0:0:0:0: +139,86,288985,1,0,0:0:0:0: +124,78,289043,6,0,P|142:128|46:249,1,187,2|8,0:0|0:0,0:0:0:0: +29,315,289389,2,0,P|114:328|249:358,1,187,2|2,0:0|0:0,0:0:0:0: +301,334,289735,2,0,P|292:280|283:203,1,93.5,8|0,0:0|0:0,0:0:0:0: +195,82,289966,1,2,0:0:0:0: +195,82,290081,2,0,B|163:199|163:199|209:254,1,187,2|2,0:0|0:0,0:0:0:0: +365,164,290427,2,0,L|258:148,1,93.5,2|0,0:0|0:0,0:0:0:0: +375,307,290658,2,0,L|482:323,1,93.5,8|0,0:0|0:0,0:0:0:0: +505,239,290889,6,0,P|519:179|483:55,1,187,2|8,0:0|0:0,0:0:0:0: +408,9,291235,2,0,P|334:30|193:48,1,187,2|2,0:0|0:0,0:0:0:0: +155,110,291581,2,0,P|118:102|55:94,1,93.5,8|0,0:0|0:0,0:0:0:0: +245,138,291812,2,0,P|285:200|249:315,1,187,2|8,0:0|0:0,0:0:0:0: +186,368,292158,1,0,0:0:0:0: +0,252,292273,6,0,L|147:236,1,140.25,2|0,0:0|0:0,0:0:0:0: +179,271,292504,2,0,L|82:282,1,93.5,8|0,0:0|0:0,0:0:0:0: +43,150,292735,2,0,L|139:138,1,93.5,2|0,0:0|0:0,0:0:0:0: +378,221,292966,2,0,P|309:240|212:164,1,187,8|2,0:0|0:0,0:0:0:0: +132,54,293312,1,0,0:0:0:0: +227,0,293427,2,0,L|205:119,1,93.5,8|0,0:0|0:0,0:0:0:0: +147,222,293658,5,2,0:0:0:0: +132,54,293773,1,0,0:0:0:0: +285,131,293889,2,0,P|331:141|388:146,1,93.5,8|0,0:0|0:0,0:0:0:0: +450,101,294120,5,2,0:0:0:0: +363,231,294235,1,2,0:0:0:0: +334,58,294350,1,8,0:0:0:0: +441,199,294466,1,2,0:0:0:0: +303,296,294581,6,0,L|254:308,3,46.75,2|2|2|0,0:0|0:0|0:0|0:0,0:0:0:0: +204,367,294812,2,0,L|158:355,3,46.75,8|2|8|2,0:0|0:0|0:0|0:0,0:0:0:0: +80,363,295043,1,2,0:0:0:0: +45,330,295100,1,2,0:0:0:0: +26,288,295158,1,10,0:0:0:0: +18,242,295216,1,2,0:0:0:0: +22,195,295273,1,2,0:0:0:0: +39,149,295331,1,2,0:0:0:0: +71,111,295389,1,2,0:0:0:0: +116,93,295447,1,2,0:0:0:0: +168,92,295504,6,0,L|391:131,1,187,6|8,0:0|0:0,0:0:0:0: +444,197,295850,1,0,0:0:0:0: +338,248,295966,2,0,L|115:209,1,187,2|8,0:0|0:0,0:0:0:0: +54,275,296312,1,0,0:0:0:0: +152,341,296427,2,0,L|268:360,1,93.5,2|0,0:0|0:0,0:0:0:0: +499,283,296658,2,0,P|473:256|339:249,1,140.25,8|0,0:0|0:0,0:0:0:0: +338,248,296889,2,0,L|324:124,1,93.5,2|0,0:0|0:0,0:0:0:0: +420,129,297120,1,8,0:0:0:0: +397,335,297235,1,0,0:0:0:0: +240,266,297350,6,0,B|197:242|197:242|56:271,1,187,2|8,0:0|0:0,0:0:0:0: +143,23,297697,2,0,B|186:47|186:47|327:18,1,187,2|2,0:0|0:0,0:0:0:0: +150,163,298043,2,0,L|50:147,1,93.5,8|0,0:0|0:0,0:0:0:0: +264,129,298273,2,0,B|334:122|334:122|371:146|371:146|460:136,1,187,2|8,0:0|0:0,0:0:0:0: +306,208,298620,2,0,L|270:313,1,93.5,0|2,0:0|0:0,0:0:0:0: +443,137,298850,5,10,0:0:0:0: +321,20,298966,1,8,0:0:0:0: +390,236,299081,1,10,0:0:0:0: +465,59,299197,6,0,B|352:46|412:116|277:97,1,187,2|8,0:0|0:0,0:0:0:0: +75,82,299543,1,0,0:0:0:0: +75,82,299658,2,0,P|122:26|258:65,1,187,2|8,0:0|0:0,0:0:0:0: +214,214,300004,1,0,0:0:0:0: +214,214,300120,2,0,L|194:102,1,93.5,2|0,0:0|0:0,0:0:0:0: +325,194,300350,2,0,L|303:362,1,140.25,8|0,0:0|0:0,0:0:0:0: +332,378,300581,2,0,L|222:364,1,93.5,2|0,0:0|0:0,0:0:0:0: +391,266,300812,2,0,L|501:280,1,93.5,8|0,0:0|0:0,0:0:0:0: +237,290,301043,6,0,L|42:262,1,187,2|8,0:0|0:0,0:0:0:0: +0,154,301389,1,0,0:0:0:0: +53,47,301504,2,0,L|248:75,1,187,2|8,0:0|0:0,0:0:0:0: +290,183,301850,1,0,0:0:0:0: +237,290,301966,2,0,L|138:275,1,93.5,2|0,0:0|0:0,0:0:0:0: +348,127,302197,2,0,L|447:112,1,93.5,8|0,0:0|0:0,0:0:0:0: +482,321,302427,2,0,P|448:268|318:266,1,187,2|8,0:0|0:0,0:0:0:0: +212,183,302773,1,0,0:0:0:0: +296,62,302889,6,0,P|307:111|306:171,1,93.5,2|0,0:0|0:0,0:0:0:0: +144,275,303120,2,0,P|133:226|134:166,1,93.5,8|0,0:0|0:0,0:0:0:0: +289,328,303350,2,0,B|183:302|233:387|95:356,1,187,2|8,0:0|0:0,0:0:0:0: +42,263,303697,1,0,0:0:0:0: +132,182,303812,6,0,P|180:125|149:5,1,187,2|8,0:0|0:0,0:0:0:0: +68,39,304158,1,0,0:0:0:0: +68,39,304273,2,0,P|55:75|49:136,1,93.5,2|0,0:0|0:0,0:0:0:0: +269,175,304504,2,0,P|282:139|288:78,1,93.5,8|0,0:0|0:0,0:0:0:0: +163,20,304735,6,0,P|173:115|183:232,1,187,2|8,0:0|0:0,0:0:0:0: +146,296,305081,2,0,P|197:258|325:295,1,187,2|2,0:0|0:0,0:0:0:0: +378,353,305427,1,8,0:0:0:0: +470,323,305543,1,0,0:0:0:0: +403,252,305658,6,0,P|411:158|421:65,1,187,2|8,0:0|0:0,0:0:0:0: +353,1,306004,1,0,0:0:0:0: +248,105,306120,2,0,P|304:107|352:65,1,93.5,2|0,0:0|0:0,0:0:0:0: +178,48,306350,2,0,P|136:26|91:31,1,93.5,8|0,0:0|0:0,0:0:0:0: +67,171,306581,6,0,P|56:224|49:280,1,93.5,2|0,0:0|0:0,0:0:0:0: +101,341,306812,1,8,0:0:0:0: +196,332,306927,1,0,0:0:0:0: +148,251,307043,2,0,P|207:210|328:230,1,187,2|8,0:0|0:0,0:0:0:0: +395,165,307389,1,0,0:0:0:0: +327,32,307504,6,0,P|315:80|308:129,1,93.5,2|0,0:0|0:0,0:0:0:0: +379,356,307735,2,0,P|391:308|398:259,1,93.5,8|0,0:0|0:0,0:0:0:0: +511,90,307966,6,0,L|483:-25,1,93.5,2|0,0:0|0:0,0:0:0:0: +473,292,308197,2,0,L|495:382,1,93.5,8|0,0:0|0:0,0:0:0:0: +512,192,308427,5,2,0:0:0:0: +418,163,308543,1,0,0:0:0:0: +375,249,308658,1,8,0:0:0:0: +379,256,308889,5,2,0:0:0:0: +281,219,309004,1,10,0:0:0:0: +275,203,309062,1,2,0:0:0:0: +271,188,309120,1,10,0:0:0:0: +268,171,309177,1,10,0:0:0:0: +265,156,309235,1,10,0:0:0:0: +264,140,309293,1,10,0:0:0:0: +263,124,309350,5,2,0:0:0:0: +233,165,309408,1,2,0:0:0:0: +189,185,309466,1,2,0:0:0:0: +142,183,309523,1,2,0:0:0:0: +105,155,309581,1,10,0:0:0:0: +86,111,309639,1,2,0:0:0:0: +90,63,309697,1,10,0:0:0:0: +122,27,309754,1,2,0:0:0:0: +169,16,309812,6,0,L|237:24,1,46.75,10|2,0:0|0:0,0:0:0:0: +263,124,309927,2,0,L|331:116,1,46.75,10|2,0:0|0:0,0:0:0:0: +361,42,310043,2,0,L|429:50,1,46.75,10|2,0:0|0:0,0:0:0:0: +495,106,310158,1,10,0:0:0:0: +495,106,310216,1,10,0:0:0:0: +495,106,310273,6,0,L|480:318,1,187,6|8,0:0|0:0,0:0:0:0: +428,371,310620,1,0,0:0:0:0: +316,222,310735,2,0,L|329:35,1,187,2|8,0:0|0:0,0:0:0:0: +242,71,311081,1,0,0:0:0:0: +316,222,311197,6,0,P|382:211|413:234,1,93.5,2|0,0:0|0:0,0:0:0:0: +481,292,311427,1,8,0:0:0:0: +481,292,311658,2,0,L|487:198,1,93.5,2|0,0:0|0:0,0:0:0:0: +495,106,311889,1,8,0:0:0:0: +316,222,312004,1,0,0:0:0:0: +428,371,312120,6,0,B|342:392|328:324|229:344,1,187,2|8,0:0|0:0,0:0:0:0: +157,369,312466,1,0,0:0:0:0: +61,235,312581,2,0,P|56:281|74:324,1,93.5,2|0,0:0|0:0,0:0:0:0: +214,214,312812,2,0,P|219:168|201:125,1,93.5,8|0,0:0|0:0,0:0:0:0: +90,63,313043,5,2,0:0:0:0: +146,259,313158,1,0,0:0:0:0: +288,113,313273,2,0,B|307:4,1,93.5,8|0,0:0|0:0,0:0:0:0: +129,166,313504,2,0,B|146:259,1,93.5,2|0,0:0|0:0,0:0:0:0: +178,48,313735,2,0,P|136:67|89:62,1,93.5,8|0,0:0|0:0,0:0:0:0: +357,237,313966,6,0,P|422:175|519:198,1,187,2|8,0:0|0:0,0:0:0:0: +490,283,314312,1,0,0:0:0:0: +465,372,314427,2,0,L|357:354,1,93.5,2|0,0:0|0:0,0:0:0:0: +264,221,314658,2,0,L|372:239,1,93.5,8|0,0:0|0:0,0:0:0:0: +201,356,314889,6,0,P|118:355|52:286,1,140.25,2|0,0:0|0:0,0:0:0:0: +32,263,315120,2,0,L|25:168,1,93.5,8|0,0:0|0:0,0:0:0:0: +258,36,315350,2,0,B|266:125|200:130|215:226,1,187,2|8,0:0|0:0,0:0:0:0: +262,294,315697,1,0,0:0:0:0: +353,237,315812,6,0,B|377:197|377:197|370:141,1,93.5,2|0,0:0|0:0,0:0:0:0: +262,294,316043,2,0,B|238:334|238:334|245:390,1,93.5,8|0,0:0|0:0,0:0:0:0: +372,356,316273,2,0,B|468:339,1,93.5,2|0,0:0|0:0,0:0:0:0: +213,213,316504,2,0,B|117:230,1,93.5,8|0,0:0|0:0,0:0:0:0: +36,14,316735,6,0,P|100:46|93:164,1,187,2|8,0:0|0:0,0:0:0:0: +37,357,317081,1,0,0:0:0:0: +37,357,317197,2,0,P|32:285|138:232,1,187,2|8,0:0|0:0,0:0:0:0: +334,185,317543,1,8,0:0:0:0: +334,185,317600,1,8,0:0:0:0: +334,185,317658,6,0,P|274:224|175:159,1,187,6|8,0:0|0:0,0:0:0:0: +207,84,318004,1,0,0:0:0:0: +387,119,318120,2,0,P|373:181|403:221,1,93.5,2|0,0:0|0:0,0:0:0:0: +491,311,318350,2,0,P|505:249|475:209,1,93.5,8|0,0:0|0:0,0:0:0:0: +222,356,318581,6,0,B|309:359|309:359|334:351|334:351|422:354,1,187,2|8,0:0|0:0,0:0:0:0: +491,311,318927,1,0,0:0:0:0: +304,229,319043,2,0,B|216:232|216:232|191:224|191:224|103:227,1,187,2|8,0:0|0:0,0:0:0:0: +35,184,319389,1,0,0:0:0:0: +197,0,319504,6,0,P|257:80|212:171,1,187,2|8,0:0|0:0,0:0:0:0: +231,155,319966,2,0,P|281:145|329:141,1,93.5,2|0,0:0|0:0,0:0:0:0: +501,305,320197,2,0,P|451:294|403:290,1,93.5,8|0,0:0|0:0,0:0:0:0: +152,382,320427,6,0,P|92:302|137:211,1,187,2|8,0:0|0:0,0:0:0:0: +143,136,320773,1,0,0:0:0:0: +221,242,320889,2,0,P|211:287|207:334,1,93.5,2|0,0:0|0:0,0:0:0:0: +63,159,321120,2,0,P|58:112|49:66,1,93.5,8|0,0:0|0:0,0:0:0:0: +340,49,321350,6,0,P|317:135|231:155,2,187,2|8|2,0:0|0:0|0:0,0:0:0:0: +173,47,321927,1,0,0:0:0:0: +143,136,322043,2,0,L|154:246,1,93.5,8|0,0:0|0:0,0:0:0:0: +400,384,322273,6,0,L|411:274,1,93.5,2|0,0:0|0:0,0:0:0:0: +257,173,322504,2,0,L|332:227,1,93.5,8|0,0:0|0:0,0:0:0:0: +512,154,322735,2,0,L|426:192,1,93.5,2|0,0:0|0:0,0:0:0:0: +256,352,322966,1,8,0:0:0:0: +170,310,323081,1,0,0:0:0:0: +100,373,323197,6,0,L|2:368,1,93.5,2|0,0:0|0:0,0:0:0:0: +152,229,323427,2,0,L|250:224,1,93.5,8|0,0:0|0:0,0:0:0:0: +93,294,323658,2,0,L|-5:289,1,93.5,2|0,0:0|0:0,0:0:0:0: +145,150,323888,2,0,L|243:145,1,93.5,8|0,0:0|0:0,0:0:0:0: +82,221,324120,5,2,0:0:0:0: +69,207,324177,1,2,0:0:0:0: +60,191,324235,1,2,0:0:0:0: +54,173,324293,1,2,0:0:0:0: +52,154,324350,1,10,0:0:0:0: +54,136,324408,1,2,0:0:0:0: +60,118,324466,1,10,0:0:0:0: +70,102,324523,1,10,0:0:0:0: +82,88,324581,5,2,0:0:0:0: +136,92,324638,1,2,0:0:0:0: +176,130,324696,1,10,0:0:0:0: +185,185,324754,1,2,0:0:0:0: +157,233,324811,1,10,0:0:0:0: +129,280,324870,1,10,0:0:0:0: +137,335,324927,1,10,0:0:0:0: +177,373,324985,1,10,0:0:0:0: +232,378,325043,6,0,B|320:375|320:375|344:382|344:382|418:380,1,187,6|8,0:0|0:0,0:0:0:0: +485,314,325389,1,0,0:0:0:0: +267,218,325504,2,0,B|179:215|179:215|155:222|155:222|81:220,1,187,2|8,0:0|0:0,0:0:0:0: +14,154,325850,1,0,0:0:0:0: +323,267,325966,6,0,P|341:225|331:180,1,93.5,2|0,0:0|0:0,0:0:0:0: +250,19,326197,1,8,0:0:0:0: +250,19,326427,2,0,L|240:115,1,93.5,2|0,0:0|0:0,0:0:0:0: +426,191,326658,2,0,L|435:94,1,93.5,8|0,0:0|0:0,0:0:0:0: +82,221,326889,6,0,B|159:244|180:198|267:218,1,187,2|8,0:0|0:0,0:0:0:0: +511,288,327235,1,0,0:0:0:0: +449,357,327350,2,0,B|341:346,1,93.5,2|0,0:0|0:0,0:0:0:0: +332,181,327581,2,0,B|440:192,1,93.5,8|0,0:0|0:0,0:0:0:0: +505,141,327812,5,2,0:0:0:0: +304,46,327927,1,0,0:0:0:0: +323,268,328043,2,0,P|341:229|327:170,1,93.5,8|0,0:0|0:0,0:0:0:0: +155,62,328273,2,0,P|137:101|151:160,1,93.5,2|0,0:0|0:0,0:0:0:0: +248,372,328504,2,0,B|140:383,1,93.5,8|0,0:0|0:0,0:0:0:0: +242,206,328735,6,0,B|297:201|297:201|302:204|302:204|305:200|305:200|433:189,1,187,2|8,0:0|0:0,0:0:0:0: +503,242,329081,1,0,0:0:0:0: +442,9,329197,2,0,B|423:49|423:49|434:97,1,93.5,2|0,0:0|0:0,0:0:0:0: +323,268,329427,2,0,B|341:227|341:227|330:179,1,93.5,8|0,0:0|0:0,0:0:0:0: +155,62,329658,6,0,L|171:222,1,140.25,2|0,0:0|0:0,0:0:0:0: +168,201,329889,2,0,P|123:169|75:182,1,93.5,8|0,0:0|0:0,0:0:0:0: +229,277,330120,2,0,L|322:267,1,93.5,2|0,0:0|0:0,0:0:0:0: +137,335,330350,2,0,L|43:325,1,93.5,8|0,0:0|0:0,0:0:0:0: +309,359,330581,6,0,P|346:302|414:298,1,140.25,2|0,0:0|0:0,0:0:0:0: +415,299,330812,2,0,P|405:251|426:205,1,93.5,8|0,0:0|0:0,0:0:0:0: +512,47,331043,2,0,L|502:140,1,93.5,2|0,0:0|0:0,0:0:0:0: +330,179,331273,2,0,L|339:85,1,93.5,8|0,0:0|0:0,0:0:0:0: +512,320,331504,6,0,B|450:318|452:378|380:370,1,140.25,2|0,0:0|0:0,0:0:0:0: +385,370,331735,2,0,L|291:360,1,93.5,8|0,0:0|0:0,0:0:0:0: +62,381,331966,1,2,0:0:0:0: +161,306,332081,1,8,0:0:0:0: +162,259,332138,1,8,0:0:0:0: +140,219,332196,1,8,0:0:0:0: +101,194,332254,1,8,0:0:0:0: +73,155,332312,1,8,0:0:0:0: +73,108,332370,1,8,0:0:0:0: +96,68,332427,6,0,P|152:99|289:37,1,187,6|8,0:0|0:0,0:0:0:0: +337,9,332773,1,0,0:0:0:0: +421,210,332889,2,0,B|435:170|435:170|418:119,1,93.5,2|0,0:0|0:0,0:0:0:0: +215,213,333120,2,0,B|201:253|201:253|217:303,1,93.5,8|0,0:0|0:0,0:0:0:0: +344,145,333350,6,0,B|340:81|340:81|344:76|344:76|340:73|340:73|335:-14,1,140.25,2|0,0:0|0:0,0:0:0:0: +337,9,333581,2,0,L|446:24,1,93.5,8|0,0:0|0:0,0:0:0:0: +498,196,333812,2,0,P|456:182|421:210,1,93.5,2|0,0:0|0:0,0:0:0:0: +292,360,334043,2,0,P|256:387|214:373,1,93.5,8|0,0:0|0:0,0:0:0:0: +32,201,334273,6,0,B|119:177|135:235|215:212,1,187,2|8,0:0|0:0,0:0:0:0: +214,212,334735,2,0,P|208:181|198:97,1,93.5,2|0,0:0|0:0,0:0:0:0: +306,267,334966,2,0,P|300:297|290:381,1,93.5,8|0,0:0|0:0,0:0:0:0: +72,357,335197,6,0,P|98:307|224:307,1,187,2|8,0:0|0:0,0:0:0:0: +291,359,335543,1,0,0:0:0:0: +498,196,335658,2,0,B|426:187|426:187|392:199|392:199|301:187,1,187,2|8,0:0|0:0,0:0:0:0: +221,176,336004,1,0,0:0:0:0: +10,86,336120,6,0,P|80:77|154:44,1,140.25,2|0,0:0|0:0,0:0:0:0: +143,50,336350,2,0,P|111:107|120:155,1,93.5,8|0,0:0|0:0,0:0:0:0: +277,245,336581,2,0,P|244:188|198:171,1,93.5,2|0,0:0|0:0,0:0:0:0: +41,262,336812,2,0,P|106:262|143:230,1,93.5,8|0,0:0|0:0,0:0:0:0: +223,176,337043,5,2,0:0:0:0: +221,157,337100,1,2,0:0:0:0: +219,138,337158,1,10,0:0:0:0: +217,120,337216,1,2,0:0:0:0: +215,101,337273,1,2,0:0:0:0: +213,82,337331,1,2,0:0:0:0: +211,64,337389,1,2,0:0:0:0: +209,45,337446,1,2,0:0:0:0: +208,27,337504,5,2,0:0:0:0: +258,48,337561,1,2,0:0:0:0: +283,97,337619,1,2,0:0:0:0: +270,151,337677,1,2,0:0:0:0: +227,184,337734,1,10,0:0:0:0: +183,217,337793,1,10,0:0:0:0: +170,270,337851,1,10,0:0:0:0: +195,319,337909,1,10,0:0:0:0: +246,340,337966,6,0,B|313:336|313:336|346:346|346:346|438:337,1,187,6|8,0:0|0:0,0:0:0:0: +501,276,338312,1,0,0:0:0:0: +266,215,338427,2,0,B|198:211|198:211|165:221|165:221|73:212,1,187,2|8,0:0|0:0,0:0:0:0: +11,151,338773,1,0,0:0:0:0: +252,34,338889,6,0,B|233:78|233:78|248:121,1,93.5,2|0,0:0|0:0,0:0:0:0: +425,190,339120,2,0,B|444:146|444:146|428:102,1,93.5,8|0,0:0|0:0,0:0:0:0: +336,155,339350,5,10,0:0:0:0: +336,173,339407,1,8,0:0:0:0: +337,192,339465,1,8,0:0:0:0: +338,211,339523,1,8,0:0:0:0: +338,229,339580,1,8,0:0:0:0: +339,248,339638,1,8,0:0:0:0: +340,267,339696,1,8,0:0:0:0: +340,285,339753,1,8,0:0:0:0: +340,303,339812,6,0,P|426:327|487:262,1,187,6|8,0:0|0:0,0:0:0:0: +425,190,340158,1,0,0:0:0:0: +246,340,340273,2,0,P|249:296|209:250,1,93.5,2|0,0:0|0:0,0:0:0:0: +56,129,340504,2,0,P|53:173|93:219,1,93.5,8|0,0:0|0:0,0:0:0:0: +306,198,340735,6,0,B|310:146|310:146|315:138|315:138|311:130|311:130|323:-1,1,187,2|8,0:0|0:0,0:0:0:0: +237,53,341081,1,0,0:0:0:0: +340,267,341197,2,0,P|368:263|441:256,1,93.5,2|0,0:0|0:0,0:0:0:0: +246,340,341427,2,0,P|217:336|145:329,1,93.5,8|0,0:0|0:0,0:0:0:0: +13,157,341658,6,0,B|101:149|101:221|190:213,1,187,2|8,0:0|0:0,0:0:0:0: +241,137,342004,1,0,0:0:0:0: +42,237,342120,2,0,P|35:289|60:336,1,93.5,2|0,0:0|0:0,0:0:0:0: +162,129,342350,2,0,P|169:77|144:30,1,93.5,8|0,0:0|0:0,0:0:0:0: +153,329,342581,6,0,B|223:321|223:321|269:337|269:337|336:331,1,187,2|8,0:0|0:0,0:0:0:0: +417,379,342927,1,0,0:0:0:0: +306,198,343043,2,0,B|298:113|370:113|362:25,1,187,2|8,0:0|0:0,0:0:0:0: +489,112,343389,1,8,0:0:0:0: +489,112,343447,1,8,0:0:0:0: +489,112,343504,6,0,P|504:193|417:256,1,187,2|8,0:0|0:0,0:0:0:0: +248,341,343850,2,0,P|232:259|319:196,1,187,2|2,0:0|0:0,0:0:0:0: +508,361,344197,2,0,L|416:378,1,93.5,8|0,0:0|0:0,0:0:0:0: +401,373,344370,1,0,0:0:0:0: +386,367,344427,6,0,L|192:354,1,187,2|8,0:0|0:0,0:0:0:0: +107,375,344773,1,0,0:0:0:0: +122,199,344889,2,0,P|144:240|139:286,1,93.5,2|0,0:0|0:0,0:0:0:0: +13,157,345120,2,0,P|7:111|29:70,1,93.5,8|0,0:0|0:0,0:0:0:0: +200,35,345350,6,0,L|302:46,1,93.5,2|0,0:0|0:0,0:0:0:0: +396,207,345581,2,0,L|303:196,1,93.5,8|0,0:0|0:0,0:0:0:0: +384,23,345812,2,0,L|373:115,1,93.5,2|0,0:0|0:0,0:0:0:0: +212,219,346043,2,0,L|223:117,1,93.5,8|0,0:0|0:0,0:0:0:0: +512,279,346273,6,0,P|483:282|372:294,1,140.25,2|0,0:0|0:0,0:0:0:0: +349,363,346504,6,0,P|328:360|251:351,1,98.1749970039369,8|0,0:0|0:0,0:0:0:0: +212,293,346735,6,0,P|188:295|74:307,1,126.224996147919,2|0,0:0|0:0,0:0:0:0: +27,257,346966,6,0,P|14:222|23:192,1,56.0999982879639,8|0,0:0|0:0,0:0:0:0: +133,13,347197,6,0,L|122:205,1,187,6|8,0:0|0:0,0:0:0:0: +251,351,347543,1,0,0:0:0:0: +311,280,347658,2,0,P|331:238|316:186,1,93.5,2|0,0:0|0:0,0:0:0:0: +232,39,347889,2,0,P|212:80|221:125,1,93.5,8|0,0:0|0:0,0:0:0:0: +466,107,348120,6,0,P|403:112|340:117,1,93.5,2|0,0:0|0:0,0:0:0:0: +228,202,348350,2,0,P|290:196|353:191,1,93.5,8|0,0:0|0:0,0:0:0:0: +489,256,348581,2,0,P|426:261|363:266,1,93.5,2|0,0:0|0:0,0:0:0:0: +251,351,348811,2,0,P|313:345|376:340,1,93.5,8|0,0:0|0:0,0:0:0:0: +360,351,348985,1,0,0:0:0:0: +375,359,349043,6,0,P|426:304|407:190,1,187,2|8,0:0|0:0,0:0:0:0: +372,115,349389,1,0,0:0:0:0: +496,18,349504,2,0,L|488:111,1,93.5,2|0,0:0|0:0,0:0:0:0: +328,286,349735,2,0,L|320:192,1,93.5,8|0,0:0|0:0,0:0:0:0: +125,50,349966,6,0,P|170:97|307:65,1,187,2|8,0:0|0:0,0:0:0:0: +356,28,350312,1,0,0:0:0:0: +227,184,350427,2,0,B|262:280|198:280|230:384,1,187,2|8,0:0|0:0,0:0:0:0: +134,342,350773,1,0,0:0:0:0: +10,277,350889,6,0,P|7:223|-1:72,1,187,2|8,0:0|0:0,0:0:0:0: +51,13,351235,1,0,0:0:0:0: +215,180,351350,2,0,P|218:234|226:385,1,187,2|8,0:0|0:0,0:0:0:0: +502,277,351812,6,0,P|505:223|513:72,1,187,2|8,0:0|0:0,0:0:0:0: +461,13,352158,1,0,0:0:0:0: +372,115,352273,2,0,P|356:141|366:217,1,93.5,2|0,0:0|0:0,0:0:0:0: +440,349,352504,2,0,P|425:322|353:292,1,93.5,8|0,0:0|0:0,0:0:0:0: +99,278,352735,6,0,L|285:258,1,187,2|8,0:0|0:0,0:0:0:0: +371,292,353081,1,0,0:0:0:0: +450,211,353197,2,0,L|357:201,1,93.5,2|0,0:0|0:0,0:0:0:0: +191,152,353427,2,0,L|283:142,1,93.5,8|0,0:0|0:0,0:0:0:0: +393,31,353658,6,0,B|365:69|365:69|372:116,1,93.5,2|0,0:0|0:0,0:0:0:0: +489,256,353889,2,0,B|517:218|517:218|509:170,1,93.5,8|0,0:0|0:0,0:0:0:0: +357,201,354120,2,0,P|366:239|372:311,1,93.5,2|0,0:0|0:0,0:0:0:0: +498,96,354350,2,0,P|502:49|512:3,1,93.5,8|0,0:0|0:0,0:0:0:0: +512,333,354581,6,0,B|427:318|423:388|325:362,1,187,2|8,0:0|0:0,0:0:0:0: +284,258,354927,1,0,0:0:0:0: +228,334,355043,2,0,B|32:324,1,187,2|8,0:0|0:0,0:0:0:0: +5,239,355389,1,0,0:0:0:0: +199,79,355504,5,10,0:0:0:0: +110,108,355620,1,8,0:0:0:0: +208,112,355735,5,8,0:0:0:0: +124,116,355851,1,8,0:0:0:0: +211,141,355966,5,10,0:0:0:0: +139,124,356082,1,8,0:0:0:0: +210,164,356197,5,8,0:0:0:0: +153,133,356313,1,8,0:0:0:0: +90,211,356427,6,0,L|292:193,1,187,6|8,0:0|0:0,0:0:0:0: +329,116,356773,1,0,0:0:0:0: +450,258,356889,2,0,L|356:266,1,93.5,2|0,0:0|0:0,0:0:0:0: +414,101,357120,2,0,L|507:92,1,93.5,8|0,0:0|0:0,0:0:0:0: +304,355,357350,6,0,P|252:281|275:194,1,187,2|8,0:0|0:0,0:0:0:0: +329,116,357697,1,0,0:0:0:0: +110,47,357812,5,2,0:0:0:0: +147,134,357927,1,8,0:0:0:0: +93,210,358043,1,10,0:0:0:0: +130,297,358158,1,8,0:0:0:0: +304,355,358273,6,0,L|102:337,1,187,2|8,0:0|0:0,0:0:0:0: +30,374,358620,1,0,0:0:0:0: +0,202,358735,2,0,L|93:210,1,93.5,2|0,0:0|0:0,0:0:0:0: +218,58,358966,2,0,L|124:49,1,93.5,8|0,0:0|0:0,0:0:0:0: +265,250,359197,6,0,B|350:227|364:281|472:252,2,187,2|8|2,0:0|0:0|0:0,0:0:0:0: +202,180,359773,1,0,0:0:0:0: +280,128,359889,1,8,0:0:0:0: +218,58,360004,1,0,0:0:0:0: +407,0,360120,6,0,L|387:186,1,187,2|8,0:0|0:0,0:0:0:0: +449,257,360466,1,0,0:0:0:0: +304,355,360581,2,0,P|310:296|359:272,1,93.5,2|0,0:0|0:0,0:0:0:0: +479,178,360812,2,0,P|473:237|423:260,1,93.5,8|0,0:0|0:0,0:0:0:0: +280,128,361043,6,0,L|274:28,1,93.5,2|0,0:0|0:0,0:0:0:0: +193,261,361273,2,0,L|198:354,1,93.5,8|0,0:0|0:0,0:0:0:0: +36,373,361504,5,8,0:0:0:0: +74,286,361620,1,2,0:0:0:0: +8,219,361735,1,2,0:0:0:0: +46,134,361851,1,8,0:0:0:0: +193,261,361966,6,0,P|274:272|338:188,1,187,2|8,0:0|0:0,0:0:0:0: +280,128,362312,1,0,0:0:0:0: +136,99,362427,2,0,P|123:154|141:192,1,93.5,2|0,0:0|0:0,0:0:0:0: +304,355,362658,2,0,P|317:300|298:261,1,93.5,8|0,0:0|0:0,0:0:0:0: +291,256,362831,1,0,0:0:0:0: +278,244,362889,6,0,L|485:247,1,187,2|8,0:0|0:0,0:0:0:0: +202,180,363235,2,0,L|-5:177,1,187,2|2,0:0|0:0,0:0:0:0: +280,128,363581,2,0,L|383:126,1,93.5,8|0,0:0|0:0,0:0:0:0: +202,180,363812,6,0,B|158:268|240:272|190:359,2,187,2|8|2,0:0|0:0|0:0,0:0:0:0: +280,128,364389,1,0,0:0:0:0: +136,99,364504,2,0,P|123:44|141:5,1,93.5,8|0,0:0|0:0,0:0:0:0: +278,244,364735,6,0,P|291:299|272:337,1,93.5,2|0,0:0|0:0,0:0:0:0: +36,304,364966,2,0,B|50:297|50:297|51:307|51:307|59:297|59:297|60:306|60:306|68:296|68:296|69:305|69:305|77:295|77:295|78:305|78:305|85:294|85:294|86:304|86:304|94:294|94:294|95:303|95:303|103:293|103:293|104:302|104:302|112:292|112:292|113:302|113:302|121:291|121:291|121:301|121:301|129:290|129:290|130:300|130:300|138:290|138:290|139:299|139:299|147:289|147:289|148:299|148:299|156:288|156:288|156:298|156:298|164:287|164:287|165:297|165:297|173:287|173:287|174:296|174:296|182:286|182:286|183:295|183:295|198:289,1,374,8|0,0:0|0:0,0:0:0:0: +277,331,365543,1,0,0:0:0:0: +437,330,365658,6,0,P|467:262|450:218,1,93.5,2|0,0:0|0:0,0:0:0:0: +307,44,365889,2,0,P|277:112|294:156,1,93.5,8|0,0:0|0:0,0:0:0:0: +374,266,366120,1,2,0:0:0:0: +500,153,366235,2,0,L|516:35,2,93.5,0|8|0,0:0|0:0|0:0,0:0:0:0: +374,266,366581,6,0,L|386:358,1,93.5,2|0,0:0|0:0,0:0:0:0: +414,164,366812,2,0,P|322:168|265:263,1,187,8|2,0:0|0:0,0:0:0:0: +188,359,367158,1,0,0:0:0:0: +117,297,367273,2,0,P|115:271|108:189,1,93.5,8|0,0:0|0:0,0:0:0:0: +15,83,367504,6,0,B|192:130|204:-6|413:48,1,374,2|2,0:0|0:0,0:0:0:0: +468,13,368081,1,0,0:0:0:0: +445,104,368197,2,0,P|448:150|452:197,1,93.5,8|0,0:0|0:0,0:0:0:0: +356,295,368427,6,0,P|443:278|500:348,1,187,2|8,0:0|0:0,0:0:0:0: +284,353,368773,2,0,P|196:368|140:298,1,187,2|2,0:0|0:0,0:0:0:0: +99,213,369120,2,0,P|145:216|192:220,1,93.5,8|0,0:0|0:0,0:0:0:0: +378,41,369350,6,0,B|291:17|285:85|196:62,1,187,2|8,0:0|0:0,0:0:0:0: +111,24,369697,1,0,0:0:0:0: +17,161,369812,2,0,P|11:115|32:74,1,93.5,2|0,0:0|0:0,0:0:0:0: +152,211,370043,2,0,P|158:257|138:299,1,93.5,8|0,0:0|0:0,0:0:0:0: +5,384,370273,5,2,0:0:0:0: +58,268,370389,1,2,0:0:0:0: +130,372,370504,1,8,0:0:0:0: +183,256,370620,1,8,0:0:0:0: +187,237,370677,1,8,0:0:0:0: +191,219,370735,1,10,0:0:0:0: +196,201,370793,1,8,0:0:0:0: +200,183,370850,1,8,0:0:0:0: +205,165,370908,1,8,0:0:0:0: +209,146,370966,1,10,0:0:0:0: +111,24,371081,1,2,0:0:0:0: +197,62,371197,6,0,L|387:49,1,187,6|8,0:0|0:0,0:0:0:0: +315,322,371658,2,0,L|125:335,1,187,2|8,0:0|0:0,0:0:0:0: +457,193,372120,2,0,L|444:379,1,187,2|8,0:0|0:0,0:0:0:0: +55,191,372581,2,0,L|63:67,1,93.5,2|0,0:0|0:0,0:0:0:0: +68,4,372812,1,8,0:0:0:0: +152,46,372927,1,0,0:0:0:0: +186,263,373043,6,0,L|-4:276,1,187,6|8,0:0|0:0,0:0:0:0: +326,121,373504,2,0,L|516:108,1,187,2|8,0:0|0:0,0:0:0:0: +491,199,373850,1,0,0:0:0:0: +468,288,373966,2,0,L|282:301,1,187,2|8,0:0|0:0,0:0:0:0: +203,5,374427,2,0,L|328:-3,1,93.5,2|0,0:0|0:0,0:0:0:0: +389,13,374658,1,8,0:0:0:0: +329,84,374773,1,8,0:0:0:0: +327,102,374830,1,8,0:0:0:0: +326,121,374889,6,0,L|516:108,1,187,6|8,0:0|0:0,0:0:0:0: +227,377,375350,1,2,0:0:0:0: +138,348,375466,1,8,0:0:0:0: +138,254,375581,1,8,0:0:0:0: +227,225,375697,1,2,0:0:0:0: +282,301,375812,2,0,L|468:288,1,187,2|8,0:0|0:0,0:0:0:0: +230,83,376273,2,0,L|44:96,1,187,2|8,0:0|0:0,0:0:0:0: +11,185,376620,1,0,0:0:0:0: +303,212,376735,6,0,L|316:26,1,187,6|8,0:0|0:0,0:0:0:0: +43,96,377197,1,2,0:0:0:0: +72,7,377313,1,8,0:0:0:0: +166,7,377428,1,8,0:0:0:0: +195,96,377544,1,8,0:0:0:0: +119,151,377658,2,0,L|132:337,1,187,2|8,0:0|0:0,0:0:0:0: +439,382,378120,2,0,L|426:196,1,187,2|8,0:0|0:0,0:0:0:0: +348,10,378581,6,0,B|414:65|393:172|309:195|241:175|241:175|174:156|90:178|69:285|132:337,1,561,6|8,0:0|0:0,0:0:0:0: +444,354,379504,2,0,P|501:284|473:199,1,187,2|8,0:0|0:0,0:0:0:0: +348,10,379850,2,0,P|291:80|319:165,1,187,2|2,0:0|0:0,0:0:0:0: +408,139,380197,2,0,L|419:46,1,93.5,8|0,0:0|0:0,0:0:0:0: +396,231,380427,5,2,0:0:0:0: +396,231,380543,2,0,P|322:217|256:317,1,187,2|2,0:0|0:0,0:0:0:0: +324,358,380889,2,0,L|417:347,1,93.5,2|0,0:0|0:0,0:0:0:0: +255,294,381120,2,0,L|162:283,1,93.5,8|0,0:0|0:0,0:0:0:0: +32,66,381350,5,2,0:0:0:0: +32,66,381466,2,0,P|106:52|172:152,1,187,2|2,0:0|0:0,0:0:0:0: +104,193,381812,2,0,L|11:182,1,93.5,2|0,0:0|0:0,0:0:0:0: +173,129,382043,2,0,L|266:118,1,93.5,8|0,0:0|0:0,0:0:0:0: +490,320,382273,6,2,L|408:303,3,46.75,2|2|10|2,0:0|0:0|0:0|0:0,0:0:0:0: +427,332,382504,2,2,L|345:315,3,46.75,2|2|10|2,0:0|0:0|0:0|0:0,0:0:0:0: +349,341,382735,5,10,0:0:0:0: +364,312,382792,1,2,0:0:0:0: +365,280,382850,1,10,0:0:0:0: +351,251,382908,1,2,0:0:0:0: +325,232,382966,1,10,0:0:0:0: +293,227,383023,1,2,0:0:0:0: +267,208,383080,1,10,0:0:0:0: +253,179,383138,1,2,0:0:0:0: +254,147,383197,5,10,0:0:0:0: +290,174,383254,1,2,0:0:0:0: +303,218,383312,1,10,0:0:0:0: +288,262,383370,1,2,0:0:0:0: +250,287,383427,1,10,0:0:0:0: +204,280,383484,1,2,0:0:0:0: +171,248,383542,1,10,0:0:0:0: +163,203,383600,1,2,0:0:0:0: +182,161,383657,5,10,0:0:0:0: +184,102,383715,1,2,0:0:0:0: +144,58,383773,1,10,0:0:0:0: +82,54,383831,1,2,0:0:0:0: +35,93,383889,1,10,0:0:0:0: +30,153,383947,1,2,0:0:0:0: +58,205,384004,1,10,0:0:0:0: +57,266,384062,1,2,0:0:0:0: +18,313,384120,5,14,0:0:0:0: diff --git a/osu.Game.Rulesets.Osu/Tests/OsuBeatmapConversionTest.cs b/osu.Game.Rulesets.Osu/Tests/OsuBeatmapConversionTest.cs new file mode 100644 index 0000000000..eddda99706 --- /dev/null +++ b/osu.Game.Rulesets.Osu/Tests/OsuBeatmapConversionTest.cs @@ -0,0 +1,70 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using System; +using Newtonsoft.Json; +using NUnit.Framework; +using osu.Framework.MathUtils; +using osu.Game.Beatmaps; +using osu.Game.Rulesets.Objects; +using osu.Game.Rulesets.Objects.Types; +using osu.Game.Rulesets.Osu.Beatmaps; +using osu.Game.Rulesets.Osu.Objects; +using osu.Game.Tests.Beatmaps; +using OpenTK; + +namespace osu.Game.Rulesets.Osu.Tests +{ + public class OsuBeatmapConversionTest : BeatmapConversionTest + { + protected override string ResourceAssembly => "osu.Game.Rulesets.Osu"; + + [TestCase(875945)] + public new void Test(int beatmapId) + { + base.Test(beatmapId); + } + + protected override ConvertValue CreateConvertValue(HitObject hitObject) + { + var startPosition = (hitObject as IHasPosition)?.Position ?? new Vector2(256, 192); + var endPosition = (hitObject as Slider)?.EndPosition ?? startPosition; + + return new ConvertValue + { + StartTime = hitObject.StartTime, + EndTime = (hitObject as IHasEndTime)?.EndTime ?? hitObject.StartTime, + StartX = startPosition.X, + StartY = startPosition.Y, + EndX = endPosition.X, + EndY = endPosition.Y + }; + } + + protected override ITestableBeatmapConverter CreateConverter() => new OsuBeatmapConverter(); + } + + public struct ConvertValue : IEquatable + { + [JsonProperty] + public double StartTime; + [JsonProperty] + public double EndTime; + [JsonProperty] + public float StartX; + [JsonProperty] + public float StartY; + [JsonProperty] + public float EndX; + [JsonProperty] + public float EndY; + + public bool Equals(ConvertValue other) + => Precision.AlmostEquals(StartTime, other.StartTime, 1) + && Precision.AlmostEquals(EndTime, other.EndTime, 1) + && Precision.AlmostEquals(StartX, other.StartX, 1) + && Precision.AlmostEquals(StartY, other.StartY, 1) + && Precision.AlmostEquals(EndX, other.EndX, 1) + && Precision.AlmostEquals(EndY, other.EndY, 1); + } +} diff --git a/osu.Game.Rulesets.Osu/osu.Game.Rulesets.Osu.csproj b/osu.Game.Rulesets.Osu/osu.Game.Rulesets.Osu.csproj index 1407c05425..d4d001de81 100644 --- a/osu.Game.Rulesets.Osu/osu.Game.Rulesets.Osu.csproj +++ b/osu.Game.Rulesets.Osu/osu.Game.Rulesets.Osu.csproj @@ -37,6 +37,9 @@ $(SolutionDir)\packages\JetBrains.Annotations.11.1.0\lib\net20\JetBrains.Annotations.dll True + + ..\packages\Newtonsoft.Json.10.0.3\lib\net45\Newtonsoft.Json.dll + $(SolutionDir)\packages\NUnit.3.8.1\lib\net45\nunit.framework.dll True @@ -127,6 +130,7 @@ + @@ -172,6 +176,10 @@ + + + + diff --git a/osu.Game/Beatmaps/BeatmapConverter.cs b/osu.Game/Beatmaps/BeatmapConverter.cs index 20de4e9680..0094bd9116 100644 --- a/osu.Game/Beatmaps/BeatmapConverter.cs +++ b/osu.Game/Beatmaps/BeatmapConverter.cs @@ -8,12 +8,36 @@ using osu.Game.Rulesets.Objects; namespace osu.Game.Beatmaps { + public interface ITestableBeatmapConverter + { + /// + /// Invoked when a has been converted. + /// The first argument contains the that was converted. + /// The second argument contains the s that were output from the conversion process. + /// + event Action> ObjectConverted; + + /// + /// Converts a Beatmap using this Beatmap Converter. + /// + /// The un-converted Beatmap. + void Convert(Beatmap beatmap); + } + /// /// Converts a Beatmap for another mode. /// /// The type of HitObject stored in the Beatmap. - public abstract class BeatmapConverter where T : HitObject + public abstract class BeatmapConverter : ITestableBeatmapConverter + where T : HitObject { + private event Action> ObjectConverted; + event Action> ITestableBeatmapConverter.ObjectConverted + { + add => ObjectConverted += value; + remove => ObjectConverted -= value; + } + /// /// Checks if a Beatmap can be converted using this Beatmap Converter. /// @@ -32,6 +56,8 @@ namespace osu.Game.Beatmaps return ConvertBeatmap(new Beatmap(original)); } + void ITestableBeatmapConverter.Convert(Beatmap original) => Convert(original); + /// /// Performs the conversion of a Beatmap using this Beatmap Converter. /// @@ -63,8 +89,11 @@ namespace osu.Game.Beatmaps yield break; } + var converted = ConvertHitObject(original, beatmap).ToList(); + ObjectConverted?.Invoke(original, converted); + // Convert the hit object - foreach (var obj in ConvertHitObject(original, beatmap)) + foreach (var obj in converted) { if (obj == null) continue; diff --git a/osu.Game/Properties/AssemblyInfo.cs b/osu.Game/Properties/AssemblyInfo.cs index 56558044f8..5b33ee0761 100644 --- a/osu.Game/Properties/AssemblyInfo.cs +++ b/osu.Game/Properties/AssemblyInfo.cs @@ -2,7 +2,9 @@ // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using System.Reflection; +using System.Runtime.CompilerServices; using System.Runtime.InteropServices; +using osu.Framework.Testing; // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information @@ -16,6 +18,9 @@ using System.Runtime.InteropServices; [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] +[assembly: InternalsVisibleTo("osu.Game.Tests")] +[assembly: InternalsVisibleTo(DynamicClassCompiler.DYNAMIC_ASSEMBLY_NAME)] + // Setting ComVisible to false makes the types in this assembly not visible // to COM components. If you need to access a type in this assembly from // COM, set the ComVisible attribute to true on that type. diff --git a/osu.Game/Tests/Beatmaps/BeatmapConversionTest.cs b/osu.Game/Tests/Beatmaps/BeatmapConversionTest.cs new file mode 100644 index 0000000000..8c4f86c858 --- /dev/null +++ b/osu.Game/Tests/Beatmaps/BeatmapConversionTest.cs @@ -0,0 +1,139 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using System; +using System.Collections.Generic; +using System.IO; +using System.Reflection; +using Newtonsoft.Json; +using NUnit.Framework; +using osu.Framework.Extensions.IEnumerableExtensions; +using osu.Game.Beatmaps; +using osu.Game.Beatmaps.Formats; +using osu.Game.Rulesets.Objects; + +namespace osu.Game.Tests.Beatmaps +{ + [TestFixture] + public abstract class BeatmapConversionTest + where TConvertValue : IEquatable + { + private const string resource_namespace = "Testing.Beatmaps"; + private const string expected_conversion_suffix = "-expected-conversion"; + + protected abstract string ResourceAssembly { get; } + + protected void Test(int beatmapId) + { + var ourResult = convert(beatmapId); + var expectedResult = read(beatmapId); + + Assert.Multiple(() => + { + int mappingCounter = 0; + while (true) + { + if (mappingCounter >= ourResult.Mappings.Count && mappingCounter >= expectedResult.Mappings.Count) + break; + if (mappingCounter >= ourResult.Mappings.Count) + Assert.Fail($"Missing conversion for object at time: {expectedResult.Mappings[mappingCounter].StartTime}"); + else if (mappingCounter >= expectedResult.Mappings.Count) + Assert.Fail($"Extra conversion for object at time: {ourResult.Mappings[mappingCounter].StartTime}"); + else + { + var counter = mappingCounter; + Assert.Multiple(() => + { + var ourMapping = ourResult.Mappings[counter]; + var expectedMapping = expectedResult.Mappings[counter]; + + int objectCounter = 0; + while (true) + { + if (objectCounter >= ourMapping.Objects.Count && objectCounter >= expectedMapping.Objects.Count) + break; + if (objectCounter >= ourMapping.Objects.Count) + Assert.Fail($"Expected conversion for object at time: {expectedMapping.StartTime}:\n{JsonConvert.SerializeObject(expectedMapping.Objects[objectCounter])}"); + else if (objectCounter >= expectedMapping.Objects.Count) + Assert.Fail($"Unexpected conversion for object at time: {ourMapping.StartTime}:\n{JsonConvert.SerializeObject(ourMapping.Objects[objectCounter])}"); + else if (!EqualityComparer.Default.Equals(expectedMapping.Objects[objectCounter], ourMapping.Objects[objectCounter])) + { + Assert.Fail($"Converted hitobjects differ for object at time: {expectedMapping.StartTime}\n" + + $"Expected: {JsonConvert.SerializeObject(expectedMapping.Objects[objectCounter])}\n" + + $"Received: {JsonConvert.SerializeObject(ourMapping.Objects[objectCounter])}\n"); + } + + objectCounter++; + } + }); + } + + mappingCounter++; + } + }); + } + + private ConvertResult convert(int beatmapId) + { + var beatmap = getBeatmap(beatmapId); + + var result = new ConvertResult(); + + var converter = CreateConverter(); + converter.ObjectConverted += (orig, converted) => + { + converted.ForEach(h => h.ApplyDefaults(beatmap.ControlPointInfo, beatmap.BeatmapInfo.BaseDifficulty)); + + var mapping = new ConvertMapping { StartTime = orig.StartTime }; + foreach (var obj in converted) + mapping.Objects.Add(CreateConvertValue(obj)); + result.Mappings.Add(mapping); + }; + + converter.Convert(beatmap); + + return result; + } + + private ConvertResult read(int beatmapId) + { + using (var resStream = openResource($"{resource_namespace}.{beatmapId}{expected_conversion_suffix}.json")) + using (var reader = new StreamReader(resStream)) + { + var contents = reader.ReadToEnd(); + return JsonConvert.DeserializeObject(contents); + } + } + + private Beatmap getBeatmap(int beatmapId) + { + var decoder = new LegacyBeatmapDecoder(); + using (var resStream = openResource($"{resource_namespace}.{beatmapId}.osu")) + using (var stream = new StreamReader(resStream)) + return decoder.DecodeBeatmap(stream); + } + + private Stream openResource(string name) + { + var localPath = Path.GetDirectoryName(Uri.UnescapeDataString(new UriBuilder(Assembly.GetExecutingAssembly().CodeBase).Path)); + return Assembly.LoadFrom(Path.Combine(localPath, $"{ResourceAssembly}.dll")).GetManifestResourceStream($@"{ResourceAssembly}.Resources.{name}"); + } + + protected abstract TConvertValue CreateConvertValue(HitObject hitObject); + protected abstract ITestableBeatmapConverter CreateConverter(); + + private class ConvertMapping + { + [JsonProperty] + public double StartTime; + [JsonProperty] + public List Objects = new List(); + } + + private class ConvertResult + { + [JsonProperty] + public List Mappings = new List(); + } + } +} diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index f1b61341db..bcb1476aed 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -883,6 +883,7 @@ + @@ -939,4 +940,4 @@ - + \ No newline at end of file From e87be213d586593b761f6becbd9b766e329e172b Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Fri, 2 Mar 2018 00:52:45 +0900 Subject: [PATCH 236/544] Adjust lenience a little bit --- .../Tests/OsuBeatmapConversionTest.cs | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Tests/OsuBeatmapConversionTest.cs b/osu.Game.Rulesets.Osu/Tests/OsuBeatmapConversionTest.cs index eddda99706..a215286218 100644 --- a/osu.Game.Rulesets.Osu/Tests/OsuBeatmapConversionTest.cs +++ b/osu.Game.Rulesets.Osu/Tests/OsuBeatmapConversionTest.cs @@ -46,6 +46,11 @@ namespace osu.Game.Rulesets.Osu.Tests public struct ConvertValue : IEquatable { + /// + /// A sane value to account for osu!stable using ints everwhere. + /// + private const double conversion_lenience = 2; + [JsonProperty] public double StartTime; [JsonProperty] @@ -60,11 +65,11 @@ namespace osu.Game.Rulesets.Osu.Tests public float EndY; public bool Equals(ConvertValue other) - => Precision.AlmostEquals(StartTime, other.StartTime, 1) - && Precision.AlmostEquals(EndTime, other.EndTime, 1) - && Precision.AlmostEquals(StartX, other.StartX, 1) - && Precision.AlmostEquals(StartY, other.StartY, 1) - && Precision.AlmostEquals(EndX, other.EndX, 1) - && Precision.AlmostEquals(EndY, other.EndY, 1); + => Precision.AlmostEquals(StartTime, other.StartTime) + && Precision.AlmostEquals(EndTime, other.EndTime, conversion_lenience) + && Precision.AlmostEquals(StartX, other.StartX) + && Precision.AlmostEquals(StartY, other.StartY, conversion_lenience) + && Precision.AlmostEquals(EndX, other.EndX, conversion_lenience) + && Precision.AlmostEquals(EndY, other.EndY, conversion_lenience); } } From 070c5a95eee01e48fb91c4054e2c7b39e9e553b8 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Fri, 2 Mar 2018 01:40:25 +0900 Subject: [PATCH 237/544] Improve output --- osu.Game/Tests/Beatmaps/BeatmapConversionTest.cs | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/osu.Game/Tests/Beatmaps/BeatmapConversionTest.cs b/osu.Game/Tests/Beatmaps/BeatmapConversionTest.cs index 8c4f86c858..cd060ac411 100644 --- a/osu.Game/Tests/Beatmaps/BeatmapConversionTest.cs +++ b/osu.Game/Tests/Beatmaps/BeatmapConversionTest.cs @@ -36,9 +36,9 @@ namespace osu.Game.Tests.Beatmaps if (mappingCounter >= ourResult.Mappings.Count && mappingCounter >= expectedResult.Mappings.Count) break; if (mappingCounter >= ourResult.Mappings.Count) - Assert.Fail($"Missing conversion for object at time: {expectedResult.Mappings[mappingCounter].StartTime}"); + Assert.Fail($"A conversion did not generate any hitobjects, but should have, for hitobject at time: {expectedResult.Mappings[mappingCounter].StartTime}\n"); else if (mappingCounter >= expectedResult.Mappings.Count) - Assert.Fail($"Extra conversion for object at time: {ourResult.Mappings[mappingCounter].StartTime}"); + Assert.Fail($"A conversion generated hitobjects, but should not have, for hitobject at time: {ourResult.Mappings[mappingCounter].StartTime}\n"); else { var counter = mappingCounter; @@ -53,12 +53,14 @@ namespace osu.Game.Tests.Beatmaps if (objectCounter >= ourMapping.Objects.Count && objectCounter >= expectedMapping.Objects.Count) break; if (objectCounter >= ourMapping.Objects.Count) - Assert.Fail($"Expected conversion for object at time: {expectedMapping.StartTime}:\n{JsonConvert.SerializeObject(expectedMapping.Objects[objectCounter])}"); + Assert.Fail($"The conversion did not generate a hitobject, but should have, for hitobject at time: {expectedMapping.StartTime}:\n" + + $"Expected: {JsonConvert.SerializeObject(expectedMapping.Objects[objectCounter])}\n"); else if (objectCounter >= expectedMapping.Objects.Count) - Assert.Fail($"Unexpected conversion for object at time: {ourMapping.StartTime}:\n{JsonConvert.SerializeObject(ourMapping.Objects[objectCounter])}"); + Assert.Fail($"The conversion generated a hitobject, but should not have, for hitobject at time: {ourMapping.StartTime}:\n" + + $"Received: {JsonConvert.SerializeObject(ourMapping.Objects[objectCounter])}\n"); else if (!EqualityComparer.Default.Equals(expectedMapping.Objects[objectCounter], ourMapping.Objects[objectCounter])) { - Assert.Fail($"Converted hitobjects differ for object at time: {expectedMapping.StartTime}\n" + Assert.Fail($"The conversion generated differing hitobjects for object at time: {expectedMapping.StartTime}\n" + $"Expected: {JsonConvert.SerializeObject(expectedMapping.Objects[objectCounter])}\n" + $"Received: {JsonConvert.SerializeObject(ourMapping.Objects[objectCounter])}\n"); } From b2827d82d489f81101e17e3039db7caa3a39bc50 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Fri, 2 Mar 2018 01:40:38 +0900 Subject: [PATCH 238/544] Add a taiko beatmap conversion test case --- .../Beatmaps/875945-expected-conversion.json | 1 + .../Resources/Testing/Beatmaps/875945.osu | 1824 +++++++++++++++++ .../Tests/TaikoBeatmapConversionTest.cs | 67 + .../osu.Game.Rulesets.Taiko.csproj | 5 + 4 files changed, 1897 insertions(+) create mode 100644 osu.Game.Rulesets.Taiko/Resources/Testing/Beatmaps/875945-expected-conversion.json create mode 100644 osu.Game.Rulesets.Taiko/Resources/Testing/Beatmaps/875945.osu create mode 100644 osu.Game.Rulesets.Taiko/Tests/TaikoBeatmapConversionTest.cs diff --git a/osu.Game.Rulesets.Taiko/Resources/Testing/Beatmaps/875945-expected-conversion.json b/osu.Game.Rulesets.Taiko/Resources/Testing/Beatmaps/875945-expected-conversion.json new file mode 100644 index 0000000000..165faaac17 --- /dev/null +++ b/osu.Game.Rulesets.Taiko/Resources/Testing/Beatmaps/875945-expected-conversion.json @@ -0,0 +1 @@ +{"Mappings":[{"StartTime":6590.0,"Objects":[{"StartTime":6590.0,"EndTime":8320.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":8436.0,"Objects":[{"StartTime":8436.0,"EndTime":10166.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":10282.0,"Objects":[{"StartTime":10282.0,"EndTime":12012.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":12128.0,"Objects":[{"StartTime":12128.0,"EndTime":13858.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":13974.0,"Objects":[{"StartTime":13974.0,"EndTime":15704.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":15820.0,"Objects":[{"StartTime":15820.0,"EndTime":17550.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":17666.0,"Objects":[{"StartTime":17666.0,"EndTime":19512.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":19628.0,"Objects":[{"StartTime":19628.0,"EndTime":21128.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":false,"IsSwell":true,"IsStrong":false}]},{"StartTime":21359.0,"Objects":[{"StartTime":21359.0,"EndTime":21359.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":21820.0,"EndTime":21820.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":22282.0,"Objects":[{"StartTime":22282.0,"EndTime":22282.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":22743.0,"EndTime":22743.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":23205.0,"Objects":[{"StartTime":23205.0,"EndTime":23205.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":23666.0,"EndTime":23666.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":24128.0,"Objects":[{"StartTime":24128.0,"EndTime":24128.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":24589.0,"EndTime":24589.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":25051.0,"Objects":[{"StartTime":25051.0,"EndTime":26666.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":26897.0,"Objects":[{"StartTime":26897.0,"EndTime":28281.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":28743.0,"Objects":[{"StartTime":28743.0,"EndTime":28743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":29204.0,"EndTime":29204.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":29666.0,"Objects":[{"StartTime":29666.0,"EndTime":29666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":30127.0,"EndTime":30127.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":30589.0,"Objects":[{"StartTime":30589.0,"EndTime":30589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":31050.0,"EndTime":31050.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":31513.0,"Objects":[{"StartTime":31513.0,"EndTime":31513.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":31974.0,"EndTime":31974.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":32436.0,"Objects":[{"StartTime":32436.0,"EndTime":34282.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":35205.0,"Objects":[{"StartTime":35205.0,"EndTime":35205.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":35666.0,"EndTime":35666.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":36128.0,"Objects":[{"StartTime":36128.0,"EndTime":36128.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":36474.0,"EndTime":36474.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":36590.0,"Objects":[{"StartTime":36590.0,"EndTime":39359.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":39820.0,"Objects":[{"StartTime":39820.0,"EndTime":39820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":40281.0,"EndTime":40281.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":40743.0,"Objects":[{"StartTime":40743.0,"EndTime":40743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":41204.0,"EndTime":41204.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":41666.0,"Objects":[{"StartTime":41666.0,"EndTime":42589.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":43051.0,"Objects":[{"StartTime":43051.0,"EndTime":43051.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":43281.0,"EndTime":43281.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":43513.0,"Objects":[{"StartTime":43513.0,"EndTime":43513.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true}]},{"StartTime":43628.0,"Objects":[{"StartTime":43628.0,"EndTime":49051.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":false,"IsSwell":true,"IsStrong":false}]},{"StartTime":56435.0,"Objects":[{"StartTime":56435.0,"EndTime":56435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":56665.0,"EndTime":56665.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":56781.0,"Objects":[{"StartTime":56781.0,"EndTime":56781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":56897.0,"Objects":[{"StartTime":56897.0,"EndTime":56897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":57012.0,"EndTime":57012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":57127.0,"Objects":[{"StartTime":57127.0,"EndTime":57127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":57242.0,"EndTime":57242.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":57358.0,"Objects":[{"StartTime":57358.0,"EndTime":57358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":57473.0,"EndTime":57473.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":57589.0,"Objects":[{"StartTime":57589.0,"EndTime":57589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":57704.0,"EndTime":57704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":57820.0,"Objects":[{"StartTime":57820.0,"EndTime":57820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":57935.0,"Objects":[{"StartTime":57935.0,"EndTime":57935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":58051.0,"Objects":[{"StartTime":58051.0,"EndTime":58051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":58166.0,"Objects":[{"StartTime":58166.0,"EndTime":58166.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":58224.0,"Objects":[{"StartTime":58224.0,"EndTime":58224.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":58281.0,"Objects":[{"StartTime":58281.0,"EndTime":58281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":58511.0,"EndTime":58511.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":58627.0,"Objects":[{"StartTime":58627.0,"EndTime":58627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":58685.0,"Objects":[{"StartTime":58685.0,"EndTime":58685.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":58743.0,"Objects":[{"StartTime":58743.0,"EndTime":58743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":58858.0,"EndTime":58858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":58974.0,"Objects":[{"StartTime":58974.0,"EndTime":58974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":59089.0,"EndTime":59089.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":59204.0,"Objects":[{"StartTime":59204.0,"EndTime":59204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":59319.0,"EndTime":59319.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":59435.0,"Objects":[{"StartTime":59435.0,"EndTime":59435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":59550.0,"EndTime":59550.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":59666.0,"Objects":[{"StartTime":59666.0,"EndTime":59666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":59781.0,"EndTime":59781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":59897.0,"Objects":[{"StartTime":59897.0,"EndTime":59897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":60012.0,"EndTime":60012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":60127.0,"Objects":[{"StartTime":60127.0,"EndTime":60127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":60357.0,"EndTime":60357.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":60474.0,"Objects":[{"StartTime":60474.0,"EndTime":60474.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":60704.0,"EndTime":60704.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":60820.0,"Objects":[{"StartTime":60820.0,"EndTime":60820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":60935.0,"EndTime":60935.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":61051.0,"Objects":[{"StartTime":61051.0,"EndTime":61051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":61166.0,"EndTime":61166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":61281.0,"Objects":[{"StartTime":61281.0,"EndTime":61281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":61396.0,"EndTime":61396.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":61512.0,"Objects":[{"StartTime":61512.0,"EndTime":61512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":61627.0,"EndTime":61627.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":61743.0,"Objects":[{"StartTime":61743.0,"EndTime":61743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":61858.0,"EndTime":61858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":61916.0,"Objects":[{"StartTime":61916.0,"EndTime":61916.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":61974.0,"Objects":[{"StartTime":61974.0,"EndTime":61974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":62204.0,"EndTime":62204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":62320.0,"Objects":[{"StartTime":62320.0,"EndTime":62320.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":62550.0,"EndTime":62550.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":62666.0,"Objects":[{"StartTime":62666.0,"EndTime":63127.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":63358.0,"Objects":[{"StartTime":63358.0,"EndTime":63358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":63474.0,"Objects":[{"StartTime":63474.0,"EndTime":63474.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":63589.0,"Objects":[{"StartTime":63589.0,"EndTime":63589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":63705.0,"Objects":[{"StartTime":63705.0,"EndTime":63705.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":63820.0,"Objects":[{"StartTime":63820.0,"EndTime":63820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":63877.0,"Objects":[{"StartTime":63877.0,"EndTime":63877.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":63935.0,"Objects":[{"StartTime":63935.0,"EndTime":63935.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":63993.0,"Objects":[{"StartTime":63993.0,"EndTime":63993.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":64051.0,"Objects":[{"StartTime":64051.0,"EndTime":64051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":64166.0,"EndTime":64166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":64281.0,"Objects":[{"StartTime":64281.0,"EndTime":64281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":64338.0,"Objects":[{"StartTime":64338.0,"EndTime":64338.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":64396.0,"Objects":[{"StartTime":64396.0,"EndTime":64396.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":64454.0,"Objects":[{"StartTime":64454.0,"EndTime":64454.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":64512.0,"Objects":[{"StartTime":64512.0,"EndTime":64512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":64627.0,"EndTime":64627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":64743.0,"Objects":[{"StartTime":64743.0,"EndTime":64743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":64800.0,"Objects":[{"StartTime":64800.0,"EndTime":64800.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":64858.0,"Objects":[{"StartTime":64858.0,"EndTime":64858.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":64916.0,"Objects":[{"StartTime":64916.0,"EndTime":64916.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":64974.0,"Objects":[{"StartTime":64974.0,"EndTime":64974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":65089.0,"EndTime":65089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":65205.0,"Objects":[{"StartTime":65205.0,"EndTime":65205.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":65262.0,"Objects":[{"StartTime":65262.0,"EndTime":65262.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":65320.0,"Objects":[{"StartTime":65320.0,"EndTime":65320.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":65378.0,"Objects":[{"StartTime":65378.0,"EndTime":65378.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":65436.0,"Objects":[{"StartTime":65436.0,"EndTime":65436.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":65551.0,"EndTime":65551.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":65666.0,"Objects":[{"StartTime":65666.0,"EndTime":65666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":65723.0,"Objects":[{"StartTime":65723.0,"EndTime":65723.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":65781.0,"Objects":[{"StartTime":65781.0,"EndTime":65781.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":65839.0,"Objects":[{"StartTime":65839.0,"EndTime":65839.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":65897.0,"Objects":[{"StartTime":65897.0,"EndTime":65897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":66012.0,"EndTime":66012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":66127.0,"Objects":[{"StartTime":66127.0,"EndTime":66127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":66184.0,"Objects":[{"StartTime":66184.0,"EndTime":66184.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":66242.0,"Objects":[{"StartTime":66242.0,"EndTime":66242.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":66300.0,"Objects":[{"StartTime":66300.0,"EndTime":66300.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":66358.0,"Objects":[{"StartTime":66358.0,"EndTime":66358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":66473.0,"EndTime":66473.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":66589.0,"Objects":[{"StartTime":66589.0,"EndTime":66589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":66704.0,"EndTime":66704.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":66820.0,"Objects":[{"StartTime":66820.0,"EndTime":66820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":66935.0,"EndTime":66935.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":67051.0,"Objects":[{"StartTime":67051.0,"EndTime":67051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":67281.0,"EndTime":67281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":67397.0,"Objects":[{"StartTime":67397.0,"EndTime":67397.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":67512.0,"Objects":[{"StartTime":67512.0,"EndTime":67512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":67742.0,"EndTime":67742.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":67858.0,"Objects":[{"StartTime":67858.0,"EndTime":67858.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":68088.0,"EndTime":68088.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":68204.0,"Objects":[{"StartTime":68204.0,"EndTime":68204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":68319.0,"EndTime":68319.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":68435.0,"Objects":[{"StartTime":68435.0,"EndTime":68435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":68550.0,"EndTime":68550.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":68666.0,"Objects":[{"StartTime":68666.0,"EndTime":68666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":68781.0,"EndTime":68781.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":68897.0,"Objects":[{"StartTime":68897.0,"EndTime":68897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":69012.0,"Objects":[{"StartTime":69012.0,"EndTime":69012.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":69127.0,"Objects":[{"StartTime":69127.0,"EndTime":69127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":69242.0,"Objects":[{"StartTime":69242.0,"EndTime":69242.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":69358.0,"Objects":[{"StartTime":69358.0,"EndTime":69358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":69473.0,"EndTime":69473.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":69589.0,"Objects":[{"StartTime":69589.0,"EndTime":69589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":69704.0,"EndTime":69704.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":69820.0,"Objects":[{"StartTime":69820.0,"EndTime":69820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":69935.0,"EndTime":69935.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":70051.0,"Objects":[{"StartTime":70051.0,"EndTime":70051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":70166.0,"EndTime":70166.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":70281.0,"Objects":[{"StartTime":70281.0,"EndTime":70281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":70339.0,"Objects":[{"StartTime":70339.0,"EndTime":70339.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":70397.0,"Objects":[{"StartTime":70397.0,"EndTime":70397.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":70455.0,"Objects":[{"StartTime":70455.0,"EndTime":70455.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":70512.0,"Objects":[{"StartTime":70512.0,"EndTime":70512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":70570.0,"Objects":[{"StartTime":70570.0,"EndTime":70570.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":70627.0,"Objects":[{"StartTime":70627.0,"EndTime":70627.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":70685.0,"Objects":[{"StartTime":70685.0,"EndTime":70685.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":70742.0,"Objects":[{"StartTime":70742.0,"EndTime":70742.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":70800.0,"Objects":[{"StartTime":70800.0,"EndTime":70800.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":70858.0,"Objects":[{"StartTime":70858.0,"EndTime":70858.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":70916.0,"Objects":[{"StartTime":70916.0,"EndTime":70916.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":70974.0,"Objects":[{"StartTime":70974.0,"EndTime":70974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":71031.0,"Objects":[{"StartTime":71031.0,"EndTime":71031.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":71089.0,"Objects":[{"StartTime":71089.0,"EndTime":71089.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":71146.0,"Objects":[{"StartTime":71146.0,"EndTime":71146.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":71204.0,"Objects":[{"StartTime":71204.0,"EndTime":71204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":71434.0,"EndTime":71434.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":71551.0,"Objects":[{"StartTime":71551.0,"EndTime":71551.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":71781.0,"EndTime":71781.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":71897.0,"Objects":[{"StartTime":71897.0,"EndTime":71897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":72012.0,"EndTime":72012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":72127.0,"Objects":[{"StartTime":72127.0,"EndTime":72127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":72243.0,"Objects":[{"StartTime":72243.0,"EndTime":72243.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":72473.0,"EndTime":72473.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":72589.0,"Objects":[{"StartTime":72589.0,"EndTime":72589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":72704.0,"EndTime":72704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":72820.0,"Objects":[{"StartTime":72820.0,"EndTime":72820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":72935.0,"EndTime":72935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":73051.0,"Objects":[{"StartTime":73051.0,"EndTime":73051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":73281.0,"EndTime":73281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":73397.0,"Objects":[{"StartTime":73397.0,"EndTime":73397.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":73627.0,"EndTime":73627.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":73743.0,"Objects":[{"StartTime":73743.0,"EndTime":73743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":73858.0,"EndTime":73858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":73974.0,"Objects":[{"StartTime":73974.0,"EndTime":73974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":74089.0,"Objects":[{"StartTime":74089.0,"EndTime":74089.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":74319.0,"EndTime":74319.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":74435.0,"Objects":[{"StartTime":74435.0,"EndTime":74435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":74550.0,"EndTime":74550.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":74666.0,"Objects":[{"StartTime":74666.0,"EndTime":74666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":74839.0,"EndTime":74839.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":74897.0,"Objects":[{"StartTime":74897.0,"EndTime":74897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":75127.0,"EndTime":75127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":75243.0,"Objects":[{"StartTime":75243.0,"EndTime":75243.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":75473.0,"EndTime":75473.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":75589.0,"Objects":[{"StartTime":75589.0,"EndTime":75589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":75704.0,"EndTime":75704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":75820.0,"Objects":[{"StartTime":75820.0,"EndTime":75820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":75935.0,"Objects":[{"StartTime":75935.0,"EndTime":75935.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":76165.0,"EndTime":76165.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":76281.0,"Objects":[{"StartTime":76281.0,"EndTime":76281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":76396.0,"EndTime":76396.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":76512.0,"Objects":[{"StartTime":76512.0,"EndTime":76512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":76627.0,"EndTime":76627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":76743.0,"Objects":[{"StartTime":76743.0,"EndTime":76743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":76973.0,"EndTime":76973.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":77089.0,"Objects":[{"StartTime":77089.0,"EndTime":77089.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":77319.0,"EndTime":77319.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":77435.0,"Objects":[{"StartTime":77435.0,"EndTime":77435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":77550.0,"EndTime":77550.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":77666.0,"Objects":[{"StartTime":77666.0,"EndTime":77666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":77781.0,"Objects":[{"StartTime":77781.0,"EndTime":77781.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":77897.0,"Objects":[{"StartTime":77897.0,"EndTime":77897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":78012.0,"Objects":[{"StartTime":78012.0,"EndTime":78012.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":78127.0,"Objects":[{"StartTime":78127.0,"EndTime":78127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":78300.0,"EndTime":78300.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":78358.0,"Objects":[{"StartTime":78358.0,"EndTime":78358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":78531.0,"EndTime":78531.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":78589.0,"Objects":[{"StartTime":78589.0,"EndTime":78589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":78819.0,"EndTime":78819.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":78935.0,"Objects":[{"StartTime":78935.0,"EndTime":78935.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":79165.0,"EndTime":79165.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":79281.0,"Objects":[{"StartTime":79281.0,"EndTime":79281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":79396.0,"EndTime":79396.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":79512.0,"Objects":[{"StartTime":79512.0,"EndTime":79512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":79627.0,"Objects":[{"StartTime":79627.0,"EndTime":79627.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":79857.0,"EndTime":79857.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":79974.0,"Objects":[{"StartTime":79974.0,"EndTime":79974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":80089.0,"EndTime":80089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":80204.0,"Objects":[{"StartTime":80204.0,"EndTime":80204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":80319.0,"EndTime":80319.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":80435.0,"Objects":[{"StartTime":80435.0,"EndTime":80435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":80665.0,"EndTime":80665.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":80781.0,"Objects":[{"StartTime":80781.0,"EndTime":80781.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":81011.0,"EndTime":81011.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":81127.0,"Objects":[{"StartTime":81127.0,"EndTime":81127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":81242.0,"EndTime":81242.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":81358.0,"Objects":[{"StartTime":81358.0,"EndTime":81358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":81474.0,"Objects":[{"StartTime":81474.0,"EndTime":81474.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":81704.0,"EndTime":81704.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":81820.0,"Objects":[{"StartTime":81820.0,"EndTime":81820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":81935.0,"EndTime":81935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":82051.0,"Objects":[{"StartTime":82051.0,"EndTime":82051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":82224.0,"EndTime":82224.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":82281.0,"Objects":[{"StartTime":82281.0,"EndTime":82281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":82511.0,"EndTime":82511.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":82627.0,"Objects":[{"StartTime":82627.0,"EndTime":82627.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":82857.0,"EndTime":82857.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":82974.0,"Objects":[{"StartTime":82974.0,"EndTime":82974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":83089.0,"EndTime":83089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":83204.0,"Objects":[{"StartTime":83204.0,"EndTime":83204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":83320.0,"Objects":[{"StartTime":83320.0,"EndTime":83320.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":83550.0,"EndTime":83550.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":83666.0,"Objects":[{"StartTime":83666.0,"EndTime":83666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":83781.0,"EndTime":83781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":83897.0,"Objects":[{"StartTime":83897.0,"EndTime":83897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":84012.0,"EndTime":84012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":84127.0,"Objects":[{"StartTime":84127.0,"EndTime":84127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":84357.0,"EndTime":84357.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":84474.0,"Objects":[{"StartTime":84474.0,"EndTime":84474.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":84704.0,"EndTime":84704.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":84820.0,"Objects":[{"StartTime":84820.0,"EndTime":84820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":84935.0,"EndTime":84935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":85051.0,"Objects":[{"StartTime":85051.0,"EndTime":85051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":85166.0,"EndTime":85166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":85281.0,"Objects":[{"StartTime":85281.0,"EndTime":85281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":85396.0,"EndTime":85396.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":85512.0,"Objects":[{"StartTime":85512.0,"EndTime":85512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":85685.0,"EndTime":85685.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":85743.0,"Objects":[{"StartTime":85743.0,"EndTime":85743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":85858.0,"EndTime":85858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":85974.0,"Objects":[{"StartTime":85974.0,"EndTime":85974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":86089.0,"EndTime":86089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":86204.0,"Objects":[{"StartTime":86204.0,"EndTime":86204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":86434.0,"EndTime":86434.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":86551.0,"Objects":[{"StartTime":86551.0,"EndTime":86551.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":86666.0,"Objects":[{"StartTime":86666.0,"EndTime":86666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":86781.0,"EndTime":86781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":86897.0,"Objects":[{"StartTime":86897.0,"EndTime":86897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":87127.0,"EndTime":87127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":87243.0,"Objects":[{"StartTime":87243.0,"EndTime":87243.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":87358.0,"Objects":[{"StartTime":87358.0,"EndTime":87358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":87588.0,"EndTime":87588.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":87704.0,"Objects":[{"StartTime":87704.0,"EndTime":87704.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":87820.0,"Objects":[{"StartTime":87820.0,"EndTime":87820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":87935.0,"EndTime":87935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":88051.0,"Objects":[{"StartTime":88051.0,"EndTime":88051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":88166.0,"EndTime":88166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":88281.0,"Objects":[{"StartTime":88281.0,"EndTime":88281.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":88339.0,"Objects":[{"StartTime":88339.0,"EndTime":88339.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":88397.0,"Objects":[{"StartTime":88397.0,"EndTime":88397.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":88454.0,"Objects":[{"StartTime":88454.0,"EndTime":88454.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":88512.0,"Objects":[{"StartTime":88512.0,"EndTime":88512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":88570.0,"Objects":[{"StartTime":88570.0,"EndTime":88570.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":88628.0,"Objects":[{"StartTime":88628.0,"EndTime":88628.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":88686.0,"Objects":[{"StartTime":88686.0,"EndTime":88686.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":88743.0,"Objects":[{"StartTime":88743.0,"EndTime":88743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":88973.0,"EndTime":88973.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":89089.0,"Objects":[{"StartTime":89089.0,"EndTime":89089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":89204.0,"Objects":[{"StartTime":89204.0,"EndTime":89204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":89434.0,"EndTime":89434.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":89551.0,"Objects":[{"StartTime":89551.0,"EndTime":89551.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":89666.0,"Objects":[{"StartTime":89666.0,"EndTime":89666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":89781.0,"EndTime":89781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":89897.0,"Objects":[{"StartTime":89897.0,"EndTime":89897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":90070.0,"EndTime":90070.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":90127.0,"Objects":[{"StartTime":90127.0,"EndTime":90127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":90242.0,"EndTime":90242.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":90358.0,"Objects":[{"StartTime":90358.0,"EndTime":90358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":90473.0,"EndTime":90473.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":90589.0,"Objects":[{"StartTime":90589.0,"EndTime":90589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":90819.0,"EndTime":90819.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":90935.0,"Objects":[{"StartTime":90935.0,"EndTime":90935.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":91165.0,"EndTime":91165.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":91281.0,"Objects":[{"StartTime":91281.0,"EndTime":91281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":91396.0,"EndTime":91396.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":91512.0,"Objects":[{"StartTime":91512.0,"EndTime":91512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":91627.0,"EndTime":91627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":91743.0,"Objects":[{"StartTime":91743.0,"EndTime":91743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":91858.0,"EndTime":91858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":91974.0,"Objects":[{"StartTime":91974.0,"EndTime":91974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":92089.0,"EndTime":92089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":92204.0,"Objects":[{"StartTime":92204.0,"EndTime":92204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":92262.0,"Objects":[{"StartTime":92262.0,"EndTime":92262.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":92320.0,"Objects":[{"StartTime":92320.0,"EndTime":92320.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":92377.0,"Objects":[{"StartTime":92377.0,"EndTime":92377.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":92435.0,"Objects":[{"StartTime":92435.0,"EndTime":92435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":92665.0,"EndTime":92665.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":92781.0,"Objects":[{"StartTime":92781.0,"EndTime":92781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":92897.0,"Objects":[{"StartTime":92897.0,"EndTime":92897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":93127.0,"EndTime":93127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":93243.0,"Objects":[{"StartTime":93243.0,"EndTime":93243.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":93358.0,"Objects":[{"StartTime":93358.0,"EndTime":93358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":93473.0,"EndTime":93473.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":93589.0,"Objects":[{"StartTime":93589.0,"EndTime":93589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":93762.0,"EndTime":93762.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":93820.0,"Objects":[{"StartTime":93820.0,"EndTime":93820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":93935.0,"EndTime":93935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":94051.0,"Objects":[{"StartTime":94051.0,"EndTime":94051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":94166.0,"EndTime":94166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":94281.0,"Objects":[{"StartTime":94281.0,"EndTime":94281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":94511.0,"EndTime":94511.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":94627.0,"Objects":[{"StartTime":94627.0,"EndTime":94627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":94743.0,"Objects":[{"StartTime":94743.0,"EndTime":94743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":94973.0,"EndTime":94973.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":95089.0,"Objects":[{"StartTime":95089.0,"EndTime":95089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":95204.0,"Objects":[{"StartTime":95204.0,"EndTime":95204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":95377.0,"EndTime":95377.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":95435.0,"Objects":[{"StartTime":95435.0,"EndTime":95435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":95550.0,"EndTime":95550.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":95666.0,"Objects":[{"StartTime":95666.0,"EndTime":95666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":95781.0,"EndTime":95781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":95897.0,"Objects":[{"StartTime":95897.0,"EndTime":95897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":96012.0,"EndTime":96012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":96127.0,"Objects":[{"StartTime":96127.0,"EndTime":96127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":96357.0,"EndTime":96357.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":96474.0,"Objects":[{"StartTime":96474.0,"EndTime":96474.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":96589.0,"Objects":[{"StartTime":96589.0,"EndTime":96589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":96819.0,"EndTime":96819.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":96935.0,"Objects":[{"StartTime":96935.0,"EndTime":96935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":97051.0,"Objects":[{"StartTime":97051.0,"EndTime":97051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":97281.0,"EndTime":97281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":97397.0,"Objects":[{"StartTime":97397.0,"EndTime":97397.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":97512.0,"Objects":[{"StartTime":97512.0,"EndTime":97512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":97627.0,"EndTime":97627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":97743.0,"Objects":[{"StartTime":97743.0,"EndTime":97743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":97858.0,"EndTime":97858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":97974.0,"Objects":[{"StartTime":97974.0,"EndTime":97974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":98204.0,"EndTime":98204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":98320.0,"Objects":[{"StartTime":98320.0,"EndTime":98320.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":98435.0,"Objects":[{"StartTime":98435.0,"EndTime":98435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":98665.0,"EndTime":98665.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":98781.0,"Objects":[{"StartTime":98781.0,"EndTime":98781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":98897.0,"Objects":[{"StartTime":98897.0,"EndTime":98897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":99127.0,"EndTime":99127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":99243.0,"Objects":[{"StartTime":99243.0,"EndTime":99243.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":99358.0,"Objects":[{"StartTime":99358.0,"EndTime":99358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":99473.0,"EndTime":99473.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":99589.0,"Objects":[{"StartTime":99589.0,"EndTime":99589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":99704.0,"EndTime":99704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":99820.0,"Objects":[{"StartTime":99820.0,"EndTime":99820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":99935.0,"Objects":[{"StartTime":99935.0,"EndTime":99935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":100051.0,"Objects":[{"StartTime":100051.0,"EndTime":100051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":100166.0,"Objects":[{"StartTime":100166.0,"EndTime":100166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":100281.0,"Objects":[{"StartTime":100281.0,"EndTime":100281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":100397.0,"Objects":[{"StartTime":100397.0,"EndTime":100397.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":100512.0,"Objects":[{"StartTime":100512.0,"EndTime":100512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":100628.0,"Objects":[{"StartTime":100628.0,"EndTime":100628.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":100743.0,"Objects":[{"StartTime":100743.0,"EndTime":100743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":100858.0,"EndTime":100858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":100974.0,"Objects":[{"StartTime":100974.0,"EndTime":100974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":101089.0,"EndTime":101089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":101204.0,"Objects":[{"StartTime":101204.0,"EndTime":101204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":101319.0,"EndTime":101319.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":101435.0,"Objects":[{"StartTime":101435.0,"EndTime":101435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":101550.0,"EndTime":101550.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":101666.0,"Objects":[{"StartTime":101666.0,"EndTime":101666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":101781.0,"EndTime":101781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":101897.0,"Objects":[{"StartTime":101897.0,"EndTime":101897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":102012.0,"EndTime":102012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":102127.0,"Objects":[{"StartTime":102127.0,"EndTime":102127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":102243.0,"Objects":[{"StartTime":102243.0,"EndTime":102243.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":102300.0,"Objects":[{"StartTime":102300.0,"EndTime":102300.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":102358.0,"Objects":[{"StartTime":102358.0,"EndTime":102358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":102416.0,"Objects":[{"StartTime":102416.0,"EndTime":102416.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":102474.0,"Objects":[{"StartTime":102474.0,"EndTime":102474.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":102531.0,"Objects":[{"StartTime":102531.0,"EndTime":102531.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":102589.0,"Objects":[{"StartTime":102589.0,"EndTime":102589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":102646.0,"Objects":[{"StartTime":102646.0,"EndTime":102646.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":102704.0,"Objects":[{"StartTime":102704.0,"EndTime":102704.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":102762.0,"Objects":[{"StartTime":102762.0,"EndTime":102762.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":102819.0,"Objects":[{"StartTime":102819.0,"EndTime":102819.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":102935.0,"Objects":[{"StartTime":102935.0,"EndTime":102935.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":102992.0,"EndTime":102992.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":103051.0,"Objects":[{"StartTime":103051.0,"EndTime":103051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":103108.0,"Objects":[{"StartTime":103108.0,"EndTime":103108.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":103166.0,"Objects":[{"StartTime":103166.0,"EndTime":103166.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":103224.0,"Objects":[{"StartTime":103224.0,"EndTime":103224.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":103281.0,"Objects":[{"StartTime":103281.0,"EndTime":103281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":103339.0,"Objects":[{"StartTime":103339.0,"EndTime":103339.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":103397.0,"Objects":[{"StartTime":103397.0,"EndTime":103397.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":103454.0,"Objects":[{"StartTime":103454.0,"EndTime":103454.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":103512.0,"Objects":[{"StartTime":103512.0,"EndTime":103512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":103742.0,"EndTime":103742.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":103858.0,"Objects":[{"StartTime":103858.0,"EndTime":103858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":103974.0,"Objects":[{"StartTime":103974.0,"EndTime":103974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":104204.0,"EndTime":104204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":104320.0,"Objects":[{"StartTime":104320.0,"EndTime":104320.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":104435.0,"Objects":[{"StartTime":104435.0,"EndTime":104435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":104550.0,"EndTime":104550.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":104666.0,"Objects":[{"StartTime":104666.0,"EndTime":104666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":104896.0,"EndTime":104896.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":105012.0,"Objects":[{"StartTime":105012.0,"EndTime":105012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":105127.0,"Objects":[{"StartTime":105127.0,"EndTime":105127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":105243.0,"Objects":[{"StartTime":105243.0,"EndTime":105243.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":105301.0,"Objects":[{"StartTime":105301.0,"EndTime":105301.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":105358.0,"Objects":[{"StartTime":105358.0,"EndTime":105358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":105588.0,"EndTime":105588.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":105704.0,"Objects":[{"StartTime":105704.0,"EndTime":105704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":105820.0,"Objects":[{"StartTime":105820.0,"EndTime":105820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":105935.0,"EndTime":105935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":106051.0,"Objects":[{"StartTime":106051.0,"EndTime":106051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":106166.0,"EndTime":106166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":106281.0,"Objects":[{"StartTime":106281.0,"EndTime":106281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":106396.0,"EndTime":106396.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":106512.0,"Objects":[{"StartTime":106512.0,"EndTime":106512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":106627.0,"EndTime":106627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":106743.0,"Objects":[{"StartTime":106743.0,"EndTime":106743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":106916.0,"EndTime":106916.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":106974.0,"Objects":[{"StartTime":106974.0,"EndTime":106974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":107089.0,"EndTime":107089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":107204.0,"Objects":[{"StartTime":107204.0,"EndTime":107204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":107434.0,"EndTime":107434.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":107551.0,"Objects":[{"StartTime":107551.0,"EndTime":107551.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":107666.0,"Objects":[{"StartTime":107666.0,"EndTime":107666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":107896.0,"EndTime":107896.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":108012.0,"Objects":[{"StartTime":108012.0,"EndTime":108012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":108127.0,"Objects":[{"StartTime":108127.0,"EndTime":108127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":108242.0,"EndTime":108242.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":108358.0,"Objects":[{"StartTime":108358.0,"EndTime":108358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":108588.0,"EndTime":108588.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":108704.0,"Objects":[{"StartTime":108704.0,"EndTime":108704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":108820.0,"Objects":[{"StartTime":108820.0,"EndTime":108820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":108935.0,"Objects":[{"StartTime":108935.0,"EndTime":108935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":108993.0,"Objects":[{"StartTime":108993.0,"EndTime":108993.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":109051.0,"Objects":[{"StartTime":109051.0,"EndTime":109051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":109281.0,"EndTime":109281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":109397.0,"Objects":[{"StartTime":109397.0,"EndTime":109397.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":109512.0,"Objects":[{"StartTime":109512.0,"EndTime":109512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":109627.0,"EndTime":109627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":109743.0,"Objects":[{"StartTime":109743.0,"EndTime":109743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":109858.0,"EndTime":109858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":109974.0,"Objects":[{"StartTime":109974.0,"EndTime":109974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":110089.0,"EndTime":110089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":110204.0,"Objects":[{"StartTime":110204.0,"EndTime":110204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":110319.0,"EndTime":110319.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":110435.0,"Objects":[{"StartTime":110435.0,"EndTime":110435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":110608.0,"EndTime":110608.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":110666.0,"Objects":[{"StartTime":110666.0,"EndTime":110666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":110781.0,"EndTime":110781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":110897.0,"Objects":[{"StartTime":110897.0,"EndTime":110897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":111127.0,"EndTime":111127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":111243.0,"Objects":[{"StartTime":111243.0,"EndTime":111243.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":111358.0,"Objects":[{"StartTime":111358.0,"EndTime":111358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":111588.0,"EndTime":111588.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":111704.0,"Objects":[{"StartTime":111704.0,"EndTime":111704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":111820.0,"Objects":[{"StartTime":111820.0,"EndTime":111820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":111935.0,"EndTime":111935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":112051.0,"Objects":[{"StartTime":112051.0,"EndTime":112051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":112281.0,"EndTime":112281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":112397.0,"Objects":[{"StartTime":112397.0,"EndTime":112397.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":112512.0,"Objects":[{"StartTime":112512.0,"EndTime":112512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":112627.0,"Objects":[{"StartTime":112627.0,"EndTime":112627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":112685.0,"Objects":[{"StartTime":112685.0,"EndTime":112685.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":112743.0,"Objects":[{"StartTime":112743.0,"EndTime":112743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":112973.0,"EndTime":112973.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":113089.0,"Objects":[{"StartTime":113089.0,"EndTime":113089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":113204.0,"Objects":[{"StartTime":113204.0,"EndTime":113204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":113434.0,"EndTime":113434.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":113551.0,"Objects":[{"StartTime":113551.0,"EndTime":113551.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":113666.0,"Objects":[{"StartTime":113666.0,"EndTime":113666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":113896.0,"EndTime":113896.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":114012.0,"Objects":[{"StartTime":114012.0,"EndTime":114012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":114127.0,"Objects":[{"StartTime":114127.0,"EndTime":114127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":114300.0,"EndTime":114300.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":114358.0,"Objects":[{"StartTime":114358.0,"EndTime":114358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":114473.0,"EndTime":114473.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":114589.0,"Objects":[{"StartTime":114589.0,"EndTime":115281.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":115512.0,"Objects":[{"StartTime":115512.0,"EndTime":115512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":116435.0,"Objects":[{"StartTime":116435.0,"EndTime":117127.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":117358.0,"Objects":[{"StartTime":117358.0,"EndTime":117358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":117589.0,"Objects":[{"StartTime":117589.0,"EndTime":117589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":117820.0,"Objects":[{"StartTime":117820.0,"EndTime":117820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":118051.0,"Objects":[{"StartTime":118051.0,"EndTime":118051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":118166.0,"EndTime":118166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":118281.0,"Objects":[{"StartTime":118281.0,"EndTime":118281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":118396.0,"EndTime":118396.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":118512.0,"Objects":[{"StartTime":118512.0,"EndTime":118512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":118627.0,"EndTime":118627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":118743.0,"Objects":[{"StartTime":118743.0,"EndTime":118743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":118858.0,"Objects":[{"StartTime":118858.0,"EndTime":118858.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":119088.0,"EndTime":119088.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":119204.0,"Objects":[{"StartTime":119204.0,"EndTime":119204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":119262.0,"Objects":[{"StartTime":119262.0,"EndTime":119262.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":119319.0,"Objects":[{"StartTime":119319.0,"EndTime":119319.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":119377.0,"Objects":[{"StartTime":119377.0,"EndTime":119377.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":119434.0,"Objects":[{"StartTime":119434.0,"EndTime":119434.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":119493.0,"Objects":[{"StartTime":119493.0,"EndTime":119493.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":119551.0,"Objects":[{"StartTime":119551.0,"EndTime":119551.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":119608.0,"Objects":[{"StartTime":119608.0,"EndTime":119608.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":119666.0,"Objects":[{"StartTime":119666.0,"EndTime":119666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":119723.0,"Objects":[{"StartTime":119723.0,"EndTime":119723.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":119781.0,"Objects":[{"StartTime":119781.0,"EndTime":119781.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":119839.0,"Objects":[{"StartTime":119839.0,"EndTime":119839.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":119897.0,"Objects":[{"StartTime":119897.0,"EndTime":119897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":119954.0,"Objects":[{"StartTime":119954.0,"EndTime":119954.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":120012.0,"Objects":[{"StartTime":120012.0,"EndTime":120012.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":120070.0,"Objects":[{"StartTime":120070.0,"EndTime":120070.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":120127.0,"Objects":[{"StartTime":120127.0,"EndTime":120127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":120357.0,"EndTime":120357.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":120474.0,"Objects":[{"StartTime":120474.0,"EndTime":120474.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":120704.0,"EndTime":120704.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":120820.0,"Objects":[{"StartTime":120820.0,"EndTime":120820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":120935.0,"EndTime":120935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":121051.0,"Objects":[{"StartTime":121051.0,"EndTime":121051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":121166.0,"Objects":[{"StartTime":121166.0,"EndTime":121166.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":121396.0,"EndTime":121396.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":121512.0,"Objects":[{"StartTime":121512.0,"EndTime":121512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":121627.0,"EndTime":121627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":121743.0,"Objects":[{"StartTime":121743.0,"EndTime":121743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":121858.0,"EndTime":121858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":121974.0,"Objects":[{"StartTime":121974.0,"EndTime":121974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":122204.0,"EndTime":122204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":122320.0,"Objects":[{"StartTime":122320.0,"EndTime":122320.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":122550.0,"EndTime":122550.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":122666.0,"Objects":[{"StartTime":122666.0,"EndTime":122666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":122781.0,"EndTime":122781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":122897.0,"Objects":[{"StartTime":122897.0,"EndTime":122897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":123012.0,"Objects":[{"StartTime":123012.0,"EndTime":123012.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":123242.0,"EndTime":123242.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":123358.0,"Objects":[{"StartTime":123358.0,"EndTime":123358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":123473.0,"EndTime":123473.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":123589.0,"Objects":[{"StartTime":123589.0,"EndTime":123589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":123704.0,"EndTime":123704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":123820.0,"Objects":[{"StartTime":123820.0,"EndTime":123820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":124050.0,"EndTime":124050.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":124166.0,"Objects":[{"StartTime":124166.0,"EndTime":124166.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":124396.0,"EndTime":124396.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":124512.0,"Objects":[{"StartTime":124512.0,"EndTime":124512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":124627.0,"EndTime":124627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":124743.0,"Objects":[{"StartTime":124743.0,"EndTime":124743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":124858.0,"Objects":[{"StartTime":124858.0,"EndTime":124858.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":125088.0,"EndTime":125088.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":125204.0,"Objects":[{"StartTime":125204.0,"EndTime":125204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":125319.0,"EndTime":125319.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":125435.0,"Objects":[{"StartTime":125435.0,"EndTime":125435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":125550.0,"EndTime":125550.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":125666.0,"Objects":[{"StartTime":125666.0,"EndTime":125666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":125781.0,"Objects":[{"StartTime":125781.0,"EndTime":125781.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":125897.0,"Objects":[{"StartTime":125897.0,"EndTime":125897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":126012.0,"Objects":[{"StartTime":126012.0,"EndTime":126012.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":126127.0,"Objects":[{"StartTime":126127.0,"EndTime":126127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":126357.0,"EndTime":126357.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":126474.0,"Objects":[{"StartTime":126474.0,"EndTime":126474.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":126589.0,"Objects":[{"StartTime":126589.0,"EndTime":126589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":126762.0,"EndTime":126762.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":126820.0,"Objects":[{"StartTime":126820.0,"EndTime":126820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":127050.0,"EndTime":127050.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":127166.0,"Objects":[{"StartTime":127166.0,"EndTime":127166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":127281.0,"Objects":[{"StartTime":127281.0,"EndTime":127281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":127397.0,"Objects":[{"StartTime":127397.0,"EndTime":127397.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":127454.0,"Objects":[{"StartTime":127454.0,"EndTime":127454.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":127512.0,"Objects":[{"StartTime":127512.0,"EndTime":127512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":127742.0,"EndTime":127742.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":127858.0,"Objects":[{"StartTime":127858.0,"EndTime":127858.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":128088.0,"EndTime":128088.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":128204.0,"Objects":[{"StartTime":128204.0,"EndTime":128204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":128319.0,"EndTime":128319.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":128435.0,"Objects":[{"StartTime":128435.0,"EndTime":128435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":128551.0,"Objects":[{"StartTime":128551.0,"EndTime":128551.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":128781.0,"EndTime":128781.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":128897.0,"Objects":[{"StartTime":128897.0,"EndTime":128897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":129012.0,"EndTime":129012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":129127.0,"Objects":[{"StartTime":129127.0,"EndTime":129127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":129242.0,"EndTime":129242.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":129358.0,"Objects":[{"StartTime":129358.0,"EndTime":129358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":129588.0,"EndTime":129588.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":129704.0,"Objects":[{"StartTime":129704.0,"EndTime":129704.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":129934.0,"EndTime":129934.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":130051.0,"Objects":[{"StartTime":130051.0,"EndTime":130051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":130166.0,"EndTime":130166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":130281.0,"Objects":[{"StartTime":130281.0,"EndTime":130281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":130397.0,"Objects":[{"StartTime":130397.0,"EndTime":130397.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":130627.0,"EndTime":130627.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":130743.0,"Objects":[{"StartTime":130743.0,"EndTime":130743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":130858.0,"EndTime":130858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":130974.0,"Objects":[{"StartTime":130974.0,"EndTime":130974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":131089.0,"EndTime":131089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":131204.0,"Objects":[{"StartTime":131204.0,"EndTime":131204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":131434.0,"EndTime":131434.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":131551.0,"Objects":[{"StartTime":131551.0,"EndTime":131551.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":131781.0,"EndTime":131781.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":131897.0,"Objects":[{"StartTime":131897.0,"EndTime":131897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":132012.0,"EndTime":132012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":132127.0,"Objects":[{"StartTime":132127.0,"EndTime":132127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":132243.0,"Objects":[{"StartTime":132243.0,"EndTime":132243.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":132473.0,"EndTime":132473.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":132589.0,"Objects":[{"StartTime":132589.0,"EndTime":132589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":132704.0,"EndTime":132704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":132820.0,"Objects":[{"StartTime":132820.0,"EndTime":132820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":132935.0,"EndTime":132935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":133051.0,"Objects":[{"StartTime":133051.0,"EndTime":133051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":133108.0,"Objects":[{"StartTime":133108.0,"EndTime":133108.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":133166.0,"Objects":[{"StartTime":133166.0,"EndTime":133166.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":133224.0,"Objects":[{"StartTime":133224.0,"EndTime":133224.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":133281.0,"Objects":[{"StartTime":133281.0,"EndTime":133281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":133339.0,"Objects":[{"StartTime":133339.0,"EndTime":133339.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":133397.0,"Objects":[{"StartTime":133397.0,"EndTime":133397.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":133454.0,"Objects":[{"StartTime":133454.0,"EndTime":133454.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":133512.0,"Objects":[{"StartTime":133512.0,"EndTime":133512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":133743.0,"Objects":[{"StartTime":133743.0,"EndTime":133743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":133858.0,"Objects":[{"StartTime":133858.0,"EndTime":133858.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":133973.0,"Objects":[{"StartTime":133973.0,"EndTime":133973.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":134031.0,"Objects":[{"StartTime":134031.0,"EndTime":134031.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":134088.0,"Objects":[{"StartTime":134088.0,"EndTime":134088.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":134146.0,"Objects":[{"StartTime":134146.0,"EndTime":134146.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":134204.0,"Objects":[{"StartTime":134204.0,"EndTime":134204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":134434.0,"EndTime":134434.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":134666.0,"Objects":[{"StartTime":134666.0,"EndTime":134666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":134781.0,"EndTime":134781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":134897.0,"Objects":[{"StartTime":134897.0,"EndTime":134897.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":135012.0,"EndTime":135012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":135127.0,"Objects":[{"StartTime":135127.0,"EndTime":135127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":135242.0,"EndTime":135242.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":135358.0,"Objects":[{"StartTime":135358.0,"EndTime":135358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":135588.0,"EndTime":135588.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":135704.0,"Objects":[{"StartTime":135704.0,"EndTime":135704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":135819.0,"EndTime":135819.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":135935.0,"Objects":[{"StartTime":135935.0,"EndTime":135935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":136050.0,"EndTime":136050.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":136166.0,"Objects":[{"StartTime":136166.0,"EndTime":136166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":136281.0,"EndTime":136281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":136397.0,"Objects":[{"StartTime":136397.0,"EndTime":136397.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":136512.0,"EndTime":136512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":136627.0,"Objects":[{"StartTime":136627.0,"EndTime":136627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":136743.0,"Objects":[{"StartTime":136743.0,"EndTime":136743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":136858.0,"EndTime":136858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":136974.0,"Objects":[{"StartTime":136974.0,"EndTime":136974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":137089.0,"EndTime":137089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":137204.0,"Objects":[{"StartTime":137204.0,"EndTime":137204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":137319.0,"EndTime":137319.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":137435.0,"Objects":[{"StartTime":137435.0,"EndTime":137435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":137550.0,"EndTime":137550.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":137666.0,"Objects":[{"StartTime":137666.0,"EndTime":137666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":137896.0,"EndTime":137896.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":138012.0,"Objects":[{"StartTime":138012.0,"EndTime":138012.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":138242.0,"EndTime":138242.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":138358.0,"Objects":[{"StartTime":138358.0,"EndTime":138358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":138473.0,"EndTime":138473.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":138589.0,"Objects":[{"StartTime":138589.0,"EndTime":138589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":138819.0,"EndTime":138819.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":138935.0,"Objects":[{"StartTime":138935.0,"EndTime":138935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":139051.0,"Objects":[{"StartTime":139051.0,"EndTime":139051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":139281.0,"EndTime":139281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":139397.0,"Objects":[{"StartTime":139397.0,"EndTime":139397.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":139512.0,"Objects":[{"StartTime":139512.0,"EndTime":139512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":139742.0,"EndTime":139742.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":139858.0,"Objects":[{"StartTime":139858.0,"EndTime":139858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":139974.0,"Objects":[{"StartTime":139974.0,"EndTime":139974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":140089.0,"EndTime":140089.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":140204.0,"Objects":[{"StartTime":140204.0,"EndTime":140204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":140319.0,"EndTime":140319.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":140435.0,"Objects":[{"StartTime":140435.0,"EndTime":140435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":140550.0,"EndTime":140550.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":140666.0,"Objects":[{"StartTime":140666.0,"EndTime":140666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":140781.0,"EndTime":140781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":140897.0,"Objects":[{"StartTime":140897.0,"EndTime":140897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":141012.0,"EndTime":141012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":141127.0,"Objects":[{"StartTime":141127.0,"EndTime":141127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":141242.0,"EndTime":141242.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":141358.0,"Objects":[{"StartTime":141358.0,"EndTime":141358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":141588.0,"EndTime":141588.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":141704.0,"Objects":[{"StartTime":141704.0,"EndTime":141704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":141820.0,"Objects":[{"StartTime":141820.0,"EndTime":141820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":142050.0,"EndTime":142050.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":142166.0,"Objects":[{"StartTime":142166.0,"EndTime":142166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":142281.0,"Objects":[{"StartTime":142281.0,"EndTime":142281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":142396.0,"EndTime":142396.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":142512.0,"Objects":[{"StartTime":142512.0,"EndTime":142512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":142627.0,"EndTime":142627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":142743.0,"Objects":[{"StartTime":142743.0,"EndTime":142743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":142858.0,"EndTime":142858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":142974.0,"Objects":[{"StartTime":142974.0,"EndTime":142974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":143089.0,"EndTime":143089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":143204.0,"Objects":[{"StartTime":143204.0,"EndTime":143204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":143377.0,"EndTime":143377.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":143435.0,"Objects":[{"StartTime":143435.0,"EndTime":143435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":143608.0,"EndTime":143608.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":143666.0,"Objects":[{"StartTime":143666.0,"EndTime":143666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":143839.0,"EndTime":143839.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":143897.0,"Objects":[{"StartTime":143897.0,"EndTime":143897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":144070.0,"EndTime":144070.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":144127.0,"Objects":[{"StartTime":144127.0,"EndTime":144127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":144357.0,"EndTime":144357.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":144474.0,"Objects":[{"StartTime":144474.0,"EndTime":144474.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":144589.0,"Objects":[{"StartTime":144589.0,"EndTime":144589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":144819.0,"EndTime":144819.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":144935.0,"Objects":[{"StartTime":144935.0,"EndTime":144935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":145051.0,"Objects":[{"StartTime":145051.0,"EndTime":145051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":145166.0,"EndTime":145166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":145281.0,"Objects":[{"StartTime":145281.0,"EndTime":145281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":145396.0,"EndTime":145396.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":145512.0,"Objects":[{"StartTime":145512.0,"EndTime":145512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":145627.0,"EndTime":145627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":145742.0,"Objects":[{"StartTime":145742.0,"EndTime":145742.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":145857.0,"EndTime":145857.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":145974.0,"Objects":[{"StartTime":145974.0,"EndTime":145974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":146089.0,"EndTime":146089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":146204.0,"Objects":[{"StartTime":146204.0,"EndTime":146204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":146319.0,"EndTime":146319.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":146435.0,"Objects":[{"StartTime":146435.0,"EndTime":146435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":146550.0,"EndTime":146550.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":146666.0,"Objects":[{"StartTime":146666.0,"EndTime":146666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":146781.0,"EndTime":146781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":146897.0,"Objects":[{"StartTime":146897.0,"EndTime":146897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":147012.0,"EndTime":147012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":147127.0,"Objects":[{"StartTime":147127.0,"EndTime":147127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":147242.0,"EndTime":147242.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":147358.0,"Objects":[{"StartTime":147358.0,"EndTime":147358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":147473.0,"EndTime":147473.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":147589.0,"Objects":[{"StartTime":147589.0,"EndTime":147589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":147704.0,"EndTime":147704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":147820.0,"Objects":[{"StartTime":147820.0,"EndTime":147820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":147935.0,"EndTime":147935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":148050.0,"Objects":[{"StartTime":148050.0,"EndTime":148050.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":148165.0,"EndTime":148165.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":148281.0,"Objects":[{"StartTime":148281.0,"EndTime":148281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":148397.0,"Objects":[{"StartTime":148397.0,"EndTime":148397.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":148512.0,"Objects":[{"StartTime":148512.0,"EndTime":148512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":148627.0,"Objects":[{"StartTime":148627.0,"EndTime":148627.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":148743.0,"Objects":[{"StartTime":148743.0,"EndTime":148743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":148858.0,"Objects":[{"StartTime":148858.0,"EndTime":148858.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":148916.0,"Objects":[{"StartTime":148916.0,"EndTime":148916.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":148974.0,"Objects":[{"StartTime":148974.0,"EndTime":148974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":149089.0,"Objects":[{"StartTime":149089.0,"EndTime":149089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":149204.0,"Objects":[{"StartTime":149204.0,"EndTime":149204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":149320.0,"Objects":[{"StartTime":149320.0,"EndTime":149320.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":149435.0,"Objects":[{"StartTime":149435.0,"EndTime":149435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":149551.0,"Objects":[{"StartTime":149551.0,"EndTime":149551.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":149666.0,"Objects":[{"StartTime":149666.0,"EndTime":150358.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":150589.0,"Objects":[{"StartTime":150589.0,"EndTime":151281.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":151512.0,"Objects":[{"StartTime":151512.0,"EndTime":152204.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":152320.0,"Objects":[{"StartTime":152320.0,"EndTime":152320.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":152377.0,"Objects":[{"StartTime":152377.0,"EndTime":152377.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":152435.0,"Objects":[{"StartTime":152435.0,"EndTime":152435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":152551.0,"Objects":[{"StartTime":152551.0,"EndTime":152551.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":152666.0,"Objects":[{"StartTime":152666.0,"EndTime":152666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":152781.0,"Objects":[{"StartTime":152781.0,"EndTime":152781.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":152897.0,"Objects":[{"StartTime":152897.0,"EndTime":152897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":153012.0,"Objects":[{"StartTime":153012.0,"EndTime":153012.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":153128.0,"Objects":[{"StartTime":153128.0,"EndTime":153128.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":153243.0,"Objects":[{"StartTime":153243.0,"EndTime":153243.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":153358.0,"Objects":[{"StartTime":153358.0,"EndTime":154050.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":154281.0,"Objects":[{"StartTime":154281.0,"EndTime":154973.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":155204.0,"Objects":[{"StartTime":155204.0,"EndTime":155896.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":156127.0,"Objects":[{"StartTime":156127.0,"EndTime":156127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":156185.0,"Objects":[{"StartTime":156185.0,"EndTime":156185.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":156243.0,"Objects":[{"StartTime":156243.0,"EndTime":156243.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":156358.0,"Objects":[{"StartTime":156358.0,"EndTime":156358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":156474.0,"Objects":[{"StartTime":156474.0,"EndTime":156474.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":156531.0,"Objects":[{"StartTime":156531.0,"EndTime":156531.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":156589.0,"Objects":[{"StartTime":156589.0,"EndTime":156589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":156704.0,"Objects":[{"StartTime":156704.0,"EndTime":156704.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":156820.0,"Objects":[{"StartTime":156820.0,"EndTime":156820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":156935.0,"Objects":[{"StartTime":156935.0,"EndTime":156935.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":157051.0,"Objects":[{"StartTime":157051.0,"EndTime":157743.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":157974.0,"Objects":[{"StartTime":157974.0,"EndTime":158666.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":158897.0,"Objects":[{"StartTime":158897.0,"EndTime":159589.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":159704.0,"Objects":[{"StartTime":159704.0,"EndTime":159704.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":159762.0,"Objects":[{"StartTime":159762.0,"EndTime":159762.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":159820.0,"Objects":[{"StartTime":159820.0,"EndTime":159820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":159935.0,"Objects":[{"StartTime":159935.0,"EndTime":159935.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":160051.0,"Objects":[{"StartTime":160051.0,"EndTime":160051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":160166.0,"Objects":[{"StartTime":160166.0,"EndTime":160166.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":160281.0,"Objects":[{"StartTime":160281.0,"EndTime":160281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":160397.0,"Objects":[{"StartTime":160397.0,"EndTime":160397.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":160513.0,"Objects":[{"StartTime":160513.0,"EndTime":160513.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":160627.0,"Objects":[{"StartTime":160627.0,"EndTime":160627.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":160743.0,"Objects":[{"StartTime":160743.0,"EndTime":160743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":160858.0,"EndTime":160858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":160974.0,"Objects":[{"StartTime":160974.0,"EndTime":160974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":161089.0,"EndTime":161089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":161204.0,"Objects":[{"StartTime":161204.0,"EndTime":161204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":161319.0,"EndTime":161319.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":161435.0,"Objects":[{"StartTime":161435.0,"EndTime":161435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":161550.0,"EndTime":161550.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":161666.0,"Objects":[{"StartTime":161666.0,"EndTime":161666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":161781.0,"EndTime":161781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":161897.0,"Objects":[{"StartTime":161897.0,"EndTime":161897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":162012.0,"EndTime":162012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":162127.0,"Objects":[{"StartTime":162127.0,"EndTime":162127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":162242.0,"EndTime":162242.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":162358.0,"Objects":[{"StartTime":162358.0,"EndTime":162358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":162473.0,"EndTime":162473.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":162589.0,"Objects":[{"StartTime":162589.0,"EndTime":162589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":162704.0,"EndTime":162704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":162820.0,"Objects":[{"StartTime":162820.0,"EndTime":162820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":162935.0,"EndTime":162935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":163051.0,"Objects":[{"StartTime":163051.0,"EndTime":163051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":163166.0,"EndTime":163166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":163281.0,"Objects":[{"StartTime":163281.0,"EndTime":163281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":163396.0,"EndTime":163396.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":163512.0,"Objects":[{"StartTime":163512.0,"EndTime":163512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":163627.0,"EndTime":163627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":163743.0,"Objects":[{"StartTime":163743.0,"EndTime":163743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":163858.0,"EndTime":163858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":163974.0,"Objects":[{"StartTime":163974.0,"EndTime":163974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":164089.0,"EndTime":164089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":164205.0,"Objects":[{"StartTime":164205.0,"EndTime":164205.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":164320.0,"EndTime":164320.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":164435.0,"Objects":[{"StartTime":164435.0,"EndTime":164435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":164550.0,"EndTime":164550.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":164666.0,"Objects":[{"StartTime":164666.0,"EndTime":164666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":164781.0,"EndTime":164781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":164897.0,"Objects":[{"StartTime":164897.0,"EndTime":164897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":165012.0,"EndTime":165012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":165127.0,"Objects":[{"StartTime":165127.0,"EndTime":165127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":165243.0,"Objects":[{"StartTime":165243.0,"EndTime":165243.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":165301.0,"Objects":[{"StartTime":165301.0,"EndTime":165301.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":165358.0,"Objects":[{"StartTime":165358.0,"EndTime":165358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":165473.0,"EndTime":165473.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":165589.0,"Objects":[{"StartTime":165589.0,"EndTime":165589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":165704.0,"Objects":[{"StartTime":165704.0,"EndTime":165704.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":165820.0,"Objects":[{"StartTime":165820.0,"EndTime":165820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":165877.0,"Objects":[{"StartTime":165877.0,"EndTime":165877.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":165935.0,"Objects":[{"StartTime":165935.0,"EndTime":165935.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":165993.0,"Objects":[{"StartTime":165993.0,"EndTime":165993.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":166050.0,"Objects":[{"StartTime":166050.0,"EndTime":166050.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":166108.0,"Objects":[{"StartTime":166108.0,"EndTime":166108.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":166166.0,"Objects":[{"StartTime":166166.0,"EndTime":166166.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":166224.0,"Objects":[{"StartTime":166224.0,"EndTime":166224.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":166281.0,"Objects":[{"StartTime":166281.0,"EndTime":166281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":166511.0,"EndTime":166511.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":166627.0,"Objects":[{"StartTime":166627.0,"EndTime":166627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":166743.0,"Objects":[{"StartTime":166743.0,"EndTime":166743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":166973.0,"EndTime":166973.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":167089.0,"Objects":[{"StartTime":167089.0,"EndTime":167089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":167204.0,"Objects":[{"StartTime":167204.0,"EndTime":167204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":167319.0,"EndTime":167319.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":167435.0,"Objects":[{"StartTime":167435.0,"EndTime":167435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":167608.0,"EndTime":167608.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":167666.0,"Objects":[{"StartTime":167666.0,"EndTime":167666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":167781.0,"EndTime":167781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":167897.0,"Objects":[{"StartTime":167897.0,"EndTime":167897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":168012.0,"EndTime":168012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":168127.0,"Objects":[{"StartTime":168127.0,"EndTime":168127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":168357.0,"EndTime":168357.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":168474.0,"Objects":[{"StartTime":168474.0,"EndTime":168474.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":168704.0,"EndTime":168704.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":168820.0,"Objects":[{"StartTime":168820.0,"EndTime":168820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":168935.0,"EndTime":168935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":169051.0,"Objects":[{"StartTime":169051.0,"EndTime":169051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":169166.0,"EndTime":169166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":169281.0,"Objects":[{"StartTime":169281.0,"EndTime":169281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":169396.0,"EndTime":169396.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":169512.0,"Objects":[{"StartTime":169512.0,"EndTime":169512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":169627.0,"EndTime":169627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":169743.0,"Objects":[{"StartTime":169743.0,"EndTime":169743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":169800.0,"Objects":[{"StartTime":169800.0,"EndTime":169800.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":169858.0,"Objects":[{"StartTime":169858.0,"EndTime":169858.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":169916.0,"Objects":[{"StartTime":169916.0,"EndTime":169916.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":169974.0,"Objects":[{"StartTime":169974.0,"EndTime":169974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":170204.0,"EndTime":170204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":170320.0,"Objects":[{"StartTime":170320.0,"EndTime":170320.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":170435.0,"Objects":[{"StartTime":170435.0,"EndTime":170435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":170665.0,"EndTime":170665.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":170781.0,"Objects":[{"StartTime":170781.0,"EndTime":170781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":170897.0,"Objects":[{"StartTime":170897.0,"EndTime":170897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":171012.0,"EndTime":171012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":171127.0,"Objects":[{"StartTime":171127.0,"EndTime":171127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":171300.0,"EndTime":171300.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":171358.0,"Objects":[{"StartTime":171358.0,"EndTime":171358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":171473.0,"EndTime":171473.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":171589.0,"Objects":[{"StartTime":171589.0,"EndTime":171589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":171704.0,"EndTime":171704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":171820.0,"Objects":[{"StartTime":171820.0,"EndTime":171820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":172050.0,"EndTime":172050.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":172166.0,"Objects":[{"StartTime":172166.0,"EndTime":172166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":172281.0,"Objects":[{"StartTime":172281.0,"EndTime":172281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":172511.0,"EndTime":172511.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":172628.0,"Objects":[{"StartTime":172628.0,"EndTime":172628.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":172743.0,"Objects":[{"StartTime":172743.0,"EndTime":172743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":172916.0,"EndTime":172916.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":172974.0,"Objects":[{"StartTime":172974.0,"EndTime":172974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":173089.0,"EndTime":173089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":173204.0,"Objects":[{"StartTime":173204.0,"EndTime":173204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":173319.0,"EndTime":173319.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":173435.0,"Objects":[{"StartTime":173435.0,"EndTime":173435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":173550.0,"EndTime":173550.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":173666.0,"Objects":[{"StartTime":173666.0,"EndTime":173666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":173896.0,"EndTime":173896.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":174012.0,"Objects":[{"StartTime":174012.0,"EndTime":174012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":174127.0,"Objects":[{"StartTime":174127.0,"EndTime":174127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":174357.0,"EndTime":174357.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":174474.0,"Objects":[{"StartTime":174474.0,"EndTime":174474.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":174589.0,"Objects":[{"StartTime":174589.0,"EndTime":174589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":174819.0,"EndTime":174819.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":174935.0,"Objects":[{"StartTime":174935.0,"EndTime":174935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":175051.0,"Objects":[{"StartTime":175051.0,"EndTime":175051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":175166.0,"EndTime":175166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":175281.0,"Objects":[{"StartTime":175281.0,"EndTime":175281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":175396.0,"EndTime":175396.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":175512.0,"Objects":[{"StartTime":175512.0,"EndTime":175512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":175742.0,"EndTime":175742.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":175858.0,"Objects":[{"StartTime":175858.0,"EndTime":175858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":175974.0,"Objects":[{"StartTime":175974.0,"EndTime":175974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":176204.0,"EndTime":176204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":176320.0,"Objects":[{"StartTime":176320.0,"EndTime":176320.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":176435.0,"Objects":[{"StartTime":176435.0,"EndTime":176435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":176665.0,"EndTime":176665.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":176781.0,"Objects":[{"StartTime":176781.0,"EndTime":176781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":176897.0,"Objects":[{"StartTime":176897.0,"EndTime":176897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":177012.0,"EndTime":177012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":177127.0,"Objects":[{"StartTime":177127.0,"EndTime":177127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":177242.0,"EndTime":177242.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":177358.0,"Objects":[{"StartTime":177358.0,"EndTime":177358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true}]},{"StartTime":177474.0,"Objects":[{"StartTime":177474.0,"EndTime":177474.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":177589.0,"Objects":[{"StartTime":177589.0,"EndTime":177589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":177704.0,"Objects":[{"StartTime":177704.0,"EndTime":177704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":177820.0,"Objects":[{"StartTime":177820.0,"EndTime":177820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":177935.0,"Objects":[{"StartTime":177935.0,"EndTime":177935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":178051.0,"Objects":[{"StartTime":178051.0,"EndTime":178051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":178166.0,"Objects":[{"StartTime":178166.0,"EndTime":178166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":178281.0,"Objects":[{"StartTime":178281.0,"EndTime":178281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":178396.0,"EndTime":178396.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":178512.0,"Objects":[{"StartTime":178512.0,"EndTime":178512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":178627.0,"EndTime":178627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":178743.0,"Objects":[{"StartTime":178743.0,"EndTime":178743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":178858.0,"EndTime":178858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":178974.0,"Objects":[{"StartTime":178974.0,"EndTime":178974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":179089.0,"EndTime":179089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":179204.0,"Objects":[{"StartTime":179204.0,"EndTime":179204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":179319.0,"EndTime":179319.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":179435.0,"Objects":[{"StartTime":179435.0,"EndTime":179435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":179550.0,"EndTime":179550.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":179666.0,"Objects":[{"StartTime":179666.0,"EndTime":179666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":179781.0,"Objects":[{"StartTime":179781.0,"EndTime":179781.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":179839.0,"Objects":[{"StartTime":179839.0,"EndTime":179839.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":179897.0,"Objects":[{"StartTime":179897.0,"EndTime":179897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":180012.0,"Objects":[{"StartTime":180012.0,"EndTime":180012.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":180127.0,"Objects":[{"StartTime":180127.0,"EndTime":180127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":180243.0,"Objects":[{"StartTime":180243.0,"EndTime":180243.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":180301.0,"Objects":[{"StartTime":180301.0,"EndTime":180301.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":180358.0,"Objects":[{"StartTime":180358.0,"EndTime":180358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":180473.0,"EndTime":180473.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":180589.0,"Objects":[{"StartTime":180589.0,"EndTime":180589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":180704.0,"Objects":[{"StartTime":180704.0,"EndTime":180704.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":180820.0,"Objects":[{"StartTime":180820.0,"EndTime":180820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":180935.0,"Objects":[{"StartTime":180935.0,"EndTime":180935.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":181051.0,"Objects":[{"StartTime":181051.0,"EndTime":181051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":181281.0,"EndTime":181281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":181397.0,"Objects":[{"StartTime":181397.0,"EndTime":181397.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":181512.0,"Objects":[{"StartTime":181512.0,"EndTime":181512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":181742.0,"EndTime":181742.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":181858.0,"Objects":[{"StartTime":181858.0,"EndTime":181858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":181974.0,"Objects":[{"StartTime":181974.0,"EndTime":181974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":182089.0,"EndTime":182089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":182204.0,"Objects":[{"StartTime":182204.0,"EndTime":182204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":182377.0,"EndTime":182377.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":182435.0,"Objects":[{"StartTime":182435.0,"EndTime":182435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":182550.0,"EndTime":182550.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":182666.0,"Objects":[{"StartTime":182666.0,"EndTime":182666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":182781.0,"Objects":[{"StartTime":182781.0,"EndTime":182781.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":183011.0,"EndTime":183011.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":183127.0,"Objects":[{"StartTime":183127.0,"EndTime":183127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":183357.0,"EndTime":183357.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":183474.0,"Objects":[{"StartTime":183474.0,"EndTime":183474.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":183589.0,"EndTime":183589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":183704.0,"Objects":[{"StartTime":183704.0,"EndTime":183704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":183820.0,"Objects":[{"StartTime":183820.0,"EndTime":183820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":184050.0,"EndTime":184050.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":184166.0,"Objects":[{"StartTime":184166.0,"EndTime":184166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":184281.0,"Objects":[{"StartTime":184281.0,"EndTime":184281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":184396.0,"EndTime":184396.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":184512.0,"Objects":[{"StartTime":184512.0,"EndTime":184512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":184627.0,"EndTime":184627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":184743.0,"Objects":[{"StartTime":184743.0,"EndTime":184743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":184973.0,"EndTime":184973.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":185089.0,"Objects":[{"StartTime":185089.0,"EndTime":185089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":185204.0,"Objects":[{"StartTime":185204.0,"EndTime":185204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":185434.0,"EndTime":185434.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":185551.0,"Objects":[{"StartTime":185551.0,"EndTime":185551.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":185666.0,"Objects":[{"StartTime":185666.0,"EndTime":185666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":185781.0,"EndTime":185781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":185897.0,"Objects":[{"StartTime":185897.0,"EndTime":185897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":186070.0,"EndTime":186070.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":186127.0,"Objects":[{"StartTime":186127.0,"EndTime":186127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":186242.0,"EndTime":186242.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":186358.0,"Objects":[{"StartTime":186358.0,"EndTime":186358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":186474.0,"Objects":[{"StartTime":186474.0,"EndTime":186474.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":186704.0,"EndTime":186704.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":186820.0,"Objects":[{"StartTime":186820.0,"EndTime":186820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":187050.0,"EndTime":187050.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":187166.0,"Objects":[{"StartTime":187166.0,"EndTime":187166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":187281.0,"Objects":[{"StartTime":187281.0,"EndTime":187281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":187396.0,"EndTime":187396.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":187512.0,"Objects":[{"StartTime":187512.0,"EndTime":187512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":187742.0,"EndTime":187742.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":187858.0,"Objects":[{"StartTime":187858.0,"EndTime":187858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":187974.0,"Objects":[{"StartTime":187974.0,"EndTime":187974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":188089.0,"EndTime":188089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":188204.0,"Objects":[{"StartTime":188204.0,"EndTime":188204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":188319.0,"EndTime":188319.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":188435.0,"Objects":[{"StartTime":188435.0,"EndTime":188435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":188665.0,"EndTime":188665.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":188781.0,"Objects":[{"StartTime":188781.0,"EndTime":188781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":188897.0,"Objects":[{"StartTime":188897.0,"EndTime":188897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":189127.0,"EndTime":189127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":189243.0,"Objects":[{"StartTime":189243.0,"EndTime":189243.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":189358.0,"Objects":[{"StartTime":189358.0,"EndTime":189358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":189473.0,"EndTime":189473.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":189589.0,"Objects":[{"StartTime":189589.0,"EndTime":189589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":189819.0,"EndTime":189819.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":189935.0,"Objects":[{"StartTime":189935.0,"EndTime":189935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":190051.0,"Objects":[{"StartTime":190051.0,"EndTime":190051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":190166.0,"EndTime":190166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":190281.0,"Objects":[{"StartTime":190281.0,"EndTime":190281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":190511.0,"EndTime":190511.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":190627.0,"Objects":[{"StartTime":190627.0,"EndTime":190627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":190743.0,"Objects":[{"StartTime":190743.0,"EndTime":190743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":190858.0,"EndTime":190858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":190974.0,"Objects":[{"StartTime":190974.0,"EndTime":190974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":191089.0,"EndTime":191089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":191204.0,"Objects":[{"StartTime":191204.0,"EndTime":191204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":191434.0,"EndTime":191434.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":191551.0,"Objects":[{"StartTime":191551.0,"EndTime":191551.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":191666.0,"Objects":[{"StartTime":191666.0,"EndTime":191666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":191781.0,"EndTime":191781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":191897.0,"Objects":[{"StartTime":191897.0,"EndTime":191897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":192012.0,"EndTime":192012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":192127.0,"Objects":[{"StartTime":192127.0,"EndTime":192819.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":193051.0,"Objects":[{"StartTime":193051.0,"EndTime":193051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":193974.0,"Objects":[{"StartTime":193974.0,"EndTime":194666.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":194898.0,"Objects":[{"StartTime":194898.0,"EndTime":194898.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":195127.0,"Objects":[{"StartTime":195127.0,"EndTime":195127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":195358.0,"Objects":[{"StartTime":195358.0,"EndTime":195358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":195589.0,"Objects":[{"StartTime":195589.0,"EndTime":195589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":195704.0,"EndTime":195704.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":195820.0,"Objects":[{"StartTime":195820.0,"EndTime":195820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":195935.0,"EndTime":195935.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":196051.0,"Objects":[{"StartTime":196051.0,"EndTime":196051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":196166.0,"EndTime":196166.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":196281.0,"Objects":[{"StartTime":196281.0,"EndTime":196281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":196397.0,"Objects":[{"StartTime":196397.0,"EndTime":196397.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":196454.0,"Objects":[{"StartTime":196454.0,"EndTime":196454.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":196512.0,"Objects":[{"StartTime":196512.0,"EndTime":196512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":196570.0,"Objects":[{"StartTime":196570.0,"EndTime":196570.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":196627.0,"Objects":[{"StartTime":196627.0,"EndTime":196627.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":196685.0,"Objects":[{"StartTime":196685.0,"EndTime":196685.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":196743.0,"Objects":[{"StartTime":196743.0,"EndTime":196743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":196801.0,"Objects":[{"StartTime":196801.0,"EndTime":196801.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":196858.0,"Objects":[{"StartTime":196858.0,"EndTime":196858.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":196916.0,"Objects":[{"StartTime":196916.0,"EndTime":196916.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":196974.0,"Objects":[{"StartTime":196974.0,"EndTime":196974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":197031.0,"Objects":[{"StartTime":197031.0,"EndTime":197031.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":197089.0,"Objects":[{"StartTime":197089.0,"EndTime":197089.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":197147.0,"Objects":[{"StartTime":197147.0,"EndTime":197147.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":197204.0,"Objects":[{"StartTime":197204.0,"EndTime":197204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":197262.0,"Objects":[{"StartTime":197262.0,"EndTime":197262.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":197320.0,"Objects":[{"StartTime":197320.0,"EndTime":197320.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":197377.0,"Objects":[{"StartTime":197377.0,"EndTime":197377.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":197435.0,"Objects":[{"StartTime":197435.0,"EndTime":197435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":197493.0,"Objects":[{"StartTime":197493.0,"EndTime":197493.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":197551.0,"Objects":[{"StartTime":197551.0,"EndTime":197551.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":197608.0,"Objects":[{"StartTime":197608.0,"EndTime":197608.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":197666.0,"Objects":[{"StartTime":197666.0,"EndTime":197666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":197896.0,"EndTime":197896.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":198012.0,"Objects":[{"StartTime":198012.0,"EndTime":198012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":198127.0,"Objects":[{"StartTime":198127.0,"EndTime":198127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":198357.0,"EndTime":198357.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":198473.0,"Objects":[{"StartTime":198473.0,"EndTime":198473.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":198589.0,"Objects":[{"StartTime":198589.0,"EndTime":198589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":198704.0,"EndTime":198704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":198820.0,"Objects":[{"StartTime":198820.0,"EndTime":198820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":199051.0,"Objects":[{"StartTime":199051.0,"EndTime":199051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":199166.0,"EndTime":199166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":199281.0,"Objects":[{"StartTime":199281.0,"EndTime":199281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":199396.0,"Objects":[{"StartTime":199396.0,"EndTime":199396.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":199512.0,"Objects":[{"StartTime":199512.0,"EndTime":199512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":199742.0,"EndTime":199742.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":199858.0,"Objects":[{"StartTime":199858.0,"EndTime":199858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":199974.0,"Objects":[{"StartTime":199974.0,"EndTime":199974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":200089.0,"EndTime":200089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":200204.0,"Objects":[{"StartTime":200204.0,"EndTime":200204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":200319.0,"EndTime":200319.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":200435.0,"Objects":[{"StartTime":200435.0,"EndTime":200435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":200551.0,"Objects":[{"StartTime":200551.0,"EndTime":200551.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":200666.0,"Objects":[{"StartTime":200666.0,"EndTime":200666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":200781.0,"EndTime":200781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":200897.0,"Objects":[{"StartTime":200897.0,"EndTime":200897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":201012.0,"EndTime":201012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":201127.0,"Objects":[{"StartTime":201127.0,"EndTime":201127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":201242.0,"EndTime":201242.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":201358.0,"Objects":[{"StartTime":201358.0,"EndTime":201358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":201588.0,"EndTime":201588.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":201704.0,"Objects":[{"StartTime":201704.0,"EndTime":201704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":201820.0,"Objects":[{"StartTime":201820.0,"EndTime":201820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":201935.0,"EndTime":201935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":202051.0,"Objects":[{"StartTime":202051.0,"EndTime":202051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":202166.0,"EndTime":202166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":202281.0,"Objects":[{"StartTime":202281.0,"EndTime":202281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":202397.0,"Objects":[{"StartTime":202397.0,"EndTime":202397.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":202512.0,"Objects":[{"StartTime":202512.0,"EndTime":202512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":202627.0,"EndTime":202627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":202743.0,"Objects":[{"StartTime":202743.0,"EndTime":202743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":202973.0,"EndTime":202973.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":203089.0,"Objects":[{"StartTime":203089.0,"EndTime":203089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":203204.0,"Objects":[{"StartTime":203204.0,"EndTime":203204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":203319.0,"EndTime":203319.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":203435.0,"Objects":[{"StartTime":203435.0,"EndTime":203435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":203550.0,"EndTime":203550.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":203666.0,"Objects":[{"StartTime":203666.0,"EndTime":203666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":203896.0,"EndTime":203896.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":204012.0,"Objects":[{"StartTime":204012.0,"EndTime":204012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":204127.0,"Objects":[{"StartTime":204127.0,"EndTime":204127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":204242.0,"EndTime":204242.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":204358.0,"Objects":[{"StartTime":204358.0,"EndTime":204358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":204474.0,"Objects":[{"StartTime":204474.0,"EndTime":204474.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":204589.0,"Objects":[{"StartTime":204589.0,"EndTime":204589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":204704.0,"EndTime":204704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":204820.0,"Objects":[{"StartTime":204820.0,"EndTime":204820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":204935.0,"Objects":[{"StartTime":204935.0,"EndTime":204935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":205051.0,"Objects":[{"StartTime":205051.0,"EndTime":205051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":205281.0,"EndTime":205281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":205397.0,"Objects":[{"StartTime":205397.0,"EndTime":205397.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":205512.0,"Objects":[{"StartTime":205512.0,"EndTime":205512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":205627.0,"EndTime":205627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":205743.0,"Objects":[{"StartTime":205743.0,"EndTime":205743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":205858.0,"EndTime":205858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":205974.0,"Objects":[{"StartTime":205974.0,"EndTime":205974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":206089.0,"EndTime":206089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":206204.0,"Objects":[{"StartTime":206204.0,"EndTime":206204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":206320.0,"Objects":[{"StartTime":206320.0,"EndTime":206320.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":206435.0,"Objects":[{"StartTime":206435.0,"EndTime":206435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":206665.0,"EndTime":206665.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":206781.0,"Objects":[{"StartTime":206781.0,"EndTime":206781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":206897.0,"Objects":[{"StartTime":206897.0,"EndTime":206897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":207127.0,"EndTime":207127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":207358.0,"Objects":[{"StartTime":207358.0,"EndTime":207358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":207473.0,"EndTime":207473.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":207589.0,"Objects":[{"StartTime":207589.0,"EndTime":207589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":207704.0,"EndTime":207704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":207820.0,"Objects":[{"StartTime":207820.0,"EndTime":207820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":208050.0,"EndTime":208050.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":208166.0,"Objects":[{"StartTime":208166.0,"EndTime":208166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":208281.0,"Objects":[{"StartTime":208281.0,"EndTime":208281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":208396.0,"EndTime":208396.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":208512.0,"Objects":[{"StartTime":208512.0,"EndTime":208512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":208627.0,"EndTime":208627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":208743.0,"Objects":[{"StartTime":208743.0,"EndTime":209204.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":209320.0,"Objects":[{"StartTime":209320.0,"EndTime":209320.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":209435.0,"Objects":[{"StartTime":209435.0,"EndTime":209435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":209550.0,"EndTime":209550.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":209666.0,"Objects":[{"StartTime":209666.0,"EndTime":209666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":209781.0,"EndTime":209781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":209897.0,"Objects":[{"StartTime":209897.0,"EndTime":209897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":210012.0,"EndTime":210012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":210127.0,"Objects":[{"StartTime":210127.0,"EndTime":210127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":210243.0,"Objects":[{"StartTime":210243.0,"EndTime":210243.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":210358.0,"Objects":[{"StartTime":210358.0,"EndTime":210358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":210589.0,"Objects":[{"StartTime":210589.0,"EndTime":210589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":210704.0,"EndTime":210704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":210820.0,"Objects":[{"StartTime":210820.0,"EndTime":210820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":210935.0,"Objects":[{"StartTime":210935.0,"EndTime":210935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":211051.0,"Objects":[{"StartTime":211051.0,"EndTime":211051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":211166.0,"EndTime":211166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":211281.0,"Objects":[{"StartTime":211281.0,"EndTime":211281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":211397.0,"Objects":[{"StartTime":211397.0,"EndTime":211397.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":211512.0,"Objects":[{"StartTime":211512.0,"EndTime":211512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":211742.0,"EndTime":211742.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":211858.0,"Objects":[{"StartTime":211858.0,"EndTime":211858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":211974.0,"Objects":[{"StartTime":211974.0,"EndTime":211974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":212089.0,"Objects":[{"StartTime":212089.0,"EndTime":212089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":212204.0,"Objects":[{"StartTime":212204.0,"EndTime":212204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":212320.0,"Objects":[{"StartTime":212320.0,"EndTime":212320.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":212435.0,"Objects":[{"StartTime":212435.0,"EndTime":212435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":212665.0,"EndTime":212665.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":212781.0,"Objects":[{"StartTime":212781.0,"EndTime":212781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":212897.0,"Objects":[{"StartTime":212897.0,"EndTime":212897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":213127.0,"EndTime":213127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":213243.0,"Objects":[{"StartTime":213243.0,"EndTime":213243.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":213358.0,"Objects":[{"StartTime":213358.0,"EndTime":213358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":213473.0,"EndTime":213473.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":213589.0,"Objects":[{"StartTime":213589.0,"EndTime":213589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":213820.0,"Objects":[{"StartTime":213820.0,"EndTime":213820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":213935.0,"EndTime":213935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":214051.0,"Objects":[{"StartTime":214051.0,"EndTime":214051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":214166.0,"Objects":[{"StartTime":214166.0,"EndTime":214166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":214281.0,"Objects":[{"StartTime":214281.0,"EndTime":214281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":214396.0,"EndTime":214396.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":214512.0,"Objects":[{"StartTime":214512.0,"EndTime":214512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":214628.0,"Objects":[{"StartTime":214628.0,"EndTime":214628.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":214743.0,"Objects":[{"StartTime":214743.0,"EndTime":214743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":214858.0,"EndTime":214858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":214974.0,"Objects":[{"StartTime":214974.0,"EndTime":214974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":215089.0,"EndTime":215089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":215204.0,"Objects":[{"StartTime":215204.0,"EndTime":215204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":215320.0,"Objects":[{"StartTime":215320.0,"EndTime":215320.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":215435.0,"Objects":[{"StartTime":215435.0,"EndTime":215435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":215550.0,"EndTime":215550.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":215666.0,"Objects":[{"StartTime":215666.0,"EndTime":215666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":215896.0,"EndTime":215896.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":216012.0,"Objects":[{"StartTime":216012.0,"EndTime":216012.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":216070.0,"Objects":[{"StartTime":216070.0,"EndTime":216070.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":216127.0,"Objects":[{"StartTime":216127.0,"EndTime":216127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":216242.0,"EndTime":216242.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":216358.0,"Objects":[{"StartTime":216358.0,"EndTime":216358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":216473.0,"EndTime":216473.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":216589.0,"Objects":[{"StartTime":216589.0,"EndTime":216589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":216819.0,"EndTime":216819.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":216935.0,"Objects":[{"StartTime":216935.0,"EndTime":216935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":217051.0,"Objects":[{"StartTime":217051.0,"EndTime":217051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":217166.0,"EndTime":217166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":217281.0,"Objects":[{"StartTime":217281.0,"EndTime":217281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":217511.0,"EndTime":217511.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":217627.0,"Objects":[{"StartTime":217627.0,"EndTime":217627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":217742.0,"EndTime":217742.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":217858.0,"Objects":[{"StartTime":217858.0,"EndTime":217858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":217974.0,"Objects":[{"StartTime":217974.0,"EndTime":217974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":218089.0,"EndTime":218089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":218204.0,"Objects":[{"StartTime":218204.0,"EndTime":218204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":218319.0,"EndTime":218319.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":218435.0,"Objects":[{"StartTime":218435.0,"EndTime":218435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":218550.0,"EndTime":218550.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":218666.0,"Objects":[{"StartTime":218666.0,"EndTime":218666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":218781.0,"EndTime":218781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":218897.0,"Objects":[{"StartTime":218897.0,"EndTime":218897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":219070.0,"EndTime":219070.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":219127.0,"Objects":[{"StartTime":219127.0,"EndTime":219127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":219300.0,"EndTime":219300.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":219358.0,"Objects":[{"StartTime":219358.0,"EndTime":219358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":219531.0,"EndTime":219531.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":219589.0,"Objects":[{"StartTime":219589.0,"EndTime":219589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":219704.0,"EndTime":219704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":219820.0,"Objects":[{"StartTime":219820.0,"EndTime":219820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":220050.0,"EndTime":220050.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":220166.0,"Objects":[{"StartTime":220166.0,"EndTime":220166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":220281.0,"Objects":[{"StartTime":220281.0,"EndTime":220281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":220396.0,"EndTime":220396.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":220512.0,"Objects":[{"StartTime":220512.0,"EndTime":220512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":220627.0,"EndTime":220627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":220743.0,"Objects":[{"StartTime":220743.0,"EndTime":220743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":220858.0,"EndTime":220858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":220974.0,"Objects":[{"StartTime":220974.0,"EndTime":220974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":221089.0,"Objects":[{"StartTime":221089.0,"EndTime":221089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":221204.0,"Objects":[{"StartTime":221204.0,"EndTime":221204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":221434.0,"EndTime":221434.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":221551.0,"Objects":[{"StartTime":221551.0,"EndTime":221551.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":221608.0,"Objects":[{"StartTime":221608.0,"EndTime":221608.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":221666.0,"Objects":[{"StartTime":221666.0,"EndTime":221666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":221781.0,"EndTime":221781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":221897.0,"Objects":[{"StartTime":221897.0,"EndTime":221897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":222127.0,"EndTime":222127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":222243.0,"Objects":[{"StartTime":222243.0,"EndTime":222243.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":222358.0,"Objects":[{"StartTime":222358.0,"EndTime":222358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":222473.0,"EndTime":222473.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":222589.0,"Objects":[{"StartTime":222589.0,"EndTime":222589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":222704.0,"EndTime":222704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":222820.0,"Objects":[{"StartTime":222820.0,"EndTime":222820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":222935.0,"EndTime":222935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":223051.0,"Objects":[{"StartTime":223051.0,"EndTime":223051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":223166.0,"EndTime":223166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":223281.0,"Objects":[{"StartTime":223281.0,"EndTime":223281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":223397.0,"Objects":[{"StartTime":223397.0,"EndTime":223397.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":223512.0,"Objects":[{"StartTime":223512.0,"EndTime":223512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":223742.0,"EndTime":223742.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":223858.0,"Objects":[{"StartTime":223858.0,"EndTime":223858.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":224088.0,"EndTime":224088.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":224204.0,"Objects":[{"StartTime":224204.0,"EndTime":224204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":224319.0,"EndTime":224319.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":224435.0,"Objects":[{"StartTime":224435.0,"EndTime":224435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":224551.0,"Objects":[{"StartTime":224551.0,"EndTime":224551.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":224666.0,"Objects":[{"StartTime":224666.0,"EndTime":224666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":224781.0,"EndTime":224781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":224897.0,"Objects":[{"StartTime":224897.0,"EndTime":224897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":225012.0,"Objects":[{"StartTime":225012.0,"EndTime":225012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":225127.0,"Objects":[{"StartTime":225127.0,"EndTime":225127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":225242.0,"EndTime":225242.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":225358.0,"Objects":[{"StartTime":225358.0,"EndTime":225358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":225588.0,"EndTime":225588.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":225704.0,"Objects":[{"StartTime":225704.0,"EndTime":225704.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":225934.0,"EndTime":225934.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":226051.0,"Objects":[{"StartTime":226051.0,"EndTime":226051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":226166.0,"EndTime":226166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":226281.0,"Objects":[{"StartTime":226281.0,"EndTime":226281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":226512.0,"Objects":[{"StartTime":226512.0,"EndTime":226512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":226627.0,"Objects":[{"StartTime":226627.0,"EndTime":226627.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":226743.0,"Objects":[{"StartTime":226743.0,"EndTime":226743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":226858.0,"Objects":[{"StartTime":226858.0,"EndTime":226858.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":226974.0,"Objects":[{"StartTime":226974.0,"EndTime":226974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":227089.0,"Objects":[{"StartTime":227089.0,"EndTime":227089.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":227204.0,"Objects":[{"StartTime":227204.0,"EndTime":227204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":227665.0,"EndTime":227665.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":228588.0,"Objects":[{"StartTime":228588.0,"EndTime":228588.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":229049.0,"EndTime":229049.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":229280.0,"Objects":[{"StartTime":229280.0,"EndTime":229280.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":229741.0,"EndTime":229741.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":229973.0,"Objects":[{"StartTime":229973.0,"EndTime":229973.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":230204.0,"Objects":[{"StartTime":230204.0,"EndTime":230204.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":230434.0,"Objects":[{"StartTime":230434.0,"EndTime":230434.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":230665.0,"Objects":[{"StartTime":230665.0,"EndTime":230665.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":230896.0,"Objects":[{"StartTime":230896.0,"EndTime":230896.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":231357.0,"EndTime":231357.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":232280.0,"Objects":[{"StartTime":232280.0,"EndTime":232280.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":232741.0,"EndTime":232741.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":232973.0,"Objects":[{"StartTime":232973.0,"EndTime":232973.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":233434.0,"EndTime":233434.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":233665.0,"Objects":[{"StartTime":233665.0,"EndTime":233665.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":233896.0,"Objects":[{"StartTime":233896.0,"EndTime":233896.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":234127.0,"Objects":[{"StartTime":234127.0,"EndTime":234127.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":234357.0,"Objects":[{"StartTime":234357.0,"EndTime":234357.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":234588.0,"Objects":[{"StartTime":234588.0,"EndTime":234588.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":235049.0,"EndTime":235049.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":235973.0,"Objects":[{"StartTime":235973.0,"EndTime":235973.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":236434.0,"EndTime":236434.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":236665.0,"Objects":[{"StartTime":236665.0,"EndTime":236665.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":237126.0,"EndTime":237126.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":237357.0,"Objects":[{"StartTime":237357.0,"EndTime":237357.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":237587.0,"EndTime":237587.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":237819.0,"Objects":[{"StartTime":237819.0,"EndTime":237819.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":238050.0,"Objects":[{"StartTime":238050.0,"EndTime":238050.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":238280.0,"Objects":[{"StartTime":238280.0,"EndTime":238280.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":238741.0,"EndTime":238741.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":239204.0,"Objects":[{"StartTime":239204.0,"EndTime":239204.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":239434.0,"Objects":[{"StartTime":239434.0,"EndTime":239434.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":239665.0,"Objects":[{"StartTime":239665.0,"EndTime":239665.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":239896.0,"Objects":[{"StartTime":239896.0,"EndTime":239896.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":240127.0,"Objects":[{"StartTime":240127.0,"EndTime":240127.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":240357.0,"Objects":[{"StartTime":240357.0,"EndTime":240357.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":240588.0,"Objects":[{"StartTime":240588.0,"EndTime":240588.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":240819.0,"Objects":[{"StartTime":240819.0,"EndTime":240819.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":241050.0,"Objects":[{"StartTime":241050.0,"EndTime":241050.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":241280.0,"Objects":[{"StartTime":241280.0,"EndTime":241280.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":241511.0,"Objects":[{"StartTime":241511.0,"EndTime":241511.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":241742.0,"Objects":[{"StartTime":241742.0,"EndTime":241742.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":241973.0,"Objects":[{"StartTime":241973.0,"EndTime":241973.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":242434.0,"EndTime":242434.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":242665.0,"Objects":[{"StartTime":242665.0,"EndTime":242665.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":242895.0,"EndTime":242895.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":243127.0,"Objects":[{"StartTime":243127.0,"EndTime":243127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":243357.0,"Objects":[{"StartTime":243357.0,"EndTime":243357.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":243588.0,"Objects":[{"StartTime":243588.0,"EndTime":243588.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":243819.0,"Objects":[{"StartTime":243819.0,"EndTime":243819.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":244050.0,"Objects":[{"StartTime":244050.0,"EndTime":244050.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":244280.0,"EndTime":244280.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":244511.0,"Objects":[{"StartTime":244511.0,"EndTime":244511.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":244972.0,"EndTime":244972.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":245204.0,"Objects":[{"StartTime":245204.0,"EndTime":245204.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":245434.0,"Objects":[{"StartTime":245434.0,"EndTime":245434.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":245895.0,"EndTime":245895.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":246357.0,"Objects":[{"StartTime":246357.0,"EndTime":246357.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":246588.0,"Objects":[{"StartTime":246588.0,"EndTime":246588.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":246819.0,"Objects":[{"StartTime":246819.0,"EndTime":246819.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":247049.0,"EndTime":247049.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":247280.0,"Objects":[{"StartTime":247280.0,"EndTime":247280.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":247511.0,"Objects":[{"StartTime":247511.0,"EndTime":247511.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":247741.0,"EndTime":247741.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":247973.0,"Objects":[{"StartTime":247973.0,"EndTime":247973.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":248203.0,"EndTime":248203.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":248434.0,"EndTime":248434.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":248665.0,"Objects":[{"StartTime":248665.0,"EndTime":248665.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":248896.0,"Objects":[{"StartTime":248896.0,"EndTime":248896.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":249127.0,"Objects":[{"StartTime":249127.0,"EndTime":249127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":249357.0,"EndTime":249357.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":249588.0,"Objects":[{"StartTime":249588.0,"EndTime":249588.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":249819.0,"Objects":[{"StartTime":249819.0,"EndTime":249819.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":250050.0,"Objects":[{"StartTime":250050.0,"EndTime":250050.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":250280.0,"EndTime":250280.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":250511.0,"Objects":[{"StartTime":250511.0,"EndTime":250511.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":250742.0,"Objects":[{"StartTime":250742.0,"EndTime":250742.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":251203.0,"EndTime":251203.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":251550.0,"Objects":[{"StartTime":251550.0,"EndTime":251550.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":251898.0,"EndTime":251898.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":252247.0,"Objects":[{"StartTime":252247.0,"EndTime":252247.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":252702.0,"Objects":[{"StartTime":252702.0,"EndTime":252702.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":253059.0,"EndTime":253059.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":253506.0,"Objects":[{"StartTime":253506.0,"EndTime":253506.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":254095.0,"Objects":[{"StartTime":254095.0,"EndTime":254095.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":254661.0,"EndTime":254661.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":255580.0,"Objects":[{"StartTime":255580.0,"EndTime":255580.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":256480.0,"Objects":[{"StartTime":256480.0,"EndTime":256480.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":257588.0,"EndTime":257588.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":257747.0,"Objects":[{"StartTime":257747.0,"EndTime":257747.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":258697.0,"EndTime":258697.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":258892.0,"Objects":[{"StartTime":258892.0,"EndTime":258892.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":261023.0,"EndTime":261023.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":263154.0,"EndTime":263154.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":263197.0,"Objects":[{"StartTime":263197.0,"EndTime":263197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":263427.0,"EndTime":263427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":263543.0,"Objects":[{"StartTime":263543.0,"EndTime":263543.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":263658.0,"Objects":[{"StartTime":263658.0,"EndTime":263658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":263888.0,"EndTime":263888.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":264004.0,"Objects":[{"StartTime":264004.0,"EndTime":264004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":264120.0,"Objects":[{"StartTime":264120.0,"EndTime":264120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":264235.0,"EndTime":264235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":264350.0,"Objects":[{"StartTime":264350.0,"EndTime":264350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":264465.0,"EndTime":264465.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":264581.0,"Objects":[{"StartTime":264581.0,"EndTime":264581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":264697.0,"Objects":[{"StartTime":264697.0,"EndTime":264697.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":264812.0,"Objects":[{"StartTime":264812.0,"EndTime":264812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":264927.0,"Objects":[{"StartTime":264927.0,"EndTime":264927.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":265043.0,"Objects":[{"StartTime":265043.0,"EndTime":265043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":265273.0,"EndTime":265273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":265389.0,"Objects":[{"StartTime":265389.0,"EndTime":265389.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":265504.0,"Objects":[{"StartTime":265504.0,"EndTime":265504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":265734.0,"EndTime":265734.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":265850.0,"Objects":[{"StartTime":265850.0,"EndTime":265850.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":265966.0,"Objects":[{"StartTime":265966.0,"EndTime":265966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":266081.0,"EndTime":266081.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":266197.0,"Objects":[{"StartTime":266197.0,"EndTime":266197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":266312.0,"EndTime":266312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":266427.0,"Objects":[{"StartTime":266427.0,"EndTime":266427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":266543.0,"Objects":[{"StartTime":266543.0,"EndTime":266543.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":266658.0,"Objects":[{"StartTime":266658.0,"EndTime":266658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":266773.0,"Objects":[{"StartTime":266773.0,"EndTime":266773.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":266889.0,"Objects":[{"StartTime":266889.0,"EndTime":266889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":267119.0,"EndTime":267119.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":267235.0,"Objects":[{"StartTime":267235.0,"EndTime":267235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":267350.0,"Objects":[{"StartTime":267350.0,"EndTime":267350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":267465.0,"EndTime":267465.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":267581.0,"Objects":[{"StartTime":267581.0,"EndTime":267581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":267697.0,"Objects":[{"StartTime":267697.0,"EndTime":267697.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":267812.0,"Objects":[{"StartTime":267812.0,"EndTime":267812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":267927.0,"EndTime":267927.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":268043.0,"Objects":[{"StartTime":268043.0,"EndTime":268043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":268158.0,"EndTime":268158.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":268273.0,"Objects":[{"StartTime":268273.0,"EndTime":268273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":268389.0,"Objects":[{"StartTime":268389.0,"EndTime":268389.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":268504.0,"Objects":[{"StartTime":268504.0,"EndTime":268504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":268620.0,"Objects":[{"StartTime":268620.0,"EndTime":268620.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":268735.0,"Objects":[{"StartTime":268735.0,"EndTime":268735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":268965.0,"EndTime":268965.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":269081.0,"Objects":[{"StartTime":269081.0,"EndTime":269081.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":269197.0,"Objects":[{"StartTime":269197.0,"EndTime":269197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":269312.0,"EndTime":269312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":269427.0,"Objects":[{"StartTime":269427.0,"EndTime":269427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":269543.0,"Objects":[{"StartTime":269543.0,"EndTime":269543.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":269658.0,"Objects":[{"StartTime":269658.0,"EndTime":269658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":269773.0,"EndTime":269773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":269889.0,"Objects":[{"StartTime":269889.0,"EndTime":269889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":270004.0,"EndTime":270004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":270120.0,"Objects":[{"StartTime":270120.0,"EndTime":270120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":270235.0,"Objects":[{"StartTime":270235.0,"EndTime":270235.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":270350.0,"Objects":[{"StartTime":270350.0,"EndTime":270350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":270466.0,"Objects":[{"StartTime":270466.0,"EndTime":270466.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":270523.0,"Objects":[{"StartTime":270523.0,"EndTime":270523.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":270581.0,"Objects":[{"StartTime":270581.0,"EndTime":270581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":270638.0,"EndTime":270638.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":270697.0,"Objects":[{"StartTime":270697.0,"EndTime":270697.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":270754.0,"EndTime":270754.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":270812.0,"Objects":[{"StartTime":270812.0,"EndTime":270812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":270869.0,"EndTime":270869.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":270927.0,"Objects":[{"StartTime":270927.0,"EndTime":270927.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":270984.0,"EndTime":270984.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":271042.0,"EndTime":271042.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":271158.0,"Objects":[{"StartTime":271158.0,"EndTime":271158.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":271215.0,"EndTime":271215.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":271273.0,"Objects":[{"StartTime":271273.0,"EndTime":271273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":271331.0,"Objects":[{"StartTime":271331.0,"EndTime":271331.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":271389.0,"Objects":[{"StartTime":271389.0,"EndTime":271389.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":271447.0,"Objects":[{"StartTime":271447.0,"EndTime":271447.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":271504.0,"Objects":[{"StartTime":271504.0,"EndTime":271504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":271619.0,"EndTime":271619.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":271735.0,"Objects":[{"StartTime":271735.0,"EndTime":271735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":271793.0,"Objects":[{"StartTime":271793.0,"EndTime":271793.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":271850.0,"Objects":[{"StartTime":271850.0,"EndTime":271850.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":271908.0,"Objects":[{"StartTime":271908.0,"EndTime":271908.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":271966.0,"Objects":[{"StartTime":271966.0,"EndTime":271966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":272023.0,"EndTime":272023.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":272081.0,"EndTime":272081.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":272139.0,"EndTime":272139.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":272197.0,"Objects":[{"StartTime":272197.0,"EndTime":272197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":272312.0,"EndTime":272312.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":272370.0,"Objects":[{"StartTime":272370.0,"EndTime":272370.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":272427.0,"Objects":[{"StartTime":272427.0,"EndTime":272427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":272485.0,"Objects":[{"StartTime":272485.0,"EndTime":272485.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":272543.0,"Objects":[{"StartTime":272543.0,"EndTime":272543.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":272600.0,"Objects":[{"StartTime":272600.0,"EndTime":272600.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":272658.0,"Objects":[{"StartTime":272658.0,"EndTime":272658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":272716.0,"Objects":[{"StartTime":272716.0,"EndTime":272716.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":272773.0,"Objects":[{"StartTime":272773.0,"EndTime":272773.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":272830.0,"EndTime":272830.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":272889.0,"Objects":[{"StartTime":272889.0,"EndTime":272889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":272947.0,"Objects":[{"StartTime":272947.0,"EndTime":272947.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":273004.0,"Objects":[{"StartTime":273004.0,"EndTime":273004.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":273062.0,"Objects":[{"StartTime":273062.0,"EndTime":273062.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":273120.0,"Objects":[{"StartTime":273120.0,"EndTime":273120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":273177.0,"Objects":[{"StartTime":273177.0,"EndTime":273177.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":273235.0,"Objects":[{"StartTime":273235.0,"EndTime":273235.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":273292.0,"EndTime":273292.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":273350.0,"Objects":[{"StartTime":273350.0,"EndTime":273350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":273408.0,"Objects":[{"StartTime":273408.0,"EndTime":273408.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":273466.0,"Objects":[{"StartTime":273466.0,"EndTime":273466.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":273523.0,"Objects":[{"StartTime":273523.0,"EndTime":273523.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":273581.0,"Objects":[{"StartTime":273581.0,"EndTime":273581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":273639.0,"Objects":[{"StartTime":273639.0,"EndTime":273639.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":273697.0,"Objects":[{"StartTime":273697.0,"EndTime":273697.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":273754.0,"Objects":[{"StartTime":273754.0,"EndTime":273754.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":273812.0,"Objects":[{"StartTime":273812.0,"EndTime":273812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":273927.0,"EndTime":273927.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":273985.0,"Objects":[{"StartTime":273985.0,"EndTime":273985.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":274043.0,"Objects":[{"StartTime":274043.0,"EndTime":274043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":274158.0,"EndTime":274158.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":274273.0,"Objects":[{"StartTime":274273.0,"EndTime":274273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":274388.0,"EndTime":274388.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":274447.0,"Objects":[{"StartTime":274447.0,"EndTime":274447.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":274504.0,"Objects":[{"StartTime":274504.0,"EndTime":274504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":274619.0,"EndTime":274619.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":274735.0,"Objects":[{"StartTime":274735.0,"EndTime":274735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":274850.0,"EndTime":274850.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":274908.0,"Objects":[{"StartTime":274908.0,"EndTime":274908.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":274966.0,"Objects":[{"StartTime":274966.0,"EndTime":274966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":275081.0,"EndTime":275081.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":275197.0,"Objects":[{"StartTime":275197.0,"EndTime":275197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":275312.0,"Objects":[{"StartTime":275312.0,"EndTime":275312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":275370.0,"Objects":[{"StartTime":275370.0,"EndTime":275370.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":275427.0,"Objects":[{"StartTime":275427.0,"EndTime":275427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":275542.0,"EndTime":275542.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":275658.0,"Objects":[{"StartTime":275658.0,"EndTime":275658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":275773.0,"EndTime":275773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":275889.0,"Objects":[{"StartTime":275889.0,"EndTime":275889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":276004.0,"EndTime":276004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":276062.0,"Objects":[{"StartTime":276062.0,"EndTime":276062.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":276120.0,"Objects":[{"StartTime":276120.0,"EndTime":276120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":276177.0,"EndTime":276177.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":276235.0,"EndTime":276235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":276292.0,"EndTime":276292.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":276350.0,"EndTime":276350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":276407.0,"EndTime":276407.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":276465.0,"EndTime":276465.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":276522.0,"EndTime":276522.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":276581.0,"Objects":[{"StartTime":276581.0,"EndTime":276581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":276638.0,"EndTime":276638.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":276696.0,"EndTime":276696.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":276753.0,"EndTime":276753.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":276811.0,"EndTime":276811.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":276868.0,"EndTime":276868.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":276926.0,"EndTime":276926.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":276983.0,"EndTime":276983.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":277043.0,"Objects":[{"StartTime":277043.0,"EndTime":277043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":277158.0,"Objects":[{"StartTime":277158.0,"EndTime":277158.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":277273.0,"Objects":[{"StartTime":277273.0,"EndTime":277273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":277389.0,"Objects":[{"StartTime":277389.0,"EndTime":277389.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":277504.0,"Objects":[{"StartTime":277504.0,"EndTime":277504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":277562.0,"Objects":[{"StartTime":277562.0,"EndTime":277562.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":277620.0,"Objects":[{"StartTime":277620.0,"EndTime":277620.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":277677.0,"Objects":[{"StartTime":277677.0,"EndTime":277677.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":277735.0,"Objects":[{"StartTime":277735.0,"EndTime":277735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":277793.0,"Objects":[{"StartTime":277793.0,"EndTime":277793.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":277850.0,"Objects":[{"StartTime":277850.0,"EndTime":277850.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":277908.0,"Objects":[{"StartTime":277908.0,"EndTime":277908.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":277966.0,"Objects":[{"StartTime":277966.0,"EndTime":277966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":278196.0,"EndTime":278196.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":278312.0,"Objects":[{"StartTime":278312.0,"EndTime":278312.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":278542.0,"EndTime":278542.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":278658.0,"Objects":[{"StartTime":278658.0,"EndTime":278658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":278773.0,"EndTime":278773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":278889.0,"Objects":[{"StartTime":278889.0,"EndTime":278889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":279004.0,"Objects":[{"StartTime":279004.0,"EndTime":279004.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":279234.0,"EndTime":279234.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":279350.0,"Objects":[{"StartTime":279350.0,"EndTime":279350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":279465.0,"EndTime":279465.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":279581.0,"Objects":[{"StartTime":279581.0,"EndTime":279581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":279696.0,"EndTime":279696.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":279812.0,"Objects":[{"StartTime":279812.0,"EndTime":279812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":280042.0,"EndTime":280042.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":280158.0,"Objects":[{"StartTime":280158.0,"EndTime":280158.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":280388.0,"EndTime":280388.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":280504.0,"Objects":[{"StartTime":280504.0,"EndTime":280504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":280619.0,"EndTime":280619.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":280735.0,"Objects":[{"StartTime":280735.0,"EndTime":280735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":280850.0,"Objects":[{"StartTime":280850.0,"EndTime":280850.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":281080.0,"EndTime":281080.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":281197.0,"Objects":[{"StartTime":281197.0,"EndTime":281197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":281312.0,"EndTime":281312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":281427.0,"Objects":[{"StartTime":281427.0,"EndTime":281427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":281542.0,"EndTime":281542.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":281600.0,"Objects":[{"StartTime":281600.0,"EndTime":281600.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":281658.0,"Objects":[{"StartTime":281658.0,"EndTime":281658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":281888.0,"EndTime":281888.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":282004.0,"Objects":[{"StartTime":282004.0,"EndTime":282004.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":282234.0,"EndTime":282234.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":282350.0,"Objects":[{"StartTime":282350.0,"EndTime":282350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":282465.0,"EndTime":282465.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":282581.0,"Objects":[{"StartTime":282581.0,"EndTime":282581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":282697.0,"Objects":[{"StartTime":282697.0,"EndTime":282697.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":282927.0,"EndTime":282927.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":283043.0,"Objects":[{"StartTime":283043.0,"EndTime":283043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":283158.0,"EndTime":283158.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":283273.0,"Objects":[{"StartTime":283273.0,"EndTime":283273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":283388.0,"EndTime":283388.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":283504.0,"Objects":[{"StartTime":283504.0,"EndTime":283504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":283734.0,"EndTime":283734.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":283850.0,"Objects":[{"StartTime":283850.0,"EndTime":283850.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":284080.0,"EndTime":284080.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":284197.0,"Objects":[{"StartTime":284197.0,"EndTime":284197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":284312.0,"EndTime":284312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":284427.0,"Objects":[{"StartTime":284427.0,"EndTime":284427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":284543.0,"Objects":[{"StartTime":284543.0,"EndTime":284543.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":284658.0,"Objects":[{"StartTime":284658.0,"EndTime":284658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":284773.0,"Objects":[{"StartTime":284773.0,"EndTime":284773.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":284889.0,"Objects":[{"StartTime":284889.0,"EndTime":284889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":285062.0,"EndTime":285062.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":285120.0,"Objects":[{"StartTime":285120.0,"EndTime":285120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":285293.0,"EndTime":285293.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":285350.0,"Objects":[{"StartTime":285350.0,"EndTime":285350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":285580.0,"EndTime":285580.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":285697.0,"Objects":[{"StartTime":285697.0,"EndTime":285697.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":285927.0,"EndTime":285927.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":286043.0,"Objects":[{"StartTime":286043.0,"EndTime":286043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":286158.0,"EndTime":286158.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":286273.0,"Objects":[{"StartTime":286273.0,"EndTime":286273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":286389.0,"Objects":[{"StartTime":286389.0,"EndTime":286389.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":286619.0,"EndTime":286619.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":286735.0,"Objects":[{"StartTime":286735.0,"EndTime":286735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":286850.0,"EndTime":286850.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":286966.0,"Objects":[{"StartTime":286966.0,"EndTime":286966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":287081.0,"EndTime":287081.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":287197.0,"Objects":[{"StartTime":287197.0,"EndTime":287197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":287427.0,"EndTime":287427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":287543.0,"Objects":[{"StartTime":287543.0,"EndTime":287543.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":287773.0,"EndTime":287773.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":287889.0,"Objects":[{"StartTime":287889.0,"EndTime":287889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":288004.0,"EndTime":288004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":288120.0,"Objects":[{"StartTime":288120.0,"EndTime":288120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":288235.0,"Objects":[{"StartTime":288235.0,"EndTime":288235.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":288465.0,"EndTime":288465.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":288581.0,"Objects":[{"StartTime":288581.0,"EndTime":288581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":288696.0,"EndTime":288696.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":288812.0,"Objects":[{"StartTime":288812.0,"EndTime":288812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":288927.0,"EndTime":288927.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":288985.0,"Objects":[{"StartTime":288985.0,"EndTime":288985.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":289043.0,"Objects":[{"StartTime":289043.0,"EndTime":289043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":289273.0,"EndTime":289273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":289389.0,"Objects":[{"StartTime":289389.0,"EndTime":289389.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":289619.0,"EndTime":289619.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":289735.0,"Objects":[{"StartTime":289735.0,"EndTime":289735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":289850.0,"EndTime":289850.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":289966.0,"Objects":[{"StartTime":289966.0,"EndTime":289966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":290081.0,"Objects":[{"StartTime":290081.0,"EndTime":290081.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":290311.0,"EndTime":290311.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":290427.0,"Objects":[{"StartTime":290427.0,"EndTime":290427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":290542.0,"EndTime":290542.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":290658.0,"Objects":[{"StartTime":290658.0,"EndTime":290658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":290773.0,"EndTime":290773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":290889.0,"Objects":[{"StartTime":290889.0,"EndTime":290889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":291119.0,"EndTime":291119.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":291235.0,"Objects":[{"StartTime":291235.0,"EndTime":291235.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":291465.0,"EndTime":291465.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":291581.0,"Objects":[{"StartTime":291581.0,"EndTime":291581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":291696.0,"EndTime":291696.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":291812.0,"Objects":[{"StartTime":291812.0,"EndTime":291812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":292042.0,"EndTime":292042.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":292158.0,"Objects":[{"StartTime":292158.0,"EndTime":292158.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":292273.0,"Objects":[{"StartTime":292273.0,"EndTime":292273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":292446.0,"EndTime":292446.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":292504.0,"Objects":[{"StartTime":292504.0,"EndTime":292504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":292619.0,"EndTime":292619.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":292735.0,"Objects":[{"StartTime":292735.0,"EndTime":292735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":292850.0,"EndTime":292850.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":292966.0,"Objects":[{"StartTime":292966.0,"EndTime":292966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":293196.0,"EndTime":293196.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":293312.0,"Objects":[{"StartTime":293312.0,"EndTime":293312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":293427.0,"Objects":[{"StartTime":293427.0,"EndTime":293427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":293542.0,"EndTime":293542.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":293658.0,"Objects":[{"StartTime":293658.0,"EndTime":293658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":293773.0,"Objects":[{"StartTime":293773.0,"EndTime":293773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":293889.0,"Objects":[{"StartTime":293889.0,"EndTime":293889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":294004.0,"EndTime":294004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":294120.0,"Objects":[{"StartTime":294120.0,"EndTime":294120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":294235.0,"Objects":[{"StartTime":294235.0,"EndTime":294235.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":294350.0,"Objects":[{"StartTime":294350.0,"EndTime":294350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":294466.0,"Objects":[{"StartTime":294466.0,"EndTime":294466.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":294581.0,"Objects":[{"StartTime":294581.0,"EndTime":294581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":294638.0,"EndTime":294638.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":294696.0,"EndTime":294696.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":294754.0,"EndTime":294754.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":294812.0,"Objects":[{"StartTime":294812.0,"EndTime":294812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":294869.0,"EndTime":294869.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":294927.0,"EndTime":294927.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":294985.0,"EndTime":294985.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":295043.0,"Objects":[{"StartTime":295043.0,"EndTime":295043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":295100.0,"Objects":[{"StartTime":295100.0,"EndTime":295100.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":295158.0,"Objects":[{"StartTime":295158.0,"EndTime":295158.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":295216.0,"Objects":[{"StartTime":295216.0,"EndTime":295216.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":295273.0,"Objects":[{"StartTime":295273.0,"EndTime":295273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":295331.0,"Objects":[{"StartTime":295331.0,"EndTime":295331.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":295389.0,"Objects":[{"StartTime":295389.0,"EndTime":295389.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":295447.0,"Objects":[{"StartTime":295447.0,"EndTime":295447.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":295504.0,"Objects":[{"StartTime":295504.0,"EndTime":295504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":295734.0,"EndTime":295734.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":295850.0,"Objects":[{"StartTime":295850.0,"EndTime":295850.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":295966.0,"Objects":[{"StartTime":295966.0,"EndTime":295966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":296196.0,"EndTime":296196.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":296312.0,"Objects":[{"StartTime":296312.0,"EndTime":296312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":296427.0,"Objects":[{"StartTime":296427.0,"EndTime":296427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":296542.0,"EndTime":296542.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":296658.0,"Objects":[{"StartTime":296658.0,"EndTime":296658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":296831.0,"EndTime":296831.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":296889.0,"Objects":[{"StartTime":296889.0,"EndTime":296889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":297004.0,"EndTime":297004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":297120.0,"Objects":[{"StartTime":297120.0,"EndTime":297120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":297235.0,"Objects":[{"StartTime":297235.0,"EndTime":297235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":297350.0,"Objects":[{"StartTime":297350.0,"EndTime":297350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":297580.0,"EndTime":297580.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":297697.0,"Objects":[{"StartTime":297697.0,"EndTime":297697.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":297927.0,"EndTime":297927.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":298043.0,"Objects":[{"StartTime":298043.0,"EndTime":298043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":298158.0,"EndTime":298158.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":298273.0,"Objects":[{"StartTime":298273.0,"EndTime":298273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":298503.0,"EndTime":298503.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":298620.0,"Objects":[{"StartTime":298620.0,"EndTime":298620.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":298735.0,"EndTime":298735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":298850.0,"Objects":[{"StartTime":298850.0,"EndTime":298850.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":298966.0,"Objects":[{"StartTime":298966.0,"EndTime":298966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":299081.0,"Objects":[{"StartTime":299081.0,"EndTime":299081.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":299197.0,"Objects":[{"StartTime":299197.0,"EndTime":299197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":299427.0,"EndTime":299427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":299543.0,"Objects":[{"StartTime":299543.0,"EndTime":299543.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":299658.0,"Objects":[{"StartTime":299658.0,"EndTime":299658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":299888.0,"EndTime":299888.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":300004.0,"Objects":[{"StartTime":300004.0,"EndTime":300004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":300120.0,"Objects":[{"StartTime":300120.0,"EndTime":300120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":300235.0,"EndTime":300235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":300350.0,"Objects":[{"StartTime":300350.0,"EndTime":300350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":300523.0,"EndTime":300523.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":300581.0,"Objects":[{"StartTime":300581.0,"EndTime":300581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":300696.0,"EndTime":300696.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":300812.0,"Objects":[{"StartTime":300812.0,"EndTime":300812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":300927.0,"EndTime":300927.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":301043.0,"Objects":[{"StartTime":301043.0,"EndTime":301043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":301273.0,"EndTime":301273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":301389.0,"Objects":[{"StartTime":301389.0,"EndTime":301389.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":301504.0,"Objects":[{"StartTime":301504.0,"EndTime":301504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":301734.0,"EndTime":301734.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":301850.0,"Objects":[{"StartTime":301850.0,"EndTime":301850.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":301966.0,"Objects":[{"StartTime":301966.0,"EndTime":301966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":302081.0,"EndTime":302081.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":302197.0,"Objects":[{"StartTime":302197.0,"EndTime":302197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":302312.0,"EndTime":302312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":302427.0,"Objects":[{"StartTime":302427.0,"EndTime":302427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":302657.0,"EndTime":302657.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":302773.0,"Objects":[{"StartTime":302773.0,"EndTime":302773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":302889.0,"Objects":[{"StartTime":302889.0,"EndTime":302889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":303004.0,"EndTime":303004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":303120.0,"Objects":[{"StartTime":303120.0,"EndTime":303120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":303235.0,"EndTime":303235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":303350.0,"Objects":[{"StartTime":303350.0,"EndTime":303350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":303580.0,"EndTime":303580.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":303697.0,"Objects":[{"StartTime":303697.0,"EndTime":303697.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":303812.0,"Objects":[{"StartTime":303812.0,"EndTime":303812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":304042.0,"EndTime":304042.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":304158.0,"Objects":[{"StartTime":304158.0,"EndTime":304158.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":304273.0,"Objects":[{"StartTime":304273.0,"EndTime":304273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":304388.0,"EndTime":304388.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":304504.0,"Objects":[{"StartTime":304504.0,"EndTime":304504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":304619.0,"EndTime":304619.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":304735.0,"Objects":[{"StartTime":304735.0,"EndTime":304735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":304965.0,"EndTime":304965.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":305081.0,"Objects":[{"StartTime":305081.0,"EndTime":305081.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":305311.0,"EndTime":305311.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":305427.0,"Objects":[{"StartTime":305427.0,"EndTime":305427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":305543.0,"Objects":[{"StartTime":305543.0,"EndTime":305543.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":305658.0,"Objects":[{"StartTime":305658.0,"EndTime":305658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":305888.0,"EndTime":305888.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":306004.0,"Objects":[{"StartTime":306004.0,"EndTime":306004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":306120.0,"Objects":[{"StartTime":306120.0,"EndTime":306120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":306235.0,"EndTime":306235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":306350.0,"Objects":[{"StartTime":306350.0,"EndTime":306350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":306465.0,"EndTime":306465.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":306581.0,"Objects":[{"StartTime":306581.0,"EndTime":306581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":306696.0,"EndTime":306696.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":306812.0,"Objects":[{"StartTime":306812.0,"EndTime":306812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":306927.0,"Objects":[{"StartTime":306927.0,"EndTime":306927.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":307043.0,"Objects":[{"StartTime":307043.0,"EndTime":307043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":307273.0,"EndTime":307273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":307389.0,"Objects":[{"StartTime":307389.0,"EndTime":307389.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":307504.0,"Objects":[{"StartTime":307504.0,"EndTime":307504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":307619.0,"EndTime":307619.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":307735.0,"Objects":[{"StartTime":307735.0,"EndTime":307735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":307850.0,"EndTime":307850.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":307966.0,"Objects":[{"StartTime":307966.0,"EndTime":307966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":308081.0,"EndTime":308081.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":308197.0,"Objects":[{"StartTime":308197.0,"EndTime":308197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":308312.0,"EndTime":308312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":308427.0,"Objects":[{"StartTime":308427.0,"EndTime":308427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":308543.0,"Objects":[{"StartTime":308543.0,"EndTime":308543.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":308658.0,"Objects":[{"StartTime":308658.0,"EndTime":308658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":308889.0,"Objects":[{"StartTime":308889.0,"EndTime":308889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":309004.0,"Objects":[{"StartTime":309004.0,"EndTime":309004.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":309062.0,"Objects":[{"StartTime":309062.0,"EndTime":309062.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":309120.0,"Objects":[{"StartTime":309120.0,"EndTime":309120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":309177.0,"Objects":[{"StartTime":309177.0,"EndTime":309177.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":309235.0,"Objects":[{"StartTime":309235.0,"EndTime":309235.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":309293.0,"Objects":[{"StartTime":309293.0,"EndTime":309293.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":309350.0,"Objects":[{"StartTime":309350.0,"EndTime":309350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":309408.0,"Objects":[{"StartTime":309408.0,"EndTime":309408.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":309466.0,"Objects":[{"StartTime":309466.0,"EndTime":309466.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":309523.0,"Objects":[{"StartTime":309523.0,"EndTime":309523.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":309581.0,"Objects":[{"StartTime":309581.0,"EndTime":309581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":309639.0,"Objects":[{"StartTime":309639.0,"EndTime":309639.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":309697.0,"Objects":[{"StartTime":309697.0,"EndTime":309697.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":309754.0,"Objects":[{"StartTime":309754.0,"EndTime":309754.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":309812.0,"Objects":[{"StartTime":309812.0,"EndTime":309812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":309869.0,"EndTime":309869.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":309927.0,"Objects":[{"StartTime":309927.0,"EndTime":309927.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":309984.0,"EndTime":309984.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":310043.0,"Objects":[{"StartTime":310043.0,"EndTime":310043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":310100.0,"EndTime":310100.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":310158.0,"Objects":[{"StartTime":310158.0,"EndTime":310158.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":310216.0,"Objects":[{"StartTime":310216.0,"EndTime":310216.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":310273.0,"Objects":[{"StartTime":310273.0,"EndTime":310273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":310503.0,"EndTime":310503.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":310620.0,"Objects":[{"StartTime":310620.0,"EndTime":310620.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":310735.0,"Objects":[{"StartTime":310735.0,"EndTime":310735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":310965.0,"EndTime":310965.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":311081.0,"Objects":[{"StartTime":311081.0,"EndTime":311081.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":311197.0,"Objects":[{"StartTime":311197.0,"EndTime":311197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":311312.0,"EndTime":311312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":311427.0,"Objects":[{"StartTime":311427.0,"EndTime":311427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":311658.0,"Objects":[{"StartTime":311658.0,"EndTime":311658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":311773.0,"EndTime":311773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":311889.0,"Objects":[{"StartTime":311889.0,"EndTime":311889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":312004.0,"Objects":[{"StartTime":312004.0,"EndTime":312004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":312120.0,"Objects":[{"StartTime":312120.0,"EndTime":312120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":312350.0,"EndTime":312350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":312466.0,"Objects":[{"StartTime":312466.0,"EndTime":312466.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":312581.0,"Objects":[{"StartTime":312581.0,"EndTime":312581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":312696.0,"EndTime":312696.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":312812.0,"Objects":[{"StartTime":312812.0,"EndTime":312812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":312927.0,"EndTime":312927.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":313043.0,"Objects":[{"StartTime":313043.0,"EndTime":313043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":313158.0,"Objects":[{"StartTime":313158.0,"EndTime":313158.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":313273.0,"Objects":[{"StartTime":313273.0,"EndTime":313273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":313388.0,"EndTime":313388.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":313504.0,"Objects":[{"StartTime":313504.0,"EndTime":313504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":313619.0,"EndTime":313619.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":313735.0,"Objects":[{"StartTime":313735.0,"EndTime":313735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":313850.0,"EndTime":313850.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":313966.0,"Objects":[{"StartTime":313966.0,"EndTime":313966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":314196.0,"EndTime":314196.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":314312.0,"Objects":[{"StartTime":314312.0,"EndTime":314312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":314427.0,"Objects":[{"StartTime":314427.0,"EndTime":314427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":314542.0,"EndTime":314542.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":314658.0,"Objects":[{"StartTime":314658.0,"EndTime":314658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":314773.0,"EndTime":314773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":314889.0,"Objects":[{"StartTime":314889.0,"EndTime":314889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":315062.0,"EndTime":315062.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":315120.0,"Objects":[{"StartTime":315120.0,"EndTime":315120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":315235.0,"EndTime":315235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":315350.0,"Objects":[{"StartTime":315350.0,"EndTime":315350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":315580.0,"EndTime":315580.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":315697.0,"Objects":[{"StartTime":315697.0,"EndTime":315697.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":315812.0,"Objects":[{"StartTime":315812.0,"EndTime":315812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":315927.0,"EndTime":315927.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":316043.0,"Objects":[{"StartTime":316043.0,"EndTime":316043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":316158.0,"EndTime":316158.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":316273.0,"Objects":[{"StartTime":316273.0,"EndTime":316273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":316388.0,"EndTime":316388.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":316504.0,"Objects":[{"StartTime":316504.0,"EndTime":316504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":316619.0,"EndTime":316619.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":316735.0,"Objects":[{"StartTime":316735.0,"EndTime":316735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":316965.0,"EndTime":316965.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":317081.0,"Objects":[{"StartTime":317081.0,"EndTime":317081.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":317197.0,"Objects":[{"StartTime":317197.0,"EndTime":317197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":317427.0,"EndTime":317427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":317543.0,"Objects":[{"StartTime":317543.0,"EndTime":317543.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":317600.0,"Objects":[{"StartTime":317600.0,"EndTime":317600.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":317658.0,"Objects":[{"StartTime":317658.0,"EndTime":317658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":317888.0,"EndTime":317888.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":318004.0,"Objects":[{"StartTime":318004.0,"EndTime":318004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":318120.0,"Objects":[{"StartTime":318120.0,"EndTime":318120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":318235.0,"EndTime":318235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":318350.0,"Objects":[{"StartTime":318350.0,"EndTime":318350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":318465.0,"EndTime":318465.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":318581.0,"Objects":[{"StartTime":318581.0,"EndTime":318581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":318811.0,"EndTime":318811.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":318927.0,"Objects":[{"StartTime":318927.0,"EndTime":318927.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":319043.0,"Objects":[{"StartTime":319043.0,"EndTime":319043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":319273.0,"EndTime":319273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":319389.0,"Objects":[{"StartTime":319389.0,"EndTime":319389.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":319504.0,"Objects":[{"StartTime":319504.0,"EndTime":319504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":319734.0,"EndTime":319734.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":319966.0,"Objects":[{"StartTime":319966.0,"EndTime":319966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":320081.0,"EndTime":320081.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":320197.0,"Objects":[{"StartTime":320197.0,"EndTime":320197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":320312.0,"EndTime":320312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":320427.0,"Objects":[{"StartTime":320427.0,"EndTime":320427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":320657.0,"EndTime":320657.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":320773.0,"Objects":[{"StartTime":320773.0,"EndTime":320773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":320889.0,"Objects":[{"StartTime":320889.0,"EndTime":320889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":321004.0,"EndTime":321004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":321120.0,"Objects":[{"StartTime":321120.0,"EndTime":321120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":321235.0,"EndTime":321235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":321350.0,"Objects":[{"StartTime":321350.0,"EndTime":321811.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":321927.0,"Objects":[{"StartTime":321927.0,"EndTime":321927.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":322043.0,"Objects":[{"StartTime":322043.0,"EndTime":322043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":322158.0,"EndTime":322158.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":322273.0,"Objects":[{"StartTime":322273.0,"EndTime":322273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":322388.0,"EndTime":322388.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":322504.0,"Objects":[{"StartTime":322504.0,"EndTime":322504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":322619.0,"EndTime":322619.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":322735.0,"Objects":[{"StartTime":322735.0,"EndTime":322735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":322850.0,"EndTime":322850.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":322966.0,"Objects":[{"StartTime":322966.0,"EndTime":322966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":323081.0,"Objects":[{"StartTime":323081.0,"EndTime":323081.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":323197.0,"Objects":[{"StartTime":323197.0,"EndTime":323197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":323312.0,"EndTime":323312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":323427.0,"Objects":[{"StartTime":323427.0,"EndTime":323427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":323542.0,"EndTime":323542.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":323658.0,"Objects":[{"StartTime":323658.0,"EndTime":323658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":323773.0,"EndTime":323773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":323888.0,"Objects":[{"StartTime":323888.0,"EndTime":323888.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":324003.0,"EndTime":324003.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":324120.0,"Objects":[{"StartTime":324120.0,"EndTime":324120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":324177.0,"Objects":[{"StartTime":324177.0,"EndTime":324177.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":324235.0,"Objects":[{"StartTime":324235.0,"EndTime":324235.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":324293.0,"Objects":[{"StartTime":324293.0,"EndTime":324293.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":324350.0,"Objects":[{"StartTime":324350.0,"EndTime":324350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":324408.0,"Objects":[{"StartTime":324408.0,"EndTime":324408.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":324466.0,"Objects":[{"StartTime":324466.0,"EndTime":324466.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":324523.0,"Objects":[{"StartTime":324523.0,"EndTime":324523.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":324581.0,"Objects":[{"StartTime":324581.0,"EndTime":324581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":324638.0,"Objects":[{"StartTime":324638.0,"EndTime":324638.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":324696.0,"Objects":[{"StartTime":324696.0,"EndTime":324696.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":324754.0,"Objects":[{"StartTime":324754.0,"EndTime":324754.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":324811.0,"Objects":[{"StartTime":324811.0,"EndTime":324811.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":324870.0,"Objects":[{"StartTime":324870.0,"EndTime":324870.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":324927.0,"Objects":[{"StartTime":324927.0,"EndTime":324927.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":324985.0,"Objects":[{"StartTime":324985.0,"EndTime":324985.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":325043.0,"Objects":[{"StartTime":325043.0,"EndTime":325043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":325273.0,"EndTime":325273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":325389.0,"Objects":[{"StartTime":325389.0,"EndTime":325389.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":325504.0,"Objects":[{"StartTime":325504.0,"EndTime":325504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":325734.0,"EndTime":325734.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":325850.0,"Objects":[{"StartTime":325850.0,"EndTime":325850.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":325966.0,"Objects":[{"StartTime":325966.0,"EndTime":325966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":326081.0,"EndTime":326081.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":326197.0,"Objects":[{"StartTime":326197.0,"EndTime":326197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":326427.0,"Objects":[{"StartTime":326427.0,"EndTime":326427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":326542.0,"EndTime":326542.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":326658.0,"Objects":[{"StartTime":326658.0,"EndTime":326658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":326773.0,"EndTime":326773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":326889.0,"Objects":[{"StartTime":326889.0,"EndTime":326889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":327119.0,"EndTime":327119.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":327235.0,"Objects":[{"StartTime":327235.0,"EndTime":327235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":327350.0,"Objects":[{"StartTime":327350.0,"EndTime":327350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":327465.0,"EndTime":327465.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":327581.0,"Objects":[{"StartTime":327581.0,"EndTime":327581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":327696.0,"EndTime":327696.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":327812.0,"Objects":[{"StartTime":327812.0,"EndTime":327812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":327927.0,"Objects":[{"StartTime":327927.0,"EndTime":327927.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":328043.0,"Objects":[{"StartTime":328043.0,"EndTime":328043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":328158.0,"EndTime":328158.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":328273.0,"Objects":[{"StartTime":328273.0,"EndTime":328273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":328388.0,"EndTime":328388.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":328504.0,"Objects":[{"StartTime":328504.0,"EndTime":328504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":328619.0,"EndTime":328619.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":328735.0,"Objects":[{"StartTime":328735.0,"EndTime":328735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":328965.0,"EndTime":328965.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":329081.0,"Objects":[{"StartTime":329081.0,"EndTime":329081.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":329197.0,"Objects":[{"StartTime":329197.0,"EndTime":329197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":329312.0,"EndTime":329312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":329427.0,"Objects":[{"StartTime":329427.0,"EndTime":329427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":329542.0,"EndTime":329542.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":329658.0,"Objects":[{"StartTime":329658.0,"EndTime":329658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":329831.0,"EndTime":329831.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":329889.0,"Objects":[{"StartTime":329889.0,"EndTime":329889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":330004.0,"EndTime":330004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":330120.0,"Objects":[{"StartTime":330120.0,"EndTime":330120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":330235.0,"EndTime":330235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":330350.0,"Objects":[{"StartTime":330350.0,"EndTime":330350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":330465.0,"EndTime":330465.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":330581.0,"Objects":[{"StartTime":330581.0,"EndTime":330581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":330754.0,"EndTime":330754.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":330812.0,"Objects":[{"StartTime":330812.0,"EndTime":330812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":330927.0,"EndTime":330927.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":331043.0,"Objects":[{"StartTime":331043.0,"EndTime":331043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":331158.0,"EndTime":331158.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":331273.0,"Objects":[{"StartTime":331273.0,"EndTime":331273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":331388.0,"EndTime":331388.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":331504.0,"Objects":[{"StartTime":331504.0,"EndTime":331504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":331677.0,"EndTime":331677.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":331735.0,"Objects":[{"StartTime":331735.0,"EndTime":331735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":331850.0,"EndTime":331850.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":331966.0,"Objects":[{"StartTime":331966.0,"EndTime":331966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":332081.0,"Objects":[{"StartTime":332081.0,"EndTime":332081.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":332138.0,"Objects":[{"StartTime":332138.0,"EndTime":332138.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":332196.0,"Objects":[{"StartTime":332196.0,"EndTime":332196.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":332254.0,"Objects":[{"StartTime":332254.0,"EndTime":332254.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":332312.0,"Objects":[{"StartTime":332312.0,"EndTime":332312.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":332370.0,"Objects":[{"StartTime":332370.0,"EndTime":332370.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":332427.0,"Objects":[{"StartTime":332427.0,"EndTime":332427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":332657.0,"EndTime":332657.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":332773.0,"Objects":[{"StartTime":332773.0,"EndTime":332773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":332889.0,"Objects":[{"StartTime":332889.0,"EndTime":332889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":333004.0,"EndTime":333004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":333120.0,"Objects":[{"StartTime":333120.0,"EndTime":333120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":333235.0,"EndTime":333235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":333350.0,"Objects":[{"StartTime":333350.0,"EndTime":333350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":333523.0,"EndTime":333523.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":333581.0,"Objects":[{"StartTime":333581.0,"EndTime":333581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":333696.0,"EndTime":333696.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":333812.0,"Objects":[{"StartTime":333812.0,"EndTime":333812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":333927.0,"EndTime":333927.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":334043.0,"Objects":[{"StartTime":334043.0,"EndTime":334043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":334158.0,"EndTime":334158.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":334273.0,"Objects":[{"StartTime":334273.0,"EndTime":334273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":334503.0,"EndTime":334503.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":334735.0,"Objects":[{"StartTime":334735.0,"EndTime":334735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":334850.0,"EndTime":334850.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":334966.0,"Objects":[{"StartTime":334966.0,"EndTime":334966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":335081.0,"EndTime":335081.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":335197.0,"Objects":[{"StartTime":335197.0,"EndTime":335197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":335427.0,"EndTime":335427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":335543.0,"Objects":[{"StartTime":335543.0,"EndTime":335543.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":335658.0,"Objects":[{"StartTime":335658.0,"EndTime":335658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":335888.0,"EndTime":335888.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":336004.0,"Objects":[{"StartTime":336004.0,"EndTime":336004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":336120.0,"Objects":[{"StartTime":336120.0,"EndTime":336120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":336293.0,"EndTime":336293.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":336350.0,"Objects":[{"StartTime":336350.0,"EndTime":336350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":336465.0,"EndTime":336465.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":336581.0,"Objects":[{"StartTime":336581.0,"EndTime":336581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":336696.0,"EndTime":336696.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":336812.0,"Objects":[{"StartTime":336812.0,"EndTime":336812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":336927.0,"EndTime":336927.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":337043.0,"Objects":[{"StartTime":337043.0,"EndTime":337043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":337100.0,"Objects":[{"StartTime":337100.0,"EndTime":337100.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":337158.0,"Objects":[{"StartTime":337158.0,"EndTime":337158.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":337216.0,"Objects":[{"StartTime":337216.0,"EndTime":337216.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":337273.0,"Objects":[{"StartTime":337273.0,"EndTime":337273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":337331.0,"Objects":[{"StartTime":337331.0,"EndTime":337331.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":337389.0,"Objects":[{"StartTime":337389.0,"EndTime":337389.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":337446.0,"Objects":[{"StartTime":337446.0,"EndTime":337446.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":337504.0,"Objects":[{"StartTime":337504.0,"EndTime":337504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":337561.0,"Objects":[{"StartTime":337561.0,"EndTime":337561.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":337619.0,"Objects":[{"StartTime":337619.0,"EndTime":337619.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":337677.0,"Objects":[{"StartTime":337677.0,"EndTime":337677.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":337734.0,"Objects":[{"StartTime":337734.0,"EndTime":337734.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":337793.0,"Objects":[{"StartTime":337793.0,"EndTime":337793.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":337851.0,"Objects":[{"StartTime":337851.0,"EndTime":337851.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":337909.0,"Objects":[{"StartTime":337909.0,"EndTime":337909.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":337966.0,"Objects":[{"StartTime":337966.0,"EndTime":337966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":338196.0,"EndTime":338196.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":338312.0,"Objects":[{"StartTime":338312.0,"EndTime":338312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":338427.0,"Objects":[{"StartTime":338427.0,"EndTime":338427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":338657.0,"EndTime":338657.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":338773.0,"Objects":[{"StartTime":338773.0,"EndTime":338773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":338889.0,"Objects":[{"StartTime":338889.0,"EndTime":338889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":339004.0,"EndTime":339004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":339120.0,"Objects":[{"StartTime":339120.0,"EndTime":339120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":339235.0,"EndTime":339235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":339350.0,"Objects":[{"StartTime":339350.0,"EndTime":339350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":339407.0,"Objects":[{"StartTime":339407.0,"EndTime":339407.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":339465.0,"Objects":[{"StartTime":339465.0,"EndTime":339465.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":339523.0,"Objects":[{"StartTime":339523.0,"EndTime":339523.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":339580.0,"Objects":[{"StartTime":339580.0,"EndTime":339580.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":339638.0,"Objects":[{"StartTime":339638.0,"EndTime":339638.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":339696.0,"Objects":[{"StartTime":339696.0,"EndTime":339696.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":339753.0,"Objects":[{"StartTime":339753.0,"EndTime":339753.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":339812.0,"Objects":[{"StartTime":339812.0,"EndTime":339812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":340042.0,"EndTime":340042.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":340158.0,"Objects":[{"StartTime":340158.0,"EndTime":340158.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":340273.0,"Objects":[{"StartTime":340273.0,"EndTime":340273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":340388.0,"EndTime":340388.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":340504.0,"Objects":[{"StartTime":340504.0,"EndTime":340504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":340619.0,"EndTime":340619.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":340735.0,"Objects":[{"StartTime":340735.0,"EndTime":340735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":340965.0,"EndTime":340965.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":341081.0,"Objects":[{"StartTime":341081.0,"EndTime":341081.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":341197.0,"Objects":[{"StartTime":341197.0,"EndTime":341197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":341312.0,"EndTime":341312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":341427.0,"Objects":[{"StartTime":341427.0,"EndTime":341427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":341542.0,"EndTime":341542.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":341658.0,"Objects":[{"StartTime":341658.0,"EndTime":341658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":341888.0,"EndTime":341888.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":342004.0,"Objects":[{"StartTime":342004.0,"EndTime":342004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":342120.0,"Objects":[{"StartTime":342120.0,"EndTime":342120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":342235.0,"EndTime":342235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":342350.0,"Objects":[{"StartTime":342350.0,"EndTime":342350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":342465.0,"EndTime":342465.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":342581.0,"Objects":[{"StartTime":342581.0,"EndTime":342581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":342811.0,"EndTime":342811.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":342927.0,"Objects":[{"StartTime":342927.0,"EndTime":342927.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":343043.0,"Objects":[{"StartTime":343043.0,"EndTime":343043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":343273.0,"EndTime":343273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":343389.0,"Objects":[{"StartTime":343389.0,"EndTime":343389.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":343447.0,"Objects":[{"StartTime":343447.0,"EndTime":343447.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":343504.0,"Objects":[{"StartTime":343504.0,"EndTime":343504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":343734.0,"EndTime":343734.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":343850.0,"Objects":[{"StartTime":343850.0,"EndTime":343850.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":344080.0,"EndTime":344080.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":344197.0,"Objects":[{"StartTime":344197.0,"EndTime":344197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":344312.0,"EndTime":344312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":344370.0,"Objects":[{"StartTime":344370.0,"EndTime":344370.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":344427.0,"Objects":[{"StartTime":344427.0,"EndTime":344427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":344657.0,"EndTime":344657.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":344773.0,"Objects":[{"StartTime":344773.0,"EndTime":344773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":344889.0,"Objects":[{"StartTime":344889.0,"EndTime":344889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":345004.0,"EndTime":345004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":345120.0,"Objects":[{"StartTime":345120.0,"EndTime":345120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":345235.0,"EndTime":345235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":345350.0,"Objects":[{"StartTime":345350.0,"EndTime":345350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":345465.0,"EndTime":345465.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":345581.0,"Objects":[{"StartTime":345581.0,"EndTime":345581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":345696.0,"EndTime":345696.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":345812.0,"Objects":[{"StartTime":345812.0,"EndTime":345812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":345927.0,"EndTime":345927.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":346043.0,"Objects":[{"StartTime":346043.0,"EndTime":346043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":346158.0,"EndTime":346158.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":346273.0,"Objects":[{"StartTime":346273.0,"EndTime":346273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":346446.0,"EndTime":346446.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":346504.0,"Objects":[{"StartTime":346504.0,"EndTime":346504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":346677.0,"EndTime":346677.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":346735.0,"Objects":[{"StartTime":346735.0,"EndTime":346735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":346908.0,"EndTime":346908.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":346966.0,"Objects":[{"StartTime":346966.0,"EndTime":346966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":347081.0,"EndTime":347081.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":347197.0,"Objects":[{"StartTime":347197.0,"EndTime":347197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":347427.0,"EndTime":347427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":347543.0,"Objects":[{"StartTime":347543.0,"EndTime":347543.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":347658.0,"Objects":[{"StartTime":347658.0,"EndTime":347658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":347773.0,"EndTime":347773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":347889.0,"Objects":[{"StartTime":347889.0,"EndTime":347889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":348004.0,"EndTime":348004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":348120.0,"Objects":[{"StartTime":348120.0,"EndTime":348120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":348235.0,"EndTime":348235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":348350.0,"Objects":[{"StartTime":348350.0,"EndTime":348350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":348465.0,"EndTime":348465.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":348581.0,"Objects":[{"StartTime":348581.0,"EndTime":348581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":348696.0,"EndTime":348696.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":348811.0,"Objects":[{"StartTime":348811.0,"EndTime":348811.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":348926.0,"EndTime":348926.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":348985.0,"Objects":[{"StartTime":348985.0,"EndTime":348985.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":349043.0,"Objects":[{"StartTime":349043.0,"EndTime":349043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":349273.0,"EndTime":349273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":349389.0,"Objects":[{"StartTime":349389.0,"EndTime":349389.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":349504.0,"Objects":[{"StartTime":349504.0,"EndTime":349504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":349619.0,"EndTime":349619.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":349735.0,"Objects":[{"StartTime":349735.0,"EndTime":349735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":349850.0,"EndTime":349850.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":349966.0,"Objects":[{"StartTime":349966.0,"EndTime":349966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":350196.0,"EndTime":350196.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":350312.0,"Objects":[{"StartTime":350312.0,"EndTime":350312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":350427.0,"Objects":[{"StartTime":350427.0,"EndTime":350427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":350657.0,"EndTime":350657.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":350773.0,"Objects":[{"StartTime":350773.0,"EndTime":350773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":350889.0,"Objects":[{"StartTime":350889.0,"EndTime":350889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":351119.0,"EndTime":351119.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":351235.0,"Objects":[{"StartTime":351235.0,"EndTime":351235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":351350.0,"Objects":[{"StartTime":351350.0,"EndTime":351350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":351580.0,"EndTime":351580.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":351812.0,"Objects":[{"StartTime":351812.0,"EndTime":351812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":352042.0,"EndTime":352042.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":352158.0,"Objects":[{"StartTime":352158.0,"EndTime":352158.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":352273.0,"Objects":[{"StartTime":352273.0,"EndTime":352273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":352388.0,"EndTime":352388.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":352504.0,"Objects":[{"StartTime":352504.0,"EndTime":352504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":352619.0,"EndTime":352619.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":352735.0,"Objects":[{"StartTime":352735.0,"EndTime":352735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":352965.0,"EndTime":352965.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":353081.0,"Objects":[{"StartTime":353081.0,"EndTime":353081.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":353197.0,"Objects":[{"StartTime":353197.0,"EndTime":353197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":353312.0,"EndTime":353312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":353427.0,"Objects":[{"StartTime":353427.0,"EndTime":353427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":353542.0,"EndTime":353542.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":353658.0,"Objects":[{"StartTime":353658.0,"EndTime":353658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":353773.0,"EndTime":353773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":353889.0,"Objects":[{"StartTime":353889.0,"EndTime":353889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":354004.0,"EndTime":354004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":354120.0,"Objects":[{"StartTime":354120.0,"EndTime":354120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":354235.0,"EndTime":354235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":354350.0,"Objects":[{"StartTime":354350.0,"EndTime":354350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":354465.0,"EndTime":354465.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":354581.0,"Objects":[{"StartTime":354581.0,"EndTime":354581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":354811.0,"EndTime":354811.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":354927.0,"Objects":[{"StartTime":354927.0,"EndTime":354927.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":355043.0,"Objects":[{"StartTime":355043.0,"EndTime":355043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":355273.0,"EndTime":355273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":355389.0,"Objects":[{"StartTime":355389.0,"EndTime":355389.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":355504.0,"Objects":[{"StartTime":355504.0,"EndTime":355504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":355620.0,"Objects":[{"StartTime":355620.0,"EndTime":355620.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":355735.0,"Objects":[{"StartTime":355735.0,"EndTime":355735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":355851.0,"Objects":[{"StartTime":355851.0,"EndTime":355851.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":355966.0,"Objects":[{"StartTime":355966.0,"EndTime":355966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":356082.0,"Objects":[{"StartTime":356082.0,"EndTime":356082.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":356197.0,"Objects":[{"StartTime":356197.0,"EndTime":356197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":356313.0,"Objects":[{"StartTime":356313.0,"EndTime":356313.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":356427.0,"Objects":[{"StartTime":356427.0,"EndTime":356427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":356657.0,"EndTime":356657.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":356773.0,"Objects":[{"StartTime":356773.0,"EndTime":356773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":356889.0,"Objects":[{"StartTime":356889.0,"EndTime":356889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":357004.0,"EndTime":357004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":357120.0,"Objects":[{"StartTime":357120.0,"EndTime":357120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":357235.0,"EndTime":357235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":357350.0,"Objects":[{"StartTime":357350.0,"EndTime":357350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":357580.0,"EndTime":357580.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":357697.0,"Objects":[{"StartTime":357697.0,"EndTime":357697.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":357812.0,"Objects":[{"StartTime":357812.0,"EndTime":357812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":357927.0,"Objects":[{"StartTime":357927.0,"EndTime":357927.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":358043.0,"Objects":[{"StartTime":358043.0,"EndTime":358043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":358158.0,"Objects":[{"StartTime":358158.0,"EndTime":358158.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":358273.0,"Objects":[{"StartTime":358273.0,"EndTime":358273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":358503.0,"EndTime":358503.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":358620.0,"Objects":[{"StartTime":358620.0,"EndTime":358620.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":358735.0,"Objects":[{"StartTime":358735.0,"EndTime":358735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":358850.0,"EndTime":358850.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":358966.0,"Objects":[{"StartTime":358966.0,"EndTime":358966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":359081.0,"EndTime":359081.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":359197.0,"Objects":[{"StartTime":359197.0,"EndTime":359658.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":359773.0,"Objects":[{"StartTime":359773.0,"EndTime":359773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":359889.0,"Objects":[{"StartTime":359889.0,"EndTime":359889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":360004.0,"Objects":[{"StartTime":360004.0,"EndTime":360004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":360120.0,"Objects":[{"StartTime":360120.0,"EndTime":360120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":360350.0,"EndTime":360350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":360466.0,"Objects":[{"StartTime":360466.0,"EndTime":360466.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":360581.0,"Objects":[{"StartTime":360581.0,"EndTime":360581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":360696.0,"EndTime":360696.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":360812.0,"Objects":[{"StartTime":360812.0,"EndTime":360812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":360927.0,"EndTime":360927.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":361043.0,"Objects":[{"StartTime":361043.0,"EndTime":361043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":361158.0,"EndTime":361158.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":361273.0,"Objects":[{"StartTime":361273.0,"EndTime":361273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":361388.0,"EndTime":361388.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":361504.0,"Objects":[{"StartTime":361504.0,"EndTime":361504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":361620.0,"Objects":[{"StartTime":361620.0,"EndTime":361620.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":361735.0,"Objects":[{"StartTime":361735.0,"EndTime":361735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":361851.0,"Objects":[{"StartTime":361851.0,"EndTime":361851.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":361966.0,"Objects":[{"StartTime":361966.0,"EndTime":361966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":362196.0,"EndTime":362196.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":362312.0,"Objects":[{"StartTime":362312.0,"EndTime":362312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":362427.0,"Objects":[{"StartTime":362427.0,"EndTime":362427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":362542.0,"EndTime":362542.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":362658.0,"Objects":[{"StartTime":362658.0,"EndTime":362658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":362773.0,"EndTime":362773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":362831.0,"Objects":[{"StartTime":362831.0,"EndTime":362831.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":362889.0,"Objects":[{"StartTime":362889.0,"EndTime":362889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":363119.0,"EndTime":363119.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":363235.0,"Objects":[{"StartTime":363235.0,"EndTime":363235.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":363465.0,"EndTime":363465.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":363581.0,"Objects":[{"StartTime":363581.0,"EndTime":363581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":363696.0,"EndTime":363696.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":363812.0,"Objects":[{"StartTime":363812.0,"EndTime":364273.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":364389.0,"Objects":[{"StartTime":364389.0,"EndTime":364389.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":364504.0,"Objects":[{"StartTime":364504.0,"EndTime":364504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":364619.0,"EndTime":364619.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":364735.0,"Objects":[{"StartTime":364735.0,"EndTime":364735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":364850.0,"EndTime":364850.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":364966.0,"Objects":[{"StartTime":364966.0,"EndTime":365427.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":365543.0,"Objects":[{"StartTime":365543.0,"EndTime":365543.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":365658.0,"Objects":[{"StartTime":365658.0,"EndTime":365658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":365773.0,"EndTime":365773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":365889.0,"Objects":[{"StartTime":365889.0,"EndTime":365889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":366004.0,"EndTime":366004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":366120.0,"Objects":[{"StartTime":366120.0,"EndTime":366120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":366235.0,"Objects":[{"StartTime":366235.0,"EndTime":366235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":366350.0,"EndTime":366350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":366465.0,"EndTime":366465.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":366581.0,"Objects":[{"StartTime":366581.0,"EndTime":366581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":366696.0,"EndTime":366696.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":366812.0,"Objects":[{"StartTime":366812.0,"EndTime":366812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":367042.0,"EndTime":367042.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":367158.0,"Objects":[{"StartTime":367158.0,"EndTime":367158.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":367273.0,"Objects":[{"StartTime":367273.0,"EndTime":367273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":367388.0,"EndTime":367388.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":367504.0,"Objects":[{"StartTime":367504.0,"EndTime":367965.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":368081.0,"Objects":[{"StartTime":368081.0,"EndTime":368081.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":368197.0,"Objects":[{"StartTime":368197.0,"EndTime":368197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":368312.0,"EndTime":368312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":368427.0,"Objects":[{"StartTime":368427.0,"EndTime":368427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":368657.0,"EndTime":368657.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":368773.0,"Objects":[{"StartTime":368773.0,"EndTime":368773.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":369003.0,"EndTime":369003.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":369120.0,"Objects":[{"StartTime":369120.0,"EndTime":369120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":369235.0,"EndTime":369235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":369350.0,"Objects":[{"StartTime":369350.0,"EndTime":369350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":369580.0,"EndTime":369580.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":369697.0,"Objects":[{"StartTime":369697.0,"EndTime":369697.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":369812.0,"Objects":[{"StartTime":369812.0,"EndTime":369812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":369927.0,"EndTime":369927.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":370043.0,"Objects":[{"StartTime":370043.0,"EndTime":370043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":370158.0,"EndTime":370158.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":370273.0,"Objects":[{"StartTime":370273.0,"EndTime":370273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":370389.0,"Objects":[{"StartTime":370389.0,"EndTime":370389.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":370504.0,"Objects":[{"StartTime":370504.0,"EndTime":370504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":370620.0,"Objects":[{"StartTime":370620.0,"EndTime":370620.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":370677.0,"Objects":[{"StartTime":370677.0,"EndTime":370677.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":370735.0,"Objects":[{"StartTime":370735.0,"EndTime":370735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":370793.0,"Objects":[{"StartTime":370793.0,"EndTime":370793.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":370850.0,"Objects":[{"StartTime":370850.0,"EndTime":370850.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":370908.0,"Objects":[{"StartTime":370908.0,"EndTime":370908.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":370966.0,"Objects":[{"StartTime":370966.0,"EndTime":370966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":371081.0,"Objects":[{"StartTime":371081.0,"EndTime":371081.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":371197.0,"Objects":[{"StartTime":371197.0,"EndTime":371197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":371427.0,"EndTime":371427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":371658.0,"Objects":[{"StartTime":371658.0,"EndTime":371658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":371888.0,"EndTime":371888.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":372120.0,"Objects":[{"StartTime":372120.0,"EndTime":372120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":372350.0,"EndTime":372350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":372581.0,"Objects":[{"StartTime":372581.0,"EndTime":372581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":372696.0,"EndTime":372696.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":372812.0,"Objects":[{"StartTime":372812.0,"EndTime":372812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":372927.0,"Objects":[{"StartTime":372927.0,"EndTime":372927.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":373043.0,"Objects":[{"StartTime":373043.0,"EndTime":373043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":373273.0,"EndTime":373273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":373504.0,"Objects":[{"StartTime":373504.0,"EndTime":373504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":373734.0,"EndTime":373734.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":373850.0,"Objects":[{"StartTime":373850.0,"EndTime":373850.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":373966.0,"Objects":[{"StartTime":373966.0,"EndTime":373966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":374196.0,"EndTime":374196.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":374427.0,"Objects":[{"StartTime":374427.0,"EndTime":374427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":374542.0,"EndTime":374542.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":374658.0,"Objects":[{"StartTime":374658.0,"EndTime":374658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":374773.0,"Objects":[{"StartTime":374773.0,"EndTime":374773.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":374830.0,"Objects":[{"StartTime":374830.0,"EndTime":374830.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":374889.0,"Objects":[{"StartTime":374889.0,"EndTime":374889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":375119.0,"EndTime":375119.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":375350.0,"Objects":[{"StartTime":375350.0,"EndTime":375350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":375466.0,"Objects":[{"StartTime":375466.0,"EndTime":375466.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":375581.0,"Objects":[{"StartTime":375581.0,"EndTime":375581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":375697.0,"Objects":[{"StartTime":375697.0,"EndTime":375697.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":375812.0,"Objects":[{"StartTime":375812.0,"EndTime":375812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":376042.0,"EndTime":376042.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":376273.0,"Objects":[{"StartTime":376273.0,"EndTime":376273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":376503.0,"EndTime":376503.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":376620.0,"Objects":[{"StartTime":376620.0,"EndTime":376620.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":376735.0,"Objects":[{"StartTime":376735.0,"EndTime":376735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":376965.0,"EndTime":376965.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":377197.0,"Objects":[{"StartTime":377197.0,"EndTime":377197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":377313.0,"Objects":[{"StartTime":377313.0,"EndTime":377313.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":377428.0,"Objects":[{"StartTime":377428.0,"EndTime":377428.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":377544.0,"Objects":[{"StartTime":377544.0,"EndTime":377544.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":377658.0,"Objects":[{"StartTime":377658.0,"EndTime":377658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":377888.0,"EndTime":377888.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":378120.0,"Objects":[{"StartTime":378120.0,"EndTime":378120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":378350.0,"EndTime":378350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":378581.0,"Objects":[{"StartTime":378581.0,"EndTime":379273.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":379504.0,"Objects":[{"StartTime":379504.0,"EndTime":379504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":379734.0,"EndTime":379734.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":379850.0,"Objects":[{"StartTime":379850.0,"EndTime":379850.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":380080.0,"EndTime":380080.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":380197.0,"Objects":[{"StartTime":380197.0,"EndTime":380197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":380312.0,"EndTime":380312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":380427.0,"Objects":[{"StartTime":380427.0,"EndTime":380427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":380543.0,"Objects":[{"StartTime":380543.0,"EndTime":380543.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":380773.0,"EndTime":380773.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":380889.0,"Objects":[{"StartTime":380889.0,"EndTime":380889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":381004.0,"EndTime":381004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":381120.0,"Objects":[{"StartTime":381120.0,"EndTime":381120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":381235.0,"EndTime":381235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":381350.0,"Objects":[{"StartTime":381350.0,"EndTime":381350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":381466.0,"Objects":[{"StartTime":381466.0,"EndTime":381466.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":381696.0,"EndTime":381696.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":381812.0,"Objects":[{"StartTime":381812.0,"EndTime":381812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":381927.0,"EndTime":381927.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":382043.0,"Objects":[{"StartTime":382043.0,"EndTime":382043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":382158.0,"EndTime":382158.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":382273.0,"Objects":[{"StartTime":382273.0,"EndTime":382273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":382330.0,"EndTime":382330.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":382388.0,"EndTime":382388.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":382446.0,"EndTime":382446.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":382504.0,"Objects":[{"StartTime":382504.0,"EndTime":382504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":382561.0,"EndTime":382561.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":382619.0,"EndTime":382619.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":382677.0,"EndTime":382677.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":382735.0,"Objects":[{"StartTime":382735.0,"EndTime":382735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":382792.0,"Objects":[{"StartTime":382792.0,"EndTime":382792.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":382850.0,"Objects":[{"StartTime":382850.0,"EndTime":382850.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":382908.0,"Objects":[{"StartTime":382908.0,"EndTime":382908.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":382966.0,"Objects":[{"StartTime":382966.0,"EndTime":382966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":383023.0,"Objects":[{"StartTime":383023.0,"EndTime":383023.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":383080.0,"Objects":[{"StartTime":383080.0,"EndTime":383080.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":383138.0,"Objects":[{"StartTime":383138.0,"EndTime":383138.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":383197.0,"Objects":[{"StartTime":383197.0,"EndTime":383197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":383254.0,"Objects":[{"StartTime":383254.0,"EndTime":383254.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":383312.0,"Objects":[{"StartTime":383312.0,"EndTime":383312.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":383370.0,"Objects":[{"StartTime":383370.0,"EndTime":383370.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":383427.0,"Objects":[{"StartTime":383427.0,"EndTime":383427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":383484.0,"Objects":[{"StartTime":383484.0,"EndTime":383484.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":383542.0,"Objects":[{"StartTime":383542.0,"EndTime":383542.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":383600.0,"Objects":[{"StartTime":383600.0,"EndTime":383600.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":383657.0,"Objects":[{"StartTime":383657.0,"EndTime":383657.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":383715.0,"Objects":[{"StartTime":383715.0,"EndTime":383715.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":383773.0,"Objects":[{"StartTime":383773.0,"EndTime":383773.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":383831.0,"Objects":[{"StartTime":383831.0,"EndTime":383831.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":383889.0,"Objects":[{"StartTime":383889.0,"EndTime":383889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":383947.0,"Objects":[{"StartTime":383947.0,"EndTime":383947.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":384004.0,"Objects":[{"StartTime":384004.0,"EndTime":384004.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":384062.0,"Objects":[{"StartTime":384062.0,"EndTime":384062.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":384120.0,"Objects":[{"StartTime":384120.0,"EndTime":384120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true}]}]} \ No newline at end of file diff --git a/osu.Game.Rulesets.Taiko/Resources/Testing/Beatmaps/875945.osu b/osu.Game.Rulesets.Taiko/Resources/Testing/Beatmaps/875945.osu new file mode 100644 index 0000000000..a24fcea30a --- /dev/null +++ b/osu.Game.Rulesets.Taiko/Resources/Testing/Beatmaps/875945.osu @@ -0,0 +1,1824 @@ +osu file format v14 + +[General] +AudioFilename: imagematerial.mp3 +AudioLeadIn: 0 +PreviewTime: 165589 +Countdown: 0 +SampleSet: Soft +StackLeniency: 0.7 +Mode: 0 +LetterboxInBreaks: 0 +EpilepsyWarning: 1 +WidescreenStoryboard: 1 + +[Editor] +Bookmarks: 56435,71204,88743,103512,120127,134897,149666,181051,197666,310280,356434,371204,384127 +DistanceSpacing: 0.3 +BeatDivisor: 4 +GridSize: 4 +TimelineZoom: 5.700003 + +[Metadata] +Title:IMAGE -MATERIAL- +TitleUnicode:IMAGE -MATERIAL- +Artist:Tatsh +ArtistUnicode:Tatsh +Creator:Enon +Version:Revolution +Source: +Tags:(新曲) (Shinkyoku) REFLEC BEAT limelight 福山沙織 fukuyama saori Dailycare +BeatmapID:875945 +BeatmapSetID:402837 + +[Difficulty] +HPDrainRate:6 +CircleSize:4.2 +OverallDifficulty:9 +ApproachRate:9.8 +SliderMultiplier:1.87 +SliderTickRate:1 + +[Events] +//Background and Video events +0,0,"BG.jpg",0,0 +//Break Periods +2,49251,55956 +//Storyboard Layer 0 (Background) +//Storyboard Layer 1 (Fail) +//Storyboard Layer 2 (Pass) +//Storyboard Layer 3 (Foreground) +//Storyboard Sound Samples + +[TimingPoints] +6590,461.538461538462,4,2,2,15,1,0 +6590,-200,4,2,2,15,0,0 +8320,-200,4,2,2,5,0,0 +8436,-200,4,2,2,15,0,0 +10166,-200,4,2,2,5,0,0 +10282,-200,4,2,2,15,0,0 +12013,-200,4,2,2,5,0,0 +12128,-200,4,2,2,15,0,0 +13859,-200,4,2,2,5,0,0 +13974,-200,4,2,2,15,0,0 +15705,-200,4,2,2,5,0,0 +15820,-200,4,2,2,15,0,0 +17551,-200,4,2,2,5,0,0 +17666,-200,4,2,2,15,0,0 +49051,230.769230769231,4,2,1,15,1,0 +56435,-100,4,2,1,60,0,0 +62666,-200,4,2,1,60,0,0 +63820,-100,4,2,1,60,0,0 +69358,-100,4,2,1,55,0,0 +69589,-100,4,2,1,50,0,0 +69820,-100,4,2,1,45,0,0 +70051,-100,4,2,1,40,0,0 +70281,-100,4,2,1,30,0,0 +70512,-100,4,2,1,40,0,0 +70743,-100,4,2,1,50,0,0 +70974,-100,4,2,1,60,0,0 +71204,-100,4,2,1,70,0,0 +74839,-100,4,2,1,5,0,0 +74897,-100,4,2,1,70,0,0 +78301,-100,4,2,1,5,0,0 +78358,-100,4,2,1,70,0,0 +78531,-100,4,2,1,5,0,0 +78589,-100,4,2,1,70,0,0 +82224,-100,4,2,1,5,0,0 +82281,-100,4,2,1,70,0,0 +85685,-100,4,2,1,5,0,0 +85743,-100,4,2,1,70,0,0 +88743,-100,4,2,1,85,0,1 +90070,-100,4,2,1,5,0,1 +90127,-100,4,2,1,85,0,1 +93762,-100,4,2,1,5,0,1 +93820,-100,4,2,1,85,0,1 +95377,-100,4,2,1,5,0,1 +95435,-100,4,2,1,85,0,1 +103512,-100,4,2,1,60,0,0 +106916,-100,4,2,1,5,0,0 +106974,-100,4,2,1,60,0,0 +110608,-100,4,2,1,5,0,0 +110666,-100,4,2,1,60,0,0 +114301,-100,4,2,1,5,0,0 +114358,-100,4,2,1,60,0,0 +114820,-100,4,2,3,60,0,0 +114834,-100,4,2,1,60,0,0 +116666,-100,4,2,3,60,0,0 +116680,-100,4,2,1,60,0,0 +117358,-100,4,2,1,55,0,0 +117589,-100,4,2,1,50,0,0 +117820,-100,4,2,1,45,0,0 +118051,-100,4,2,1,40,0,0 +118281,-100,4,2,1,30,0,0 +118743,-100,4,2,1,40,0,0 +119204,-100,4,2,1,50,0,0 +119666,-100,4,2,1,60,0,0 +120127,-100,4,2,1,70,0,0 +126762,-100,4,2,1,5,0,0 +126820,-100,4,2,1,70,0,0 +143377,-100,4,2,1,5,0,0 +143435,-111.111111111111,4,2,1,70,0,0 +143608,-111.111111111111,4,2,1,5,0,0 +143666,-125,4,2,1,70,0,0 +143839,-125,4,2,1,5,0,0 +143897,-142.857142857143,4,2,1,70,0,0 +144070,-142.857142857143,4,2,1,5,0,0 +144127,-100,4,2,1,70,0,0 +149666,-200,4,2,1,40,0,0 +160743,-100,4,2,1,55,0,0 +166281,-100,4,2,1,85,0,1 +167608,-100,4,2,1,5,0,1 +167666,-100,4,2,1,85,0,1 +171301,-100,4,2,1,5,0,1 +171358,-100,4,2,1,85,0,1 +172916,-100,4,2,1,5,0,1 +172974,-100,4,2,1,85,0,1 +181051,-100,4,2,1,60,0,0 +182377,-100,4,2,1,5,0,0 +182435,-100,4,2,1,60,0,0 +192358,-100,4,2,3,60,0,0 +192373,-100,4,2,1,60,0,0 +194204,-100,4,2,3,60,0,0 +194219,-100,4,2,1,60,0,0 +194897,-100,4,2,1,55,0,0 +195127,-100,4,2,1,50,0,0 +195358,-100,4,2,1,45,0,0 +195589,-100,4,2,1,40,0,0 +195820,-100,4,2,1,30,0,0 +196281,-100,4,2,1,40,0,0 +196743,-100,4,2,1,50,0,0 +197204,-100,4,2,1,60,0,0 +197666,-100,4,2,1,85,0,1 +219070,-100,4,2,1,5,0,1 +219127,-142.857142857143,4,2,1,85,0,1 +219301,-142.857142857143,4,2,1,5,0,1 +219358,-111.111111111111,4,2,1,85,0,1 +219531,-111.111111111111,4,2,1,5,0,1 +219589,-166.666666666667,4,2,1,85,0,1 +219762,-166.666666666667,4,2,1,5,0,1 +219820,-100,4,2,1,85,0,1 +227204,461.538461538462,4,2,2,25,1,0 +227204,-200,4,2,2,25,0,0 +251550,697.674418604651,4,2,2,25,1,0 +251550,-133.333333333333,4,2,2,25,0,0 +252702,714.285714285714,4,2,2,20,1,0 +252702,-133.333333333333,4,2,2,20,0,0 +253506,800,4,2,2,18,1,0 +254095,1132.07547169811,4,2,2,15,1,0 +254095,-133.333333333333,4,2,2,15,0,0 +255580,1200,4,2,2,10,1,0 +256480,1267.10000000001,4,2,2,8,1,0 +256480,-133.333333333333,4,2,2,8,0,0 +258892,2131.45714285714,4,2,2,6,1,0 +258892,-133.333333333333,4,2,2,6,0,0 +263197,230.769230769231,4,2,1,65,1,0 +277966,-100,4,2,1,70,0,0 +285062,-100,4,2,1,5,0,0 +285120,-100,4,2,1,70,0,0 +285293,-100,4,2,1,5,0,0 +285350,-100,4,2,1,70,0,0 +292447,-100,4,2,1,5,0,0 +292504,-100,4,2,1,70,0,0 +295504,-100,4,2,1,85,0,1 +296831,-100,4,2,1,5,0,1 +296889,-100,4,2,1,85,0,1 +300523,-100,4,2,1,5,0,1 +300581,-100,4,2,1,85,0,1 +308889,-100,4,2,1,85,0,0 +310273,-100,4,2,1,85,0,1 +315062,-100,4,2,1,5,0,1 +315120,-100,4,2,1,85,0,1 +329831,-100,4,2,1,5,0,1 +329889,-100,4,2,1,85,0,1 +330754,-100,4,2,1,5,0,1 +330812,-100,4,2,1,85,0,1 +331677,-100,4,2,1,5,0,1 +331735,-100,4,2,1,85,0,1 +333523,-100,4,2,1,5,0,1 +333581,-100,4,2,1,85,0,1 +336293,-100,4,2,1,5,0,1 +336350,-100,4,2,1,85,0,1 +346447,-100,4,2,1,5,0,1 +346504,-142.857142857143,4,2,1,85,0,1 +346677,-142.857142857143,4,2,1,5,0,1 +346735,-111.111111111111,4,2,1,85,0,1 +346908,-111.111111111111,4,2,1,5,0,1 +346966,-166.666666666667,4,2,1,85,0,1 +347197,-100,4,2,1,85,0,1 +356427,-100,4,2,1,60,0,0 + + +[Colours] +Combo1 : 235,221,186 +Combo2 : 165,202,233 +Combo3 : 114,145,218 +Combo4 : 58,148,190 + +[HitObjects] +88,104,6590,6,0,B|176:156|256:108|256:108|336:60|423:112,1,350.625,6|0,0:0|0:0,0:0:0:0: +396,213,8436,2,0,P|277:247|376:172,1,350.625,6|0,0:0|0:0,0:0:0:0: +472,220,10282,2,0,P|456:288|220:300,1,350.625,6|0,0:0|0:0,0:0:0:0: +277,200,12128,2,0,P|398:225|276:244,1,350.625,6|0,0:0|0:0,0:0:0:0: +224,141,13974,6,0,P|379:90|473:224,1,350.625,6|0,0:0|0:0,0:0:0:0: +496,301,15820,2,0,B|304:277|329:378|139:354,1,350.625,6|0,0:0|0:0,0:0:0:0: +76,352,17666,2,0,B|128:271|43:128|43:128|96:217|173:187,1,374,6|2,0:0|0:0,0:0:0:0: +256,192,19628,12,0,21128,0:0:0:0: +213,117,21359,6,0,L|119:122,1,93.5,6|0,0:0|0:0,0:0:0:0: +300,161,22282,2,0,L|393:155,1,93.5,2|0,0:0|0:0,0:0:0:0: +233,38,23205,2,0,L|139:43,1,93.5,6|0,0:0|0:0,0:0:0:0: +280,240,24128,2,0,L|373:234,1,93.5,2|0,0:0|0:0,0:0:0:0: +509,22,25051,6,0,B|342:1|390:161|198:113,1,327.25,6|0,0:0|0:0,0:0:0:0: +139,43,26897,2,0,P|181:132|110:300,1,280.5,2|0,0:0|0:0,0:0:0:0: +46,366,28743,6,0,L|139:371,1,93.5,6|0,0:0|0:0,0:0:0:0: +280,175,29666,2,0,L|186:169,1,93.5,2|0,0:0|0:0,0:0:0:0: +26,287,30589,2,0,L|119:292,1,93.5,6|0,0:0|0:0,0:0:0:0: +300,254,31513,2,0,L|206:248,1,93.5,2|0,0:0|0:0,0:0:0:0: +0,57,32436,6,0,B|189:33|134:214|352:176,1,374,6|2,0:0|0:0,0:0:0:0: +334,178,35205,2,0,L|315:351,1,163.625,2|0,0:0|0:0,0:0:0:0: +396,313,36128,6,0,P|430:308|456:284,1,70.125,6|0,0:0|0:0,0:0:0:0: +508,233,36590,6,0,B|205:287|288:12|1:48,1,561,2|0,0:0|0:0,0:0:0:0: +10,47,39820,6,0,L|120:37,1,93.5,6|0,0:0|0:0,0:0:0:0: +233,130,40743,2,0,L|123:140,1,93.5,2|0,0:0|0:0,0:0:0:0: +268,229,41666,2,0,L|473:210,1,187,2|2,0:0|0:0,0:0:0:0: +271,366,43051,2,0,P|254:329|255:303,1,46.75 +268,229,43513,5,6,0:0:0:0: +256,192,43628,12,0,49051,0:0:0:0: +45,136,56435,6,0,B|140:151|119:74|222:88,1,187,6|8,0:0|0:0,0:0:0:0: +214,252,56781,1,0,0:0:0:0: +214,252,56897,2,0,P|209:223|187:144,1,93.5,2|0,0:0|0:0,0:0:0:0: +336,48,57127,2,0,P|323:93|314:138,1,93.5,8|0,0:0|0:0,0:0:0:0: +319,308,57358,6,0,P|379:321|411:306,1,93.5,2|0,0:0|0:0,0:0:0:0: +214,252,57589,2,0,P|154:239|122:254,1,93.5,8|0,0:0|0:0,0:0:0:0: +58,340,57820,1,2,0:0:0:0: +165,370,57935,1,0,0:0:0:0: +263,315,58051,1,8,0:0:0:0: +370,345,58166,1,8,0:0:0:0: +370,345,58224,1,0,0:0:0:0: +370,345,58281,6,0,P|361:263|435:186,1,187,2|8,0:0|0:0,0:0:0:0: +507,110,58627,1,0,0:0:0:0: +507,110,58685,1,0,0:0:0:0: +507,110,58743,2,0,L|491:3,1,93.5,2|0,0:0|0:0,0:0:0:0: +412,96,58974,2,0,L|428:203,1,93.5,8|2,0:0|0:0,0:0:0:0: +370,344,59204,6,0,P|331:353|275:333,1,93.5,2|0,0:0|0:0,0:0:0:0: +273,211,59435,2,0,P|293:253|331:280,1,93.5,8|0,0:0|0:0,0:0:0:0: +349,206,59666,2,0,P|341:160|357:117,1,93.5,2|0,0:0|0:0,0:0:0:0: +482,107,59897,2,0,P|440:127|414:165,1,93.5,8|0,0:0|0:0,0:0:0:0: +144,273,60127,6,0,L|331:280,1,187,2|8,0:0|0:0,0:0:0:0: +349,206,60474,2,0,L|162:199,1,187,0|2,0:0|0:0,0:0:0:0: +85,115,60820,2,0,L|179:119,1,93.5,8|2,0:0|0:0,0:0:0:0: +126,347,61051,6,0,P|88:326|66:277,1,93.5,2|0,0:0|0:0,0:0:0:0: +162,199,61281,2,0,P|200:220|222:269,1,93.5,8|0,0:0|0:0,0:0:0:0: +203,375,61512,2,0,L|306:368,1,93.5,2|2,0:0|0:0,0:0:0:0: +443,285,61743,2,0,L|349:291,1,93.5,8|0,0:0|0:0,0:0:0:0: +329,279,61916,1,0,0:0:0:0: +309,266,61974,6,0,L|289:66,1,187,2|8,0:0|0:0,0:0:0:0: +203,118,62320,2,0,L|223:318,1,187,0|2,0:0|0:0,0:0:0:0: +133,342,62666,2,0,B|132:316|132:316|128:316|128:316|130:295|130:295|126:296|126:296|129:275|129:275|125:275|125:275|127:254|127:254|123:255|123:255|125:234|125:234|121:234|121:234|123:213|123:213|119:214|119:214|121:193|121:193|118:193|118:193|118:172,1,187,8|8,0:0|0:0,0:0:0:0: +285,26,63358,5,2,0:0:0:0: +352,117,63474,1,8,0:0:0:0: +265,189,63589,1,10,0:0:0:0: +332,280,63705,1,8,0:0:0:0: +474,81,63820,5,2,0:0:0:0: +456,83,63877,1,2,0:0:0:0: +437,85,63935,1,2,0:0:0:0: +419,88,63993,1,2,0:0:0:0: +400,90,64051,2,0,L|288:73,1,93.5,8|0,0:0|0:0,0:0:0:0: +217,50,64281,5,2,0:0:0:0: +219,68,64338,1,2,0:0:0:0: +221,87,64396,1,2,0:0:0:0: +224,105,64454,1,2,0:0:0:0: +226,124,64512,2,0,L|209:236,1,93.5,8|0,0:0|0:0,0:0:0:0: +186,307,64743,5,2,0:0:0:0: +204,305,64800,1,2,0:0:0:0: +223,303,64858,1,2,0:0:0:0: +241,300,64916,1,2,0:0:0:0: +260,298,64974,2,0,L|372:315,1,93.5,8|0,0:0|0:0,0:0:0:0: +443,338,65205,5,2,0:0:0:0: +441,320,65262,1,2,0:0:0:0: +439,301,65320,1,2,0:0:0:0: +436,283,65378,1,2,0:0:0:0: +434,264,65436,2,0,L|451:152,1,93.5,8|0,0:0|0:0,0:0:0:0: +474,81,65666,5,2,0:0:0:0: +456,83,65723,1,2,0:0:0:0: +437,85,65781,1,2,0:0:0:0: +419,88,65839,1,2,0:0:0:0: +400,90,65897,2,0,L|288:73,1,93.5,8|0,0:0|0:0,0:0:0:0: +226,124,66127,5,2,0:0:0:0: +208,126,66184,1,2,0:0:0:0: +189,128,66242,1,2,0:0:0:0: +171,131,66300,1,2,0:0:0:0: +152,133,66358,2,0,L|40:116,1,93.5,8|0,0:0|0:0,0:0:0:0: +14,291,66589,6,0,P|0:241|8:176,1,93.5,2|2,0:0|0:0,0:0:0:0: +136,292,66820,2,0,P|150:342|142:407,1,93.5,8|2,0:0|0:0,0:0:0:0: +80,232,67051,2,0,P|154:263|265:207,1,187,2|8,0:0|0:0,0:0:0:0: +315,159,67397,1,0,0:0:0:0: +491,182,67512,6,0,B|480:253|480:253|484:286|484:286|472:373,1,187,6|8,0:1|0:0,0:0:0:0: +410,124,67858,2,0,B|399:195|399:195|403:228|403:228|391:315,1,187,2|8,0:1|0:0,0:0:0:0: +329,66,68204,2,0,L|313:166,1,93.5,10|0,1:2|0:0,0:0:0:0: +181,294,68435,6,0,P|226:315|288:293,1,93.5,2|2,0:0|0:0,0:0:0:0: +440,252,68666,2,0,P|395:231|333:253,1,93.5,8|2,0:0|0:0,0:0:0:0: +128,371,68897,5,10,0:0:0:0: +181,294,69012,1,8,0:0:0:0: +117,225,69127,1,10,0:0:0:0: +170,148,69242,1,8,0:0:0:0: +52,88,69358,6,0,L|43:181,1,93.5,2|2,0:0|0:0,0:0:0:0: +181,294,69589,2,0,L|191:202,1,93.5,8|2,0:0|0:0,0:0:0:0: +39,101,69820,6,0,L|30:193,1,93.5,2|2,0:0|0:0,0:0:0:0: +168,307,70051,2,0,L|177:214,1,93.5,8|2,0:0|0:0,0:0:0:0: +198,30,70281,5,8,0:0:0:0: +220,46,70339,1,0,0:0:0:0: +244,58,70397,1,8,0:0:0:0: +269,65,70455,1,0,0:0:0:0: +296,68,70512,1,2,0:0:0:0: +322,66,70570,1,2,0:0:0:0: +348,60,70627,1,2,0:0:0:0: +373,49,70685,1,2,0:0:0:0: +396,36,70742,5,10,0:0:0:0: +441,30,70800,1,2,0:0:0:0: +483,49,70858,1,10,0:0:0:0: +510,87,70916,1,2,0:0:0:0: +512,133,70974,1,10,0:0:0:0: +492,175,71031,1,2,0:0:0:0: +453,199,71089,1,10,0:0:0:0: +407,200,71146,1,2,0:0:0:0: +364,184,71204,6,0,P|321:209|338:359,1,187,6|8,0:0|0:0,0:0:0:0: +419,372,71551,2,0,P|462:347|445:197,1,187,2|2,0:0|0:0,0:0:0:0: +332,104,71897,2,0,L|441:100,1,93.5,8|0,0:0|0:0,0:0:0:0: +248,179,72127,5,2,0:0:0:0: +248,179,72243,2,0,L|54:186,1,187,2|2,0:0|0:0,0:0:0:0: +144,259,72589,2,0,L|240:255,1,93.5,2|0,0:0|0:0,0:0:0:0: +164,104,72820,2,0,L|68:108,1,93.5,8|0,0:0|0:0,0:0:0:0: +111,338,73051,6,0,P|200:325|223:228,1,187,2|8,0:0|0:0,0:0:0:0: +192,136,73397,2,0,L|-1:143,1,187,2|2,0:0|0:0,0:0:0:0: +78,57,73743,2,0,L|174:53,1,93.5,8|0,0:0|0:0,0:0:0:0: +365,83,73974,5,2,0:0:0:0: +365,83,74089,2,0,B|294:83|288:84|255:135|251:135|191:135,1,187,2|2,0:0|0:0,0:0:0:0: +45,195,74435,2,0,P|87:216|103:264,1,93.5,2|0,0:0|0:0,0:0:0:0: +16,332,74666,2,0,B|63:323|63:323|109:331|109:331|160:322,1,140.25,8|0,0:0|0:0,0:0:0:0: +240,352,74897,6,0,P|224:290|298:187,1,187,2|8,0:0|0:0,0:0:0:0: +395,224,75243,2,0,P|411:286|337:389,1,187,2|2,0:0|0:0,0:0:0:0: +249,166,75589,2,0,L|239:73,1,93.5,8|0,0:0|0:0,0:0:0:0: +198,230,75820,5,2,0:0:0:0: +198,230,75935,2,0,B|249:267|296:244|318:210|318:210|294:242|318:278,1,187,2|2,0:0|0:0,0:0:0:0: +340,364,76281,2,0,L|433:357,1,93.5,2|0,0:0|0:0,0:0:0:0: +236,324,76512,2,0,L|120:332,1,93.5,8|0,0:0|0:0,0:0:0:0: +13,228,76743,6,0,B|96:223|96:223|131:234|131:234|198:229,1,187,2|8,0:0|0:0,0:0:0:0: +324,152,77089,2,0,B|257:157|257:157|222:146|222:146|139:151,1,187,2|2,0:0|0:0,0:0:0:0: +294,235,77435,2,0,L|388:228,1,93.5,8|0,0:0|0:0,0:0:0:0: +452,108,77666,5,2,0:0:0:0: +452,108,77781,1,8,0:0:0:0: +492,272,77897,1,10,0:0:0:0: +492,272,78012,1,8,0:0:0:0: +376,88,78127,2,0,P|404:44|488:40,1,140.25,8|0,0:0|0:0,0:0:0:0: +452,108,78358,2,0,L|301:120,1,140.25,2|0,0:0|0:0,0:0:0:0: +216,60,78589,6,0,P|232:132|144:216,1,187,6|8,0:0|0:0,0:0:0:0: +56,176,78935,2,0,P|40:104|128:20,1,187,2|2,0:0|0:0,0:0:0:0: +216,60,79281,2,0,L|223:153,1,93.5,8|0,0:0|0:0,0:0:0:0: +333,284,79512,5,2,0:0:0:0: +333,284,79627,2,0,L|317:82,1,187,2|2,0:0|0:0,0:0:0:0: +157,170,79974,2,0,P|175:203|256:211,1,93.5,2|0,0:0|0:0,0:0:0:0: +400,264,80204,2,0,P|382:231|301:223,1,93.5,8|0,0:0|0:0,0:0:0:0: +255,374,80435,6,0,L|447:359,1,187,2|8,0:0|0:0,0:0:0:0: +512,272,80781,2,0,L|320:287,1,187,2|2,0:0|0:0,0:0:0:0: +244,210,81127,2,0,L|337:203,1,93.5,8|0,0:0|0:0,0:0:0:0: +464,92,81358,5,2,0:0:0:0: +464,92,81474,2,0,P|484:152|420:272,1,187,2|2,0:0|0:0,0:0:0:0: +321,123,81820,2,0,L|310:23,1,93.5,2|0,0:0|0:0,0:0:0:0: +201,117,82051,2,0,L|215:256,1,140.25,8|0,0:0|0:0,0:0:0:0: +225,332,82281,6,0,P|153:348|53:272,1,187,2|8,0:0|0:0,0:0:0:0: +90,181,82627,2,0,P|162:165|262:241,1,187,2|2,0:0|0:0,0:0:0:0: +315,317,82974,2,0,L|441:307,1,93.5,8|0,0:0|0:0,0:0:0:0: +500,169,83204,5,2,0:0:0:0: +500,169,83320,2,0,L|306:184,1,187,2|2,0:0|0:0,0:0:0:0: +156,120,83666,2,0,P|140:68|152:24,1,93.5,2|0,0:0|0:0,0:0:0:0: +260,20,83897,2,0,P|276:72|264:116,1,93.5,8|0,0:0|0:0,0:0:0:0: +196,260,84127,6,0,L|10:240,1,187,2|8,0:0|0:0,0:0:0:0: +80,328,84474,2,0,L|265:347,1,187,2|2,0:0|0:0,0:0:0:0: +372,382,84820,2,0,P|386:339|425:314,1,93.5,8|0,0:0|0:0,0:0:0:0: +506,236,85051,2,0,P|461:246|420:225,1,93.5,2|0,0:0|0:0,0:0:0:0: +313,195,85281,2,0,P|344:228|346:274,1,93.5,8|0,0:0|0:0,0:0:0:0: +163,144,85512,6,0,L|14:135,1,140.25,2|0,0:0|0:0,0:0:0:0: +44,187,85743,2,0,L|171:194,1,93.5,8|0,0:0|0:0,0:0:0:0: +245,159,85974,2,0,P|232:96|199:67,1,93.5,2|0,0:0|0:0,0:0:0:0: +214,244,86204,2,0,L|404:225,1,187,8|2,0:0|0:0,0:0:0:0: +497,283,86551,1,0,0:0:0:0: +497,283,86666,2,0,P|436:302|409:354,1,93.5,8|0,0:0|0:0,0:0:0:0: +318,374,86897,6,0,L|328:163,1,187,2|8,0:0|0:0,0:0:0:0: +238,257,87243,1,0,0:0:0:0: +238,257,87358,2,0,L|248:46,1,187,2|8,0:0|0:0,0:0:0:0: +158,140,87704,1,2,0:0:0:0: +158,140,87820,6,0,L|163:34,1,93.5,2|0,0:0|0:0,0:0:0:0: +75,118,88051,2,0,L|70:223,1,93.5,8|0,0:0|0:0,0:0:0:0: +113,345,88281,5,0,0:0:0:0: +130,335,88339,1,0,0:0:0:0: +150,333,88397,1,0,0:0:0:0: +169,339,88454,1,0,0:0:0:0: +188,347,88512,5,10,0:0:0:0: +230,365,88570,1,2,0:0:0:0: +276,366,88628,1,10,0:0:0:0: +320,349,88686,1,2,0:0:0:0: +353,317,88743,6,0,L|362:113,1,187,6|8,0:0|0:0,0:0:0:0: +265,71,89089,1,0,0:0:0:0: +265,71,89204,2,0,P|216:122|257:235,1,187,2|8,0:0|0:0,0:0:0:0: +356,237,89551,1,0,0:0:0:0: +356,237,89666,6,0,L|472:227,1,93.5,2|0,0:0|0:0,0:0:0:0: +373,145,89897,2,0,L|222:158,1,140.25,8|0,0:0|0:0,0:0:0:0: +189,190,90127,2,0,L|282:181,1,93.5,2|0,0:0|0:0,0:0:0:0: +147,85,90358,2,0,L|24:95,1,93.5,8|0,0:0|0:0,0:0:0:0: +129,242,90589,6,0,P|186:269|266:193,1,187,2|8,0:0|0:0,0:0:0:0: +116,165,90935,2,0,P|64:200|89:308,1,187,2|2,0:0|0:0,0:0:0:0: +189,190,91281,2,0,P|190:140|162:101,1,93.5,8|0,0:0|0:0,0:0:0:0: +81,31,91512,2,0,L|174:23,1,93.5,2|0,0:0|0:0,0:0:0:0: +350,92,91743,2,0,L|257:100,1,93.5,8|0,0:0|0:0,0:0:0:0: +95,198,91974,2,0,L|188:190,1,93.5,2|0,0:0|0:0,0:0:0:0: +377,205,92204,1,2,0:0:0:0: +365,240,92262,1,2,0:0:0:0: +355,276,92320,1,2,0:0:0:0: +345,311,92377,1,2,0:0:0:0: +334,347,92435,6,0,P|264:294|292:211,1,187,2|8,0:0|0:0,0:0:0:0: +392,153,92781,1,0,0:0:0:0: +392,153,92897,2,0,P|420:70|350:17,1,187,2|8,0:0|0:0,0:0:0:0: +256,79,93243,1,0,0:0:0:0: +256,79,93358,6,0,L|263:195,1,93.5,2|0,0:0|0:0,0:0:0:0: +152,304,93589,2,0,L|142:141,1,140.25,8|0,0:0|0:0,0:0:0:0: +154,109,93820,2,0,P|122:142|78:155,1,93.5,2|0,0:0|0:0,0:0:0:0: +0,62,94051,2,0,P|31:28|75:15,1,93.5,8|0,0:0|0:0,0:0:0:0: +256,79,94281,6,0,L|267:265,1,187,2|8,0:0|0:0,0:0:0:0: +198,354,94627,1,0,0:0:0:0: +198,354,94743,2,0,P|286:378|361:327,1,187,2|8,0:0|0:0,0:0:0:0: +407,224,95089,1,0,0:0:0:0: +407,224,95204,6,0,L|247:211,1,140.25,2|0,0:0|0:0,0:0:0:0: +218,184,95435,2,0,L|330:193,1,93.5,8|0,0:0|0:0,0:0:0:0: +401,124,95666,2,0,P|410:77|383:30,1,93.5,2|0,0:0|0:0,0:0:0:0: +300,104,95897,2,0,P|291:149|311:191,1,93.5,8|0,0:0|0:0,0:0:0:0: +420,317,96127,6,0,P|334:293|273:358,1,187,2|8,0:0|0:0,0:0:0:0: +159,359,96474,1,0,0:0:0:0: +159,359,96589,2,0,P|73:382|12:317,1,187,2|8,0:0|0:0,0:0:0:0: +78,186,96935,1,0,0:0:0:0: +174,245,97051,6,0,L|195:51,1,187,2|8,0:0|0:0,0:0:0:0: +300,104,97397,1,0,0:0:0:0: +300,104,97512,2,0,B|309:153|309:153|287:195,1,93.5,2|0,0:0|0:0,0:0:0:0: +185,332,97743,2,0,B|164:293|164:293|173:244,1,93.5,8|0,0:0|0:0,0:0:0:0: +450,270,97974,6,0,L|259:281,1,187,2|8,0:0|0:0,0:0:0:0: +218,184,98320,1,0,0:0:0:0: +218,184,98435,2,0,L|409:173,1,187,2|8,0:0|0:0,0:0:0:0: +509,216,98781,1,0,0:0:0:0: +509,216,98897,6,0,B|477:120|541:136|509:24,1,187,2|8,0:0|0:0,0:0:0:0: +402,4,99243,1,0,0:0:0:0: +207,91,99358,2,0,L|217:183,1,93.5,2|0,0:0|0:0,0:0:0:0: +364,222,99589,2,0,L|353:129,1,93.5,8|0,0:0|0:0,0:0:0:0: +300,359,99820,5,2,0:0:0:0: +391,372,99935,1,0,0:0:0:0: +432,287,100051,1,8,0:0:0:0: +364,222,100166,1,0,0:0:0:0: +282,268,100281,1,2,0:0:0:0: +200,314,100397,1,0,0:0:0:0: +132,249,100512,1,8,0:0:0:0: +173,164,100628,1,0,0:0:0:0: +264,177,100743,6,0,L|248:73,1,93.5,2|0,0:0|0:0,0:0:0:0: +158,71,100974,2,0,L|173:164,1,93.5,8|0,0:0|0:0,0:0:0:0: +146,341,101204,2,0,L|130:237,1,93.5,2|0,0:0|0:0,0:0:0:0: +40,235,101435,2,0,L|54:327,1,93.5,8|0,0:0|0:0,0:0:0:0: +146,341,101666,6,0,P|214:349|234:329,1,93.5,2|0,0:0|0:0,0:0:0:0: +321,224,101897,2,0,P|253:216|233:236,1,93.5,8|0,0:0|0:0,0:0:0:0: +325,317,102127,1,2,0:0:0:0: +353,129,102243,1,2,0:0:0:0: +345,116,102300,1,2,0:0:0:0: +351,104,102358,1,2,0:0:0:0: +340,93,102416,1,2,0:0:0:0: +342,79,102474,1,2,0:0:0:0: +333,68,102531,1,2,0:0:0:0: +322,58,102589,5,10,0:0:0:0: +360,78,102646,1,2,0:0:0:0: +404,81,102704,1,2,0:0:0:0: +446,65,102762,1,2,0:0:0:0: +477,34,102819,1,2,0:0:0:0: +232,124,102935,2,0,L|173:109,1,46.75,2|0,0:0|0:0,0:0:0:0: +256,114,103051,5,2,0:0:0:0: +249,146,103108,1,2,0:0:0:0: +271,173,103166,1,10,0:0:0:0: +255,200,103224,1,2,0:0:0:0: +271,229,103281,1,2,0:0:0:0: +294,258,103339,1,2,0:0:0:0: +277,283,103397,1,2,0:0:0:0: +291,312,103454,1,2,0:0:0:0: +285,344,103512,6,0,P|370:322|476:316,1,187,6|8,0:0|0:0,0:0:0:0: +495,206,103858,1,0,0:0:0:0: +495,206,103974,2,0,P|456:129|349:137,1,187,2|8,0:0|0:0,0:0:0:0: +272,191,104320,1,0,0:0:0:0: +272,191,104435,6,0,L|280:61,1,93.5,2|0,0:0|0:0,0:0:0:0: +362,23,104666,2,0,P|287:75|188:64,1,187,8|2,0:0|0:0,0:0:0:0: +108,121,105012,1,0,0:0:0:0: +97,10,105127,1,8,0:0:0:0: +195,67,105243,1,8,0:0:0:0: +195,67,105301,1,8,0:0:0:0: +195,67,105358,6,0,P|211:139|111:224,1,187,2|8,0:0|0:0,0:0:0:0: +33,192,105704,1,0,0:0:0:0: +33,192,105820,2,0,L|41:292,1,93.5,2|0,0:0|0:0,0:0:0:0: +149,312,106051,2,0,L|141:218,1,93.5,8|0,0:0|0:0,0:0:0:0: +239,165,106281,6,0,P|272:198|279:244,1,93.5,2|0,0:0|0:0,0:0:0:0: +255,354,106512,2,0,L|351:344,1,93.5,8|0,0:0|0:0,0:0:0:0: +460,337,106743,2,0,P|399:276|386:191,1,140.25,2|0,0:0|0:0,0:0:0:0: +385,226,106974,2,0,L|481:216,1,93.5,8|0,0:0|0:0,0:0:0:0: +391,72,107204,6,0,L|204:91,1,187,2|8,0:0|0:0,0:0:0:0: +126,7,107551,1,0,0:0:0:0: +126,7,107666,2,0,P|95:51|127:179,1,187,2|8,0:0|0:0,0:0:0:0: +233,165,108012,1,0,0:0:0:0: +233,165,108127,6,0,L|219:270,1,93.5,2|0,0:0|0:0,0:0:0:0: +145,342,108358,2,0,P|217:288|336:317,1,187,8|2,0:0|0:0,0:0:0:0: +414,258,108704,1,0,0:0:0:0: +394,369,108820,1,8,0:0:0:0: +309,298,108935,1,0,0:0:0:0: +309,298,108993,1,0,0:0:0:0: +309,298,109051,6,0,L|301:103,1,187,2|8,0:0|0:0,0:0:0:0: +396,51,109397,1,0,0:0:0:0: +396,51,109512,2,0,P|427:108|408:160,1,93.5,2|0,0:0|0:0,0:0:0:0: +385,240,109743,2,0,L|491:230,1,93.5,8|0,0:0|0:0,0:0:0:0: +445,339,109974,6,0,L|339:349,1,93.5,2|0,0:0|0:0,0:0:0:0: +264,278,110204,2,0,P|250:233|260:188,1,93.5,8|0,0:0|0:0,0:0:0:0: +150,164,110435,2,0,P|130:227|164:322,1,140.25,2|0,0:0|0:0,0:0:0:0: +147,298,110666,2,0,P|101:287|57:301,1,93.5,8|0,0:0|0:0,0:0:0:0: +214,357,110897,6,0,L|400:339,1,187,2|8,0:0|0:0,0:0:0:0: +451,239,111243,1,0,0:0:0:0: +451,239,111358,2,0,L|264:256,1,187,2|8,0:0|0:0,0:0:0:0: +314,155,111704,1,0,0:0:0:0: +314,155,111820,6,0,L|407:146,1,93.5,2|0,0:0|0:0,0:0:0:0: +486,65,112051,2,0,P|443:147|450:238,1,187,8|2,0:0|0:0,0:0:0:0: +499,340,112397,1,0,0:0:0:0: +390,312,112512,1,8,0:0:0:0: +288,358,112627,1,0,0:0:0:0: +288,358,112685,1,0,0:0:0:0: +288,358,112743,6,0,L|100:344,1,187,2|8,0:0|0:0,0:0:0:0: +30,256,113089,1,0,0:0:0:0: +30,256,113204,2,0,L|218:270,1,187,2|8,0:0|0:0,0:0:0:0: +308,202,113551,1,0,0:0:0:0: +308,202,113666,6,0,P|322:134|256:43,1,187,2|8,0:0|0:0,0:0:0:0: +211,146,114012,1,0,0:0:0:0: +211,146,114127,2,0,L|221:312,1,140.25,2|0,0:0|0:0,0:0:0:0: +219,285,114358,2,0,P|262:271|306:285,1,93.5,8|0,0:0|0:0,0:0:0:0: +166,367,114589,6,0,B|94:317|105:208|187:178|256:192|256:192|325:205|407:176|418:67|346:17,1,561,2|8,0:0|0:0,0:0:0:0: +292,98,115512,1,2,0:0:0:0: +346,367,116435,6,0,B|418:317|407:208|325:178|256:192|256:192|187:205|105:176|94:67|166:17,1,561,2|8,0:0|0:0,0:0:0:0: +219,98,117358,1,2,0:0:0:0: +292,285,117589,1,8,0:0:0:0: +438,147,117820,1,2,0:0:0:0: +219,98,118051,2,0,L|88:91,1,93.5,8|0,0:0|0:0,0:0:0:0: +10,235,118281,6,0,P|-9:192|1:144,1,93.5,2|2,0:0|0:0,0:0:0:0: +154,279,118512,2,0,P|173:322|163:369,1,93.5,8|0,0:0|0:0,0:0:0:0: +3,339,118743,1,8,0:0:0:0: +219,215,118858,2,0,P|224:170|244:-10,1,187,8|2,0:0|0:0,0:0:0:0: +114,85,119204,5,2,0:0:0:0: +145,112,119262,1,2,0:0:0:0: +151,155,119319,1,2,0:0:0:0: +134,195,119377,1,2,0:0:0:0: +102,223,119434,1,2,0:0:0:0: +84,265,119493,1,2,0:0:0:0: +80,305,119551,1,2,0:0:0:0: +101,342,119608,1,2,0:0:0:0: +135,372,119666,5,2,0:0:0:0: +190,375,119723,1,2,0:0:0:0: +230,335,119781,1,2,0:0:0:0: +280,309,119839,1,2,0:0:0:0: +336,310,119897,1,2,0:0:0:0: +377,346,119954,1,2,0:0:0:0: +425,374,120012,1,2,0:0:0:0: +475,348,120070,1,2,0:0:0:0: +495,297,120127,6,0,P|500:240|514:98,1,187,6|8,0:0|0:0,0:0:0:0: +351,20,120474,2,0,P|345:76|332:219,1,187,2|2,0:0|0:0,0:0:0:0: +415,362,120820,2,0,B|458:378|458:378|508:361,1,93.5,8|0,0:0|0:0,0:0:0:0: +407,268,121051,5,2,0:0:0:0: +332,321,121166,2,0,L|145:308,1,187,2|2,0:0|0:0,0:0:0:0: +213,192,121512,2,0,P|219:146|197:105,1,93.5,2|0,0:0|0:0,0:0:0:0: +47,283,121743,2,0,P|41:329|63:370,1,93.5,8|0,0:0|0:0,0:0:0:0: +213,192,121974,6,0,L|27:180,1,187,2|8,0:0|0:0,0:0:0:0: +146,308,122320,2,0,L|332:321,1,187,2|2,0:0|0:0,0:0:0:0: +226,107,122666,2,0,P|203:147|214:191,1,93.5,8|0,0:0|0:0,0:0:0:0: +83,365,122897,5,2,0:0:0:0: +31,289,123012,2,0,P|24:211|14:102,1,187,2|2,0:0|0:0,0:0:0:0: +214,192,123358,2,0,P|174:214|128:208,1,93.5,2|0,0:0|0:0,0:0:0:0: +303,114,123589,2,0,P|342:91|388:97,1,93.5,8|0,0:0|0:0,0:0:0:0: +498,293,123820,6,0,L|306:281,1,187,2|8,0:0|0:0,0:0:0:0: +214,192,124166,2,0,L|406:204,1,187,2|2,0:0|0:0,0:0:0:0: +278,344,124512,2,0,P|245:309|242:263,1,93.5,8|0,0:0|0:0,0:0:0:0: +408,48,124743,5,2,0:0:0:0: +327,94,124858,2,0,L|311:281,1,187,2|2,0:0|0:0,0:0:0:0: +214,192,125204,2,0,P|154:196|114:171,1,93.5,2|0,0:0|0:0,0:0:0:0: +60,84,125435,2,0,P|120:80|160:105,1,93.5,8|0,0:0|0:0,0:0:0:0: +110,374,125666,5,10,0:0:0:0: +10,209,125781,1,8,0:0:0:0: +184,284,125897,1,8,0:0:0:0: +0,326,126012,1,8,0:0:0:0: +125,181,126127,2,0,B|202:169|224:229|319:212,1,187,2|0,1:0|0:0,0:0:0:0: +398,154,126474,1,0,0:0:0:0: +398,154,126589,6,0,P|346:110|352:43,1,140.25,2|0,0:0|0:0,0:0:0:0: +413,83,126820,2,0,B|419:162|419:162|406:195|406:195|413:267,1,187,2|2,1:0|0:0,0:0:0:0: +367,346,127166,1,0,0:0:0:0: +275,323,127281,1,8,0:0:0:0: +195,372,127397,1,0,0:0:0:0: +195,372,127454,1,0,0:0:0:0: +195,372,127512,6,0,P|190:282|262:228,1,187,6|8,0:0|0:0,0:0:0:0: +330,85,127858,2,0,P|334:174|262:228,1,187,2|2,0:0|0:0,0:0:0:0: +157,129,128204,2,0,L|251:135,1,93.5,8|0,0:0|0:0,0:0:0:0: +456,206,128435,5,2,0:0:0:0: +394,273,128551,2,0,L|188:261,1,187,2|2,0:0|0:0,0:0:0:0: +298,358,128897,2,0,P|341:372|387:364,1,93.5,2|0,0:0|0:0,0:0:0:0: +303,177,129127,2,0,P|259:162|213:170,1,93.5,8|0,0:0|0:0,0:0:0:0: +20,270,129358,6,0,L|206:262,1,187,2|8,0:0|0:0,0:0:0:0: +303,177,129704,2,0,L|117:185,1,187,2|2,0:0|0:0,0:0:0:0: +22,90,130051,2,0,P|82:85|120:118,1,93.5,8|0,0:0|0:0,0:0:0:0: +206,261,130281,5,2,0:0:0:0: +128,351,130397,2,0,P|86:271|116:185,1,187,2|2,0:0|0:0,0:0:0:0: +206,261,130743,2,0,L|225:365,1,93.5,2|0,0:0|0:0,0:0:0:0: +320,268,130974,2,0,L|300:163,1,93.5,8|0,0:0|0:0,0:0:0:0: +236,21,131204,6,0,P|189:99|223:182,1,187,2|8,0:0|0:0,0:0:0:0: +368,330,131551,2,0,P|414:252|380:169,1,187,2|2,0:0|0:0,0:0:0:0: +285,84,131897,2,8,L|302:175,1,93.5,8|0,0:0|0:0,0:0:0:0: +256,337,132127,5,2,0:0:0:0: +167,301,132243,2,0,P|234:242|320:268,1,187,2|2,0:0|0:0,0:0:0:0: +104,372,132589,2,0,P|57:369|10:367,1,93.5,2|0,0:0|0:0,0:0:0:0: +155,245,132820,2,0,P|201:242|248:240,1,93.5,8|0,0:0|0:0,0:0:0:0: +376,268,133051,5,2,0:0:0:0: +363,249,133108,1,2,0:0:0:0: +356,228,133166,1,2,0:0:0:0: +355,206,133224,1,2,0:0:0:0: +360,184,133281,1,10,0:0:0:0: +372,165,133339,1,2,0:0:0:0: +388,150,133397,1,10,0:0:0:0: +408,140,133454,1,2,0:0:0:0: +431,136,133512,1,2,1:0:0:0: +433,216,133743,1,8,0:0:0:0: +433,216,133858,1,8,0:0:0:0: +500,268,133973,5,2,0:0:0:0: +495,296,134031,1,2,0:0:0:0: +490,324,134088,1,2,0:0:0:0: +485,352,134146,1,2,0:0:0:0: +480,380,134204,2,0,B|334:389|359:290|190:308,1,280.5,2|0,1:0|0:0,0:0:0:0: +213,83,134666,2,0,P|238:121|235:167,1,93.5,8|0,0:0|0:0,0:0:0:0: +109,244,134897,6,0,L|-10:240,1,93.5,4|0,0:0|0:0,0:0:0:0: +236,167,135127,2,0,L|329:170,1,93.5,8|0,0:0|0:0,0:0:0:0: +208,383,135358,2,0,L|21:376,1,187,2|8,0:0|0:0,0:0:0:0: +297,282,135704,2,0,L|203:278,1,93.5,0|2,0:0|0:0,0:0:0:0: +147,80,135935,6,0,L|240:83,1,93.5,0|8,0:0|0:0,0:0:0:0: +397,51,136166,2,0,L|347:130,1,93.5,0|2,0:0|0:0,0:0:0:0: +297,282,136397,2,0,L|253:199,1,93.5,0|8,0:0|0:0,0:0:0:0: +397,51,136627,1,0,0:0:0:0: +502,166,136743,6,0,L|409:169,1,93.5,2|0,0:0|0:0,0:0:0:0: +297,282,136974,2,0,L|390:285,1,93.5,8|0,0:0|0:0,0:0:0:0: +296,151,137204,6,0,L|203:154,1,93.5,2|0,0:0|0:0,0:0:0:0: +89,242,137435,2,0,L|182:245,1,93.5,8|0,0:0|0:0,0:0:0:0: +220,337,137666,6,0,L|-2:329,1,187,2|8,0:0|0:0,0:0:0:0: +202,154,138012,2,0,L|424:161,1,187,2|2,0:0|0:0,0:0:0:0: +338,61,138358,2,0,L|244:57,1,93.5,8|0,0:0|0:0,0:0:0:0: +431,315,138589,6,0,B|460:189|460:189|452:223|480:258,1,187,2|8,0:0|0:0,0:0:0:0: +507,343,138935,1,0,0:0:0:0: +507,343,139051,2,0,B|416:313|411:386|300:358,1,187,2|8,0:0|0:0,0:0:0:0: +177,244,139397,1,0,0:0:0:0: +177,244,139512,6,0,B|268:214|273:287|384:259,1,187,2|8,0:0|0:0,0:0:0:0: +424,173,139858,1,0,0:0:0:0: +339,99,139974,2,0,L|328:-1,1,93.5,2|2,0:0|0:0,0:0:0:0: +177,244,140204,2,0,L|167:151,1,93.5,8|0,0:0|0:0,0:0:0:0: +248,95,140435,6,0,L|257:187,1,93.5,2|0,0:0|0:0,0:0:0:0: +96,300,140666,2,0,L|86:207,1,93.5,8|0,0:0|0:0,0:0:0:0: +167,151,140897,6,0,L|177:244,1,93.5,2|0,0:0|0:0,0:0:0:0: +355,315,141127,2,0,L|346:222,1,93.5,8|0,0:0|0:0,0:0:0:0: +263,380,141358,6,0,P|317:344|444:352,1,187,2|8,0:0|0:0,0:0:0:0: +177,244,141704,1,0,0:0:0:0: +177,244,141820,2,0,P|123:280|-4:272,1,187,2|8,0:0|0:0,0:0:0:0: +0,182,142166,1,0,0:0:0:0: +176,58,142281,6,0,L|167:151,1,93.5,2|0,0:0|0:0,0:0:0:0: +345,221,142512,2,0,L|355:129,1,93.5,8|0,0:0|0:0,0:0:0:0: +257,188,142743,6,0,L|248:281,1,93.5,2|0,0:0|0:0,0:0:0:0: +426,351,142974,2,0,L|435:258,1,93.5,8|0,0:0|0:0,0:0:0:0: +203,348,143204,6,0,P|239:361|326:297,1,140.25,2|0,0:0|0:0,0:0:0:0: +435,258,143435,6,0,P|398:267|316:196,1,126.224996147919,8|0,0:0|0:0,0:0:0:0: +257,188,143666,6,0,P|292:194|361:121,1,112.2,2|0,0:0|0:0,0:0:0:0: +419,136,143897,6,0,P|388:138|333:70,1,98.1749970039369,8|0,0:0|0:0,0:0:0:0: +257,188,144127,6,0,L|275:1,1,187,2|8,0:0|0:0,0:0:0:0: +435,258,144474,1,0,0:0:0:0: +435,258,144589,2,0,L|453:71,1,187,2|8,0:0|0:0,0:0:0:0: +149,337,144935,1,0,0:0:0:0: +149,337,145051,6,0,L|159:232,1,93.5,2|0,0:0|0:0,0:0:0:0: +353,153,145281,2,0,L|342:257,1,93.5,8|0,0:0|0:0,0:0:0:0: +169,318,145512,6,0,L|181:199,1,93.5,2|0,0:0|0:0,0:0:0:0: +332,171,145742,2,0,L|319:300,1,93.5,8|0,0:0|0:0,0:0:0:0: +95,131,145974,6,0,L|104:28,1,93.5,2|0,0:0|0:0,0:0:0:0: +247,76,146204,2,0,L|237:169,1,93.5,8|0,0:0|0:0,0:0:0:0: +166,150,146435,2,0,L|176:57,1,93.5,2|0,0:0|0:0,0:0:0:0: +318,95,146666,2,0,L|308:188,1,93.5,8|0,0:0|0:0,0:0:0:0: +475,319,146897,6,0,L|465:216,1,93.5,2|0,0:0|0:0,0:0:0:0: +322,263,147127,2,0,L|332:357,1,93.5,8|0,0:0|0:0,0:0:0:0: +403,338,147358,2,0,L|394:245,1,93.5,2|0,0:0|0:0,0:0:0:0: +252,283,147589,2,0,L|261:376,1,93.5,8|0,0:0|0:0,0:0:0:0: +38,368,147820,6,0,L|140:358,1,93.5,2|0,0:0|0:0,0:0:0:0: +93,215,148050,2,0,L|-1:224,1,93.5,8|0,0:0|0:0,0:0:0:0: +247,203,148281,1,2,0:0:0:0: +186,101,148397,1,8,0:0:0:0: +365,200,148512,1,8,0:0:0:0: +189,304,148627,1,8,0:0:0:0: +237,20,148743,5,2,0:0:0:0: +95,132,148858,1,2,0:0:0:0: +95,132,148916,1,2,0:0:0:0: +95,132,148974,1,10,0:0:0:0: +276,126,149089,1,0,0:0:0:0: +125,24,149204,5,2,0:0:0:0: +189,196,149320,1,8,0:0:0:0: +361,132,149435,1,8,0:0:0:0: +425,304,149551,1,8,0:0:0:0: +330,357,149666,6,0,P|240:297|79:327,1,280.5,6|0,0:0|0:0,0:0:0:0: +237,168,150589,2,0,P|327:108|488:138,1,280.5,2|0,0:0|0:0,0:0:0:0: +401,288,151512,2,0,L|122:257,1,280.5,2|0,0:0|0:0,0:0:0:0: +44,309,152320,1,8,0:0:0:0: +44,309,152377,1,8,0:0:0:0: +44,309,152435,5,10,0:0:0:0: +44,197,152551,1,2,0:0:0:0: +151,162,152666,1,8,0:0:0:0: +216,253,152781,1,2,0:0:0:0: +281,344,152897,1,2,0:0:0:0: +388,309,153012,1,2,0:0:0:0: +388,197,153128,1,8,0:0:0:0: +281,162,153243,1,2,0:0:0:0: +216,253,153358,6,0,L|503:229,1,280.5,6|0,0:0|0:0,0:0:0:0: +296,131,154281,2,0,L|9:155,1,280.5,2|0,0:0|0:0,0:0:0:0: +148,338,155204,2,0,L|428:315,1,280.5,2|0,0:0|0:0,0:0:0:0: +492,225,156127,5,10,0:0:0:0: +492,225,156185,1,8,0:0:0:0: +492,225,156243,1,8,0:0:0:0: +320,168,156358,1,8,0:0:0:0: +427,315,156474,1,8,0:0:0:0: +427,315,156531,1,8,0:0:0:0: +427,315,156589,1,10,0:0:0:0: +427,133,156704,1,8,0:0:0:0: +320,280,156820,1,10,0:0:0:0: +492,225,156935,1,8,0:0:0:0: +320,280,157051,6,0,B|194:258|174:358|44:320,1,280.5,6|0,0:0|0:0,0:0:0:0: +0,138,157974,2,0,P|88:81|186:211,1,280.5,2|0,0:0|0:0,0:0:0:0: +281,344,158897,2,0,L|312:65,1,280.5,2|0,0:0|0:0,0:0:0:0: +419,30,159704,1,8,0:0:0:0: +419,30,159762,1,8,0:0:0:0: +419,30,159820,5,10,0:0:0:0: +484,121,159935,1,8,0:0:0:0: +419,212,160051,1,8,0:0:0:0: +312,177,160166,1,8,0:0:0:0: +312,65,160281,1,10,0:0:0:0: +205,30,160397,1,8,0:0:0:0: +140,121,160513,1,8,0:0:0:0: +206,210,160627,1,8,0:0:0:0: +312,65,160743,6,0,L|418:48,1,93.5,6|0,0:0|0:0,0:0:0:0: +484,121,160974,2,0,L|378:138,1,93.5,8|0,0:0|0:0,0:0:0:0: +206,210,161204,6,0,L|312:193,1,93.5,2|0,0:0|0:0,0:0:0:0: +378,266,161435,2,0,L|272:283,1,93.5,8|0,0:0|0:0,0:0:0:0: +44,197,161666,6,0,L|33:289,1,93.5,2|0,0:0|0:0,0:0:0:0: +116,362,161897,2,0,L|126:269,1,93.5,8|0,0:0|0:0,0:0:0:0: +216,117,162127,6,0,L|205:209,1,93.5,2|0,0:0|0:0,0:0:0:0: +288,282,162358,2,0,L|298:189,1,93.5,8|0,0:0|0:0,0:0:0:0: +388,124,162589,6,0,P|436:122|482:167,1,93.5,2|0,0:0|0:0,0:0:0:0: +494,219,162820,2,0,P|446:221|400:176,1,93.5,8|0,0:0|0:0,0:0:0:0: +496,64,163051,2,0,P|498:110|472:148,1,93.5,2|0,0:0|0:0,0:0:0:0: +386,278,163281,2,0,P|383:232|410:194,1,93.5,8|0,0:0|0:0,0:0:0:0: +511,346,163512,6,0,L|397:359,1,93.5,2|0,0:0|0:0,0:0:0:0: +195,271,163743,2,0,L|287:281,1,93.5,8|0,0:0|0:0,0:0:0:0: +410,194,163974,6,0,L|296:207,1,93.5,2|0,0:0|0:0,0:0:0:0: +94,119,164205,2,0,L|186:129,1,93.5,8|0,0:0|0:0,0:0:0:0: +440,44,164435,6,0,P|407:76|401:122,1,93.5,2|0,0:0|0:0,0:0:0:0: +458,266,164666,2,0,P|445:221|409:193,1,93.5,8|0,0:0|0:0,0:0:0:0: +255,171,164897,2,0,P|299:182|342:164,1,93.5,2|0,0:0|0:0,0:0:0:0: +508,108,165127,1,8,0:0:0:0: +494,219,165243,1,8,0:0:0:0: +494,219,165301,1,8,0:0:0:0: +494,219,165358,6,0,L|482:321,1,93.5,2|0,0:0|0:0,0:0:0:0: +341,164,165589,1,10,0:0:0:0: +341,164,165704,1,2,0:0:0:0: +306,264,165820,5,10,0:0:0:0: +271,234,165877,1,10,0:0:0:0: +225,232,165935,1,2,0:0:0:0: +188,258,165993,1,2,0:0:0:0: +176,303,166050,1,10,0:0:0:0: +164,348,166108,1,10,0:0:0:0: +127,374,166166,1,10,0:0:0:0: +81,372,166224,1,10,0:0:0:0: +46,343,166281,6,0,P|47:239|141:235,1,187,6|8,0:0|0:0,0:0:0:0: +225,232,166627,1,0,0:0:0:0: +225,232,166743,2,0,L|257:25,1,187,2|8,0:0|0:0,0:0:0:0: +150,1,167089,1,0,0:0:0:0: +150,1,167204,6,0,P|137:59|160:95,1,93.5,2|0,0:0|0:0,0:0:0:0: +235,165,167435,2,0,L|379:150,1,140.25,8|0,0:0|0:0,0:0:0:0: +426,172,167666,2,0,L|311:183,1,93.5,2|0,0:0|0:0,0:0:0:0: +223,301,167897,2,0,L|337:289,1,93.5,8|0,0:0|0:0,0:0:0:0: +476,116,168127,6,0,P|416:98|365:216,1,187,2|8,0:0|0:0,0:0:0:0: +425,314,168474,2,0,P|470:271|393:167,1,187,2|2,0:0|0:0,0:0:0:0: +280,170,168820,2,0,P|286:218|342:259,1,93.5,8|0,0:0|0:0,0:0:0:0: +352,356,169051,6,0,L|239:341,1,93.5,2|0,0:0|0:0,0:0:0:0: +122,225,169281,2,0,L|215:238,1,93.5,8|0,0:0|0:0,0:0:0:0: +425,171,169512,2,0,L|332:158,1,93.5,2|0,0:0|0:0,0:0:0:0: +200,91,169743,1,10,0:0:0:0: +203,126,169800,1,2,0:0:0:0: +206,163,169858,1,2,0:0:0:0: +211,201,169916,1,2,0:0:0:0: +215,238,169974,6,0,P|173:305|43:277,1,187,2|8,0:0|0:0,0:0:0:0: +29,212,170320,1,0,0:0:0:0: +29,212,170435,2,0,L|57:7,1,187,2|8,0:0|0:0,0:0:0:0: +127,111,170781,1,0,0:0:0:0: +127,111,170897,6,0,P|172:147|220:138,1,93.5,2|0,0:0|0:0,0:0:0:0: +389,111,171127,2,0,P|315:119|279:171,1,140.25,8|0,0:0|0:0,0:0:0:0: +264,184,171358,2,0,P|268:220|279:296,1,93.5,2|0,0:0|0:0,0:0:0:0: +470,358,171589,2,0,P|465:321|455:246,1,93.5,8|0,0:0|0:0,0:0:0:0: +508,108,171820,6,0,B|432:101|432:101|411:107|411:107|316:99,1,187,2|8,0:0|0:0,0:0:0:0: +214,201,172166,1,0,0:0:0:0: +214,201,172281,2,0,B|289:207|289:207|310:201|310:201|405:209,1,187,2|8,0:0|0:0,0:0:0:0: +223,301,172628,1,0,0:0:0:0: +223,301,172743,2,0,L|83:288,1,140.25,2|0,0:0|0:0,0:0:0:0: +59,302,172974,2,0,L|152:310,1,93.5,8|0,0:0|0:0,0:0:0:0: +329,295,173204,2,0,P|332:355|307:389,1,93.5,2|0,0:0|0:0,0:0:0:0: +264,186,173435,2,0,P|261:126|286:92,1,93.5,8|0,0:0|0:0,0:0:0:0: +170,178,173666,6,0,B|75:177|99:249|4:249,1,187,2|8,0:0|0:0,0:0:0:0: +203,99,174012,1,0,0:0:0:0: +203,99,174127,2,0,B|297:99|273:27|368:27,1,187,2|8,0:0|0:0,0:0:0:0: +484,72,174474,1,0,0:0:0:0: +484,72,174589,6,0,P|475:133|458:257,1,187,2|8,0:0|0:0,0:0:0:0: +361,315,174935,1,0,0:0:0:0: +361,315,175051,2,0,P|355:274|348:222,1,93.5,2|0,0:0|0:0,0:0:0:0: +249,292,175281,2,0,P|254:332|262:385,1,93.5,8|0,0:0|0:0,0:0:0:0: +398,152,175512,6,0,P|312:207|229:175,1,187,2|8,0:0|0:0,0:0:0:0: +164,280,175858,1,0,0:0:0:0: +164,280,175974,2,0,P|90:226|3:249,1,187,2|8,0:0|0:0,0:0:0:0: +237,182,176320,1,0,0:0:0:0: +237,182,176435,6,0,B|229:94|283:97|266:-7,1,187,2|8,0:0|0:0,0:0:0:0: +151,40,176781,1,0,0:0:0:0: +0,156,176897,2,0,L|93:149,1,93.5,2|0,0:0|0:0,0:0:0:0: +164,280,177127,2,0,L|62:286,1,93.5,8|0,0:0|0:0,0:0:0:0: +208,145,177358,5,6,0:0:0:0: +242,59,177474,1,0,0:0:0:0: +334,63,177589,1,8,0:0:0:0: +358,154,177704,1,0,0:0:0:0: +281,204,177820,1,2,0:0:0:0: +208,145,177935,1,0,0:0:0:0: +129,196,178051,1,8,0:0:0:0: +153,286,178166,1,0,0:0:0:0: +246,290,178281,6,0,L|235:384,1,93.5,2|0,0:0|0:0,0:0:0:0: +142,378,178512,2,0,L|153:286,1,93.5,8|0,0:0|0:0,0:0:0:0: +139,103,178743,2,0,L|128:197,1,93.5,2|0,0:0|0:0,0:0:0:0: +35,191,178974,2,0,L|45:98,1,93.5,8|0,0:0|0:0,0:0:0:0: +139,103,179204,6,0,P|186:128|228:120,1,93.5,2|0,0:0|0:0,0:0:0:0: +362,179,179435,2,0,P|316:174|277:198,1,93.5,8|0,0:0|0:0,0:0:0:0: +392,365,179666,5,2,0:0:0:0: +464,306,179781,1,8,0:0:0:0: +464,306,179839,1,8,0:0:0:0: +464,306,179897,1,8,0:0:0:0: +378,270,180012,1,8,0:0:0:0: +450,211,180127,5,2,0:0:0:0: +362,179,180243,1,8,0:0:0:0: +362,179,180301,1,8,0:0:0:0: +362,179,180358,2,0,L|257:164,1,93.5,8|0,0:0|0:0,0:0:0:0: +160,37,180589,5,2,0:0:0:0: +105,123,180704,1,8,0:0:0:0: +269,165,180820,1,8,0:0:0:0: +259,62,180935,1,8,0:0:0:0: +172,203,181051,6,0,P|205:334|201:384,1,187,6|8,0:0|0:0,0:0:0:0: +121,328,181397,1,0,0:0:0:0: +37,358,181512,2,0,P|4:227|8:177,1,187,2|8,0:0|0:0,0:0:0:0: +58,98,181858,1,0,0:0:0:0: +58,98,181974,6,0,P|104:96|150:106,1,93.5,2|0,0:0|0:0,0:0:0:0: +381,158,182204,2,0,P|334:191|224:165,1,140.25,8|0,0:0|0:0,0:0:0:0: +214,161,182435,2,0,L|223:260,1,93.5,2|0,0:0|0:0,0:0:0:0: +184,337,182666,1,8,0:0:0:0: +278,329,182781,6,0,B|383:304|353:370|477:341,1,187,2|2,0:0|0:0,0:0:0:0: +505,267,183127,2,0,P|488:184|474:75,1,187,8|2,0:0|0:0,0:0:0:0: +403,21,183474,2,0,P|382:61|397:133,1,93.5,0|8,0:0|0:0,0:0:0:0: +331,198,183704,1,0,0:0:0:0: +287,106,183820,6,0,P|225:59|118:89,1,187,2|8,0:0|0:0,0:0:0:0: +90,168,184166,1,0,0:0:0:0: +29,98,184281,2,0,P|36:44|36:0,1,93.5,2|0,0:0|0:0,0:0:0:0: +183,152,184512,2,0,P|176:206|176:250,1,93.5,8|0,0:0|0:0,0:0:0:0: +134,324,184743,6,0,P|183:295|325:315,1,187,2|8,0:0|0:0,0:0:0:0: +370,231,185089,1,0,0:0:0:0: +357,132,185204,2,0,P|308:161|166:141,1,187,2|8,0:0|0:0,0:0:0:0: +102,104,185551,1,0,0:0:0:0: +102,104,185666,6,0,L|89:-11,1,93.5,2|0,0:0|0:0,0:0:0:0: +103,202,185897,2,0,P|73:251|84:354,1,140.25,8|0,0:0|0:0,0:0:0:0: +101,371,186127,2,0,L|213:361,1,93.5,2|0,0:0|0:0,0:0:0:0: +281,384,186358,1,8,0:0:0:0: +254,295,186474,6,0,P|248:229|231:92,1,187,2|2,0:0|0:0,0:0:0:0: +274,29,186820,2,0,P|327:8|437:76,1,187,8|2,0:0|0:0,0:0:0:0: +509,130,187166,1,0,0:0:0:0: +422,165,187281,2,0,P|381:187|321:225,1,93.5,8|0,0:0|0:0,0:0:0:0: +268,273,187512,6,0,P|209:225|94:253,1,187,2|8,0:0|0:0,0:0:0:0: +25,205,187858,1,0,0:0:0:0: +36,296,187974,2,0,L|43:393,1,93.5,2|0,0:0|0:0,0:0:0:0: +95,151,188204,2,0,L|88:54,1,93.5,8|0,0:0|0:0,0:0:0:0: +164,6,188435,6,0,P|233:5|369:38,1,187,2|8,0:0|0:0,0:0:0:0: +438,57,188781,1,0,0:0:0:0: +367,123,188897,2,0,P|298:124|162:91,1,187,2|8,0:0|0:0,0:0:0:0: +95,151,189243,1,0,0:0:0:0: +95,151,189358,6,0,L|106:252,1,93.5,2|0,0:0|0:0,0:0:0:0: +54,321,189589,2,0,P|109:298|219:381,1,187,8|2,0:0|0:0,0:0:0:0: +285,305,189935,1,0,0:0:0:0: +370,338,190051,2,0,P|419:338|462:310,1,93.5,8|0,0:0|0:0,0:0:0:0: +497,235,190281,6,0,P|485:171|468:44,1,187,2|8,0:0|0:0,0:0:0:0: +387,10,190627,1,0,0:0:0:0: +387,10,190743,2,0,L|377:109,1,93.5,2|0,0:0|0:0,0:0:0:0: +294,258,190974,2,0,L|304:159,1,93.5,8|0,0:0|0:0,0:0:0:0: +291,73,191204,6,0,P|239:22|128:42,1,187,2|8,0:0|0:0,0:0:0:0: +110,126,191551,1,0,0:0:0:0: +161,202,191666,2,0,P|209:193|250:142,1,93.5,2|0,0:0|0:0,0:0:0:0: +133,37,191897,2,0,P|83:37|30:77,1,93.5,8|0,0:0|0:0,0:0:0:0: +13,160,192127,6,0,B|45:242|165:276|256:192|256:192|347:108|467:142|499:224,1,561,2|8,0:0|0:0,0:0:0:0: +373,263,193051,1,2,0:0:0:0: +13,224,193974,6,0,B|45:142|165:108|256:192|256:192|347:276|467:242|499:160,1,561,2|8,0:0|0:0,0:0:0:0: +373,121,194898,1,2,0:0:0:0: +139,263,195127,1,8,0:0:0:0: +343,342,195358,1,2,0:0:0:0: +373,121,195589,2,8,L|359:5,1,93.5 +232,190,195820,6,0,P|228:235|251:275,1,93.5,2|10,0:0|0:0,0:0:0:0: +447,186,196051,2,0,P|470:147|461:88,1,93.5,10|10,0:0|0:0,0:0:0:0: +327,213,196281,1,10,0:0:0:0: +512,262,196397,5,10,0:0:0:0: +496,271,196454,1,2,0:0:0:0: +483,284,196512,1,10,0:0:0:0: +472,299,196570,1,10,0:0:0:0: +463,316,196627,1,10,0:0:0:0: +456,335,196685,1,10,0:0:0:0: +452,358,196743,5,10,0:0:0:0: +426,322,196801,1,10,0:0:0:0: +390,303,196858,1,10,0:0:0:0: +347,295,196916,1,10,0:0:0:0: +303,298,196974,1,10,0:0:0:0: +269,319,197031,1,10,0:0:0:0: +240,350,197089,1,10,0:0:0:0: +199,361,197147,1,10,0:0:0:0: +151,345,197204,5,10,0:0:0:0: +112,305,197262,1,10,0:0:0:0: +104,251,197320,1,10,0:0:0:0: +127,202,197377,1,10,0:0:0:0: +172,171,197435,1,10,0:0:0:0: +226,173,197493,1,10,0:0:0:0: +267,207,197551,1,10,0:0:0:0: +319,215,197608,1,10,0:0:0:0: +364,185,197666,6,0,P|371:142|384:-12,1,187,6|8,0:0|0:0,0:0:0:0: +293,44,198012,1,0,0:0:0:0: +464,131,198127,2,0,P|457:174|444:328,1,187,2|8,0:0|0:0,0:0:0:0: +364,185,198473,1,0,0:0:0:0: +249,278,198589,6,0,P|198:265|118:255,1,93.5,2|0,0:0|0:0,0:0:0:0: +30,99,198820,1,8,0:0:0:0: +30,99,199051,2,0,P|76:91|121:79,1,93.5,2|0,0:0|0:0,0:0:0:0: +199,27,199281,1,8,0:0:0:0: +113,175,199396,1,0,0:0:0:0: +355,186,199512,6,0,P|284:122|191:131,1,187,2|8,0:0|0:0,0:0:0:0: +113,175,199858,1,0,0:0:0:0: +180,321,199974,2,0,P|188:279|192:191,1,93.5,2|0,0:0|0:0,0:0:0:0: +16,163,200204,2,0,P|8:205|4:293,1,93.5,8|0,0:0|0:0,0:0:0:0: +86,315,200435,5,2,0:0:0:0: +192,228,200551,1,0,0:0:0:0: +71,107,200666,2,0,B|57:79|57:79|74:12,1,93.5,8|0,0:0|0:0,0:0:0:0: +268,190,200897,2,0,B|282:218|282:218|265:285,1,93.5,2|0,0:0|0:0,0:0:0:0: +86,200,201127,2,0,L|187:185,1,93.5,8|0,0:0|0:0,0:0:0:0: +512,85,201358,6,0,P|428:94|348:27,1,187,2|8,0:0|0:0,0:0:0:0: +247,2,201704,1,0,0:0:0:0: +190,93,201820,2,0,P|185:138|171:219,1,93.5,2|0,0:0|0:0,0:0:0:0: +357,153,202051,2,0,P|364:198|384:277,1,93.5,8|0,0:0|0:0,0:0:0:0: +427,341,202281,5,2,0:0:0:0: +449,182,202397,1,0,0:0:0:0: +287,258,202512,2,0,L|190:278,1,93.5,8|0,0:0|0:0,0:0:0:0: +10,123,202743,2,0,B|78:138|78:138|103:170|103:170|182:186,1,187,2|8,0:0|0:0,0:0:0:0: +249,122,203089,1,0,0:0:0:0: +173,0,203204,6,0,P|165:46|162:92,1,93.5,2|0,0:0|0:0,0:0:0:0: +327,194,203435,2,0,P|334:147|337:101,1,93.5,8|0,0:0|0:0,0:0:0:0: +78,274,203666,2,0,P|159:213|264:257,1,187,2|8,0:0|0:0,0:0:0:0: +297,307,204012,1,0,0:0:0:0: +379,366,204127,6,0,P|387:315|390:269,1,93.5,2|0,0:0|0:0,0:0:0:0: +327,194,204358,1,8,0:0:0:0: +357,100,204474,1,0,0:0:0:0: +512,159,204589,6,0,L|420:176,1,93.5,2|0,0:0|0:0,0:0:0:0: +268,121,204820,1,8,0:0:0:0: +385,12,204935,1,0,0:0:0:0: +357,100,205051,6,0,L|160:75,1,187,2|8,0:0|0:0,0:0:0:0: +1,107,205397,1,0,0:0:0:0: +78,143,205512,2,0,B|94:114|94:114|74:32,1,93.5,2|0,0:0|0:0,0:0:0:0: +1,291,205743,2,0,B|-15:320|-15:320|5:402,1,93.5,8|0,0:0|0:0,0:0:0:0: +130,229,205974,6,0,L|7:215,1,93.5,2|0,0:0|0:0,0:0:0:0: +183,327,206204,1,8,0:0:0:0: +234,177,206320,1,0,0:0:0:0: +286,277,206435,2,0,P|374:289|468:223,1,187,2|8,0:0|0:0,0:0:0:0: +425,123,206781,1,0,0:0:0:0: +322,180,206897,6,0,P|224:170|135:140,1,187,2|8,0:0|0:0,0:0:0:0: +140,142,207358,2,0,P|150:195|154:258,1,93.5,2|0,0:0|0:0,0:0:0:0: +323,370,207589,2,0,P|313:317|309:254,1,93.5,8|0,0:0|0:0,0:0:0:0: +62,268,207820,6,0,P|127:324|222:300,1,187,2|8,0:0|0:0,0:0:0:0: +243,204,208166,1,0,0:0:0:0: +309,277,208281,2,0,P|365:282|426:290,1,93.5,2|0,0:0|0:0,0:0:0:0: +461,105,208512,2,0,P|404:99|344:92,1,93.5,8|0,0:0|0:0,0:0:0:0: +481,338,208743,6,0,P|492:262|383:195,2,187,2|8|2,0:0|0:0|0:0,0:0:0:0: +323,370,209320,1,0,0:0:0:0: +309,277,209435,6,0,L|289:153,1,93.5,8|0,0:0|0:0,0:0:0:0: +145,71,209666,2,0,L|262:115,1,93.5,2|0,0:0|0:0,0:0:0:0: +401,28,209897,2,0,L|303:107,1,93.5,8|0,0:0|0:0,0:0:0:0: +206,195,210127,5,2,0:0:0:0: +263,16,210243,1,0,0:0:0:0: +380,159,210358,1,8,0:0:0:0: +380,159,210589,6,0,P|333:151|288:141,1,93.5,2|0,0:0|0:0,0:0:0:0: +197,96,210820,1,8,0:0:0:0: +116,158,210935,1,0,0:0:0:0: +12,43,211051,6,0,P|58:50|103:60,1,93.5,2|0,0:0|0:0,0:0:0:0: +206,195,211281,1,8,0:0:0:0: +278,43,211397,1,0,0:0:0:0: +448,187,211512,6,0,P|357:198|287:140,1,187,2|8,0:0|0:0,0:0:0:0: +197,96,211858,1,0,0:0:0:0: +206,195,211974,5,10,0:0:0:0: +353,85,212089,1,0,0:0:0:0: +234,360,212204,1,8,0:0:0:0: +116,158,212320,1,8,0:0:0:0: +320,269,212435,6,0,P|392:256|515:238,1,187,6|8,0:0|0:0,0:0:0:0: +456,334,212781,1,0,0:0:0:0: +354,166,212897,2,0,P|282:179|159:197,1,187,2|8,0:0|0:0,0:0:0:0: +65,238,213243,1,0,0:0:0:0: +129,370,213358,6,0,P|139:303|154:247,1,93.5,2|0,0:0|0:0,0:0:0:0: +81,67,213589,1,8,0:0:0:0: +81,67,213820,2,0,P|90:112|96:159,1,93.5,2|0,0:0|0:0,0:0:0:0: +60,324,214051,1,8,0:0:0:0: +224,263,214166,1,0,0:0:0:0: +65,238,214281,6,0,L|-38:229,1,93.5,2|0,0:0|0:0,0:0:0:0: +130,367,214512,1,8,0:0:0:0: +304,314,214628,1,0,0:0:0:0: +224,263,214743,2,0,B|206:293|206:293|221:349,1,93.5,2|0,0:0|0:0,0:0:0:0: +366,147,214974,2,0,B|384:117|384:117|368:60,1,93.5,8|0,0:0|0:0,0:0:0:0: +204,176,215204,5,2,0:0:0:0: +361,243,215320,1,0,0:0:0:0: +294,103,215435,2,0,L|287:201,1,93.5,8|0,0:0|0:0,0:0:0:0: +50,91,215666,2,0,P|102:47|225:55,1,187,2|8,0:0|0:0,0:0:0:0: +432,36,216012,5,8,0:0:0:0: +432,36,216070,1,8,0:0:0:0: +432,36,216127,2,0,P|383:29|310:9,1,93.5,2|0,0:0|0:0,0:0:0:0: +393,222,216358,2,0,P|426:189|462:159,1,93.5,8|0,0:0|0:0,0:0:0:0: +295,134,216589,2,0,P|218:137|115:203,1,187,2|8,0:0|0:0,0:0:0:0: +48,248,216935,1,0,0:0:0:0: +18,62,217051,6,0,L|41:158,1,93.5,2|0,0:0|0:0,0:0:0:0: +131,296,217281,2,0,B|143:228|143:228|125:193|125:193|141:100,1,187,8|2,0:0|0:0,0:0:0:0: +279,110,217627,2,0,L|216:186,1,93.5,0|8,0:0|0:0,0:0:0:0: +131,296,217858,1,0,0:0:0:0: +194,368,217974,6,0,P|223:323|219:266,1,93.5,2|0,0:0|0:0,0:0:0:0: +48,248,218204,2,0,P|35:292|46:337,1,93.5,8|0,0:0|0:0,0:0:0:0: +274,225,218435,6,0,L|299:115,1,93.5,2|0,0:0|0:0,0:0:0:0: +2,80,218666,2,0,L|22:171,1,93.5,8|0,0:0|0:0,0:0:0:0: +254,53,218897,6,0,P|224:17|104:42,1,140.25,2|0,0:0|0:0,0:0:0:0: +195,199,219127,6,0,P|238:181|266:111,1,98.1749970039369,8|0,0:0|0:0,0:0:0:0: +82,73,219358,6,0,P|76:119|145:189,1,126.224996147919,2|0,2:0|2:0,2:0:0:0: +171,134,219589,6,0,L|182:63,1,56.0999982879639,8|0,0:0|0:0,0:0:0:0: +327,237,219820,6,0,P|229:220|153:292,1,187,2|8,0:0|0:0,0:0:0:0: +0,315,220166,1,0,0:0:0:0: +71,260,220281,2,0,B|87:291|87:291|74:358,1,93.5,2|0,0:0|0:0,0:0:0:0: +96,99,220512,2,0,B|80:68|80:68|93:1,1,93.5,8|0,0:0|0:0,0:0:0:0: +121,182,220743,6,0,L|9:170,1,93.5,2|0,0:0|0:0,0:0:0:0: +161,53,220974,1,8,0:0:0:0: +242,151,221089,1,0,0:0:0:0: +281,9,221204,2,0,P|379:-2|471:71,1,187,2|8,0:0|0:0,0:0:0:0: +389,306,221551,5,8,0:0:0:0: +389,306,221608,1,8,0:0:0:0: +389,306,221666,2,0,P|370:262|376:195,1,93.5,2|0,0:0|0:0,0:0:0:0: +427,130,221897,2,0,L|234:151,1,187,8|2,0:0|0:0,0:0:0:0: +120,283,222243,1,0,0:0:0:0: +210,299,222358,6,0,P|200:259|163:181,1,93.5,8|0,0:0|0:0,0:0:0:0: +267,2,222589,2,0,P|237:30|188:101,1,93.5,2|0,0:0|0:0,0:0:0:0: +0,103,222820,2,0,P|39:114|125:121,1,93.5,8|0,0:0|0:0,0:0:0:0: +301,317,223051,6,0,P|261:305|175:298,1,93.5,2|0,0:0|0:0,0:0:0:0: +122,344,223281,1,8,0:0:0:0: +180,210,223397,1,0,0:0:0:0: +323,244,223512,6,0,P|384:252|484:175,1,187,2|8,0:0|0:0,0:0:0:0: +425,99,223858,2,0,P|364:91|264:168,1,187,2|2,0:0|0:0,0:0:0:0: +180,210,224204,2,0,L|68:197,1,93.5,8|0,0:0|0:0,0:0:0:0: +5,166,224435,5,2,0:0:0:0: +64,286,224551,1,0,0:0:0:0: +154,124,224666,2,0,B|171:92|171:92|154:13,1,93.5,8|0,0:0|0:0,0:0:0:0: +84,78,224897,5,2,0:0:0:0: +241,118,225012,1,0,0:0:0:0: +84,78,225127,2,0,L|-13:89,1,93.5,8|0,0:0|0:0,0:0:0:0: +149,260,225358,6,0,B|251:234|212:312|352:265,1,187,2|8,0:0|0:0,0:0:0:0: +448,184,225704,2,0,B|324:153|324:153|310:177|284:198,1,187,2|2,0:0|0:0,0:0:0:0: +406,360,226051,2,0,P|412:311|418:257,1,93.5,8|0,0:0|0:0,0:0:0:0: +380,80,226281,1,2,0:0:0:0: +380,80,226512,5,8,0:0:0:0: +502,257,226627,1,2,0:0:0:0: +480,115,226743,5,2,0:0:0:0: +396,231,226858,1,8,0:0:0:0: +485,129,226974,5,8,0:0:0:0: +393,213,227089,1,8,0:0:0:0: +439,171,227204,6,0,L|296:157,1,140.25,2|2,0:0|0:0,0:0:0:0: +299,157,228588,6,0,P|275:197|283:252,1,93.5,2|0,0:0|0:0,0:0:0:0: +422,93,229280,2,0,P|428:47|407:6,1,93.5,2|0,0:0|0:0,0:0:0:0: +324,0,229973,1,2,0:0:0:0: +238,105,230204,5,0,0:0:0:0: +172,136,230434,1,0,0:0:0:0: +180,63,230665,1,0,0:0:0:0: +250,215,230896,6,0,L|231:364,1,140.25,2|2,0:0|0:0,0:0:0:0: +232,354,232280,6,0,L|125:371,1,93.5 +289,280,232973,2,0,L|396:297,1,93.5,2|0,0:0|0:0,0:0:0:0: +212,226,233665,1,2,0:0:0:0: +356,119,233896,5,0,0:0:0:0: +304,62,234127,1,0,0:0:0:0: +231,74,234357,1,0,0:0:0:0: +73,213,234588,6,0,L|216:227,1,140.25,2|2,0:0|0:0,0:0:0:0: +213,227,235973,6,0,P|237:187|229:132,1,93.5,2|0,0:0|0:0,0:0:0:0: +90,291,236665,2,0,P|83:336|107:379,1,93.5,2|0,0:0|0:0,0:0:0:0: +209,330,237357,6,0,L|147:318,1,46.75,2|0,0:0|0:0,0:0:0:0: +122,166,237819,1,0,0:0:0:0: +303,228,238050,1,0,0:0:0:0: +198,241,238280,6,0,P|161:169|186:107,1,140.25,2|0,0:0|0:0,0:0:0:0: +340,37,239204,5,0,0:0:0:0: +402,74,239434,1,0,0:0:0:0: +470,63,239665,1,2,0:0:0:0: +427,182,239896,5,0,0:0:0:0: +497,206,240127,1,0,0:0:0:0: +362,265,240357,5,2,0:0:0:0: +417,309,240588,1,0,0:0:0:0: +429,379,240819,1,0,0:0:0:0: +256,224,241050,5,2,0:0:0:0: +219,285,241280,1,0,0:0:0:0: +184,198,241511,1,0,0:0:0:0: +162,327,241742,1,0,0:0:0:0: +110,203,241973,6,0,P|64:196|16:229,1,93.5,2|2,0:0|0:0,0:0:0:0: +140,135,242665,2,0,P|148:95|140:71,1,46.75,2|0,0:0|0:0,0:0:0:0: +96,37,243127,1,2,0:0:0:0: +75,103,243357,1,0,0:0:0:0: +215,150,243588,5,2,0:0:0:0: +322,47,243819,1,0,0:0:0:0: +396,39,244050,2,0,L|448:32,1,46.75,2|0,0:0|0:0,0:0:0:0: +497,144,244511,2,0,L|395:133,1,93.5,2|0,0:0|0:0,0:0:0:0: +335,257,245204,1,0,0:0:0:0: +363,327,245434,6,0,P|405:282|382:203,1,140.25,2|0,0:0|0:0,0:0:0:0: +265,264,246357,1,2,0:0:0:0: +210,314,246588,1,0,0:0:0:0: +140,294,246819,2,0,P|132:264|133:230,1,46.75,2|0,0:0|0:0,0:0:0:0: +91,67,247280,5,2,0:0:0:0: +166,57,247511,2,0,P|163:80|157:102,1,46.75,2|0,0:0|0:0,0:0:0:0: +132,178,247973,2,0,L|194:170,2,46.75 +309,221,248665,1,2,0:0:0:0: +379,95,248896,1,0,0:0:0:0: +238,21,249127,6,0,P|228:61|228:79,1,46.75,2|0,0:0|0:0,0:0:0:0: +212,135,249588,1,0,0:0:0:0: +225,207,249819,1,2,0:0:0:0: +356,282,250050,6,0,P|366:242|366:224,1,46.75 +382,168,250511,1,0,0:0:0:0: +464,93,250742,6,0,B|441:76|441:76|363:99,1,93.5,2|0,0:0|0:0,0:0:0:0: +310,194,251550,2,0,L|228:184,1,70.1250026750566 +210,103,252247,1,0,0:0:0:0: +210,103,252702,6,0,L|141:111,1,70.1250026750566,2|0,0:0|0:0,0:0:0:0: +117,195,253506,1,2,0:0:0:0: +117,195,254095,6,0,L|36:184,1,70.1250026750566,2|2,0:0|0:0,0:0:0:0: +19,113,255580,1,2,0:0:0:0: +71,53,256480,6,0,P|126:48|182:100,1,122.718754681349,2|0,0:0|0:0,0:0:0:0: +211,259,257747,6,0,P|179:213|190:158,1,105.187504012585,2|0,0:0|0:0,0:0:0:0: +474,66,258892,6,0,P|433:121|242:116,1,271.734385365844,2|0,0:0|0:0,0:0:0:0: +210,216,263197,6,0,P|298:232|385:279,1,187,6|8,0:0|0:0,0:0:0:0: +456,330,263543,1,0,0:0:0:0: +465,242,263658,2,0,P|478:185|512:56,1,187,2|8,0:0|0:0,0:0:0:0: +425,84,264004,1,0,0:0:0:0: +368,19,264120,6,0,P|319:14|246:5,1,93.5,2|0,0:0|0:0,0:0:0:0: +280,139,264350,2,0,P|326:143|372:149,1,93.5,8|0,0:0|0:0,0:0:0:0: +197,57,264581,5,2,0:0:0:0: +121,35,264697,1,2,0:0:0:0: +50,67,264812,1,8,0:0:0:0: +21,139,264927,1,2,0:0:0:0: +37,213,265043,6,0,P|129:220|234:235,1,187,2|8,0:0|0:0,0:0:0:0: +314,216,265389,1,0,0:0:0:0: +283,308,265504,2,0,P|223:365|112:339,1,187,2|8,0:0|0:0,0:0:0:0: +57,295,265850,1,0,0:0:0:0: +142,255,265966,6,0,P|154:195|160:137,1,93.5,2|0,0:0|0:0,0:0:0:0: +52,120,266197,2,0,P|40:180|34:238,1,93.5,8|0,0:0|0:0,0:0:0:0: +217,109,266427,5,2,0:0:0:0: +297,102,266543,1,2,0:0:0:0: +368,138,266658,1,8,0:0:0:0: +406,207,266773,1,2,0:0:0:0: +404,283,266889,6,0,P|417:225|461:68,1,187,2|8,0:0|0:0,0:0:0:0: +503,22,267235,1,0,0:0:0:0: +411,13,267350,2,0,P|364:19|310:27,1,93.5,2|0,0:0|0:0,0:0:0:0: +237,75,267581,1,8,0:0:0:0: +169,6,267697,1,0,0:0:0:0: +148,102,267812,6,0,P|154:148|162:203,1,93.5,2|0,0:0|0:0,0:0:0:0: +333,216,268043,2,0,P|326:169|319:115,1,93.5,8|0,0:0|0:0,0:0:0:0: +63,146,268273,5,2,0:0:0:0: +11,206,268389,1,2,0:0:0:0: +2,283,268504,1,8,0:0:0:0: +36,352,268620,1,2,0:0:0:0: +107,381,268735,6,0,P|191:364|304:347,1,187,2|8,0:0|0:0,0:0:0:0: +370,299,269081,1,0,0:0:0:0: +333,216,269197,2,0,P|339:159|351:93,1,93.5,2|0,0:0|0:0,0:0:0:0: +288,44,269427,1,8,0:0:0:0: +368,2,269543,1,0,0:0:0:0: +512,90,269658,6,0,L|420:77,1,93.5,2|0,0:0|0:0,0:0:0:0: +173,113,269889,2,0,L|265:126,1,93.5,8|0,0:0|0:0,0:0:0:0: +381,222,270120,5,2,0:0:0:0: +306,244,270235,1,2,0:0:0:0: +232,267,270350,1,8,0:0:0:0: +158,289,270466,1,10,0:0:0:0: +154,280,270523,1,8,0:0:0:0: +150,272,270581,6,0,P|152:245|165:215,1,46.75,2|0,0:0|0:0,0:0:0:0: +136,76,270697,2,0,P|159:91|178:117,1,46.75,2|0,0:0|0:0,0:0:0:0: +318,154,270812,2,0,P|294:166|262:170,1,46.75,8|0,0:0|0:0,0:0:0:0: +103,158,270927,6,0,L|25:170,2,46.75,2|0|2,0:0|0:0|0:0,0:0:0:0: +407,33,271158,2,0,L|360:25,1,46.75,2|0,0:0|0:0,0:0:0:0: +216,97,271273,5,10,0:0:0:0: +221,91,271331,1,2,0:0:0:0: +227,87,271389,1,2,0:0:0:0: +235,86,271447,1,2,0:0:0:0: +243,87,271504,2,0,P|274:131|263:194,1,93.5,2|0,0:0|0:0,0:0:0:0: +389,311,271735,5,10,0:0:0:0: +367,268,271793,1,2,0:0:0:0: +377,221,271850,1,2,0:0:0:0: +417,190,271908,1,2,0:0:0:0: +466,194,271966,2,0,P|494:212|507:243,3,46.75,2|0|0|0,0:0|0:0|0:0|0:0,0:0:0:0: +439,260,272197,6,0,P|427:214|418:131,1,93.5,8|2,0:0|0:0,0:0:0:0: +436,94,272370,1,2,0:0:0:0: +441,88,272427,5,2,0:0:0:0: +391,121,272485,1,0,0:0:0:0: +334,118,272543,1,2,0:0:0:0: +285,90,272600,1,0,0:0:0:0: +262,39,272658,1,8,0:0:0:0: +219,3,272716,1,0,0:0:0:0: +163,0,272773,2,0,L|110:14,1,46.75,2|0,0:0|0:0,0:0:0:0: +13,60,272889,5,10,0:0:0:0: +49,87,272947,1,8,0:0:0:0: +61,128,273004,1,8,0:0:0:0: +53,174,273062,1,8,0:0:0:0: +26,207,273120,1,8,0:0:0:0: +13,249,273177,1,0,0:0:0:0: +21,291,273235,2,0,L|33:337,1,46.75,2|0,0:0|0:0,0:0:0:0: +126,380,273350,5,2,0:0:0:0: +162,383,273408,1,2,0:0:0:0: +194,367,273466,1,2,0:0:0:0: +213,339,273523,1,2,0:0:0:0: +242,320,273581,1,10,0:0:0:0: +277,322,273639,1,2,0:0:0:0: +307,345,273697,1,2,0:0:0:0: +343,352,273754,1,2,0:0:0:0: +375,334,273812,6,0,P|383:286|383:218,1,93.5,10|2,0:0|0:0,0:0:0:0: +380,221,273985,1,2,0:0:0:0: +370,203,274043,2,0,L|477:218,1,93.5,2|2,0:0|0:0,0:0:0:0: +263,211,274273,6,0,L|156:196,1,93.5,2|0,0:0|0:0,0:0:0:0: +103,234,274447,1,0,0:0:0:0: +103,234,274504,2,0,B|92:199|92:199|114:119,1,93.5,8|0,0:0|0:0,0:0:0:0: +315,46,274735,2,0,B|326:81|326:81|304:161,1,93.5,2|0,0:0|0:0,0:0:0:0: +248,83,274908,1,0,0:0:0:0: +248,83,274966,2,0,L|141:68,1,93.5,8|0,0:0|0:0,0:0:0:0: +18,156,275197,5,2,0:0:0:0: +115,326,275312,1,0,0:0:0:0: +115,326,275370,1,0,0:0:0:0: +115,326,275427,2,0,P|111:281|101:226,1,93.5,8|0,0:0|0:0,0:0:0:0: +218,50,275658,2,0,P|222:95|232:150,1,93.5,2|0,0:0|0:0,0:0:0:0: +307,291,275889,2,0,L|411:280,1,93.5,8|0,0:0|0:0,0:0:0:0: +471,313,276062,1,0,0:0:0:0: +471,313,276120,6,0,B|478:289|478:289|474:256,7,46.75,2|0|0|0|8|0|0|0,0:0|0:0|0:0|0:0|0:0|0:0|0:0|0:0,0:0:0:0: +372,161,276581,2,0,B|365:185|365:185|369:218,7,46.75,2|0|0|0|8|0|0|0,0:0|0:0|0:0|0:0|0:0|0:0|0:0|0:0,0:0:0:0: +446,195,277043,5,10,0:0:0:0: +234,69,277158,1,8,0:0:0:0: +307,291,277273,1,8,0:0:0:0: +495,131,277389,1,8,0:0:0:0: +327,42,277504,5,2,0:0:0:0: +321,85,277562,1,0,0:0:0:0: +303,124,277620,1,8,0:0:0:0: +271,153,277677,1,8,0:0:0:0: +231,167,277735,1,8,0:0:0:0: +188,170,277793,1,8,0:0:0:0: +147,161,277850,1,8,0:0:0:0: +108,142,277908,1,8,0:0:0:0: +80,111,277966,6,0,P|26:157|22:280,1,187,6|8,0:0|0:0,0:0:0:0: +84,330,278312,2,0,B|188:306|163:368|273:346,1,187,2|2,0:0|0:0,0:0:0:0: +351,312,278658,2,0,P|405:318|475:352,1,93.5,8|0,0:0|0:0,0:0:0:0: +277,257,278889,1,2,0:0:0:0: +277,257,279004,2,0,P|257:178|251:64,1,187,2|2,0:0|0:0,0:0:0:0: +321,3,279350,2,0,P|345:47|344:104,1,93.5,2|0,0:0|0:0,0:0:0:0: +178,142,279581,2,0,P|154:98|155:41,1,93.5,8|0,0:0|0:0,0:0:0:0: +250,72,279812,6,0,P|354:88|472:115,1,187,2|8,0:0|0:0,0:0:0:0: +452,198,280158,2,0,P|348:182|230:155,1,187,2|2,0:0|0:0,0:0:0:0: +208,235,280504,2,0,P|217:284|225:329,1,93.5,8|0,0:0|0:0,0:0:0:0: +125,215,280735,1,2,0:0:0:0: +125,215,280850,2,0,P|72:224|-13:122,1,187,2|2,0:0|0:0,0:0:0:0: +62,10,281197,2,0,P|69:52|67:110,1,93.5,2|0,0:0|0:0,0:0:0:0: +189,148,281427,2,0,P|187:101|194:55,1,93.5,8|0,0:0|0:0,0:0:0:0: +205,40,281600,1,0,0:0:0:0: +218,29,281658,6,0,P|303:43|413:60,1,187,2|8,0:0|0:0,0:0:0:0: +489,32,282004,2,0,P|524:69|499:203,1,187,2|2,0:0|0:0,0:0:0:0: +424,242,282350,2,0,P|416:191|412:130,1,93.5,8|0,0:0|0:0,0:0:0:0: +491,313,282581,1,2,0:0:0:0: +491,313,282697,2,0,P|427:279|296:283,1,187,2|2,0:0|0:0,0:0:0:0: +239,360,283043,2,0,P|230:291|217:234,1,93.5,2|0,0:0|0:0,0:0:0:0: +266,106,283273,2,0,P|275:175|288:232,1,93.5,8|0,0:0|0:0,0:0:0:0: +148,315,283504,6,0,P|91:273|-20:294,1,187,2|8,0:0|0:0,0:0:0:0: +162,217,283850,2,0,P|218:204|365:170,1,187,2|2,0:0|0:0,0:0:0:0: +95,87,284197,2,0,L|85:183,1,93.5,8|0,0:0|0:0,0:0:0:0: +61,358,284427,5,2,0:0:0:0: +61,358,284543,1,8,0:0:0:0: +227,288,284658,1,8,0:0:0:0: +227,288,284773,1,2,0:0:0:0: +159,375,284889,2,0,L|137:213,1,140.25,2|0,0:0|0:0,0:0:0:0: +216,73,285120,2,0,B|200:187|200:187|183:168|163:153,1,140.25,8|0,0:0|0:0,0:0:0:0: +121,113,285350,6,0,L|327:79,1,187,6|8,0:0|0:0,0:0:0:0: +377,144,285697,2,0,P|433:102|408:-9,1,187,2|2,0:0|0:0,0:0:0:0: +299,161,286043,2,0,L|285:253,1,93.5,8|0,0:0|0:0,0:0:0:0: +248,96,286273,1,2,0:0:0:0: +248,96,286389,2,0,P|202:52|83:71,1,187,2|2,0:0|0:0,0:0:0:0: +0,199,286735,2,0,P|51:195|108:172,1,93.5,2|0,0:0|0:0,0:0:0:0: +285,253,286966,2,8,P|239:229|196:185,1,93.5 +160,122,287197,6,0,L|126:341,1,187,2|8,0:0|0:0,0:0:0:0: +196,371,287543,2,0,P|276:320|373:351,1,187,2|2,0:0|0:0,0:0:0:0: +430,284,287889,2,0,P|479:295|538:303,1,93.5,8|0,0:0|0:0,0:0:0:0: +349,246,288120,1,2,0:0:0:0: +349,246,288235,2,0,P|336:185|319:51,1,187,2|2,0:0|0:0,0:0:0:0: +382,5,288581,2,0,L|491:21,1,93.5,2|0,0:0|0:0,0:0:0:0: +245,108,288812,2,0,L|136:92,1,93.5,8|0,0:0|0:0,0:0:0:0: +139,86,288985,1,0,0:0:0:0: +124,78,289043,6,0,P|142:128|46:249,1,187,2|8,0:0|0:0,0:0:0:0: +29,315,289389,2,0,P|114:328|249:358,1,187,2|2,0:0|0:0,0:0:0:0: +301,334,289735,2,0,P|292:280|283:203,1,93.5,8|0,0:0|0:0,0:0:0:0: +195,82,289966,1,2,0:0:0:0: +195,82,290081,2,0,B|163:199|163:199|209:254,1,187,2|2,0:0|0:0,0:0:0:0: +365,164,290427,2,0,L|258:148,1,93.5,2|0,0:0|0:0,0:0:0:0: +375,307,290658,2,0,L|482:323,1,93.5,8|0,0:0|0:0,0:0:0:0: +505,239,290889,6,0,P|519:179|483:55,1,187,2|8,0:0|0:0,0:0:0:0: +408,9,291235,2,0,P|334:30|193:48,1,187,2|2,0:0|0:0,0:0:0:0: +155,110,291581,2,0,P|118:102|55:94,1,93.5,8|0,0:0|0:0,0:0:0:0: +245,138,291812,2,0,P|285:200|249:315,1,187,2|8,0:0|0:0,0:0:0:0: +186,368,292158,1,0,0:0:0:0: +0,252,292273,6,0,L|147:236,1,140.25,2|0,0:0|0:0,0:0:0:0: +179,271,292504,2,0,L|82:282,1,93.5,8|0,0:0|0:0,0:0:0:0: +43,150,292735,2,0,L|139:138,1,93.5,2|0,0:0|0:0,0:0:0:0: +378,221,292966,2,0,P|309:240|212:164,1,187,8|2,0:0|0:0,0:0:0:0: +132,54,293312,1,0,0:0:0:0: +227,0,293427,2,0,L|205:119,1,93.5,8|0,0:0|0:0,0:0:0:0: +147,222,293658,5,2,0:0:0:0: +132,54,293773,1,0,0:0:0:0: +285,131,293889,2,0,P|331:141|388:146,1,93.5,8|0,0:0|0:0,0:0:0:0: +450,101,294120,5,2,0:0:0:0: +363,231,294235,1,2,0:0:0:0: +334,58,294350,1,8,0:0:0:0: +441,199,294466,1,2,0:0:0:0: +303,296,294581,6,0,L|254:308,3,46.75,2|2|2|0,0:0|0:0|0:0|0:0,0:0:0:0: +204,367,294812,2,0,L|158:355,3,46.75,8|2|8|2,0:0|0:0|0:0|0:0,0:0:0:0: +80,363,295043,1,2,0:0:0:0: +45,330,295100,1,2,0:0:0:0: +26,288,295158,1,10,0:0:0:0: +18,242,295216,1,2,0:0:0:0: +22,195,295273,1,2,0:0:0:0: +39,149,295331,1,2,0:0:0:0: +71,111,295389,1,2,0:0:0:0: +116,93,295447,1,2,0:0:0:0: +168,92,295504,6,0,L|391:131,1,187,6|8,0:0|0:0,0:0:0:0: +444,197,295850,1,0,0:0:0:0: +338,248,295966,2,0,L|115:209,1,187,2|8,0:0|0:0,0:0:0:0: +54,275,296312,1,0,0:0:0:0: +152,341,296427,2,0,L|268:360,1,93.5,2|0,0:0|0:0,0:0:0:0: +499,283,296658,2,0,P|473:256|339:249,1,140.25,8|0,0:0|0:0,0:0:0:0: +338,248,296889,2,0,L|324:124,1,93.5,2|0,0:0|0:0,0:0:0:0: +420,129,297120,1,8,0:0:0:0: +397,335,297235,1,0,0:0:0:0: +240,266,297350,6,0,B|197:242|197:242|56:271,1,187,2|8,0:0|0:0,0:0:0:0: +143,23,297697,2,0,B|186:47|186:47|327:18,1,187,2|2,0:0|0:0,0:0:0:0: +150,163,298043,2,0,L|50:147,1,93.5,8|0,0:0|0:0,0:0:0:0: +264,129,298273,2,0,B|334:122|334:122|371:146|371:146|460:136,1,187,2|8,0:0|0:0,0:0:0:0: +306,208,298620,2,0,L|270:313,1,93.5,0|2,0:0|0:0,0:0:0:0: +443,137,298850,5,10,0:0:0:0: +321,20,298966,1,8,0:0:0:0: +390,236,299081,1,10,0:0:0:0: +465,59,299197,6,0,B|352:46|412:116|277:97,1,187,2|8,0:0|0:0,0:0:0:0: +75,82,299543,1,0,0:0:0:0: +75,82,299658,2,0,P|122:26|258:65,1,187,2|8,0:0|0:0,0:0:0:0: +214,214,300004,1,0,0:0:0:0: +214,214,300120,2,0,L|194:102,1,93.5,2|0,0:0|0:0,0:0:0:0: +325,194,300350,2,0,L|303:362,1,140.25,8|0,0:0|0:0,0:0:0:0: +332,378,300581,2,0,L|222:364,1,93.5,2|0,0:0|0:0,0:0:0:0: +391,266,300812,2,0,L|501:280,1,93.5,8|0,0:0|0:0,0:0:0:0: +237,290,301043,6,0,L|42:262,1,187,2|8,0:0|0:0,0:0:0:0: +0,154,301389,1,0,0:0:0:0: +53,47,301504,2,0,L|248:75,1,187,2|8,0:0|0:0,0:0:0:0: +290,183,301850,1,0,0:0:0:0: +237,290,301966,2,0,L|138:275,1,93.5,2|0,0:0|0:0,0:0:0:0: +348,127,302197,2,0,L|447:112,1,93.5,8|0,0:0|0:0,0:0:0:0: +482,321,302427,2,0,P|448:268|318:266,1,187,2|8,0:0|0:0,0:0:0:0: +212,183,302773,1,0,0:0:0:0: +296,62,302889,6,0,P|307:111|306:171,1,93.5,2|0,0:0|0:0,0:0:0:0: +144,275,303120,2,0,P|133:226|134:166,1,93.5,8|0,0:0|0:0,0:0:0:0: +289,328,303350,2,0,B|183:302|233:387|95:356,1,187,2|8,0:0|0:0,0:0:0:0: +42,263,303697,1,0,0:0:0:0: +132,182,303812,6,0,P|180:125|149:5,1,187,2|8,0:0|0:0,0:0:0:0: +68,39,304158,1,0,0:0:0:0: +68,39,304273,2,0,P|55:75|49:136,1,93.5,2|0,0:0|0:0,0:0:0:0: +269,175,304504,2,0,P|282:139|288:78,1,93.5,8|0,0:0|0:0,0:0:0:0: +163,20,304735,6,0,P|173:115|183:232,1,187,2|8,0:0|0:0,0:0:0:0: +146,296,305081,2,0,P|197:258|325:295,1,187,2|2,0:0|0:0,0:0:0:0: +378,353,305427,1,8,0:0:0:0: +470,323,305543,1,0,0:0:0:0: +403,252,305658,6,0,P|411:158|421:65,1,187,2|8,0:0|0:0,0:0:0:0: +353,1,306004,1,0,0:0:0:0: +248,105,306120,2,0,P|304:107|352:65,1,93.5,2|0,0:0|0:0,0:0:0:0: +178,48,306350,2,0,P|136:26|91:31,1,93.5,8|0,0:0|0:0,0:0:0:0: +67,171,306581,6,0,P|56:224|49:280,1,93.5,2|0,0:0|0:0,0:0:0:0: +101,341,306812,1,8,0:0:0:0: +196,332,306927,1,0,0:0:0:0: +148,251,307043,2,0,P|207:210|328:230,1,187,2|8,0:0|0:0,0:0:0:0: +395,165,307389,1,0,0:0:0:0: +327,32,307504,6,0,P|315:80|308:129,1,93.5,2|0,0:0|0:0,0:0:0:0: +379,356,307735,2,0,P|391:308|398:259,1,93.5,8|0,0:0|0:0,0:0:0:0: +511,90,307966,6,0,L|483:-25,1,93.5,2|0,0:0|0:0,0:0:0:0: +473,292,308197,2,0,L|495:382,1,93.5,8|0,0:0|0:0,0:0:0:0: +512,192,308427,5,2,0:0:0:0: +418,163,308543,1,0,0:0:0:0: +375,249,308658,1,8,0:0:0:0: +379,256,308889,5,2,0:0:0:0: +281,219,309004,1,10,0:0:0:0: +275,203,309062,1,2,0:0:0:0: +271,188,309120,1,10,0:0:0:0: +268,171,309177,1,10,0:0:0:0: +265,156,309235,1,10,0:0:0:0: +264,140,309293,1,10,0:0:0:0: +263,124,309350,5,2,0:0:0:0: +233,165,309408,1,2,0:0:0:0: +189,185,309466,1,2,0:0:0:0: +142,183,309523,1,2,0:0:0:0: +105,155,309581,1,10,0:0:0:0: +86,111,309639,1,2,0:0:0:0: +90,63,309697,1,10,0:0:0:0: +122,27,309754,1,2,0:0:0:0: +169,16,309812,6,0,L|237:24,1,46.75,10|2,0:0|0:0,0:0:0:0: +263,124,309927,2,0,L|331:116,1,46.75,10|2,0:0|0:0,0:0:0:0: +361,42,310043,2,0,L|429:50,1,46.75,10|2,0:0|0:0,0:0:0:0: +495,106,310158,1,10,0:0:0:0: +495,106,310216,1,10,0:0:0:0: +495,106,310273,6,0,L|480:318,1,187,6|8,0:0|0:0,0:0:0:0: +428,371,310620,1,0,0:0:0:0: +316,222,310735,2,0,L|329:35,1,187,2|8,0:0|0:0,0:0:0:0: +242,71,311081,1,0,0:0:0:0: +316,222,311197,6,0,P|382:211|413:234,1,93.5,2|0,0:0|0:0,0:0:0:0: +481,292,311427,1,8,0:0:0:0: +481,292,311658,2,0,L|487:198,1,93.5,2|0,0:0|0:0,0:0:0:0: +495,106,311889,1,8,0:0:0:0: +316,222,312004,1,0,0:0:0:0: +428,371,312120,6,0,B|342:392|328:324|229:344,1,187,2|8,0:0|0:0,0:0:0:0: +157,369,312466,1,0,0:0:0:0: +61,235,312581,2,0,P|56:281|74:324,1,93.5,2|0,0:0|0:0,0:0:0:0: +214,214,312812,2,0,P|219:168|201:125,1,93.5,8|0,0:0|0:0,0:0:0:0: +90,63,313043,5,2,0:0:0:0: +146,259,313158,1,0,0:0:0:0: +288,113,313273,2,0,B|307:4,1,93.5,8|0,0:0|0:0,0:0:0:0: +129,166,313504,2,0,B|146:259,1,93.5,2|0,0:0|0:0,0:0:0:0: +178,48,313735,2,0,P|136:67|89:62,1,93.5,8|0,0:0|0:0,0:0:0:0: +357,237,313966,6,0,P|422:175|519:198,1,187,2|8,0:0|0:0,0:0:0:0: +490,283,314312,1,0,0:0:0:0: +465,372,314427,2,0,L|357:354,1,93.5,2|0,0:0|0:0,0:0:0:0: +264,221,314658,2,0,L|372:239,1,93.5,8|0,0:0|0:0,0:0:0:0: +201,356,314889,6,0,P|118:355|52:286,1,140.25,2|0,0:0|0:0,0:0:0:0: +32,263,315120,2,0,L|25:168,1,93.5,8|0,0:0|0:0,0:0:0:0: +258,36,315350,2,0,B|266:125|200:130|215:226,1,187,2|8,0:0|0:0,0:0:0:0: +262,294,315697,1,0,0:0:0:0: +353,237,315812,6,0,B|377:197|377:197|370:141,1,93.5,2|0,0:0|0:0,0:0:0:0: +262,294,316043,2,0,B|238:334|238:334|245:390,1,93.5,8|0,0:0|0:0,0:0:0:0: +372,356,316273,2,0,B|468:339,1,93.5,2|0,0:0|0:0,0:0:0:0: +213,213,316504,2,0,B|117:230,1,93.5,8|0,0:0|0:0,0:0:0:0: +36,14,316735,6,0,P|100:46|93:164,1,187,2|8,0:0|0:0,0:0:0:0: +37,357,317081,1,0,0:0:0:0: +37,357,317197,2,0,P|32:285|138:232,1,187,2|8,0:0|0:0,0:0:0:0: +334,185,317543,1,8,0:0:0:0: +334,185,317600,1,8,0:0:0:0: +334,185,317658,6,0,P|274:224|175:159,1,187,6|8,0:0|0:0,0:0:0:0: +207,84,318004,1,0,0:0:0:0: +387,119,318120,2,0,P|373:181|403:221,1,93.5,2|0,0:0|0:0,0:0:0:0: +491,311,318350,2,0,P|505:249|475:209,1,93.5,8|0,0:0|0:0,0:0:0:0: +222,356,318581,6,0,B|309:359|309:359|334:351|334:351|422:354,1,187,2|8,0:0|0:0,0:0:0:0: +491,311,318927,1,0,0:0:0:0: +304,229,319043,2,0,B|216:232|216:232|191:224|191:224|103:227,1,187,2|8,0:0|0:0,0:0:0:0: +35,184,319389,1,0,0:0:0:0: +197,0,319504,6,0,P|257:80|212:171,1,187,2|8,0:0|0:0,0:0:0:0: +231,155,319966,2,0,P|281:145|329:141,1,93.5,2|0,0:0|0:0,0:0:0:0: +501,305,320197,2,0,P|451:294|403:290,1,93.5,8|0,0:0|0:0,0:0:0:0: +152,382,320427,6,0,P|92:302|137:211,1,187,2|8,0:0|0:0,0:0:0:0: +143,136,320773,1,0,0:0:0:0: +221,242,320889,2,0,P|211:287|207:334,1,93.5,2|0,0:0|0:0,0:0:0:0: +63,159,321120,2,0,P|58:112|49:66,1,93.5,8|0,0:0|0:0,0:0:0:0: +340,49,321350,6,0,P|317:135|231:155,2,187,2|8|2,0:0|0:0|0:0,0:0:0:0: +173,47,321927,1,0,0:0:0:0: +143,136,322043,2,0,L|154:246,1,93.5,8|0,0:0|0:0,0:0:0:0: +400,384,322273,6,0,L|411:274,1,93.5,2|0,0:0|0:0,0:0:0:0: +257,173,322504,2,0,L|332:227,1,93.5,8|0,0:0|0:0,0:0:0:0: +512,154,322735,2,0,L|426:192,1,93.5,2|0,0:0|0:0,0:0:0:0: +256,352,322966,1,8,0:0:0:0: +170,310,323081,1,0,0:0:0:0: +100,373,323197,6,0,L|2:368,1,93.5,2|0,0:0|0:0,0:0:0:0: +152,229,323427,2,0,L|250:224,1,93.5,8|0,0:0|0:0,0:0:0:0: +93,294,323658,2,0,L|-5:289,1,93.5,2|0,0:0|0:0,0:0:0:0: +145,150,323888,2,0,L|243:145,1,93.5,8|0,0:0|0:0,0:0:0:0: +82,221,324120,5,2,0:0:0:0: +69,207,324177,1,2,0:0:0:0: +60,191,324235,1,2,0:0:0:0: +54,173,324293,1,2,0:0:0:0: +52,154,324350,1,10,0:0:0:0: +54,136,324408,1,2,0:0:0:0: +60,118,324466,1,10,0:0:0:0: +70,102,324523,1,10,0:0:0:0: +82,88,324581,5,2,0:0:0:0: +136,92,324638,1,2,0:0:0:0: +176,130,324696,1,10,0:0:0:0: +185,185,324754,1,2,0:0:0:0: +157,233,324811,1,10,0:0:0:0: +129,280,324870,1,10,0:0:0:0: +137,335,324927,1,10,0:0:0:0: +177,373,324985,1,10,0:0:0:0: +232,378,325043,6,0,B|320:375|320:375|344:382|344:382|418:380,1,187,6|8,0:0|0:0,0:0:0:0: +485,314,325389,1,0,0:0:0:0: +267,218,325504,2,0,B|179:215|179:215|155:222|155:222|81:220,1,187,2|8,0:0|0:0,0:0:0:0: +14,154,325850,1,0,0:0:0:0: +323,267,325966,6,0,P|341:225|331:180,1,93.5,2|0,0:0|0:0,0:0:0:0: +250,19,326197,1,8,0:0:0:0: +250,19,326427,2,0,L|240:115,1,93.5,2|0,0:0|0:0,0:0:0:0: +426,191,326658,2,0,L|435:94,1,93.5,8|0,0:0|0:0,0:0:0:0: +82,221,326889,6,0,B|159:244|180:198|267:218,1,187,2|8,0:0|0:0,0:0:0:0: +511,288,327235,1,0,0:0:0:0: +449,357,327350,2,0,B|341:346,1,93.5,2|0,0:0|0:0,0:0:0:0: +332,181,327581,2,0,B|440:192,1,93.5,8|0,0:0|0:0,0:0:0:0: +505,141,327812,5,2,0:0:0:0: +304,46,327927,1,0,0:0:0:0: +323,268,328043,2,0,P|341:229|327:170,1,93.5,8|0,0:0|0:0,0:0:0:0: +155,62,328273,2,0,P|137:101|151:160,1,93.5,2|0,0:0|0:0,0:0:0:0: +248,372,328504,2,0,B|140:383,1,93.5,8|0,0:0|0:0,0:0:0:0: +242,206,328735,6,0,B|297:201|297:201|302:204|302:204|305:200|305:200|433:189,1,187,2|8,0:0|0:0,0:0:0:0: +503,242,329081,1,0,0:0:0:0: +442,9,329197,2,0,B|423:49|423:49|434:97,1,93.5,2|0,0:0|0:0,0:0:0:0: +323,268,329427,2,0,B|341:227|341:227|330:179,1,93.5,8|0,0:0|0:0,0:0:0:0: +155,62,329658,6,0,L|171:222,1,140.25,2|0,0:0|0:0,0:0:0:0: +168,201,329889,2,0,P|123:169|75:182,1,93.5,8|0,0:0|0:0,0:0:0:0: +229,277,330120,2,0,L|322:267,1,93.5,2|0,0:0|0:0,0:0:0:0: +137,335,330350,2,0,L|43:325,1,93.5,8|0,0:0|0:0,0:0:0:0: +309,359,330581,6,0,P|346:302|414:298,1,140.25,2|0,0:0|0:0,0:0:0:0: +415,299,330812,2,0,P|405:251|426:205,1,93.5,8|0,0:0|0:0,0:0:0:0: +512,47,331043,2,0,L|502:140,1,93.5,2|0,0:0|0:0,0:0:0:0: +330,179,331273,2,0,L|339:85,1,93.5,8|0,0:0|0:0,0:0:0:0: +512,320,331504,6,0,B|450:318|452:378|380:370,1,140.25,2|0,0:0|0:0,0:0:0:0: +385,370,331735,2,0,L|291:360,1,93.5,8|0,0:0|0:0,0:0:0:0: +62,381,331966,1,2,0:0:0:0: +161,306,332081,1,8,0:0:0:0: +162,259,332138,1,8,0:0:0:0: +140,219,332196,1,8,0:0:0:0: +101,194,332254,1,8,0:0:0:0: +73,155,332312,1,8,0:0:0:0: +73,108,332370,1,8,0:0:0:0: +96,68,332427,6,0,P|152:99|289:37,1,187,6|8,0:0|0:0,0:0:0:0: +337,9,332773,1,0,0:0:0:0: +421,210,332889,2,0,B|435:170|435:170|418:119,1,93.5,2|0,0:0|0:0,0:0:0:0: +215,213,333120,2,0,B|201:253|201:253|217:303,1,93.5,8|0,0:0|0:0,0:0:0:0: +344,145,333350,6,0,B|340:81|340:81|344:76|344:76|340:73|340:73|335:-14,1,140.25,2|0,0:0|0:0,0:0:0:0: +337,9,333581,2,0,L|446:24,1,93.5,8|0,0:0|0:0,0:0:0:0: +498,196,333812,2,0,P|456:182|421:210,1,93.5,2|0,0:0|0:0,0:0:0:0: +292,360,334043,2,0,P|256:387|214:373,1,93.5,8|0,0:0|0:0,0:0:0:0: +32,201,334273,6,0,B|119:177|135:235|215:212,1,187,2|8,0:0|0:0,0:0:0:0: +214,212,334735,2,0,P|208:181|198:97,1,93.5,2|0,0:0|0:0,0:0:0:0: +306,267,334966,2,0,P|300:297|290:381,1,93.5,8|0,0:0|0:0,0:0:0:0: +72,357,335197,6,0,P|98:307|224:307,1,187,2|8,0:0|0:0,0:0:0:0: +291,359,335543,1,0,0:0:0:0: +498,196,335658,2,0,B|426:187|426:187|392:199|392:199|301:187,1,187,2|8,0:0|0:0,0:0:0:0: +221,176,336004,1,0,0:0:0:0: +10,86,336120,6,0,P|80:77|154:44,1,140.25,2|0,0:0|0:0,0:0:0:0: +143,50,336350,2,0,P|111:107|120:155,1,93.5,8|0,0:0|0:0,0:0:0:0: +277,245,336581,2,0,P|244:188|198:171,1,93.5,2|0,0:0|0:0,0:0:0:0: +41,262,336812,2,0,P|106:262|143:230,1,93.5,8|0,0:0|0:0,0:0:0:0: +223,176,337043,5,2,0:0:0:0: +221,157,337100,1,2,0:0:0:0: +219,138,337158,1,10,0:0:0:0: +217,120,337216,1,2,0:0:0:0: +215,101,337273,1,2,0:0:0:0: +213,82,337331,1,2,0:0:0:0: +211,64,337389,1,2,0:0:0:0: +209,45,337446,1,2,0:0:0:0: +208,27,337504,5,2,0:0:0:0: +258,48,337561,1,2,0:0:0:0: +283,97,337619,1,2,0:0:0:0: +270,151,337677,1,2,0:0:0:0: +227,184,337734,1,10,0:0:0:0: +183,217,337793,1,10,0:0:0:0: +170,270,337851,1,10,0:0:0:0: +195,319,337909,1,10,0:0:0:0: +246,340,337966,6,0,B|313:336|313:336|346:346|346:346|438:337,1,187,6|8,0:0|0:0,0:0:0:0: +501,276,338312,1,0,0:0:0:0: +266,215,338427,2,0,B|198:211|198:211|165:221|165:221|73:212,1,187,2|8,0:0|0:0,0:0:0:0: +11,151,338773,1,0,0:0:0:0: +252,34,338889,6,0,B|233:78|233:78|248:121,1,93.5,2|0,0:0|0:0,0:0:0:0: +425,190,339120,2,0,B|444:146|444:146|428:102,1,93.5,8|0,0:0|0:0,0:0:0:0: +336,155,339350,5,10,0:0:0:0: +336,173,339407,1,8,0:0:0:0: +337,192,339465,1,8,0:0:0:0: +338,211,339523,1,8,0:0:0:0: +338,229,339580,1,8,0:0:0:0: +339,248,339638,1,8,0:0:0:0: +340,267,339696,1,8,0:0:0:0: +340,285,339753,1,8,0:0:0:0: +340,303,339812,6,0,P|426:327|487:262,1,187,6|8,0:0|0:0,0:0:0:0: +425,190,340158,1,0,0:0:0:0: +246,340,340273,2,0,P|249:296|209:250,1,93.5,2|0,0:0|0:0,0:0:0:0: +56,129,340504,2,0,P|53:173|93:219,1,93.5,8|0,0:0|0:0,0:0:0:0: +306,198,340735,6,0,B|310:146|310:146|315:138|315:138|311:130|311:130|323:-1,1,187,2|8,0:0|0:0,0:0:0:0: +237,53,341081,1,0,0:0:0:0: +340,267,341197,2,0,P|368:263|441:256,1,93.5,2|0,0:0|0:0,0:0:0:0: +246,340,341427,2,0,P|217:336|145:329,1,93.5,8|0,0:0|0:0,0:0:0:0: +13,157,341658,6,0,B|101:149|101:221|190:213,1,187,2|8,0:0|0:0,0:0:0:0: +241,137,342004,1,0,0:0:0:0: +42,237,342120,2,0,P|35:289|60:336,1,93.5,2|0,0:0|0:0,0:0:0:0: +162,129,342350,2,0,P|169:77|144:30,1,93.5,8|0,0:0|0:0,0:0:0:0: +153,329,342581,6,0,B|223:321|223:321|269:337|269:337|336:331,1,187,2|8,0:0|0:0,0:0:0:0: +417,379,342927,1,0,0:0:0:0: +306,198,343043,2,0,B|298:113|370:113|362:25,1,187,2|8,0:0|0:0,0:0:0:0: +489,112,343389,1,8,0:0:0:0: +489,112,343447,1,8,0:0:0:0: +489,112,343504,6,0,P|504:193|417:256,1,187,2|8,0:0|0:0,0:0:0:0: +248,341,343850,2,0,P|232:259|319:196,1,187,2|2,0:0|0:0,0:0:0:0: +508,361,344197,2,0,L|416:378,1,93.5,8|0,0:0|0:0,0:0:0:0: +401,373,344370,1,0,0:0:0:0: +386,367,344427,6,0,L|192:354,1,187,2|8,0:0|0:0,0:0:0:0: +107,375,344773,1,0,0:0:0:0: +122,199,344889,2,0,P|144:240|139:286,1,93.5,2|0,0:0|0:0,0:0:0:0: +13,157,345120,2,0,P|7:111|29:70,1,93.5,8|0,0:0|0:0,0:0:0:0: +200,35,345350,6,0,L|302:46,1,93.5,2|0,0:0|0:0,0:0:0:0: +396,207,345581,2,0,L|303:196,1,93.5,8|0,0:0|0:0,0:0:0:0: +384,23,345812,2,0,L|373:115,1,93.5,2|0,0:0|0:0,0:0:0:0: +212,219,346043,2,0,L|223:117,1,93.5,8|0,0:0|0:0,0:0:0:0: +512,279,346273,6,0,P|483:282|372:294,1,140.25,2|0,0:0|0:0,0:0:0:0: +349,363,346504,6,0,P|328:360|251:351,1,98.1749970039369,8|0,0:0|0:0,0:0:0:0: +212,293,346735,6,0,P|188:295|74:307,1,126.224996147919,2|0,0:0|0:0,0:0:0:0: +27,257,346966,6,0,P|14:222|23:192,1,56.0999982879639,8|0,0:0|0:0,0:0:0:0: +133,13,347197,6,0,L|122:205,1,187,6|8,0:0|0:0,0:0:0:0: +251,351,347543,1,0,0:0:0:0: +311,280,347658,2,0,P|331:238|316:186,1,93.5,2|0,0:0|0:0,0:0:0:0: +232,39,347889,2,0,P|212:80|221:125,1,93.5,8|0,0:0|0:0,0:0:0:0: +466,107,348120,6,0,P|403:112|340:117,1,93.5,2|0,0:0|0:0,0:0:0:0: +228,202,348350,2,0,P|290:196|353:191,1,93.5,8|0,0:0|0:0,0:0:0:0: +489,256,348581,2,0,P|426:261|363:266,1,93.5,2|0,0:0|0:0,0:0:0:0: +251,351,348811,2,0,P|313:345|376:340,1,93.5,8|0,0:0|0:0,0:0:0:0: +360,351,348985,1,0,0:0:0:0: +375,359,349043,6,0,P|426:304|407:190,1,187,2|8,0:0|0:0,0:0:0:0: +372,115,349389,1,0,0:0:0:0: +496,18,349504,2,0,L|488:111,1,93.5,2|0,0:0|0:0,0:0:0:0: +328,286,349735,2,0,L|320:192,1,93.5,8|0,0:0|0:0,0:0:0:0: +125,50,349966,6,0,P|170:97|307:65,1,187,2|8,0:0|0:0,0:0:0:0: +356,28,350312,1,0,0:0:0:0: +227,184,350427,2,0,B|262:280|198:280|230:384,1,187,2|8,0:0|0:0,0:0:0:0: +134,342,350773,1,0,0:0:0:0: +10,277,350889,6,0,P|7:223|-1:72,1,187,2|8,0:0|0:0,0:0:0:0: +51,13,351235,1,0,0:0:0:0: +215,180,351350,2,0,P|218:234|226:385,1,187,2|8,0:0|0:0,0:0:0:0: +502,277,351812,6,0,P|505:223|513:72,1,187,2|8,0:0|0:0,0:0:0:0: +461,13,352158,1,0,0:0:0:0: +372,115,352273,2,0,P|356:141|366:217,1,93.5,2|0,0:0|0:0,0:0:0:0: +440,349,352504,2,0,P|425:322|353:292,1,93.5,8|0,0:0|0:0,0:0:0:0: +99,278,352735,6,0,L|285:258,1,187,2|8,0:0|0:0,0:0:0:0: +371,292,353081,1,0,0:0:0:0: +450,211,353197,2,0,L|357:201,1,93.5,2|0,0:0|0:0,0:0:0:0: +191,152,353427,2,0,L|283:142,1,93.5,8|0,0:0|0:0,0:0:0:0: +393,31,353658,6,0,B|365:69|365:69|372:116,1,93.5,2|0,0:0|0:0,0:0:0:0: +489,256,353889,2,0,B|517:218|517:218|509:170,1,93.5,8|0,0:0|0:0,0:0:0:0: +357,201,354120,2,0,P|366:239|372:311,1,93.5,2|0,0:0|0:0,0:0:0:0: +498,96,354350,2,0,P|502:49|512:3,1,93.5,8|0,0:0|0:0,0:0:0:0: +512,333,354581,6,0,B|427:318|423:388|325:362,1,187,2|8,0:0|0:0,0:0:0:0: +284,258,354927,1,0,0:0:0:0: +228,334,355043,2,0,B|32:324,1,187,2|8,0:0|0:0,0:0:0:0: +5,239,355389,1,0,0:0:0:0: +199,79,355504,5,10,0:0:0:0: +110,108,355620,1,8,0:0:0:0: +208,112,355735,5,8,0:0:0:0: +124,116,355851,1,8,0:0:0:0: +211,141,355966,5,10,0:0:0:0: +139,124,356082,1,8,0:0:0:0: +210,164,356197,5,8,0:0:0:0: +153,133,356313,1,8,0:0:0:0: +90,211,356427,6,0,L|292:193,1,187,6|8,0:0|0:0,0:0:0:0: +329,116,356773,1,0,0:0:0:0: +450,258,356889,2,0,L|356:266,1,93.5,2|0,0:0|0:0,0:0:0:0: +414,101,357120,2,0,L|507:92,1,93.5,8|0,0:0|0:0,0:0:0:0: +304,355,357350,6,0,P|252:281|275:194,1,187,2|8,0:0|0:0,0:0:0:0: +329,116,357697,1,0,0:0:0:0: +110,47,357812,5,2,0:0:0:0: +147,134,357927,1,8,0:0:0:0: +93,210,358043,1,10,0:0:0:0: +130,297,358158,1,8,0:0:0:0: +304,355,358273,6,0,L|102:337,1,187,2|8,0:0|0:0,0:0:0:0: +30,374,358620,1,0,0:0:0:0: +0,202,358735,2,0,L|93:210,1,93.5,2|0,0:0|0:0,0:0:0:0: +218,58,358966,2,0,L|124:49,1,93.5,8|0,0:0|0:0,0:0:0:0: +265,250,359197,6,0,B|350:227|364:281|472:252,2,187,2|8|2,0:0|0:0|0:0,0:0:0:0: +202,180,359773,1,0,0:0:0:0: +280,128,359889,1,8,0:0:0:0: +218,58,360004,1,0,0:0:0:0: +407,0,360120,6,0,L|387:186,1,187,2|8,0:0|0:0,0:0:0:0: +449,257,360466,1,0,0:0:0:0: +304,355,360581,2,0,P|310:296|359:272,1,93.5,2|0,0:0|0:0,0:0:0:0: +479,178,360812,2,0,P|473:237|423:260,1,93.5,8|0,0:0|0:0,0:0:0:0: +280,128,361043,6,0,L|274:28,1,93.5,2|0,0:0|0:0,0:0:0:0: +193,261,361273,2,0,L|198:354,1,93.5,8|0,0:0|0:0,0:0:0:0: +36,373,361504,5,8,0:0:0:0: +74,286,361620,1,2,0:0:0:0: +8,219,361735,1,2,0:0:0:0: +46,134,361851,1,8,0:0:0:0: +193,261,361966,6,0,P|274:272|338:188,1,187,2|8,0:0|0:0,0:0:0:0: +280,128,362312,1,0,0:0:0:0: +136,99,362427,2,0,P|123:154|141:192,1,93.5,2|0,0:0|0:0,0:0:0:0: +304,355,362658,2,0,P|317:300|298:261,1,93.5,8|0,0:0|0:0,0:0:0:0: +291,256,362831,1,0,0:0:0:0: +278,244,362889,6,0,L|485:247,1,187,2|8,0:0|0:0,0:0:0:0: +202,180,363235,2,0,L|-5:177,1,187,2|2,0:0|0:0,0:0:0:0: +280,128,363581,2,0,L|383:126,1,93.5,8|0,0:0|0:0,0:0:0:0: +202,180,363812,6,0,B|158:268|240:272|190:359,2,187,2|8|2,0:0|0:0|0:0,0:0:0:0: +280,128,364389,1,0,0:0:0:0: +136,99,364504,2,0,P|123:44|141:5,1,93.5,8|0,0:0|0:0,0:0:0:0: +278,244,364735,6,0,P|291:299|272:337,1,93.5,2|0,0:0|0:0,0:0:0:0: +36,304,364966,2,0,B|50:297|50:297|51:307|51:307|59:297|59:297|60:306|60:306|68:296|68:296|69:305|69:305|77:295|77:295|78:305|78:305|85:294|85:294|86:304|86:304|94:294|94:294|95:303|95:303|103:293|103:293|104:302|104:302|112:292|112:292|113:302|113:302|121:291|121:291|121:301|121:301|129:290|129:290|130:300|130:300|138:290|138:290|139:299|139:299|147:289|147:289|148:299|148:299|156:288|156:288|156:298|156:298|164:287|164:287|165:297|165:297|173:287|173:287|174:296|174:296|182:286|182:286|183:295|183:295|198:289,1,374,8|0,0:0|0:0,0:0:0:0: +277,331,365543,1,0,0:0:0:0: +437,330,365658,6,0,P|467:262|450:218,1,93.5,2|0,0:0|0:0,0:0:0:0: +307,44,365889,2,0,P|277:112|294:156,1,93.5,8|0,0:0|0:0,0:0:0:0: +374,266,366120,1,2,0:0:0:0: +500,153,366235,2,0,L|516:35,2,93.5,0|8|0,0:0|0:0|0:0,0:0:0:0: +374,266,366581,6,0,L|386:358,1,93.5,2|0,0:0|0:0,0:0:0:0: +414,164,366812,2,0,P|322:168|265:263,1,187,8|2,0:0|0:0,0:0:0:0: +188,359,367158,1,0,0:0:0:0: +117,297,367273,2,0,P|115:271|108:189,1,93.5,8|0,0:0|0:0,0:0:0:0: +15,83,367504,6,0,B|192:130|204:-6|413:48,1,374,2|2,0:0|0:0,0:0:0:0: +468,13,368081,1,0,0:0:0:0: +445,104,368197,2,0,P|448:150|452:197,1,93.5,8|0,0:0|0:0,0:0:0:0: +356,295,368427,6,0,P|443:278|500:348,1,187,2|8,0:0|0:0,0:0:0:0: +284,353,368773,2,0,P|196:368|140:298,1,187,2|2,0:0|0:0,0:0:0:0: +99,213,369120,2,0,P|145:216|192:220,1,93.5,8|0,0:0|0:0,0:0:0:0: +378,41,369350,6,0,B|291:17|285:85|196:62,1,187,2|8,0:0|0:0,0:0:0:0: +111,24,369697,1,0,0:0:0:0: +17,161,369812,2,0,P|11:115|32:74,1,93.5,2|0,0:0|0:0,0:0:0:0: +152,211,370043,2,0,P|158:257|138:299,1,93.5,8|0,0:0|0:0,0:0:0:0: +5,384,370273,5,2,0:0:0:0: +58,268,370389,1,2,0:0:0:0: +130,372,370504,1,8,0:0:0:0: +183,256,370620,1,8,0:0:0:0: +187,237,370677,1,8,0:0:0:0: +191,219,370735,1,10,0:0:0:0: +196,201,370793,1,8,0:0:0:0: +200,183,370850,1,8,0:0:0:0: +205,165,370908,1,8,0:0:0:0: +209,146,370966,1,10,0:0:0:0: +111,24,371081,1,2,0:0:0:0: +197,62,371197,6,0,L|387:49,1,187,6|8,0:0|0:0,0:0:0:0: +315,322,371658,2,0,L|125:335,1,187,2|8,0:0|0:0,0:0:0:0: +457,193,372120,2,0,L|444:379,1,187,2|8,0:0|0:0,0:0:0:0: +55,191,372581,2,0,L|63:67,1,93.5,2|0,0:0|0:0,0:0:0:0: +68,4,372812,1,8,0:0:0:0: +152,46,372927,1,0,0:0:0:0: +186,263,373043,6,0,L|-4:276,1,187,6|8,0:0|0:0,0:0:0:0: +326,121,373504,2,0,L|516:108,1,187,2|8,0:0|0:0,0:0:0:0: +491,199,373850,1,0,0:0:0:0: +468,288,373966,2,0,L|282:301,1,187,2|8,0:0|0:0,0:0:0:0: +203,5,374427,2,0,L|328:-3,1,93.5,2|0,0:0|0:0,0:0:0:0: +389,13,374658,1,8,0:0:0:0: +329,84,374773,1,8,0:0:0:0: +327,102,374830,1,8,0:0:0:0: +326,121,374889,6,0,L|516:108,1,187,6|8,0:0|0:0,0:0:0:0: +227,377,375350,1,2,0:0:0:0: +138,348,375466,1,8,0:0:0:0: +138,254,375581,1,8,0:0:0:0: +227,225,375697,1,2,0:0:0:0: +282,301,375812,2,0,L|468:288,1,187,2|8,0:0|0:0,0:0:0:0: +230,83,376273,2,0,L|44:96,1,187,2|8,0:0|0:0,0:0:0:0: +11,185,376620,1,0,0:0:0:0: +303,212,376735,6,0,L|316:26,1,187,6|8,0:0|0:0,0:0:0:0: +43,96,377197,1,2,0:0:0:0: +72,7,377313,1,8,0:0:0:0: +166,7,377428,1,8,0:0:0:0: +195,96,377544,1,8,0:0:0:0: +119,151,377658,2,0,L|132:337,1,187,2|8,0:0|0:0,0:0:0:0: +439,382,378120,2,0,L|426:196,1,187,2|8,0:0|0:0,0:0:0:0: +348,10,378581,6,0,B|414:65|393:172|309:195|241:175|241:175|174:156|90:178|69:285|132:337,1,561,6|8,0:0|0:0,0:0:0:0: +444,354,379504,2,0,P|501:284|473:199,1,187,2|8,0:0|0:0,0:0:0:0: +348,10,379850,2,0,P|291:80|319:165,1,187,2|2,0:0|0:0,0:0:0:0: +408,139,380197,2,0,L|419:46,1,93.5,8|0,0:0|0:0,0:0:0:0: +396,231,380427,5,2,0:0:0:0: +396,231,380543,2,0,P|322:217|256:317,1,187,2|2,0:0|0:0,0:0:0:0: +324,358,380889,2,0,L|417:347,1,93.5,2|0,0:0|0:0,0:0:0:0: +255,294,381120,2,0,L|162:283,1,93.5,8|0,0:0|0:0,0:0:0:0: +32,66,381350,5,2,0:0:0:0: +32,66,381466,2,0,P|106:52|172:152,1,187,2|2,0:0|0:0,0:0:0:0: +104,193,381812,2,0,L|11:182,1,93.5,2|0,0:0|0:0,0:0:0:0: +173,129,382043,2,0,L|266:118,1,93.5,8|0,0:0|0:0,0:0:0:0: +490,320,382273,6,2,L|408:303,3,46.75,2|2|10|2,0:0|0:0|0:0|0:0,0:0:0:0: +427,332,382504,2,2,L|345:315,3,46.75,2|2|10|2,0:0|0:0|0:0|0:0,0:0:0:0: +349,341,382735,5,10,0:0:0:0: +364,312,382792,1,2,0:0:0:0: +365,280,382850,1,10,0:0:0:0: +351,251,382908,1,2,0:0:0:0: +325,232,382966,1,10,0:0:0:0: +293,227,383023,1,2,0:0:0:0: +267,208,383080,1,10,0:0:0:0: +253,179,383138,1,2,0:0:0:0: +254,147,383197,5,10,0:0:0:0: +290,174,383254,1,2,0:0:0:0: +303,218,383312,1,10,0:0:0:0: +288,262,383370,1,2,0:0:0:0: +250,287,383427,1,10,0:0:0:0: +204,280,383484,1,2,0:0:0:0: +171,248,383542,1,10,0:0:0:0: +163,203,383600,1,2,0:0:0:0: +182,161,383657,5,10,0:0:0:0: +184,102,383715,1,2,0:0:0:0: +144,58,383773,1,10,0:0:0:0: +82,54,383831,1,2,0:0:0:0: +35,93,383889,1,10,0:0:0:0: +30,153,383947,1,2,0:0:0:0: +58,205,384004,1,10,0:0:0:0: +57,266,384062,1,2,0:0:0:0: +18,313,384120,5,14,0:0:0:0: diff --git a/osu.Game.Rulesets.Taiko/Tests/TaikoBeatmapConversionTest.cs b/osu.Game.Rulesets.Taiko/Tests/TaikoBeatmapConversionTest.cs new file mode 100644 index 0000000000..e99e5547b1 --- /dev/null +++ b/osu.Game.Rulesets.Taiko/Tests/TaikoBeatmapConversionTest.cs @@ -0,0 +1,67 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using System; +using NUnit.Framework; +using osu.Framework.MathUtils; +using osu.Game.Beatmaps; +using osu.Game.Rulesets.Objects; +using osu.Game.Rulesets.Objects.Types; +using osu.Game.Rulesets.Taiko.Beatmaps; +using osu.Game.Rulesets.Taiko.Objects; +using osu.Game.Tests.Beatmaps; + +namespace osu.Game.Rulesets.Taiko.Tests +{ + public class TaikoBeatmapConversionTest : BeatmapConversionTest + { + protected override string ResourceAssembly => "osu.Game.Rulesets.Taiko"; + + private bool isForCurrentRuleset; + + [TestCase(875945, false), NonParallelizable] + public void Test(int beatmapId, bool isForCurrentRuleset) + { + this.isForCurrentRuleset = isForCurrentRuleset; + base.Test(beatmapId); + } + + protected override ConvertValue CreateConvertValue(HitObject hitObject) => new ConvertValue + { + StartTime = hitObject.StartTime, + EndTime = (hitObject as IHasEndTime)?.EndTime ?? hitObject.StartTime, + IsRim = hitObject is RimHit, + IsCentre = hitObject is CentreHit, + IsDrumRoll = hitObject is DrumRoll, + IsSwell = hitObject is Swell, + IsStrong = ((TaikoHitObject)hitObject).IsStrong + }; + + protected override ITestableBeatmapConverter CreateConverter() => new TaikoBeatmapConverter(isForCurrentRuleset); + } + + public struct ConvertValue : IEquatable + { + /// + /// A sane value to account for osu!stable using ints everwhere. + /// + private const float conversion_lenience = 2; + + public double StartTime; + public double EndTime; + public bool IsRim; + public bool IsCentre; + public bool IsDrumRoll; + public bool IsSwell; + public bool IsStrong; + + public bool Equals(ConvertValue other) + => Precision.AlmostEquals(StartTime, other.StartTime) + && Precision.AlmostEquals(EndTime, other.EndTime, conversion_lenience) + && IsRim == other.IsRim + && IsCentre == other.IsCentre + && IsDrumRoll == other.IsDrumRoll + && IsSwell == other.IsSwell + && IsStrong == other.IsStrong; + } +} diff --git a/osu.Game.Rulesets.Taiko/osu.Game.Rulesets.Taiko.csproj b/osu.Game.Rulesets.Taiko/osu.Game.Rulesets.Taiko.csproj index db2db9fff1..8db70102b4 100644 --- a/osu.Game.Rulesets.Taiko/osu.Game.Rulesets.Taiko.csproj +++ b/osu.Game.Rulesets.Taiko/osu.Game.Rulesets.Taiko.csproj @@ -112,6 +112,7 @@ + @@ -145,6 +146,10 @@ + + + + From 6f5acaa8f9f0a305783164ab92e766777d476f4f Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Fri, 2 Mar 2018 01:43:25 +0900 Subject: [PATCH 239/544] Remove unnecessary explicit JsonProperties --- osu.Game.Rulesets.Osu/Tests/OsuBeatmapConversionTest.cs | 7 ------- 1 file changed, 7 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Tests/OsuBeatmapConversionTest.cs b/osu.Game.Rulesets.Osu/Tests/OsuBeatmapConversionTest.cs index a215286218..6e77b22cb9 100644 --- a/osu.Game.Rulesets.Osu/Tests/OsuBeatmapConversionTest.cs +++ b/osu.Game.Rulesets.Osu/Tests/OsuBeatmapConversionTest.cs @@ -2,7 +2,6 @@ // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using System; -using Newtonsoft.Json; using NUnit.Framework; using osu.Framework.MathUtils; using osu.Game.Beatmaps; @@ -51,17 +50,11 @@ namespace osu.Game.Rulesets.Osu.Tests /// private const double conversion_lenience = 2; - [JsonProperty] public double StartTime; - [JsonProperty] public double EndTime; - [JsonProperty] public float StartX; - [JsonProperty] public float StartY; - [JsonProperty] public float EndX; - [JsonProperty] public float EndY; public bool Equals(ConvertValue other) From 4e363664fddb99e0e4d95bace5ac38797dbfec62 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Fri, 2 Mar 2018 01:50:54 +0900 Subject: [PATCH 240/544] Add beatmap parameter to beatmapconverter creation --- osu.Game.Rulesets.Osu/Tests/OsuBeatmapConversionTest.cs | 2 +- osu.Game.Rulesets.Taiko/Tests/TaikoBeatmapConversionTest.cs | 2 +- osu.Game/Tests/Beatmaps/BeatmapConversionTest.cs | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Tests/OsuBeatmapConversionTest.cs b/osu.Game.Rulesets.Osu/Tests/OsuBeatmapConversionTest.cs index 6e77b22cb9..2d4d188f3a 100644 --- a/osu.Game.Rulesets.Osu/Tests/OsuBeatmapConversionTest.cs +++ b/osu.Game.Rulesets.Osu/Tests/OsuBeatmapConversionTest.cs @@ -40,7 +40,7 @@ namespace osu.Game.Rulesets.Osu.Tests }; } - protected override ITestableBeatmapConverter CreateConverter() => new OsuBeatmapConverter(); + protected override ITestableBeatmapConverter CreateConverter(Beatmap beatmap) => new OsuBeatmapConverter(); } public struct ConvertValue : IEquatable diff --git a/osu.Game.Rulesets.Taiko/Tests/TaikoBeatmapConversionTest.cs b/osu.Game.Rulesets.Taiko/Tests/TaikoBeatmapConversionTest.cs index e99e5547b1..7f7acbea58 100644 --- a/osu.Game.Rulesets.Taiko/Tests/TaikoBeatmapConversionTest.cs +++ b/osu.Game.Rulesets.Taiko/Tests/TaikoBeatmapConversionTest.cs @@ -37,7 +37,7 @@ namespace osu.Game.Rulesets.Taiko.Tests IsStrong = ((TaikoHitObject)hitObject).IsStrong }; - protected override ITestableBeatmapConverter CreateConverter() => new TaikoBeatmapConverter(isForCurrentRuleset); + protected override ITestableBeatmapConverter CreateConverter(Beatmap beatmap) => new TaikoBeatmapConverter(isForCurrentRuleset); } public struct ConvertValue : IEquatable diff --git a/osu.Game/Tests/Beatmaps/BeatmapConversionTest.cs b/osu.Game/Tests/Beatmaps/BeatmapConversionTest.cs index cd060ac411..d718b6b533 100644 --- a/osu.Game/Tests/Beatmaps/BeatmapConversionTest.cs +++ b/osu.Game/Tests/Beatmaps/BeatmapConversionTest.cs @@ -81,7 +81,7 @@ namespace osu.Game.Tests.Beatmaps var result = new ConvertResult(); - var converter = CreateConverter(); + var converter = CreateConverter(beatmap); converter.ObjectConverted += (orig, converted) => { converted.ForEach(h => h.ApplyDefaults(beatmap.ControlPointInfo, beatmap.BeatmapInfo.BaseDifficulty)); @@ -122,7 +122,7 @@ namespace osu.Game.Tests.Beatmaps } protected abstract TConvertValue CreateConvertValue(HitObject hitObject); - protected abstract ITestableBeatmapConverter CreateConverter(); + protected abstract ITestableBeatmapConverter CreateConverter(Beatmap beatmap); private class ConvertMapping { From 9d035fc5d0f6713eec720ffc2b1b8e129f248b8e Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Fri, 2 Mar 2018 01:51:04 +0900 Subject: [PATCH 241/544] Add a mania beatmap conversion testcase --- .../Beatmaps/875945-expected-conversion.json | 1 + .../Resources/Testing/Beatmaps/875945.osu | 1824 +++++++++++++++++ .../Tests/ManiaBeatmapConversionTest.cs | 55 + .../osu.Game.Rulesets.Mania.csproj | 5 + 4 files changed, 1885 insertions(+) create mode 100644 osu.Game.Rulesets.Mania/Resources/Testing/Beatmaps/875945-expected-conversion.json create mode 100644 osu.Game.Rulesets.Mania/Resources/Testing/Beatmaps/875945.osu create mode 100644 osu.Game.Rulesets.Mania/Tests/ManiaBeatmapConversionTest.cs diff --git a/osu.Game.Rulesets.Mania/Resources/Testing/Beatmaps/875945-expected-conversion.json b/osu.Game.Rulesets.Mania/Resources/Testing/Beatmaps/875945-expected-conversion.json new file mode 100644 index 0000000000..165faaac17 --- /dev/null +++ b/osu.Game.Rulesets.Mania/Resources/Testing/Beatmaps/875945-expected-conversion.json @@ -0,0 +1 @@ +{"Mappings":[{"StartTime":6590.0,"Objects":[{"StartTime":6590.0,"EndTime":8320.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":8436.0,"Objects":[{"StartTime":8436.0,"EndTime":10166.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":10282.0,"Objects":[{"StartTime":10282.0,"EndTime":12012.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":12128.0,"Objects":[{"StartTime":12128.0,"EndTime":13858.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":13974.0,"Objects":[{"StartTime":13974.0,"EndTime":15704.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":15820.0,"Objects":[{"StartTime":15820.0,"EndTime":17550.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":17666.0,"Objects":[{"StartTime":17666.0,"EndTime":19512.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":19628.0,"Objects":[{"StartTime":19628.0,"EndTime":21128.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":false,"IsSwell":true,"IsStrong":false}]},{"StartTime":21359.0,"Objects":[{"StartTime":21359.0,"EndTime":21359.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":21820.0,"EndTime":21820.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":22282.0,"Objects":[{"StartTime":22282.0,"EndTime":22282.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":22743.0,"EndTime":22743.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":23205.0,"Objects":[{"StartTime":23205.0,"EndTime":23205.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":23666.0,"EndTime":23666.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":24128.0,"Objects":[{"StartTime":24128.0,"EndTime":24128.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":24589.0,"EndTime":24589.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":25051.0,"Objects":[{"StartTime":25051.0,"EndTime":26666.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":26897.0,"Objects":[{"StartTime":26897.0,"EndTime":28281.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":28743.0,"Objects":[{"StartTime":28743.0,"EndTime":28743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":29204.0,"EndTime":29204.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":29666.0,"Objects":[{"StartTime":29666.0,"EndTime":29666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":30127.0,"EndTime":30127.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":30589.0,"Objects":[{"StartTime":30589.0,"EndTime":30589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":31050.0,"EndTime":31050.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":31513.0,"Objects":[{"StartTime":31513.0,"EndTime":31513.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":31974.0,"EndTime":31974.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":32436.0,"Objects":[{"StartTime":32436.0,"EndTime":34282.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":35205.0,"Objects":[{"StartTime":35205.0,"EndTime":35205.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":35666.0,"EndTime":35666.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":36128.0,"Objects":[{"StartTime":36128.0,"EndTime":36128.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":36474.0,"EndTime":36474.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":36590.0,"Objects":[{"StartTime":36590.0,"EndTime":39359.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":39820.0,"Objects":[{"StartTime":39820.0,"EndTime":39820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":40281.0,"EndTime":40281.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":40743.0,"Objects":[{"StartTime":40743.0,"EndTime":40743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":41204.0,"EndTime":41204.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":41666.0,"Objects":[{"StartTime":41666.0,"EndTime":42589.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":43051.0,"Objects":[{"StartTime":43051.0,"EndTime":43051.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":43281.0,"EndTime":43281.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":43513.0,"Objects":[{"StartTime":43513.0,"EndTime":43513.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true}]},{"StartTime":43628.0,"Objects":[{"StartTime":43628.0,"EndTime":49051.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":false,"IsSwell":true,"IsStrong":false}]},{"StartTime":56435.0,"Objects":[{"StartTime":56435.0,"EndTime":56435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":56665.0,"EndTime":56665.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":56781.0,"Objects":[{"StartTime":56781.0,"EndTime":56781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":56897.0,"Objects":[{"StartTime":56897.0,"EndTime":56897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":57012.0,"EndTime":57012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":57127.0,"Objects":[{"StartTime":57127.0,"EndTime":57127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":57242.0,"EndTime":57242.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":57358.0,"Objects":[{"StartTime":57358.0,"EndTime":57358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":57473.0,"EndTime":57473.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":57589.0,"Objects":[{"StartTime":57589.0,"EndTime":57589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":57704.0,"EndTime":57704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":57820.0,"Objects":[{"StartTime":57820.0,"EndTime":57820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":57935.0,"Objects":[{"StartTime":57935.0,"EndTime":57935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":58051.0,"Objects":[{"StartTime":58051.0,"EndTime":58051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":58166.0,"Objects":[{"StartTime":58166.0,"EndTime":58166.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":58224.0,"Objects":[{"StartTime":58224.0,"EndTime":58224.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":58281.0,"Objects":[{"StartTime":58281.0,"EndTime":58281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":58511.0,"EndTime":58511.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":58627.0,"Objects":[{"StartTime":58627.0,"EndTime":58627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":58685.0,"Objects":[{"StartTime":58685.0,"EndTime":58685.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":58743.0,"Objects":[{"StartTime":58743.0,"EndTime":58743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":58858.0,"EndTime":58858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":58974.0,"Objects":[{"StartTime":58974.0,"EndTime":58974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":59089.0,"EndTime":59089.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":59204.0,"Objects":[{"StartTime":59204.0,"EndTime":59204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":59319.0,"EndTime":59319.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":59435.0,"Objects":[{"StartTime":59435.0,"EndTime":59435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":59550.0,"EndTime":59550.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":59666.0,"Objects":[{"StartTime":59666.0,"EndTime":59666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":59781.0,"EndTime":59781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":59897.0,"Objects":[{"StartTime":59897.0,"EndTime":59897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":60012.0,"EndTime":60012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":60127.0,"Objects":[{"StartTime":60127.0,"EndTime":60127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":60357.0,"EndTime":60357.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":60474.0,"Objects":[{"StartTime":60474.0,"EndTime":60474.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":60704.0,"EndTime":60704.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":60820.0,"Objects":[{"StartTime":60820.0,"EndTime":60820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":60935.0,"EndTime":60935.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":61051.0,"Objects":[{"StartTime":61051.0,"EndTime":61051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":61166.0,"EndTime":61166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":61281.0,"Objects":[{"StartTime":61281.0,"EndTime":61281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":61396.0,"EndTime":61396.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":61512.0,"Objects":[{"StartTime":61512.0,"EndTime":61512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":61627.0,"EndTime":61627.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":61743.0,"Objects":[{"StartTime":61743.0,"EndTime":61743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":61858.0,"EndTime":61858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":61916.0,"Objects":[{"StartTime":61916.0,"EndTime":61916.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":61974.0,"Objects":[{"StartTime":61974.0,"EndTime":61974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":62204.0,"EndTime":62204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":62320.0,"Objects":[{"StartTime":62320.0,"EndTime":62320.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":62550.0,"EndTime":62550.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":62666.0,"Objects":[{"StartTime":62666.0,"EndTime":63127.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":63358.0,"Objects":[{"StartTime":63358.0,"EndTime":63358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":63474.0,"Objects":[{"StartTime":63474.0,"EndTime":63474.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":63589.0,"Objects":[{"StartTime":63589.0,"EndTime":63589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":63705.0,"Objects":[{"StartTime":63705.0,"EndTime":63705.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":63820.0,"Objects":[{"StartTime":63820.0,"EndTime":63820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":63877.0,"Objects":[{"StartTime":63877.0,"EndTime":63877.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":63935.0,"Objects":[{"StartTime":63935.0,"EndTime":63935.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":63993.0,"Objects":[{"StartTime":63993.0,"EndTime":63993.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":64051.0,"Objects":[{"StartTime":64051.0,"EndTime":64051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":64166.0,"EndTime":64166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":64281.0,"Objects":[{"StartTime":64281.0,"EndTime":64281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":64338.0,"Objects":[{"StartTime":64338.0,"EndTime":64338.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":64396.0,"Objects":[{"StartTime":64396.0,"EndTime":64396.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":64454.0,"Objects":[{"StartTime":64454.0,"EndTime":64454.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":64512.0,"Objects":[{"StartTime":64512.0,"EndTime":64512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":64627.0,"EndTime":64627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":64743.0,"Objects":[{"StartTime":64743.0,"EndTime":64743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":64800.0,"Objects":[{"StartTime":64800.0,"EndTime":64800.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":64858.0,"Objects":[{"StartTime":64858.0,"EndTime":64858.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":64916.0,"Objects":[{"StartTime":64916.0,"EndTime":64916.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":64974.0,"Objects":[{"StartTime":64974.0,"EndTime":64974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":65089.0,"EndTime":65089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":65205.0,"Objects":[{"StartTime":65205.0,"EndTime":65205.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":65262.0,"Objects":[{"StartTime":65262.0,"EndTime":65262.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":65320.0,"Objects":[{"StartTime":65320.0,"EndTime":65320.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":65378.0,"Objects":[{"StartTime":65378.0,"EndTime":65378.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":65436.0,"Objects":[{"StartTime":65436.0,"EndTime":65436.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":65551.0,"EndTime":65551.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":65666.0,"Objects":[{"StartTime":65666.0,"EndTime":65666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":65723.0,"Objects":[{"StartTime":65723.0,"EndTime":65723.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":65781.0,"Objects":[{"StartTime":65781.0,"EndTime":65781.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":65839.0,"Objects":[{"StartTime":65839.0,"EndTime":65839.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":65897.0,"Objects":[{"StartTime":65897.0,"EndTime":65897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":66012.0,"EndTime":66012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":66127.0,"Objects":[{"StartTime":66127.0,"EndTime":66127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":66184.0,"Objects":[{"StartTime":66184.0,"EndTime":66184.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":66242.0,"Objects":[{"StartTime":66242.0,"EndTime":66242.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":66300.0,"Objects":[{"StartTime":66300.0,"EndTime":66300.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":66358.0,"Objects":[{"StartTime":66358.0,"EndTime":66358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":66473.0,"EndTime":66473.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":66589.0,"Objects":[{"StartTime":66589.0,"EndTime":66589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":66704.0,"EndTime":66704.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":66820.0,"Objects":[{"StartTime":66820.0,"EndTime":66820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":66935.0,"EndTime":66935.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":67051.0,"Objects":[{"StartTime":67051.0,"EndTime":67051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":67281.0,"EndTime":67281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":67397.0,"Objects":[{"StartTime":67397.0,"EndTime":67397.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":67512.0,"Objects":[{"StartTime":67512.0,"EndTime":67512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":67742.0,"EndTime":67742.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":67858.0,"Objects":[{"StartTime":67858.0,"EndTime":67858.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":68088.0,"EndTime":68088.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":68204.0,"Objects":[{"StartTime":68204.0,"EndTime":68204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":68319.0,"EndTime":68319.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":68435.0,"Objects":[{"StartTime":68435.0,"EndTime":68435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":68550.0,"EndTime":68550.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":68666.0,"Objects":[{"StartTime":68666.0,"EndTime":68666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":68781.0,"EndTime":68781.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":68897.0,"Objects":[{"StartTime":68897.0,"EndTime":68897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":69012.0,"Objects":[{"StartTime":69012.0,"EndTime":69012.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":69127.0,"Objects":[{"StartTime":69127.0,"EndTime":69127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":69242.0,"Objects":[{"StartTime":69242.0,"EndTime":69242.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":69358.0,"Objects":[{"StartTime":69358.0,"EndTime":69358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":69473.0,"EndTime":69473.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":69589.0,"Objects":[{"StartTime":69589.0,"EndTime":69589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":69704.0,"EndTime":69704.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":69820.0,"Objects":[{"StartTime":69820.0,"EndTime":69820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":69935.0,"EndTime":69935.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":70051.0,"Objects":[{"StartTime":70051.0,"EndTime":70051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":70166.0,"EndTime":70166.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":70281.0,"Objects":[{"StartTime":70281.0,"EndTime":70281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":70339.0,"Objects":[{"StartTime":70339.0,"EndTime":70339.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":70397.0,"Objects":[{"StartTime":70397.0,"EndTime":70397.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":70455.0,"Objects":[{"StartTime":70455.0,"EndTime":70455.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":70512.0,"Objects":[{"StartTime":70512.0,"EndTime":70512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":70570.0,"Objects":[{"StartTime":70570.0,"EndTime":70570.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":70627.0,"Objects":[{"StartTime":70627.0,"EndTime":70627.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":70685.0,"Objects":[{"StartTime":70685.0,"EndTime":70685.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":70742.0,"Objects":[{"StartTime":70742.0,"EndTime":70742.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":70800.0,"Objects":[{"StartTime":70800.0,"EndTime":70800.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":70858.0,"Objects":[{"StartTime":70858.0,"EndTime":70858.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":70916.0,"Objects":[{"StartTime":70916.0,"EndTime":70916.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":70974.0,"Objects":[{"StartTime":70974.0,"EndTime":70974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":71031.0,"Objects":[{"StartTime":71031.0,"EndTime":71031.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":71089.0,"Objects":[{"StartTime":71089.0,"EndTime":71089.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":71146.0,"Objects":[{"StartTime":71146.0,"EndTime":71146.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":71204.0,"Objects":[{"StartTime":71204.0,"EndTime":71204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":71434.0,"EndTime":71434.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":71551.0,"Objects":[{"StartTime":71551.0,"EndTime":71551.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":71781.0,"EndTime":71781.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":71897.0,"Objects":[{"StartTime":71897.0,"EndTime":71897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":72012.0,"EndTime":72012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":72127.0,"Objects":[{"StartTime":72127.0,"EndTime":72127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":72243.0,"Objects":[{"StartTime":72243.0,"EndTime":72243.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":72473.0,"EndTime":72473.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":72589.0,"Objects":[{"StartTime":72589.0,"EndTime":72589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":72704.0,"EndTime":72704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":72820.0,"Objects":[{"StartTime":72820.0,"EndTime":72820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":72935.0,"EndTime":72935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":73051.0,"Objects":[{"StartTime":73051.0,"EndTime":73051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":73281.0,"EndTime":73281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":73397.0,"Objects":[{"StartTime":73397.0,"EndTime":73397.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":73627.0,"EndTime":73627.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":73743.0,"Objects":[{"StartTime":73743.0,"EndTime":73743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":73858.0,"EndTime":73858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":73974.0,"Objects":[{"StartTime":73974.0,"EndTime":73974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":74089.0,"Objects":[{"StartTime":74089.0,"EndTime":74089.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":74319.0,"EndTime":74319.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":74435.0,"Objects":[{"StartTime":74435.0,"EndTime":74435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":74550.0,"EndTime":74550.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":74666.0,"Objects":[{"StartTime":74666.0,"EndTime":74666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":74839.0,"EndTime":74839.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":74897.0,"Objects":[{"StartTime":74897.0,"EndTime":74897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":75127.0,"EndTime":75127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":75243.0,"Objects":[{"StartTime":75243.0,"EndTime":75243.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":75473.0,"EndTime":75473.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":75589.0,"Objects":[{"StartTime":75589.0,"EndTime":75589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":75704.0,"EndTime":75704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":75820.0,"Objects":[{"StartTime":75820.0,"EndTime":75820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":75935.0,"Objects":[{"StartTime":75935.0,"EndTime":75935.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":76165.0,"EndTime":76165.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":76281.0,"Objects":[{"StartTime":76281.0,"EndTime":76281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":76396.0,"EndTime":76396.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":76512.0,"Objects":[{"StartTime":76512.0,"EndTime":76512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":76627.0,"EndTime":76627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":76743.0,"Objects":[{"StartTime":76743.0,"EndTime":76743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":76973.0,"EndTime":76973.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":77089.0,"Objects":[{"StartTime":77089.0,"EndTime":77089.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":77319.0,"EndTime":77319.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":77435.0,"Objects":[{"StartTime":77435.0,"EndTime":77435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":77550.0,"EndTime":77550.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":77666.0,"Objects":[{"StartTime":77666.0,"EndTime":77666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":77781.0,"Objects":[{"StartTime":77781.0,"EndTime":77781.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":77897.0,"Objects":[{"StartTime":77897.0,"EndTime":77897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":78012.0,"Objects":[{"StartTime":78012.0,"EndTime":78012.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":78127.0,"Objects":[{"StartTime":78127.0,"EndTime":78127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":78300.0,"EndTime":78300.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":78358.0,"Objects":[{"StartTime":78358.0,"EndTime":78358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":78531.0,"EndTime":78531.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":78589.0,"Objects":[{"StartTime":78589.0,"EndTime":78589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":78819.0,"EndTime":78819.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":78935.0,"Objects":[{"StartTime":78935.0,"EndTime":78935.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":79165.0,"EndTime":79165.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":79281.0,"Objects":[{"StartTime":79281.0,"EndTime":79281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":79396.0,"EndTime":79396.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":79512.0,"Objects":[{"StartTime":79512.0,"EndTime":79512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":79627.0,"Objects":[{"StartTime":79627.0,"EndTime":79627.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":79857.0,"EndTime":79857.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":79974.0,"Objects":[{"StartTime":79974.0,"EndTime":79974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":80089.0,"EndTime":80089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":80204.0,"Objects":[{"StartTime":80204.0,"EndTime":80204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":80319.0,"EndTime":80319.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":80435.0,"Objects":[{"StartTime":80435.0,"EndTime":80435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":80665.0,"EndTime":80665.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":80781.0,"Objects":[{"StartTime":80781.0,"EndTime":80781.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":81011.0,"EndTime":81011.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":81127.0,"Objects":[{"StartTime":81127.0,"EndTime":81127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":81242.0,"EndTime":81242.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":81358.0,"Objects":[{"StartTime":81358.0,"EndTime":81358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":81474.0,"Objects":[{"StartTime":81474.0,"EndTime":81474.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":81704.0,"EndTime":81704.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":81820.0,"Objects":[{"StartTime":81820.0,"EndTime":81820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":81935.0,"EndTime":81935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":82051.0,"Objects":[{"StartTime":82051.0,"EndTime":82051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":82224.0,"EndTime":82224.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":82281.0,"Objects":[{"StartTime":82281.0,"EndTime":82281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":82511.0,"EndTime":82511.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":82627.0,"Objects":[{"StartTime":82627.0,"EndTime":82627.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":82857.0,"EndTime":82857.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":82974.0,"Objects":[{"StartTime":82974.0,"EndTime":82974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":83089.0,"EndTime":83089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":83204.0,"Objects":[{"StartTime":83204.0,"EndTime":83204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":83320.0,"Objects":[{"StartTime":83320.0,"EndTime":83320.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":83550.0,"EndTime":83550.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":83666.0,"Objects":[{"StartTime":83666.0,"EndTime":83666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":83781.0,"EndTime":83781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":83897.0,"Objects":[{"StartTime":83897.0,"EndTime":83897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":84012.0,"EndTime":84012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":84127.0,"Objects":[{"StartTime":84127.0,"EndTime":84127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":84357.0,"EndTime":84357.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":84474.0,"Objects":[{"StartTime":84474.0,"EndTime":84474.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":84704.0,"EndTime":84704.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":84820.0,"Objects":[{"StartTime":84820.0,"EndTime":84820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":84935.0,"EndTime":84935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":85051.0,"Objects":[{"StartTime":85051.0,"EndTime":85051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":85166.0,"EndTime":85166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":85281.0,"Objects":[{"StartTime":85281.0,"EndTime":85281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":85396.0,"EndTime":85396.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":85512.0,"Objects":[{"StartTime":85512.0,"EndTime":85512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":85685.0,"EndTime":85685.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":85743.0,"Objects":[{"StartTime":85743.0,"EndTime":85743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":85858.0,"EndTime":85858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":85974.0,"Objects":[{"StartTime":85974.0,"EndTime":85974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":86089.0,"EndTime":86089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":86204.0,"Objects":[{"StartTime":86204.0,"EndTime":86204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":86434.0,"EndTime":86434.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":86551.0,"Objects":[{"StartTime":86551.0,"EndTime":86551.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":86666.0,"Objects":[{"StartTime":86666.0,"EndTime":86666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":86781.0,"EndTime":86781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":86897.0,"Objects":[{"StartTime":86897.0,"EndTime":86897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":87127.0,"EndTime":87127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":87243.0,"Objects":[{"StartTime":87243.0,"EndTime":87243.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":87358.0,"Objects":[{"StartTime":87358.0,"EndTime":87358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":87588.0,"EndTime":87588.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":87704.0,"Objects":[{"StartTime":87704.0,"EndTime":87704.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":87820.0,"Objects":[{"StartTime":87820.0,"EndTime":87820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":87935.0,"EndTime":87935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":88051.0,"Objects":[{"StartTime":88051.0,"EndTime":88051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":88166.0,"EndTime":88166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":88281.0,"Objects":[{"StartTime":88281.0,"EndTime":88281.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":88339.0,"Objects":[{"StartTime":88339.0,"EndTime":88339.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":88397.0,"Objects":[{"StartTime":88397.0,"EndTime":88397.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":88454.0,"Objects":[{"StartTime":88454.0,"EndTime":88454.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":88512.0,"Objects":[{"StartTime":88512.0,"EndTime":88512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":88570.0,"Objects":[{"StartTime":88570.0,"EndTime":88570.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":88628.0,"Objects":[{"StartTime":88628.0,"EndTime":88628.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":88686.0,"Objects":[{"StartTime":88686.0,"EndTime":88686.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":88743.0,"Objects":[{"StartTime":88743.0,"EndTime":88743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":88973.0,"EndTime":88973.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":89089.0,"Objects":[{"StartTime":89089.0,"EndTime":89089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":89204.0,"Objects":[{"StartTime":89204.0,"EndTime":89204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":89434.0,"EndTime":89434.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":89551.0,"Objects":[{"StartTime":89551.0,"EndTime":89551.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":89666.0,"Objects":[{"StartTime":89666.0,"EndTime":89666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":89781.0,"EndTime":89781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":89897.0,"Objects":[{"StartTime":89897.0,"EndTime":89897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":90070.0,"EndTime":90070.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":90127.0,"Objects":[{"StartTime":90127.0,"EndTime":90127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":90242.0,"EndTime":90242.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":90358.0,"Objects":[{"StartTime":90358.0,"EndTime":90358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":90473.0,"EndTime":90473.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":90589.0,"Objects":[{"StartTime":90589.0,"EndTime":90589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":90819.0,"EndTime":90819.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":90935.0,"Objects":[{"StartTime":90935.0,"EndTime":90935.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":91165.0,"EndTime":91165.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":91281.0,"Objects":[{"StartTime":91281.0,"EndTime":91281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":91396.0,"EndTime":91396.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":91512.0,"Objects":[{"StartTime":91512.0,"EndTime":91512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":91627.0,"EndTime":91627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":91743.0,"Objects":[{"StartTime":91743.0,"EndTime":91743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":91858.0,"EndTime":91858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":91974.0,"Objects":[{"StartTime":91974.0,"EndTime":91974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":92089.0,"EndTime":92089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":92204.0,"Objects":[{"StartTime":92204.0,"EndTime":92204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":92262.0,"Objects":[{"StartTime":92262.0,"EndTime":92262.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":92320.0,"Objects":[{"StartTime":92320.0,"EndTime":92320.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":92377.0,"Objects":[{"StartTime":92377.0,"EndTime":92377.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":92435.0,"Objects":[{"StartTime":92435.0,"EndTime":92435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":92665.0,"EndTime":92665.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":92781.0,"Objects":[{"StartTime":92781.0,"EndTime":92781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":92897.0,"Objects":[{"StartTime":92897.0,"EndTime":92897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":93127.0,"EndTime":93127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":93243.0,"Objects":[{"StartTime":93243.0,"EndTime":93243.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":93358.0,"Objects":[{"StartTime":93358.0,"EndTime":93358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":93473.0,"EndTime":93473.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":93589.0,"Objects":[{"StartTime":93589.0,"EndTime":93589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":93762.0,"EndTime":93762.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":93820.0,"Objects":[{"StartTime":93820.0,"EndTime":93820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":93935.0,"EndTime":93935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":94051.0,"Objects":[{"StartTime":94051.0,"EndTime":94051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":94166.0,"EndTime":94166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":94281.0,"Objects":[{"StartTime":94281.0,"EndTime":94281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":94511.0,"EndTime":94511.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":94627.0,"Objects":[{"StartTime":94627.0,"EndTime":94627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":94743.0,"Objects":[{"StartTime":94743.0,"EndTime":94743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":94973.0,"EndTime":94973.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":95089.0,"Objects":[{"StartTime":95089.0,"EndTime":95089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":95204.0,"Objects":[{"StartTime":95204.0,"EndTime":95204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":95377.0,"EndTime":95377.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":95435.0,"Objects":[{"StartTime":95435.0,"EndTime":95435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":95550.0,"EndTime":95550.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":95666.0,"Objects":[{"StartTime":95666.0,"EndTime":95666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":95781.0,"EndTime":95781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":95897.0,"Objects":[{"StartTime":95897.0,"EndTime":95897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":96012.0,"EndTime":96012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":96127.0,"Objects":[{"StartTime":96127.0,"EndTime":96127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":96357.0,"EndTime":96357.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":96474.0,"Objects":[{"StartTime":96474.0,"EndTime":96474.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":96589.0,"Objects":[{"StartTime":96589.0,"EndTime":96589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":96819.0,"EndTime":96819.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":96935.0,"Objects":[{"StartTime":96935.0,"EndTime":96935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":97051.0,"Objects":[{"StartTime":97051.0,"EndTime":97051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":97281.0,"EndTime":97281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":97397.0,"Objects":[{"StartTime":97397.0,"EndTime":97397.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":97512.0,"Objects":[{"StartTime":97512.0,"EndTime":97512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":97627.0,"EndTime":97627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":97743.0,"Objects":[{"StartTime":97743.0,"EndTime":97743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":97858.0,"EndTime":97858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":97974.0,"Objects":[{"StartTime":97974.0,"EndTime":97974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":98204.0,"EndTime":98204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":98320.0,"Objects":[{"StartTime":98320.0,"EndTime":98320.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":98435.0,"Objects":[{"StartTime":98435.0,"EndTime":98435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":98665.0,"EndTime":98665.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":98781.0,"Objects":[{"StartTime":98781.0,"EndTime":98781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":98897.0,"Objects":[{"StartTime":98897.0,"EndTime":98897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":99127.0,"EndTime":99127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":99243.0,"Objects":[{"StartTime":99243.0,"EndTime":99243.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":99358.0,"Objects":[{"StartTime":99358.0,"EndTime":99358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":99473.0,"EndTime":99473.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":99589.0,"Objects":[{"StartTime":99589.0,"EndTime":99589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":99704.0,"EndTime":99704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":99820.0,"Objects":[{"StartTime":99820.0,"EndTime":99820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":99935.0,"Objects":[{"StartTime":99935.0,"EndTime":99935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":100051.0,"Objects":[{"StartTime":100051.0,"EndTime":100051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":100166.0,"Objects":[{"StartTime":100166.0,"EndTime":100166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":100281.0,"Objects":[{"StartTime":100281.0,"EndTime":100281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":100397.0,"Objects":[{"StartTime":100397.0,"EndTime":100397.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":100512.0,"Objects":[{"StartTime":100512.0,"EndTime":100512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":100628.0,"Objects":[{"StartTime":100628.0,"EndTime":100628.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":100743.0,"Objects":[{"StartTime":100743.0,"EndTime":100743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":100858.0,"EndTime":100858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":100974.0,"Objects":[{"StartTime":100974.0,"EndTime":100974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":101089.0,"EndTime":101089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":101204.0,"Objects":[{"StartTime":101204.0,"EndTime":101204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":101319.0,"EndTime":101319.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":101435.0,"Objects":[{"StartTime":101435.0,"EndTime":101435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":101550.0,"EndTime":101550.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":101666.0,"Objects":[{"StartTime":101666.0,"EndTime":101666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":101781.0,"EndTime":101781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":101897.0,"Objects":[{"StartTime":101897.0,"EndTime":101897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":102012.0,"EndTime":102012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":102127.0,"Objects":[{"StartTime":102127.0,"EndTime":102127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":102243.0,"Objects":[{"StartTime":102243.0,"EndTime":102243.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":102300.0,"Objects":[{"StartTime":102300.0,"EndTime":102300.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":102358.0,"Objects":[{"StartTime":102358.0,"EndTime":102358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":102416.0,"Objects":[{"StartTime":102416.0,"EndTime":102416.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":102474.0,"Objects":[{"StartTime":102474.0,"EndTime":102474.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":102531.0,"Objects":[{"StartTime":102531.0,"EndTime":102531.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":102589.0,"Objects":[{"StartTime":102589.0,"EndTime":102589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":102646.0,"Objects":[{"StartTime":102646.0,"EndTime":102646.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":102704.0,"Objects":[{"StartTime":102704.0,"EndTime":102704.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":102762.0,"Objects":[{"StartTime":102762.0,"EndTime":102762.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":102819.0,"Objects":[{"StartTime":102819.0,"EndTime":102819.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":102935.0,"Objects":[{"StartTime":102935.0,"EndTime":102935.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":102992.0,"EndTime":102992.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":103051.0,"Objects":[{"StartTime":103051.0,"EndTime":103051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":103108.0,"Objects":[{"StartTime":103108.0,"EndTime":103108.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":103166.0,"Objects":[{"StartTime":103166.0,"EndTime":103166.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":103224.0,"Objects":[{"StartTime":103224.0,"EndTime":103224.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":103281.0,"Objects":[{"StartTime":103281.0,"EndTime":103281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":103339.0,"Objects":[{"StartTime":103339.0,"EndTime":103339.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":103397.0,"Objects":[{"StartTime":103397.0,"EndTime":103397.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":103454.0,"Objects":[{"StartTime":103454.0,"EndTime":103454.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":103512.0,"Objects":[{"StartTime":103512.0,"EndTime":103512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":103742.0,"EndTime":103742.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":103858.0,"Objects":[{"StartTime":103858.0,"EndTime":103858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":103974.0,"Objects":[{"StartTime":103974.0,"EndTime":103974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":104204.0,"EndTime":104204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":104320.0,"Objects":[{"StartTime":104320.0,"EndTime":104320.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":104435.0,"Objects":[{"StartTime":104435.0,"EndTime":104435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":104550.0,"EndTime":104550.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":104666.0,"Objects":[{"StartTime":104666.0,"EndTime":104666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":104896.0,"EndTime":104896.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":105012.0,"Objects":[{"StartTime":105012.0,"EndTime":105012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":105127.0,"Objects":[{"StartTime":105127.0,"EndTime":105127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":105243.0,"Objects":[{"StartTime":105243.0,"EndTime":105243.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":105301.0,"Objects":[{"StartTime":105301.0,"EndTime":105301.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":105358.0,"Objects":[{"StartTime":105358.0,"EndTime":105358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":105588.0,"EndTime":105588.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":105704.0,"Objects":[{"StartTime":105704.0,"EndTime":105704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":105820.0,"Objects":[{"StartTime":105820.0,"EndTime":105820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":105935.0,"EndTime":105935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":106051.0,"Objects":[{"StartTime":106051.0,"EndTime":106051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":106166.0,"EndTime":106166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":106281.0,"Objects":[{"StartTime":106281.0,"EndTime":106281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":106396.0,"EndTime":106396.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":106512.0,"Objects":[{"StartTime":106512.0,"EndTime":106512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":106627.0,"EndTime":106627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":106743.0,"Objects":[{"StartTime":106743.0,"EndTime":106743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":106916.0,"EndTime":106916.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":106974.0,"Objects":[{"StartTime":106974.0,"EndTime":106974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":107089.0,"EndTime":107089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":107204.0,"Objects":[{"StartTime":107204.0,"EndTime":107204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":107434.0,"EndTime":107434.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":107551.0,"Objects":[{"StartTime":107551.0,"EndTime":107551.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":107666.0,"Objects":[{"StartTime":107666.0,"EndTime":107666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":107896.0,"EndTime":107896.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":108012.0,"Objects":[{"StartTime":108012.0,"EndTime":108012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":108127.0,"Objects":[{"StartTime":108127.0,"EndTime":108127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":108242.0,"EndTime":108242.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":108358.0,"Objects":[{"StartTime":108358.0,"EndTime":108358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":108588.0,"EndTime":108588.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":108704.0,"Objects":[{"StartTime":108704.0,"EndTime":108704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":108820.0,"Objects":[{"StartTime":108820.0,"EndTime":108820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":108935.0,"Objects":[{"StartTime":108935.0,"EndTime":108935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":108993.0,"Objects":[{"StartTime":108993.0,"EndTime":108993.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":109051.0,"Objects":[{"StartTime":109051.0,"EndTime":109051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":109281.0,"EndTime":109281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":109397.0,"Objects":[{"StartTime":109397.0,"EndTime":109397.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":109512.0,"Objects":[{"StartTime":109512.0,"EndTime":109512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":109627.0,"EndTime":109627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":109743.0,"Objects":[{"StartTime":109743.0,"EndTime":109743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":109858.0,"EndTime":109858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":109974.0,"Objects":[{"StartTime":109974.0,"EndTime":109974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":110089.0,"EndTime":110089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":110204.0,"Objects":[{"StartTime":110204.0,"EndTime":110204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":110319.0,"EndTime":110319.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":110435.0,"Objects":[{"StartTime":110435.0,"EndTime":110435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":110608.0,"EndTime":110608.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":110666.0,"Objects":[{"StartTime":110666.0,"EndTime":110666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":110781.0,"EndTime":110781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":110897.0,"Objects":[{"StartTime":110897.0,"EndTime":110897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":111127.0,"EndTime":111127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":111243.0,"Objects":[{"StartTime":111243.0,"EndTime":111243.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":111358.0,"Objects":[{"StartTime":111358.0,"EndTime":111358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":111588.0,"EndTime":111588.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":111704.0,"Objects":[{"StartTime":111704.0,"EndTime":111704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":111820.0,"Objects":[{"StartTime":111820.0,"EndTime":111820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":111935.0,"EndTime":111935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":112051.0,"Objects":[{"StartTime":112051.0,"EndTime":112051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":112281.0,"EndTime":112281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":112397.0,"Objects":[{"StartTime":112397.0,"EndTime":112397.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":112512.0,"Objects":[{"StartTime":112512.0,"EndTime":112512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":112627.0,"Objects":[{"StartTime":112627.0,"EndTime":112627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":112685.0,"Objects":[{"StartTime":112685.0,"EndTime":112685.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":112743.0,"Objects":[{"StartTime":112743.0,"EndTime":112743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":112973.0,"EndTime":112973.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":113089.0,"Objects":[{"StartTime":113089.0,"EndTime":113089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":113204.0,"Objects":[{"StartTime":113204.0,"EndTime":113204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":113434.0,"EndTime":113434.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":113551.0,"Objects":[{"StartTime":113551.0,"EndTime":113551.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":113666.0,"Objects":[{"StartTime":113666.0,"EndTime":113666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":113896.0,"EndTime":113896.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":114012.0,"Objects":[{"StartTime":114012.0,"EndTime":114012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":114127.0,"Objects":[{"StartTime":114127.0,"EndTime":114127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":114300.0,"EndTime":114300.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":114358.0,"Objects":[{"StartTime":114358.0,"EndTime":114358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":114473.0,"EndTime":114473.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":114589.0,"Objects":[{"StartTime":114589.0,"EndTime":115281.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":115512.0,"Objects":[{"StartTime":115512.0,"EndTime":115512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":116435.0,"Objects":[{"StartTime":116435.0,"EndTime":117127.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":117358.0,"Objects":[{"StartTime":117358.0,"EndTime":117358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":117589.0,"Objects":[{"StartTime":117589.0,"EndTime":117589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":117820.0,"Objects":[{"StartTime":117820.0,"EndTime":117820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":118051.0,"Objects":[{"StartTime":118051.0,"EndTime":118051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":118166.0,"EndTime":118166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":118281.0,"Objects":[{"StartTime":118281.0,"EndTime":118281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":118396.0,"EndTime":118396.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":118512.0,"Objects":[{"StartTime":118512.0,"EndTime":118512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":118627.0,"EndTime":118627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":118743.0,"Objects":[{"StartTime":118743.0,"EndTime":118743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":118858.0,"Objects":[{"StartTime":118858.0,"EndTime":118858.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":119088.0,"EndTime":119088.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":119204.0,"Objects":[{"StartTime":119204.0,"EndTime":119204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":119262.0,"Objects":[{"StartTime":119262.0,"EndTime":119262.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":119319.0,"Objects":[{"StartTime":119319.0,"EndTime":119319.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":119377.0,"Objects":[{"StartTime":119377.0,"EndTime":119377.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":119434.0,"Objects":[{"StartTime":119434.0,"EndTime":119434.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":119493.0,"Objects":[{"StartTime":119493.0,"EndTime":119493.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":119551.0,"Objects":[{"StartTime":119551.0,"EndTime":119551.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":119608.0,"Objects":[{"StartTime":119608.0,"EndTime":119608.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":119666.0,"Objects":[{"StartTime":119666.0,"EndTime":119666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":119723.0,"Objects":[{"StartTime":119723.0,"EndTime":119723.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":119781.0,"Objects":[{"StartTime":119781.0,"EndTime":119781.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":119839.0,"Objects":[{"StartTime":119839.0,"EndTime":119839.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":119897.0,"Objects":[{"StartTime":119897.0,"EndTime":119897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":119954.0,"Objects":[{"StartTime":119954.0,"EndTime":119954.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":120012.0,"Objects":[{"StartTime":120012.0,"EndTime":120012.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":120070.0,"Objects":[{"StartTime":120070.0,"EndTime":120070.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":120127.0,"Objects":[{"StartTime":120127.0,"EndTime":120127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":120357.0,"EndTime":120357.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":120474.0,"Objects":[{"StartTime":120474.0,"EndTime":120474.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":120704.0,"EndTime":120704.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":120820.0,"Objects":[{"StartTime":120820.0,"EndTime":120820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":120935.0,"EndTime":120935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":121051.0,"Objects":[{"StartTime":121051.0,"EndTime":121051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":121166.0,"Objects":[{"StartTime":121166.0,"EndTime":121166.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":121396.0,"EndTime":121396.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":121512.0,"Objects":[{"StartTime":121512.0,"EndTime":121512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":121627.0,"EndTime":121627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":121743.0,"Objects":[{"StartTime":121743.0,"EndTime":121743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":121858.0,"EndTime":121858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":121974.0,"Objects":[{"StartTime":121974.0,"EndTime":121974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":122204.0,"EndTime":122204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":122320.0,"Objects":[{"StartTime":122320.0,"EndTime":122320.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":122550.0,"EndTime":122550.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":122666.0,"Objects":[{"StartTime":122666.0,"EndTime":122666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":122781.0,"EndTime":122781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":122897.0,"Objects":[{"StartTime":122897.0,"EndTime":122897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":123012.0,"Objects":[{"StartTime":123012.0,"EndTime":123012.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":123242.0,"EndTime":123242.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":123358.0,"Objects":[{"StartTime":123358.0,"EndTime":123358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":123473.0,"EndTime":123473.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":123589.0,"Objects":[{"StartTime":123589.0,"EndTime":123589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":123704.0,"EndTime":123704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":123820.0,"Objects":[{"StartTime":123820.0,"EndTime":123820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":124050.0,"EndTime":124050.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":124166.0,"Objects":[{"StartTime":124166.0,"EndTime":124166.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":124396.0,"EndTime":124396.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":124512.0,"Objects":[{"StartTime":124512.0,"EndTime":124512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":124627.0,"EndTime":124627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":124743.0,"Objects":[{"StartTime":124743.0,"EndTime":124743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":124858.0,"Objects":[{"StartTime":124858.0,"EndTime":124858.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":125088.0,"EndTime":125088.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":125204.0,"Objects":[{"StartTime":125204.0,"EndTime":125204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":125319.0,"EndTime":125319.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":125435.0,"Objects":[{"StartTime":125435.0,"EndTime":125435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":125550.0,"EndTime":125550.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":125666.0,"Objects":[{"StartTime":125666.0,"EndTime":125666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":125781.0,"Objects":[{"StartTime":125781.0,"EndTime":125781.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":125897.0,"Objects":[{"StartTime":125897.0,"EndTime":125897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":126012.0,"Objects":[{"StartTime":126012.0,"EndTime":126012.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":126127.0,"Objects":[{"StartTime":126127.0,"EndTime":126127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":126357.0,"EndTime":126357.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":126474.0,"Objects":[{"StartTime":126474.0,"EndTime":126474.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":126589.0,"Objects":[{"StartTime":126589.0,"EndTime":126589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":126762.0,"EndTime":126762.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":126820.0,"Objects":[{"StartTime":126820.0,"EndTime":126820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":127050.0,"EndTime":127050.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":127166.0,"Objects":[{"StartTime":127166.0,"EndTime":127166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":127281.0,"Objects":[{"StartTime":127281.0,"EndTime":127281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":127397.0,"Objects":[{"StartTime":127397.0,"EndTime":127397.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":127454.0,"Objects":[{"StartTime":127454.0,"EndTime":127454.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":127512.0,"Objects":[{"StartTime":127512.0,"EndTime":127512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":127742.0,"EndTime":127742.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":127858.0,"Objects":[{"StartTime":127858.0,"EndTime":127858.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":128088.0,"EndTime":128088.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":128204.0,"Objects":[{"StartTime":128204.0,"EndTime":128204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":128319.0,"EndTime":128319.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":128435.0,"Objects":[{"StartTime":128435.0,"EndTime":128435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":128551.0,"Objects":[{"StartTime":128551.0,"EndTime":128551.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":128781.0,"EndTime":128781.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":128897.0,"Objects":[{"StartTime":128897.0,"EndTime":128897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":129012.0,"EndTime":129012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":129127.0,"Objects":[{"StartTime":129127.0,"EndTime":129127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":129242.0,"EndTime":129242.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":129358.0,"Objects":[{"StartTime":129358.0,"EndTime":129358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":129588.0,"EndTime":129588.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":129704.0,"Objects":[{"StartTime":129704.0,"EndTime":129704.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":129934.0,"EndTime":129934.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":130051.0,"Objects":[{"StartTime":130051.0,"EndTime":130051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":130166.0,"EndTime":130166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":130281.0,"Objects":[{"StartTime":130281.0,"EndTime":130281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":130397.0,"Objects":[{"StartTime":130397.0,"EndTime":130397.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":130627.0,"EndTime":130627.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":130743.0,"Objects":[{"StartTime":130743.0,"EndTime":130743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":130858.0,"EndTime":130858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":130974.0,"Objects":[{"StartTime":130974.0,"EndTime":130974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":131089.0,"EndTime":131089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":131204.0,"Objects":[{"StartTime":131204.0,"EndTime":131204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":131434.0,"EndTime":131434.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":131551.0,"Objects":[{"StartTime":131551.0,"EndTime":131551.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":131781.0,"EndTime":131781.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":131897.0,"Objects":[{"StartTime":131897.0,"EndTime":131897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":132012.0,"EndTime":132012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":132127.0,"Objects":[{"StartTime":132127.0,"EndTime":132127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":132243.0,"Objects":[{"StartTime":132243.0,"EndTime":132243.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":132473.0,"EndTime":132473.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":132589.0,"Objects":[{"StartTime":132589.0,"EndTime":132589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":132704.0,"EndTime":132704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":132820.0,"Objects":[{"StartTime":132820.0,"EndTime":132820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":132935.0,"EndTime":132935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":133051.0,"Objects":[{"StartTime":133051.0,"EndTime":133051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":133108.0,"Objects":[{"StartTime":133108.0,"EndTime":133108.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":133166.0,"Objects":[{"StartTime":133166.0,"EndTime":133166.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":133224.0,"Objects":[{"StartTime":133224.0,"EndTime":133224.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":133281.0,"Objects":[{"StartTime":133281.0,"EndTime":133281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":133339.0,"Objects":[{"StartTime":133339.0,"EndTime":133339.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":133397.0,"Objects":[{"StartTime":133397.0,"EndTime":133397.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":133454.0,"Objects":[{"StartTime":133454.0,"EndTime":133454.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":133512.0,"Objects":[{"StartTime":133512.0,"EndTime":133512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":133743.0,"Objects":[{"StartTime":133743.0,"EndTime":133743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":133858.0,"Objects":[{"StartTime":133858.0,"EndTime":133858.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":133973.0,"Objects":[{"StartTime":133973.0,"EndTime":133973.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":134031.0,"Objects":[{"StartTime":134031.0,"EndTime":134031.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":134088.0,"Objects":[{"StartTime":134088.0,"EndTime":134088.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":134146.0,"Objects":[{"StartTime":134146.0,"EndTime":134146.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":134204.0,"Objects":[{"StartTime":134204.0,"EndTime":134204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":134434.0,"EndTime":134434.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":134666.0,"Objects":[{"StartTime":134666.0,"EndTime":134666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":134781.0,"EndTime":134781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":134897.0,"Objects":[{"StartTime":134897.0,"EndTime":134897.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":135012.0,"EndTime":135012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":135127.0,"Objects":[{"StartTime":135127.0,"EndTime":135127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":135242.0,"EndTime":135242.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":135358.0,"Objects":[{"StartTime":135358.0,"EndTime":135358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":135588.0,"EndTime":135588.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":135704.0,"Objects":[{"StartTime":135704.0,"EndTime":135704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":135819.0,"EndTime":135819.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":135935.0,"Objects":[{"StartTime":135935.0,"EndTime":135935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":136050.0,"EndTime":136050.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":136166.0,"Objects":[{"StartTime":136166.0,"EndTime":136166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":136281.0,"EndTime":136281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":136397.0,"Objects":[{"StartTime":136397.0,"EndTime":136397.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":136512.0,"EndTime":136512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":136627.0,"Objects":[{"StartTime":136627.0,"EndTime":136627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":136743.0,"Objects":[{"StartTime":136743.0,"EndTime":136743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":136858.0,"EndTime":136858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":136974.0,"Objects":[{"StartTime":136974.0,"EndTime":136974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":137089.0,"EndTime":137089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":137204.0,"Objects":[{"StartTime":137204.0,"EndTime":137204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":137319.0,"EndTime":137319.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":137435.0,"Objects":[{"StartTime":137435.0,"EndTime":137435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":137550.0,"EndTime":137550.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":137666.0,"Objects":[{"StartTime":137666.0,"EndTime":137666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":137896.0,"EndTime":137896.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":138012.0,"Objects":[{"StartTime":138012.0,"EndTime":138012.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":138242.0,"EndTime":138242.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":138358.0,"Objects":[{"StartTime":138358.0,"EndTime":138358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":138473.0,"EndTime":138473.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":138589.0,"Objects":[{"StartTime":138589.0,"EndTime":138589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":138819.0,"EndTime":138819.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":138935.0,"Objects":[{"StartTime":138935.0,"EndTime":138935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":139051.0,"Objects":[{"StartTime":139051.0,"EndTime":139051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":139281.0,"EndTime":139281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":139397.0,"Objects":[{"StartTime":139397.0,"EndTime":139397.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":139512.0,"Objects":[{"StartTime":139512.0,"EndTime":139512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":139742.0,"EndTime":139742.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":139858.0,"Objects":[{"StartTime":139858.0,"EndTime":139858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":139974.0,"Objects":[{"StartTime":139974.0,"EndTime":139974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":140089.0,"EndTime":140089.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":140204.0,"Objects":[{"StartTime":140204.0,"EndTime":140204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":140319.0,"EndTime":140319.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":140435.0,"Objects":[{"StartTime":140435.0,"EndTime":140435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":140550.0,"EndTime":140550.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":140666.0,"Objects":[{"StartTime":140666.0,"EndTime":140666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":140781.0,"EndTime":140781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":140897.0,"Objects":[{"StartTime":140897.0,"EndTime":140897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":141012.0,"EndTime":141012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":141127.0,"Objects":[{"StartTime":141127.0,"EndTime":141127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":141242.0,"EndTime":141242.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":141358.0,"Objects":[{"StartTime":141358.0,"EndTime":141358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":141588.0,"EndTime":141588.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":141704.0,"Objects":[{"StartTime":141704.0,"EndTime":141704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":141820.0,"Objects":[{"StartTime":141820.0,"EndTime":141820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":142050.0,"EndTime":142050.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":142166.0,"Objects":[{"StartTime":142166.0,"EndTime":142166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":142281.0,"Objects":[{"StartTime":142281.0,"EndTime":142281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":142396.0,"EndTime":142396.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":142512.0,"Objects":[{"StartTime":142512.0,"EndTime":142512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":142627.0,"EndTime":142627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":142743.0,"Objects":[{"StartTime":142743.0,"EndTime":142743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":142858.0,"EndTime":142858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":142974.0,"Objects":[{"StartTime":142974.0,"EndTime":142974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":143089.0,"EndTime":143089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":143204.0,"Objects":[{"StartTime":143204.0,"EndTime":143204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":143377.0,"EndTime":143377.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":143435.0,"Objects":[{"StartTime":143435.0,"EndTime":143435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":143608.0,"EndTime":143608.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":143666.0,"Objects":[{"StartTime":143666.0,"EndTime":143666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":143839.0,"EndTime":143839.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":143897.0,"Objects":[{"StartTime":143897.0,"EndTime":143897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":144070.0,"EndTime":144070.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":144127.0,"Objects":[{"StartTime":144127.0,"EndTime":144127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":144357.0,"EndTime":144357.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":144474.0,"Objects":[{"StartTime":144474.0,"EndTime":144474.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":144589.0,"Objects":[{"StartTime":144589.0,"EndTime":144589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":144819.0,"EndTime":144819.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":144935.0,"Objects":[{"StartTime":144935.0,"EndTime":144935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":145051.0,"Objects":[{"StartTime":145051.0,"EndTime":145051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":145166.0,"EndTime":145166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":145281.0,"Objects":[{"StartTime":145281.0,"EndTime":145281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":145396.0,"EndTime":145396.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":145512.0,"Objects":[{"StartTime":145512.0,"EndTime":145512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":145627.0,"EndTime":145627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":145742.0,"Objects":[{"StartTime":145742.0,"EndTime":145742.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":145857.0,"EndTime":145857.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":145974.0,"Objects":[{"StartTime":145974.0,"EndTime":145974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":146089.0,"EndTime":146089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":146204.0,"Objects":[{"StartTime":146204.0,"EndTime":146204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":146319.0,"EndTime":146319.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":146435.0,"Objects":[{"StartTime":146435.0,"EndTime":146435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":146550.0,"EndTime":146550.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":146666.0,"Objects":[{"StartTime":146666.0,"EndTime":146666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":146781.0,"EndTime":146781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":146897.0,"Objects":[{"StartTime":146897.0,"EndTime":146897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":147012.0,"EndTime":147012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":147127.0,"Objects":[{"StartTime":147127.0,"EndTime":147127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":147242.0,"EndTime":147242.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":147358.0,"Objects":[{"StartTime":147358.0,"EndTime":147358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":147473.0,"EndTime":147473.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":147589.0,"Objects":[{"StartTime":147589.0,"EndTime":147589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":147704.0,"EndTime":147704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":147820.0,"Objects":[{"StartTime":147820.0,"EndTime":147820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":147935.0,"EndTime":147935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":148050.0,"Objects":[{"StartTime":148050.0,"EndTime":148050.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":148165.0,"EndTime":148165.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":148281.0,"Objects":[{"StartTime":148281.0,"EndTime":148281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":148397.0,"Objects":[{"StartTime":148397.0,"EndTime":148397.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":148512.0,"Objects":[{"StartTime":148512.0,"EndTime":148512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":148627.0,"Objects":[{"StartTime":148627.0,"EndTime":148627.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":148743.0,"Objects":[{"StartTime":148743.0,"EndTime":148743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":148858.0,"Objects":[{"StartTime":148858.0,"EndTime":148858.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":148916.0,"Objects":[{"StartTime":148916.0,"EndTime":148916.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":148974.0,"Objects":[{"StartTime":148974.0,"EndTime":148974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":149089.0,"Objects":[{"StartTime":149089.0,"EndTime":149089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":149204.0,"Objects":[{"StartTime":149204.0,"EndTime":149204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":149320.0,"Objects":[{"StartTime":149320.0,"EndTime":149320.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":149435.0,"Objects":[{"StartTime":149435.0,"EndTime":149435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":149551.0,"Objects":[{"StartTime":149551.0,"EndTime":149551.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":149666.0,"Objects":[{"StartTime":149666.0,"EndTime":150358.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":150589.0,"Objects":[{"StartTime":150589.0,"EndTime":151281.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":151512.0,"Objects":[{"StartTime":151512.0,"EndTime":152204.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":152320.0,"Objects":[{"StartTime":152320.0,"EndTime":152320.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":152377.0,"Objects":[{"StartTime":152377.0,"EndTime":152377.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":152435.0,"Objects":[{"StartTime":152435.0,"EndTime":152435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":152551.0,"Objects":[{"StartTime":152551.0,"EndTime":152551.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":152666.0,"Objects":[{"StartTime":152666.0,"EndTime":152666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":152781.0,"Objects":[{"StartTime":152781.0,"EndTime":152781.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":152897.0,"Objects":[{"StartTime":152897.0,"EndTime":152897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":153012.0,"Objects":[{"StartTime":153012.0,"EndTime":153012.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":153128.0,"Objects":[{"StartTime":153128.0,"EndTime":153128.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":153243.0,"Objects":[{"StartTime":153243.0,"EndTime":153243.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":153358.0,"Objects":[{"StartTime":153358.0,"EndTime":154050.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":154281.0,"Objects":[{"StartTime":154281.0,"EndTime":154973.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":155204.0,"Objects":[{"StartTime":155204.0,"EndTime":155896.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":156127.0,"Objects":[{"StartTime":156127.0,"EndTime":156127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":156185.0,"Objects":[{"StartTime":156185.0,"EndTime":156185.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":156243.0,"Objects":[{"StartTime":156243.0,"EndTime":156243.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":156358.0,"Objects":[{"StartTime":156358.0,"EndTime":156358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":156474.0,"Objects":[{"StartTime":156474.0,"EndTime":156474.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":156531.0,"Objects":[{"StartTime":156531.0,"EndTime":156531.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":156589.0,"Objects":[{"StartTime":156589.0,"EndTime":156589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":156704.0,"Objects":[{"StartTime":156704.0,"EndTime":156704.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":156820.0,"Objects":[{"StartTime":156820.0,"EndTime":156820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":156935.0,"Objects":[{"StartTime":156935.0,"EndTime":156935.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":157051.0,"Objects":[{"StartTime":157051.0,"EndTime":157743.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":157974.0,"Objects":[{"StartTime":157974.0,"EndTime":158666.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":158897.0,"Objects":[{"StartTime":158897.0,"EndTime":159589.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":159704.0,"Objects":[{"StartTime":159704.0,"EndTime":159704.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":159762.0,"Objects":[{"StartTime":159762.0,"EndTime":159762.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":159820.0,"Objects":[{"StartTime":159820.0,"EndTime":159820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":159935.0,"Objects":[{"StartTime":159935.0,"EndTime":159935.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":160051.0,"Objects":[{"StartTime":160051.0,"EndTime":160051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":160166.0,"Objects":[{"StartTime":160166.0,"EndTime":160166.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":160281.0,"Objects":[{"StartTime":160281.0,"EndTime":160281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":160397.0,"Objects":[{"StartTime":160397.0,"EndTime":160397.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":160513.0,"Objects":[{"StartTime":160513.0,"EndTime":160513.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":160627.0,"Objects":[{"StartTime":160627.0,"EndTime":160627.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":160743.0,"Objects":[{"StartTime":160743.0,"EndTime":160743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":160858.0,"EndTime":160858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":160974.0,"Objects":[{"StartTime":160974.0,"EndTime":160974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":161089.0,"EndTime":161089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":161204.0,"Objects":[{"StartTime":161204.0,"EndTime":161204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":161319.0,"EndTime":161319.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":161435.0,"Objects":[{"StartTime":161435.0,"EndTime":161435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":161550.0,"EndTime":161550.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":161666.0,"Objects":[{"StartTime":161666.0,"EndTime":161666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":161781.0,"EndTime":161781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":161897.0,"Objects":[{"StartTime":161897.0,"EndTime":161897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":162012.0,"EndTime":162012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":162127.0,"Objects":[{"StartTime":162127.0,"EndTime":162127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":162242.0,"EndTime":162242.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":162358.0,"Objects":[{"StartTime":162358.0,"EndTime":162358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":162473.0,"EndTime":162473.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":162589.0,"Objects":[{"StartTime":162589.0,"EndTime":162589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":162704.0,"EndTime":162704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":162820.0,"Objects":[{"StartTime":162820.0,"EndTime":162820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":162935.0,"EndTime":162935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":163051.0,"Objects":[{"StartTime":163051.0,"EndTime":163051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":163166.0,"EndTime":163166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":163281.0,"Objects":[{"StartTime":163281.0,"EndTime":163281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":163396.0,"EndTime":163396.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":163512.0,"Objects":[{"StartTime":163512.0,"EndTime":163512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":163627.0,"EndTime":163627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":163743.0,"Objects":[{"StartTime":163743.0,"EndTime":163743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":163858.0,"EndTime":163858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":163974.0,"Objects":[{"StartTime":163974.0,"EndTime":163974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":164089.0,"EndTime":164089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":164205.0,"Objects":[{"StartTime":164205.0,"EndTime":164205.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":164320.0,"EndTime":164320.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":164435.0,"Objects":[{"StartTime":164435.0,"EndTime":164435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":164550.0,"EndTime":164550.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":164666.0,"Objects":[{"StartTime":164666.0,"EndTime":164666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":164781.0,"EndTime":164781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":164897.0,"Objects":[{"StartTime":164897.0,"EndTime":164897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":165012.0,"EndTime":165012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":165127.0,"Objects":[{"StartTime":165127.0,"EndTime":165127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":165243.0,"Objects":[{"StartTime":165243.0,"EndTime":165243.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":165301.0,"Objects":[{"StartTime":165301.0,"EndTime":165301.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":165358.0,"Objects":[{"StartTime":165358.0,"EndTime":165358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":165473.0,"EndTime":165473.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":165589.0,"Objects":[{"StartTime":165589.0,"EndTime":165589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":165704.0,"Objects":[{"StartTime":165704.0,"EndTime":165704.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":165820.0,"Objects":[{"StartTime":165820.0,"EndTime":165820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":165877.0,"Objects":[{"StartTime":165877.0,"EndTime":165877.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":165935.0,"Objects":[{"StartTime":165935.0,"EndTime":165935.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":165993.0,"Objects":[{"StartTime":165993.0,"EndTime":165993.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":166050.0,"Objects":[{"StartTime":166050.0,"EndTime":166050.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":166108.0,"Objects":[{"StartTime":166108.0,"EndTime":166108.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":166166.0,"Objects":[{"StartTime":166166.0,"EndTime":166166.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":166224.0,"Objects":[{"StartTime":166224.0,"EndTime":166224.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":166281.0,"Objects":[{"StartTime":166281.0,"EndTime":166281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":166511.0,"EndTime":166511.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":166627.0,"Objects":[{"StartTime":166627.0,"EndTime":166627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":166743.0,"Objects":[{"StartTime":166743.0,"EndTime":166743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":166973.0,"EndTime":166973.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":167089.0,"Objects":[{"StartTime":167089.0,"EndTime":167089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":167204.0,"Objects":[{"StartTime":167204.0,"EndTime":167204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":167319.0,"EndTime":167319.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":167435.0,"Objects":[{"StartTime":167435.0,"EndTime":167435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":167608.0,"EndTime":167608.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":167666.0,"Objects":[{"StartTime":167666.0,"EndTime":167666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":167781.0,"EndTime":167781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":167897.0,"Objects":[{"StartTime":167897.0,"EndTime":167897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":168012.0,"EndTime":168012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":168127.0,"Objects":[{"StartTime":168127.0,"EndTime":168127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":168357.0,"EndTime":168357.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":168474.0,"Objects":[{"StartTime":168474.0,"EndTime":168474.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":168704.0,"EndTime":168704.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":168820.0,"Objects":[{"StartTime":168820.0,"EndTime":168820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":168935.0,"EndTime":168935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":169051.0,"Objects":[{"StartTime":169051.0,"EndTime":169051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":169166.0,"EndTime":169166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":169281.0,"Objects":[{"StartTime":169281.0,"EndTime":169281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":169396.0,"EndTime":169396.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":169512.0,"Objects":[{"StartTime":169512.0,"EndTime":169512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":169627.0,"EndTime":169627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":169743.0,"Objects":[{"StartTime":169743.0,"EndTime":169743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":169800.0,"Objects":[{"StartTime":169800.0,"EndTime":169800.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":169858.0,"Objects":[{"StartTime":169858.0,"EndTime":169858.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":169916.0,"Objects":[{"StartTime":169916.0,"EndTime":169916.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":169974.0,"Objects":[{"StartTime":169974.0,"EndTime":169974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":170204.0,"EndTime":170204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":170320.0,"Objects":[{"StartTime":170320.0,"EndTime":170320.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":170435.0,"Objects":[{"StartTime":170435.0,"EndTime":170435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":170665.0,"EndTime":170665.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":170781.0,"Objects":[{"StartTime":170781.0,"EndTime":170781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":170897.0,"Objects":[{"StartTime":170897.0,"EndTime":170897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":171012.0,"EndTime":171012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":171127.0,"Objects":[{"StartTime":171127.0,"EndTime":171127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":171300.0,"EndTime":171300.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":171358.0,"Objects":[{"StartTime":171358.0,"EndTime":171358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":171473.0,"EndTime":171473.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":171589.0,"Objects":[{"StartTime":171589.0,"EndTime":171589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":171704.0,"EndTime":171704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":171820.0,"Objects":[{"StartTime":171820.0,"EndTime":171820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":172050.0,"EndTime":172050.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":172166.0,"Objects":[{"StartTime":172166.0,"EndTime":172166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":172281.0,"Objects":[{"StartTime":172281.0,"EndTime":172281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":172511.0,"EndTime":172511.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":172628.0,"Objects":[{"StartTime":172628.0,"EndTime":172628.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":172743.0,"Objects":[{"StartTime":172743.0,"EndTime":172743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":172916.0,"EndTime":172916.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":172974.0,"Objects":[{"StartTime":172974.0,"EndTime":172974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":173089.0,"EndTime":173089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":173204.0,"Objects":[{"StartTime":173204.0,"EndTime":173204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":173319.0,"EndTime":173319.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":173435.0,"Objects":[{"StartTime":173435.0,"EndTime":173435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":173550.0,"EndTime":173550.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":173666.0,"Objects":[{"StartTime":173666.0,"EndTime":173666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":173896.0,"EndTime":173896.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":174012.0,"Objects":[{"StartTime":174012.0,"EndTime":174012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":174127.0,"Objects":[{"StartTime":174127.0,"EndTime":174127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":174357.0,"EndTime":174357.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":174474.0,"Objects":[{"StartTime":174474.0,"EndTime":174474.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":174589.0,"Objects":[{"StartTime":174589.0,"EndTime":174589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":174819.0,"EndTime":174819.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":174935.0,"Objects":[{"StartTime":174935.0,"EndTime":174935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":175051.0,"Objects":[{"StartTime":175051.0,"EndTime":175051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":175166.0,"EndTime":175166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":175281.0,"Objects":[{"StartTime":175281.0,"EndTime":175281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":175396.0,"EndTime":175396.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":175512.0,"Objects":[{"StartTime":175512.0,"EndTime":175512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":175742.0,"EndTime":175742.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":175858.0,"Objects":[{"StartTime":175858.0,"EndTime":175858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":175974.0,"Objects":[{"StartTime":175974.0,"EndTime":175974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":176204.0,"EndTime":176204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":176320.0,"Objects":[{"StartTime":176320.0,"EndTime":176320.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":176435.0,"Objects":[{"StartTime":176435.0,"EndTime":176435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":176665.0,"EndTime":176665.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":176781.0,"Objects":[{"StartTime":176781.0,"EndTime":176781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":176897.0,"Objects":[{"StartTime":176897.0,"EndTime":176897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":177012.0,"EndTime":177012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":177127.0,"Objects":[{"StartTime":177127.0,"EndTime":177127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":177242.0,"EndTime":177242.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":177358.0,"Objects":[{"StartTime":177358.0,"EndTime":177358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true}]},{"StartTime":177474.0,"Objects":[{"StartTime":177474.0,"EndTime":177474.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":177589.0,"Objects":[{"StartTime":177589.0,"EndTime":177589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":177704.0,"Objects":[{"StartTime":177704.0,"EndTime":177704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":177820.0,"Objects":[{"StartTime":177820.0,"EndTime":177820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":177935.0,"Objects":[{"StartTime":177935.0,"EndTime":177935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":178051.0,"Objects":[{"StartTime":178051.0,"EndTime":178051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":178166.0,"Objects":[{"StartTime":178166.0,"EndTime":178166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":178281.0,"Objects":[{"StartTime":178281.0,"EndTime":178281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":178396.0,"EndTime":178396.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":178512.0,"Objects":[{"StartTime":178512.0,"EndTime":178512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":178627.0,"EndTime":178627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":178743.0,"Objects":[{"StartTime":178743.0,"EndTime":178743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":178858.0,"EndTime":178858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":178974.0,"Objects":[{"StartTime":178974.0,"EndTime":178974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":179089.0,"EndTime":179089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":179204.0,"Objects":[{"StartTime":179204.0,"EndTime":179204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":179319.0,"EndTime":179319.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":179435.0,"Objects":[{"StartTime":179435.0,"EndTime":179435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":179550.0,"EndTime":179550.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":179666.0,"Objects":[{"StartTime":179666.0,"EndTime":179666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":179781.0,"Objects":[{"StartTime":179781.0,"EndTime":179781.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":179839.0,"Objects":[{"StartTime":179839.0,"EndTime":179839.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":179897.0,"Objects":[{"StartTime":179897.0,"EndTime":179897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":180012.0,"Objects":[{"StartTime":180012.0,"EndTime":180012.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":180127.0,"Objects":[{"StartTime":180127.0,"EndTime":180127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":180243.0,"Objects":[{"StartTime":180243.0,"EndTime":180243.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":180301.0,"Objects":[{"StartTime":180301.0,"EndTime":180301.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":180358.0,"Objects":[{"StartTime":180358.0,"EndTime":180358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":180473.0,"EndTime":180473.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":180589.0,"Objects":[{"StartTime":180589.0,"EndTime":180589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":180704.0,"Objects":[{"StartTime":180704.0,"EndTime":180704.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":180820.0,"Objects":[{"StartTime":180820.0,"EndTime":180820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":180935.0,"Objects":[{"StartTime":180935.0,"EndTime":180935.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":181051.0,"Objects":[{"StartTime":181051.0,"EndTime":181051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":181281.0,"EndTime":181281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":181397.0,"Objects":[{"StartTime":181397.0,"EndTime":181397.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":181512.0,"Objects":[{"StartTime":181512.0,"EndTime":181512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":181742.0,"EndTime":181742.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":181858.0,"Objects":[{"StartTime":181858.0,"EndTime":181858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":181974.0,"Objects":[{"StartTime":181974.0,"EndTime":181974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":182089.0,"EndTime":182089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":182204.0,"Objects":[{"StartTime":182204.0,"EndTime":182204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":182377.0,"EndTime":182377.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":182435.0,"Objects":[{"StartTime":182435.0,"EndTime":182435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":182550.0,"EndTime":182550.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":182666.0,"Objects":[{"StartTime":182666.0,"EndTime":182666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":182781.0,"Objects":[{"StartTime":182781.0,"EndTime":182781.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":183011.0,"EndTime":183011.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":183127.0,"Objects":[{"StartTime":183127.0,"EndTime":183127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":183357.0,"EndTime":183357.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":183474.0,"Objects":[{"StartTime":183474.0,"EndTime":183474.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":183589.0,"EndTime":183589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":183704.0,"Objects":[{"StartTime":183704.0,"EndTime":183704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":183820.0,"Objects":[{"StartTime":183820.0,"EndTime":183820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":184050.0,"EndTime":184050.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":184166.0,"Objects":[{"StartTime":184166.0,"EndTime":184166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":184281.0,"Objects":[{"StartTime":184281.0,"EndTime":184281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":184396.0,"EndTime":184396.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":184512.0,"Objects":[{"StartTime":184512.0,"EndTime":184512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":184627.0,"EndTime":184627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":184743.0,"Objects":[{"StartTime":184743.0,"EndTime":184743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":184973.0,"EndTime":184973.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":185089.0,"Objects":[{"StartTime":185089.0,"EndTime":185089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":185204.0,"Objects":[{"StartTime":185204.0,"EndTime":185204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":185434.0,"EndTime":185434.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":185551.0,"Objects":[{"StartTime":185551.0,"EndTime":185551.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":185666.0,"Objects":[{"StartTime":185666.0,"EndTime":185666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":185781.0,"EndTime":185781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":185897.0,"Objects":[{"StartTime":185897.0,"EndTime":185897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":186070.0,"EndTime":186070.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":186127.0,"Objects":[{"StartTime":186127.0,"EndTime":186127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":186242.0,"EndTime":186242.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":186358.0,"Objects":[{"StartTime":186358.0,"EndTime":186358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":186474.0,"Objects":[{"StartTime":186474.0,"EndTime":186474.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":186704.0,"EndTime":186704.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":186820.0,"Objects":[{"StartTime":186820.0,"EndTime":186820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":187050.0,"EndTime":187050.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":187166.0,"Objects":[{"StartTime":187166.0,"EndTime":187166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":187281.0,"Objects":[{"StartTime":187281.0,"EndTime":187281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":187396.0,"EndTime":187396.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":187512.0,"Objects":[{"StartTime":187512.0,"EndTime":187512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":187742.0,"EndTime":187742.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":187858.0,"Objects":[{"StartTime":187858.0,"EndTime":187858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":187974.0,"Objects":[{"StartTime":187974.0,"EndTime":187974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":188089.0,"EndTime":188089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":188204.0,"Objects":[{"StartTime":188204.0,"EndTime":188204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":188319.0,"EndTime":188319.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":188435.0,"Objects":[{"StartTime":188435.0,"EndTime":188435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":188665.0,"EndTime":188665.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":188781.0,"Objects":[{"StartTime":188781.0,"EndTime":188781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":188897.0,"Objects":[{"StartTime":188897.0,"EndTime":188897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":189127.0,"EndTime":189127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":189243.0,"Objects":[{"StartTime":189243.0,"EndTime":189243.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":189358.0,"Objects":[{"StartTime":189358.0,"EndTime":189358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":189473.0,"EndTime":189473.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":189589.0,"Objects":[{"StartTime":189589.0,"EndTime":189589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":189819.0,"EndTime":189819.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":189935.0,"Objects":[{"StartTime":189935.0,"EndTime":189935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":190051.0,"Objects":[{"StartTime":190051.0,"EndTime":190051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":190166.0,"EndTime":190166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":190281.0,"Objects":[{"StartTime":190281.0,"EndTime":190281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":190511.0,"EndTime":190511.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":190627.0,"Objects":[{"StartTime":190627.0,"EndTime":190627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":190743.0,"Objects":[{"StartTime":190743.0,"EndTime":190743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":190858.0,"EndTime":190858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":190974.0,"Objects":[{"StartTime":190974.0,"EndTime":190974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":191089.0,"EndTime":191089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":191204.0,"Objects":[{"StartTime":191204.0,"EndTime":191204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":191434.0,"EndTime":191434.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":191551.0,"Objects":[{"StartTime":191551.0,"EndTime":191551.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":191666.0,"Objects":[{"StartTime":191666.0,"EndTime":191666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":191781.0,"EndTime":191781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":191897.0,"Objects":[{"StartTime":191897.0,"EndTime":191897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":192012.0,"EndTime":192012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":192127.0,"Objects":[{"StartTime":192127.0,"EndTime":192819.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":193051.0,"Objects":[{"StartTime":193051.0,"EndTime":193051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":193974.0,"Objects":[{"StartTime":193974.0,"EndTime":194666.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":194898.0,"Objects":[{"StartTime":194898.0,"EndTime":194898.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":195127.0,"Objects":[{"StartTime":195127.0,"EndTime":195127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":195358.0,"Objects":[{"StartTime":195358.0,"EndTime":195358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":195589.0,"Objects":[{"StartTime":195589.0,"EndTime":195589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":195704.0,"EndTime":195704.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":195820.0,"Objects":[{"StartTime":195820.0,"EndTime":195820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":195935.0,"EndTime":195935.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":196051.0,"Objects":[{"StartTime":196051.0,"EndTime":196051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":196166.0,"EndTime":196166.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":196281.0,"Objects":[{"StartTime":196281.0,"EndTime":196281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":196397.0,"Objects":[{"StartTime":196397.0,"EndTime":196397.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":196454.0,"Objects":[{"StartTime":196454.0,"EndTime":196454.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":196512.0,"Objects":[{"StartTime":196512.0,"EndTime":196512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":196570.0,"Objects":[{"StartTime":196570.0,"EndTime":196570.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":196627.0,"Objects":[{"StartTime":196627.0,"EndTime":196627.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":196685.0,"Objects":[{"StartTime":196685.0,"EndTime":196685.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":196743.0,"Objects":[{"StartTime":196743.0,"EndTime":196743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":196801.0,"Objects":[{"StartTime":196801.0,"EndTime":196801.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":196858.0,"Objects":[{"StartTime":196858.0,"EndTime":196858.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":196916.0,"Objects":[{"StartTime":196916.0,"EndTime":196916.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":196974.0,"Objects":[{"StartTime":196974.0,"EndTime":196974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":197031.0,"Objects":[{"StartTime":197031.0,"EndTime":197031.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":197089.0,"Objects":[{"StartTime":197089.0,"EndTime":197089.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":197147.0,"Objects":[{"StartTime":197147.0,"EndTime":197147.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":197204.0,"Objects":[{"StartTime":197204.0,"EndTime":197204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":197262.0,"Objects":[{"StartTime":197262.0,"EndTime":197262.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":197320.0,"Objects":[{"StartTime":197320.0,"EndTime":197320.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":197377.0,"Objects":[{"StartTime":197377.0,"EndTime":197377.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":197435.0,"Objects":[{"StartTime":197435.0,"EndTime":197435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":197493.0,"Objects":[{"StartTime":197493.0,"EndTime":197493.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":197551.0,"Objects":[{"StartTime":197551.0,"EndTime":197551.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":197608.0,"Objects":[{"StartTime":197608.0,"EndTime":197608.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":197666.0,"Objects":[{"StartTime":197666.0,"EndTime":197666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":197896.0,"EndTime":197896.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":198012.0,"Objects":[{"StartTime":198012.0,"EndTime":198012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":198127.0,"Objects":[{"StartTime":198127.0,"EndTime":198127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":198357.0,"EndTime":198357.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":198473.0,"Objects":[{"StartTime":198473.0,"EndTime":198473.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":198589.0,"Objects":[{"StartTime":198589.0,"EndTime":198589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":198704.0,"EndTime":198704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":198820.0,"Objects":[{"StartTime":198820.0,"EndTime":198820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":199051.0,"Objects":[{"StartTime":199051.0,"EndTime":199051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":199166.0,"EndTime":199166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":199281.0,"Objects":[{"StartTime":199281.0,"EndTime":199281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":199396.0,"Objects":[{"StartTime":199396.0,"EndTime":199396.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":199512.0,"Objects":[{"StartTime":199512.0,"EndTime":199512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":199742.0,"EndTime":199742.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":199858.0,"Objects":[{"StartTime":199858.0,"EndTime":199858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":199974.0,"Objects":[{"StartTime":199974.0,"EndTime":199974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":200089.0,"EndTime":200089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":200204.0,"Objects":[{"StartTime":200204.0,"EndTime":200204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":200319.0,"EndTime":200319.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":200435.0,"Objects":[{"StartTime":200435.0,"EndTime":200435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":200551.0,"Objects":[{"StartTime":200551.0,"EndTime":200551.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":200666.0,"Objects":[{"StartTime":200666.0,"EndTime":200666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":200781.0,"EndTime":200781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":200897.0,"Objects":[{"StartTime":200897.0,"EndTime":200897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":201012.0,"EndTime":201012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":201127.0,"Objects":[{"StartTime":201127.0,"EndTime":201127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":201242.0,"EndTime":201242.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":201358.0,"Objects":[{"StartTime":201358.0,"EndTime":201358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":201588.0,"EndTime":201588.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":201704.0,"Objects":[{"StartTime":201704.0,"EndTime":201704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":201820.0,"Objects":[{"StartTime":201820.0,"EndTime":201820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":201935.0,"EndTime":201935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":202051.0,"Objects":[{"StartTime":202051.0,"EndTime":202051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":202166.0,"EndTime":202166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":202281.0,"Objects":[{"StartTime":202281.0,"EndTime":202281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":202397.0,"Objects":[{"StartTime":202397.0,"EndTime":202397.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":202512.0,"Objects":[{"StartTime":202512.0,"EndTime":202512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":202627.0,"EndTime":202627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":202743.0,"Objects":[{"StartTime":202743.0,"EndTime":202743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":202973.0,"EndTime":202973.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":203089.0,"Objects":[{"StartTime":203089.0,"EndTime":203089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":203204.0,"Objects":[{"StartTime":203204.0,"EndTime":203204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":203319.0,"EndTime":203319.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":203435.0,"Objects":[{"StartTime":203435.0,"EndTime":203435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":203550.0,"EndTime":203550.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":203666.0,"Objects":[{"StartTime":203666.0,"EndTime":203666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":203896.0,"EndTime":203896.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":204012.0,"Objects":[{"StartTime":204012.0,"EndTime":204012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":204127.0,"Objects":[{"StartTime":204127.0,"EndTime":204127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":204242.0,"EndTime":204242.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":204358.0,"Objects":[{"StartTime":204358.0,"EndTime":204358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":204474.0,"Objects":[{"StartTime":204474.0,"EndTime":204474.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":204589.0,"Objects":[{"StartTime":204589.0,"EndTime":204589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":204704.0,"EndTime":204704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":204820.0,"Objects":[{"StartTime":204820.0,"EndTime":204820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":204935.0,"Objects":[{"StartTime":204935.0,"EndTime":204935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":205051.0,"Objects":[{"StartTime":205051.0,"EndTime":205051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":205281.0,"EndTime":205281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":205397.0,"Objects":[{"StartTime":205397.0,"EndTime":205397.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":205512.0,"Objects":[{"StartTime":205512.0,"EndTime":205512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":205627.0,"EndTime":205627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":205743.0,"Objects":[{"StartTime":205743.0,"EndTime":205743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":205858.0,"EndTime":205858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":205974.0,"Objects":[{"StartTime":205974.0,"EndTime":205974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":206089.0,"EndTime":206089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":206204.0,"Objects":[{"StartTime":206204.0,"EndTime":206204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":206320.0,"Objects":[{"StartTime":206320.0,"EndTime":206320.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":206435.0,"Objects":[{"StartTime":206435.0,"EndTime":206435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":206665.0,"EndTime":206665.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":206781.0,"Objects":[{"StartTime":206781.0,"EndTime":206781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":206897.0,"Objects":[{"StartTime":206897.0,"EndTime":206897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":207127.0,"EndTime":207127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":207358.0,"Objects":[{"StartTime":207358.0,"EndTime":207358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":207473.0,"EndTime":207473.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":207589.0,"Objects":[{"StartTime":207589.0,"EndTime":207589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":207704.0,"EndTime":207704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":207820.0,"Objects":[{"StartTime":207820.0,"EndTime":207820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":208050.0,"EndTime":208050.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":208166.0,"Objects":[{"StartTime":208166.0,"EndTime":208166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":208281.0,"Objects":[{"StartTime":208281.0,"EndTime":208281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":208396.0,"EndTime":208396.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":208512.0,"Objects":[{"StartTime":208512.0,"EndTime":208512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":208627.0,"EndTime":208627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":208743.0,"Objects":[{"StartTime":208743.0,"EndTime":209204.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":209320.0,"Objects":[{"StartTime":209320.0,"EndTime":209320.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":209435.0,"Objects":[{"StartTime":209435.0,"EndTime":209435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":209550.0,"EndTime":209550.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":209666.0,"Objects":[{"StartTime":209666.0,"EndTime":209666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":209781.0,"EndTime":209781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":209897.0,"Objects":[{"StartTime":209897.0,"EndTime":209897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":210012.0,"EndTime":210012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":210127.0,"Objects":[{"StartTime":210127.0,"EndTime":210127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":210243.0,"Objects":[{"StartTime":210243.0,"EndTime":210243.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":210358.0,"Objects":[{"StartTime":210358.0,"EndTime":210358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":210589.0,"Objects":[{"StartTime":210589.0,"EndTime":210589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":210704.0,"EndTime":210704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":210820.0,"Objects":[{"StartTime":210820.0,"EndTime":210820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":210935.0,"Objects":[{"StartTime":210935.0,"EndTime":210935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":211051.0,"Objects":[{"StartTime":211051.0,"EndTime":211051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":211166.0,"EndTime":211166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":211281.0,"Objects":[{"StartTime":211281.0,"EndTime":211281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":211397.0,"Objects":[{"StartTime":211397.0,"EndTime":211397.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":211512.0,"Objects":[{"StartTime":211512.0,"EndTime":211512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":211742.0,"EndTime":211742.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":211858.0,"Objects":[{"StartTime":211858.0,"EndTime":211858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":211974.0,"Objects":[{"StartTime":211974.0,"EndTime":211974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":212089.0,"Objects":[{"StartTime":212089.0,"EndTime":212089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":212204.0,"Objects":[{"StartTime":212204.0,"EndTime":212204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":212320.0,"Objects":[{"StartTime":212320.0,"EndTime":212320.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":212435.0,"Objects":[{"StartTime":212435.0,"EndTime":212435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":212665.0,"EndTime":212665.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":212781.0,"Objects":[{"StartTime":212781.0,"EndTime":212781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":212897.0,"Objects":[{"StartTime":212897.0,"EndTime":212897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":213127.0,"EndTime":213127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":213243.0,"Objects":[{"StartTime":213243.0,"EndTime":213243.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":213358.0,"Objects":[{"StartTime":213358.0,"EndTime":213358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":213473.0,"EndTime":213473.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":213589.0,"Objects":[{"StartTime":213589.0,"EndTime":213589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":213820.0,"Objects":[{"StartTime":213820.0,"EndTime":213820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":213935.0,"EndTime":213935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":214051.0,"Objects":[{"StartTime":214051.0,"EndTime":214051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":214166.0,"Objects":[{"StartTime":214166.0,"EndTime":214166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":214281.0,"Objects":[{"StartTime":214281.0,"EndTime":214281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":214396.0,"EndTime":214396.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":214512.0,"Objects":[{"StartTime":214512.0,"EndTime":214512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":214628.0,"Objects":[{"StartTime":214628.0,"EndTime":214628.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":214743.0,"Objects":[{"StartTime":214743.0,"EndTime":214743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":214858.0,"EndTime":214858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":214974.0,"Objects":[{"StartTime":214974.0,"EndTime":214974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":215089.0,"EndTime":215089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":215204.0,"Objects":[{"StartTime":215204.0,"EndTime":215204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":215320.0,"Objects":[{"StartTime":215320.0,"EndTime":215320.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":215435.0,"Objects":[{"StartTime":215435.0,"EndTime":215435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":215550.0,"EndTime":215550.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":215666.0,"Objects":[{"StartTime":215666.0,"EndTime":215666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":215896.0,"EndTime":215896.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":216012.0,"Objects":[{"StartTime":216012.0,"EndTime":216012.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":216070.0,"Objects":[{"StartTime":216070.0,"EndTime":216070.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":216127.0,"Objects":[{"StartTime":216127.0,"EndTime":216127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":216242.0,"EndTime":216242.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":216358.0,"Objects":[{"StartTime":216358.0,"EndTime":216358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":216473.0,"EndTime":216473.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":216589.0,"Objects":[{"StartTime":216589.0,"EndTime":216589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":216819.0,"EndTime":216819.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":216935.0,"Objects":[{"StartTime":216935.0,"EndTime":216935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":217051.0,"Objects":[{"StartTime":217051.0,"EndTime":217051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":217166.0,"EndTime":217166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":217281.0,"Objects":[{"StartTime":217281.0,"EndTime":217281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":217511.0,"EndTime":217511.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":217627.0,"Objects":[{"StartTime":217627.0,"EndTime":217627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":217742.0,"EndTime":217742.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":217858.0,"Objects":[{"StartTime":217858.0,"EndTime":217858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":217974.0,"Objects":[{"StartTime":217974.0,"EndTime":217974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":218089.0,"EndTime":218089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":218204.0,"Objects":[{"StartTime":218204.0,"EndTime":218204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":218319.0,"EndTime":218319.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":218435.0,"Objects":[{"StartTime":218435.0,"EndTime":218435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":218550.0,"EndTime":218550.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":218666.0,"Objects":[{"StartTime":218666.0,"EndTime":218666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":218781.0,"EndTime":218781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":218897.0,"Objects":[{"StartTime":218897.0,"EndTime":218897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":219070.0,"EndTime":219070.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":219127.0,"Objects":[{"StartTime":219127.0,"EndTime":219127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":219300.0,"EndTime":219300.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":219358.0,"Objects":[{"StartTime":219358.0,"EndTime":219358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":219531.0,"EndTime":219531.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":219589.0,"Objects":[{"StartTime":219589.0,"EndTime":219589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":219704.0,"EndTime":219704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":219820.0,"Objects":[{"StartTime":219820.0,"EndTime":219820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":220050.0,"EndTime":220050.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":220166.0,"Objects":[{"StartTime":220166.0,"EndTime":220166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":220281.0,"Objects":[{"StartTime":220281.0,"EndTime":220281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":220396.0,"EndTime":220396.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":220512.0,"Objects":[{"StartTime":220512.0,"EndTime":220512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":220627.0,"EndTime":220627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":220743.0,"Objects":[{"StartTime":220743.0,"EndTime":220743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":220858.0,"EndTime":220858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":220974.0,"Objects":[{"StartTime":220974.0,"EndTime":220974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":221089.0,"Objects":[{"StartTime":221089.0,"EndTime":221089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":221204.0,"Objects":[{"StartTime":221204.0,"EndTime":221204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":221434.0,"EndTime":221434.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":221551.0,"Objects":[{"StartTime":221551.0,"EndTime":221551.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":221608.0,"Objects":[{"StartTime":221608.0,"EndTime":221608.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":221666.0,"Objects":[{"StartTime":221666.0,"EndTime":221666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":221781.0,"EndTime":221781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":221897.0,"Objects":[{"StartTime":221897.0,"EndTime":221897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":222127.0,"EndTime":222127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":222243.0,"Objects":[{"StartTime":222243.0,"EndTime":222243.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":222358.0,"Objects":[{"StartTime":222358.0,"EndTime":222358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":222473.0,"EndTime":222473.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":222589.0,"Objects":[{"StartTime":222589.0,"EndTime":222589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":222704.0,"EndTime":222704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":222820.0,"Objects":[{"StartTime":222820.0,"EndTime":222820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":222935.0,"EndTime":222935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":223051.0,"Objects":[{"StartTime":223051.0,"EndTime":223051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":223166.0,"EndTime":223166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":223281.0,"Objects":[{"StartTime":223281.0,"EndTime":223281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":223397.0,"Objects":[{"StartTime":223397.0,"EndTime":223397.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":223512.0,"Objects":[{"StartTime":223512.0,"EndTime":223512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":223742.0,"EndTime":223742.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":223858.0,"Objects":[{"StartTime":223858.0,"EndTime":223858.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":224088.0,"EndTime":224088.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":224204.0,"Objects":[{"StartTime":224204.0,"EndTime":224204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":224319.0,"EndTime":224319.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":224435.0,"Objects":[{"StartTime":224435.0,"EndTime":224435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":224551.0,"Objects":[{"StartTime":224551.0,"EndTime":224551.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":224666.0,"Objects":[{"StartTime":224666.0,"EndTime":224666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":224781.0,"EndTime":224781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":224897.0,"Objects":[{"StartTime":224897.0,"EndTime":224897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":225012.0,"Objects":[{"StartTime":225012.0,"EndTime":225012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":225127.0,"Objects":[{"StartTime":225127.0,"EndTime":225127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":225242.0,"EndTime":225242.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":225358.0,"Objects":[{"StartTime":225358.0,"EndTime":225358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":225588.0,"EndTime":225588.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":225704.0,"Objects":[{"StartTime":225704.0,"EndTime":225704.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":225934.0,"EndTime":225934.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":226051.0,"Objects":[{"StartTime":226051.0,"EndTime":226051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":226166.0,"EndTime":226166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":226281.0,"Objects":[{"StartTime":226281.0,"EndTime":226281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":226512.0,"Objects":[{"StartTime":226512.0,"EndTime":226512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":226627.0,"Objects":[{"StartTime":226627.0,"EndTime":226627.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":226743.0,"Objects":[{"StartTime":226743.0,"EndTime":226743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":226858.0,"Objects":[{"StartTime":226858.0,"EndTime":226858.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":226974.0,"Objects":[{"StartTime":226974.0,"EndTime":226974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":227089.0,"Objects":[{"StartTime":227089.0,"EndTime":227089.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":227204.0,"Objects":[{"StartTime":227204.0,"EndTime":227204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":227665.0,"EndTime":227665.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":228588.0,"Objects":[{"StartTime":228588.0,"EndTime":228588.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":229049.0,"EndTime":229049.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":229280.0,"Objects":[{"StartTime":229280.0,"EndTime":229280.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":229741.0,"EndTime":229741.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":229973.0,"Objects":[{"StartTime":229973.0,"EndTime":229973.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":230204.0,"Objects":[{"StartTime":230204.0,"EndTime":230204.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":230434.0,"Objects":[{"StartTime":230434.0,"EndTime":230434.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":230665.0,"Objects":[{"StartTime":230665.0,"EndTime":230665.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":230896.0,"Objects":[{"StartTime":230896.0,"EndTime":230896.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":231357.0,"EndTime":231357.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":232280.0,"Objects":[{"StartTime":232280.0,"EndTime":232280.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":232741.0,"EndTime":232741.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":232973.0,"Objects":[{"StartTime":232973.0,"EndTime":232973.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":233434.0,"EndTime":233434.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":233665.0,"Objects":[{"StartTime":233665.0,"EndTime":233665.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":233896.0,"Objects":[{"StartTime":233896.0,"EndTime":233896.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":234127.0,"Objects":[{"StartTime":234127.0,"EndTime":234127.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":234357.0,"Objects":[{"StartTime":234357.0,"EndTime":234357.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":234588.0,"Objects":[{"StartTime":234588.0,"EndTime":234588.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":235049.0,"EndTime":235049.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":235973.0,"Objects":[{"StartTime":235973.0,"EndTime":235973.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":236434.0,"EndTime":236434.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":236665.0,"Objects":[{"StartTime":236665.0,"EndTime":236665.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":237126.0,"EndTime":237126.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":237357.0,"Objects":[{"StartTime":237357.0,"EndTime":237357.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":237587.0,"EndTime":237587.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":237819.0,"Objects":[{"StartTime":237819.0,"EndTime":237819.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":238050.0,"Objects":[{"StartTime":238050.0,"EndTime":238050.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":238280.0,"Objects":[{"StartTime":238280.0,"EndTime":238280.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":238741.0,"EndTime":238741.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":239204.0,"Objects":[{"StartTime":239204.0,"EndTime":239204.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":239434.0,"Objects":[{"StartTime":239434.0,"EndTime":239434.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":239665.0,"Objects":[{"StartTime":239665.0,"EndTime":239665.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":239896.0,"Objects":[{"StartTime":239896.0,"EndTime":239896.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":240127.0,"Objects":[{"StartTime":240127.0,"EndTime":240127.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":240357.0,"Objects":[{"StartTime":240357.0,"EndTime":240357.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":240588.0,"Objects":[{"StartTime":240588.0,"EndTime":240588.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":240819.0,"Objects":[{"StartTime":240819.0,"EndTime":240819.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":241050.0,"Objects":[{"StartTime":241050.0,"EndTime":241050.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":241280.0,"Objects":[{"StartTime":241280.0,"EndTime":241280.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":241511.0,"Objects":[{"StartTime":241511.0,"EndTime":241511.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":241742.0,"Objects":[{"StartTime":241742.0,"EndTime":241742.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":241973.0,"Objects":[{"StartTime":241973.0,"EndTime":241973.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":242434.0,"EndTime":242434.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":242665.0,"Objects":[{"StartTime":242665.0,"EndTime":242665.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":242895.0,"EndTime":242895.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":243127.0,"Objects":[{"StartTime":243127.0,"EndTime":243127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":243357.0,"Objects":[{"StartTime":243357.0,"EndTime":243357.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":243588.0,"Objects":[{"StartTime":243588.0,"EndTime":243588.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":243819.0,"Objects":[{"StartTime":243819.0,"EndTime":243819.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":244050.0,"Objects":[{"StartTime":244050.0,"EndTime":244050.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":244280.0,"EndTime":244280.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":244511.0,"Objects":[{"StartTime":244511.0,"EndTime":244511.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":244972.0,"EndTime":244972.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":245204.0,"Objects":[{"StartTime":245204.0,"EndTime":245204.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":245434.0,"Objects":[{"StartTime":245434.0,"EndTime":245434.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":245895.0,"EndTime":245895.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":246357.0,"Objects":[{"StartTime":246357.0,"EndTime":246357.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":246588.0,"Objects":[{"StartTime":246588.0,"EndTime":246588.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":246819.0,"Objects":[{"StartTime":246819.0,"EndTime":246819.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":247049.0,"EndTime":247049.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":247280.0,"Objects":[{"StartTime":247280.0,"EndTime":247280.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":247511.0,"Objects":[{"StartTime":247511.0,"EndTime":247511.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":247741.0,"EndTime":247741.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":247973.0,"Objects":[{"StartTime":247973.0,"EndTime":247973.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":248203.0,"EndTime":248203.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":248434.0,"EndTime":248434.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":248665.0,"Objects":[{"StartTime":248665.0,"EndTime":248665.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":248896.0,"Objects":[{"StartTime":248896.0,"EndTime":248896.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":249127.0,"Objects":[{"StartTime":249127.0,"EndTime":249127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":249357.0,"EndTime":249357.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":249588.0,"Objects":[{"StartTime":249588.0,"EndTime":249588.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":249819.0,"Objects":[{"StartTime":249819.0,"EndTime":249819.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":250050.0,"Objects":[{"StartTime":250050.0,"EndTime":250050.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":250280.0,"EndTime":250280.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":250511.0,"Objects":[{"StartTime":250511.0,"EndTime":250511.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":250742.0,"Objects":[{"StartTime":250742.0,"EndTime":250742.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":251203.0,"EndTime":251203.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":251550.0,"Objects":[{"StartTime":251550.0,"EndTime":251550.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":251898.0,"EndTime":251898.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":252247.0,"Objects":[{"StartTime":252247.0,"EndTime":252247.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":252702.0,"Objects":[{"StartTime":252702.0,"EndTime":252702.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":253059.0,"EndTime":253059.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":253506.0,"Objects":[{"StartTime":253506.0,"EndTime":253506.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":254095.0,"Objects":[{"StartTime":254095.0,"EndTime":254095.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":254661.0,"EndTime":254661.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":255580.0,"Objects":[{"StartTime":255580.0,"EndTime":255580.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":256480.0,"Objects":[{"StartTime":256480.0,"EndTime":256480.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":257588.0,"EndTime":257588.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":257747.0,"Objects":[{"StartTime":257747.0,"EndTime":257747.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":258697.0,"EndTime":258697.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":258892.0,"Objects":[{"StartTime":258892.0,"EndTime":258892.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":261023.0,"EndTime":261023.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":263154.0,"EndTime":263154.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":263197.0,"Objects":[{"StartTime":263197.0,"EndTime":263197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":263427.0,"EndTime":263427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":263543.0,"Objects":[{"StartTime":263543.0,"EndTime":263543.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":263658.0,"Objects":[{"StartTime":263658.0,"EndTime":263658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":263888.0,"EndTime":263888.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":264004.0,"Objects":[{"StartTime":264004.0,"EndTime":264004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":264120.0,"Objects":[{"StartTime":264120.0,"EndTime":264120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":264235.0,"EndTime":264235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":264350.0,"Objects":[{"StartTime":264350.0,"EndTime":264350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":264465.0,"EndTime":264465.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":264581.0,"Objects":[{"StartTime":264581.0,"EndTime":264581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":264697.0,"Objects":[{"StartTime":264697.0,"EndTime":264697.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":264812.0,"Objects":[{"StartTime":264812.0,"EndTime":264812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":264927.0,"Objects":[{"StartTime":264927.0,"EndTime":264927.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":265043.0,"Objects":[{"StartTime":265043.0,"EndTime":265043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":265273.0,"EndTime":265273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":265389.0,"Objects":[{"StartTime":265389.0,"EndTime":265389.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":265504.0,"Objects":[{"StartTime":265504.0,"EndTime":265504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":265734.0,"EndTime":265734.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":265850.0,"Objects":[{"StartTime":265850.0,"EndTime":265850.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":265966.0,"Objects":[{"StartTime":265966.0,"EndTime":265966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":266081.0,"EndTime":266081.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":266197.0,"Objects":[{"StartTime":266197.0,"EndTime":266197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":266312.0,"EndTime":266312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":266427.0,"Objects":[{"StartTime":266427.0,"EndTime":266427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":266543.0,"Objects":[{"StartTime":266543.0,"EndTime":266543.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":266658.0,"Objects":[{"StartTime":266658.0,"EndTime":266658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":266773.0,"Objects":[{"StartTime":266773.0,"EndTime":266773.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":266889.0,"Objects":[{"StartTime":266889.0,"EndTime":266889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":267119.0,"EndTime":267119.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":267235.0,"Objects":[{"StartTime":267235.0,"EndTime":267235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":267350.0,"Objects":[{"StartTime":267350.0,"EndTime":267350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":267465.0,"EndTime":267465.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":267581.0,"Objects":[{"StartTime":267581.0,"EndTime":267581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":267697.0,"Objects":[{"StartTime":267697.0,"EndTime":267697.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":267812.0,"Objects":[{"StartTime":267812.0,"EndTime":267812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":267927.0,"EndTime":267927.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":268043.0,"Objects":[{"StartTime":268043.0,"EndTime":268043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":268158.0,"EndTime":268158.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":268273.0,"Objects":[{"StartTime":268273.0,"EndTime":268273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":268389.0,"Objects":[{"StartTime":268389.0,"EndTime":268389.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":268504.0,"Objects":[{"StartTime":268504.0,"EndTime":268504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":268620.0,"Objects":[{"StartTime":268620.0,"EndTime":268620.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":268735.0,"Objects":[{"StartTime":268735.0,"EndTime":268735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":268965.0,"EndTime":268965.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":269081.0,"Objects":[{"StartTime":269081.0,"EndTime":269081.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":269197.0,"Objects":[{"StartTime":269197.0,"EndTime":269197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":269312.0,"EndTime":269312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":269427.0,"Objects":[{"StartTime":269427.0,"EndTime":269427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":269543.0,"Objects":[{"StartTime":269543.0,"EndTime":269543.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":269658.0,"Objects":[{"StartTime":269658.0,"EndTime":269658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":269773.0,"EndTime":269773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":269889.0,"Objects":[{"StartTime":269889.0,"EndTime":269889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":270004.0,"EndTime":270004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":270120.0,"Objects":[{"StartTime":270120.0,"EndTime":270120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":270235.0,"Objects":[{"StartTime":270235.0,"EndTime":270235.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":270350.0,"Objects":[{"StartTime":270350.0,"EndTime":270350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":270466.0,"Objects":[{"StartTime":270466.0,"EndTime":270466.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":270523.0,"Objects":[{"StartTime":270523.0,"EndTime":270523.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":270581.0,"Objects":[{"StartTime":270581.0,"EndTime":270581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":270638.0,"EndTime":270638.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":270697.0,"Objects":[{"StartTime":270697.0,"EndTime":270697.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":270754.0,"EndTime":270754.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":270812.0,"Objects":[{"StartTime":270812.0,"EndTime":270812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":270869.0,"EndTime":270869.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":270927.0,"Objects":[{"StartTime":270927.0,"EndTime":270927.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":270984.0,"EndTime":270984.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":271042.0,"EndTime":271042.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":271158.0,"Objects":[{"StartTime":271158.0,"EndTime":271158.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":271215.0,"EndTime":271215.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":271273.0,"Objects":[{"StartTime":271273.0,"EndTime":271273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":271331.0,"Objects":[{"StartTime":271331.0,"EndTime":271331.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":271389.0,"Objects":[{"StartTime":271389.0,"EndTime":271389.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":271447.0,"Objects":[{"StartTime":271447.0,"EndTime":271447.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":271504.0,"Objects":[{"StartTime":271504.0,"EndTime":271504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":271619.0,"EndTime":271619.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":271735.0,"Objects":[{"StartTime":271735.0,"EndTime":271735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":271793.0,"Objects":[{"StartTime":271793.0,"EndTime":271793.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":271850.0,"Objects":[{"StartTime":271850.0,"EndTime":271850.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":271908.0,"Objects":[{"StartTime":271908.0,"EndTime":271908.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":271966.0,"Objects":[{"StartTime":271966.0,"EndTime":271966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":272023.0,"EndTime":272023.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":272081.0,"EndTime":272081.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":272139.0,"EndTime":272139.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":272197.0,"Objects":[{"StartTime":272197.0,"EndTime":272197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":272312.0,"EndTime":272312.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":272370.0,"Objects":[{"StartTime":272370.0,"EndTime":272370.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":272427.0,"Objects":[{"StartTime":272427.0,"EndTime":272427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":272485.0,"Objects":[{"StartTime":272485.0,"EndTime":272485.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":272543.0,"Objects":[{"StartTime":272543.0,"EndTime":272543.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":272600.0,"Objects":[{"StartTime":272600.0,"EndTime":272600.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":272658.0,"Objects":[{"StartTime":272658.0,"EndTime":272658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":272716.0,"Objects":[{"StartTime":272716.0,"EndTime":272716.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":272773.0,"Objects":[{"StartTime":272773.0,"EndTime":272773.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":272830.0,"EndTime":272830.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":272889.0,"Objects":[{"StartTime":272889.0,"EndTime":272889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":272947.0,"Objects":[{"StartTime":272947.0,"EndTime":272947.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":273004.0,"Objects":[{"StartTime":273004.0,"EndTime":273004.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":273062.0,"Objects":[{"StartTime":273062.0,"EndTime":273062.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":273120.0,"Objects":[{"StartTime":273120.0,"EndTime":273120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":273177.0,"Objects":[{"StartTime":273177.0,"EndTime":273177.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":273235.0,"Objects":[{"StartTime":273235.0,"EndTime":273235.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":273292.0,"EndTime":273292.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":273350.0,"Objects":[{"StartTime":273350.0,"EndTime":273350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":273408.0,"Objects":[{"StartTime":273408.0,"EndTime":273408.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":273466.0,"Objects":[{"StartTime":273466.0,"EndTime":273466.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":273523.0,"Objects":[{"StartTime":273523.0,"EndTime":273523.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":273581.0,"Objects":[{"StartTime":273581.0,"EndTime":273581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":273639.0,"Objects":[{"StartTime":273639.0,"EndTime":273639.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":273697.0,"Objects":[{"StartTime":273697.0,"EndTime":273697.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":273754.0,"Objects":[{"StartTime":273754.0,"EndTime":273754.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":273812.0,"Objects":[{"StartTime":273812.0,"EndTime":273812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":273927.0,"EndTime":273927.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":273985.0,"Objects":[{"StartTime":273985.0,"EndTime":273985.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":274043.0,"Objects":[{"StartTime":274043.0,"EndTime":274043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":274158.0,"EndTime":274158.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":274273.0,"Objects":[{"StartTime":274273.0,"EndTime":274273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":274388.0,"EndTime":274388.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":274447.0,"Objects":[{"StartTime":274447.0,"EndTime":274447.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":274504.0,"Objects":[{"StartTime":274504.0,"EndTime":274504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":274619.0,"EndTime":274619.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":274735.0,"Objects":[{"StartTime":274735.0,"EndTime":274735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":274850.0,"EndTime":274850.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":274908.0,"Objects":[{"StartTime":274908.0,"EndTime":274908.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":274966.0,"Objects":[{"StartTime":274966.0,"EndTime":274966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":275081.0,"EndTime":275081.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":275197.0,"Objects":[{"StartTime":275197.0,"EndTime":275197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":275312.0,"Objects":[{"StartTime":275312.0,"EndTime":275312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":275370.0,"Objects":[{"StartTime":275370.0,"EndTime":275370.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":275427.0,"Objects":[{"StartTime":275427.0,"EndTime":275427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":275542.0,"EndTime":275542.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":275658.0,"Objects":[{"StartTime":275658.0,"EndTime":275658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":275773.0,"EndTime":275773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":275889.0,"Objects":[{"StartTime":275889.0,"EndTime":275889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":276004.0,"EndTime":276004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":276062.0,"Objects":[{"StartTime":276062.0,"EndTime":276062.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":276120.0,"Objects":[{"StartTime":276120.0,"EndTime":276120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":276177.0,"EndTime":276177.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":276235.0,"EndTime":276235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":276292.0,"EndTime":276292.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":276350.0,"EndTime":276350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":276407.0,"EndTime":276407.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":276465.0,"EndTime":276465.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":276522.0,"EndTime":276522.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":276581.0,"Objects":[{"StartTime":276581.0,"EndTime":276581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":276638.0,"EndTime":276638.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":276696.0,"EndTime":276696.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":276753.0,"EndTime":276753.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":276811.0,"EndTime":276811.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":276868.0,"EndTime":276868.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":276926.0,"EndTime":276926.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":276983.0,"EndTime":276983.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":277043.0,"Objects":[{"StartTime":277043.0,"EndTime":277043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":277158.0,"Objects":[{"StartTime":277158.0,"EndTime":277158.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":277273.0,"Objects":[{"StartTime":277273.0,"EndTime":277273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":277389.0,"Objects":[{"StartTime":277389.0,"EndTime":277389.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":277504.0,"Objects":[{"StartTime":277504.0,"EndTime":277504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":277562.0,"Objects":[{"StartTime":277562.0,"EndTime":277562.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":277620.0,"Objects":[{"StartTime":277620.0,"EndTime":277620.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":277677.0,"Objects":[{"StartTime":277677.0,"EndTime":277677.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":277735.0,"Objects":[{"StartTime":277735.0,"EndTime":277735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":277793.0,"Objects":[{"StartTime":277793.0,"EndTime":277793.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":277850.0,"Objects":[{"StartTime":277850.0,"EndTime":277850.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":277908.0,"Objects":[{"StartTime":277908.0,"EndTime":277908.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":277966.0,"Objects":[{"StartTime":277966.0,"EndTime":277966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":278196.0,"EndTime":278196.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":278312.0,"Objects":[{"StartTime":278312.0,"EndTime":278312.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":278542.0,"EndTime":278542.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":278658.0,"Objects":[{"StartTime":278658.0,"EndTime":278658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":278773.0,"EndTime":278773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":278889.0,"Objects":[{"StartTime":278889.0,"EndTime":278889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":279004.0,"Objects":[{"StartTime":279004.0,"EndTime":279004.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":279234.0,"EndTime":279234.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":279350.0,"Objects":[{"StartTime":279350.0,"EndTime":279350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":279465.0,"EndTime":279465.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":279581.0,"Objects":[{"StartTime":279581.0,"EndTime":279581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":279696.0,"EndTime":279696.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":279812.0,"Objects":[{"StartTime":279812.0,"EndTime":279812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":280042.0,"EndTime":280042.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":280158.0,"Objects":[{"StartTime":280158.0,"EndTime":280158.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":280388.0,"EndTime":280388.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":280504.0,"Objects":[{"StartTime":280504.0,"EndTime":280504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":280619.0,"EndTime":280619.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":280735.0,"Objects":[{"StartTime":280735.0,"EndTime":280735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":280850.0,"Objects":[{"StartTime":280850.0,"EndTime":280850.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":281080.0,"EndTime":281080.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":281197.0,"Objects":[{"StartTime":281197.0,"EndTime":281197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":281312.0,"EndTime":281312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":281427.0,"Objects":[{"StartTime":281427.0,"EndTime":281427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":281542.0,"EndTime":281542.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":281600.0,"Objects":[{"StartTime":281600.0,"EndTime":281600.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":281658.0,"Objects":[{"StartTime":281658.0,"EndTime":281658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":281888.0,"EndTime":281888.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":282004.0,"Objects":[{"StartTime":282004.0,"EndTime":282004.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":282234.0,"EndTime":282234.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":282350.0,"Objects":[{"StartTime":282350.0,"EndTime":282350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":282465.0,"EndTime":282465.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":282581.0,"Objects":[{"StartTime":282581.0,"EndTime":282581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":282697.0,"Objects":[{"StartTime":282697.0,"EndTime":282697.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":282927.0,"EndTime":282927.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":283043.0,"Objects":[{"StartTime":283043.0,"EndTime":283043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":283158.0,"EndTime":283158.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":283273.0,"Objects":[{"StartTime":283273.0,"EndTime":283273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":283388.0,"EndTime":283388.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":283504.0,"Objects":[{"StartTime":283504.0,"EndTime":283504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":283734.0,"EndTime":283734.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":283850.0,"Objects":[{"StartTime":283850.0,"EndTime":283850.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":284080.0,"EndTime":284080.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":284197.0,"Objects":[{"StartTime":284197.0,"EndTime":284197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":284312.0,"EndTime":284312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":284427.0,"Objects":[{"StartTime":284427.0,"EndTime":284427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":284543.0,"Objects":[{"StartTime":284543.0,"EndTime":284543.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":284658.0,"Objects":[{"StartTime":284658.0,"EndTime":284658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":284773.0,"Objects":[{"StartTime":284773.0,"EndTime":284773.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":284889.0,"Objects":[{"StartTime":284889.0,"EndTime":284889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":285062.0,"EndTime":285062.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":285120.0,"Objects":[{"StartTime":285120.0,"EndTime":285120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":285293.0,"EndTime":285293.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":285350.0,"Objects":[{"StartTime":285350.0,"EndTime":285350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":285580.0,"EndTime":285580.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":285697.0,"Objects":[{"StartTime":285697.0,"EndTime":285697.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":285927.0,"EndTime":285927.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":286043.0,"Objects":[{"StartTime":286043.0,"EndTime":286043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":286158.0,"EndTime":286158.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":286273.0,"Objects":[{"StartTime":286273.0,"EndTime":286273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":286389.0,"Objects":[{"StartTime":286389.0,"EndTime":286389.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":286619.0,"EndTime":286619.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":286735.0,"Objects":[{"StartTime":286735.0,"EndTime":286735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":286850.0,"EndTime":286850.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":286966.0,"Objects":[{"StartTime":286966.0,"EndTime":286966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":287081.0,"EndTime":287081.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":287197.0,"Objects":[{"StartTime":287197.0,"EndTime":287197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":287427.0,"EndTime":287427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":287543.0,"Objects":[{"StartTime":287543.0,"EndTime":287543.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":287773.0,"EndTime":287773.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":287889.0,"Objects":[{"StartTime":287889.0,"EndTime":287889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":288004.0,"EndTime":288004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":288120.0,"Objects":[{"StartTime":288120.0,"EndTime":288120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":288235.0,"Objects":[{"StartTime":288235.0,"EndTime":288235.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":288465.0,"EndTime":288465.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":288581.0,"Objects":[{"StartTime":288581.0,"EndTime":288581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":288696.0,"EndTime":288696.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":288812.0,"Objects":[{"StartTime":288812.0,"EndTime":288812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":288927.0,"EndTime":288927.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":288985.0,"Objects":[{"StartTime":288985.0,"EndTime":288985.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":289043.0,"Objects":[{"StartTime":289043.0,"EndTime":289043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":289273.0,"EndTime":289273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":289389.0,"Objects":[{"StartTime":289389.0,"EndTime":289389.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":289619.0,"EndTime":289619.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":289735.0,"Objects":[{"StartTime":289735.0,"EndTime":289735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":289850.0,"EndTime":289850.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":289966.0,"Objects":[{"StartTime":289966.0,"EndTime":289966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":290081.0,"Objects":[{"StartTime":290081.0,"EndTime":290081.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":290311.0,"EndTime":290311.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":290427.0,"Objects":[{"StartTime":290427.0,"EndTime":290427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":290542.0,"EndTime":290542.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":290658.0,"Objects":[{"StartTime":290658.0,"EndTime":290658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":290773.0,"EndTime":290773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":290889.0,"Objects":[{"StartTime":290889.0,"EndTime":290889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":291119.0,"EndTime":291119.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":291235.0,"Objects":[{"StartTime":291235.0,"EndTime":291235.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":291465.0,"EndTime":291465.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":291581.0,"Objects":[{"StartTime":291581.0,"EndTime":291581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":291696.0,"EndTime":291696.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":291812.0,"Objects":[{"StartTime":291812.0,"EndTime":291812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":292042.0,"EndTime":292042.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":292158.0,"Objects":[{"StartTime":292158.0,"EndTime":292158.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":292273.0,"Objects":[{"StartTime":292273.0,"EndTime":292273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":292446.0,"EndTime":292446.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":292504.0,"Objects":[{"StartTime":292504.0,"EndTime":292504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":292619.0,"EndTime":292619.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":292735.0,"Objects":[{"StartTime":292735.0,"EndTime":292735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":292850.0,"EndTime":292850.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":292966.0,"Objects":[{"StartTime":292966.0,"EndTime":292966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":293196.0,"EndTime":293196.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":293312.0,"Objects":[{"StartTime":293312.0,"EndTime":293312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":293427.0,"Objects":[{"StartTime":293427.0,"EndTime":293427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":293542.0,"EndTime":293542.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":293658.0,"Objects":[{"StartTime":293658.0,"EndTime":293658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":293773.0,"Objects":[{"StartTime":293773.0,"EndTime":293773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":293889.0,"Objects":[{"StartTime":293889.0,"EndTime":293889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":294004.0,"EndTime":294004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":294120.0,"Objects":[{"StartTime":294120.0,"EndTime":294120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":294235.0,"Objects":[{"StartTime":294235.0,"EndTime":294235.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":294350.0,"Objects":[{"StartTime":294350.0,"EndTime":294350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":294466.0,"Objects":[{"StartTime":294466.0,"EndTime":294466.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":294581.0,"Objects":[{"StartTime":294581.0,"EndTime":294581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":294638.0,"EndTime":294638.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":294696.0,"EndTime":294696.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":294754.0,"EndTime":294754.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":294812.0,"Objects":[{"StartTime":294812.0,"EndTime":294812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":294869.0,"EndTime":294869.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":294927.0,"EndTime":294927.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":294985.0,"EndTime":294985.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":295043.0,"Objects":[{"StartTime":295043.0,"EndTime":295043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":295100.0,"Objects":[{"StartTime":295100.0,"EndTime":295100.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":295158.0,"Objects":[{"StartTime":295158.0,"EndTime":295158.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":295216.0,"Objects":[{"StartTime":295216.0,"EndTime":295216.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":295273.0,"Objects":[{"StartTime":295273.0,"EndTime":295273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":295331.0,"Objects":[{"StartTime":295331.0,"EndTime":295331.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":295389.0,"Objects":[{"StartTime":295389.0,"EndTime":295389.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":295447.0,"Objects":[{"StartTime":295447.0,"EndTime":295447.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":295504.0,"Objects":[{"StartTime":295504.0,"EndTime":295504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":295734.0,"EndTime":295734.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":295850.0,"Objects":[{"StartTime":295850.0,"EndTime":295850.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":295966.0,"Objects":[{"StartTime":295966.0,"EndTime":295966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":296196.0,"EndTime":296196.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":296312.0,"Objects":[{"StartTime":296312.0,"EndTime":296312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":296427.0,"Objects":[{"StartTime":296427.0,"EndTime":296427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":296542.0,"EndTime":296542.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":296658.0,"Objects":[{"StartTime":296658.0,"EndTime":296658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":296831.0,"EndTime":296831.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":296889.0,"Objects":[{"StartTime":296889.0,"EndTime":296889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":297004.0,"EndTime":297004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":297120.0,"Objects":[{"StartTime":297120.0,"EndTime":297120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":297235.0,"Objects":[{"StartTime":297235.0,"EndTime":297235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":297350.0,"Objects":[{"StartTime":297350.0,"EndTime":297350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":297580.0,"EndTime":297580.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":297697.0,"Objects":[{"StartTime":297697.0,"EndTime":297697.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":297927.0,"EndTime":297927.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":298043.0,"Objects":[{"StartTime":298043.0,"EndTime":298043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":298158.0,"EndTime":298158.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":298273.0,"Objects":[{"StartTime":298273.0,"EndTime":298273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":298503.0,"EndTime":298503.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":298620.0,"Objects":[{"StartTime":298620.0,"EndTime":298620.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":298735.0,"EndTime":298735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":298850.0,"Objects":[{"StartTime":298850.0,"EndTime":298850.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":298966.0,"Objects":[{"StartTime":298966.0,"EndTime":298966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":299081.0,"Objects":[{"StartTime":299081.0,"EndTime":299081.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":299197.0,"Objects":[{"StartTime":299197.0,"EndTime":299197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":299427.0,"EndTime":299427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":299543.0,"Objects":[{"StartTime":299543.0,"EndTime":299543.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":299658.0,"Objects":[{"StartTime":299658.0,"EndTime":299658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":299888.0,"EndTime":299888.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":300004.0,"Objects":[{"StartTime":300004.0,"EndTime":300004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":300120.0,"Objects":[{"StartTime":300120.0,"EndTime":300120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":300235.0,"EndTime":300235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":300350.0,"Objects":[{"StartTime":300350.0,"EndTime":300350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":300523.0,"EndTime":300523.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":300581.0,"Objects":[{"StartTime":300581.0,"EndTime":300581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":300696.0,"EndTime":300696.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":300812.0,"Objects":[{"StartTime":300812.0,"EndTime":300812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":300927.0,"EndTime":300927.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":301043.0,"Objects":[{"StartTime":301043.0,"EndTime":301043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":301273.0,"EndTime":301273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":301389.0,"Objects":[{"StartTime":301389.0,"EndTime":301389.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":301504.0,"Objects":[{"StartTime":301504.0,"EndTime":301504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":301734.0,"EndTime":301734.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":301850.0,"Objects":[{"StartTime":301850.0,"EndTime":301850.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":301966.0,"Objects":[{"StartTime":301966.0,"EndTime":301966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":302081.0,"EndTime":302081.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":302197.0,"Objects":[{"StartTime":302197.0,"EndTime":302197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":302312.0,"EndTime":302312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":302427.0,"Objects":[{"StartTime":302427.0,"EndTime":302427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":302657.0,"EndTime":302657.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":302773.0,"Objects":[{"StartTime":302773.0,"EndTime":302773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":302889.0,"Objects":[{"StartTime":302889.0,"EndTime":302889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":303004.0,"EndTime":303004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":303120.0,"Objects":[{"StartTime":303120.0,"EndTime":303120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":303235.0,"EndTime":303235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":303350.0,"Objects":[{"StartTime":303350.0,"EndTime":303350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":303580.0,"EndTime":303580.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":303697.0,"Objects":[{"StartTime":303697.0,"EndTime":303697.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":303812.0,"Objects":[{"StartTime":303812.0,"EndTime":303812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":304042.0,"EndTime":304042.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":304158.0,"Objects":[{"StartTime":304158.0,"EndTime":304158.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":304273.0,"Objects":[{"StartTime":304273.0,"EndTime":304273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":304388.0,"EndTime":304388.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":304504.0,"Objects":[{"StartTime":304504.0,"EndTime":304504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":304619.0,"EndTime":304619.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":304735.0,"Objects":[{"StartTime":304735.0,"EndTime":304735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":304965.0,"EndTime":304965.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":305081.0,"Objects":[{"StartTime":305081.0,"EndTime":305081.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":305311.0,"EndTime":305311.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":305427.0,"Objects":[{"StartTime":305427.0,"EndTime":305427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":305543.0,"Objects":[{"StartTime":305543.0,"EndTime":305543.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":305658.0,"Objects":[{"StartTime":305658.0,"EndTime":305658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":305888.0,"EndTime":305888.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":306004.0,"Objects":[{"StartTime":306004.0,"EndTime":306004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":306120.0,"Objects":[{"StartTime":306120.0,"EndTime":306120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":306235.0,"EndTime":306235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":306350.0,"Objects":[{"StartTime":306350.0,"EndTime":306350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":306465.0,"EndTime":306465.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":306581.0,"Objects":[{"StartTime":306581.0,"EndTime":306581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":306696.0,"EndTime":306696.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":306812.0,"Objects":[{"StartTime":306812.0,"EndTime":306812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":306927.0,"Objects":[{"StartTime":306927.0,"EndTime":306927.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":307043.0,"Objects":[{"StartTime":307043.0,"EndTime":307043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":307273.0,"EndTime":307273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":307389.0,"Objects":[{"StartTime":307389.0,"EndTime":307389.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":307504.0,"Objects":[{"StartTime":307504.0,"EndTime":307504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":307619.0,"EndTime":307619.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":307735.0,"Objects":[{"StartTime":307735.0,"EndTime":307735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":307850.0,"EndTime":307850.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":307966.0,"Objects":[{"StartTime":307966.0,"EndTime":307966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":308081.0,"EndTime":308081.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":308197.0,"Objects":[{"StartTime":308197.0,"EndTime":308197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":308312.0,"EndTime":308312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":308427.0,"Objects":[{"StartTime":308427.0,"EndTime":308427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":308543.0,"Objects":[{"StartTime":308543.0,"EndTime":308543.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":308658.0,"Objects":[{"StartTime":308658.0,"EndTime":308658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":308889.0,"Objects":[{"StartTime":308889.0,"EndTime":308889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":309004.0,"Objects":[{"StartTime":309004.0,"EndTime":309004.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":309062.0,"Objects":[{"StartTime":309062.0,"EndTime":309062.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":309120.0,"Objects":[{"StartTime":309120.0,"EndTime":309120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":309177.0,"Objects":[{"StartTime":309177.0,"EndTime":309177.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":309235.0,"Objects":[{"StartTime":309235.0,"EndTime":309235.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":309293.0,"Objects":[{"StartTime":309293.0,"EndTime":309293.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":309350.0,"Objects":[{"StartTime":309350.0,"EndTime":309350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":309408.0,"Objects":[{"StartTime":309408.0,"EndTime":309408.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":309466.0,"Objects":[{"StartTime":309466.0,"EndTime":309466.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":309523.0,"Objects":[{"StartTime":309523.0,"EndTime":309523.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":309581.0,"Objects":[{"StartTime":309581.0,"EndTime":309581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":309639.0,"Objects":[{"StartTime":309639.0,"EndTime":309639.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":309697.0,"Objects":[{"StartTime":309697.0,"EndTime":309697.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":309754.0,"Objects":[{"StartTime":309754.0,"EndTime":309754.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":309812.0,"Objects":[{"StartTime":309812.0,"EndTime":309812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":309869.0,"EndTime":309869.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":309927.0,"Objects":[{"StartTime":309927.0,"EndTime":309927.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":309984.0,"EndTime":309984.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":310043.0,"Objects":[{"StartTime":310043.0,"EndTime":310043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":310100.0,"EndTime":310100.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":310158.0,"Objects":[{"StartTime":310158.0,"EndTime":310158.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":310216.0,"Objects":[{"StartTime":310216.0,"EndTime":310216.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":310273.0,"Objects":[{"StartTime":310273.0,"EndTime":310273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":310503.0,"EndTime":310503.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":310620.0,"Objects":[{"StartTime":310620.0,"EndTime":310620.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":310735.0,"Objects":[{"StartTime":310735.0,"EndTime":310735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":310965.0,"EndTime":310965.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":311081.0,"Objects":[{"StartTime":311081.0,"EndTime":311081.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":311197.0,"Objects":[{"StartTime":311197.0,"EndTime":311197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":311312.0,"EndTime":311312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":311427.0,"Objects":[{"StartTime":311427.0,"EndTime":311427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":311658.0,"Objects":[{"StartTime":311658.0,"EndTime":311658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":311773.0,"EndTime":311773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":311889.0,"Objects":[{"StartTime":311889.0,"EndTime":311889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":312004.0,"Objects":[{"StartTime":312004.0,"EndTime":312004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":312120.0,"Objects":[{"StartTime":312120.0,"EndTime":312120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":312350.0,"EndTime":312350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":312466.0,"Objects":[{"StartTime":312466.0,"EndTime":312466.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":312581.0,"Objects":[{"StartTime":312581.0,"EndTime":312581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":312696.0,"EndTime":312696.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":312812.0,"Objects":[{"StartTime":312812.0,"EndTime":312812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":312927.0,"EndTime":312927.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":313043.0,"Objects":[{"StartTime":313043.0,"EndTime":313043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":313158.0,"Objects":[{"StartTime":313158.0,"EndTime":313158.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":313273.0,"Objects":[{"StartTime":313273.0,"EndTime":313273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":313388.0,"EndTime":313388.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":313504.0,"Objects":[{"StartTime":313504.0,"EndTime":313504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":313619.0,"EndTime":313619.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":313735.0,"Objects":[{"StartTime":313735.0,"EndTime":313735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":313850.0,"EndTime":313850.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":313966.0,"Objects":[{"StartTime":313966.0,"EndTime":313966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":314196.0,"EndTime":314196.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":314312.0,"Objects":[{"StartTime":314312.0,"EndTime":314312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":314427.0,"Objects":[{"StartTime":314427.0,"EndTime":314427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":314542.0,"EndTime":314542.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":314658.0,"Objects":[{"StartTime":314658.0,"EndTime":314658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":314773.0,"EndTime":314773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":314889.0,"Objects":[{"StartTime":314889.0,"EndTime":314889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":315062.0,"EndTime":315062.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":315120.0,"Objects":[{"StartTime":315120.0,"EndTime":315120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":315235.0,"EndTime":315235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":315350.0,"Objects":[{"StartTime":315350.0,"EndTime":315350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":315580.0,"EndTime":315580.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":315697.0,"Objects":[{"StartTime":315697.0,"EndTime":315697.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":315812.0,"Objects":[{"StartTime":315812.0,"EndTime":315812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":315927.0,"EndTime":315927.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":316043.0,"Objects":[{"StartTime":316043.0,"EndTime":316043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":316158.0,"EndTime":316158.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":316273.0,"Objects":[{"StartTime":316273.0,"EndTime":316273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":316388.0,"EndTime":316388.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":316504.0,"Objects":[{"StartTime":316504.0,"EndTime":316504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":316619.0,"EndTime":316619.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":316735.0,"Objects":[{"StartTime":316735.0,"EndTime":316735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":316965.0,"EndTime":316965.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":317081.0,"Objects":[{"StartTime":317081.0,"EndTime":317081.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":317197.0,"Objects":[{"StartTime":317197.0,"EndTime":317197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":317427.0,"EndTime":317427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":317543.0,"Objects":[{"StartTime":317543.0,"EndTime":317543.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":317600.0,"Objects":[{"StartTime":317600.0,"EndTime":317600.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":317658.0,"Objects":[{"StartTime":317658.0,"EndTime":317658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":317888.0,"EndTime":317888.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":318004.0,"Objects":[{"StartTime":318004.0,"EndTime":318004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":318120.0,"Objects":[{"StartTime":318120.0,"EndTime":318120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":318235.0,"EndTime":318235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":318350.0,"Objects":[{"StartTime":318350.0,"EndTime":318350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":318465.0,"EndTime":318465.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":318581.0,"Objects":[{"StartTime":318581.0,"EndTime":318581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":318811.0,"EndTime":318811.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":318927.0,"Objects":[{"StartTime":318927.0,"EndTime":318927.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":319043.0,"Objects":[{"StartTime":319043.0,"EndTime":319043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":319273.0,"EndTime":319273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":319389.0,"Objects":[{"StartTime":319389.0,"EndTime":319389.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":319504.0,"Objects":[{"StartTime":319504.0,"EndTime":319504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":319734.0,"EndTime":319734.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":319966.0,"Objects":[{"StartTime":319966.0,"EndTime":319966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":320081.0,"EndTime":320081.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":320197.0,"Objects":[{"StartTime":320197.0,"EndTime":320197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":320312.0,"EndTime":320312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":320427.0,"Objects":[{"StartTime":320427.0,"EndTime":320427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":320657.0,"EndTime":320657.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":320773.0,"Objects":[{"StartTime":320773.0,"EndTime":320773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":320889.0,"Objects":[{"StartTime":320889.0,"EndTime":320889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":321004.0,"EndTime":321004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":321120.0,"Objects":[{"StartTime":321120.0,"EndTime":321120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":321235.0,"EndTime":321235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":321350.0,"Objects":[{"StartTime":321350.0,"EndTime":321811.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":321927.0,"Objects":[{"StartTime":321927.0,"EndTime":321927.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":322043.0,"Objects":[{"StartTime":322043.0,"EndTime":322043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":322158.0,"EndTime":322158.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":322273.0,"Objects":[{"StartTime":322273.0,"EndTime":322273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":322388.0,"EndTime":322388.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":322504.0,"Objects":[{"StartTime":322504.0,"EndTime":322504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":322619.0,"EndTime":322619.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":322735.0,"Objects":[{"StartTime":322735.0,"EndTime":322735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":322850.0,"EndTime":322850.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":322966.0,"Objects":[{"StartTime":322966.0,"EndTime":322966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":323081.0,"Objects":[{"StartTime":323081.0,"EndTime":323081.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":323197.0,"Objects":[{"StartTime":323197.0,"EndTime":323197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":323312.0,"EndTime":323312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":323427.0,"Objects":[{"StartTime":323427.0,"EndTime":323427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":323542.0,"EndTime":323542.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":323658.0,"Objects":[{"StartTime":323658.0,"EndTime":323658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":323773.0,"EndTime":323773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":323888.0,"Objects":[{"StartTime":323888.0,"EndTime":323888.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":324003.0,"EndTime":324003.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":324120.0,"Objects":[{"StartTime":324120.0,"EndTime":324120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":324177.0,"Objects":[{"StartTime":324177.0,"EndTime":324177.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":324235.0,"Objects":[{"StartTime":324235.0,"EndTime":324235.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":324293.0,"Objects":[{"StartTime":324293.0,"EndTime":324293.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":324350.0,"Objects":[{"StartTime":324350.0,"EndTime":324350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":324408.0,"Objects":[{"StartTime":324408.0,"EndTime":324408.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":324466.0,"Objects":[{"StartTime":324466.0,"EndTime":324466.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":324523.0,"Objects":[{"StartTime":324523.0,"EndTime":324523.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":324581.0,"Objects":[{"StartTime":324581.0,"EndTime":324581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":324638.0,"Objects":[{"StartTime":324638.0,"EndTime":324638.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":324696.0,"Objects":[{"StartTime":324696.0,"EndTime":324696.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":324754.0,"Objects":[{"StartTime":324754.0,"EndTime":324754.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":324811.0,"Objects":[{"StartTime":324811.0,"EndTime":324811.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":324870.0,"Objects":[{"StartTime":324870.0,"EndTime":324870.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":324927.0,"Objects":[{"StartTime":324927.0,"EndTime":324927.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":324985.0,"Objects":[{"StartTime":324985.0,"EndTime":324985.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":325043.0,"Objects":[{"StartTime":325043.0,"EndTime":325043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":325273.0,"EndTime":325273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":325389.0,"Objects":[{"StartTime":325389.0,"EndTime":325389.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":325504.0,"Objects":[{"StartTime":325504.0,"EndTime":325504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":325734.0,"EndTime":325734.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":325850.0,"Objects":[{"StartTime":325850.0,"EndTime":325850.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":325966.0,"Objects":[{"StartTime":325966.0,"EndTime":325966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":326081.0,"EndTime":326081.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":326197.0,"Objects":[{"StartTime":326197.0,"EndTime":326197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":326427.0,"Objects":[{"StartTime":326427.0,"EndTime":326427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":326542.0,"EndTime":326542.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":326658.0,"Objects":[{"StartTime":326658.0,"EndTime":326658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":326773.0,"EndTime":326773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":326889.0,"Objects":[{"StartTime":326889.0,"EndTime":326889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":327119.0,"EndTime":327119.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":327235.0,"Objects":[{"StartTime":327235.0,"EndTime":327235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":327350.0,"Objects":[{"StartTime":327350.0,"EndTime":327350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":327465.0,"EndTime":327465.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":327581.0,"Objects":[{"StartTime":327581.0,"EndTime":327581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":327696.0,"EndTime":327696.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":327812.0,"Objects":[{"StartTime":327812.0,"EndTime":327812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":327927.0,"Objects":[{"StartTime":327927.0,"EndTime":327927.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":328043.0,"Objects":[{"StartTime":328043.0,"EndTime":328043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":328158.0,"EndTime":328158.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":328273.0,"Objects":[{"StartTime":328273.0,"EndTime":328273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":328388.0,"EndTime":328388.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":328504.0,"Objects":[{"StartTime":328504.0,"EndTime":328504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":328619.0,"EndTime":328619.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":328735.0,"Objects":[{"StartTime":328735.0,"EndTime":328735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":328965.0,"EndTime":328965.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":329081.0,"Objects":[{"StartTime":329081.0,"EndTime":329081.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":329197.0,"Objects":[{"StartTime":329197.0,"EndTime":329197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":329312.0,"EndTime":329312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":329427.0,"Objects":[{"StartTime":329427.0,"EndTime":329427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":329542.0,"EndTime":329542.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":329658.0,"Objects":[{"StartTime":329658.0,"EndTime":329658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":329831.0,"EndTime":329831.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":329889.0,"Objects":[{"StartTime":329889.0,"EndTime":329889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":330004.0,"EndTime":330004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":330120.0,"Objects":[{"StartTime":330120.0,"EndTime":330120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":330235.0,"EndTime":330235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":330350.0,"Objects":[{"StartTime":330350.0,"EndTime":330350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":330465.0,"EndTime":330465.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":330581.0,"Objects":[{"StartTime":330581.0,"EndTime":330581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":330754.0,"EndTime":330754.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":330812.0,"Objects":[{"StartTime":330812.0,"EndTime":330812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":330927.0,"EndTime":330927.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":331043.0,"Objects":[{"StartTime":331043.0,"EndTime":331043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":331158.0,"EndTime":331158.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":331273.0,"Objects":[{"StartTime":331273.0,"EndTime":331273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":331388.0,"EndTime":331388.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":331504.0,"Objects":[{"StartTime":331504.0,"EndTime":331504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":331677.0,"EndTime":331677.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":331735.0,"Objects":[{"StartTime":331735.0,"EndTime":331735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":331850.0,"EndTime":331850.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":331966.0,"Objects":[{"StartTime":331966.0,"EndTime":331966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":332081.0,"Objects":[{"StartTime":332081.0,"EndTime":332081.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":332138.0,"Objects":[{"StartTime":332138.0,"EndTime":332138.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":332196.0,"Objects":[{"StartTime":332196.0,"EndTime":332196.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":332254.0,"Objects":[{"StartTime":332254.0,"EndTime":332254.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":332312.0,"Objects":[{"StartTime":332312.0,"EndTime":332312.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":332370.0,"Objects":[{"StartTime":332370.0,"EndTime":332370.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":332427.0,"Objects":[{"StartTime":332427.0,"EndTime":332427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":332657.0,"EndTime":332657.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":332773.0,"Objects":[{"StartTime":332773.0,"EndTime":332773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":332889.0,"Objects":[{"StartTime":332889.0,"EndTime":332889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":333004.0,"EndTime":333004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":333120.0,"Objects":[{"StartTime":333120.0,"EndTime":333120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":333235.0,"EndTime":333235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":333350.0,"Objects":[{"StartTime":333350.0,"EndTime":333350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":333523.0,"EndTime":333523.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":333581.0,"Objects":[{"StartTime":333581.0,"EndTime":333581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":333696.0,"EndTime":333696.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":333812.0,"Objects":[{"StartTime":333812.0,"EndTime":333812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":333927.0,"EndTime":333927.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":334043.0,"Objects":[{"StartTime":334043.0,"EndTime":334043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":334158.0,"EndTime":334158.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":334273.0,"Objects":[{"StartTime":334273.0,"EndTime":334273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":334503.0,"EndTime":334503.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":334735.0,"Objects":[{"StartTime":334735.0,"EndTime":334735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":334850.0,"EndTime":334850.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":334966.0,"Objects":[{"StartTime":334966.0,"EndTime":334966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":335081.0,"EndTime":335081.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":335197.0,"Objects":[{"StartTime":335197.0,"EndTime":335197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":335427.0,"EndTime":335427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":335543.0,"Objects":[{"StartTime":335543.0,"EndTime":335543.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":335658.0,"Objects":[{"StartTime":335658.0,"EndTime":335658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":335888.0,"EndTime":335888.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":336004.0,"Objects":[{"StartTime":336004.0,"EndTime":336004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":336120.0,"Objects":[{"StartTime":336120.0,"EndTime":336120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":336293.0,"EndTime":336293.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":336350.0,"Objects":[{"StartTime":336350.0,"EndTime":336350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":336465.0,"EndTime":336465.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":336581.0,"Objects":[{"StartTime":336581.0,"EndTime":336581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":336696.0,"EndTime":336696.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":336812.0,"Objects":[{"StartTime":336812.0,"EndTime":336812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":336927.0,"EndTime":336927.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":337043.0,"Objects":[{"StartTime":337043.0,"EndTime":337043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":337100.0,"Objects":[{"StartTime":337100.0,"EndTime":337100.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":337158.0,"Objects":[{"StartTime":337158.0,"EndTime":337158.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":337216.0,"Objects":[{"StartTime":337216.0,"EndTime":337216.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":337273.0,"Objects":[{"StartTime":337273.0,"EndTime":337273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":337331.0,"Objects":[{"StartTime":337331.0,"EndTime":337331.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":337389.0,"Objects":[{"StartTime":337389.0,"EndTime":337389.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":337446.0,"Objects":[{"StartTime":337446.0,"EndTime":337446.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":337504.0,"Objects":[{"StartTime":337504.0,"EndTime":337504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":337561.0,"Objects":[{"StartTime":337561.0,"EndTime":337561.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":337619.0,"Objects":[{"StartTime":337619.0,"EndTime":337619.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":337677.0,"Objects":[{"StartTime":337677.0,"EndTime":337677.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":337734.0,"Objects":[{"StartTime":337734.0,"EndTime":337734.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":337793.0,"Objects":[{"StartTime":337793.0,"EndTime":337793.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":337851.0,"Objects":[{"StartTime":337851.0,"EndTime":337851.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":337909.0,"Objects":[{"StartTime":337909.0,"EndTime":337909.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":337966.0,"Objects":[{"StartTime":337966.0,"EndTime":337966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":338196.0,"EndTime":338196.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":338312.0,"Objects":[{"StartTime":338312.0,"EndTime":338312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":338427.0,"Objects":[{"StartTime":338427.0,"EndTime":338427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":338657.0,"EndTime":338657.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":338773.0,"Objects":[{"StartTime":338773.0,"EndTime":338773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":338889.0,"Objects":[{"StartTime":338889.0,"EndTime":338889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":339004.0,"EndTime":339004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":339120.0,"Objects":[{"StartTime":339120.0,"EndTime":339120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":339235.0,"EndTime":339235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":339350.0,"Objects":[{"StartTime":339350.0,"EndTime":339350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":339407.0,"Objects":[{"StartTime":339407.0,"EndTime":339407.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":339465.0,"Objects":[{"StartTime":339465.0,"EndTime":339465.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":339523.0,"Objects":[{"StartTime":339523.0,"EndTime":339523.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":339580.0,"Objects":[{"StartTime":339580.0,"EndTime":339580.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":339638.0,"Objects":[{"StartTime":339638.0,"EndTime":339638.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":339696.0,"Objects":[{"StartTime":339696.0,"EndTime":339696.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":339753.0,"Objects":[{"StartTime":339753.0,"EndTime":339753.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":339812.0,"Objects":[{"StartTime":339812.0,"EndTime":339812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":340042.0,"EndTime":340042.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":340158.0,"Objects":[{"StartTime":340158.0,"EndTime":340158.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":340273.0,"Objects":[{"StartTime":340273.0,"EndTime":340273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":340388.0,"EndTime":340388.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":340504.0,"Objects":[{"StartTime":340504.0,"EndTime":340504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":340619.0,"EndTime":340619.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":340735.0,"Objects":[{"StartTime":340735.0,"EndTime":340735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":340965.0,"EndTime":340965.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":341081.0,"Objects":[{"StartTime":341081.0,"EndTime":341081.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":341197.0,"Objects":[{"StartTime":341197.0,"EndTime":341197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":341312.0,"EndTime":341312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":341427.0,"Objects":[{"StartTime":341427.0,"EndTime":341427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":341542.0,"EndTime":341542.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":341658.0,"Objects":[{"StartTime":341658.0,"EndTime":341658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":341888.0,"EndTime":341888.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":342004.0,"Objects":[{"StartTime":342004.0,"EndTime":342004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":342120.0,"Objects":[{"StartTime":342120.0,"EndTime":342120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":342235.0,"EndTime":342235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":342350.0,"Objects":[{"StartTime":342350.0,"EndTime":342350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":342465.0,"EndTime":342465.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":342581.0,"Objects":[{"StartTime":342581.0,"EndTime":342581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":342811.0,"EndTime":342811.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":342927.0,"Objects":[{"StartTime":342927.0,"EndTime":342927.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":343043.0,"Objects":[{"StartTime":343043.0,"EndTime":343043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":343273.0,"EndTime":343273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":343389.0,"Objects":[{"StartTime":343389.0,"EndTime":343389.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":343447.0,"Objects":[{"StartTime":343447.0,"EndTime":343447.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":343504.0,"Objects":[{"StartTime":343504.0,"EndTime":343504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":343734.0,"EndTime":343734.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":343850.0,"Objects":[{"StartTime":343850.0,"EndTime":343850.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":344080.0,"EndTime":344080.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":344197.0,"Objects":[{"StartTime":344197.0,"EndTime":344197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":344312.0,"EndTime":344312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":344370.0,"Objects":[{"StartTime":344370.0,"EndTime":344370.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":344427.0,"Objects":[{"StartTime":344427.0,"EndTime":344427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":344657.0,"EndTime":344657.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":344773.0,"Objects":[{"StartTime":344773.0,"EndTime":344773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":344889.0,"Objects":[{"StartTime":344889.0,"EndTime":344889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":345004.0,"EndTime":345004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":345120.0,"Objects":[{"StartTime":345120.0,"EndTime":345120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":345235.0,"EndTime":345235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":345350.0,"Objects":[{"StartTime":345350.0,"EndTime":345350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":345465.0,"EndTime":345465.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":345581.0,"Objects":[{"StartTime":345581.0,"EndTime":345581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":345696.0,"EndTime":345696.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":345812.0,"Objects":[{"StartTime":345812.0,"EndTime":345812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":345927.0,"EndTime":345927.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":346043.0,"Objects":[{"StartTime":346043.0,"EndTime":346043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":346158.0,"EndTime":346158.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":346273.0,"Objects":[{"StartTime":346273.0,"EndTime":346273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":346446.0,"EndTime":346446.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":346504.0,"Objects":[{"StartTime":346504.0,"EndTime":346504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":346677.0,"EndTime":346677.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":346735.0,"Objects":[{"StartTime":346735.0,"EndTime":346735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":346908.0,"EndTime":346908.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":346966.0,"Objects":[{"StartTime":346966.0,"EndTime":346966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":347081.0,"EndTime":347081.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":347197.0,"Objects":[{"StartTime":347197.0,"EndTime":347197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":347427.0,"EndTime":347427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":347543.0,"Objects":[{"StartTime":347543.0,"EndTime":347543.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":347658.0,"Objects":[{"StartTime":347658.0,"EndTime":347658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":347773.0,"EndTime":347773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":347889.0,"Objects":[{"StartTime":347889.0,"EndTime":347889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":348004.0,"EndTime":348004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":348120.0,"Objects":[{"StartTime":348120.0,"EndTime":348120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":348235.0,"EndTime":348235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":348350.0,"Objects":[{"StartTime":348350.0,"EndTime":348350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":348465.0,"EndTime":348465.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":348581.0,"Objects":[{"StartTime":348581.0,"EndTime":348581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":348696.0,"EndTime":348696.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":348811.0,"Objects":[{"StartTime":348811.0,"EndTime":348811.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":348926.0,"EndTime":348926.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":348985.0,"Objects":[{"StartTime":348985.0,"EndTime":348985.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":349043.0,"Objects":[{"StartTime":349043.0,"EndTime":349043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":349273.0,"EndTime":349273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":349389.0,"Objects":[{"StartTime":349389.0,"EndTime":349389.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":349504.0,"Objects":[{"StartTime":349504.0,"EndTime":349504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":349619.0,"EndTime":349619.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":349735.0,"Objects":[{"StartTime":349735.0,"EndTime":349735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":349850.0,"EndTime":349850.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":349966.0,"Objects":[{"StartTime":349966.0,"EndTime":349966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":350196.0,"EndTime":350196.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":350312.0,"Objects":[{"StartTime":350312.0,"EndTime":350312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":350427.0,"Objects":[{"StartTime":350427.0,"EndTime":350427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":350657.0,"EndTime":350657.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":350773.0,"Objects":[{"StartTime":350773.0,"EndTime":350773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":350889.0,"Objects":[{"StartTime":350889.0,"EndTime":350889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":351119.0,"EndTime":351119.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":351235.0,"Objects":[{"StartTime":351235.0,"EndTime":351235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":351350.0,"Objects":[{"StartTime":351350.0,"EndTime":351350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":351580.0,"EndTime":351580.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":351812.0,"Objects":[{"StartTime":351812.0,"EndTime":351812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":352042.0,"EndTime":352042.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":352158.0,"Objects":[{"StartTime":352158.0,"EndTime":352158.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":352273.0,"Objects":[{"StartTime":352273.0,"EndTime":352273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":352388.0,"EndTime":352388.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":352504.0,"Objects":[{"StartTime":352504.0,"EndTime":352504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":352619.0,"EndTime":352619.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":352735.0,"Objects":[{"StartTime":352735.0,"EndTime":352735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":352965.0,"EndTime":352965.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":353081.0,"Objects":[{"StartTime":353081.0,"EndTime":353081.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":353197.0,"Objects":[{"StartTime":353197.0,"EndTime":353197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":353312.0,"EndTime":353312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":353427.0,"Objects":[{"StartTime":353427.0,"EndTime":353427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":353542.0,"EndTime":353542.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":353658.0,"Objects":[{"StartTime":353658.0,"EndTime":353658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":353773.0,"EndTime":353773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":353889.0,"Objects":[{"StartTime":353889.0,"EndTime":353889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":354004.0,"EndTime":354004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":354120.0,"Objects":[{"StartTime":354120.0,"EndTime":354120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":354235.0,"EndTime":354235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":354350.0,"Objects":[{"StartTime":354350.0,"EndTime":354350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":354465.0,"EndTime":354465.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":354581.0,"Objects":[{"StartTime":354581.0,"EndTime":354581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":354811.0,"EndTime":354811.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":354927.0,"Objects":[{"StartTime":354927.0,"EndTime":354927.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":355043.0,"Objects":[{"StartTime":355043.0,"EndTime":355043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":355273.0,"EndTime":355273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":355389.0,"Objects":[{"StartTime":355389.0,"EndTime":355389.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":355504.0,"Objects":[{"StartTime":355504.0,"EndTime":355504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":355620.0,"Objects":[{"StartTime":355620.0,"EndTime":355620.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":355735.0,"Objects":[{"StartTime":355735.0,"EndTime":355735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":355851.0,"Objects":[{"StartTime":355851.0,"EndTime":355851.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":355966.0,"Objects":[{"StartTime":355966.0,"EndTime":355966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":356082.0,"Objects":[{"StartTime":356082.0,"EndTime":356082.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":356197.0,"Objects":[{"StartTime":356197.0,"EndTime":356197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":356313.0,"Objects":[{"StartTime":356313.0,"EndTime":356313.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":356427.0,"Objects":[{"StartTime":356427.0,"EndTime":356427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":356657.0,"EndTime":356657.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":356773.0,"Objects":[{"StartTime":356773.0,"EndTime":356773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":356889.0,"Objects":[{"StartTime":356889.0,"EndTime":356889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":357004.0,"EndTime":357004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":357120.0,"Objects":[{"StartTime":357120.0,"EndTime":357120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":357235.0,"EndTime":357235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":357350.0,"Objects":[{"StartTime":357350.0,"EndTime":357350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":357580.0,"EndTime":357580.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":357697.0,"Objects":[{"StartTime":357697.0,"EndTime":357697.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":357812.0,"Objects":[{"StartTime":357812.0,"EndTime":357812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":357927.0,"Objects":[{"StartTime":357927.0,"EndTime":357927.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":358043.0,"Objects":[{"StartTime":358043.0,"EndTime":358043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":358158.0,"Objects":[{"StartTime":358158.0,"EndTime":358158.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":358273.0,"Objects":[{"StartTime":358273.0,"EndTime":358273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":358503.0,"EndTime":358503.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":358620.0,"Objects":[{"StartTime":358620.0,"EndTime":358620.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":358735.0,"Objects":[{"StartTime":358735.0,"EndTime":358735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":358850.0,"EndTime":358850.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":358966.0,"Objects":[{"StartTime":358966.0,"EndTime":358966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":359081.0,"EndTime":359081.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":359197.0,"Objects":[{"StartTime":359197.0,"EndTime":359658.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":359773.0,"Objects":[{"StartTime":359773.0,"EndTime":359773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":359889.0,"Objects":[{"StartTime":359889.0,"EndTime":359889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":360004.0,"Objects":[{"StartTime":360004.0,"EndTime":360004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":360120.0,"Objects":[{"StartTime":360120.0,"EndTime":360120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":360350.0,"EndTime":360350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":360466.0,"Objects":[{"StartTime":360466.0,"EndTime":360466.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":360581.0,"Objects":[{"StartTime":360581.0,"EndTime":360581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":360696.0,"EndTime":360696.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":360812.0,"Objects":[{"StartTime":360812.0,"EndTime":360812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":360927.0,"EndTime":360927.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":361043.0,"Objects":[{"StartTime":361043.0,"EndTime":361043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":361158.0,"EndTime":361158.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":361273.0,"Objects":[{"StartTime":361273.0,"EndTime":361273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":361388.0,"EndTime":361388.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":361504.0,"Objects":[{"StartTime":361504.0,"EndTime":361504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":361620.0,"Objects":[{"StartTime":361620.0,"EndTime":361620.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":361735.0,"Objects":[{"StartTime":361735.0,"EndTime":361735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":361851.0,"Objects":[{"StartTime":361851.0,"EndTime":361851.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":361966.0,"Objects":[{"StartTime":361966.0,"EndTime":361966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":362196.0,"EndTime":362196.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":362312.0,"Objects":[{"StartTime":362312.0,"EndTime":362312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":362427.0,"Objects":[{"StartTime":362427.0,"EndTime":362427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":362542.0,"EndTime":362542.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":362658.0,"Objects":[{"StartTime":362658.0,"EndTime":362658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":362773.0,"EndTime":362773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":362831.0,"Objects":[{"StartTime":362831.0,"EndTime":362831.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":362889.0,"Objects":[{"StartTime":362889.0,"EndTime":362889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":363119.0,"EndTime":363119.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":363235.0,"Objects":[{"StartTime":363235.0,"EndTime":363235.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":363465.0,"EndTime":363465.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":363581.0,"Objects":[{"StartTime":363581.0,"EndTime":363581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":363696.0,"EndTime":363696.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":363812.0,"Objects":[{"StartTime":363812.0,"EndTime":364273.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":364389.0,"Objects":[{"StartTime":364389.0,"EndTime":364389.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":364504.0,"Objects":[{"StartTime":364504.0,"EndTime":364504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":364619.0,"EndTime":364619.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":364735.0,"Objects":[{"StartTime":364735.0,"EndTime":364735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":364850.0,"EndTime":364850.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":364966.0,"Objects":[{"StartTime":364966.0,"EndTime":365427.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":365543.0,"Objects":[{"StartTime":365543.0,"EndTime":365543.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":365658.0,"Objects":[{"StartTime":365658.0,"EndTime":365658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":365773.0,"EndTime":365773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":365889.0,"Objects":[{"StartTime":365889.0,"EndTime":365889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":366004.0,"EndTime":366004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":366120.0,"Objects":[{"StartTime":366120.0,"EndTime":366120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":366235.0,"Objects":[{"StartTime":366235.0,"EndTime":366235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":366350.0,"EndTime":366350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":366465.0,"EndTime":366465.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":366581.0,"Objects":[{"StartTime":366581.0,"EndTime":366581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":366696.0,"EndTime":366696.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":366812.0,"Objects":[{"StartTime":366812.0,"EndTime":366812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":367042.0,"EndTime":367042.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":367158.0,"Objects":[{"StartTime":367158.0,"EndTime":367158.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":367273.0,"Objects":[{"StartTime":367273.0,"EndTime":367273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":367388.0,"EndTime":367388.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":367504.0,"Objects":[{"StartTime":367504.0,"EndTime":367965.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":368081.0,"Objects":[{"StartTime":368081.0,"EndTime":368081.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":368197.0,"Objects":[{"StartTime":368197.0,"EndTime":368197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":368312.0,"EndTime":368312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":368427.0,"Objects":[{"StartTime":368427.0,"EndTime":368427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":368657.0,"EndTime":368657.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":368773.0,"Objects":[{"StartTime":368773.0,"EndTime":368773.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":369003.0,"EndTime":369003.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":369120.0,"Objects":[{"StartTime":369120.0,"EndTime":369120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":369235.0,"EndTime":369235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":369350.0,"Objects":[{"StartTime":369350.0,"EndTime":369350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":369580.0,"EndTime":369580.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":369697.0,"Objects":[{"StartTime":369697.0,"EndTime":369697.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":369812.0,"Objects":[{"StartTime":369812.0,"EndTime":369812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":369927.0,"EndTime":369927.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":370043.0,"Objects":[{"StartTime":370043.0,"EndTime":370043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":370158.0,"EndTime":370158.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":370273.0,"Objects":[{"StartTime":370273.0,"EndTime":370273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":370389.0,"Objects":[{"StartTime":370389.0,"EndTime":370389.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":370504.0,"Objects":[{"StartTime":370504.0,"EndTime":370504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":370620.0,"Objects":[{"StartTime":370620.0,"EndTime":370620.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":370677.0,"Objects":[{"StartTime":370677.0,"EndTime":370677.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":370735.0,"Objects":[{"StartTime":370735.0,"EndTime":370735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":370793.0,"Objects":[{"StartTime":370793.0,"EndTime":370793.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":370850.0,"Objects":[{"StartTime":370850.0,"EndTime":370850.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":370908.0,"Objects":[{"StartTime":370908.0,"EndTime":370908.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":370966.0,"Objects":[{"StartTime":370966.0,"EndTime":370966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":371081.0,"Objects":[{"StartTime":371081.0,"EndTime":371081.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":371197.0,"Objects":[{"StartTime":371197.0,"EndTime":371197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":371427.0,"EndTime":371427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":371658.0,"Objects":[{"StartTime":371658.0,"EndTime":371658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":371888.0,"EndTime":371888.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":372120.0,"Objects":[{"StartTime":372120.0,"EndTime":372120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":372350.0,"EndTime":372350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":372581.0,"Objects":[{"StartTime":372581.0,"EndTime":372581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":372696.0,"EndTime":372696.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":372812.0,"Objects":[{"StartTime":372812.0,"EndTime":372812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":372927.0,"Objects":[{"StartTime":372927.0,"EndTime":372927.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":373043.0,"Objects":[{"StartTime":373043.0,"EndTime":373043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":373273.0,"EndTime":373273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":373504.0,"Objects":[{"StartTime":373504.0,"EndTime":373504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":373734.0,"EndTime":373734.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":373850.0,"Objects":[{"StartTime":373850.0,"EndTime":373850.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":373966.0,"Objects":[{"StartTime":373966.0,"EndTime":373966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":374196.0,"EndTime":374196.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":374427.0,"Objects":[{"StartTime":374427.0,"EndTime":374427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":374542.0,"EndTime":374542.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":374658.0,"Objects":[{"StartTime":374658.0,"EndTime":374658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":374773.0,"Objects":[{"StartTime":374773.0,"EndTime":374773.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":374830.0,"Objects":[{"StartTime":374830.0,"EndTime":374830.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":374889.0,"Objects":[{"StartTime":374889.0,"EndTime":374889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":375119.0,"EndTime":375119.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":375350.0,"Objects":[{"StartTime":375350.0,"EndTime":375350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":375466.0,"Objects":[{"StartTime":375466.0,"EndTime":375466.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":375581.0,"Objects":[{"StartTime":375581.0,"EndTime":375581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":375697.0,"Objects":[{"StartTime":375697.0,"EndTime":375697.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":375812.0,"Objects":[{"StartTime":375812.0,"EndTime":375812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":376042.0,"EndTime":376042.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":376273.0,"Objects":[{"StartTime":376273.0,"EndTime":376273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":376503.0,"EndTime":376503.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":376620.0,"Objects":[{"StartTime":376620.0,"EndTime":376620.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":376735.0,"Objects":[{"StartTime":376735.0,"EndTime":376735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":376965.0,"EndTime":376965.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":377197.0,"Objects":[{"StartTime":377197.0,"EndTime":377197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":377313.0,"Objects":[{"StartTime":377313.0,"EndTime":377313.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":377428.0,"Objects":[{"StartTime":377428.0,"EndTime":377428.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":377544.0,"Objects":[{"StartTime":377544.0,"EndTime":377544.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":377658.0,"Objects":[{"StartTime":377658.0,"EndTime":377658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":377888.0,"EndTime":377888.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":378120.0,"Objects":[{"StartTime":378120.0,"EndTime":378120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":378350.0,"EndTime":378350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":378581.0,"Objects":[{"StartTime":378581.0,"EndTime":379273.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":379504.0,"Objects":[{"StartTime":379504.0,"EndTime":379504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":379734.0,"EndTime":379734.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":379850.0,"Objects":[{"StartTime":379850.0,"EndTime":379850.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":380080.0,"EndTime":380080.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":380197.0,"Objects":[{"StartTime":380197.0,"EndTime":380197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":380312.0,"EndTime":380312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":380427.0,"Objects":[{"StartTime":380427.0,"EndTime":380427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":380543.0,"Objects":[{"StartTime":380543.0,"EndTime":380543.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":380773.0,"EndTime":380773.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":380889.0,"Objects":[{"StartTime":380889.0,"EndTime":380889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":381004.0,"EndTime":381004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":381120.0,"Objects":[{"StartTime":381120.0,"EndTime":381120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":381235.0,"EndTime":381235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":381350.0,"Objects":[{"StartTime":381350.0,"EndTime":381350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":381466.0,"Objects":[{"StartTime":381466.0,"EndTime":381466.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":381696.0,"EndTime":381696.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":381812.0,"Objects":[{"StartTime":381812.0,"EndTime":381812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":381927.0,"EndTime":381927.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":382043.0,"Objects":[{"StartTime":382043.0,"EndTime":382043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":382158.0,"EndTime":382158.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":382273.0,"Objects":[{"StartTime":382273.0,"EndTime":382273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":382330.0,"EndTime":382330.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":382388.0,"EndTime":382388.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":382446.0,"EndTime":382446.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":382504.0,"Objects":[{"StartTime":382504.0,"EndTime":382504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":382561.0,"EndTime":382561.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":382619.0,"EndTime":382619.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":382677.0,"EndTime":382677.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":382735.0,"Objects":[{"StartTime":382735.0,"EndTime":382735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":382792.0,"Objects":[{"StartTime":382792.0,"EndTime":382792.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":382850.0,"Objects":[{"StartTime":382850.0,"EndTime":382850.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":382908.0,"Objects":[{"StartTime":382908.0,"EndTime":382908.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":382966.0,"Objects":[{"StartTime":382966.0,"EndTime":382966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":383023.0,"Objects":[{"StartTime":383023.0,"EndTime":383023.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":383080.0,"Objects":[{"StartTime":383080.0,"EndTime":383080.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":383138.0,"Objects":[{"StartTime":383138.0,"EndTime":383138.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":383197.0,"Objects":[{"StartTime":383197.0,"EndTime":383197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":383254.0,"Objects":[{"StartTime":383254.0,"EndTime":383254.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":383312.0,"Objects":[{"StartTime":383312.0,"EndTime":383312.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":383370.0,"Objects":[{"StartTime":383370.0,"EndTime":383370.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":383427.0,"Objects":[{"StartTime":383427.0,"EndTime":383427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":383484.0,"Objects":[{"StartTime":383484.0,"EndTime":383484.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":383542.0,"Objects":[{"StartTime":383542.0,"EndTime":383542.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":383600.0,"Objects":[{"StartTime":383600.0,"EndTime":383600.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":383657.0,"Objects":[{"StartTime":383657.0,"EndTime":383657.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":383715.0,"Objects":[{"StartTime":383715.0,"EndTime":383715.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":383773.0,"Objects":[{"StartTime":383773.0,"EndTime":383773.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":383831.0,"Objects":[{"StartTime":383831.0,"EndTime":383831.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":383889.0,"Objects":[{"StartTime":383889.0,"EndTime":383889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":383947.0,"Objects":[{"StartTime":383947.0,"EndTime":383947.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":384004.0,"Objects":[{"StartTime":384004.0,"EndTime":384004.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":384062.0,"Objects":[{"StartTime":384062.0,"EndTime":384062.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":384120.0,"Objects":[{"StartTime":384120.0,"EndTime":384120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true}]}]} \ No newline at end of file diff --git a/osu.Game.Rulesets.Mania/Resources/Testing/Beatmaps/875945.osu b/osu.Game.Rulesets.Mania/Resources/Testing/Beatmaps/875945.osu new file mode 100644 index 0000000000..a24fcea30a --- /dev/null +++ b/osu.Game.Rulesets.Mania/Resources/Testing/Beatmaps/875945.osu @@ -0,0 +1,1824 @@ +osu file format v14 + +[General] +AudioFilename: imagematerial.mp3 +AudioLeadIn: 0 +PreviewTime: 165589 +Countdown: 0 +SampleSet: Soft +StackLeniency: 0.7 +Mode: 0 +LetterboxInBreaks: 0 +EpilepsyWarning: 1 +WidescreenStoryboard: 1 + +[Editor] +Bookmarks: 56435,71204,88743,103512,120127,134897,149666,181051,197666,310280,356434,371204,384127 +DistanceSpacing: 0.3 +BeatDivisor: 4 +GridSize: 4 +TimelineZoom: 5.700003 + +[Metadata] +Title:IMAGE -MATERIAL- +TitleUnicode:IMAGE -MATERIAL- +Artist:Tatsh +ArtistUnicode:Tatsh +Creator:Enon +Version:Revolution +Source: +Tags:(新曲) (Shinkyoku) REFLEC BEAT limelight 福山沙織 fukuyama saori Dailycare +BeatmapID:875945 +BeatmapSetID:402837 + +[Difficulty] +HPDrainRate:6 +CircleSize:4.2 +OverallDifficulty:9 +ApproachRate:9.8 +SliderMultiplier:1.87 +SliderTickRate:1 + +[Events] +//Background and Video events +0,0,"BG.jpg",0,0 +//Break Periods +2,49251,55956 +//Storyboard Layer 0 (Background) +//Storyboard Layer 1 (Fail) +//Storyboard Layer 2 (Pass) +//Storyboard Layer 3 (Foreground) +//Storyboard Sound Samples + +[TimingPoints] +6590,461.538461538462,4,2,2,15,1,0 +6590,-200,4,2,2,15,0,0 +8320,-200,4,2,2,5,0,0 +8436,-200,4,2,2,15,0,0 +10166,-200,4,2,2,5,0,0 +10282,-200,4,2,2,15,0,0 +12013,-200,4,2,2,5,0,0 +12128,-200,4,2,2,15,0,0 +13859,-200,4,2,2,5,0,0 +13974,-200,4,2,2,15,0,0 +15705,-200,4,2,2,5,0,0 +15820,-200,4,2,2,15,0,0 +17551,-200,4,2,2,5,0,0 +17666,-200,4,2,2,15,0,0 +49051,230.769230769231,4,2,1,15,1,0 +56435,-100,4,2,1,60,0,0 +62666,-200,4,2,1,60,0,0 +63820,-100,4,2,1,60,0,0 +69358,-100,4,2,1,55,0,0 +69589,-100,4,2,1,50,0,0 +69820,-100,4,2,1,45,0,0 +70051,-100,4,2,1,40,0,0 +70281,-100,4,2,1,30,0,0 +70512,-100,4,2,1,40,0,0 +70743,-100,4,2,1,50,0,0 +70974,-100,4,2,1,60,0,0 +71204,-100,4,2,1,70,0,0 +74839,-100,4,2,1,5,0,0 +74897,-100,4,2,1,70,0,0 +78301,-100,4,2,1,5,0,0 +78358,-100,4,2,1,70,0,0 +78531,-100,4,2,1,5,0,0 +78589,-100,4,2,1,70,0,0 +82224,-100,4,2,1,5,0,0 +82281,-100,4,2,1,70,0,0 +85685,-100,4,2,1,5,0,0 +85743,-100,4,2,1,70,0,0 +88743,-100,4,2,1,85,0,1 +90070,-100,4,2,1,5,0,1 +90127,-100,4,2,1,85,0,1 +93762,-100,4,2,1,5,0,1 +93820,-100,4,2,1,85,0,1 +95377,-100,4,2,1,5,0,1 +95435,-100,4,2,1,85,0,1 +103512,-100,4,2,1,60,0,0 +106916,-100,4,2,1,5,0,0 +106974,-100,4,2,1,60,0,0 +110608,-100,4,2,1,5,0,0 +110666,-100,4,2,1,60,0,0 +114301,-100,4,2,1,5,0,0 +114358,-100,4,2,1,60,0,0 +114820,-100,4,2,3,60,0,0 +114834,-100,4,2,1,60,0,0 +116666,-100,4,2,3,60,0,0 +116680,-100,4,2,1,60,0,0 +117358,-100,4,2,1,55,0,0 +117589,-100,4,2,1,50,0,0 +117820,-100,4,2,1,45,0,0 +118051,-100,4,2,1,40,0,0 +118281,-100,4,2,1,30,0,0 +118743,-100,4,2,1,40,0,0 +119204,-100,4,2,1,50,0,0 +119666,-100,4,2,1,60,0,0 +120127,-100,4,2,1,70,0,0 +126762,-100,4,2,1,5,0,0 +126820,-100,4,2,1,70,0,0 +143377,-100,4,2,1,5,0,0 +143435,-111.111111111111,4,2,1,70,0,0 +143608,-111.111111111111,4,2,1,5,0,0 +143666,-125,4,2,1,70,0,0 +143839,-125,4,2,1,5,0,0 +143897,-142.857142857143,4,2,1,70,0,0 +144070,-142.857142857143,4,2,1,5,0,0 +144127,-100,4,2,1,70,0,0 +149666,-200,4,2,1,40,0,0 +160743,-100,4,2,1,55,0,0 +166281,-100,4,2,1,85,0,1 +167608,-100,4,2,1,5,0,1 +167666,-100,4,2,1,85,0,1 +171301,-100,4,2,1,5,0,1 +171358,-100,4,2,1,85,0,1 +172916,-100,4,2,1,5,0,1 +172974,-100,4,2,1,85,0,1 +181051,-100,4,2,1,60,0,0 +182377,-100,4,2,1,5,0,0 +182435,-100,4,2,1,60,0,0 +192358,-100,4,2,3,60,0,0 +192373,-100,4,2,1,60,0,0 +194204,-100,4,2,3,60,0,0 +194219,-100,4,2,1,60,0,0 +194897,-100,4,2,1,55,0,0 +195127,-100,4,2,1,50,0,0 +195358,-100,4,2,1,45,0,0 +195589,-100,4,2,1,40,0,0 +195820,-100,4,2,1,30,0,0 +196281,-100,4,2,1,40,0,0 +196743,-100,4,2,1,50,0,0 +197204,-100,4,2,1,60,0,0 +197666,-100,4,2,1,85,0,1 +219070,-100,4,2,1,5,0,1 +219127,-142.857142857143,4,2,1,85,0,1 +219301,-142.857142857143,4,2,1,5,0,1 +219358,-111.111111111111,4,2,1,85,0,1 +219531,-111.111111111111,4,2,1,5,0,1 +219589,-166.666666666667,4,2,1,85,0,1 +219762,-166.666666666667,4,2,1,5,0,1 +219820,-100,4,2,1,85,0,1 +227204,461.538461538462,4,2,2,25,1,0 +227204,-200,4,2,2,25,0,0 +251550,697.674418604651,4,2,2,25,1,0 +251550,-133.333333333333,4,2,2,25,0,0 +252702,714.285714285714,4,2,2,20,1,0 +252702,-133.333333333333,4,2,2,20,0,0 +253506,800,4,2,2,18,1,0 +254095,1132.07547169811,4,2,2,15,1,0 +254095,-133.333333333333,4,2,2,15,0,0 +255580,1200,4,2,2,10,1,0 +256480,1267.10000000001,4,2,2,8,1,0 +256480,-133.333333333333,4,2,2,8,0,0 +258892,2131.45714285714,4,2,2,6,1,0 +258892,-133.333333333333,4,2,2,6,0,0 +263197,230.769230769231,4,2,1,65,1,0 +277966,-100,4,2,1,70,0,0 +285062,-100,4,2,1,5,0,0 +285120,-100,4,2,1,70,0,0 +285293,-100,4,2,1,5,0,0 +285350,-100,4,2,1,70,0,0 +292447,-100,4,2,1,5,0,0 +292504,-100,4,2,1,70,0,0 +295504,-100,4,2,1,85,0,1 +296831,-100,4,2,1,5,0,1 +296889,-100,4,2,1,85,0,1 +300523,-100,4,2,1,5,0,1 +300581,-100,4,2,1,85,0,1 +308889,-100,4,2,1,85,0,0 +310273,-100,4,2,1,85,0,1 +315062,-100,4,2,1,5,0,1 +315120,-100,4,2,1,85,0,1 +329831,-100,4,2,1,5,0,1 +329889,-100,4,2,1,85,0,1 +330754,-100,4,2,1,5,0,1 +330812,-100,4,2,1,85,0,1 +331677,-100,4,2,1,5,0,1 +331735,-100,4,2,1,85,0,1 +333523,-100,4,2,1,5,0,1 +333581,-100,4,2,1,85,0,1 +336293,-100,4,2,1,5,0,1 +336350,-100,4,2,1,85,0,1 +346447,-100,4,2,1,5,0,1 +346504,-142.857142857143,4,2,1,85,0,1 +346677,-142.857142857143,4,2,1,5,0,1 +346735,-111.111111111111,4,2,1,85,0,1 +346908,-111.111111111111,4,2,1,5,0,1 +346966,-166.666666666667,4,2,1,85,0,1 +347197,-100,4,2,1,85,0,1 +356427,-100,4,2,1,60,0,0 + + +[Colours] +Combo1 : 235,221,186 +Combo2 : 165,202,233 +Combo3 : 114,145,218 +Combo4 : 58,148,190 + +[HitObjects] +88,104,6590,6,0,B|176:156|256:108|256:108|336:60|423:112,1,350.625,6|0,0:0|0:0,0:0:0:0: +396,213,8436,2,0,P|277:247|376:172,1,350.625,6|0,0:0|0:0,0:0:0:0: +472,220,10282,2,0,P|456:288|220:300,1,350.625,6|0,0:0|0:0,0:0:0:0: +277,200,12128,2,0,P|398:225|276:244,1,350.625,6|0,0:0|0:0,0:0:0:0: +224,141,13974,6,0,P|379:90|473:224,1,350.625,6|0,0:0|0:0,0:0:0:0: +496,301,15820,2,0,B|304:277|329:378|139:354,1,350.625,6|0,0:0|0:0,0:0:0:0: +76,352,17666,2,0,B|128:271|43:128|43:128|96:217|173:187,1,374,6|2,0:0|0:0,0:0:0:0: +256,192,19628,12,0,21128,0:0:0:0: +213,117,21359,6,0,L|119:122,1,93.5,6|0,0:0|0:0,0:0:0:0: +300,161,22282,2,0,L|393:155,1,93.5,2|0,0:0|0:0,0:0:0:0: +233,38,23205,2,0,L|139:43,1,93.5,6|0,0:0|0:0,0:0:0:0: +280,240,24128,2,0,L|373:234,1,93.5,2|0,0:0|0:0,0:0:0:0: +509,22,25051,6,0,B|342:1|390:161|198:113,1,327.25,6|0,0:0|0:0,0:0:0:0: +139,43,26897,2,0,P|181:132|110:300,1,280.5,2|0,0:0|0:0,0:0:0:0: +46,366,28743,6,0,L|139:371,1,93.5,6|0,0:0|0:0,0:0:0:0: +280,175,29666,2,0,L|186:169,1,93.5,2|0,0:0|0:0,0:0:0:0: +26,287,30589,2,0,L|119:292,1,93.5,6|0,0:0|0:0,0:0:0:0: +300,254,31513,2,0,L|206:248,1,93.5,2|0,0:0|0:0,0:0:0:0: +0,57,32436,6,0,B|189:33|134:214|352:176,1,374,6|2,0:0|0:0,0:0:0:0: +334,178,35205,2,0,L|315:351,1,163.625,2|0,0:0|0:0,0:0:0:0: +396,313,36128,6,0,P|430:308|456:284,1,70.125,6|0,0:0|0:0,0:0:0:0: +508,233,36590,6,0,B|205:287|288:12|1:48,1,561,2|0,0:0|0:0,0:0:0:0: +10,47,39820,6,0,L|120:37,1,93.5,6|0,0:0|0:0,0:0:0:0: +233,130,40743,2,0,L|123:140,1,93.5,2|0,0:0|0:0,0:0:0:0: +268,229,41666,2,0,L|473:210,1,187,2|2,0:0|0:0,0:0:0:0: +271,366,43051,2,0,P|254:329|255:303,1,46.75 +268,229,43513,5,6,0:0:0:0: +256,192,43628,12,0,49051,0:0:0:0: +45,136,56435,6,0,B|140:151|119:74|222:88,1,187,6|8,0:0|0:0,0:0:0:0: +214,252,56781,1,0,0:0:0:0: +214,252,56897,2,0,P|209:223|187:144,1,93.5,2|0,0:0|0:0,0:0:0:0: +336,48,57127,2,0,P|323:93|314:138,1,93.5,8|0,0:0|0:0,0:0:0:0: +319,308,57358,6,0,P|379:321|411:306,1,93.5,2|0,0:0|0:0,0:0:0:0: +214,252,57589,2,0,P|154:239|122:254,1,93.5,8|0,0:0|0:0,0:0:0:0: +58,340,57820,1,2,0:0:0:0: +165,370,57935,1,0,0:0:0:0: +263,315,58051,1,8,0:0:0:0: +370,345,58166,1,8,0:0:0:0: +370,345,58224,1,0,0:0:0:0: +370,345,58281,6,0,P|361:263|435:186,1,187,2|8,0:0|0:0,0:0:0:0: +507,110,58627,1,0,0:0:0:0: +507,110,58685,1,0,0:0:0:0: +507,110,58743,2,0,L|491:3,1,93.5,2|0,0:0|0:0,0:0:0:0: +412,96,58974,2,0,L|428:203,1,93.5,8|2,0:0|0:0,0:0:0:0: +370,344,59204,6,0,P|331:353|275:333,1,93.5,2|0,0:0|0:0,0:0:0:0: +273,211,59435,2,0,P|293:253|331:280,1,93.5,8|0,0:0|0:0,0:0:0:0: +349,206,59666,2,0,P|341:160|357:117,1,93.5,2|0,0:0|0:0,0:0:0:0: +482,107,59897,2,0,P|440:127|414:165,1,93.5,8|0,0:0|0:0,0:0:0:0: +144,273,60127,6,0,L|331:280,1,187,2|8,0:0|0:0,0:0:0:0: +349,206,60474,2,0,L|162:199,1,187,0|2,0:0|0:0,0:0:0:0: +85,115,60820,2,0,L|179:119,1,93.5,8|2,0:0|0:0,0:0:0:0: +126,347,61051,6,0,P|88:326|66:277,1,93.5,2|0,0:0|0:0,0:0:0:0: +162,199,61281,2,0,P|200:220|222:269,1,93.5,8|0,0:0|0:0,0:0:0:0: +203,375,61512,2,0,L|306:368,1,93.5,2|2,0:0|0:0,0:0:0:0: +443,285,61743,2,0,L|349:291,1,93.5,8|0,0:0|0:0,0:0:0:0: +329,279,61916,1,0,0:0:0:0: +309,266,61974,6,0,L|289:66,1,187,2|8,0:0|0:0,0:0:0:0: +203,118,62320,2,0,L|223:318,1,187,0|2,0:0|0:0,0:0:0:0: +133,342,62666,2,0,B|132:316|132:316|128:316|128:316|130:295|130:295|126:296|126:296|129:275|129:275|125:275|125:275|127:254|127:254|123:255|123:255|125:234|125:234|121:234|121:234|123:213|123:213|119:214|119:214|121:193|121:193|118:193|118:193|118:172,1,187,8|8,0:0|0:0,0:0:0:0: +285,26,63358,5,2,0:0:0:0: +352,117,63474,1,8,0:0:0:0: +265,189,63589,1,10,0:0:0:0: +332,280,63705,1,8,0:0:0:0: +474,81,63820,5,2,0:0:0:0: +456,83,63877,1,2,0:0:0:0: +437,85,63935,1,2,0:0:0:0: +419,88,63993,1,2,0:0:0:0: +400,90,64051,2,0,L|288:73,1,93.5,8|0,0:0|0:0,0:0:0:0: +217,50,64281,5,2,0:0:0:0: +219,68,64338,1,2,0:0:0:0: +221,87,64396,1,2,0:0:0:0: +224,105,64454,1,2,0:0:0:0: +226,124,64512,2,0,L|209:236,1,93.5,8|0,0:0|0:0,0:0:0:0: +186,307,64743,5,2,0:0:0:0: +204,305,64800,1,2,0:0:0:0: +223,303,64858,1,2,0:0:0:0: +241,300,64916,1,2,0:0:0:0: +260,298,64974,2,0,L|372:315,1,93.5,8|0,0:0|0:0,0:0:0:0: +443,338,65205,5,2,0:0:0:0: +441,320,65262,1,2,0:0:0:0: +439,301,65320,1,2,0:0:0:0: +436,283,65378,1,2,0:0:0:0: +434,264,65436,2,0,L|451:152,1,93.5,8|0,0:0|0:0,0:0:0:0: +474,81,65666,5,2,0:0:0:0: +456,83,65723,1,2,0:0:0:0: +437,85,65781,1,2,0:0:0:0: +419,88,65839,1,2,0:0:0:0: +400,90,65897,2,0,L|288:73,1,93.5,8|0,0:0|0:0,0:0:0:0: +226,124,66127,5,2,0:0:0:0: +208,126,66184,1,2,0:0:0:0: +189,128,66242,1,2,0:0:0:0: +171,131,66300,1,2,0:0:0:0: +152,133,66358,2,0,L|40:116,1,93.5,8|0,0:0|0:0,0:0:0:0: +14,291,66589,6,0,P|0:241|8:176,1,93.5,2|2,0:0|0:0,0:0:0:0: +136,292,66820,2,0,P|150:342|142:407,1,93.5,8|2,0:0|0:0,0:0:0:0: +80,232,67051,2,0,P|154:263|265:207,1,187,2|8,0:0|0:0,0:0:0:0: +315,159,67397,1,0,0:0:0:0: +491,182,67512,6,0,B|480:253|480:253|484:286|484:286|472:373,1,187,6|8,0:1|0:0,0:0:0:0: +410,124,67858,2,0,B|399:195|399:195|403:228|403:228|391:315,1,187,2|8,0:1|0:0,0:0:0:0: +329,66,68204,2,0,L|313:166,1,93.5,10|0,1:2|0:0,0:0:0:0: +181,294,68435,6,0,P|226:315|288:293,1,93.5,2|2,0:0|0:0,0:0:0:0: +440,252,68666,2,0,P|395:231|333:253,1,93.5,8|2,0:0|0:0,0:0:0:0: +128,371,68897,5,10,0:0:0:0: +181,294,69012,1,8,0:0:0:0: +117,225,69127,1,10,0:0:0:0: +170,148,69242,1,8,0:0:0:0: +52,88,69358,6,0,L|43:181,1,93.5,2|2,0:0|0:0,0:0:0:0: +181,294,69589,2,0,L|191:202,1,93.5,8|2,0:0|0:0,0:0:0:0: +39,101,69820,6,0,L|30:193,1,93.5,2|2,0:0|0:0,0:0:0:0: +168,307,70051,2,0,L|177:214,1,93.5,8|2,0:0|0:0,0:0:0:0: +198,30,70281,5,8,0:0:0:0: +220,46,70339,1,0,0:0:0:0: +244,58,70397,1,8,0:0:0:0: +269,65,70455,1,0,0:0:0:0: +296,68,70512,1,2,0:0:0:0: +322,66,70570,1,2,0:0:0:0: +348,60,70627,1,2,0:0:0:0: +373,49,70685,1,2,0:0:0:0: +396,36,70742,5,10,0:0:0:0: +441,30,70800,1,2,0:0:0:0: +483,49,70858,1,10,0:0:0:0: +510,87,70916,1,2,0:0:0:0: +512,133,70974,1,10,0:0:0:0: +492,175,71031,1,2,0:0:0:0: +453,199,71089,1,10,0:0:0:0: +407,200,71146,1,2,0:0:0:0: +364,184,71204,6,0,P|321:209|338:359,1,187,6|8,0:0|0:0,0:0:0:0: +419,372,71551,2,0,P|462:347|445:197,1,187,2|2,0:0|0:0,0:0:0:0: +332,104,71897,2,0,L|441:100,1,93.5,8|0,0:0|0:0,0:0:0:0: +248,179,72127,5,2,0:0:0:0: +248,179,72243,2,0,L|54:186,1,187,2|2,0:0|0:0,0:0:0:0: +144,259,72589,2,0,L|240:255,1,93.5,2|0,0:0|0:0,0:0:0:0: +164,104,72820,2,0,L|68:108,1,93.5,8|0,0:0|0:0,0:0:0:0: +111,338,73051,6,0,P|200:325|223:228,1,187,2|8,0:0|0:0,0:0:0:0: +192,136,73397,2,0,L|-1:143,1,187,2|2,0:0|0:0,0:0:0:0: +78,57,73743,2,0,L|174:53,1,93.5,8|0,0:0|0:0,0:0:0:0: +365,83,73974,5,2,0:0:0:0: +365,83,74089,2,0,B|294:83|288:84|255:135|251:135|191:135,1,187,2|2,0:0|0:0,0:0:0:0: +45,195,74435,2,0,P|87:216|103:264,1,93.5,2|0,0:0|0:0,0:0:0:0: +16,332,74666,2,0,B|63:323|63:323|109:331|109:331|160:322,1,140.25,8|0,0:0|0:0,0:0:0:0: +240,352,74897,6,0,P|224:290|298:187,1,187,2|8,0:0|0:0,0:0:0:0: +395,224,75243,2,0,P|411:286|337:389,1,187,2|2,0:0|0:0,0:0:0:0: +249,166,75589,2,0,L|239:73,1,93.5,8|0,0:0|0:0,0:0:0:0: +198,230,75820,5,2,0:0:0:0: +198,230,75935,2,0,B|249:267|296:244|318:210|318:210|294:242|318:278,1,187,2|2,0:0|0:0,0:0:0:0: +340,364,76281,2,0,L|433:357,1,93.5,2|0,0:0|0:0,0:0:0:0: +236,324,76512,2,0,L|120:332,1,93.5,8|0,0:0|0:0,0:0:0:0: +13,228,76743,6,0,B|96:223|96:223|131:234|131:234|198:229,1,187,2|8,0:0|0:0,0:0:0:0: +324,152,77089,2,0,B|257:157|257:157|222:146|222:146|139:151,1,187,2|2,0:0|0:0,0:0:0:0: +294,235,77435,2,0,L|388:228,1,93.5,8|0,0:0|0:0,0:0:0:0: +452,108,77666,5,2,0:0:0:0: +452,108,77781,1,8,0:0:0:0: +492,272,77897,1,10,0:0:0:0: +492,272,78012,1,8,0:0:0:0: +376,88,78127,2,0,P|404:44|488:40,1,140.25,8|0,0:0|0:0,0:0:0:0: +452,108,78358,2,0,L|301:120,1,140.25,2|0,0:0|0:0,0:0:0:0: +216,60,78589,6,0,P|232:132|144:216,1,187,6|8,0:0|0:0,0:0:0:0: +56,176,78935,2,0,P|40:104|128:20,1,187,2|2,0:0|0:0,0:0:0:0: +216,60,79281,2,0,L|223:153,1,93.5,8|0,0:0|0:0,0:0:0:0: +333,284,79512,5,2,0:0:0:0: +333,284,79627,2,0,L|317:82,1,187,2|2,0:0|0:0,0:0:0:0: +157,170,79974,2,0,P|175:203|256:211,1,93.5,2|0,0:0|0:0,0:0:0:0: +400,264,80204,2,0,P|382:231|301:223,1,93.5,8|0,0:0|0:0,0:0:0:0: +255,374,80435,6,0,L|447:359,1,187,2|8,0:0|0:0,0:0:0:0: +512,272,80781,2,0,L|320:287,1,187,2|2,0:0|0:0,0:0:0:0: +244,210,81127,2,0,L|337:203,1,93.5,8|0,0:0|0:0,0:0:0:0: +464,92,81358,5,2,0:0:0:0: +464,92,81474,2,0,P|484:152|420:272,1,187,2|2,0:0|0:0,0:0:0:0: +321,123,81820,2,0,L|310:23,1,93.5,2|0,0:0|0:0,0:0:0:0: +201,117,82051,2,0,L|215:256,1,140.25,8|0,0:0|0:0,0:0:0:0: +225,332,82281,6,0,P|153:348|53:272,1,187,2|8,0:0|0:0,0:0:0:0: +90,181,82627,2,0,P|162:165|262:241,1,187,2|2,0:0|0:0,0:0:0:0: +315,317,82974,2,0,L|441:307,1,93.5,8|0,0:0|0:0,0:0:0:0: +500,169,83204,5,2,0:0:0:0: +500,169,83320,2,0,L|306:184,1,187,2|2,0:0|0:0,0:0:0:0: +156,120,83666,2,0,P|140:68|152:24,1,93.5,2|0,0:0|0:0,0:0:0:0: +260,20,83897,2,0,P|276:72|264:116,1,93.5,8|0,0:0|0:0,0:0:0:0: +196,260,84127,6,0,L|10:240,1,187,2|8,0:0|0:0,0:0:0:0: +80,328,84474,2,0,L|265:347,1,187,2|2,0:0|0:0,0:0:0:0: +372,382,84820,2,0,P|386:339|425:314,1,93.5,8|0,0:0|0:0,0:0:0:0: +506,236,85051,2,0,P|461:246|420:225,1,93.5,2|0,0:0|0:0,0:0:0:0: +313,195,85281,2,0,P|344:228|346:274,1,93.5,8|0,0:0|0:0,0:0:0:0: +163,144,85512,6,0,L|14:135,1,140.25,2|0,0:0|0:0,0:0:0:0: +44,187,85743,2,0,L|171:194,1,93.5,8|0,0:0|0:0,0:0:0:0: +245,159,85974,2,0,P|232:96|199:67,1,93.5,2|0,0:0|0:0,0:0:0:0: +214,244,86204,2,0,L|404:225,1,187,8|2,0:0|0:0,0:0:0:0: +497,283,86551,1,0,0:0:0:0: +497,283,86666,2,0,P|436:302|409:354,1,93.5,8|0,0:0|0:0,0:0:0:0: +318,374,86897,6,0,L|328:163,1,187,2|8,0:0|0:0,0:0:0:0: +238,257,87243,1,0,0:0:0:0: +238,257,87358,2,0,L|248:46,1,187,2|8,0:0|0:0,0:0:0:0: +158,140,87704,1,2,0:0:0:0: +158,140,87820,6,0,L|163:34,1,93.5,2|0,0:0|0:0,0:0:0:0: +75,118,88051,2,0,L|70:223,1,93.5,8|0,0:0|0:0,0:0:0:0: +113,345,88281,5,0,0:0:0:0: +130,335,88339,1,0,0:0:0:0: +150,333,88397,1,0,0:0:0:0: +169,339,88454,1,0,0:0:0:0: +188,347,88512,5,10,0:0:0:0: +230,365,88570,1,2,0:0:0:0: +276,366,88628,1,10,0:0:0:0: +320,349,88686,1,2,0:0:0:0: +353,317,88743,6,0,L|362:113,1,187,6|8,0:0|0:0,0:0:0:0: +265,71,89089,1,0,0:0:0:0: +265,71,89204,2,0,P|216:122|257:235,1,187,2|8,0:0|0:0,0:0:0:0: +356,237,89551,1,0,0:0:0:0: +356,237,89666,6,0,L|472:227,1,93.5,2|0,0:0|0:0,0:0:0:0: +373,145,89897,2,0,L|222:158,1,140.25,8|0,0:0|0:0,0:0:0:0: +189,190,90127,2,0,L|282:181,1,93.5,2|0,0:0|0:0,0:0:0:0: +147,85,90358,2,0,L|24:95,1,93.5,8|0,0:0|0:0,0:0:0:0: +129,242,90589,6,0,P|186:269|266:193,1,187,2|8,0:0|0:0,0:0:0:0: +116,165,90935,2,0,P|64:200|89:308,1,187,2|2,0:0|0:0,0:0:0:0: +189,190,91281,2,0,P|190:140|162:101,1,93.5,8|0,0:0|0:0,0:0:0:0: +81,31,91512,2,0,L|174:23,1,93.5,2|0,0:0|0:0,0:0:0:0: +350,92,91743,2,0,L|257:100,1,93.5,8|0,0:0|0:0,0:0:0:0: +95,198,91974,2,0,L|188:190,1,93.5,2|0,0:0|0:0,0:0:0:0: +377,205,92204,1,2,0:0:0:0: +365,240,92262,1,2,0:0:0:0: +355,276,92320,1,2,0:0:0:0: +345,311,92377,1,2,0:0:0:0: +334,347,92435,6,0,P|264:294|292:211,1,187,2|8,0:0|0:0,0:0:0:0: +392,153,92781,1,0,0:0:0:0: +392,153,92897,2,0,P|420:70|350:17,1,187,2|8,0:0|0:0,0:0:0:0: +256,79,93243,1,0,0:0:0:0: +256,79,93358,6,0,L|263:195,1,93.5,2|0,0:0|0:0,0:0:0:0: +152,304,93589,2,0,L|142:141,1,140.25,8|0,0:0|0:0,0:0:0:0: +154,109,93820,2,0,P|122:142|78:155,1,93.5,2|0,0:0|0:0,0:0:0:0: +0,62,94051,2,0,P|31:28|75:15,1,93.5,8|0,0:0|0:0,0:0:0:0: +256,79,94281,6,0,L|267:265,1,187,2|8,0:0|0:0,0:0:0:0: +198,354,94627,1,0,0:0:0:0: +198,354,94743,2,0,P|286:378|361:327,1,187,2|8,0:0|0:0,0:0:0:0: +407,224,95089,1,0,0:0:0:0: +407,224,95204,6,0,L|247:211,1,140.25,2|0,0:0|0:0,0:0:0:0: +218,184,95435,2,0,L|330:193,1,93.5,8|0,0:0|0:0,0:0:0:0: +401,124,95666,2,0,P|410:77|383:30,1,93.5,2|0,0:0|0:0,0:0:0:0: +300,104,95897,2,0,P|291:149|311:191,1,93.5,8|0,0:0|0:0,0:0:0:0: +420,317,96127,6,0,P|334:293|273:358,1,187,2|8,0:0|0:0,0:0:0:0: +159,359,96474,1,0,0:0:0:0: +159,359,96589,2,0,P|73:382|12:317,1,187,2|8,0:0|0:0,0:0:0:0: +78,186,96935,1,0,0:0:0:0: +174,245,97051,6,0,L|195:51,1,187,2|8,0:0|0:0,0:0:0:0: +300,104,97397,1,0,0:0:0:0: +300,104,97512,2,0,B|309:153|309:153|287:195,1,93.5,2|0,0:0|0:0,0:0:0:0: +185,332,97743,2,0,B|164:293|164:293|173:244,1,93.5,8|0,0:0|0:0,0:0:0:0: +450,270,97974,6,0,L|259:281,1,187,2|8,0:0|0:0,0:0:0:0: +218,184,98320,1,0,0:0:0:0: +218,184,98435,2,0,L|409:173,1,187,2|8,0:0|0:0,0:0:0:0: +509,216,98781,1,0,0:0:0:0: +509,216,98897,6,0,B|477:120|541:136|509:24,1,187,2|8,0:0|0:0,0:0:0:0: +402,4,99243,1,0,0:0:0:0: +207,91,99358,2,0,L|217:183,1,93.5,2|0,0:0|0:0,0:0:0:0: +364,222,99589,2,0,L|353:129,1,93.5,8|0,0:0|0:0,0:0:0:0: +300,359,99820,5,2,0:0:0:0: +391,372,99935,1,0,0:0:0:0: +432,287,100051,1,8,0:0:0:0: +364,222,100166,1,0,0:0:0:0: +282,268,100281,1,2,0:0:0:0: +200,314,100397,1,0,0:0:0:0: +132,249,100512,1,8,0:0:0:0: +173,164,100628,1,0,0:0:0:0: +264,177,100743,6,0,L|248:73,1,93.5,2|0,0:0|0:0,0:0:0:0: +158,71,100974,2,0,L|173:164,1,93.5,8|0,0:0|0:0,0:0:0:0: +146,341,101204,2,0,L|130:237,1,93.5,2|0,0:0|0:0,0:0:0:0: +40,235,101435,2,0,L|54:327,1,93.5,8|0,0:0|0:0,0:0:0:0: +146,341,101666,6,0,P|214:349|234:329,1,93.5,2|0,0:0|0:0,0:0:0:0: +321,224,101897,2,0,P|253:216|233:236,1,93.5,8|0,0:0|0:0,0:0:0:0: +325,317,102127,1,2,0:0:0:0: +353,129,102243,1,2,0:0:0:0: +345,116,102300,1,2,0:0:0:0: +351,104,102358,1,2,0:0:0:0: +340,93,102416,1,2,0:0:0:0: +342,79,102474,1,2,0:0:0:0: +333,68,102531,1,2,0:0:0:0: +322,58,102589,5,10,0:0:0:0: +360,78,102646,1,2,0:0:0:0: +404,81,102704,1,2,0:0:0:0: +446,65,102762,1,2,0:0:0:0: +477,34,102819,1,2,0:0:0:0: +232,124,102935,2,0,L|173:109,1,46.75,2|0,0:0|0:0,0:0:0:0: +256,114,103051,5,2,0:0:0:0: +249,146,103108,1,2,0:0:0:0: +271,173,103166,1,10,0:0:0:0: +255,200,103224,1,2,0:0:0:0: +271,229,103281,1,2,0:0:0:0: +294,258,103339,1,2,0:0:0:0: +277,283,103397,1,2,0:0:0:0: +291,312,103454,1,2,0:0:0:0: +285,344,103512,6,0,P|370:322|476:316,1,187,6|8,0:0|0:0,0:0:0:0: +495,206,103858,1,0,0:0:0:0: +495,206,103974,2,0,P|456:129|349:137,1,187,2|8,0:0|0:0,0:0:0:0: +272,191,104320,1,0,0:0:0:0: +272,191,104435,6,0,L|280:61,1,93.5,2|0,0:0|0:0,0:0:0:0: +362,23,104666,2,0,P|287:75|188:64,1,187,8|2,0:0|0:0,0:0:0:0: +108,121,105012,1,0,0:0:0:0: +97,10,105127,1,8,0:0:0:0: +195,67,105243,1,8,0:0:0:0: +195,67,105301,1,8,0:0:0:0: +195,67,105358,6,0,P|211:139|111:224,1,187,2|8,0:0|0:0,0:0:0:0: +33,192,105704,1,0,0:0:0:0: +33,192,105820,2,0,L|41:292,1,93.5,2|0,0:0|0:0,0:0:0:0: +149,312,106051,2,0,L|141:218,1,93.5,8|0,0:0|0:0,0:0:0:0: +239,165,106281,6,0,P|272:198|279:244,1,93.5,2|0,0:0|0:0,0:0:0:0: +255,354,106512,2,0,L|351:344,1,93.5,8|0,0:0|0:0,0:0:0:0: +460,337,106743,2,0,P|399:276|386:191,1,140.25,2|0,0:0|0:0,0:0:0:0: +385,226,106974,2,0,L|481:216,1,93.5,8|0,0:0|0:0,0:0:0:0: +391,72,107204,6,0,L|204:91,1,187,2|8,0:0|0:0,0:0:0:0: +126,7,107551,1,0,0:0:0:0: +126,7,107666,2,0,P|95:51|127:179,1,187,2|8,0:0|0:0,0:0:0:0: +233,165,108012,1,0,0:0:0:0: +233,165,108127,6,0,L|219:270,1,93.5,2|0,0:0|0:0,0:0:0:0: +145,342,108358,2,0,P|217:288|336:317,1,187,8|2,0:0|0:0,0:0:0:0: +414,258,108704,1,0,0:0:0:0: +394,369,108820,1,8,0:0:0:0: +309,298,108935,1,0,0:0:0:0: +309,298,108993,1,0,0:0:0:0: +309,298,109051,6,0,L|301:103,1,187,2|8,0:0|0:0,0:0:0:0: +396,51,109397,1,0,0:0:0:0: +396,51,109512,2,0,P|427:108|408:160,1,93.5,2|0,0:0|0:0,0:0:0:0: +385,240,109743,2,0,L|491:230,1,93.5,8|0,0:0|0:0,0:0:0:0: +445,339,109974,6,0,L|339:349,1,93.5,2|0,0:0|0:0,0:0:0:0: +264,278,110204,2,0,P|250:233|260:188,1,93.5,8|0,0:0|0:0,0:0:0:0: +150,164,110435,2,0,P|130:227|164:322,1,140.25,2|0,0:0|0:0,0:0:0:0: +147,298,110666,2,0,P|101:287|57:301,1,93.5,8|0,0:0|0:0,0:0:0:0: +214,357,110897,6,0,L|400:339,1,187,2|8,0:0|0:0,0:0:0:0: +451,239,111243,1,0,0:0:0:0: +451,239,111358,2,0,L|264:256,1,187,2|8,0:0|0:0,0:0:0:0: +314,155,111704,1,0,0:0:0:0: +314,155,111820,6,0,L|407:146,1,93.5,2|0,0:0|0:0,0:0:0:0: +486,65,112051,2,0,P|443:147|450:238,1,187,8|2,0:0|0:0,0:0:0:0: +499,340,112397,1,0,0:0:0:0: +390,312,112512,1,8,0:0:0:0: +288,358,112627,1,0,0:0:0:0: +288,358,112685,1,0,0:0:0:0: +288,358,112743,6,0,L|100:344,1,187,2|8,0:0|0:0,0:0:0:0: +30,256,113089,1,0,0:0:0:0: +30,256,113204,2,0,L|218:270,1,187,2|8,0:0|0:0,0:0:0:0: +308,202,113551,1,0,0:0:0:0: +308,202,113666,6,0,P|322:134|256:43,1,187,2|8,0:0|0:0,0:0:0:0: +211,146,114012,1,0,0:0:0:0: +211,146,114127,2,0,L|221:312,1,140.25,2|0,0:0|0:0,0:0:0:0: +219,285,114358,2,0,P|262:271|306:285,1,93.5,8|0,0:0|0:0,0:0:0:0: +166,367,114589,6,0,B|94:317|105:208|187:178|256:192|256:192|325:205|407:176|418:67|346:17,1,561,2|8,0:0|0:0,0:0:0:0: +292,98,115512,1,2,0:0:0:0: +346,367,116435,6,0,B|418:317|407:208|325:178|256:192|256:192|187:205|105:176|94:67|166:17,1,561,2|8,0:0|0:0,0:0:0:0: +219,98,117358,1,2,0:0:0:0: +292,285,117589,1,8,0:0:0:0: +438,147,117820,1,2,0:0:0:0: +219,98,118051,2,0,L|88:91,1,93.5,8|0,0:0|0:0,0:0:0:0: +10,235,118281,6,0,P|-9:192|1:144,1,93.5,2|2,0:0|0:0,0:0:0:0: +154,279,118512,2,0,P|173:322|163:369,1,93.5,8|0,0:0|0:0,0:0:0:0: +3,339,118743,1,8,0:0:0:0: +219,215,118858,2,0,P|224:170|244:-10,1,187,8|2,0:0|0:0,0:0:0:0: +114,85,119204,5,2,0:0:0:0: +145,112,119262,1,2,0:0:0:0: +151,155,119319,1,2,0:0:0:0: +134,195,119377,1,2,0:0:0:0: +102,223,119434,1,2,0:0:0:0: +84,265,119493,1,2,0:0:0:0: +80,305,119551,1,2,0:0:0:0: +101,342,119608,1,2,0:0:0:0: +135,372,119666,5,2,0:0:0:0: +190,375,119723,1,2,0:0:0:0: +230,335,119781,1,2,0:0:0:0: +280,309,119839,1,2,0:0:0:0: +336,310,119897,1,2,0:0:0:0: +377,346,119954,1,2,0:0:0:0: +425,374,120012,1,2,0:0:0:0: +475,348,120070,1,2,0:0:0:0: +495,297,120127,6,0,P|500:240|514:98,1,187,6|8,0:0|0:0,0:0:0:0: +351,20,120474,2,0,P|345:76|332:219,1,187,2|2,0:0|0:0,0:0:0:0: +415,362,120820,2,0,B|458:378|458:378|508:361,1,93.5,8|0,0:0|0:0,0:0:0:0: +407,268,121051,5,2,0:0:0:0: +332,321,121166,2,0,L|145:308,1,187,2|2,0:0|0:0,0:0:0:0: +213,192,121512,2,0,P|219:146|197:105,1,93.5,2|0,0:0|0:0,0:0:0:0: +47,283,121743,2,0,P|41:329|63:370,1,93.5,8|0,0:0|0:0,0:0:0:0: +213,192,121974,6,0,L|27:180,1,187,2|8,0:0|0:0,0:0:0:0: +146,308,122320,2,0,L|332:321,1,187,2|2,0:0|0:0,0:0:0:0: +226,107,122666,2,0,P|203:147|214:191,1,93.5,8|0,0:0|0:0,0:0:0:0: +83,365,122897,5,2,0:0:0:0: +31,289,123012,2,0,P|24:211|14:102,1,187,2|2,0:0|0:0,0:0:0:0: +214,192,123358,2,0,P|174:214|128:208,1,93.5,2|0,0:0|0:0,0:0:0:0: +303,114,123589,2,0,P|342:91|388:97,1,93.5,8|0,0:0|0:0,0:0:0:0: +498,293,123820,6,0,L|306:281,1,187,2|8,0:0|0:0,0:0:0:0: +214,192,124166,2,0,L|406:204,1,187,2|2,0:0|0:0,0:0:0:0: +278,344,124512,2,0,P|245:309|242:263,1,93.5,8|0,0:0|0:0,0:0:0:0: +408,48,124743,5,2,0:0:0:0: +327,94,124858,2,0,L|311:281,1,187,2|2,0:0|0:0,0:0:0:0: +214,192,125204,2,0,P|154:196|114:171,1,93.5,2|0,0:0|0:0,0:0:0:0: +60,84,125435,2,0,P|120:80|160:105,1,93.5,8|0,0:0|0:0,0:0:0:0: +110,374,125666,5,10,0:0:0:0: +10,209,125781,1,8,0:0:0:0: +184,284,125897,1,8,0:0:0:0: +0,326,126012,1,8,0:0:0:0: +125,181,126127,2,0,B|202:169|224:229|319:212,1,187,2|0,1:0|0:0,0:0:0:0: +398,154,126474,1,0,0:0:0:0: +398,154,126589,6,0,P|346:110|352:43,1,140.25,2|0,0:0|0:0,0:0:0:0: +413,83,126820,2,0,B|419:162|419:162|406:195|406:195|413:267,1,187,2|2,1:0|0:0,0:0:0:0: +367,346,127166,1,0,0:0:0:0: +275,323,127281,1,8,0:0:0:0: +195,372,127397,1,0,0:0:0:0: +195,372,127454,1,0,0:0:0:0: +195,372,127512,6,0,P|190:282|262:228,1,187,6|8,0:0|0:0,0:0:0:0: +330,85,127858,2,0,P|334:174|262:228,1,187,2|2,0:0|0:0,0:0:0:0: +157,129,128204,2,0,L|251:135,1,93.5,8|0,0:0|0:0,0:0:0:0: +456,206,128435,5,2,0:0:0:0: +394,273,128551,2,0,L|188:261,1,187,2|2,0:0|0:0,0:0:0:0: +298,358,128897,2,0,P|341:372|387:364,1,93.5,2|0,0:0|0:0,0:0:0:0: +303,177,129127,2,0,P|259:162|213:170,1,93.5,8|0,0:0|0:0,0:0:0:0: +20,270,129358,6,0,L|206:262,1,187,2|8,0:0|0:0,0:0:0:0: +303,177,129704,2,0,L|117:185,1,187,2|2,0:0|0:0,0:0:0:0: +22,90,130051,2,0,P|82:85|120:118,1,93.5,8|0,0:0|0:0,0:0:0:0: +206,261,130281,5,2,0:0:0:0: +128,351,130397,2,0,P|86:271|116:185,1,187,2|2,0:0|0:0,0:0:0:0: +206,261,130743,2,0,L|225:365,1,93.5,2|0,0:0|0:0,0:0:0:0: +320,268,130974,2,0,L|300:163,1,93.5,8|0,0:0|0:0,0:0:0:0: +236,21,131204,6,0,P|189:99|223:182,1,187,2|8,0:0|0:0,0:0:0:0: +368,330,131551,2,0,P|414:252|380:169,1,187,2|2,0:0|0:0,0:0:0:0: +285,84,131897,2,8,L|302:175,1,93.5,8|0,0:0|0:0,0:0:0:0: +256,337,132127,5,2,0:0:0:0: +167,301,132243,2,0,P|234:242|320:268,1,187,2|2,0:0|0:0,0:0:0:0: +104,372,132589,2,0,P|57:369|10:367,1,93.5,2|0,0:0|0:0,0:0:0:0: +155,245,132820,2,0,P|201:242|248:240,1,93.5,8|0,0:0|0:0,0:0:0:0: +376,268,133051,5,2,0:0:0:0: +363,249,133108,1,2,0:0:0:0: +356,228,133166,1,2,0:0:0:0: +355,206,133224,1,2,0:0:0:0: +360,184,133281,1,10,0:0:0:0: +372,165,133339,1,2,0:0:0:0: +388,150,133397,1,10,0:0:0:0: +408,140,133454,1,2,0:0:0:0: +431,136,133512,1,2,1:0:0:0: +433,216,133743,1,8,0:0:0:0: +433,216,133858,1,8,0:0:0:0: +500,268,133973,5,2,0:0:0:0: +495,296,134031,1,2,0:0:0:0: +490,324,134088,1,2,0:0:0:0: +485,352,134146,1,2,0:0:0:0: +480,380,134204,2,0,B|334:389|359:290|190:308,1,280.5,2|0,1:0|0:0,0:0:0:0: +213,83,134666,2,0,P|238:121|235:167,1,93.5,8|0,0:0|0:0,0:0:0:0: +109,244,134897,6,0,L|-10:240,1,93.5,4|0,0:0|0:0,0:0:0:0: +236,167,135127,2,0,L|329:170,1,93.5,8|0,0:0|0:0,0:0:0:0: +208,383,135358,2,0,L|21:376,1,187,2|8,0:0|0:0,0:0:0:0: +297,282,135704,2,0,L|203:278,1,93.5,0|2,0:0|0:0,0:0:0:0: +147,80,135935,6,0,L|240:83,1,93.5,0|8,0:0|0:0,0:0:0:0: +397,51,136166,2,0,L|347:130,1,93.5,0|2,0:0|0:0,0:0:0:0: +297,282,136397,2,0,L|253:199,1,93.5,0|8,0:0|0:0,0:0:0:0: +397,51,136627,1,0,0:0:0:0: +502,166,136743,6,0,L|409:169,1,93.5,2|0,0:0|0:0,0:0:0:0: +297,282,136974,2,0,L|390:285,1,93.5,8|0,0:0|0:0,0:0:0:0: +296,151,137204,6,0,L|203:154,1,93.5,2|0,0:0|0:0,0:0:0:0: +89,242,137435,2,0,L|182:245,1,93.5,8|0,0:0|0:0,0:0:0:0: +220,337,137666,6,0,L|-2:329,1,187,2|8,0:0|0:0,0:0:0:0: +202,154,138012,2,0,L|424:161,1,187,2|2,0:0|0:0,0:0:0:0: +338,61,138358,2,0,L|244:57,1,93.5,8|0,0:0|0:0,0:0:0:0: +431,315,138589,6,0,B|460:189|460:189|452:223|480:258,1,187,2|8,0:0|0:0,0:0:0:0: +507,343,138935,1,0,0:0:0:0: +507,343,139051,2,0,B|416:313|411:386|300:358,1,187,2|8,0:0|0:0,0:0:0:0: +177,244,139397,1,0,0:0:0:0: +177,244,139512,6,0,B|268:214|273:287|384:259,1,187,2|8,0:0|0:0,0:0:0:0: +424,173,139858,1,0,0:0:0:0: +339,99,139974,2,0,L|328:-1,1,93.5,2|2,0:0|0:0,0:0:0:0: +177,244,140204,2,0,L|167:151,1,93.5,8|0,0:0|0:0,0:0:0:0: +248,95,140435,6,0,L|257:187,1,93.5,2|0,0:0|0:0,0:0:0:0: +96,300,140666,2,0,L|86:207,1,93.5,8|0,0:0|0:0,0:0:0:0: +167,151,140897,6,0,L|177:244,1,93.5,2|0,0:0|0:0,0:0:0:0: +355,315,141127,2,0,L|346:222,1,93.5,8|0,0:0|0:0,0:0:0:0: +263,380,141358,6,0,P|317:344|444:352,1,187,2|8,0:0|0:0,0:0:0:0: +177,244,141704,1,0,0:0:0:0: +177,244,141820,2,0,P|123:280|-4:272,1,187,2|8,0:0|0:0,0:0:0:0: +0,182,142166,1,0,0:0:0:0: +176,58,142281,6,0,L|167:151,1,93.5,2|0,0:0|0:0,0:0:0:0: +345,221,142512,2,0,L|355:129,1,93.5,8|0,0:0|0:0,0:0:0:0: +257,188,142743,6,0,L|248:281,1,93.5,2|0,0:0|0:0,0:0:0:0: +426,351,142974,2,0,L|435:258,1,93.5,8|0,0:0|0:0,0:0:0:0: +203,348,143204,6,0,P|239:361|326:297,1,140.25,2|0,0:0|0:0,0:0:0:0: +435,258,143435,6,0,P|398:267|316:196,1,126.224996147919,8|0,0:0|0:0,0:0:0:0: +257,188,143666,6,0,P|292:194|361:121,1,112.2,2|0,0:0|0:0,0:0:0:0: +419,136,143897,6,0,P|388:138|333:70,1,98.1749970039369,8|0,0:0|0:0,0:0:0:0: +257,188,144127,6,0,L|275:1,1,187,2|8,0:0|0:0,0:0:0:0: +435,258,144474,1,0,0:0:0:0: +435,258,144589,2,0,L|453:71,1,187,2|8,0:0|0:0,0:0:0:0: +149,337,144935,1,0,0:0:0:0: +149,337,145051,6,0,L|159:232,1,93.5,2|0,0:0|0:0,0:0:0:0: +353,153,145281,2,0,L|342:257,1,93.5,8|0,0:0|0:0,0:0:0:0: +169,318,145512,6,0,L|181:199,1,93.5,2|0,0:0|0:0,0:0:0:0: +332,171,145742,2,0,L|319:300,1,93.5,8|0,0:0|0:0,0:0:0:0: +95,131,145974,6,0,L|104:28,1,93.5,2|0,0:0|0:0,0:0:0:0: +247,76,146204,2,0,L|237:169,1,93.5,8|0,0:0|0:0,0:0:0:0: +166,150,146435,2,0,L|176:57,1,93.5,2|0,0:0|0:0,0:0:0:0: +318,95,146666,2,0,L|308:188,1,93.5,8|0,0:0|0:0,0:0:0:0: +475,319,146897,6,0,L|465:216,1,93.5,2|0,0:0|0:0,0:0:0:0: +322,263,147127,2,0,L|332:357,1,93.5,8|0,0:0|0:0,0:0:0:0: +403,338,147358,2,0,L|394:245,1,93.5,2|0,0:0|0:0,0:0:0:0: +252,283,147589,2,0,L|261:376,1,93.5,8|0,0:0|0:0,0:0:0:0: +38,368,147820,6,0,L|140:358,1,93.5,2|0,0:0|0:0,0:0:0:0: +93,215,148050,2,0,L|-1:224,1,93.5,8|0,0:0|0:0,0:0:0:0: +247,203,148281,1,2,0:0:0:0: +186,101,148397,1,8,0:0:0:0: +365,200,148512,1,8,0:0:0:0: +189,304,148627,1,8,0:0:0:0: +237,20,148743,5,2,0:0:0:0: +95,132,148858,1,2,0:0:0:0: +95,132,148916,1,2,0:0:0:0: +95,132,148974,1,10,0:0:0:0: +276,126,149089,1,0,0:0:0:0: +125,24,149204,5,2,0:0:0:0: +189,196,149320,1,8,0:0:0:0: +361,132,149435,1,8,0:0:0:0: +425,304,149551,1,8,0:0:0:0: +330,357,149666,6,0,P|240:297|79:327,1,280.5,6|0,0:0|0:0,0:0:0:0: +237,168,150589,2,0,P|327:108|488:138,1,280.5,2|0,0:0|0:0,0:0:0:0: +401,288,151512,2,0,L|122:257,1,280.5,2|0,0:0|0:0,0:0:0:0: +44,309,152320,1,8,0:0:0:0: +44,309,152377,1,8,0:0:0:0: +44,309,152435,5,10,0:0:0:0: +44,197,152551,1,2,0:0:0:0: +151,162,152666,1,8,0:0:0:0: +216,253,152781,1,2,0:0:0:0: +281,344,152897,1,2,0:0:0:0: +388,309,153012,1,2,0:0:0:0: +388,197,153128,1,8,0:0:0:0: +281,162,153243,1,2,0:0:0:0: +216,253,153358,6,0,L|503:229,1,280.5,6|0,0:0|0:0,0:0:0:0: +296,131,154281,2,0,L|9:155,1,280.5,2|0,0:0|0:0,0:0:0:0: +148,338,155204,2,0,L|428:315,1,280.5,2|0,0:0|0:0,0:0:0:0: +492,225,156127,5,10,0:0:0:0: +492,225,156185,1,8,0:0:0:0: +492,225,156243,1,8,0:0:0:0: +320,168,156358,1,8,0:0:0:0: +427,315,156474,1,8,0:0:0:0: +427,315,156531,1,8,0:0:0:0: +427,315,156589,1,10,0:0:0:0: +427,133,156704,1,8,0:0:0:0: +320,280,156820,1,10,0:0:0:0: +492,225,156935,1,8,0:0:0:0: +320,280,157051,6,0,B|194:258|174:358|44:320,1,280.5,6|0,0:0|0:0,0:0:0:0: +0,138,157974,2,0,P|88:81|186:211,1,280.5,2|0,0:0|0:0,0:0:0:0: +281,344,158897,2,0,L|312:65,1,280.5,2|0,0:0|0:0,0:0:0:0: +419,30,159704,1,8,0:0:0:0: +419,30,159762,1,8,0:0:0:0: +419,30,159820,5,10,0:0:0:0: +484,121,159935,1,8,0:0:0:0: +419,212,160051,1,8,0:0:0:0: +312,177,160166,1,8,0:0:0:0: +312,65,160281,1,10,0:0:0:0: +205,30,160397,1,8,0:0:0:0: +140,121,160513,1,8,0:0:0:0: +206,210,160627,1,8,0:0:0:0: +312,65,160743,6,0,L|418:48,1,93.5,6|0,0:0|0:0,0:0:0:0: +484,121,160974,2,0,L|378:138,1,93.5,8|0,0:0|0:0,0:0:0:0: +206,210,161204,6,0,L|312:193,1,93.5,2|0,0:0|0:0,0:0:0:0: +378,266,161435,2,0,L|272:283,1,93.5,8|0,0:0|0:0,0:0:0:0: +44,197,161666,6,0,L|33:289,1,93.5,2|0,0:0|0:0,0:0:0:0: +116,362,161897,2,0,L|126:269,1,93.5,8|0,0:0|0:0,0:0:0:0: +216,117,162127,6,0,L|205:209,1,93.5,2|0,0:0|0:0,0:0:0:0: +288,282,162358,2,0,L|298:189,1,93.5,8|0,0:0|0:0,0:0:0:0: +388,124,162589,6,0,P|436:122|482:167,1,93.5,2|0,0:0|0:0,0:0:0:0: +494,219,162820,2,0,P|446:221|400:176,1,93.5,8|0,0:0|0:0,0:0:0:0: +496,64,163051,2,0,P|498:110|472:148,1,93.5,2|0,0:0|0:0,0:0:0:0: +386,278,163281,2,0,P|383:232|410:194,1,93.5,8|0,0:0|0:0,0:0:0:0: +511,346,163512,6,0,L|397:359,1,93.5,2|0,0:0|0:0,0:0:0:0: +195,271,163743,2,0,L|287:281,1,93.5,8|0,0:0|0:0,0:0:0:0: +410,194,163974,6,0,L|296:207,1,93.5,2|0,0:0|0:0,0:0:0:0: +94,119,164205,2,0,L|186:129,1,93.5,8|0,0:0|0:0,0:0:0:0: +440,44,164435,6,0,P|407:76|401:122,1,93.5,2|0,0:0|0:0,0:0:0:0: +458,266,164666,2,0,P|445:221|409:193,1,93.5,8|0,0:0|0:0,0:0:0:0: +255,171,164897,2,0,P|299:182|342:164,1,93.5,2|0,0:0|0:0,0:0:0:0: +508,108,165127,1,8,0:0:0:0: +494,219,165243,1,8,0:0:0:0: +494,219,165301,1,8,0:0:0:0: +494,219,165358,6,0,L|482:321,1,93.5,2|0,0:0|0:0,0:0:0:0: +341,164,165589,1,10,0:0:0:0: +341,164,165704,1,2,0:0:0:0: +306,264,165820,5,10,0:0:0:0: +271,234,165877,1,10,0:0:0:0: +225,232,165935,1,2,0:0:0:0: +188,258,165993,1,2,0:0:0:0: +176,303,166050,1,10,0:0:0:0: +164,348,166108,1,10,0:0:0:0: +127,374,166166,1,10,0:0:0:0: +81,372,166224,1,10,0:0:0:0: +46,343,166281,6,0,P|47:239|141:235,1,187,6|8,0:0|0:0,0:0:0:0: +225,232,166627,1,0,0:0:0:0: +225,232,166743,2,0,L|257:25,1,187,2|8,0:0|0:0,0:0:0:0: +150,1,167089,1,0,0:0:0:0: +150,1,167204,6,0,P|137:59|160:95,1,93.5,2|0,0:0|0:0,0:0:0:0: +235,165,167435,2,0,L|379:150,1,140.25,8|0,0:0|0:0,0:0:0:0: +426,172,167666,2,0,L|311:183,1,93.5,2|0,0:0|0:0,0:0:0:0: +223,301,167897,2,0,L|337:289,1,93.5,8|0,0:0|0:0,0:0:0:0: +476,116,168127,6,0,P|416:98|365:216,1,187,2|8,0:0|0:0,0:0:0:0: +425,314,168474,2,0,P|470:271|393:167,1,187,2|2,0:0|0:0,0:0:0:0: +280,170,168820,2,0,P|286:218|342:259,1,93.5,8|0,0:0|0:0,0:0:0:0: +352,356,169051,6,0,L|239:341,1,93.5,2|0,0:0|0:0,0:0:0:0: +122,225,169281,2,0,L|215:238,1,93.5,8|0,0:0|0:0,0:0:0:0: +425,171,169512,2,0,L|332:158,1,93.5,2|0,0:0|0:0,0:0:0:0: +200,91,169743,1,10,0:0:0:0: +203,126,169800,1,2,0:0:0:0: +206,163,169858,1,2,0:0:0:0: +211,201,169916,1,2,0:0:0:0: +215,238,169974,6,0,P|173:305|43:277,1,187,2|8,0:0|0:0,0:0:0:0: +29,212,170320,1,0,0:0:0:0: +29,212,170435,2,0,L|57:7,1,187,2|8,0:0|0:0,0:0:0:0: +127,111,170781,1,0,0:0:0:0: +127,111,170897,6,0,P|172:147|220:138,1,93.5,2|0,0:0|0:0,0:0:0:0: +389,111,171127,2,0,P|315:119|279:171,1,140.25,8|0,0:0|0:0,0:0:0:0: +264,184,171358,2,0,P|268:220|279:296,1,93.5,2|0,0:0|0:0,0:0:0:0: +470,358,171589,2,0,P|465:321|455:246,1,93.5,8|0,0:0|0:0,0:0:0:0: +508,108,171820,6,0,B|432:101|432:101|411:107|411:107|316:99,1,187,2|8,0:0|0:0,0:0:0:0: +214,201,172166,1,0,0:0:0:0: +214,201,172281,2,0,B|289:207|289:207|310:201|310:201|405:209,1,187,2|8,0:0|0:0,0:0:0:0: +223,301,172628,1,0,0:0:0:0: +223,301,172743,2,0,L|83:288,1,140.25,2|0,0:0|0:0,0:0:0:0: +59,302,172974,2,0,L|152:310,1,93.5,8|0,0:0|0:0,0:0:0:0: +329,295,173204,2,0,P|332:355|307:389,1,93.5,2|0,0:0|0:0,0:0:0:0: +264,186,173435,2,0,P|261:126|286:92,1,93.5,8|0,0:0|0:0,0:0:0:0: +170,178,173666,6,0,B|75:177|99:249|4:249,1,187,2|8,0:0|0:0,0:0:0:0: +203,99,174012,1,0,0:0:0:0: +203,99,174127,2,0,B|297:99|273:27|368:27,1,187,2|8,0:0|0:0,0:0:0:0: +484,72,174474,1,0,0:0:0:0: +484,72,174589,6,0,P|475:133|458:257,1,187,2|8,0:0|0:0,0:0:0:0: +361,315,174935,1,0,0:0:0:0: +361,315,175051,2,0,P|355:274|348:222,1,93.5,2|0,0:0|0:0,0:0:0:0: +249,292,175281,2,0,P|254:332|262:385,1,93.5,8|0,0:0|0:0,0:0:0:0: +398,152,175512,6,0,P|312:207|229:175,1,187,2|8,0:0|0:0,0:0:0:0: +164,280,175858,1,0,0:0:0:0: +164,280,175974,2,0,P|90:226|3:249,1,187,2|8,0:0|0:0,0:0:0:0: +237,182,176320,1,0,0:0:0:0: +237,182,176435,6,0,B|229:94|283:97|266:-7,1,187,2|8,0:0|0:0,0:0:0:0: +151,40,176781,1,0,0:0:0:0: +0,156,176897,2,0,L|93:149,1,93.5,2|0,0:0|0:0,0:0:0:0: +164,280,177127,2,0,L|62:286,1,93.5,8|0,0:0|0:0,0:0:0:0: +208,145,177358,5,6,0:0:0:0: +242,59,177474,1,0,0:0:0:0: +334,63,177589,1,8,0:0:0:0: +358,154,177704,1,0,0:0:0:0: +281,204,177820,1,2,0:0:0:0: +208,145,177935,1,0,0:0:0:0: +129,196,178051,1,8,0:0:0:0: +153,286,178166,1,0,0:0:0:0: +246,290,178281,6,0,L|235:384,1,93.5,2|0,0:0|0:0,0:0:0:0: +142,378,178512,2,0,L|153:286,1,93.5,8|0,0:0|0:0,0:0:0:0: +139,103,178743,2,0,L|128:197,1,93.5,2|0,0:0|0:0,0:0:0:0: +35,191,178974,2,0,L|45:98,1,93.5,8|0,0:0|0:0,0:0:0:0: +139,103,179204,6,0,P|186:128|228:120,1,93.5,2|0,0:0|0:0,0:0:0:0: +362,179,179435,2,0,P|316:174|277:198,1,93.5,8|0,0:0|0:0,0:0:0:0: +392,365,179666,5,2,0:0:0:0: +464,306,179781,1,8,0:0:0:0: +464,306,179839,1,8,0:0:0:0: +464,306,179897,1,8,0:0:0:0: +378,270,180012,1,8,0:0:0:0: +450,211,180127,5,2,0:0:0:0: +362,179,180243,1,8,0:0:0:0: +362,179,180301,1,8,0:0:0:0: +362,179,180358,2,0,L|257:164,1,93.5,8|0,0:0|0:0,0:0:0:0: +160,37,180589,5,2,0:0:0:0: +105,123,180704,1,8,0:0:0:0: +269,165,180820,1,8,0:0:0:0: +259,62,180935,1,8,0:0:0:0: +172,203,181051,6,0,P|205:334|201:384,1,187,6|8,0:0|0:0,0:0:0:0: +121,328,181397,1,0,0:0:0:0: +37,358,181512,2,0,P|4:227|8:177,1,187,2|8,0:0|0:0,0:0:0:0: +58,98,181858,1,0,0:0:0:0: +58,98,181974,6,0,P|104:96|150:106,1,93.5,2|0,0:0|0:0,0:0:0:0: +381,158,182204,2,0,P|334:191|224:165,1,140.25,8|0,0:0|0:0,0:0:0:0: +214,161,182435,2,0,L|223:260,1,93.5,2|0,0:0|0:0,0:0:0:0: +184,337,182666,1,8,0:0:0:0: +278,329,182781,6,0,B|383:304|353:370|477:341,1,187,2|2,0:0|0:0,0:0:0:0: +505,267,183127,2,0,P|488:184|474:75,1,187,8|2,0:0|0:0,0:0:0:0: +403,21,183474,2,0,P|382:61|397:133,1,93.5,0|8,0:0|0:0,0:0:0:0: +331,198,183704,1,0,0:0:0:0: +287,106,183820,6,0,P|225:59|118:89,1,187,2|8,0:0|0:0,0:0:0:0: +90,168,184166,1,0,0:0:0:0: +29,98,184281,2,0,P|36:44|36:0,1,93.5,2|0,0:0|0:0,0:0:0:0: +183,152,184512,2,0,P|176:206|176:250,1,93.5,8|0,0:0|0:0,0:0:0:0: +134,324,184743,6,0,P|183:295|325:315,1,187,2|8,0:0|0:0,0:0:0:0: +370,231,185089,1,0,0:0:0:0: +357,132,185204,2,0,P|308:161|166:141,1,187,2|8,0:0|0:0,0:0:0:0: +102,104,185551,1,0,0:0:0:0: +102,104,185666,6,0,L|89:-11,1,93.5,2|0,0:0|0:0,0:0:0:0: +103,202,185897,2,0,P|73:251|84:354,1,140.25,8|0,0:0|0:0,0:0:0:0: +101,371,186127,2,0,L|213:361,1,93.5,2|0,0:0|0:0,0:0:0:0: +281,384,186358,1,8,0:0:0:0: +254,295,186474,6,0,P|248:229|231:92,1,187,2|2,0:0|0:0,0:0:0:0: +274,29,186820,2,0,P|327:8|437:76,1,187,8|2,0:0|0:0,0:0:0:0: +509,130,187166,1,0,0:0:0:0: +422,165,187281,2,0,P|381:187|321:225,1,93.5,8|0,0:0|0:0,0:0:0:0: +268,273,187512,6,0,P|209:225|94:253,1,187,2|8,0:0|0:0,0:0:0:0: +25,205,187858,1,0,0:0:0:0: +36,296,187974,2,0,L|43:393,1,93.5,2|0,0:0|0:0,0:0:0:0: +95,151,188204,2,0,L|88:54,1,93.5,8|0,0:0|0:0,0:0:0:0: +164,6,188435,6,0,P|233:5|369:38,1,187,2|8,0:0|0:0,0:0:0:0: +438,57,188781,1,0,0:0:0:0: +367,123,188897,2,0,P|298:124|162:91,1,187,2|8,0:0|0:0,0:0:0:0: +95,151,189243,1,0,0:0:0:0: +95,151,189358,6,0,L|106:252,1,93.5,2|0,0:0|0:0,0:0:0:0: +54,321,189589,2,0,P|109:298|219:381,1,187,8|2,0:0|0:0,0:0:0:0: +285,305,189935,1,0,0:0:0:0: +370,338,190051,2,0,P|419:338|462:310,1,93.5,8|0,0:0|0:0,0:0:0:0: +497,235,190281,6,0,P|485:171|468:44,1,187,2|8,0:0|0:0,0:0:0:0: +387,10,190627,1,0,0:0:0:0: +387,10,190743,2,0,L|377:109,1,93.5,2|0,0:0|0:0,0:0:0:0: +294,258,190974,2,0,L|304:159,1,93.5,8|0,0:0|0:0,0:0:0:0: +291,73,191204,6,0,P|239:22|128:42,1,187,2|8,0:0|0:0,0:0:0:0: +110,126,191551,1,0,0:0:0:0: +161,202,191666,2,0,P|209:193|250:142,1,93.5,2|0,0:0|0:0,0:0:0:0: +133,37,191897,2,0,P|83:37|30:77,1,93.5,8|0,0:0|0:0,0:0:0:0: +13,160,192127,6,0,B|45:242|165:276|256:192|256:192|347:108|467:142|499:224,1,561,2|8,0:0|0:0,0:0:0:0: +373,263,193051,1,2,0:0:0:0: +13,224,193974,6,0,B|45:142|165:108|256:192|256:192|347:276|467:242|499:160,1,561,2|8,0:0|0:0,0:0:0:0: +373,121,194898,1,2,0:0:0:0: +139,263,195127,1,8,0:0:0:0: +343,342,195358,1,2,0:0:0:0: +373,121,195589,2,8,L|359:5,1,93.5 +232,190,195820,6,0,P|228:235|251:275,1,93.5,2|10,0:0|0:0,0:0:0:0: +447,186,196051,2,0,P|470:147|461:88,1,93.5,10|10,0:0|0:0,0:0:0:0: +327,213,196281,1,10,0:0:0:0: +512,262,196397,5,10,0:0:0:0: +496,271,196454,1,2,0:0:0:0: +483,284,196512,1,10,0:0:0:0: +472,299,196570,1,10,0:0:0:0: +463,316,196627,1,10,0:0:0:0: +456,335,196685,1,10,0:0:0:0: +452,358,196743,5,10,0:0:0:0: +426,322,196801,1,10,0:0:0:0: +390,303,196858,1,10,0:0:0:0: +347,295,196916,1,10,0:0:0:0: +303,298,196974,1,10,0:0:0:0: +269,319,197031,1,10,0:0:0:0: +240,350,197089,1,10,0:0:0:0: +199,361,197147,1,10,0:0:0:0: +151,345,197204,5,10,0:0:0:0: +112,305,197262,1,10,0:0:0:0: +104,251,197320,1,10,0:0:0:0: +127,202,197377,1,10,0:0:0:0: +172,171,197435,1,10,0:0:0:0: +226,173,197493,1,10,0:0:0:0: +267,207,197551,1,10,0:0:0:0: +319,215,197608,1,10,0:0:0:0: +364,185,197666,6,0,P|371:142|384:-12,1,187,6|8,0:0|0:0,0:0:0:0: +293,44,198012,1,0,0:0:0:0: +464,131,198127,2,0,P|457:174|444:328,1,187,2|8,0:0|0:0,0:0:0:0: +364,185,198473,1,0,0:0:0:0: +249,278,198589,6,0,P|198:265|118:255,1,93.5,2|0,0:0|0:0,0:0:0:0: +30,99,198820,1,8,0:0:0:0: +30,99,199051,2,0,P|76:91|121:79,1,93.5,2|0,0:0|0:0,0:0:0:0: +199,27,199281,1,8,0:0:0:0: +113,175,199396,1,0,0:0:0:0: +355,186,199512,6,0,P|284:122|191:131,1,187,2|8,0:0|0:0,0:0:0:0: +113,175,199858,1,0,0:0:0:0: +180,321,199974,2,0,P|188:279|192:191,1,93.5,2|0,0:0|0:0,0:0:0:0: +16,163,200204,2,0,P|8:205|4:293,1,93.5,8|0,0:0|0:0,0:0:0:0: +86,315,200435,5,2,0:0:0:0: +192,228,200551,1,0,0:0:0:0: +71,107,200666,2,0,B|57:79|57:79|74:12,1,93.5,8|0,0:0|0:0,0:0:0:0: +268,190,200897,2,0,B|282:218|282:218|265:285,1,93.5,2|0,0:0|0:0,0:0:0:0: +86,200,201127,2,0,L|187:185,1,93.5,8|0,0:0|0:0,0:0:0:0: +512,85,201358,6,0,P|428:94|348:27,1,187,2|8,0:0|0:0,0:0:0:0: +247,2,201704,1,0,0:0:0:0: +190,93,201820,2,0,P|185:138|171:219,1,93.5,2|0,0:0|0:0,0:0:0:0: +357,153,202051,2,0,P|364:198|384:277,1,93.5,8|0,0:0|0:0,0:0:0:0: +427,341,202281,5,2,0:0:0:0: +449,182,202397,1,0,0:0:0:0: +287,258,202512,2,0,L|190:278,1,93.5,8|0,0:0|0:0,0:0:0:0: +10,123,202743,2,0,B|78:138|78:138|103:170|103:170|182:186,1,187,2|8,0:0|0:0,0:0:0:0: +249,122,203089,1,0,0:0:0:0: +173,0,203204,6,0,P|165:46|162:92,1,93.5,2|0,0:0|0:0,0:0:0:0: +327,194,203435,2,0,P|334:147|337:101,1,93.5,8|0,0:0|0:0,0:0:0:0: +78,274,203666,2,0,P|159:213|264:257,1,187,2|8,0:0|0:0,0:0:0:0: +297,307,204012,1,0,0:0:0:0: +379,366,204127,6,0,P|387:315|390:269,1,93.5,2|0,0:0|0:0,0:0:0:0: +327,194,204358,1,8,0:0:0:0: +357,100,204474,1,0,0:0:0:0: +512,159,204589,6,0,L|420:176,1,93.5,2|0,0:0|0:0,0:0:0:0: +268,121,204820,1,8,0:0:0:0: +385,12,204935,1,0,0:0:0:0: +357,100,205051,6,0,L|160:75,1,187,2|8,0:0|0:0,0:0:0:0: +1,107,205397,1,0,0:0:0:0: +78,143,205512,2,0,B|94:114|94:114|74:32,1,93.5,2|0,0:0|0:0,0:0:0:0: +1,291,205743,2,0,B|-15:320|-15:320|5:402,1,93.5,8|0,0:0|0:0,0:0:0:0: +130,229,205974,6,0,L|7:215,1,93.5,2|0,0:0|0:0,0:0:0:0: +183,327,206204,1,8,0:0:0:0: +234,177,206320,1,0,0:0:0:0: +286,277,206435,2,0,P|374:289|468:223,1,187,2|8,0:0|0:0,0:0:0:0: +425,123,206781,1,0,0:0:0:0: +322,180,206897,6,0,P|224:170|135:140,1,187,2|8,0:0|0:0,0:0:0:0: +140,142,207358,2,0,P|150:195|154:258,1,93.5,2|0,0:0|0:0,0:0:0:0: +323,370,207589,2,0,P|313:317|309:254,1,93.5,8|0,0:0|0:0,0:0:0:0: +62,268,207820,6,0,P|127:324|222:300,1,187,2|8,0:0|0:0,0:0:0:0: +243,204,208166,1,0,0:0:0:0: +309,277,208281,2,0,P|365:282|426:290,1,93.5,2|0,0:0|0:0,0:0:0:0: +461,105,208512,2,0,P|404:99|344:92,1,93.5,8|0,0:0|0:0,0:0:0:0: +481,338,208743,6,0,P|492:262|383:195,2,187,2|8|2,0:0|0:0|0:0,0:0:0:0: +323,370,209320,1,0,0:0:0:0: +309,277,209435,6,0,L|289:153,1,93.5,8|0,0:0|0:0,0:0:0:0: +145,71,209666,2,0,L|262:115,1,93.5,2|0,0:0|0:0,0:0:0:0: +401,28,209897,2,0,L|303:107,1,93.5,8|0,0:0|0:0,0:0:0:0: +206,195,210127,5,2,0:0:0:0: +263,16,210243,1,0,0:0:0:0: +380,159,210358,1,8,0:0:0:0: +380,159,210589,6,0,P|333:151|288:141,1,93.5,2|0,0:0|0:0,0:0:0:0: +197,96,210820,1,8,0:0:0:0: +116,158,210935,1,0,0:0:0:0: +12,43,211051,6,0,P|58:50|103:60,1,93.5,2|0,0:0|0:0,0:0:0:0: +206,195,211281,1,8,0:0:0:0: +278,43,211397,1,0,0:0:0:0: +448,187,211512,6,0,P|357:198|287:140,1,187,2|8,0:0|0:0,0:0:0:0: +197,96,211858,1,0,0:0:0:0: +206,195,211974,5,10,0:0:0:0: +353,85,212089,1,0,0:0:0:0: +234,360,212204,1,8,0:0:0:0: +116,158,212320,1,8,0:0:0:0: +320,269,212435,6,0,P|392:256|515:238,1,187,6|8,0:0|0:0,0:0:0:0: +456,334,212781,1,0,0:0:0:0: +354,166,212897,2,0,P|282:179|159:197,1,187,2|8,0:0|0:0,0:0:0:0: +65,238,213243,1,0,0:0:0:0: +129,370,213358,6,0,P|139:303|154:247,1,93.5,2|0,0:0|0:0,0:0:0:0: +81,67,213589,1,8,0:0:0:0: +81,67,213820,2,0,P|90:112|96:159,1,93.5,2|0,0:0|0:0,0:0:0:0: +60,324,214051,1,8,0:0:0:0: +224,263,214166,1,0,0:0:0:0: +65,238,214281,6,0,L|-38:229,1,93.5,2|0,0:0|0:0,0:0:0:0: +130,367,214512,1,8,0:0:0:0: +304,314,214628,1,0,0:0:0:0: +224,263,214743,2,0,B|206:293|206:293|221:349,1,93.5,2|0,0:0|0:0,0:0:0:0: +366,147,214974,2,0,B|384:117|384:117|368:60,1,93.5,8|0,0:0|0:0,0:0:0:0: +204,176,215204,5,2,0:0:0:0: +361,243,215320,1,0,0:0:0:0: +294,103,215435,2,0,L|287:201,1,93.5,8|0,0:0|0:0,0:0:0:0: +50,91,215666,2,0,P|102:47|225:55,1,187,2|8,0:0|0:0,0:0:0:0: +432,36,216012,5,8,0:0:0:0: +432,36,216070,1,8,0:0:0:0: +432,36,216127,2,0,P|383:29|310:9,1,93.5,2|0,0:0|0:0,0:0:0:0: +393,222,216358,2,0,P|426:189|462:159,1,93.5,8|0,0:0|0:0,0:0:0:0: +295,134,216589,2,0,P|218:137|115:203,1,187,2|8,0:0|0:0,0:0:0:0: +48,248,216935,1,0,0:0:0:0: +18,62,217051,6,0,L|41:158,1,93.5,2|0,0:0|0:0,0:0:0:0: +131,296,217281,2,0,B|143:228|143:228|125:193|125:193|141:100,1,187,8|2,0:0|0:0,0:0:0:0: +279,110,217627,2,0,L|216:186,1,93.5,0|8,0:0|0:0,0:0:0:0: +131,296,217858,1,0,0:0:0:0: +194,368,217974,6,0,P|223:323|219:266,1,93.5,2|0,0:0|0:0,0:0:0:0: +48,248,218204,2,0,P|35:292|46:337,1,93.5,8|0,0:0|0:0,0:0:0:0: +274,225,218435,6,0,L|299:115,1,93.5,2|0,0:0|0:0,0:0:0:0: +2,80,218666,2,0,L|22:171,1,93.5,8|0,0:0|0:0,0:0:0:0: +254,53,218897,6,0,P|224:17|104:42,1,140.25,2|0,0:0|0:0,0:0:0:0: +195,199,219127,6,0,P|238:181|266:111,1,98.1749970039369,8|0,0:0|0:0,0:0:0:0: +82,73,219358,6,0,P|76:119|145:189,1,126.224996147919,2|0,2:0|2:0,2:0:0:0: +171,134,219589,6,0,L|182:63,1,56.0999982879639,8|0,0:0|0:0,0:0:0:0: +327,237,219820,6,0,P|229:220|153:292,1,187,2|8,0:0|0:0,0:0:0:0: +0,315,220166,1,0,0:0:0:0: +71,260,220281,2,0,B|87:291|87:291|74:358,1,93.5,2|0,0:0|0:0,0:0:0:0: +96,99,220512,2,0,B|80:68|80:68|93:1,1,93.5,8|0,0:0|0:0,0:0:0:0: +121,182,220743,6,0,L|9:170,1,93.5,2|0,0:0|0:0,0:0:0:0: +161,53,220974,1,8,0:0:0:0: +242,151,221089,1,0,0:0:0:0: +281,9,221204,2,0,P|379:-2|471:71,1,187,2|8,0:0|0:0,0:0:0:0: +389,306,221551,5,8,0:0:0:0: +389,306,221608,1,8,0:0:0:0: +389,306,221666,2,0,P|370:262|376:195,1,93.5,2|0,0:0|0:0,0:0:0:0: +427,130,221897,2,0,L|234:151,1,187,8|2,0:0|0:0,0:0:0:0: +120,283,222243,1,0,0:0:0:0: +210,299,222358,6,0,P|200:259|163:181,1,93.5,8|0,0:0|0:0,0:0:0:0: +267,2,222589,2,0,P|237:30|188:101,1,93.5,2|0,0:0|0:0,0:0:0:0: +0,103,222820,2,0,P|39:114|125:121,1,93.5,8|0,0:0|0:0,0:0:0:0: +301,317,223051,6,0,P|261:305|175:298,1,93.5,2|0,0:0|0:0,0:0:0:0: +122,344,223281,1,8,0:0:0:0: +180,210,223397,1,0,0:0:0:0: +323,244,223512,6,0,P|384:252|484:175,1,187,2|8,0:0|0:0,0:0:0:0: +425,99,223858,2,0,P|364:91|264:168,1,187,2|2,0:0|0:0,0:0:0:0: +180,210,224204,2,0,L|68:197,1,93.5,8|0,0:0|0:0,0:0:0:0: +5,166,224435,5,2,0:0:0:0: +64,286,224551,1,0,0:0:0:0: +154,124,224666,2,0,B|171:92|171:92|154:13,1,93.5,8|0,0:0|0:0,0:0:0:0: +84,78,224897,5,2,0:0:0:0: +241,118,225012,1,0,0:0:0:0: +84,78,225127,2,0,L|-13:89,1,93.5,8|0,0:0|0:0,0:0:0:0: +149,260,225358,6,0,B|251:234|212:312|352:265,1,187,2|8,0:0|0:0,0:0:0:0: +448,184,225704,2,0,B|324:153|324:153|310:177|284:198,1,187,2|2,0:0|0:0,0:0:0:0: +406,360,226051,2,0,P|412:311|418:257,1,93.5,8|0,0:0|0:0,0:0:0:0: +380,80,226281,1,2,0:0:0:0: +380,80,226512,5,8,0:0:0:0: +502,257,226627,1,2,0:0:0:0: +480,115,226743,5,2,0:0:0:0: +396,231,226858,1,8,0:0:0:0: +485,129,226974,5,8,0:0:0:0: +393,213,227089,1,8,0:0:0:0: +439,171,227204,6,0,L|296:157,1,140.25,2|2,0:0|0:0,0:0:0:0: +299,157,228588,6,0,P|275:197|283:252,1,93.5,2|0,0:0|0:0,0:0:0:0: +422,93,229280,2,0,P|428:47|407:6,1,93.5,2|0,0:0|0:0,0:0:0:0: +324,0,229973,1,2,0:0:0:0: +238,105,230204,5,0,0:0:0:0: +172,136,230434,1,0,0:0:0:0: +180,63,230665,1,0,0:0:0:0: +250,215,230896,6,0,L|231:364,1,140.25,2|2,0:0|0:0,0:0:0:0: +232,354,232280,6,0,L|125:371,1,93.5 +289,280,232973,2,0,L|396:297,1,93.5,2|0,0:0|0:0,0:0:0:0: +212,226,233665,1,2,0:0:0:0: +356,119,233896,5,0,0:0:0:0: +304,62,234127,1,0,0:0:0:0: +231,74,234357,1,0,0:0:0:0: +73,213,234588,6,0,L|216:227,1,140.25,2|2,0:0|0:0,0:0:0:0: +213,227,235973,6,0,P|237:187|229:132,1,93.5,2|0,0:0|0:0,0:0:0:0: +90,291,236665,2,0,P|83:336|107:379,1,93.5,2|0,0:0|0:0,0:0:0:0: +209,330,237357,6,0,L|147:318,1,46.75,2|0,0:0|0:0,0:0:0:0: +122,166,237819,1,0,0:0:0:0: +303,228,238050,1,0,0:0:0:0: +198,241,238280,6,0,P|161:169|186:107,1,140.25,2|0,0:0|0:0,0:0:0:0: +340,37,239204,5,0,0:0:0:0: +402,74,239434,1,0,0:0:0:0: +470,63,239665,1,2,0:0:0:0: +427,182,239896,5,0,0:0:0:0: +497,206,240127,1,0,0:0:0:0: +362,265,240357,5,2,0:0:0:0: +417,309,240588,1,0,0:0:0:0: +429,379,240819,1,0,0:0:0:0: +256,224,241050,5,2,0:0:0:0: +219,285,241280,1,0,0:0:0:0: +184,198,241511,1,0,0:0:0:0: +162,327,241742,1,0,0:0:0:0: +110,203,241973,6,0,P|64:196|16:229,1,93.5,2|2,0:0|0:0,0:0:0:0: +140,135,242665,2,0,P|148:95|140:71,1,46.75,2|0,0:0|0:0,0:0:0:0: +96,37,243127,1,2,0:0:0:0: +75,103,243357,1,0,0:0:0:0: +215,150,243588,5,2,0:0:0:0: +322,47,243819,1,0,0:0:0:0: +396,39,244050,2,0,L|448:32,1,46.75,2|0,0:0|0:0,0:0:0:0: +497,144,244511,2,0,L|395:133,1,93.5,2|0,0:0|0:0,0:0:0:0: +335,257,245204,1,0,0:0:0:0: +363,327,245434,6,0,P|405:282|382:203,1,140.25,2|0,0:0|0:0,0:0:0:0: +265,264,246357,1,2,0:0:0:0: +210,314,246588,1,0,0:0:0:0: +140,294,246819,2,0,P|132:264|133:230,1,46.75,2|0,0:0|0:0,0:0:0:0: +91,67,247280,5,2,0:0:0:0: +166,57,247511,2,0,P|163:80|157:102,1,46.75,2|0,0:0|0:0,0:0:0:0: +132,178,247973,2,0,L|194:170,2,46.75 +309,221,248665,1,2,0:0:0:0: +379,95,248896,1,0,0:0:0:0: +238,21,249127,6,0,P|228:61|228:79,1,46.75,2|0,0:0|0:0,0:0:0:0: +212,135,249588,1,0,0:0:0:0: +225,207,249819,1,2,0:0:0:0: +356,282,250050,6,0,P|366:242|366:224,1,46.75 +382,168,250511,1,0,0:0:0:0: +464,93,250742,6,0,B|441:76|441:76|363:99,1,93.5,2|0,0:0|0:0,0:0:0:0: +310,194,251550,2,0,L|228:184,1,70.1250026750566 +210,103,252247,1,0,0:0:0:0: +210,103,252702,6,0,L|141:111,1,70.1250026750566,2|0,0:0|0:0,0:0:0:0: +117,195,253506,1,2,0:0:0:0: +117,195,254095,6,0,L|36:184,1,70.1250026750566,2|2,0:0|0:0,0:0:0:0: +19,113,255580,1,2,0:0:0:0: +71,53,256480,6,0,P|126:48|182:100,1,122.718754681349,2|0,0:0|0:0,0:0:0:0: +211,259,257747,6,0,P|179:213|190:158,1,105.187504012585,2|0,0:0|0:0,0:0:0:0: +474,66,258892,6,0,P|433:121|242:116,1,271.734385365844,2|0,0:0|0:0,0:0:0:0: +210,216,263197,6,0,P|298:232|385:279,1,187,6|8,0:0|0:0,0:0:0:0: +456,330,263543,1,0,0:0:0:0: +465,242,263658,2,0,P|478:185|512:56,1,187,2|8,0:0|0:0,0:0:0:0: +425,84,264004,1,0,0:0:0:0: +368,19,264120,6,0,P|319:14|246:5,1,93.5,2|0,0:0|0:0,0:0:0:0: +280,139,264350,2,0,P|326:143|372:149,1,93.5,8|0,0:0|0:0,0:0:0:0: +197,57,264581,5,2,0:0:0:0: +121,35,264697,1,2,0:0:0:0: +50,67,264812,1,8,0:0:0:0: +21,139,264927,1,2,0:0:0:0: +37,213,265043,6,0,P|129:220|234:235,1,187,2|8,0:0|0:0,0:0:0:0: +314,216,265389,1,0,0:0:0:0: +283,308,265504,2,0,P|223:365|112:339,1,187,2|8,0:0|0:0,0:0:0:0: +57,295,265850,1,0,0:0:0:0: +142,255,265966,6,0,P|154:195|160:137,1,93.5,2|0,0:0|0:0,0:0:0:0: +52,120,266197,2,0,P|40:180|34:238,1,93.5,8|0,0:0|0:0,0:0:0:0: +217,109,266427,5,2,0:0:0:0: +297,102,266543,1,2,0:0:0:0: +368,138,266658,1,8,0:0:0:0: +406,207,266773,1,2,0:0:0:0: +404,283,266889,6,0,P|417:225|461:68,1,187,2|8,0:0|0:0,0:0:0:0: +503,22,267235,1,0,0:0:0:0: +411,13,267350,2,0,P|364:19|310:27,1,93.5,2|0,0:0|0:0,0:0:0:0: +237,75,267581,1,8,0:0:0:0: +169,6,267697,1,0,0:0:0:0: +148,102,267812,6,0,P|154:148|162:203,1,93.5,2|0,0:0|0:0,0:0:0:0: +333,216,268043,2,0,P|326:169|319:115,1,93.5,8|0,0:0|0:0,0:0:0:0: +63,146,268273,5,2,0:0:0:0: +11,206,268389,1,2,0:0:0:0: +2,283,268504,1,8,0:0:0:0: +36,352,268620,1,2,0:0:0:0: +107,381,268735,6,0,P|191:364|304:347,1,187,2|8,0:0|0:0,0:0:0:0: +370,299,269081,1,0,0:0:0:0: +333,216,269197,2,0,P|339:159|351:93,1,93.5,2|0,0:0|0:0,0:0:0:0: +288,44,269427,1,8,0:0:0:0: +368,2,269543,1,0,0:0:0:0: +512,90,269658,6,0,L|420:77,1,93.5,2|0,0:0|0:0,0:0:0:0: +173,113,269889,2,0,L|265:126,1,93.5,8|0,0:0|0:0,0:0:0:0: +381,222,270120,5,2,0:0:0:0: +306,244,270235,1,2,0:0:0:0: +232,267,270350,1,8,0:0:0:0: +158,289,270466,1,10,0:0:0:0: +154,280,270523,1,8,0:0:0:0: +150,272,270581,6,0,P|152:245|165:215,1,46.75,2|0,0:0|0:0,0:0:0:0: +136,76,270697,2,0,P|159:91|178:117,1,46.75,2|0,0:0|0:0,0:0:0:0: +318,154,270812,2,0,P|294:166|262:170,1,46.75,8|0,0:0|0:0,0:0:0:0: +103,158,270927,6,0,L|25:170,2,46.75,2|0|2,0:0|0:0|0:0,0:0:0:0: +407,33,271158,2,0,L|360:25,1,46.75,2|0,0:0|0:0,0:0:0:0: +216,97,271273,5,10,0:0:0:0: +221,91,271331,1,2,0:0:0:0: +227,87,271389,1,2,0:0:0:0: +235,86,271447,1,2,0:0:0:0: +243,87,271504,2,0,P|274:131|263:194,1,93.5,2|0,0:0|0:0,0:0:0:0: +389,311,271735,5,10,0:0:0:0: +367,268,271793,1,2,0:0:0:0: +377,221,271850,1,2,0:0:0:0: +417,190,271908,1,2,0:0:0:0: +466,194,271966,2,0,P|494:212|507:243,3,46.75,2|0|0|0,0:0|0:0|0:0|0:0,0:0:0:0: +439,260,272197,6,0,P|427:214|418:131,1,93.5,8|2,0:0|0:0,0:0:0:0: +436,94,272370,1,2,0:0:0:0: +441,88,272427,5,2,0:0:0:0: +391,121,272485,1,0,0:0:0:0: +334,118,272543,1,2,0:0:0:0: +285,90,272600,1,0,0:0:0:0: +262,39,272658,1,8,0:0:0:0: +219,3,272716,1,0,0:0:0:0: +163,0,272773,2,0,L|110:14,1,46.75,2|0,0:0|0:0,0:0:0:0: +13,60,272889,5,10,0:0:0:0: +49,87,272947,1,8,0:0:0:0: +61,128,273004,1,8,0:0:0:0: +53,174,273062,1,8,0:0:0:0: +26,207,273120,1,8,0:0:0:0: +13,249,273177,1,0,0:0:0:0: +21,291,273235,2,0,L|33:337,1,46.75,2|0,0:0|0:0,0:0:0:0: +126,380,273350,5,2,0:0:0:0: +162,383,273408,1,2,0:0:0:0: +194,367,273466,1,2,0:0:0:0: +213,339,273523,1,2,0:0:0:0: +242,320,273581,1,10,0:0:0:0: +277,322,273639,1,2,0:0:0:0: +307,345,273697,1,2,0:0:0:0: +343,352,273754,1,2,0:0:0:0: +375,334,273812,6,0,P|383:286|383:218,1,93.5,10|2,0:0|0:0,0:0:0:0: +380,221,273985,1,2,0:0:0:0: +370,203,274043,2,0,L|477:218,1,93.5,2|2,0:0|0:0,0:0:0:0: +263,211,274273,6,0,L|156:196,1,93.5,2|0,0:0|0:0,0:0:0:0: +103,234,274447,1,0,0:0:0:0: +103,234,274504,2,0,B|92:199|92:199|114:119,1,93.5,8|0,0:0|0:0,0:0:0:0: +315,46,274735,2,0,B|326:81|326:81|304:161,1,93.5,2|0,0:0|0:0,0:0:0:0: +248,83,274908,1,0,0:0:0:0: +248,83,274966,2,0,L|141:68,1,93.5,8|0,0:0|0:0,0:0:0:0: +18,156,275197,5,2,0:0:0:0: +115,326,275312,1,0,0:0:0:0: +115,326,275370,1,0,0:0:0:0: +115,326,275427,2,0,P|111:281|101:226,1,93.5,8|0,0:0|0:0,0:0:0:0: +218,50,275658,2,0,P|222:95|232:150,1,93.5,2|0,0:0|0:0,0:0:0:0: +307,291,275889,2,0,L|411:280,1,93.5,8|0,0:0|0:0,0:0:0:0: +471,313,276062,1,0,0:0:0:0: +471,313,276120,6,0,B|478:289|478:289|474:256,7,46.75,2|0|0|0|8|0|0|0,0:0|0:0|0:0|0:0|0:0|0:0|0:0|0:0,0:0:0:0: +372,161,276581,2,0,B|365:185|365:185|369:218,7,46.75,2|0|0|0|8|0|0|0,0:0|0:0|0:0|0:0|0:0|0:0|0:0|0:0,0:0:0:0: +446,195,277043,5,10,0:0:0:0: +234,69,277158,1,8,0:0:0:0: +307,291,277273,1,8,0:0:0:0: +495,131,277389,1,8,0:0:0:0: +327,42,277504,5,2,0:0:0:0: +321,85,277562,1,0,0:0:0:0: +303,124,277620,1,8,0:0:0:0: +271,153,277677,1,8,0:0:0:0: +231,167,277735,1,8,0:0:0:0: +188,170,277793,1,8,0:0:0:0: +147,161,277850,1,8,0:0:0:0: +108,142,277908,1,8,0:0:0:0: +80,111,277966,6,0,P|26:157|22:280,1,187,6|8,0:0|0:0,0:0:0:0: +84,330,278312,2,0,B|188:306|163:368|273:346,1,187,2|2,0:0|0:0,0:0:0:0: +351,312,278658,2,0,P|405:318|475:352,1,93.5,8|0,0:0|0:0,0:0:0:0: +277,257,278889,1,2,0:0:0:0: +277,257,279004,2,0,P|257:178|251:64,1,187,2|2,0:0|0:0,0:0:0:0: +321,3,279350,2,0,P|345:47|344:104,1,93.5,2|0,0:0|0:0,0:0:0:0: +178,142,279581,2,0,P|154:98|155:41,1,93.5,8|0,0:0|0:0,0:0:0:0: +250,72,279812,6,0,P|354:88|472:115,1,187,2|8,0:0|0:0,0:0:0:0: +452,198,280158,2,0,P|348:182|230:155,1,187,2|2,0:0|0:0,0:0:0:0: +208,235,280504,2,0,P|217:284|225:329,1,93.5,8|0,0:0|0:0,0:0:0:0: +125,215,280735,1,2,0:0:0:0: +125,215,280850,2,0,P|72:224|-13:122,1,187,2|2,0:0|0:0,0:0:0:0: +62,10,281197,2,0,P|69:52|67:110,1,93.5,2|0,0:0|0:0,0:0:0:0: +189,148,281427,2,0,P|187:101|194:55,1,93.5,8|0,0:0|0:0,0:0:0:0: +205,40,281600,1,0,0:0:0:0: +218,29,281658,6,0,P|303:43|413:60,1,187,2|8,0:0|0:0,0:0:0:0: +489,32,282004,2,0,P|524:69|499:203,1,187,2|2,0:0|0:0,0:0:0:0: +424,242,282350,2,0,P|416:191|412:130,1,93.5,8|0,0:0|0:0,0:0:0:0: +491,313,282581,1,2,0:0:0:0: +491,313,282697,2,0,P|427:279|296:283,1,187,2|2,0:0|0:0,0:0:0:0: +239,360,283043,2,0,P|230:291|217:234,1,93.5,2|0,0:0|0:0,0:0:0:0: +266,106,283273,2,0,P|275:175|288:232,1,93.5,8|0,0:0|0:0,0:0:0:0: +148,315,283504,6,0,P|91:273|-20:294,1,187,2|8,0:0|0:0,0:0:0:0: +162,217,283850,2,0,P|218:204|365:170,1,187,2|2,0:0|0:0,0:0:0:0: +95,87,284197,2,0,L|85:183,1,93.5,8|0,0:0|0:0,0:0:0:0: +61,358,284427,5,2,0:0:0:0: +61,358,284543,1,8,0:0:0:0: +227,288,284658,1,8,0:0:0:0: +227,288,284773,1,2,0:0:0:0: +159,375,284889,2,0,L|137:213,1,140.25,2|0,0:0|0:0,0:0:0:0: +216,73,285120,2,0,B|200:187|200:187|183:168|163:153,1,140.25,8|0,0:0|0:0,0:0:0:0: +121,113,285350,6,0,L|327:79,1,187,6|8,0:0|0:0,0:0:0:0: +377,144,285697,2,0,P|433:102|408:-9,1,187,2|2,0:0|0:0,0:0:0:0: +299,161,286043,2,0,L|285:253,1,93.5,8|0,0:0|0:0,0:0:0:0: +248,96,286273,1,2,0:0:0:0: +248,96,286389,2,0,P|202:52|83:71,1,187,2|2,0:0|0:0,0:0:0:0: +0,199,286735,2,0,P|51:195|108:172,1,93.5,2|0,0:0|0:0,0:0:0:0: +285,253,286966,2,8,P|239:229|196:185,1,93.5 +160,122,287197,6,0,L|126:341,1,187,2|8,0:0|0:0,0:0:0:0: +196,371,287543,2,0,P|276:320|373:351,1,187,2|2,0:0|0:0,0:0:0:0: +430,284,287889,2,0,P|479:295|538:303,1,93.5,8|0,0:0|0:0,0:0:0:0: +349,246,288120,1,2,0:0:0:0: +349,246,288235,2,0,P|336:185|319:51,1,187,2|2,0:0|0:0,0:0:0:0: +382,5,288581,2,0,L|491:21,1,93.5,2|0,0:0|0:0,0:0:0:0: +245,108,288812,2,0,L|136:92,1,93.5,8|0,0:0|0:0,0:0:0:0: +139,86,288985,1,0,0:0:0:0: +124,78,289043,6,0,P|142:128|46:249,1,187,2|8,0:0|0:0,0:0:0:0: +29,315,289389,2,0,P|114:328|249:358,1,187,2|2,0:0|0:0,0:0:0:0: +301,334,289735,2,0,P|292:280|283:203,1,93.5,8|0,0:0|0:0,0:0:0:0: +195,82,289966,1,2,0:0:0:0: +195,82,290081,2,0,B|163:199|163:199|209:254,1,187,2|2,0:0|0:0,0:0:0:0: +365,164,290427,2,0,L|258:148,1,93.5,2|0,0:0|0:0,0:0:0:0: +375,307,290658,2,0,L|482:323,1,93.5,8|0,0:0|0:0,0:0:0:0: +505,239,290889,6,0,P|519:179|483:55,1,187,2|8,0:0|0:0,0:0:0:0: +408,9,291235,2,0,P|334:30|193:48,1,187,2|2,0:0|0:0,0:0:0:0: +155,110,291581,2,0,P|118:102|55:94,1,93.5,8|0,0:0|0:0,0:0:0:0: +245,138,291812,2,0,P|285:200|249:315,1,187,2|8,0:0|0:0,0:0:0:0: +186,368,292158,1,0,0:0:0:0: +0,252,292273,6,0,L|147:236,1,140.25,2|0,0:0|0:0,0:0:0:0: +179,271,292504,2,0,L|82:282,1,93.5,8|0,0:0|0:0,0:0:0:0: +43,150,292735,2,0,L|139:138,1,93.5,2|0,0:0|0:0,0:0:0:0: +378,221,292966,2,0,P|309:240|212:164,1,187,8|2,0:0|0:0,0:0:0:0: +132,54,293312,1,0,0:0:0:0: +227,0,293427,2,0,L|205:119,1,93.5,8|0,0:0|0:0,0:0:0:0: +147,222,293658,5,2,0:0:0:0: +132,54,293773,1,0,0:0:0:0: +285,131,293889,2,0,P|331:141|388:146,1,93.5,8|0,0:0|0:0,0:0:0:0: +450,101,294120,5,2,0:0:0:0: +363,231,294235,1,2,0:0:0:0: +334,58,294350,1,8,0:0:0:0: +441,199,294466,1,2,0:0:0:0: +303,296,294581,6,0,L|254:308,3,46.75,2|2|2|0,0:0|0:0|0:0|0:0,0:0:0:0: +204,367,294812,2,0,L|158:355,3,46.75,8|2|8|2,0:0|0:0|0:0|0:0,0:0:0:0: +80,363,295043,1,2,0:0:0:0: +45,330,295100,1,2,0:0:0:0: +26,288,295158,1,10,0:0:0:0: +18,242,295216,1,2,0:0:0:0: +22,195,295273,1,2,0:0:0:0: +39,149,295331,1,2,0:0:0:0: +71,111,295389,1,2,0:0:0:0: +116,93,295447,1,2,0:0:0:0: +168,92,295504,6,0,L|391:131,1,187,6|8,0:0|0:0,0:0:0:0: +444,197,295850,1,0,0:0:0:0: +338,248,295966,2,0,L|115:209,1,187,2|8,0:0|0:0,0:0:0:0: +54,275,296312,1,0,0:0:0:0: +152,341,296427,2,0,L|268:360,1,93.5,2|0,0:0|0:0,0:0:0:0: +499,283,296658,2,0,P|473:256|339:249,1,140.25,8|0,0:0|0:0,0:0:0:0: +338,248,296889,2,0,L|324:124,1,93.5,2|0,0:0|0:0,0:0:0:0: +420,129,297120,1,8,0:0:0:0: +397,335,297235,1,0,0:0:0:0: +240,266,297350,6,0,B|197:242|197:242|56:271,1,187,2|8,0:0|0:0,0:0:0:0: +143,23,297697,2,0,B|186:47|186:47|327:18,1,187,2|2,0:0|0:0,0:0:0:0: +150,163,298043,2,0,L|50:147,1,93.5,8|0,0:0|0:0,0:0:0:0: +264,129,298273,2,0,B|334:122|334:122|371:146|371:146|460:136,1,187,2|8,0:0|0:0,0:0:0:0: +306,208,298620,2,0,L|270:313,1,93.5,0|2,0:0|0:0,0:0:0:0: +443,137,298850,5,10,0:0:0:0: +321,20,298966,1,8,0:0:0:0: +390,236,299081,1,10,0:0:0:0: +465,59,299197,6,0,B|352:46|412:116|277:97,1,187,2|8,0:0|0:0,0:0:0:0: +75,82,299543,1,0,0:0:0:0: +75,82,299658,2,0,P|122:26|258:65,1,187,2|8,0:0|0:0,0:0:0:0: +214,214,300004,1,0,0:0:0:0: +214,214,300120,2,0,L|194:102,1,93.5,2|0,0:0|0:0,0:0:0:0: +325,194,300350,2,0,L|303:362,1,140.25,8|0,0:0|0:0,0:0:0:0: +332,378,300581,2,0,L|222:364,1,93.5,2|0,0:0|0:0,0:0:0:0: +391,266,300812,2,0,L|501:280,1,93.5,8|0,0:0|0:0,0:0:0:0: +237,290,301043,6,0,L|42:262,1,187,2|8,0:0|0:0,0:0:0:0: +0,154,301389,1,0,0:0:0:0: +53,47,301504,2,0,L|248:75,1,187,2|8,0:0|0:0,0:0:0:0: +290,183,301850,1,0,0:0:0:0: +237,290,301966,2,0,L|138:275,1,93.5,2|0,0:0|0:0,0:0:0:0: +348,127,302197,2,0,L|447:112,1,93.5,8|0,0:0|0:0,0:0:0:0: +482,321,302427,2,0,P|448:268|318:266,1,187,2|8,0:0|0:0,0:0:0:0: +212,183,302773,1,0,0:0:0:0: +296,62,302889,6,0,P|307:111|306:171,1,93.5,2|0,0:0|0:0,0:0:0:0: +144,275,303120,2,0,P|133:226|134:166,1,93.5,8|0,0:0|0:0,0:0:0:0: +289,328,303350,2,0,B|183:302|233:387|95:356,1,187,2|8,0:0|0:0,0:0:0:0: +42,263,303697,1,0,0:0:0:0: +132,182,303812,6,0,P|180:125|149:5,1,187,2|8,0:0|0:0,0:0:0:0: +68,39,304158,1,0,0:0:0:0: +68,39,304273,2,0,P|55:75|49:136,1,93.5,2|0,0:0|0:0,0:0:0:0: +269,175,304504,2,0,P|282:139|288:78,1,93.5,8|0,0:0|0:0,0:0:0:0: +163,20,304735,6,0,P|173:115|183:232,1,187,2|8,0:0|0:0,0:0:0:0: +146,296,305081,2,0,P|197:258|325:295,1,187,2|2,0:0|0:0,0:0:0:0: +378,353,305427,1,8,0:0:0:0: +470,323,305543,1,0,0:0:0:0: +403,252,305658,6,0,P|411:158|421:65,1,187,2|8,0:0|0:0,0:0:0:0: +353,1,306004,1,0,0:0:0:0: +248,105,306120,2,0,P|304:107|352:65,1,93.5,2|0,0:0|0:0,0:0:0:0: +178,48,306350,2,0,P|136:26|91:31,1,93.5,8|0,0:0|0:0,0:0:0:0: +67,171,306581,6,0,P|56:224|49:280,1,93.5,2|0,0:0|0:0,0:0:0:0: +101,341,306812,1,8,0:0:0:0: +196,332,306927,1,0,0:0:0:0: +148,251,307043,2,0,P|207:210|328:230,1,187,2|8,0:0|0:0,0:0:0:0: +395,165,307389,1,0,0:0:0:0: +327,32,307504,6,0,P|315:80|308:129,1,93.5,2|0,0:0|0:0,0:0:0:0: +379,356,307735,2,0,P|391:308|398:259,1,93.5,8|0,0:0|0:0,0:0:0:0: +511,90,307966,6,0,L|483:-25,1,93.5,2|0,0:0|0:0,0:0:0:0: +473,292,308197,2,0,L|495:382,1,93.5,8|0,0:0|0:0,0:0:0:0: +512,192,308427,5,2,0:0:0:0: +418,163,308543,1,0,0:0:0:0: +375,249,308658,1,8,0:0:0:0: +379,256,308889,5,2,0:0:0:0: +281,219,309004,1,10,0:0:0:0: +275,203,309062,1,2,0:0:0:0: +271,188,309120,1,10,0:0:0:0: +268,171,309177,1,10,0:0:0:0: +265,156,309235,1,10,0:0:0:0: +264,140,309293,1,10,0:0:0:0: +263,124,309350,5,2,0:0:0:0: +233,165,309408,1,2,0:0:0:0: +189,185,309466,1,2,0:0:0:0: +142,183,309523,1,2,0:0:0:0: +105,155,309581,1,10,0:0:0:0: +86,111,309639,1,2,0:0:0:0: +90,63,309697,1,10,0:0:0:0: +122,27,309754,1,2,0:0:0:0: +169,16,309812,6,0,L|237:24,1,46.75,10|2,0:0|0:0,0:0:0:0: +263,124,309927,2,0,L|331:116,1,46.75,10|2,0:0|0:0,0:0:0:0: +361,42,310043,2,0,L|429:50,1,46.75,10|2,0:0|0:0,0:0:0:0: +495,106,310158,1,10,0:0:0:0: +495,106,310216,1,10,0:0:0:0: +495,106,310273,6,0,L|480:318,1,187,6|8,0:0|0:0,0:0:0:0: +428,371,310620,1,0,0:0:0:0: +316,222,310735,2,0,L|329:35,1,187,2|8,0:0|0:0,0:0:0:0: +242,71,311081,1,0,0:0:0:0: +316,222,311197,6,0,P|382:211|413:234,1,93.5,2|0,0:0|0:0,0:0:0:0: +481,292,311427,1,8,0:0:0:0: +481,292,311658,2,0,L|487:198,1,93.5,2|0,0:0|0:0,0:0:0:0: +495,106,311889,1,8,0:0:0:0: +316,222,312004,1,0,0:0:0:0: +428,371,312120,6,0,B|342:392|328:324|229:344,1,187,2|8,0:0|0:0,0:0:0:0: +157,369,312466,1,0,0:0:0:0: +61,235,312581,2,0,P|56:281|74:324,1,93.5,2|0,0:0|0:0,0:0:0:0: +214,214,312812,2,0,P|219:168|201:125,1,93.5,8|0,0:0|0:0,0:0:0:0: +90,63,313043,5,2,0:0:0:0: +146,259,313158,1,0,0:0:0:0: +288,113,313273,2,0,B|307:4,1,93.5,8|0,0:0|0:0,0:0:0:0: +129,166,313504,2,0,B|146:259,1,93.5,2|0,0:0|0:0,0:0:0:0: +178,48,313735,2,0,P|136:67|89:62,1,93.5,8|0,0:0|0:0,0:0:0:0: +357,237,313966,6,0,P|422:175|519:198,1,187,2|8,0:0|0:0,0:0:0:0: +490,283,314312,1,0,0:0:0:0: +465,372,314427,2,0,L|357:354,1,93.5,2|0,0:0|0:0,0:0:0:0: +264,221,314658,2,0,L|372:239,1,93.5,8|0,0:0|0:0,0:0:0:0: +201,356,314889,6,0,P|118:355|52:286,1,140.25,2|0,0:0|0:0,0:0:0:0: +32,263,315120,2,0,L|25:168,1,93.5,8|0,0:0|0:0,0:0:0:0: +258,36,315350,2,0,B|266:125|200:130|215:226,1,187,2|8,0:0|0:0,0:0:0:0: +262,294,315697,1,0,0:0:0:0: +353,237,315812,6,0,B|377:197|377:197|370:141,1,93.5,2|0,0:0|0:0,0:0:0:0: +262,294,316043,2,0,B|238:334|238:334|245:390,1,93.5,8|0,0:0|0:0,0:0:0:0: +372,356,316273,2,0,B|468:339,1,93.5,2|0,0:0|0:0,0:0:0:0: +213,213,316504,2,0,B|117:230,1,93.5,8|0,0:0|0:0,0:0:0:0: +36,14,316735,6,0,P|100:46|93:164,1,187,2|8,0:0|0:0,0:0:0:0: +37,357,317081,1,0,0:0:0:0: +37,357,317197,2,0,P|32:285|138:232,1,187,2|8,0:0|0:0,0:0:0:0: +334,185,317543,1,8,0:0:0:0: +334,185,317600,1,8,0:0:0:0: +334,185,317658,6,0,P|274:224|175:159,1,187,6|8,0:0|0:0,0:0:0:0: +207,84,318004,1,0,0:0:0:0: +387,119,318120,2,0,P|373:181|403:221,1,93.5,2|0,0:0|0:0,0:0:0:0: +491,311,318350,2,0,P|505:249|475:209,1,93.5,8|0,0:0|0:0,0:0:0:0: +222,356,318581,6,0,B|309:359|309:359|334:351|334:351|422:354,1,187,2|8,0:0|0:0,0:0:0:0: +491,311,318927,1,0,0:0:0:0: +304,229,319043,2,0,B|216:232|216:232|191:224|191:224|103:227,1,187,2|8,0:0|0:0,0:0:0:0: +35,184,319389,1,0,0:0:0:0: +197,0,319504,6,0,P|257:80|212:171,1,187,2|8,0:0|0:0,0:0:0:0: +231,155,319966,2,0,P|281:145|329:141,1,93.5,2|0,0:0|0:0,0:0:0:0: +501,305,320197,2,0,P|451:294|403:290,1,93.5,8|0,0:0|0:0,0:0:0:0: +152,382,320427,6,0,P|92:302|137:211,1,187,2|8,0:0|0:0,0:0:0:0: +143,136,320773,1,0,0:0:0:0: +221,242,320889,2,0,P|211:287|207:334,1,93.5,2|0,0:0|0:0,0:0:0:0: +63,159,321120,2,0,P|58:112|49:66,1,93.5,8|0,0:0|0:0,0:0:0:0: +340,49,321350,6,0,P|317:135|231:155,2,187,2|8|2,0:0|0:0|0:0,0:0:0:0: +173,47,321927,1,0,0:0:0:0: +143,136,322043,2,0,L|154:246,1,93.5,8|0,0:0|0:0,0:0:0:0: +400,384,322273,6,0,L|411:274,1,93.5,2|0,0:0|0:0,0:0:0:0: +257,173,322504,2,0,L|332:227,1,93.5,8|0,0:0|0:0,0:0:0:0: +512,154,322735,2,0,L|426:192,1,93.5,2|0,0:0|0:0,0:0:0:0: +256,352,322966,1,8,0:0:0:0: +170,310,323081,1,0,0:0:0:0: +100,373,323197,6,0,L|2:368,1,93.5,2|0,0:0|0:0,0:0:0:0: +152,229,323427,2,0,L|250:224,1,93.5,8|0,0:0|0:0,0:0:0:0: +93,294,323658,2,0,L|-5:289,1,93.5,2|0,0:0|0:0,0:0:0:0: +145,150,323888,2,0,L|243:145,1,93.5,8|0,0:0|0:0,0:0:0:0: +82,221,324120,5,2,0:0:0:0: +69,207,324177,1,2,0:0:0:0: +60,191,324235,1,2,0:0:0:0: +54,173,324293,1,2,0:0:0:0: +52,154,324350,1,10,0:0:0:0: +54,136,324408,1,2,0:0:0:0: +60,118,324466,1,10,0:0:0:0: +70,102,324523,1,10,0:0:0:0: +82,88,324581,5,2,0:0:0:0: +136,92,324638,1,2,0:0:0:0: +176,130,324696,1,10,0:0:0:0: +185,185,324754,1,2,0:0:0:0: +157,233,324811,1,10,0:0:0:0: +129,280,324870,1,10,0:0:0:0: +137,335,324927,1,10,0:0:0:0: +177,373,324985,1,10,0:0:0:0: +232,378,325043,6,0,B|320:375|320:375|344:382|344:382|418:380,1,187,6|8,0:0|0:0,0:0:0:0: +485,314,325389,1,0,0:0:0:0: +267,218,325504,2,0,B|179:215|179:215|155:222|155:222|81:220,1,187,2|8,0:0|0:0,0:0:0:0: +14,154,325850,1,0,0:0:0:0: +323,267,325966,6,0,P|341:225|331:180,1,93.5,2|0,0:0|0:0,0:0:0:0: +250,19,326197,1,8,0:0:0:0: +250,19,326427,2,0,L|240:115,1,93.5,2|0,0:0|0:0,0:0:0:0: +426,191,326658,2,0,L|435:94,1,93.5,8|0,0:0|0:0,0:0:0:0: +82,221,326889,6,0,B|159:244|180:198|267:218,1,187,2|8,0:0|0:0,0:0:0:0: +511,288,327235,1,0,0:0:0:0: +449,357,327350,2,0,B|341:346,1,93.5,2|0,0:0|0:0,0:0:0:0: +332,181,327581,2,0,B|440:192,1,93.5,8|0,0:0|0:0,0:0:0:0: +505,141,327812,5,2,0:0:0:0: +304,46,327927,1,0,0:0:0:0: +323,268,328043,2,0,P|341:229|327:170,1,93.5,8|0,0:0|0:0,0:0:0:0: +155,62,328273,2,0,P|137:101|151:160,1,93.5,2|0,0:0|0:0,0:0:0:0: +248,372,328504,2,0,B|140:383,1,93.5,8|0,0:0|0:0,0:0:0:0: +242,206,328735,6,0,B|297:201|297:201|302:204|302:204|305:200|305:200|433:189,1,187,2|8,0:0|0:0,0:0:0:0: +503,242,329081,1,0,0:0:0:0: +442,9,329197,2,0,B|423:49|423:49|434:97,1,93.5,2|0,0:0|0:0,0:0:0:0: +323,268,329427,2,0,B|341:227|341:227|330:179,1,93.5,8|0,0:0|0:0,0:0:0:0: +155,62,329658,6,0,L|171:222,1,140.25,2|0,0:0|0:0,0:0:0:0: +168,201,329889,2,0,P|123:169|75:182,1,93.5,8|0,0:0|0:0,0:0:0:0: +229,277,330120,2,0,L|322:267,1,93.5,2|0,0:0|0:0,0:0:0:0: +137,335,330350,2,0,L|43:325,1,93.5,8|0,0:0|0:0,0:0:0:0: +309,359,330581,6,0,P|346:302|414:298,1,140.25,2|0,0:0|0:0,0:0:0:0: +415,299,330812,2,0,P|405:251|426:205,1,93.5,8|0,0:0|0:0,0:0:0:0: +512,47,331043,2,0,L|502:140,1,93.5,2|0,0:0|0:0,0:0:0:0: +330,179,331273,2,0,L|339:85,1,93.5,8|0,0:0|0:0,0:0:0:0: +512,320,331504,6,0,B|450:318|452:378|380:370,1,140.25,2|0,0:0|0:0,0:0:0:0: +385,370,331735,2,0,L|291:360,1,93.5,8|0,0:0|0:0,0:0:0:0: +62,381,331966,1,2,0:0:0:0: +161,306,332081,1,8,0:0:0:0: +162,259,332138,1,8,0:0:0:0: +140,219,332196,1,8,0:0:0:0: +101,194,332254,1,8,0:0:0:0: +73,155,332312,1,8,0:0:0:0: +73,108,332370,1,8,0:0:0:0: +96,68,332427,6,0,P|152:99|289:37,1,187,6|8,0:0|0:0,0:0:0:0: +337,9,332773,1,0,0:0:0:0: +421,210,332889,2,0,B|435:170|435:170|418:119,1,93.5,2|0,0:0|0:0,0:0:0:0: +215,213,333120,2,0,B|201:253|201:253|217:303,1,93.5,8|0,0:0|0:0,0:0:0:0: +344,145,333350,6,0,B|340:81|340:81|344:76|344:76|340:73|340:73|335:-14,1,140.25,2|0,0:0|0:0,0:0:0:0: +337,9,333581,2,0,L|446:24,1,93.5,8|0,0:0|0:0,0:0:0:0: +498,196,333812,2,0,P|456:182|421:210,1,93.5,2|0,0:0|0:0,0:0:0:0: +292,360,334043,2,0,P|256:387|214:373,1,93.5,8|0,0:0|0:0,0:0:0:0: +32,201,334273,6,0,B|119:177|135:235|215:212,1,187,2|8,0:0|0:0,0:0:0:0: +214,212,334735,2,0,P|208:181|198:97,1,93.5,2|0,0:0|0:0,0:0:0:0: +306,267,334966,2,0,P|300:297|290:381,1,93.5,8|0,0:0|0:0,0:0:0:0: +72,357,335197,6,0,P|98:307|224:307,1,187,2|8,0:0|0:0,0:0:0:0: +291,359,335543,1,0,0:0:0:0: +498,196,335658,2,0,B|426:187|426:187|392:199|392:199|301:187,1,187,2|8,0:0|0:0,0:0:0:0: +221,176,336004,1,0,0:0:0:0: +10,86,336120,6,0,P|80:77|154:44,1,140.25,2|0,0:0|0:0,0:0:0:0: +143,50,336350,2,0,P|111:107|120:155,1,93.5,8|0,0:0|0:0,0:0:0:0: +277,245,336581,2,0,P|244:188|198:171,1,93.5,2|0,0:0|0:0,0:0:0:0: +41,262,336812,2,0,P|106:262|143:230,1,93.5,8|0,0:0|0:0,0:0:0:0: +223,176,337043,5,2,0:0:0:0: +221,157,337100,1,2,0:0:0:0: +219,138,337158,1,10,0:0:0:0: +217,120,337216,1,2,0:0:0:0: +215,101,337273,1,2,0:0:0:0: +213,82,337331,1,2,0:0:0:0: +211,64,337389,1,2,0:0:0:0: +209,45,337446,1,2,0:0:0:0: +208,27,337504,5,2,0:0:0:0: +258,48,337561,1,2,0:0:0:0: +283,97,337619,1,2,0:0:0:0: +270,151,337677,1,2,0:0:0:0: +227,184,337734,1,10,0:0:0:0: +183,217,337793,1,10,0:0:0:0: +170,270,337851,1,10,0:0:0:0: +195,319,337909,1,10,0:0:0:0: +246,340,337966,6,0,B|313:336|313:336|346:346|346:346|438:337,1,187,6|8,0:0|0:0,0:0:0:0: +501,276,338312,1,0,0:0:0:0: +266,215,338427,2,0,B|198:211|198:211|165:221|165:221|73:212,1,187,2|8,0:0|0:0,0:0:0:0: +11,151,338773,1,0,0:0:0:0: +252,34,338889,6,0,B|233:78|233:78|248:121,1,93.5,2|0,0:0|0:0,0:0:0:0: +425,190,339120,2,0,B|444:146|444:146|428:102,1,93.5,8|0,0:0|0:0,0:0:0:0: +336,155,339350,5,10,0:0:0:0: +336,173,339407,1,8,0:0:0:0: +337,192,339465,1,8,0:0:0:0: +338,211,339523,1,8,0:0:0:0: +338,229,339580,1,8,0:0:0:0: +339,248,339638,1,8,0:0:0:0: +340,267,339696,1,8,0:0:0:0: +340,285,339753,1,8,0:0:0:0: +340,303,339812,6,0,P|426:327|487:262,1,187,6|8,0:0|0:0,0:0:0:0: +425,190,340158,1,0,0:0:0:0: +246,340,340273,2,0,P|249:296|209:250,1,93.5,2|0,0:0|0:0,0:0:0:0: +56,129,340504,2,0,P|53:173|93:219,1,93.5,8|0,0:0|0:0,0:0:0:0: +306,198,340735,6,0,B|310:146|310:146|315:138|315:138|311:130|311:130|323:-1,1,187,2|8,0:0|0:0,0:0:0:0: +237,53,341081,1,0,0:0:0:0: +340,267,341197,2,0,P|368:263|441:256,1,93.5,2|0,0:0|0:0,0:0:0:0: +246,340,341427,2,0,P|217:336|145:329,1,93.5,8|0,0:0|0:0,0:0:0:0: +13,157,341658,6,0,B|101:149|101:221|190:213,1,187,2|8,0:0|0:0,0:0:0:0: +241,137,342004,1,0,0:0:0:0: +42,237,342120,2,0,P|35:289|60:336,1,93.5,2|0,0:0|0:0,0:0:0:0: +162,129,342350,2,0,P|169:77|144:30,1,93.5,8|0,0:0|0:0,0:0:0:0: +153,329,342581,6,0,B|223:321|223:321|269:337|269:337|336:331,1,187,2|8,0:0|0:0,0:0:0:0: +417,379,342927,1,0,0:0:0:0: +306,198,343043,2,0,B|298:113|370:113|362:25,1,187,2|8,0:0|0:0,0:0:0:0: +489,112,343389,1,8,0:0:0:0: +489,112,343447,1,8,0:0:0:0: +489,112,343504,6,0,P|504:193|417:256,1,187,2|8,0:0|0:0,0:0:0:0: +248,341,343850,2,0,P|232:259|319:196,1,187,2|2,0:0|0:0,0:0:0:0: +508,361,344197,2,0,L|416:378,1,93.5,8|0,0:0|0:0,0:0:0:0: +401,373,344370,1,0,0:0:0:0: +386,367,344427,6,0,L|192:354,1,187,2|8,0:0|0:0,0:0:0:0: +107,375,344773,1,0,0:0:0:0: +122,199,344889,2,0,P|144:240|139:286,1,93.5,2|0,0:0|0:0,0:0:0:0: +13,157,345120,2,0,P|7:111|29:70,1,93.5,8|0,0:0|0:0,0:0:0:0: +200,35,345350,6,0,L|302:46,1,93.5,2|0,0:0|0:0,0:0:0:0: +396,207,345581,2,0,L|303:196,1,93.5,8|0,0:0|0:0,0:0:0:0: +384,23,345812,2,0,L|373:115,1,93.5,2|0,0:0|0:0,0:0:0:0: +212,219,346043,2,0,L|223:117,1,93.5,8|0,0:0|0:0,0:0:0:0: +512,279,346273,6,0,P|483:282|372:294,1,140.25,2|0,0:0|0:0,0:0:0:0: +349,363,346504,6,0,P|328:360|251:351,1,98.1749970039369,8|0,0:0|0:0,0:0:0:0: +212,293,346735,6,0,P|188:295|74:307,1,126.224996147919,2|0,0:0|0:0,0:0:0:0: +27,257,346966,6,0,P|14:222|23:192,1,56.0999982879639,8|0,0:0|0:0,0:0:0:0: +133,13,347197,6,0,L|122:205,1,187,6|8,0:0|0:0,0:0:0:0: +251,351,347543,1,0,0:0:0:0: +311,280,347658,2,0,P|331:238|316:186,1,93.5,2|0,0:0|0:0,0:0:0:0: +232,39,347889,2,0,P|212:80|221:125,1,93.5,8|0,0:0|0:0,0:0:0:0: +466,107,348120,6,0,P|403:112|340:117,1,93.5,2|0,0:0|0:0,0:0:0:0: +228,202,348350,2,0,P|290:196|353:191,1,93.5,8|0,0:0|0:0,0:0:0:0: +489,256,348581,2,0,P|426:261|363:266,1,93.5,2|0,0:0|0:0,0:0:0:0: +251,351,348811,2,0,P|313:345|376:340,1,93.5,8|0,0:0|0:0,0:0:0:0: +360,351,348985,1,0,0:0:0:0: +375,359,349043,6,0,P|426:304|407:190,1,187,2|8,0:0|0:0,0:0:0:0: +372,115,349389,1,0,0:0:0:0: +496,18,349504,2,0,L|488:111,1,93.5,2|0,0:0|0:0,0:0:0:0: +328,286,349735,2,0,L|320:192,1,93.5,8|0,0:0|0:0,0:0:0:0: +125,50,349966,6,0,P|170:97|307:65,1,187,2|8,0:0|0:0,0:0:0:0: +356,28,350312,1,0,0:0:0:0: +227,184,350427,2,0,B|262:280|198:280|230:384,1,187,2|8,0:0|0:0,0:0:0:0: +134,342,350773,1,0,0:0:0:0: +10,277,350889,6,0,P|7:223|-1:72,1,187,2|8,0:0|0:0,0:0:0:0: +51,13,351235,1,0,0:0:0:0: +215,180,351350,2,0,P|218:234|226:385,1,187,2|8,0:0|0:0,0:0:0:0: +502,277,351812,6,0,P|505:223|513:72,1,187,2|8,0:0|0:0,0:0:0:0: +461,13,352158,1,0,0:0:0:0: +372,115,352273,2,0,P|356:141|366:217,1,93.5,2|0,0:0|0:0,0:0:0:0: +440,349,352504,2,0,P|425:322|353:292,1,93.5,8|0,0:0|0:0,0:0:0:0: +99,278,352735,6,0,L|285:258,1,187,2|8,0:0|0:0,0:0:0:0: +371,292,353081,1,0,0:0:0:0: +450,211,353197,2,0,L|357:201,1,93.5,2|0,0:0|0:0,0:0:0:0: +191,152,353427,2,0,L|283:142,1,93.5,8|0,0:0|0:0,0:0:0:0: +393,31,353658,6,0,B|365:69|365:69|372:116,1,93.5,2|0,0:0|0:0,0:0:0:0: +489,256,353889,2,0,B|517:218|517:218|509:170,1,93.5,8|0,0:0|0:0,0:0:0:0: +357,201,354120,2,0,P|366:239|372:311,1,93.5,2|0,0:0|0:0,0:0:0:0: +498,96,354350,2,0,P|502:49|512:3,1,93.5,8|0,0:0|0:0,0:0:0:0: +512,333,354581,6,0,B|427:318|423:388|325:362,1,187,2|8,0:0|0:0,0:0:0:0: +284,258,354927,1,0,0:0:0:0: +228,334,355043,2,0,B|32:324,1,187,2|8,0:0|0:0,0:0:0:0: +5,239,355389,1,0,0:0:0:0: +199,79,355504,5,10,0:0:0:0: +110,108,355620,1,8,0:0:0:0: +208,112,355735,5,8,0:0:0:0: +124,116,355851,1,8,0:0:0:0: +211,141,355966,5,10,0:0:0:0: +139,124,356082,1,8,0:0:0:0: +210,164,356197,5,8,0:0:0:0: +153,133,356313,1,8,0:0:0:0: +90,211,356427,6,0,L|292:193,1,187,6|8,0:0|0:0,0:0:0:0: +329,116,356773,1,0,0:0:0:0: +450,258,356889,2,0,L|356:266,1,93.5,2|0,0:0|0:0,0:0:0:0: +414,101,357120,2,0,L|507:92,1,93.5,8|0,0:0|0:0,0:0:0:0: +304,355,357350,6,0,P|252:281|275:194,1,187,2|8,0:0|0:0,0:0:0:0: +329,116,357697,1,0,0:0:0:0: +110,47,357812,5,2,0:0:0:0: +147,134,357927,1,8,0:0:0:0: +93,210,358043,1,10,0:0:0:0: +130,297,358158,1,8,0:0:0:0: +304,355,358273,6,0,L|102:337,1,187,2|8,0:0|0:0,0:0:0:0: +30,374,358620,1,0,0:0:0:0: +0,202,358735,2,0,L|93:210,1,93.5,2|0,0:0|0:0,0:0:0:0: +218,58,358966,2,0,L|124:49,1,93.5,8|0,0:0|0:0,0:0:0:0: +265,250,359197,6,0,B|350:227|364:281|472:252,2,187,2|8|2,0:0|0:0|0:0,0:0:0:0: +202,180,359773,1,0,0:0:0:0: +280,128,359889,1,8,0:0:0:0: +218,58,360004,1,0,0:0:0:0: +407,0,360120,6,0,L|387:186,1,187,2|8,0:0|0:0,0:0:0:0: +449,257,360466,1,0,0:0:0:0: +304,355,360581,2,0,P|310:296|359:272,1,93.5,2|0,0:0|0:0,0:0:0:0: +479,178,360812,2,0,P|473:237|423:260,1,93.5,8|0,0:0|0:0,0:0:0:0: +280,128,361043,6,0,L|274:28,1,93.5,2|0,0:0|0:0,0:0:0:0: +193,261,361273,2,0,L|198:354,1,93.5,8|0,0:0|0:0,0:0:0:0: +36,373,361504,5,8,0:0:0:0: +74,286,361620,1,2,0:0:0:0: +8,219,361735,1,2,0:0:0:0: +46,134,361851,1,8,0:0:0:0: +193,261,361966,6,0,P|274:272|338:188,1,187,2|8,0:0|0:0,0:0:0:0: +280,128,362312,1,0,0:0:0:0: +136,99,362427,2,0,P|123:154|141:192,1,93.5,2|0,0:0|0:0,0:0:0:0: +304,355,362658,2,0,P|317:300|298:261,1,93.5,8|0,0:0|0:0,0:0:0:0: +291,256,362831,1,0,0:0:0:0: +278,244,362889,6,0,L|485:247,1,187,2|8,0:0|0:0,0:0:0:0: +202,180,363235,2,0,L|-5:177,1,187,2|2,0:0|0:0,0:0:0:0: +280,128,363581,2,0,L|383:126,1,93.5,8|0,0:0|0:0,0:0:0:0: +202,180,363812,6,0,B|158:268|240:272|190:359,2,187,2|8|2,0:0|0:0|0:0,0:0:0:0: +280,128,364389,1,0,0:0:0:0: +136,99,364504,2,0,P|123:44|141:5,1,93.5,8|0,0:0|0:0,0:0:0:0: +278,244,364735,6,0,P|291:299|272:337,1,93.5,2|0,0:0|0:0,0:0:0:0: +36,304,364966,2,0,B|50:297|50:297|51:307|51:307|59:297|59:297|60:306|60:306|68:296|68:296|69:305|69:305|77:295|77:295|78:305|78:305|85:294|85:294|86:304|86:304|94:294|94:294|95:303|95:303|103:293|103:293|104:302|104:302|112:292|112:292|113:302|113:302|121:291|121:291|121:301|121:301|129:290|129:290|130:300|130:300|138:290|138:290|139:299|139:299|147:289|147:289|148:299|148:299|156:288|156:288|156:298|156:298|164:287|164:287|165:297|165:297|173:287|173:287|174:296|174:296|182:286|182:286|183:295|183:295|198:289,1,374,8|0,0:0|0:0,0:0:0:0: +277,331,365543,1,0,0:0:0:0: +437,330,365658,6,0,P|467:262|450:218,1,93.5,2|0,0:0|0:0,0:0:0:0: +307,44,365889,2,0,P|277:112|294:156,1,93.5,8|0,0:0|0:0,0:0:0:0: +374,266,366120,1,2,0:0:0:0: +500,153,366235,2,0,L|516:35,2,93.5,0|8|0,0:0|0:0|0:0,0:0:0:0: +374,266,366581,6,0,L|386:358,1,93.5,2|0,0:0|0:0,0:0:0:0: +414,164,366812,2,0,P|322:168|265:263,1,187,8|2,0:0|0:0,0:0:0:0: +188,359,367158,1,0,0:0:0:0: +117,297,367273,2,0,P|115:271|108:189,1,93.5,8|0,0:0|0:0,0:0:0:0: +15,83,367504,6,0,B|192:130|204:-6|413:48,1,374,2|2,0:0|0:0,0:0:0:0: +468,13,368081,1,0,0:0:0:0: +445,104,368197,2,0,P|448:150|452:197,1,93.5,8|0,0:0|0:0,0:0:0:0: +356,295,368427,6,0,P|443:278|500:348,1,187,2|8,0:0|0:0,0:0:0:0: +284,353,368773,2,0,P|196:368|140:298,1,187,2|2,0:0|0:0,0:0:0:0: +99,213,369120,2,0,P|145:216|192:220,1,93.5,8|0,0:0|0:0,0:0:0:0: +378,41,369350,6,0,B|291:17|285:85|196:62,1,187,2|8,0:0|0:0,0:0:0:0: +111,24,369697,1,0,0:0:0:0: +17,161,369812,2,0,P|11:115|32:74,1,93.5,2|0,0:0|0:0,0:0:0:0: +152,211,370043,2,0,P|158:257|138:299,1,93.5,8|0,0:0|0:0,0:0:0:0: +5,384,370273,5,2,0:0:0:0: +58,268,370389,1,2,0:0:0:0: +130,372,370504,1,8,0:0:0:0: +183,256,370620,1,8,0:0:0:0: +187,237,370677,1,8,0:0:0:0: +191,219,370735,1,10,0:0:0:0: +196,201,370793,1,8,0:0:0:0: +200,183,370850,1,8,0:0:0:0: +205,165,370908,1,8,0:0:0:0: +209,146,370966,1,10,0:0:0:0: +111,24,371081,1,2,0:0:0:0: +197,62,371197,6,0,L|387:49,1,187,6|8,0:0|0:0,0:0:0:0: +315,322,371658,2,0,L|125:335,1,187,2|8,0:0|0:0,0:0:0:0: +457,193,372120,2,0,L|444:379,1,187,2|8,0:0|0:0,0:0:0:0: +55,191,372581,2,0,L|63:67,1,93.5,2|0,0:0|0:0,0:0:0:0: +68,4,372812,1,8,0:0:0:0: +152,46,372927,1,0,0:0:0:0: +186,263,373043,6,0,L|-4:276,1,187,6|8,0:0|0:0,0:0:0:0: +326,121,373504,2,0,L|516:108,1,187,2|8,0:0|0:0,0:0:0:0: +491,199,373850,1,0,0:0:0:0: +468,288,373966,2,0,L|282:301,1,187,2|8,0:0|0:0,0:0:0:0: +203,5,374427,2,0,L|328:-3,1,93.5,2|0,0:0|0:0,0:0:0:0: +389,13,374658,1,8,0:0:0:0: +329,84,374773,1,8,0:0:0:0: +327,102,374830,1,8,0:0:0:0: +326,121,374889,6,0,L|516:108,1,187,6|8,0:0|0:0,0:0:0:0: +227,377,375350,1,2,0:0:0:0: +138,348,375466,1,8,0:0:0:0: +138,254,375581,1,8,0:0:0:0: +227,225,375697,1,2,0:0:0:0: +282,301,375812,2,0,L|468:288,1,187,2|8,0:0|0:0,0:0:0:0: +230,83,376273,2,0,L|44:96,1,187,2|8,0:0|0:0,0:0:0:0: +11,185,376620,1,0,0:0:0:0: +303,212,376735,6,0,L|316:26,1,187,6|8,0:0|0:0,0:0:0:0: +43,96,377197,1,2,0:0:0:0: +72,7,377313,1,8,0:0:0:0: +166,7,377428,1,8,0:0:0:0: +195,96,377544,1,8,0:0:0:0: +119,151,377658,2,0,L|132:337,1,187,2|8,0:0|0:0,0:0:0:0: +439,382,378120,2,0,L|426:196,1,187,2|8,0:0|0:0,0:0:0:0: +348,10,378581,6,0,B|414:65|393:172|309:195|241:175|241:175|174:156|90:178|69:285|132:337,1,561,6|8,0:0|0:0,0:0:0:0: +444,354,379504,2,0,P|501:284|473:199,1,187,2|8,0:0|0:0,0:0:0:0: +348,10,379850,2,0,P|291:80|319:165,1,187,2|2,0:0|0:0,0:0:0:0: +408,139,380197,2,0,L|419:46,1,93.5,8|0,0:0|0:0,0:0:0:0: +396,231,380427,5,2,0:0:0:0: +396,231,380543,2,0,P|322:217|256:317,1,187,2|2,0:0|0:0,0:0:0:0: +324,358,380889,2,0,L|417:347,1,93.5,2|0,0:0|0:0,0:0:0:0: +255,294,381120,2,0,L|162:283,1,93.5,8|0,0:0|0:0,0:0:0:0: +32,66,381350,5,2,0:0:0:0: +32,66,381466,2,0,P|106:52|172:152,1,187,2|2,0:0|0:0,0:0:0:0: +104,193,381812,2,0,L|11:182,1,93.5,2|0,0:0|0:0,0:0:0:0: +173,129,382043,2,0,L|266:118,1,93.5,8|0,0:0|0:0,0:0:0:0: +490,320,382273,6,2,L|408:303,3,46.75,2|2|10|2,0:0|0:0|0:0|0:0,0:0:0:0: +427,332,382504,2,2,L|345:315,3,46.75,2|2|10|2,0:0|0:0|0:0|0:0,0:0:0:0: +349,341,382735,5,10,0:0:0:0: +364,312,382792,1,2,0:0:0:0: +365,280,382850,1,10,0:0:0:0: +351,251,382908,1,2,0:0:0:0: +325,232,382966,1,10,0:0:0:0: +293,227,383023,1,2,0:0:0:0: +267,208,383080,1,10,0:0:0:0: +253,179,383138,1,2,0:0:0:0: +254,147,383197,5,10,0:0:0:0: +290,174,383254,1,2,0:0:0:0: +303,218,383312,1,10,0:0:0:0: +288,262,383370,1,2,0:0:0:0: +250,287,383427,1,10,0:0:0:0: +204,280,383484,1,2,0:0:0:0: +171,248,383542,1,10,0:0:0:0: +163,203,383600,1,2,0:0:0:0: +182,161,383657,5,10,0:0:0:0: +184,102,383715,1,2,0:0:0:0: +144,58,383773,1,10,0:0:0:0: +82,54,383831,1,2,0:0:0:0: +35,93,383889,1,10,0:0:0:0: +30,153,383947,1,2,0:0:0:0: +58,205,384004,1,10,0:0:0:0: +57,266,384062,1,2,0:0:0:0: +18,313,384120,5,14,0:0:0:0: diff --git a/osu.Game.Rulesets.Mania/Tests/ManiaBeatmapConversionTest.cs b/osu.Game.Rulesets.Mania/Tests/ManiaBeatmapConversionTest.cs new file mode 100644 index 0000000000..855a41aa9f --- /dev/null +++ b/osu.Game.Rulesets.Mania/Tests/ManiaBeatmapConversionTest.cs @@ -0,0 +1,55 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using System; +using NUnit.Framework; +using osu.Framework.MathUtils; +using osu.Game.Beatmaps; +using osu.Game.Rulesets.Mania.Beatmaps; +using osu.Game.Rulesets.Mania.Objects; +using osu.Game.Rulesets.Objects; +using osu.Game.Rulesets.Objects.Types; +using osu.Game.Tests.Beatmaps; + +namespace osu.Game.Rulesets.Mania.Tests +{ + public class ManiaBeatmapConversionTest : BeatmapConversionTest + { + protected override string ResourceAssembly => "osu.Game.Rulesets.Mania"; + + private bool isForCurrentRuleset; + + [TestCase(875945, false), NonParallelizable] + public void Test(int beatmapId, bool isForCurrentRuleset) + { + this.isForCurrentRuleset = isForCurrentRuleset; + base.Test(beatmapId); + } + + protected override ConvertValue CreateConvertValue(HitObject hitObject) => new ConvertValue + { + StartTime = hitObject.StartTime, + EndTime = (hitObject as IHasEndTime)?.EndTime ?? hitObject.StartTime, + Column = ((ManiaHitObject)hitObject).Column + }; + + protected override ITestableBeatmapConverter CreateConverter(Beatmap beatmap) => new ManiaBeatmapConverter(isForCurrentRuleset, beatmap); + } + + public struct ConvertValue : IEquatable + { + /// + /// A sane value to account for osu!stable using ints everwhere. + /// + private const float conversion_lenience = 2; + + public double StartTime; + public double EndTime; + public int Column; + + public bool Equals(ConvertValue other) + => Precision.AlmostEquals(StartTime, other.StartTime) + && Precision.AlmostEquals(EndTime, other.EndTime, conversion_lenience) + && Column == other.Column; + } +} diff --git a/osu.Game.Rulesets.Mania/osu.Game.Rulesets.Mania.csproj b/osu.Game.Rulesets.Mania/osu.Game.Rulesets.Mania.csproj index a2e21e2053..bfb2fe6be3 100644 --- a/osu.Game.Rulesets.Mania/osu.Game.Rulesets.Mania.csproj +++ b/osu.Game.Rulesets.Mania/osu.Game.Rulesets.Mania.csproj @@ -126,6 +126,7 @@ + @@ -159,6 +160,10 @@ + + + + From 573d6d1b5f52c9027f73b6036799015956e5b11c Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Fri, 2 Mar 2018 02:02:09 +0900 Subject: [PATCH 242/544] Allow multiple mappings to be generated for a single hitobject --- .../Tests/ManiaBeatmapConversionTest.cs | 14 +++++++----- .../Tests/OsuBeatmapConversionTest.cs | 5 +++-- .../Tests/TaikoBeatmapConversionTest.cs | 22 +++++++++++-------- .../Tests/Beatmaps/BeatmapConversionTest.cs | 4 ++-- 4 files changed, 27 insertions(+), 18 deletions(-) diff --git a/osu.Game.Rulesets.Mania/Tests/ManiaBeatmapConversionTest.cs b/osu.Game.Rulesets.Mania/Tests/ManiaBeatmapConversionTest.cs index 855a41aa9f..3c11478eab 100644 --- a/osu.Game.Rulesets.Mania/Tests/ManiaBeatmapConversionTest.cs +++ b/osu.Game.Rulesets.Mania/Tests/ManiaBeatmapConversionTest.cs @@ -2,6 +2,7 @@ // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using System; +using System.Collections.Generic; using NUnit.Framework; using osu.Framework.MathUtils; using osu.Game.Beatmaps; @@ -26,12 +27,15 @@ namespace osu.Game.Rulesets.Mania.Tests base.Test(beatmapId); } - protected override ConvertValue CreateConvertValue(HitObject hitObject) => new ConvertValue + protected override IEnumerable CreateConvertValue(HitObject hitObject) { - StartTime = hitObject.StartTime, - EndTime = (hitObject as IHasEndTime)?.EndTime ?? hitObject.StartTime, - Column = ((ManiaHitObject)hitObject).Column - }; + yield return new ConvertValue + { + StartTime = hitObject.StartTime, + EndTime = (hitObject as IHasEndTime)?.EndTime ?? hitObject.StartTime, + Column = ((ManiaHitObject)hitObject).Column + }; + } protected override ITestableBeatmapConverter CreateConverter(Beatmap beatmap) => new ManiaBeatmapConverter(isForCurrentRuleset, beatmap); } diff --git a/osu.Game.Rulesets.Osu/Tests/OsuBeatmapConversionTest.cs b/osu.Game.Rulesets.Osu/Tests/OsuBeatmapConversionTest.cs index 2d4d188f3a..900b4bcb9b 100644 --- a/osu.Game.Rulesets.Osu/Tests/OsuBeatmapConversionTest.cs +++ b/osu.Game.Rulesets.Osu/Tests/OsuBeatmapConversionTest.cs @@ -2,6 +2,7 @@ // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using System; +using System.Collections.Generic; using NUnit.Framework; using osu.Framework.MathUtils; using osu.Game.Beatmaps; @@ -24,12 +25,12 @@ namespace osu.Game.Rulesets.Osu.Tests base.Test(beatmapId); } - protected override ConvertValue CreateConvertValue(HitObject hitObject) + protected override IEnumerable CreateConvertValue(HitObject hitObject) { var startPosition = (hitObject as IHasPosition)?.Position ?? new Vector2(256, 192); var endPosition = (hitObject as Slider)?.EndPosition ?? startPosition; - return new ConvertValue + yield return new ConvertValue { StartTime = hitObject.StartTime, EndTime = (hitObject as IHasEndTime)?.EndTime ?? hitObject.StartTime, diff --git a/osu.Game.Rulesets.Taiko/Tests/TaikoBeatmapConversionTest.cs b/osu.Game.Rulesets.Taiko/Tests/TaikoBeatmapConversionTest.cs index 7f7acbea58..0522e01d19 100644 --- a/osu.Game.Rulesets.Taiko/Tests/TaikoBeatmapConversionTest.cs +++ b/osu.Game.Rulesets.Taiko/Tests/TaikoBeatmapConversionTest.cs @@ -2,6 +2,7 @@ // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using System; +using System.Collections.Generic; using NUnit.Framework; using osu.Framework.MathUtils; using osu.Game.Beatmaps; @@ -26,16 +27,19 @@ namespace osu.Game.Rulesets.Taiko.Tests base.Test(beatmapId); } - protected override ConvertValue CreateConvertValue(HitObject hitObject) => new ConvertValue + protected override IEnumerable CreateConvertValue(HitObject hitObject) { - StartTime = hitObject.StartTime, - EndTime = (hitObject as IHasEndTime)?.EndTime ?? hitObject.StartTime, - IsRim = hitObject is RimHit, - IsCentre = hitObject is CentreHit, - IsDrumRoll = hitObject is DrumRoll, - IsSwell = hitObject is Swell, - IsStrong = ((TaikoHitObject)hitObject).IsStrong - }; + yield return new ConvertValue + { + StartTime = hitObject.StartTime, + EndTime = (hitObject as IHasEndTime)?.EndTime ?? hitObject.StartTime, + IsRim = hitObject is RimHit, + IsCentre = hitObject is CentreHit, + IsDrumRoll = hitObject is DrumRoll, + IsSwell = hitObject is Swell, + IsStrong = ((TaikoHitObject)hitObject).IsStrong + }; + } protected override ITestableBeatmapConverter CreateConverter(Beatmap beatmap) => new TaikoBeatmapConverter(isForCurrentRuleset); } diff --git a/osu.Game/Tests/Beatmaps/BeatmapConversionTest.cs b/osu.Game/Tests/Beatmaps/BeatmapConversionTest.cs index d718b6b533..5b5f6200b2 100644 --- a/osu.Game/Tests/Beatmaps/BeatmapConversionTest.cs +++ b/osu.Game/Tests/Beatmaps/BeatmapConversionTest.cs @@ -88,7 +88,7 @@ namespace osu.Game.Tests.Beatmaps var mapping = new ConvertMapping { StartTime = orig.StartTime }; foreach (var obj in converted) - mapping.Objects.Add(CreateConvertValue(obj)); + mapping.Objects.AddRange(CreateConvertValue(obj)); result.Mappings.Add(mapping); }; @@ -121,7 +121,7 @@ namespace osu.Game.Tests.Beatmaps return Assembly.LoadFrom(Path.Combine(localPath, $"{ResourceAssembly}.dll")).GetManifestResourceStream($@"{ResourceAssembly}.Resources.{name}"); } - protected abstract TConvertValue CreateConvertValue(HitObject hitObject); + protected abstract IEnumerable CreateConvertValue(HitObject hitObject); protected abstract ITestableBeatmapConverter CreateConverter(Beatmap beatmap); private class ConvertMapping From bae598b9f498bc0d6db1172f5eba695ff9055668 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Fri, 2 Mar 2018 02:29:55 +0900 Subject: [PATCH 243/544] Add a catch beatmap conversion testcase --- .../Beatmaps/875945-expected-conversion.json | 1 + .../Resources/Testing/Beatmaps/875945.osu | 1824 +++++++++++++++++ .../Tests/CatchBeatmapConversionTest.cs | 67 + .../osu.Game.Rulesets.Catch.csproj | 5 + 4 files changed, 1897 insertions(+) create mode 100644 osu.Game.Rulesets.Catch/Resources/Testing/Beatmaps/875945-expected-conversion.json create mode 100644 osu.Game.Rulesets.Catch/Resources/Testing/Beatmaps/875945.osu create mode 100644 osu.Game.Rulesets.Catch/Tests/CatchBeatmapConversionTest.cs diff --git a/osu.Game.Rulesets.Catch/Resources/Testing/Beatmaps/875945-expected-conversion.json b/osu.Game.Rulesets.Catch/Resources/Testing/Beatmaps/875945-expected-conversion.json new file mode 100644 index 0000000000..5783ef5f2f --- /dev/null +++ b/osu.Game.Rulesets.Catch/Resources/Testing/Beatmaps/875945-expected-conversion.json @@ -0,0 +1 @@ +{"Mappings":[{"StartTime":6590.0,"Objects":[{"StartTime":6590.0,"Position":88.0},{"StartTime":6647.0,"Position":83.08524},{"StartTime":6705.0,"Position":97.61914},{"StartTime":6762.0,"Position":116.238136},{"StartTime":6820.0,"Position":145.302155},{"StartTime":6878.0,"Position":158.60434},{"StartTime":6935.0,"Position":153.908829},{"StartTime":6993.0,"Position":163.564133},{"StartTime":7051.0,"Position":176.301346},{"StartTime":7108.0,"Position":179.8428},{"StartTime":7166.0,"Position":187.514572},{"StartTime":7224.0,"Position":207.029556},{"StartTime":7282.0,"Position":236.314514},{"StartTime":7339.0,"Position":237.128815},{"StartTime":7397.0,"Position":234.809814},{"StartTime":7455.0,"Position":259.138367},{"StartTime":7513.0,"Position":264.3658},{"StartTime":7570.0,"Position":265.7322},{"StartTime":7628.0,"Position":303.613647},{"StartTime":7685.0,"Position":313.604279},{"StartTime":7743.0,"Position":321.043335},{"StartTime":7801.0,"Position":311.664124},{"StartTime":7858.0,"Position":314.187317},{"StartTime":7916.0,"Position":355.936859},{"StartTime":7974.0,"Position":354.625977},{"StartTime":8051.0,"Position":373.933746},{"StartTime":8129.0,"Position":370.0712},{"StartTime":8206.0,"Position":395.554626},{"StartTime":8320.0,"Position":420.097382}]},{"StartTime":8436.0,"Objects":[{"StartTime":8436.0,"Position":396.0},{"StartTime":8493.0,"Position":394.7825},{"StartTime":8551.0,"Position":407.601776},{"StartTime":8608.0,"Position":374.3075},{"StartTime":8666.0,"Position":364.0566},{"StartTime":8724.0,"Position":359.088959},{"StartTime":8781.0,"Position":378.792633},{"StartTime":8839.0,"Position":372.283325},{"StartTime":8897.0,"Position":343.934357},{"StartTime":8954.0,"Position":325.449036},{"StartTime":9012.0,"Position":319.79303},{"StartTime":9070.0,"Position":328.5426},{"StartTime":9128.0,"Position":293.138641},{"StartTime":9185.0,"Position":295.05484},{"StartTime":9243.0,"Position":295.250916},{"StartTime":9301.0,"Position":293.307},{"StartTime":9359.0,"Position":272.170135},{"StartTime":9416.0,"Position":285.38324},{"StartTime":9474.0,"Position":287.529724},{"StartTime":9531.0,"Position":281.927765},{"StartTime":9589.0,"Position":260.360565},{"StartTime":9647.0,"Position":288.73526},{"StartTime":9704.0,"Position":279.7069},{"StartTime":9762.0,"Position":286.166},{"StartTime":9820.0,"Position":311.825378},{"StartTime":9897.0,"Position":318.987823},{"StartTime":9975.0,"Position":358.7278},{"StartTime":10052.0,"Position":360.687378},{"StartTime":10166.0,"Position":376.979553}]},{"StartTime":10282.0,"Objects":[{"StartTime":10282.0,"Position":472.0},{"StartTime":10339.0,"Position":461.751862},{"StartTime":10397.0,"Position":471.600067},{"StartTime":10454.0,"Position":458.4382},{"StartTime":10512.0,"Position":465.3091},{"StartTime":10570.0,"Position":443.2122},{"StartTime":10627.0,"Position":440.2789},{"StartTime":10685.0,"Position":458.408447},{"StartTime":10743.0,"Position":443.645142},{"StartTime":10800.0,"Position":416.286163},{"StartTime":10858.0,"Position":422.982971},{"StartTime":10916.0,"Position":408.064972},{"StartTime":10974.0,"Position":417.476044},{"StartTime":11031.0,"Position":397.554626},{"StartTime":11089.0,"Position":405.9712},{"StartTime":11147.0,"Position":360.9966},{"StartTime":11205.0,"Position":366.705933},{"StartTime":11262.0,"Position":374.373932},{"StartTime":11320.0,"Position":353.699646},{"StartTime":11377.0,"Position":342.154724},{"StartTime":11435.0,"Position":324.4215},{"StartTime":11493.0,"Position":315.801636},{"StartTime":11550.0,"Position":313.5487},{"StartTime":11608.0,"Position":271.382233},{"StartTime":11666.0,"Position":275.551453},{"StartTime":11743.0,"Position":251.860443},{"StartTime":11821.0,"Position":253.941635},{"StartTime":11898.0,"Position":246.294464},{"StartTime":12012.0,"Position":222.380341}]},{"StartTime":12128.0,"Objects":[{"StartTime":12128.0,"Position":277.0},{"StartTime":12185.0,"Position":286.367584},{"StartTime":12243.0,"Position":279.495453},{"StartTime":12300.0,"Position":288.1463},{"StartTime":12358.0,"Position":315.20166},{"StartTime":12416.0,"Position":333.197174},{"StartTime":12473.0,"Position":337.572571},{"StartTime":12531.0,"Position":354.3016},{"StartTime":12589.0,"Position":353.764526},{"StartTime":12646.0,"Position":345.45694},{"StartTime":12704.0,"Position":357.232819},{"StartTime":12762.0,"Position":385.726257},{"StartTime":12820.0,"Position":397.4973},{"StartTime":12877.0,"Position":387.321167},{"StartTime":12935.0,"Position":400.226685},{"StartTime":12993.0,"Position":395.857452},{"StartTime":13051.0,"Position":396.461},{"StartTime":13108.0,"Position":375.792877},{"StartTime":13166.0,"Position":398.245056},{"StartTime":13223.0,"Position":360.8882},{"StartTime":13281.0,"Position":377.927124},{"StartTime":13339.0,"Position":371.7029},{"StartTime":13396.0,"Position":340.773041},{"StartTime":13454.0,"Position":331.170654},{"StartTime":13512.0,"Position":326.4561},{"StartTime":13589.0,"Position":317.45755},{"StartTime":13667.0,"Position":282.7605},{"StartTime":13744.0,"Position":294.553864},{"StartTime":13858.0,"Position":275.41626}]},{"StartTime":13974.0,"Objects":[{"StartTime":13974.0,"Position":224.0},{"StartTime":14031.0,"Position":242.10614},{"StartTime":14089.0,"Position":231.030609},{"StartTime":14146.0,"Position":251.547287},{"StartTime":14204.0,"Position":268.8433},{"StartTime":14262.0,"Position":261.7123},{"StartTime":14319.0,"Position":277.927216},{"StartTime":14377.0,"Position":274.7192},{"StartTime":14435.0,"Position":298.902283},{"StartTime":14492.0,"Position":329.133179},{"StartTime":14550.0,"Position":318.761},{"StartTime":14608.0,"Position":333.488434},{"StartTime":14666.0,"Position":327.233429},{"StartTime":14723.0,"Position":342.709534},{"StartTime":14781.0,"Position":367.243256},{"StartTime":14839.0,"Position":396.5221},{"StartTime":14897.0,"Position":390.511658},{"StartTime":14954.0,"Position":411.8796},{"StartTime":15012.0,"Position":408.991516},{"StartTime":15069.0,"Position":437.3712},{"StartTime":15127.0,"Position":420.3055},{"StartTime":15185.0,"Position":452.5711},{"StartTime":15242.0,"Position":431.9301},{"StartTime":15300.0,"Position":440.694916},{"StartTime":15358.0,"Position":457.511383},{"StartTime":15435.0,"Position":451.915558},{"StartTime":15513.0,"Position":484.714874},{"StartTime":15590.0,"Position":459.728149},{"StartTime":15704.0,"Position":473.000916}]},{"StartTime":15820.0,"Objects":[{"StartTime":15820.0,"Position":496.0},{"StartTime":15877.0,"Position":483.522858},{"StartTime":15935.0,"Position":459.817322},{"StartTime":15992.0,"Position":455.2906},{"StartTime":16050.0,"Position":441.544861},{"StartTime":16108.0,"Position":428.790771},{"StartTime":16165.0,"Position":421.243561},{"StartTime":16223.0,"Position":409.5152},{"StartTime":16281.0,"Position":402.8313},{"StartTime":16338.0,"Position":394.4202},{"StartTime":16396.0,"Position":367.913544},{"StartTime":16454.0,"Position":356.550537},{"StartTime":16512.0,"Position":342.3495},{"StartTime":16569.0,"Position":342.516174},{"StartTime":16627.0,"Position":338.6564},{"StartTime":16685.0,"Position":305.922882},{"StartTime":16743.0,"Position":314.2508},{"StartTime":16800.0,"Position":316.746429},{"StartTime":16858.0,"Position":289.968872},{"StartTime":16915.0,"Position":298.2334},{"StartTime":16973.0,"Position":262.136932},{"StartTime":17031.0,"Position":248.865051},{"StartTime":17088.0,"Position":234.631226},{"StartTime":17146.0,"Position":255.076126},{"StartTime":17204.0,"Position":225.427078},{"StartTime":17281.0,"Position":228.8747},{"StartTime":17359.0,"Position":177.073364},{"StartTime":17436.0,"Position":172.47197},{"StartTime":17550.0,"Position":155.424408}]},{"StartTime":17666.0,"Objects":[{"StartTime":17666.0,"Position":76.0},{"StartTime":17723.0,"Position":87.77035},{"StartTime":17781.0,"Position":98.64252},{"StartTime":17838.0,"Position":77.40019},{"StartTime":17896.0,"Position":79.17106},{"StartTime":17954.0,"Position":75.9109},{"StartTime":18011.0,"Position":98.67864},{"StartTime":18069.0,"Position":81.55746},{"StartTime":18127.0,"Position":94.6412},{"StartTime":18184.0,"Position":106.02198},{"StartTime":18242.0,"Position":80.74162},{"StartTime":18300.0,"Position":80.8934555},{"StartTime":18358.0,"Position":94.54145},{"StartTime":18415.0,"Position":89.81274},{"StartTime":18473.0,"Position":83.62778},{"StartTime":18531.0,"Position":70.08861},{"StartTime":18589.0,"Position":67.22952},{"StartTime":18646.0,"Position":56.1856537},{"StartTime":18704.0,"Position":49.79115},{"StartTime":18761.0,"Position":70.26942},{"StartTime":18819.0,"Position":40.4434967},{"StartTime":18877.0,"Position":46.63468},{"StartTime":18934.0,"Position":68.05432},{"StartTime":18992.0,"Position":44.13054},{"StartTime":19050.0,"Position":67.82982},{"StartTime":19103.0,"Position":78.455},{"StartTime":19156.0,"Position":79.6943054},{"StartTime":19209.0,"Position":100.563232},{"StartTime":19263.0,"Position":101.227158},{"StartTime":19316.0,"Position":127.280083},{"StartTime":19369.0,"Position":110.728683},{"StartTime":19422.0,"Position":117.413574},{"StartTime":19512.0,"Position":151.558578}]},{"StartTime":19628.0,"Objects":[{"StartTime":19628.0,"Position":175.0},{"StartTime":19721.0,"Position":327.0},{"StartTime":19815.0,"Position":472.0},{"StartTime":19909.0,"Position":95.0},{"StartTime":20003.0,"Position":295.0},{"StartTime":20096.0,"Position":3.0},{"StartTime":20190.0,"Position":261.0},{"StartTime":20284.0,"Position":125.0},{"StartTime":20378.0,"Position":467.0},{"StartTime":20471.0,"Position":18.0},{"StartTime":20565.0,"Position":269.0},{"StartTime":20659.0,"Position":97.0},{"StartTime":20753.0,"Position":26.0},{"StartTime":20846.0,"Position":406.0},{"StartTime":20940.0,"Position":371.0},{"StartTime":21034.0,"Position":419.0},{"StartTime":21128.0,"Position":100.0}]},{"StartTime":21359.0,"Objects":[{"StartTime":21359.0,"Position":213.0},{"StartTime":21412.0,"Position":195.265717},{"StartTime":21465.0,"Position":172.531433},{"StartTime":21518.0,"Position":182.79715},{"StartTime":21571.0,"Position":165.062866},{"StartTime":21624.0,"Position":140.328583},{"StartTime":21677.0,"Position":133.5943},{"StartTime":21730.0,"Position":143.860016},{"StartTime":21820.0,"Position":119.631989}]},{"StartTime":22282.0,"Objects":[{"StartTime":22282.0,"Position":300.0},{"StartTime":22335.0,"Position":308.727142},{"StartTime":22388.0,"Position":315.4543},{"StartTime":22441.0,"Position":319.181458},{"StartTime":22494.0,"Position":333.90863},{"StartTime":22547.0,"Position":347.635773},{"StartTime":22600.0,"Position":353.362946},{"StartTime":22653.0,"Position":375.0901},{"StartTime":22743.0,"Position":393.30603}]},{"StartTime":23205.0,"Objects":[{"StartTime":23205.0,"Position":233.0},{"StartTime":23258.0,"Position":208.265717},{"StartTime":23311.0,"Position":212.531433},{"StartTime":23364.0,"Position":215.79715},{"StartTime":23417.0,"Position":179.062866},{"StartTime":23470.0,"Position":173.328583},{"StartTime":23523.0,"Position":185.5943},{"StartTime":23576.0,"Position":138.860016},{"StartTime":23666.0,"Position":139.631989}]},{"StartTime":24128.0,"Objects":[{"StartTime":24128.0,"Position":280.0},{"StartTime":24181.0,"Position":305.727142},{"StartTime":24234.0,"Position":319.4543},{"StartTime":24287.0,"Position":295.181458},{"StartTime":24340.0,"Position":306.90863},{"StartTime":24393.0,"Position":345.635773},{"StartTime":24446.0,"Position":356.362946},{"StartTime":24499.0,"Position":370.0901},{"StartTime":24589.0,"Position":373.30603}]},{"StartTime":25051.0,"Objects":[{"StartTime":25051.0,"Position":509.0},{"StartTime":25108.0,"Position":489.511871},{"StartTime":25166.0,"Position":471.778442},{"StartTime":25223.0,"Position":470.23056},{"StartTime":25281.0,"Position":475.5067},{"StartTime":25339.0,"Position":449.876923},{"StartTime":25396.0,"Position":439.6286},{"StartTime":25454.0,"Position":421.4741},{"StartTime":25512.0,"Position":417.74292},{"StartTime":25569.0,"Position":416.689667},{"StartTime":25627.0,"Position":391.007355},{"StartTime":25685.0,"Position":404.830078},{"StartTime":25743.0,"Position":364.05426},{"StartTime":25800.0,"Position":370.67514},{"StartTime":25858.0,"Position":346.2108},{"StartTime":25916.0,"Position":342.618164},{"StartTime":25974.0,"Position":345.704254},{"StartTime":26031.0,"Position":328.489929},{"StartTime":26089.0,"Position":328.5705},{"StartTime":26146.0,"Position":305.2769},{"StartTime":26204.0,"Position":322.3134},{"StartTime":26262.0,"Position":302.982635},{"StartTime":26319.0,"Position":272.607971},{"StartTime":26377.0,"Position":285.90564},{"StartTime":26435.0,"Position":259.157166},{"StartTime":26532.0,"Position":228.552155},{"StartTime":26666.0,"Position":212.757538}]},{"StartTime":26897.0,"Objects":[{"StartTime":26897.0,"Position":139.0},{"StartTime":26954.0,"Position":133.361816},{"StartTime":27012.0,"Position":143.286819},{"StartTime":27069.0,"Position":161.413025},{"StartTime":27127.0,"Position":156.985428},{"StartTime":27185.0,"Position":187.844818},{"StartTime":27242.0,"Position":179.886826},{"StartTime":27300.0,"Position":192.294571},{"StartTime":27358.0,"Position":179.870422},{"StartTime":27415.0,"Position":165.7108},{"StartTime":27473.0,"Position":165.724655},{"StartTime":27531.0,"Position":195.002426},{"StartTime":27589.0,"Position":189.446243},{"StartTime":27646.0,"Position":163.145172},{"StartTime":27704.0,"Position":183.047577},{"StartTime":27762.0,"Position":177.146835},{"StartTime":27820.0,"Position":172.526245},{"StartTime":27873.0,"Position":153.507584},{"StartTime":27926.0,"Position":159.91684},{"StartTime":27979.0,"Position":157.750839},{"StartTime":28032.0,"Position":159.959869},{"StartTime":28085.0,"Position":134.653137},{"StartTime":28138.0,"Position":146.842239},{"StartTime":28191.0,"Position":130.478638},{"StartTime":28281.0,"Position":118.957672}]},{"StartTime":28743.0,"Objects":[{"StartTime":28743.0,"Position":46.0},{"StartTime":28796.0,"Position":55.7339554},{"StartTime":28849.0,"Position":60.46791},{"StartTime":28902.0,"Position":76.20187},{"StartTime":28955.0,"Position":103.935829},{"StartTime":29008.0,"Position":116.669785},{"StartTime":29061.0,"Position":94.40374},{"StartTime":29114.0,"Position":103.137695},{"StartTime":29204.0,"Position":139.365158}]},{"StartTime":29666.0,"Objects":[{"StartTime":29666.0,"Position":280.0},{"StartTime":29719.0,"Position":281.272369},{"StartTime":29772.0,"Position":265.544739},{"StartTime":29825.0,"Position":227.817123},{"StartTime":29878.0,"Position":236.0895},{"StartTime":29931.0,"Position":211.361862},{"StartTime":29984.0,"Position":196.634247},{"StartTime":30037.0,"Position":208.906616},{"StartTime":30127.0,"Position":186.68988}]},{"StartTime":30589.0,"Objects":[{"StartTime":30589.0,"Position":26.0},{"StartTime":30642.0,"Position":38.7339554},{"StartTime":30695.0,"Position":64.46791},{"StartTime":30748.0,"Position":69.20187},{"StartTime":30801.0,"Position":70.93583},{"StartTime":30854.0,"Position":87.6697845},{"StartTime":30907.0,"Position":83.40374},{"StartTime":30960.0,"Position":102.137695},{"StartTime":31050.0,"Position":119.365158}]},{"StartTime":31513.0,"Objects":[{"StartTime":31513.0,"Position":300.0},{"StartTime":31566.0,"Position":273.272369},{"StartTime":31619.0,"Position":259.544739},{"StartTime":31672.0,"Position":247.817108},{"StartTime":31725.0,"Position":260.089478},{"StartTime":31778.0,"Position":246.361862},{"StartTime":31831.0,"Position":245.634247},{"StartTime":31884.0,"Position":206.906616},{"StartTime":31974.0,"Position":206.68988}]},{"StartTime":32436.0,"Objects":[{"StartTime":32436.0,"Position":0.0},{"StartTime":32493.0,"Position":8.481003},{"StartTime":32551.0,"Position":17.2065411},{"StartTime":32608.0,"Position":36.75175},{"StartTime":32666.0,"Position":63.492},{"StartTime":32724.0,"Position":69.1785355},{"StartTime":32781.0,"Position":64.5525742},{"StartTime":32839.0,"Position":67.93051},{"StartTime":32897.0,"Position":92.01424},{"StartTime":32954.0,"Position":104.527992},{"StartTime":33012.0,"Position":108.767555},{"StartTime":33070.0,"Position":115.489395},{"StartTime":33128.0,"Position":142.74057},{"StartTime":33185.0,"Position":130.392532},{"StartTime":33243.0,"Position":167.886856},{"StartTime":33301.0,"Position":144.19075},{"StartTime":33359.0,"Position":165.439865},{"StartTime":33416.0,"Position":187.637711},{"StartTime":33474.0,"Position":187.212952},{"StartTime":33531.0,"Position":180.968018},{"StartTime":33589.0,"Position":206.289978},{"StartTime":33647.0,"Position":212.1045},{"StartTime":33704.0,"Position":201.208252},{"StartTime":33762.0,"Position":233.917343},{"StartTime":33820.0,"Position":241.988678},{"StartTime":33873.0,"Position":268.349731},{"StartTime":33926.0,"Position":255.874725},{"StartTime":33979.0,"Position":263.512756},{"StartTime":34033.0,"Position":291.417633},{"StartTime":34086.0,"Position":277.149475},{"StartTime":34139.0,"Position":292.8848},{"StartTime":34192.0,"Position":324.60495},{"StartTime":34282.0,"Position":334.7409}]},{"StartTime":35205.0,"Objects":[{"StartTime":35205.0,"Position":334.0},{"StartTime":35262.0,"Position":340.7383},{"StartTime":35320.0,"Position":340.454468},{"StartTime":35377.0,"Position":330.19278},{"StartTime":35435.0,"Position":310.908936},{"StartTime":35493.0,"Position":342.625122},{"StartTime":35550.0,"Position":329.3634},{"StartTime":35608.0,"Position":326.0796},{"StartTime":35666.0,"Position":323.795746},{"StartTime":35743.0,"Position":339.091339},{"StartTime":35821.0,"Position":332.3648},{"StartTime":35898.0,"Position":326.660431},{"StartTime":36012.0,"Position":316.137024}]},{"StartTime":36128.0,"Objects":[{"StartTime":36128.0,"Position":396.0},{"StartTime":36205.0,"Position":424.562164},{"StartTime":36283.0,"Position":411.8008},{"StartTime":36360.0,"Position":445.324},{"StartTime":36474.0,"Position":455.6553}]},{"StartTime":36590.0,"Objects":[{"StartTime":36590.0,"Position":508.0},{"StartTime":36647.0,"Position":507.608643},{"StartTime":36705.0,"Position":467.976624},{"StartTime":36762.0,"Position":491.5103},{"StartTime":36820.0,"Position":467.808167},{"StartTime":36878.0,"Position":439.079285},{"StartTime":36935.0,"Position":450.5368},{"StartTime":36993.0,"Position":418.7871},{"StartTime":37051.0,"Position":415.0512},{"StartTime":37108.0,"Position":400.549622},{"StartTime":37166.0,"Position":374.909882},{"StartTime":37224.0,"Position":360.366669},{"StartTime":37282.0,"Position":351.960266},{"StartTime":37339.0,"Position":373.927246},{"StartTime":37397.0,"Position":327.92276},{"StartTime":37455.0,"Position":355.1943},{"StartTime":37513.0,"Position":325.7901},{"StartTime":37570.0,"Position":315.897064},{"StartTime":37628.0,"Position":301.1828},{"StartTime":37685.0,"Position":282.9958},{"StartTime":37743.0,"Position":273.99173},{"StartTime":37801.0,"Position":296.2926},{"StartTime":37858.0,"Position":255.011658},{"StartTime":37916.0,"Position":280.795471},{"StartTime":37974.0,"Position":254.726242},{"StartTime":38031.0,"Position":248.885468},{"StartTime":38089.0,"Position":254.920837},{"StartTime":38147.0,"Position":247.9064},{"StartTime":38205.0,"Position":226.7846},{"StartTime":38262.0,"Position":210.6326},{"StartTime":38320.0,"Position":196.086411},{"StartTime":38378.0,"Position":206.264862},{"StartTime":38436.0,"Position":188.119415},{"StartTime":38493.0,"Position":166.78624},{"StartTime":38551.0,"Position":157.938934},{"StartTime":38608.0,"Position":173.9212},{"StartTime":38666.0,"Position":152.396286},{"StartTime":38724.0,"Position":144.574},{"StartTime":38781.0,"Position":139.691086},{"StartTime":38839.0,"Position":106.411957},{"StartTime":38897.0,"Position":103.968422},{"StartTime":38950.0,"Position":85.40208},{"StartTime":39003.0,"Position":75.759964},{"StartTime":39056.0,"Position":80.06977},{"StartTime":39110.0,"Position":57.1452141},{"StartTime":39163.0,"Position":66.4100647},{"StartTime":39216.0,"Position":26.6742554},{"StartTime":39269.0,"Position":30.94808},{"StartTime":39359.0,"Position":10.77596}]},{"StartTime":39820.0,"Objects":[{"StartTime":39820.0,"Position":10.0},{"StartTime":39873.0,"Position":39.7053146},{"StartTime":39926.0,"Position":31.4106255},{"StartTime":39979.0,"Position":48.1159363},{"StartTime":40032.0,"Position":35.82125},{"StartTime":40085.0,"Position":56.52656},{"StartTime":40138.0,"Position":82.23187},{"StartTime":40191.0,"Position":64.93718},{"StartTime":40281.0,"Position":103.116005}]},{"StartTime":40743.0,"Objects":[{"StartTime":40743.0,"Position":233.0},{"StartTime":40796.0,"Position":207.2947},{"StartTime":40849.0,"Position":214.589371},{"StartTime":40902.0,"Position":212.884064},{"StartTime":40955.0,"Position":200.178741},{"StartTime":41008.0,"Position":185.473434},{"StartTime":41061.0,"Position":163.768127},{"StartTime":41114.0,"Position":149.0628},{"StartTime":41204.0,"Position":139.884}]},{"StartTime":41666.0,"Objects":[{"StartTime":41666.0,"Position":268.0},{"StartTime":41723.0,"Position":293.498932},{"StartTime":41781.0,"Position":294.1996},{"StartTime":41838.0,"Position":320.698517},{"StartTime":41896.0,"Position":319.3992},{"StartTime":41954.0,"Position":319.099854},{"StartTime":42011.0,"Position":354.5988},{"StartTime":42069.0,"Position":351.299438},{"StartTime":42127.0,"Position":361.000122},{"StartTime":42180.0,"Position":387.6921},{"StartTime":42233.0,"Position":401.3841},{"StartTime":42286.0,"Position":382.07608},{"StartTime":42340.0,"Position":415.9698},{"StartTime":42393.0,"Position":400.6618},{"StartTime":42446.0,"Position":441.35376},{"StartTime":42499.0,"Position":448.045776},{"StartTime":42589.0,"Position":454.201965}]},{"StartTime":43051.0,"Objects":[{"StartTime":43051.0,"Position":271.0},{"StartTime":43148.0,"Position":248.313141},{"StartTime":43281.0,"Position":253.544708}]},{"StartTime":43513.0,"Objects":[{"StartTime":43513.0,"Position":268.0}]},{"StartTime":43628.0,"Objects":[{"StartTime":43628.0,"Position":408.0},{"StartTime":43712.0,"Position":396.0},{"StartTime":43797.0,"Position":293.0},{"StartTime":43882.0,"Position":157.0},{"StartTime":43966.0,"Position":172.0},{"StartTime":44051.0,"Position":110.0},{"StartTime":44136.0,"Position":285.0},{"StartTime":44221.0,"Position":73.0},{"StartTime":44305.0,"Position":118.0},{"StartTime":44390.0,"Position":161.0},{"StartTime":44475.0,"Position":222.0},{"StartTime":44560.0,"Position":461.0},{"StartTime":44644.0,"Position":234.0},{"StartTime":44729.0,"Position":99.0},{"StartTime":44814.0,"Position":219.0},{"StartTime":44899.0,"Position":395.0},{"StartTime":44983.0,"Position":390.0},{"StartTime":45068.0,"Position":496.0},{"StartTime":45153.0,"Position":412.0},{"StartTime":45237.0,"Position":362.0},{"StartTime":45322.0,"Position":3.0},{"StartTime":45407.0,"Position":116.0},{"StartTime":45492.0,"Position":339.0},{"StartTime":45576.0,"Position":487.0},{"StartTime":45661.0,"Position":447.0},{"StartTime":45746.0,"Position":58.0},{"StartTime":45831.0,"Position":235.0},{"StartTime":45915.0,"Position":263.0},{"StartTime":46000.0,"Position":279.0},{"StartTime":46085.0,"Position":53.0},{"StartTime":46170.0,"Position":74.0},{"StartTime":46254.0,"Position":234.0},{"StartTime":46339.0,"Position":215.0},{"StartTime":46424.0,"Position":79.0},{"StartTime":46508.0,"Position":335.0},{"StartTime":46593.0,"Position":453.0},{"StartTime":46678.0,"Position":380.0},{"StartTime":46763.0,"Position":428.0},{"StartTime":46847.0,"Position":323.0},{"StartTime":46932.0,"Position":350.0},{"StartTime":47017.0,"Position":363.0},{"StartTime":47102.0,"Position":294.0},{"StartTime":47186.0,"Position":278.0},{"StartTime":47271.0,"Position":111.0},{"StartTime":47356.0,"Position":173.0},{"StartTime":47441.0,"Position":362.0},{"StartTime":47525.0,"Position":377.0},{"StartTime":47610.0,"Position":87.0},{"StartTime":47695.0,"Position":268.0},{"StartTime":47779.0,"Position":67.0},{"StartTime":47864.0,"Position":43.0},{"StartTime":47949.0,"Position":275.0},{"StartTime":48034.0,"Position":190.0},{"StartTime":48118.0,"Position":219.0},{"StartTime":48203.0,"Position":72.0},{"StartTime":48288.0,"Position":103.0},{"StartTime":48373.0,"Position":143.0},{"StartTime":48457.0,"Position":439.0},{"StartTime":48542.0,"Position":446.0},{"StartTime":48627.0,"Position":59.0},{"StartTime":48712.0,"Position":297.0},{"StartTime":48796.0,"Position":295.0},{"StartTime":48881.0,"Position":494.0},{"StartTime":48966.0,"Position":483.0},{"StartTime":49051.0,"Position":477.0}]},{"StartTime":56435.0,"Objects":[{"StartTime":56435.0,"Position":45.0},{"StartTime":56532.0,"Position":132.88501},{"StartTime":56665.0,"Position":218.481384}]},{"StartTime":56781.0,"Objects":[{"StartTime":56781.0,"Position":214.0}]},{"StartTime":56897.0,"Objects":[{"StartTime":56897.0,"Position":214.0},{"StartTime":57012.0,"Position":192.823029}]},{"StartTime":57127.0,"Objects":[{"StartTime":57127.0,"Position":336.0},{"StartTime":57242.0,"Position":313.87915}]},{"StartTime":57358.0,"Objects":[{"StartTime":57358.0,"Position":319.0},{"StartTime":57473.0,"Position":406.663483}]},{"StartTime":57589.0,"Objects":[{"StartTime":57589.0,"Position":214.0},{"StartTime":57704.0,"Position":126.336525}]},{"StartTime":57820.0,"Objects":[{"StartTime":57820.0,"Position":58.0}]},{"StartTime":57935.0,"Objects":[{"StartTime":57935.0,"Position":165.0}]},{"StartTime":58051.0,"Objects":[{"StartTime":58051.0,"Position":263.0}]},{"StartTime":58166.0,"Objects":[{"StartTime":58166.0,"Position":370.0}]},{"StartTime":58224.0,"Objects":[{"StartTime":58224.0,"Position":370.0}]},{"StartTime":58281.0,"Objects":[{"StartTime":58281.0,"Position":370.0},{"StartTime":58378.0,"Position":368.716156},{"StartTime":58511.0,"Position":426.762177}]},{"StartTime":58627.0,"Objects":[{"StartTime":58627.0,"Position":507.0}]},{"StartTime":58685.0,"Objects":[{"StartTime":58685.0,"Position":507.0}]},{"StartTime":58743.0,"Objects":[{"StartTime":58743.0,"Position":507.0},{"StartTime":58858.0,"Position":493.172424}]},{"StartTime":58974.0,"Objects":[{"StartTime":58974.0,"Position":412.0},{"StartTime":59089.0,"Position":425.827576}]},{"StartTime":59204.0,"Objects":[{"StartTime":59204.0,"Position":370.0},{"StartTime":59319.0,"Position":281.006439}]},{"StartTime":59435.0,"Objects":[{"StartTime":59435.0,"Position":273.0},{"StartTime":59550.0,"Position":330.438354}]},{"StartTime":59666.0,"Objects":[{"StartTime":59666.0,"Position":349.0},{"StartTime":59781.0,"Position":356.9348}]},{"StartTime":59897.0,"Objects":[{"StartTime":59897.0,"Position":482.0},{"StartTime":60012.0,"Position":414.039063}]},{"StartTime":60127.0,"Objects":[{"StartTime":60127.0,"Position":144.0},{"StartTime":60224.0,"Position":221.810028},{"StartTime":60357.0,"Position":330.869141}]},{"StartTime":60474.0,"Objects":[{"StartTime":60474.0,"Position":349.0},{"StartTime":60571.0,"Position":283.189972},{"StartTime":60704.0,"Position":162.130859}]},{"StartTime":60820.0,"Objects":[{"StartTime":60820.0,"Position":85.0},{"StartTime":60935.0,"Position":178.415466}]},{"StartTime":61051.0,"Objects":[{"StartTime":61051.0,"Position":126.0},{"StartTime":61166.0,"Position":66.6307449}]},{"StartTime":61281.0,"Objects":[{"StartTime":61281.0,"Position":162.0},{"StartTime":61396.0,"Position":221.369263}]},{"StartTime":61512.0,"Objects":[{"StartTime":61512.0,"Position":203.0},{"StartTime":61627.0,"Position":296.284821}]},{"StartTime":61743.0,"Objects":[{"StartTime":61743.0,"Position":443.0},{"StartTime":61858.0,"Position":349.68988}]},{"StartTime":61916.0,"Objects":[{"StartTime":61916.0,"Position":329.0}]},{"StartTime":61974.0,"Objects":[{"StartTime":61974.0,"Position":309.0},{"StartTime":62071.0,"Position":286.152618},{"StartTime":62204.0,"Position":290.392822}]},{"StartTime":62320.0,"Objects":[{"StartTime":62320.0,"Position":203.0},{"StartTime":62417.0,"Position":201.847382},{"StartTime":62550.0,"Position":221.6072}]},{"StartTime":62666.0,"Objects":[{"StartTime":62666.0,"Position":133.0},{"StartTime":62723.0,"Position":120.111374},{"StartTime":62781.0,"Position":131.576614},{"StartTime":62838.0,"Position":112.055237},{"StartTime":62896.0,"Position":126.217979},{"StartTime":62993.0,"Position":137.178284},{"StartTime":63127.0,"Position":118.0}]},{"StartTime":63358.0,"Objects":[{"StartTime":63358.0,"Position":285.0}]},{"StartTime":63474.0,"Objects":[{"StartTime":63474.0,"Position":352.0}]},{"StartTime":63589.0,"Objects":[{"StartTime":63589.0,"Position":265.0}]},{"StartTime":63705.0,"Objects":[{"StartTime":63705.0,"Position":332.0}]},{"StartTime":63820.0,"Objects":[{"StartTime":63820.0,"Position":474.0}]},{"StartTime":63877.0,"Objects":[{"StartTime":63877.0,"Position":456.0}]},{"StartTime":63935.0,"Objects":[{"StartTime":63935.0,"Position":437.0}]},{"StartTime":63993.0,"Objects":[{"StartTime":63993.0,"Position":419.0}]},{"StartTime":64051.0,"Objects":[{"StartTime":64051.0,"Position":400.0},{"StartTime":64166.0,"Position":307.5588}]},{"StartTime":64281.0,"Objects":[{"StartTime":64281.0,"Position":217.0}]},{"StartTime":64338.0,"Objects":[{"StartTime":64338.0,"Position":219.0}]},{"StartTime":64396.0,"Objects":[{"StartTime":64396.0,"Position":221.0}]},{"StartTime":64454.0,"Objects":[{"StartTime":64454.0,"Position":224.0}]},{"StartTime":64512.0,"Objects":[{"StartTime":64512.0,"Position":226.0},{"StartTime":64627.0,"Position":211.96875}]},{"StartTime":64743.0,"Objects":[{"StartTime":64743.0,"Position":186.0}]},{"StartTime":64800.0,"Objects":[{"StartTime":64800.0,"Position":204.0}]},{"StartTime":64858.0,"Objects":[{"StartTime":64858.0,"Position":223.0}]},{"StartTime":64916.0,"Objects":[{"StartTime":64916.0,"Position":241.0}]},{"StartTime":64974.0,"Objects":[{"StartTime":64974.0,"Position":260.0},{"StartTime":65089.0,"Position":352.4412}]},{"StartTime":65205.0,"Objects":[{"StartTime":65205.0,"Position":443.0}]},{"StartTime":65262.0,"Objects":[{"StartTime":65262.0,"Position":441.0}]},{"StartTime":65320.0,"Objects":[{"StartTime":65320.0,"Position":439.0}]},{"StartTime":65378.0,"Objects":[{"StartTime":65378.0,"Position":436.0}]},{"StartTime":65436.0,"Objects":[{"StartTime":65436.0,"Position":434.0},{"StartTime":65551.0,"Position":448.03125}]},{"StartTime":65666.0,"Objects":[{"StartTime":65666.0,"Position":474.0}]},{"StartTime":65723.0,"Objects":[{"StartTime":65723.0,"Position":456.0}]},{"StartTime":65781.0,"Objects":[{"StartTime":65781.0,"Position":437.0}]},{"StartTime":65839.0,"Objects":[{"StartTime":65839.0,"Position":419.0}]},{"StartTime":65897.0,"Objects":[{"StartTime":65897.0,"Position":400.0},{"StartTime":66012.0,"Position":307.5588}]},{"StartTime":66127.0,"Objects":[{"StartTime":66127.0,"Position":226.0}]},{"StartTime":66184.0,"Objects":[{"StartTime":66184.0,"Position":208.0}]},{"StartTime":66242.0,"Objects":[{"StartTime":66242.0,"Position":189.0}]},{"StartTime":66300.0,"Objects":[{"StartTime":66300.0,"Position":171.0}]},{"StartTime":66358.0,"Objects":[{"StartTime":66358.0,"Position":152.0},{"StartTime":66473.0,"Position":59.5588074}]},{"StartTime":66589.0,"Objects":[{"StartTime":66589.0,"Position":14.0},{"StartTime":66704.0,"Position":1.656276}]},{"StartTime":66820.0,"Objects":[{"StartTime":66820.0,"Position":136.0},{"StartTime":66935.0,"Position":148.343719}]},{"StartTime":67051.0,"Objects":[{"StartTime":67051.0,"Position":80.0},{"StartTime":67148.0,"Position":131.161148},{"StartTime":67281.0,"Position":249.358459}]},{"StartTime":67397.0,"Objects":[{"StartTime":67397.0,"Position":315.0}]},{"StartTime":67512.0,"Objects":[{"StartTime":67512.0,"Position":491.0},{"StartTime":67609.0,"Position":481.8445},{"StartTime":67742.0,"Position":472.807831}]},{"StartTime":67858.0,"Objects":[{"StartTime":67858.0,"Position":410.0},{"StartTime":67955.0,"Position":402.8445},{"StartTime":68088.0,"Position":391.807831}]},{"StartTime":68204.0,"Objects":[{"StartTime":68204.0,"Position":329.0},{"StartTime":68319.0,"Position":314.227875}]},{"StartTime":68435.0,"Objects":[{"StartTime":68435.0,"Position":181.0},{"StartTime":68550.0,"Position":267.731628}]},{"StartTime":68666.0,"Objects":[{"StartTime":68666.0,"Position":440.0},{"StartTime":68781.0,"Position":353.268341}]},{"StartTime":68897.0,"Objects":[{"StartTime":68897.0,"Position":128.0}]},{"StartTime":69012.0,"Objects":[{"StartTime":69012.0,"Position":181.0}]},{"StartTime":69127.0,"Objects":[{"StartTime":69127.0,"Position":117.0}]},{"StartTime":69242.0,"Objects":[{"StartTime":69242.0,"Position":170.0}]},{"StartTime":69358.0,"Objects":[{"StartTime":69358.0,"Position":52.0},{"StartTime":69473.0,"Position":42.99369}]},{"StartTime":69589.0,"Objects":[{"StartTime":69589.0,"Position":181.0},{"StartTime":69704.0,"Position":191.103531}]},{"StartTime":69820.0,"Objects":[{"StartTime":69820.0,"Position":39.0},{"StartTime":69935.0,"Position":29.8967171}]},{"StartTime":70051.0,"Objects":[{"StartTime":70051.0,"Position":168.0},{"StartTime":70166.0,"Position":177.006317}]},{"StartTime":70281.0,"Objects":[{"StartTime":70281.0,"Position":198.0}]},{"StartTime":70339.0,"Objects":[{"StartTime":70339.0,"Position":220.0}]},{"StartTime":70397.0,"Objects":[{"StartTime":70397.0,"Position":244.0}]},{"StartTime":70455.0,"Objects":[{"StartTime":70455.0,"Position":269.0}]},{"StartTime":70512.0,"Objects":[{"StartTime":70512.0,"Position":296.0}]},{"StartTime":70570.0,"Objects":[{"StartTime":70570.0,"Position":322.0}]},{"StartTime":70627.0,"Objects":[{"StartTime":70627.0,"Position":348.0}]},{"StartTime":70685.0,"Objects":[{"StartTime":70685.0,"Position":373.0}]},{"StartTime":70742.0,"Objects":[{"StartTime":70742.0,"Position":396.0}]},{"StartTime":70800.0,"Objects":[{"StartTime":70800.0,"Position":441.0}]},{"StartTime":70858.0,"Objects":[{"StartTime":70858.0,"Position":483.0}]},{"StartTime":70916.0,"Objects":[{"StartTime":70916.0,"Position":510.0}]},{"StartTime":70974.0,"Objects":[{"StartTime":70974.0,"Position":512.0}]},{"StartTime":71031.0,"Objects":[{"StartTime":71031.0,"Position":492.0}]},{"StartTime":71089.0,"Objects":[{"StartTime":71089.0,"Position":453.0}]},{"StartTime":71146.0,"Objects":[{"StartTime":71146.0,"Position":407.0}]},{"StartTime":71204.0,"Objects":[{"StartTime":71204.0,"Position":364.0},{"StartTime":71301.0,"Position":321.164063},{"StartTime":71434.0,"Position":311.518982}]},{"StartTime":71551.0,"Objects":[{"StartTime":71551.0,"Position":419.0},{"StartTime":71648.0,"Position":485.835938},{"StartTime":71781.0,"Position":471.481018}]},{"StartTime":71897.0,"Objects":[{"StartTime":71897.0,"Position":332.0},{"StartTime":72012.0,"Position":425.4371}]},{"StartTime":72127.0,"Objects":[{"StartTime":72127.0,"Position":248.0}]},{"StartTime":72243.0,"Objects":[{"StartTime":72243.0,"Position":248.0},{"StartTime":72340.0,"Position":171.186066},{"StartTime":72473.0,"Position":61.1216278}]},{"StartTime":72589.0,"Objects":[{"StartTime":72589.0,"Position":144.0},{"StartTime":72704.0,"Position":237.418945}]},{"StartTime":72820.0,"Objects":[{"StartTime":72820.0,"Position":164.0},{"StartTime":72935.0,"Position":70.58106}]},{"StartTime":73051.0,"Objects":[{"StartTime":73051.0,"Position":111.0},{"StartTime":73148.0,"Position":186.929337},{"StartTime":73281.0,"Position":227.3736}]},{"StartTime":73397.0,"Objects":[{"StartTime":73397.0,"Position":192.0},{"StartTime":73494.0,"Position":111.186607},{"StartTime":73627.0,"Position":5.122879}]},{"StartTime":73743.0,"Objects":[{"StartTime":73743.0,"Position":78.0},{"StartTime":73858.0,"Position":171.418945}]},{"StartTime":73974.0,"Objects":[{"StartTime":73974.0,"Position":365.0}]},{"StartTime":74089.0,"Objects":[{"StartTime":74089.0,"Position":365.0},{"StartTime":74186.0,"Position":295.6195},{"StartTime":74319.0,"Position":191.714233}]},{"StartTime":74435.0,"Objects":[{"StartTime":74435.0,"Position":45.0},{"StartTime":74550.0,"Position":103.137146}]},{"StartTime":74666.0,"Objects":[{"StartTime":74666.0,"Position":16.0},{"StartTime":74734.0,"Position":58.1656647},{"StartTime":74839.0,"Position":154.0101}]},{"StartTime":74897.0,"Objects":[{"StartTime":74897.0,"Position":240.0},{"StartTime":74994.0,"Position":219.3829},{"StartTime":75127.0,"Position":286.697662}]},{"StartTime":75243.0,"Objects":[{"StartTime":75243.0,"Position":395.0},{"StartTime":75340.0,"Position":426.6171},{"StartTime":75473.0,"Position":348.302338}]},{"StartTime":75589.0,"Objects":[{"StartTime":75589.0,"Position":249.0},{"StartTime":75704.0,"Position":239.00386}]},{"StartTime":75820.0,"Objects":[{"StartTime":75820.0,"Position":198.0}]},{"StartTime":75935.0,"Objects":[{"StartTime":75935.0,"Position":198.0},{"StartTime":76032.0,"Position":269.303131},{"StartTime":76165.0,"Position":307.749573}]},{"StartTime":76281.0,"Objects":[{"StartTime":76281.0,"Position":340.0},{"StartTime":76396.0,"Position":433.236267}]},{"StartTime":76512.0,"Objects":[{"StartTime":76512.0,"Position":236.0},{"StartTime":76627.0,"Position":142.721558}]},{"StartTime":76743.0,"Objects":[{"StartTime":76743.0,"Position":13.0},{"StartTime":76840.0,"Position":87.7225},{"StartTime":76973.0,"Position":197.975418}]},{"StartTime":77089.0,"Objects":[{"StartTime":77089.0,"Position":324.0},{"StartTime":77186.0,"Position":235.8584},{"StartTime":77319.0,"Position":139.0246}]},{"StartTime":77435.0,"Objects":[{"StartTime":77435.0,"Position":294.0},{"StartTime":77550.0,"Position":387.241821}]},{"StartTime":77666.0,"Objects":[{"StartTime":77666.0,"Position":452.0}]},{"StartTime":77781.0,"Objects":[{"StartTime":77781.0,"Position":452.0}]},{"StartTime":77897.0,"Objects":[{"StartTime":77897.0,"Position":492.0}]},{"StartTime":78012.0,"Objects":[{"StartTime":78012.0,"Position":492.0}]},{"StartTime":78127.0,"Objects":[{"StartTime":78127.0,"Position":376.0},{"StartTime":78195.0,"Position":385.579041},{"StartTime":78300.0,"Position":485.975616}]},{"StartTime":78358.0,"Objects":[{"StartTime":78358.0,"Position":452.0},{"StartTime":78426.0,"Position":412.046082},{"StartTime":78531.0,"Position":312.1908}]},{"StartTime":78589.0,"Objects":[{"StartTime":78589.0,"Position":216.0},{"StartTime":78686.0,"Position":239.335068},{"StartTime":78819.0,"Position":162.709442}]},{"StartTime":78935.0,"Objects":[{"StartTime":78935.0,"Position":56.0},{"StartTime":79032.0,"Position":36.6649323},{"StartTime":79165.0,"Position":109.290558}]},{"StartTime":79281.0,"Objects":[{"StartTime":79281.0,"Position":216.0},{"StartTime":79396.0,"Position":223.017776}]},{"StartTime":79512.0,"Objects":[{"StartTime":79512.0,"Position":333.0}]},{"StartTime":79627.0,"Objects":[{"StartTime":79627.0,"Position":333.0},{"StartTime":79724.0,"Position":333.772766},{"StartTime":79857.0,"Position":318.234375}]},{"StartTime":79974.0,"Objects":[{"StartTime":79974.0,"Position":157.0},{"StartTime":80089.0,"Position":225.494568}]},{"StartTime":80204.0,"Objects":[{"StartTime":80204.0,"Position":400.0},{"StartTime":80319.0,"Position":331.505432}]},{"StartTime":80435.0,"Objects":[{"StartTime":80435.0,"Position":255.0},{"StartTime":80532.0,"Position":330.625641},{"StartTime":80665.0,"Position":441.4319}]},{"StartTime":80781.0,"Objects":[{"StartTime":80781.0,"Position":512.0},{"StartTime":80878.0,"Position":452.374359},{"StartTime":81011.0,"Position":325.5681}]},{"StartTime":81127.0,"Objects":[{"StartTime":81127.0,"Position":244.0},{"StartTime":81242.0,"Position":337.236267}]},{"StartTime":81358.0,"Objects":[{"StartTime":81358.0,"Position":464.0}]},{"StartTime":81474.0,"Objects":[{"StartTime":81474.0,"Position":464.0},{"StartTime":81571.0,"Position":485.126251},{"StartTime":81704.0,"Position":436.704865}]},{"StartTime":81820.0,"Objects":[{"StartTime":81820.0,"Position":321.0},{"StartTime":81935.0,"Position":310.776672}]},{"StartTime":82051.0,"Objects":[{"StartTime":82051.0,"Position":201.0},{"StartTime":82119.0,"Position":200.524429},{"StartTime":82224.0,"Position":215.0548}]},{"StartTime":82281.0,"Objects":[{"StartTime":82281.0,"Position":225.0},{"StartTime":82378.0,"Position":133.1369},{"StartTime":82511.0,"Position":61.8697166}]},{"StartTime":82627.0,"Objects":[{"StartTime":82627.0,"Position":90.0},{"StartTime":82724.0,"Position":181.8631},{"StartTime":82857.0,"Position":253.13028}]},{"StartTime":82974.0,"Objects":[{"StartTime":82974.0,"Position":315.0},{"StartTime":83089.0,"Position":408.2069}]},{"StartTime":83204.0,"Objects":[{"StartTime":83204.0,"Position":500.0}]},{"StartTime":83320.0,"Objects":[{"StartTime":83320.0,"Position":500.0},{"StartTime":83417.0,"Position":418.369476},{"StartTime":83550.0,"Position":313.556458}]},{"StartTime":83666.0,"Objects":[{"StartTime":83666.0,"Position":156.0},{"StartTime":83781.0,"Position":148.402573}]},{"StartTime":83897.0,"Objects":[{"StartTime":83897.0,"Position":260.0},{"StartTime":84012.0,"Position":267.597443}]},{"StartTime":84127.0,"Objects":[{"StartTime":84127.0,"Position":196.0},{"StartTime":84224.0,"Position":118.586784},{"StartTime":84357.0,"Position":10.0717621}]},{"StartTime":84474.0,"Objects":[{"StartTime":84474.0,"Position":80.0},{"StartTime":84571.0,"Position":153.452545},{"StartTime":84704.0,"Position":266.0215}]},{"StartTime":84820.0,"Objects":[{"StartTime":84820.0,"Position":372.0},{"StartTime":84935.0,"Position":425.185242}]},{"StartTime":85051.0,"Objects":[{"StartTime":85051.0,"Position":506.0},{"StartTime":85166.0,"Position":420.3389}]},{"StartTime":85281.0,"Objects":[{"StartTime":85281.0,"Position":313.0},{"StartTime":85396.0,"Position":345.927277}]},{"StartTime":85512.0,"Objects":[{"StartTime":85512.0,"Position":163.0},{"StartTime":85580.0,"Position":110.973129},{"StartTime":85685.0,"Position":23.0051575}]},{"StartTime":85743.0,"Objects":[{"StartTime":85743.0,"Position":44.0},{"StartTime":85858.0,"Position":137.3583}]},{"StartTime":85974.0,"Objects":[{"StartTime":85974.0,"Position":245.0},{"StartTime":86089.0,"Position":213.251648}]},{"StartTime":86204.0,"Objects":[{"StartTime":86204.0,"Position":214.0},{"StartTime":86301.0,"Position":302.473816},{"StartTime":86434.0,"Position":400.07196}]},{"StartTime":86551.0,"Objects":[{"StartTime":86551.0,"Position":497.0}]},{"StartTime":86666.0,"Objects":[{"StartTime":86666.0,"Position":497.0},{"StartTime":86781.0,"Position":418.634644}]},{"StartTime":86897.0,"Objects":[{"StartTime":86897.0,"Position":318.0},{"StartTime":86994.0,"Position":314.7335},{"StartTime":87127.0,"Position":326.852631}]},{"StartTime":87243.0,"Objects":[{"StartTime":87243.0,"Position":238.0}]},{"StartTime":87358.0,"Objects":[{"StartTime":87358.0,"Position":238.0},{"StartTime":87455.0,"Position":237.7335},{"StartTime":87588.0,"Position":246.852631}]},{"StartTime":87704.0,"Objects":[{"StartTime":87704.0,"Position":158.0}]},{"StartTime":87820.0,"Objects":[{"StartTime":87820.0,"Position":158.0},{"StartTime":87935.0,"Position":162.405472}]},{"StartTime":88051.0,"Objects":[{"StartTime":88051.0,"Position":75.0},{"StartTime":88166.0,"Position":70.55266}]},{"StartTime":88281.0,"Objects":[{"StartTime":88281.0,"Position":113.0}]},{"StartTime":88339.0,"Objects":[{"StartTime":88339.0,"Position":130.0}]},{"StartTime":88397.0,"Objects":[{"StartTime":88397.0,"Position":150.0}]},{"StartTime":88454.0,"Objects":[{"StartTime":88454.0,"Position":169.0}]},{"StartTime":88512.0,"Objects":[{"StartTime":88512.0,"Position":188.0}]},{"StartTime":88570.0,"Objects":[{"StartTime":88570.0,"Position":230.0}]},{"StartTime":88628.0,"Objects":[{"StartTime":88628.0,"Position":276.0}]},{"StartTime":88686.0,"Objects":[{"StartTime":88686.0,"Position":320.0}]},{"StartTime":88743.0,"Objects":[{"StartTime":88743.0,"Position":353.0},{"StartTime":88840.0,"Position":338.475952},{"StartTime":88973.0,"Position":361.241974}]},{"StartTime":89089.0,"Objects":[{"StartTime":89089.0,"Position":265.0}]},{"StartTime":89204.0,"Objects":[{"StartTime":89204.0,"Position":265.0},{"StartTime":89301.0,"Position":213.01651},{"StartTime":89434.0,"Position":243.2195}]},{"StartTime":89551.0,"Objects":[{"StartTime":89551.0,"Position":356.0}]},{"StartTime":89666.0,"Objects":[{"StartTime":89666.0,"Position":356.0},{"StartTime":89781.0,"Position":449.1545}]},{"StartTime":89897.0,"Objects":[{"StartTime":89897.0,"Position":373.0},{"StartTime":89965.0,"Position":333.076},{"StartTime":90070.0,"Position":233.266891}]},{"StartTime":90127.0,"Objects":[{"StartTime":90127.0,"Position":189.0},{"StartTime":90242.0,"Position":282.065216}]},{"StartTime":90358.0,"Objects":[{"StartTime":90358.0,"Position":147.0},{"StartTime":90473.0,"Position":53.8074875}]},{"StartTime":90589.0,"Objects":[{"StartTime":90589.0,"Position":129.0},{"StartTime":90686.0,"Position":192.910873},{"StartTime":90819.0,"Position":265.9673}]},{"StartTime":90935.0,"Objects":[{"StartTime":90935.0,"Position":116.0},{"StartTime":91032.0,"Position":74.5559},{"StartTime":91165.0,"Position":88.36763}]},{"StartTime":91281.0,"Objects":[{"StartTime":91281.0,"Position":189.0},{"StartTime":91396.0,"Position":166.779434}]},{"StartTime":91512.0,"Objects":[{"StartTime":91512.0,"Position":81.0},{"StartTime":91627.0,"Position":174.155975}]},{"StartTime":91743.0,"Objects":[{"StartTime":91743.0,"Position":350.0},{"StartTime":91858.0,"Position":256.844025}]},{"StartTime":91974.0,"Objects":[{"StartTime":91974.0,"Position":95.0},{"StartTime":92089.0,"Position":188.155975}]},{"StartTime":92204.0,"Objects":[{"StartTime":92204.0,"Position":377.0}]},{"StartTime":92262.0,"Objects":[{"StartTime":92262.0,"Position":365.0}]},{"StartTime":92320.0,"Objects":[{"StartTime":92320.0,"Position":355.0}]},{"StartTime":92377.0,"Objects":[{"StartTime":92377.0,"Position":345.0}]},{"StartTime":92435.0,"Objects":[{"StartTime":92435.0,"Position":334.0},{"StartTime":92532.0,"Position":280.8279},{"StartTime":92665.0,"Position":291.821869}]},{"StartTime":92781.0,"Objects":[{"StartTime":92781.0,"Position":392.0}]},{"StartTime":92897.0,"Objects":[{"StartTime":92897.0,"Position":392.0},{"StartTime":92994.0,"Position":426.812744},{"StartTime":93127.0,"Position":350.227783}]},{"StartTime":93243.0,"Objects":[{"StartTime":93243.0,"Position":256.0}]},{"StartTime":93358.0,"Objects":[{"StartTime":93358.0,"Position":256.0},{"StartTime":93473.0,"Position":261.632}]},{"StartTime":93589.0,"Objects":[{"StartTime":93589.0,"Position":152.0},{"StartTime":93657.0,"Position":156.624313},{"StartTime":93762.0,"Position":143.41185}]},{"StartTime":93820.0,"Objects":[{"StartTime":93820.0,"Position":154.0},{"StartTime":93935.0,"Position":77.33286}]},{"StartTime":94051.0,"Objects":[{"StartTime":94051.0,"Position":0.0},{"StartTime":94166.0,"Position":75.5017853}]},{"StartTime":94281.0,"Objects":[{"StartTime":94281.0,"Position":256.0},{"StartTime":94378.0,"Position":269.655945},{"StartTime":94511.0,"Position":267.039856}]},{"StartTime":94627.0,"Objects":[{"StartTime":94627.0,"Position":198.0}]},{"StartTime":94743.0,"Objects":[{"StartTime":94743.0,"Position":198.0},{"StartTime":94840.0,"Position":284.83786},{"StartTime":94973.0,"Position":360.646973}]},{"StartTime":95089.0,"Objects":[{"StartTime":95089.0,"Position":407.0}]},{"StartTime":95204.0,"Objects":[{"StartTime":95204.0,"Position":407.0},{"StartTime":95272.0,"Position":339.0539},{"StartTime":95377.0,"Position":267.210632}]},{"StartTime":95435.0,"Objects":[{"StartTime":95435.0,"Position":218.0},{"StartTime":95550.0,"Position":311.1996}]},{"StartTime":95666.0,"Objects":[{"StartTime":95666.0,"Position":401.0},{"StartTime":95781.0,"Position":390.806671}]},{"StartTime":95897.0,"Objects":[{"StartTime":95897.0,"Position":300.0},{"StartTime":96012.0,"Position":310.698975}]},{"StartTime":96127.0,"Objects":[{"StartTime":96127.0,"Position":420.0},{"StartTime":96224.0,"Position":343.702423},{"StartTime":96357.0,"Position":273.125153}]},{"StartTime":96474.0,"Objects":[{"StartTime":96474.0,"Position":159.0}]},{"StartTime":96589.0,"Objects":[{"StartTime":96589.0,"Position":159.0},{"StartTime":96686.0,"Position":74.30558},{"StartTime":96819.0,"Position":12.0078545}]},{"StartTime":96935.0,"Objects":[{"StartTime":96935.0,"Position":78.0}]},{"StartTime":97051.0,"Objects":[{"StartTime":97051.0,"Position":174.0},{"StartTime":97148.0,"Position":196.487381},{"StartTime":97281.0,"Position":194.12471}]},{"StartTime":97397.0,"Objects":[{"StartTime":97397.0,"Position":300.0}]},{"StartTime":97512.0,"Objects":[{"StartTime":97512.0,"Position":300.0},{"StartTime":97627.0,"Position":288.732025}]},{"StartTime":97743.0,"Objects":[{"StartTime":97743.0,"Position":185.0},{"StartTime":97858.0,"Position":172.889053}]},{"StartTime":97974.0,"Objects":[{"StartTime":97974.0,"Position":450.0},{"StartTime":98071.0,"Position":359.265259},{"StartTime":98204.0,"Position":263.309357}]},{"StartTime":98320.0,"Objects":[{"StartTime":98320.0,"Position":218.0}]},{"StartTime":98435.0,"Objects":[{"StartTime":98435.0,"Position":218.0},{"StartTime":98532.0,"Position":314.734741},{"StartTime":98665.0,"Position":404.690643}]},{"StartTime":98781.0,"Objects":[{"StartTime":98781.0,"Position":509.0}]},{"StartTime":98897.0,"Objects":[{"StartTime":98897.0,"Position":509.0},{"StartTime":98994.0,"Position":504.543457},{"StartTime":99127.0,"Position":511.477661}]},{"StartTime":99243.0,"Objects":[{"StartTime":99243.0,"Position":402.0}]},{"StartTime":99358.0,"Objects":[{"StartTime":99358.0,"Position":207.0},{"StartTime":99473.0,"Position":217.103531}]},{"StartTime":99589.0,"Objects":[{"StartTime":99589.0,"Position":364.0},{"StartTime":99704.0,"Position":353.017426}]},{"StartTime":99820.0,"Objects":[{"StartTime":99820.0,"Position":300.0}]},{"StartTime":99935.0,"Objects":[{"StartTime":99935.0,"Position":391.0}]},{"StartTime":100051.0,"Objects":[{"StartTime":100051.0,"Position":432.0}]},{"StartTime":100166.0,"Objects":[{"StartTime":100166.0,"Position":364.0}]},{"StartTime":100281.0,"Objects":[{"StartTime":100281.0,"Position":282.0}]},{"StartTime":100397.0,"Objects":[{"StartTime":100397.0,"Position":200.0}]},{"StartTime":100512.0,"Objects":[{"StartTime":100512.0,"Position":132.0}]},{"StartTime":100628.0,"Objects":[{"StartTime":100628.0,"Position":173.0}]},{"StartTime":100743.0,"Objects":[{"StartTime":100743.0,"Position":264.0},{"StartTime":100858.0,"Position":249.782654}]},{"StartTime":100974.0,"Objects":[{"StartTime":100974.0,"Position":158.0},{"StartTime":101089.0,"Position":172.888229}]},{"StartTime":101204.0,"Objects":[{"StartTime":101204.0,"Position":146.0},{"StartTime":101319.0,"Position":131.782654}]},{"StartTime":101435.0,"Objects":[{"StartTime":101435.0,"Position":40.0},{"StartTime":101550.0,"Position":54.0663261}]},{"StartTime":101666.0,"Objects":[{"StartTime":101666.0,"Position":146.0},{"StartTime":101781.0,"Position":229.125732}]},{"StartTime":101897.0,"Objects":[{"StartTime":101897.0,"Position":321.0},{"StartTime":102012.0,"Position":237.874268}]},{"StartTime":102127.0,"Objects":[{"StartTime":102127.0,"Position":325.0}]},{"StartTime":102243.0,"Objects":[{"StartTime":102243.0,"Position":353.0}]},{"StartTime":102300.0,"Objects":[{"StartTime":102300.0,"Position":345.0}]},{"StartTime":102358.0,"Objects":[{"StartTime":102358.0,"Position":351.0}]},{"StartTime":102416.0,"Objects":[{"StartTime":102416.0,"Position":340.0}]},{"StartTime":102474.0,"Objects":[{"StartTime":102474.0,"Position":342.0}]},{"StartTime":102531.0,"Objects":[{"StartTime":102531.0,"Position":333.0}]},{"StartTime":102589.0,"Objects":[{"StartTime":102589.0,"Position":322.0}]},{"StartTime":102646.0,"Objects":[{"StartTime":102646.0,"Position":360.0}]},{"StartTime":102704.0,"Objects":[{"StartTime":102704.0,"Position":404.0}]},{"StartTime":102762.0,"Objects":[{"StartTime":102762.0,"Position":446.0}]},{"StartTime":102819.0,"Objects":[{"StartTime":102819.0,"Position":477.0}]},{"StartTime":102935.0,"Objects":[{"StartTime":102935.0,"Position":232.0},{"StartTime":102992.0,"Position":186.691376}]},{"StartTime":103051.0,"Objects":[{"StartTime":103051.0,"Position":256.0}]},{"StartTime":103108.0,"Objects":[{"StartTime":103108.0,"Position":249.0}]},{"StartTime":103166.0,"Objects":[{"StartTime":103166.0,"Position":271.0}]},{"StartTime":103224.0,"Objects":[{"StartTime":103224.0,"Position":255.0}]},{"StartTime":103281.0,"Objects":[{"StartTime":103281.0,"Position":271.0}]},{"StartTime":103339.0,"Objects":[{"StartTime":103339.0,"Position":294.0}]},{"StartTime":103397.0,"Objects":[{"StartTime":103397.0,"Position":277.0}]},{"StartTime":103454.0,"Objects":[{"StartTime":103454.0,"Position":291.0}]},{"StartTime":103512.0,"Objects":[{"StartTime":103512.0,"Position":285.0},{"StartTime":103609.0,"Position":360.087341},{"StartTime":103742.0,"Position":468.7167}]},{"StartTime":103858.0,"Objects":[{"StartTime":103858.0,"Position":495.0}]},{"StartTime":103974.0,"Objects":[{"StartTime":103974.0,"Position":495.0},{"StartTime":104071.0,"Position":475.9798},{"StartTime":104204.0,"Position":364.1515}]},{"StartTime":104320.0,"Objects":[{"StartTime":104320.0,"Position":272.0}]},{"StartTime":104435.0,"Objects":[{"StartTime":104435.0,"Position":272.0},{"StartTime":104550.0,"Position":277.742981}]},{"StartTime":104666.0,"Objects":[{"StartTime":104666.0,"Position":362.0},{"StartTime":104763.0,"Position":304.462067},{"StartTime":104896.0,"Position":195.2012}]},{"StartTime":105012.0,"Objects":[{"StartTime":105012.0,"Position":108.0}]},{"StartTime":105127.0,"Objects":[{"StartTime":105127.0,"Position":97.0}]},{"StartTime":105243.0,"Objects":[{"StartTime":105243.0,"Position":195.0}]},{"StartTime":105301.0,"Objects":[{"StartTime":105301.0,"Position":195.0}]},{"StartTime":105358.0,"Objects":[{"StartTime":105358.0,"Position":195.0},{"StartTime":105455.0,"Position":216.359055},{"StartTime":105588.0,"Position":141.92659}]},{"StartTime":105704.0,"Objects":[{"StartTime":105704.0,"Position":33.0}]},{"StartTime":105820.0,"Objects":[{"StartTime":105820.0,"Position":33.0},{"StartTime":105935.0,"Position":40.4561768}]},{"StartTime":106051.0,"Objects":[{"StartTime":106051.0,"Position":149.0},{"StartTime":106166.0,"Position":141.071213}]},{"StartTime":106281.0,"Objects":[{"StartTime":106281.0,"Position":239.0},{"StartTime":106396.0,"Position":279.132324}]},{"StartTime":106512.0,"Objects":[{"StartTime":106512.0,"Position":255.0},{"StartTime":106627.0,"Position":347.996826}]},{"StartTime":106743.0,"Objects":[{"StartTime":106743.0,"Position":460.0},{"StartTime":106811.0,"Position":417.0297},{"StartTime":106916.0,"Position":384.705444}]},{"StartTime":106974.0,"Objects":[{"StartTime":106974.0,"Position":385.0},{"StartTime":107089.0,"Position":477.996826}]},{"StartTime":107204.0,"Objects":[{"StartTime":107204.0,"Position":391.0},{"StartTime":107301.0,"Position":323.538727},{"StartTime":107434.0,"Position":204.95784}]},{"StartTime":107551.0,"Objects":[{"StartTime":107551.0,"Position":126.0}]},{"StartTime":107666.0,"Objects":[{"StartTime":107666.0,"Position":126.0},{"StartTime":107763.0,"Position":78.60708},{"StartTime":107896.0,"Position":121.048843}]},{"StartTime":108012.0,"Objects":[{"StartTime":108012.0,"Position":233.0}]},{"StartTime":108127.0,"Objects":[{"StartTime":108127.0,"Position":233.0},{"StartTime":108242.0,"Position":220.6427}]},{"StartTime":108358.0,"Objects":[{"StartTime":108358.0,"Position":145.0},{"StartTime":108455.0,"Position":217.530029},{"StartTime":108588.0,"Position":309.147552}]},{"StartTime":108704.0,"Objects":[{"StartTime":108704.0,"Position":414.0}]},{"StartTime":108820.0,"Objects":[{"StartTime":108820.0,"Position":394.0}]},{"StartTime":108935.0,"Objects":[{"StartTime":108935.0,"Position":309.0}]},{"StartTime":108993.0,"Objects":[{"StartTime":108993.0,"Position":309.0}]},{"StartTime":109051.0,"Objects":[{"StartTime":109051.0,"Position":309.0},{"StartTime":109148.0,"Position":318.7672},{"StartTime":109281.0,"Position":301.334656}]},{"StartTime":109397.0,"Objects":[{"StartTime":109397.0,"Position":396.0}]},{"StartTime":109512.0,"Objects":[{"StartTime":109512.0,"Position":396.0},{"StartTime":109627.0,"Position":423.202057}]},{"StartTime":109743.0,"Objects":[{"StartTime":109743.0,"Position":385.0},{"StartTime":109858.0,"Position":478.08667}]},{"StartTime":109974.0,"Objects":[{"StartTime":109974.0,"Position":445.0},{"StartTime":110089.0,"Position":351.91333}]},{"StartTime":110204.0,"Objects":[{"StartTime":110204.0,"Position":264.0},{"StartTime":110319.0,"Position":259.688171}]},{"StartTime":110435.0,"Objects":[{"StartTime":110435.0,"Position":150.0},{"StartTime":110503.0,"Position":134.168854},{"StartTime":110608.0,"Position":146.468857}]},{"StartTime":110666.0,"Objects":[{"StartTime":110666.0,"Position":147.0},{"StartTime":110781.0,"Position":57.94221}]},{"StartTime":110897.0,"Objects":[{"StartTime":110897.0,"Position":214.0},{"StartTime":110994.0,"Position":303.498474},{"StartTime":111127.0,"Position":400.130432}]},{"StartTime":111243.0,"Objects":[{"StartTime":111243.0,"Position":451.0}]},{"StartTime":111358.0,"Objects":[{"StartTime":111358.0,"Position":451.0},{"StartTime":111455.0,"Position":366.458679},{"StartTime":111588.0,"Position":264.767944}]},{"StartTime":111704.0,"Objects":[{"StartTime":111704.0,"Position":314.0}]},{"StartTime":111820.0,"Objects":[{"StartTime":111820.0,"Position":314.0},{"StartTime":111935.0,"Position":407.065216}]},{"StartTime":112051.0,"Objects":[{"StartTime":112051.0,"Position":486.0},{"StartTime":112148.0,"Position":431.676819},{"StartTime":112281.0,"Position":450.23877}]},{"StartTime":112397.0,"Objects":[{"StartTime":112397.0,"Position":499.0}]},{"StartTime":112512.0,"Objects":[{"StartTime":112512.0,"Position":390.0}]},{"StartTime":112627.0,"Objects":[{"StartTime":112627.0,"Position":288.0}]},{"StartTime":112685.0,"Objects":[{"StartTime":112685.0,"Position":288.0}]},{"StartTime":112743.0,"Objects":[{"StartTime":112743.0,"Position":288.0},{"StartTime":112840.0,"Position":214.352554},{"StartTime":112973.0,"Position":101.516357}]},{"StartTime":113089.0,"Objects":[{"StartTime":113089.0,"Position":30.0}]},{"StartTime":113204.0,"Objects":[{"StartTime":113204.0,"Position":30.0},{"StartTime":113301.0,"Position":119.647446},{"StartTime":113434.0,"Position":216.483643}]},{"StartTime":113551.0,"Objects":[{"StartTime":113551.0,"Position":308.0}]},{"StartTime":113666.0,"Objects":[{"StartTime":113666.0,"Position":308.0},{"StartTime":113763.0,"Position":320.730225},{"StartTime":113896.0,"Position":257.027771}]},{"StartTime":114012.0,"Objects":[{"StartTime":114012.0,"Position":211.0}]},{"StartTime":114127.0,"Objects":[{"StartTime":114127.0,"Position":211.0},{"StartTime":114195.0,"Position":201.3149},{"StartTime":114300.0,"Position":219.4335}]},{"StartTime":114358.0,"Objects":[{"StartTime":114358.0,"Position":219.0},{"StartTime":114473.0,"Position":306.556854}]},{"StartTime":114589.0,"Objects":[{"StartTime":114589.0,"Position":166.0},{"StartTime":114646.0,"Position":121.082016},{"StartTime":114704.0,"Position":113.537971},{"StartTime":114761.0,"Position":116.181473},{"StartTime":114819.0,"Position":162.68277},{"StartTime":114876.0,"Position":192.15361},{"StartTime":114934.0,"Position":258.931335},{"StartTime":114992.0,"Position":290.682373},{"StartTime":115050.0,"Position":343.0563},{"StartTime":115147.0,"Position":397.662018},{"StartTime":115281.0,"Position":351.058228}]},{"StartTime":115512.0,"Objects":[{"StartTime":115512.0,"Position":292.0}]},{"StartTime":116435.0,"Objects":[{"StartTime":116435.0,"Position":346.0},{"StartTime":116492.0,"Position":384.917969},{"StartTime":116550.0,"Position":372.462},{"StartTime":116607.0,"Position":393.8185},{"StartTime":116665.0,"Position":349.31723},{"StartTime":116722.0,"Position":320.846375},{"StartTime":116780.0,"Position":245.0687},{"StartTime":116838.0,"Position":204.317627},{"StartTime":116896.0,"Position":168.9437},{"StartTime":116993.0,"Position":121.33799},{"StartTime":117127.0,"Position":160.941772}]},{"StartTime":117358.0,"Objects":[{"StartTime":117358.0,"Position":219.0}]},{"StartTime":117589.0,"Objects":[{"StartTime":117589.0,"Position":292.0}]},{"StartTime":117820.0,"Objects":[{"StartTime":117820.0,"Position":438.0}]},{"StartTime":118051.0,"Objects":[{"StartTime":118051.0,"Position":219.0},{"StartTime":118166.0,"Position":125.6332}]},{"StartTime":118281.0,"Objects":[{"StartTime":118281.0,"Position":10.0},{"StartTime":118396.0,"Position":0.0}]},{"StartTime":118512.0,"Objects":[{"StartTime":118512.0,"Position":154.0},{"StartTime":118627.0,"Position":164.4093}]},{"StartTime":118743.0,"Objects":[{"StartTime":118743.0,"Position":3.0}]},{"StartTime":118858.0,"Objects":[{"StartTime":118858.0,"Position":219.0},{"StartTime":118955.0,"Position":244.709213},{"StartTime":119088.0,"Position":239.6507}]},{"StartTime":119204.0,"Objects":[{"StartTime":119204.0,"Position":114.0}]},{"StartTime":119262.0,"Objects":[{"StartTime":119262.0,"Position":145.0}]},{"StartTime":119319.0,"Objects":[{"StartTime":119319.0,"Position":151.0}]},{"StartTime":119377.0,"Objects":[{"StartTime":119377.0,"Position":134.0}]},{"StartTime":119434.0,"Objects":[{"StartTime":119434.0,"Position":102.0}]},{"StartTime":119493.0,"Objects":[{"StartTime":119493.0,"Position":84.0}]},{"StartTime":119551.0,"Objects":[{"StartTime":119551.0,"Position":80.0}]},{"StartTime":119608.0,"Objects":[{"StartTime":119608.0,"Position":101.0}]},{"StartTime":119666.0,"Objects":[{"StartTime":119666.0,"Position":135.0}]},{"StartTime":119723.0,"Objects":[{"StartTime":119723.0,"Position":190.0}]},{"StartTime":119781.0,"Objects":[{"StartTime":119781.0,"Position":230.0}]},{"StartTime":119839.0,"Objects":[{"StartTime":119839.0,"Position":280.0}]},{"StartTime":119897.0,"Objects":[{"StartTime":119897.0,"Position":336.0}]},{"StartTime":119954.0,"Objects":[{"StartTime":119954.0,"Position":377.0}]},{"StartTime":120012.0,"Objects":[{"StartTime":120012.0,"Position":425.0}]},{"StartTime":120070.0,"Objects":[{"StartTime":120070.0,"Position":475.0}]},{"StartTime":120127.0,"Objects":[{"StartTime":120127.0,"Position":495.0},{"StartTime":120224.0,"Position":494.9837},{"StartTime":120357.0,"Position":512.0}]},{"StartTime":120474.0,"Objects":[{"StartTime":120474.0,"Position":351.0},{"StartTime":120571.0,"Position":354.741882},{"StartTime":120704.0,"Position":333.0354}]},{"StartTime":120820.0,"Objects":[{"StartTime":120820.0,"Position":415.0},{"StartTime":120935.0,"Position":503.085052}]},{"StartTime":121051.0,"Objects":[{"StartTime":121051.0,"Position":407.0}]},{"StartTime":121166.0,"Objects":[{"StartTime":121166.0,"Position":332.0},{"StartTime":121263.0,"Position":262.324677},{"StartTime":121396.0,"Position":145.450241}]},{"StartTime":121512.0,"Objects":[{"StartTime":121512.0,"Position":213.0},{"StartTime":121627.0,"Position":197.601456}]},{"StartTime":121743.0,"Objects":[{"StartTime":121743.0,"Position":47.0},{"StartTime":121858.0,"Position":62.3985329}]},{"StartTime":121974.0,"Objects":[{"StartTime":121974.0,"Position":213.0},{"StartTime":122071.0,"Position":132.2984},{"StartTime":122204.0,"Position":26.3879547}]},{"StartTime":122320.0,"Objects":[{"StartTime":122320.0,"Position":146.0},{"StartTime":122417.0,"Position":215.6733},{"StartTime":122550.0,"Position":332.544922}]},{"StartTime":122666.0,"Objects":[{"StartTime":122666.0,"Position":226.0},{"StartTime":122781.0,"Position":213.894272}]},{"StartTime":122897.0,"Objects":[{"StartTime":122897.0,"Position":83.0}]},{"StartTime":123012.0,"Objects":[{"StartTime":123012.0,"Position":31.0},{"StartTime":123109.0,"Position":37.946228},{"StartTime":123242.0,"Position":14.0712194}]},{"StartTime":123358.0,"Objects":[{"StartTime":123358.0,"Position":214.0},{"StartTime":123473.0,"Position":128.038635}]},{"StartTime":123589.0,"Objects":[{"StartTime":123589.0,"Position":303.0},{"StartTime":123704.0,"Position":388.1753}]},{"StartTime":123820.0,"Objects":[{"StartTime":123820.0,"Position":498.0},{"StartTime":123917.0,"Position":432.288361},{"StartTime":124050.0,"Position":311.364166}]},{"StartTime":124166.0,"Objects":[{"StartTime":124166.0,"Position":214.0},{"StartTime":124263.0,"Position":283.711639},{"StartTime":124396.0,"Position":400.635834}]},{"StartTime":124512.0,"Objects":[{"StartTime":124512.0,"Position":278.0},{"StartTime":124627.0,"Position":241.45549}]},{"StartTime":124743.0,"Objects":[{"StartTime":124743.0,"Position":408.0}]},{"StartTime":124858.0,"Objects":[{"StartTime":124858.0,"Position":327.0},{"StartTime":124955.0,"Position":333.276733},{"StartTime":125088.0,"Position":311.058258}]},{"StartTime":125204.0,"Objects":[{"StartTime":125204.0,"Position":214.0},{"StartTime":125319.0,"Position":125.519653}]},{"StartTime":125435.0,"Objects":[{"StartTime":125435.0,"Position":60.0},{"StartTime":125550.0,"Position":148.480347}]},{"StartTime":125666.0,"Objects":[{"StartTime":125666.0,"Position":110.0}]},{"StartTime":125781.0,"Objects":[{"StartTime":125781.0,"Position":10.0}]},{"StartTime":125897.0,"Objects":[{"StartTime":125897.0,"Position":184.0}]},{"StartTime":126012.0,"Objects":[{"StartTime":126012.0,"Position":0.0}]},{"StartTime":126127.0,"Objects":[{"StartTime":126127.0,"Position":125.0},{"StartTime":126224.0,"Position":184.826523},{"StartTime":126357.0,"Position":306.275452}]},{"StartTime":126474.0,"Objects":[{"StartTime":126474.0,"Position":398.0}]},{"StartTime":126589.0,"Objects":[{"StartTime":126589.0,"Position":398.0},{"StartTime":126657.0,"Position":368.49},{"StartTime":126762.0,"Position":351.8152}]},{"StartTime":126820.0,"Objects":[{"StartTime":126820.0,"Position":413.0},{"StartTime":126917.0,"Position":405.972565},{"StartTime":127050.0,"Position":412.996582}]},{"StartTime":127166.0,"Objects":[{"StartTime":127166.0,"Position":367.0}]},{"StartTime":127281.0,"Objects":[{"StartTime":127281.0,"Position":275.0}]},{"StartTime":127397.0,"Objects":[{"StartTime":127397.0,"Position":195.0}]},{"StartTime":127454.0,"Objects":[{"StartTime":127454.0,"Position":195.0}]},{"StartTime":127512.0,"Objects":[{"StartTime":127512.0,"Position":195.0},{"StartTime":127609.0,"Position":188.8304},{"StartTime":127742.0,"Position":261.4693}]},{"StartTime":127858.0,"Objects":[{"StartTime":127858.0,"Position":330.0},{"StartTime":127955.0,"Position":325.868042},{"StartTime":128088.0,"Position":261.3013}]},{"StartTime":128204.0,"Objects":[{"StartTime":128204.0,"Position":157.0},{"StartTime":128319.0,"Position":250.31012}]},{"StartTime":128435.0,"Objects":[{"StartTime":128435.0,"Position":456.0}]},{"StartTime":128551.0,"Objects":[{"StartTime":128551.0,"Position":394.0},{"StartTime":128648.0,"Position":320.26825},{"StartTime":128781.0,"Position":207.316452}]},{"StartTime":128897.0,"Objects":[{"StartTime":128897.0,"Position":298.0},{"StartTime":129012.0,"Position":387.654083}]},{"StartTime":129127.0,"Objects":[{"StartTime":129127.0,"Position":303.0},{"StartTime":129242.0,"Position":213.581131}]},{"StartTime":129358.0,"Objects":[{"StartTime":129358.0,"Position":20.0},{"StartTime":129455.0,"Position":82.79237},{"StartTime":129588.0,"Position":206.827255}]},{"StartTime":129704.0,"Objects":[{"StartTime":129704.0,"Position":303.0},{"StartTime":129801.0,"Position":209.207626},{"StartTime":129934.0,"Position":116.172745}]},{"StartTime":130051.0,"Objects":[{"StartTime":130051.0,"Position":22.0},{"StartTime":130166.0,"Position":108.0569}]},{"StartTime":130281.0,"Objects":[{"StartTime":130281.0,"Position":206.0}]},{"StartTime":130397.0,"Objects":[{"StartTime":130397.0,"Position":128.0},{"StartTime":130494.0,"Position":98.9740753},{"StartTime":130627.0,"Position":116.280022}]},{"StartTime":130743.0,"Objects":[{"StartTime":130743.0,"Position":206.0},{"StartTime":130858.0,"Position":222.803619}]},{"StartTime":130974.0,"Objects":[{"StartTime":130974.0,"Position":320.0},{"StartTime":131089.0,"Position":302.505}]},{"StartTime":131204.0,"Objects":[{"StartTime":131204.0,"Position":236.0},{"StartTime":131301.0,"Position":203.407822},{"StartTime":131434.0,"Position":222.704208}]},{"StartTime":131551.0,"Objects":[{"StartTime":131551.0,"Position":368.0},{"StartTime":131648.0,"Position":414.792053},{"StartTime":131781.0,"Position":379.811676}]},{"StartTime":131897.0,"Objects":[{"StartTime":131897.0,"Position":285.0},{"StartTime":132012.0,"Position":302.169983}]},{"StartTime":132127.0,"Objects":[{"StartTime":132127.0,"Position":256.0}]},{"StartTime":132243.0,"Objects":[{"StartTime":132243.0,"Position":167.0},{"StartTime":132340.0,"Position":217.343735},{"StartTime":132473.0,"Position":320.004059}]},{"StartTime":132589.0,"Objects":[{"StartTime":132589.0,"Position":104.0},{"StartTime":132704.0,"Position":10.6395264}]},{"StartTime":132820.0,"Objects":[{"StartTime":132820.0,"Position":155.0},{"StartTime":132935.0,"Position":248.357635}]},{"StartTime":133051.0,"Objects":[{"StartTime":133051.0,"Position":376.0}]},{"StartTime":133108.0,"Objects":[{"StartTime":133108.0,"Position":363.0}]},{"StartTime":133166.0,"Objects":[{"StartTime":133166.0,"Position":356.0}]},{"StartTime":133224.0,"Objects":[{"StartTime":133224.0,"Position":355.0}]},{"StartTime":133281.0,"Objects":[{"StartTime":133281.0,"Position":360.0}]},{"StartTime":133339.0,"Objects":[{"StartTime":133339.0,"Position":372.0}]},{"StartTime":133397.0,"Objects":[{"StartTime":133397.0,"Position":388.0}]},{"StartTime":133454.0,"Objects":[{"StartTime":133454.0,"Position":408.0}]},{"StartTime":133512.0,"Objects":[{"StartTime":133512.0,"Position":431.0}]},{"StartTime":133743.0,"Objects":[{"StartTime":133743.0,"Position":433.0}]},{"StartTime":133858.0,"Objects":[{"StartTime":133858.0,"Position":433.0}]},{"StartTime":133973.0,"Objects":[{"StartTime":133973.0,"Position":500.0}]},{"StartTime":134031.0,"Objects":[{"StartTime":134031.0,"Position":495.0}]},{"StartTime":134088.0,"Objects":[{"StartTime":134088.0,"Position":490.0}]},{"StartTime":134146.0,"Objects":[{"StartTime":134146.0,"Position":485.0}]},{"StartTime":134204.0,"Objects":[{"StartTime":134204.0,"Position":480.0},{"StartTime":134261.0,"Position":451.870575},{"StartTime":134319.0,"Position":390.643158},{"StartTime":134376.0,"Position":355.5535},{"StartTime":134434.0,"Position":307.729279},{"StartTime":134550.0,"Position":215.65274}]},{"StartTime":134666.0,"Objects":[{"StartTime":134666.0,"Position":213.0},{"StartTime":134781.0,"Position":234.885178}]},{"StartTime":134897.0,"Objects":[{"StartTime":134897.0,"Position":109.0},{"StartTime":135012.0,"Position":15.55278}]},{"StartTime":135127.0,"Objects":[{"StartTime":135127.0,"Position":236.0},{"StartTime":135242.0,"Position":329.4514}]},{"StartTime":135358.0,"Objects":[{"StartTime":135358.0,"Position":208.0},{"StartTime":135455.0,"Position":134.189972},{"StartTime":135588.0,"Position":21.13086}]},{"StartTime":135704.0,"Objects":[{"StartTime":135704.0,"Position":297.0},{"StartTime":135819.0,"Position":203.584534}]},{"StartTime":135935.0,"Objects":[{"StartTime":135935.0,"Position":147.0},{"StartTime":136050.0,"Position":240.451385}]},{"StartTime":136166.0,"Objects":[{"StartTime":136166.0,"Position":397.0},{"StartTime":136281.0,"Position":346.996429}]},{"StartTime":136397.0,"Objects":[{"StartTime":136397.0,"Position":297.0},{"StartTime":136512.0,"Position":253.206772}]},{"StartTime":136627.0,"Objects":[{"StartTime":136627.0,"Position":397.0}]},{"StartTime":136743.0,"Objects":[{"StartTime":136743.0,"Position":502.0},{"StartTime":136858.0,"Position":408.5486}]},{"StartTime":136974.0,"Objects":[{"StartTime":136974.0,"Position":297.0},{"StartTime":137089.0,"Position":390.4514}]},{"StartTime":137204.0,"Objects":[{"StartTime":137204.0,"Position":296.0},{"StartTime":137319.0,"Position":202.548615}]},{"StartTime":137435.0,"Objects":[{"StartTime":137435.0,"Position":89.0},{"StartTime":137550.0,"Position":182.451385}]},{"StartTime":137666.0,"Objects":[{"StartTime":137666.0,"Position":220.0},{"StartTime":137763.0,"Position":147.185944},{"StartTime":137896.0,"Position":33.1213074}]},{"StartTime":138012.0,"Objects":[{"StartTime":138012.0,"Position":202.0},{"StartTime":138109.0,"Position":280.82605},{"StartTime":138242.0,"Position":388.9071}]},{"StartTime":138358.0,"Objects":[{"StartTime":138358.0,"Position":338.0},{"StartTime":138473.0,"Position":244.584534}]},{"StartTime":138589.0,"Objects":[{"StartTime":138589.0,"Position":431.0},{"StartTime":138686.0,"Position":432.689056},{"StartTime":138819.0,"Position":470.369141}]},{"StartTime":138935.0,"Objects":[{"StartTime":138935.0,"Position":507.0}]},{"StartTime":139051.0,"Objects":[{"StartTime":139051.0,"Position":507.0},{"StartTime":139148.0,"Position":411.7753},{"StartTime":139281.0,"Position":325.330963}]},{"StartTime":139397.0,"Objects":[{"StartTime":139397.0,"Position":177.0}]},{"StartTime":139512.0,"Objects":[{"StartTime":139512.0,"Position":177.0},{"StartTime":139609.0,"Position":273.2247},{"StartTime":139742.0,"Position":358.669037}]},{"StartTime":139858.0,"Objects":[{"StartTime":139858.0,"Position":424.0}]},{"StartTime":139974.0,"Objects":[{"StartTime":139974.0,"Position":339.0},{"StartTime":140089.0,"Position":328.776672}]},{"StartTime":140204.0,"Objects":[{"StartTime":140204.0,"Position":177.0},{"StartTime":140319.0,"Position":167.00386}]},{"StartTime":140435.0,"Objects":[{"StartTime":140435.0,"Position":248.0},{"StartTime":140550.0,"Position":257.103271}]},{"StartTime":140666.0,"Objects":[{"StartTime":140666.0,"Position":96.0},{"StartTime":140781.0,"Position":86.00386}]},{"StartTime":140897.0,"Objects":[{"StartTime":140897.0,"Position":167.0},{"StartTime":141012.0,"Position":176.99614}]},{"StartTime":141127.0,"Objects":[{"StartTime":141127.0,"Position":355.0},{"StartTime":141242.0,"Position":345.993683}]},{"StartTime":141358.0,"Objects":[{"StartTime":141358.0,"Position":263.0},{"StartTime":141455.0,"Position":336.762451},{"StartTime":141588.0,"Position":435.289673}]},{"StartTime":141704.0,"Objects":[{"StartTime":141704.0,"Position":177.0}]},{"StartTime":141820.0,"Objects":[{"StartTime":141820.0,"Position":177.0},{"StartTime":141917.0,"Position":122.237534},{"StartTime":142050.0,"Position":4.71032143}]},{"StartTime":142166.0,"Objects":[{"StartTime":142166.0,"Position":0.0}]},{"StartTime":142281.0,"Objects":[{"StartTime":142281.0,"Position":176.0},{"StartTime":142396.0,"Position":166.993683}]},{"StartTime":142512.0,"Objects":[{"StartTime":142512.0,"Position":345.0},{"StartTime":142627.0,"Position":355.103546}]},{"StartTime":142743.0,"Objects":[{"StartTime":142743.0,"Position":257.0},{"StartTime":142858.0,"Position":247.993683}]},{"StartTime":142974.0,"Objects":[{"StartTime":142974.0,"Position":426.0},{"StartTime":143089.0,"Position":435.006317}]},{"StartTime":143204.0,"Objects":[{"StartTime":143204.0,"Position":203.0},{"StartTime":143272.0,"Position":241.465088},{"StartTime":143377.0,"Position":320.980042}]},{"StartTime":143435.0,"Objects":[{"StartTime":143435.0,"Position":435.0},{"StartTime":143503.0,"Position":392.8229},{"StartTime":143608.0,"Position":325.7411}]},{"StartTime":143666.0,"Objects":[{"StartTime":143666.0,"Position":257.0},{"StartTime":143734.0,"Position":286.1751},{"StartTime":143839.0,"Position":352.8504}]},{"StartTime":143897.0,"Objects":[{"StartTime":143897.0,"Position":419.0},{"StartTime":143965.0,"Position":379.9646},{"StartTime":144070.0,"Position":338.0948}]},{"StartTime":144127.0,"Objects":[{"StartTime":144127.0,"Position":257.0},{"StartTime":144224.0,"Position":256.556366},{"StartTime":144357.0,"Position":274.917175}]},{"StartTime":144474.0,"Objects":[{"StartTime":144474.0,"Position":435.0}]},{"StartTime":144589.0,"Objects":[{"StartTime":144589.0,"Position":435.0},{"StartTime":144686.0,"Position":427.556366},{"StartTime":144819.0,"Position":452.917175}]},{"StartTime":144935.0,"Objects":[{"StartTime":144935.0,"Position":149.0}]},{"StartTime":145051.0,"Objects":[{"StartTime":145051.0,"Position":149.0},{"StartTime":145166.0,"Position":157.864655}]},{"StartTime":145281.0,"Objects":[{"StartTime":145281.0,"Position":353.0},{"StartTime":145396.0,"Position":343.165436}]},{"StartTime":145512.0,"Objects":[{"StartTime":145512.0,"Position":169.0},{"StartTime":145627.0,"Position":178.381}]},{"StartTime":145742.0,"Objects":[{"StartTime":145742.0,"Position":332.0},{"StartTime":145857.0,"Position":322.625}]},{"StartTime":145974.0,"Objects":[{"StartTime":145974.0,"Position":95.0},{"StartTime":146089.0,"Position":103.138893}]},{"StartTime":146204.0,"Objects":[{"StartTime":146204.0,"Position":247.0},{"StartTime":146319.0,"Position":237.00386}]},{"StartTime":146435.0,"Objects":[{"StartTime":146435.0,"Position":166.0},{"StartTime":146550.0,"Position":175.99614}]},{"StartTime":146666.0,"Objects":[{"StartTime":146666.0,"Position":318.0},{"StartTime":146781.0,"Position":308.003845}]},{"StartTime":146897.0,"Objects":[{"StartTime":146897.0,"Position":475.0},{"StartTime":147012.0,"Position":465.9648}]},{"StartTime":147127.0,"Objects":[{"StartTime":147127.0,"Position":322.0},{"StartTime":147242.0,"Position":331.891}]},{"StartTime":147358.0,"Objects":[{"StartTime":147358.0,"Position":403.0},{"StartTime":147473.0,"Position":393.993683}]},{"StartTime":147589.0,"Objects":[{"StartTime":147589.0,"Position":252.0},{"StartTime":147704.0,"Position":261.006317}]},{"StartTime":147820.0,"Objects":[{"StartTime":147820.0,"Position":38.0},{"StartTime":147935.0,"Position":131.053864}]},{"StartTime":148050.0,"Objects":[{"StartTime":148050.0,"Position":93.0},{"StartTime":148165.0,"Position":0.0}]},{"StartTime":148281.0,"Objects":[{"StartTime":148281.0,"Position":247.0}]},{"StartTime":148397.0,"Objects":[{"StartTime":148397.0,"Position":186.0}]},{"StartTime":148512.0,"Objects":[{"StartTime":148512.0,"Position":365.0}]},{"StartTime":148627.0,"Objects":[{"StartTime":148627.0,"Position":189.0}]},{"StartTime":148743.0,"Objects":[{"StartTime":148743.0,"Position":237.0}]},{"StartTime":148858.0,"Objects":[{"StartTime":148858.0,"Position":95.0}]},{"StartTime":148916.0,"Objects":[{"StartTime":148916.0,"Position":95.0}]},{"StartTime":148974.0,"Objects":[{"StartTime":148974.0,"Position":95.0}]},{"StartTime":149089.0,"Objects":[{"StartTime":149089.0,"Position":276.0}]},{"StartTime":149204.0,"Objects":[{"StartTime":149204.0,"Position":125.0}]},{"StartTime":149320.0,"Objects":[{"StartTime":149320.0,"Position":189.0}]},{"StartTime":149435.0,"Objects":[{"StartTime":149435.0,"Position":361.0}]},{"StartTime":149551.0,"Objects":[{"StartTime":149551.0,"Position":425.0}]},{"StartTime":149666.0,"Objects":[{"StartTime":149666.0,"Position":330.0},{"StartTime":149723.0,"Position":331.352},{"StartTime":149781.0,"Position":311.357727},{"StartTime":149838.0,"Position":279.9202},{"StartTime":149896.0,"Position":255.683853},{"StartTime":149953.0,"Position":217.7223},{"StartTime":150011.0,"Position":200.628571},{"StartTime":150069.0,"Position":203.167557},{"StartTime":150127.0,"Position":163.74411},{"StartTime":150224.0,"Position":117.720741},{"StartTime":150358.0,"Position":78.3954544}]},{"StartTime":150589.0,"Objects":[{"StartTime":150589.0,"Position":237.0},{"StartTime":150646.0,"Position":260.648},{"StartTime":150704.0,"Position":255.642273},{"StartTime":150761.0,"Position":287.079773},{"StartTime":150819.0,"Position":311.316132},{"StartTime":150876.0,"Position":340.2777},{"StartTime":150934.0,"Position":336.371429},{"StartTime":150992.0,"Position":361.832428},{"StartTime":151050.0,"Position":403.2559},{"StartTime":151147.0,"Position":436.279266},{"StartTime":151281.0,"Position":488.604553}]},{"StartTime":151512.0,"Objects":[{"StartTime":151512.0,"Position":401.0},{"StartTime":151569.0,"Position":377.03656},{"StartTime":151627.0,"Position":340.670227},{"StartTime":151684.0,"Position":329.7068},{"StartTime":151742.0,"Position":308.340454},{"StartTime":151799.0,"Position":277.376984},{"StartTime":151857.0,"Position":281.010681},{"StartTime":151915.0,"Position":235.644348},{"StartTime":151973.0,"Position":215.27803},{"StartTime":152070.0,"Position":161.19986},{"StartTime":152204.0,"Position":122.215607}]},{"StartTime":152320.0,"Objects":[{"StartTime":152320.0,"Position":44.0}]},{"StartTime":152377.0,"Objects":[{"StartTime":152377.0,"Position":44.0}]},{"StartTime":152435.0,"Objects":[{"StartTime":152435.0,"Position":44.0}]},{"StartTime":152551.0,"Objects":[{"StartTime":152551.0,"Position":44.0}]},{"StartTime":152666.0,"Objects":[{"StartTime":152666.0,"Position":151.0}]},{"StartTime":152781.0,"Objects":[{"StartTime":152781.0,"Position":216.0}]},{"StartTime":152897.0,"Objects":[{"StartTime":152897.0,"Position":281.0}]},{"StartTime":153012.0,"Objects":[{"StartTime":153012.0,"Position":388.0}]},{"StartTime":153128.0,"Objects":[{"StartTime":153128.0,"Position":388.0}]},{"StartTime":153243.0,"Objects":[{"StartTime":153243.0,"Position":281.0}]},{"StartTime":153358.0,"Objects":[{"StartTime":153358.0,"Position":216.0},{"StartTime":153415.0,"Position":226.0244},{"StartTime":153473.0,"Position":266.452759},{"StartTime":153530.0,"Position":277.477142},{"StartTime":153588.0,"Position":308.9055},{"StartTime":153645.0,"Position":320.9299},{"StartTime":153703.0,"Position":352.358246},{"StartTime":153761.0,"Position":395.78656},{"StartTime":153819.0,"Position":402.2149},{"StartTime":153916.0,"Position":425.3968},{"StartTime":154050.0,"Position":495.524353}]},{"StartTime":154281.0,"Objects":[{"StartTime":154281.0,"Position":296.0},{"StartTime":154338.0,"Position":291.9756},{"StartTime":154396.0,"Position":244.547256},{"StartTime":154453.0,"Position":217.522858},{"StartTime":154511.0,"Position":203.094513},{"StartTime":154568.0,"Position":171.0701},{"StartTime":154626.0,"Position":142.641754},{"StartTime":154684.0,"Position":151.213425},{"StartTime":154742.0,"Position":109.78508},{"StartTime":154839.0,"Position":81.6031952},{"StartTime":154973.0,"Position":16.475647}]},{"StartTime":155204.0,"Objects":[{"StartTime":155204.0,"Position":148.0},{"StartTime":155261.0,"Position":167.0272},{"StartTime":155319.0,"Position":197.4584},{"StartTime":155376.0,"Position":235.485626},{"StartTime":155434.0,"Position":240.916824},{"StartTime":155491.0,"Position":280.944031},{"StartTime":155549.0,"Position":292.375244},{"StartTime":155607.0,"Position":324.806427},{"StartTime":155665.0,"Position":334.2376},{"StartTime":155762.0,"Position":358.424316},{"StartTime":155896.0,"Position":427.558441}]},{"StartTime":156127.0,"Objects":[{"StartTime":156127.0,"Position":492.0}]},{"StartTime":156185.0,"Objects":[{"StartTime":156185.0,"Position":492.0}]},{"StartTime":156243.0,"Objects":[{"StartTime":156243.0,"Position":492.0}]},{"StartTime":156358.0,"Objects":[{"StartTime":156358.0,"Position":320.0}]},{"StartTime":156474.0,"Objects":[{"StartTime":156474.0,"Position":427.0}]},{"StartTime":156531.0,"Objects":[{"StartTime":156531.0,"Position":427.0}]},{"StartTime":156589.0,"Objects":[{"StartTime":156589.0,"Position":427.0}]},{"StartTime":156704.0,"Objects":[{"StartTime":156704.0,"Position":427.0}]},{"StartTime":156820.0,"Objects":[{"StartTime":156820.0,"Position":320.0}]},{"StartTime":156935.0,"Objects":[{"StartTime":156935.0,"Position":492.0}]},{"StartTime":157051.0,"Objects":[{"StartTime":157051.0,"Position":320.0},{"StartTime":157108.0,"Position":293.075256},{"StartTime":157166.0,"Position":291.5834},{"StartTime":157223.0,"Position":265.708435},{"StartTime":157281.0,"Position":228.07811},{"StartTime":157338.0,"Position":198.635651},{"StartTime":157396.0,"Position":200.338867},{"StartTime":157454.0,"Position":155.91835},{"StartTime":157512.0,"Position":141.778442},{"StartTime":157609.0,"Position":120.033043},{"StartTime":157743.0,"Position":49.3783264}]},{"StartTime":157974.0,"Objects":[{"StartTime":157974.0,"Position":0.0},{"StartTime":158031.0,"Position":0.0},{"StartTime":158089.0,"Position":41.02053},{"StartTime":158146.0,"Position":65.73743},{"StartTime":158204.0,"Position":71.05002},{"StartTime":158261.0,"Position":96.01849},{"StartTime":158319.0,"Position":109.1918},{"StartTime":158377.0,"Position":127.905212},{"StartTime":158435.0,"Position":157.97081},{"StartTime":158532.0,"Position":185.086624},{"StartTime":158666.0,"Position":189.926224}]},{"StartTime":158897.0,"Objects":[{"StartTime":158897.0,"Position":281.0},{"StartTime":158954.0,"Position":299.551483},{"StartTime":159012.0,"Position":301.147766},{"StartTime":159069.0,"Position":286.699249},{"StartTime":159127.0,"Position":291.2955},{"StartTime":159184.0,"Position":309.847},{"StartTime":159242.0,"Position":310.443268},{"StartTime":159300.0,"Position":314.03952},{"StartTime":159358.0,"Position":301.635773},{"StartTime":159455.0,"Position":304.977783},{"StartTime":159589.0,"Position":311.976044}]},{"StartTime":159704.0,"Objects":[{"StartTime":159704.0,"Position":419.0}]},{"StartTime":159762.0,"Objects":[{"StartTime":159762.0,"Position":419.0}]},{"StartTime":159820.0,"Objects":[{"StartTime":159820.0,"Position":419.0}]},{"StartTime":159935.0,"Objects":[{"StartTime":159935.0,"Position":484.0}]},{"StartTime":160051.0,"Objects":[{"StartTime":160051.0,"Position":419.0}]},{"StartTime":160166.0,"Objects":[{"StartTime":160166.0,"Position":312.0}]},{"StartTime":160281.0,"Objects":[{"StartTime":160281.0,"Position":312.0}]},{"StartTime":160397.0,"Objects":[{"StartTime":160397.0,"Position":205.0}]},{"StartTime":160513.0,"Objects":[{"StartTime":160513.0,"Position":140.0}]},{"StartTime":160627.0,"Objects":[{"StartTime":160627.0,"Position":206.0}]},{"StartTime":160743.0,"Objects":[{"StartTime":160743.0,"Position":312.0},{"StartTime":160858.0,"Position":404.320251}]},{"StartTime":160974.0,"Objects":[{"StartTime":160974.0,"Position":484.0},{"StartTime":161089.0,"Position":391.679749}]},{"StartTime":161204.0,"Objects":[{"StartTime":161204.0,"Position":206.0},{"StartTime":161319.0,"Position":298.320251}]},{"StartTime":161435.0,"Objects":[{"StartTime":161435.0,"Position":378.0},{"StartTime":161550.0,"Position":285.679749}]},{"StartTime":161666.0,"Objects":[{"StartTime":161666.0,"Position":44.0},{"StartTime":161781.0,"Position":32.89971}]},{"StartTime":161897.0,"Objects":[{"StartTime":161897.0,"Position":116.0},{"StartTime":162012.0,"Position":125.99614}]},{"StartTime":162127.0,"Objects":[{"StartTime":162127.0,"Position":216.0},{"StartTime":162242.0,"Position":204.899719}]},{"StartTime":162358.0,"Objects":[{"StartTime":162358.0,"Position":288.0},{"StartTime":162473.0,"Position":297.996155}]},{"StartTime":162589.0,"Objects":[{"StartTime":162589.0,"Position":388.0},{"StartTime":162704.0,"Position":471.636383}]},{"StartTime":162820.0,"Objects":[{"StartTime":162820.0,"Position":494.0},{"StartTime":162935.0,"Position":410.363617}]},{"StartTime":163051.0,"Objects":[{"StartTime":163051.0,"Position":496.0},{"StartTime":163166.0,"Position":472.107727}]},{"StartTime":163281.0,"Objects":[{"StartTime":163281.0,"Position":386.0},{"StartTime":163396.0,"Position":409.233765}]},{"StartTime":163512.0,"Objects":[{"StartTime":163512.0,"Position":511.0},{"StartTime":163627.0,"Position":418.102081}]},{"StartTime":163743.0,"Objects":[{"StartTime":163743.0,"Position":195.0},{"StartTime":163858.0,"Position":287.9525}]},{"StartTime":163974.0,"Objects":[{"StartTime":163974.0,"Position":410.0},{"StartTime":164089.0,"Position":317.102081}]},{"StartTime":164205.0,"Objects":[{"StartTime":164205.0,"Position":94.0},{"StartTime":164320.0,"Position":186.952515}]},{"StartTime":164435.0,"Objects":[{"StartTime":164435.0,"Position":440.0},{"StartTime":164550.0,"Position":400.919037}]},{"StartTime":164666.0,"Objects":[{"StartTime":164666.0,"Position":458.0},{"StartTime":164781.0,"Position":409.400452}]},{"StartTime":164897.0,"Objects":[{"StartTime":164897.0,"Position":255.0},{"StartTime":165012.0,"Position":341.989532}]},{"StartTime":165127.0,"Objects":[{"StartTime":165127.0,"Position":508.0}]},{"StartTime":165243.0,"Objects":[{"StartTime":165243.0,"Position":494.0}]},{"StartTime":165301.0,"Objects":[{"StartTime":165301.0,"Position":494.0}]},{"StartTime":165358.0,"Objects":[{"StartTime":165358.0,"Position":494.0},{"StartTime":165473.0,"Position":483.075348}]},{"StartTime":165589.0,"Objects":[{"StartTime":165589.0,"Position":341.0}]},{"StartTime":165704.0,"Objects":[{"StartTime":165704.0,"Position":341.0}]},{"StartTime":165820.0,"Objects":[{"StartTime":165820.0,"Position":306.0}]},{"StartTime":165877.0,"Objects":[{"StartTime":165877.0,"Position":271.0}]},{"StartTime":165935.0,"Objects":[{"StartTime":165935.0,"Position":225.0}]},{"StartTime":165993.0,"Objects":[{"StartTime":165993.0,"Position":188.0}]},{"StartTime":166050.0,"Objects":[{"StartTime":166050.0,"Position":176.0}]},{"StartTime":166108.0,"Objects":[{"StartTime":166108.0,"Position":164.0}]},{"StartTime":166166.0,"Objects":[{"StartTime":166166.0,"Position":127.0}]},{"StartTime":166224.0,"Objects":[{"StartTime":166224.0,"Position":81.0}]},{"StartTime":166281.0,"Objects":[{"StartTime":166281.0,"Position":46.0},{"StartTime":166378.0,"Position":13.5703487},{"StartTime":166511.0,"Position":112.726479}]},{"StartTime":166627.0,"Objects":[{"StartTime":166627.0,"Position":225.0}]},{"StartTime":166743.0,"Objects":[{"StartTime":166743.0,"Position":225.0},{"StartTime":166840.0,"Position":225.048615},{"StartTime":166973.0,"Position":253.568863}]},{"StartTime":167089.0,"Objects":[{"StartTime":167089.0,"Position":150.0}]},{"StartTime":167204.0,"Objects":[{"StartTime":167204.0,"Position":150.0},{"StartTime":167319.0,"Position":151.753357}]},{"StartTime":167435.0,"Objects":[{"StartTime":167435.0,"Position":235.0},{"StartTime":167503.0,"Position":308.8305},{"StartTime":167608.0,"Position":374.495239}]},{"StartTime":167666.0,"Objects":[{"StartTime":167666.0,"Position":426.0},{"StartTime":167781.0,"Position":332.9248}]},{"StartTime":167897.0,"Objects":[{"StartTime":167897.0,"Position":223.0},{"StartTime":168012.0,"Position":315.986267}]},{"StartTime":168127.0,"Objects":[{"StartTime":168127.0,"Position":476.0},{"StartTime":168224.0,"Position":390.140137},{"StartTime":168357.0,"Position":352.612549}]},{"StartTime":168474.0,"Objects":[{"StartTime":168474.0,"Position":425.0},{"StartTime":168571.0,"Position":461.0984},{"StartTime":168704.0,"Position":424.602539}]},{"StartTime":168820.0,"Objects":[{"StartTime":168820.0,"Position":280.0},{"StartTime":168935.0,"Position":315.84964}]},{"StartTime":169051.0,"Objects":[{"StartTime":169051.0,"Position":352.0},{"StartTime":169166.0,"Position":259.313049}]},{"StartTime":169281.0,"Objects":[{"StartTime":169281.0,"Position":122.0},{"StartTime":169396.0,"Position":214.599686}]},{"StartTime":169512.0,"Objects":[{"StartTime":169512.0,"Position":425.0},{"StartTime":169627.0,"Position":332.40033}]},{"StartTime":169743.0,"Objects":[{"StartTime":169743.0,"Position":200.0}]},{"StartTime":169800.0,"Objects":[{"StartTime":169800.0,"Position":203.0}]},{"StartTime":169858.0,"Objects":[{"StartTime":169858.0,"Position":206.0}]},{"StartTime":169916.0,"Objects":[{"StartTime":169916.0,"Position":211.0}]},{"StartTime":169974.0,"Objects":[{"StartTime":169974.0,"Position":215.0},{"StartTime":170071.0,"Position":180.225677},{"StartTime":170204.0,"Position":73.0661545}]},{"StartTime":170320.0,"Objects":[{"StartTime":170320.0,"Position":29.0}]},{"StartTime":170435.0,"Objects":[{"StartTime":170435.0,"Position":29.0},{"StartTime":170532.0,"Position":42.67274},{"StartTime":170665.0,"Position":54.3065}]},{"StartTime":170781.0,"Objects":[{"StartTime":170781.0,"Position":127.0}]},{"StartTime":170897.0,"Objects":[{"StartTime":170897.0,"Position":127.0},{"StartTime":171012.0,"Position":205.322327}]},{"StartTime":171127.0,"Objects":[{"StartTime":171127.0,"Position":389.0},{"StartTime":171195.0,"Position":323.909668},{"StartTime":171300.0,"Position":279.463837}]},{"StartTime":171358.0,"Objects":[{"StartTime":171358.0,"Position":264.0},{"StartTime":171473.0,"Position":275.884918}]},{"StartTime":171589.0,"Objects":[{"StartTime":171589.0,"Position":470.0},{"StartTime":171704.0,"Position":457.559143}]},{"StartTime":171820.0,"Objects":[{"StartTime":171820.0,"Position":508.0},{"StartTime":171917.0,"Position":426.554321},{"StartTime":172050.0,"Position":322.475342}]},{"StartTime":172166.0,"Objects":[{"StartTime":172166.0,"Position":214.0}]},{"StartTime":172281.0,"Objects":[{"StartTime":172281.0,"Position":214.0},{"StartTime":172378.0,"Position":300.4861},{"StartTime":172511.0,"Position":399.6029}]},{"StartTime":172628.0,"Objects":[{"StartTime":172628.0,"Position":223.0}]},{"StartTime":172743.0,"Objects":[{"StartTime":172743.0,"Position":223.0},{"StartTime":172811.0,"Position":156.108978},{"StartTime":172916.0,"Position":83.35077}]},{"StartTime":172974.0,"Objects":[{"StartTime":172974.0,"Position":59.0},{"StartTime":173089.0,"Position":152.155975}]},{"StartTime":173204.0,"Objects":[{"StartTime":173204.0,"Position":329.0},{"StartTime":173319.0,"Position":315.0967}]},{"StartTime":173435.0,"Objects":[{"StartTime":173435.0,"Position":264.0},{"StartTime":173550.0,"Position":277.903259}]},{"StartTime":173666.0,"Objects":[{"StartTime":173666.0,"Position":170.0},{"StartTime":173763.0,"Position":114.439369},{"StartTime":173896.0,"Position":4.07558155}]},{"StartTime":174012.0,"Objects":[{"StartTime":174012.0,"Position":203.0}]},{"StartTime":174127.0,"Objects":[{"StartTime":174127.0,"Position":203.0},{"StartTime":174224.0,"Position":269.13266},{"StartTime":174357.0,"Position":368.4376}]},{"StartTime":174474.0,"Objects":[{"StartTime":174474.0,"Position":484.0}]},{"StartTime":174589.0,"Objects":[{"StartTime":174589.0,"Position":484.0},{"StartTime":174686.0,"Position":490.562531},{"StartTime":174819.0,"Position":457.976868}]},{"StartTime":174935.0,"Objects":[{"StartTime":174935.0,"Position":361.0}]},{"StartTime":175051.0,"Objects":[{"StartTime":175051.0,"Position":361.0},{"StartTime":175166.0,"Position":348.052032}]},{"StartTime":175281.0,"Objects":[{"StartTime":175281.0,"Position":249.0},{"StartTime":175396.0,"Position":261.933167}]},{"StartTime":175512.0,"Objects":[{"StartTime":175512.0,"Position":398.0},{"StartTime":175609.0,"Position":357.004059},{"StartTime":175742.0,"Position":237.310669}]},{"StartTime":175858.0,"Objects":[{"StartTime":175858.0,"Position":164.0}]},{"StartTime":175974.0,"Objects":[{"StartTime":175974.0,"Position":164.0},{"StartTime":176071.0,"Position":112.3117},{"StartTime":176204.0,"Position":3.52966261}]},{"StartTime":176320.0,"Objects":[{"StartTime":176320.0,"Position":237.0}]},{"StartTime":176435.0,"Objects":[{"StartTime":176435.0,"Position":237.0},{"StartTime":176532.0,"Position":259.6251},{"StartTime":176665.0,"Position":267.121826}]},{"StartTime":176781.0,"Objects":[{"StartTime":176781.0,"Position":151.0}]},{"StartTime":176897.0,"Objects":[{"StartTime":176897.0,"Position":0.0},{"StartTime":177012.0,"Position":93.23626}]},{"StartTime":177127.0,"Objects":[{"StartTime":177127.0,"Position":164.0},{"StartTime":177242.0,"Position":70.66135}]},{"StartTime":177358.0,"Objects":[{"StartTime":177358.0,"Position":208.0}]},{"StartTime":177474.0,"Objects":[{"StartTime":177474.0,"Position":242.0}]},{"StartTime":177589.0,"Objects":[{"StartTime":177589.0,"Position":334.0}]},{"StartTime":177704.0,"Objects":[{"StartTime":177704.0,"Position":358.0}]},{"StartTime":177820.0,"Objects":[{"StartTime":177820.0,"Position":281.0}]},{"StartTime":177935.0,"Objects":[{"StartTime":177935.0,"Position":208.0}]},{"StartTime":178051.0,"Objects":[{"StartTime":178051.0,"Position":129.0}]},{"StartTime":178166.0,"Objects":[{"StartTime":178166.0,"Position":153.0}]},{"StartTime":178281.0,"Objects":[{"StartTime":178281.0,"Position":246.0},{"StartTime":178396.0,"Position":235.13266}]},{"StartTime":178512.0,"Objects":[{"StartTime":178512.0,"Position":142.0},{"StartTime":178627.0,"Position":153.100281}]},{"StartTime":178743.0,"Objects":[{"StartTime":178743.0,"Position":139.0},{"StartTime":178858.0,"Position":128.13266}]},{"StartTime":178974.0,"Objects":[{"StartTime":178974.0,"Position":35.0},{"StartTime":179089.0,"Position":44.9961433}]},{"StartTime":179204.0,"Objects":[{"StartTime":179204.0,"Position":139.0},{"StartTime":179319.0,"Position":224.03212}]},{"StartTime":179435.0,"Objects":[{"StartTime":179435.0,"Position":362.0},{"StartTime":179550.0,"Position":277.1364}]},{"StartTime":179666.0,"Objects":[{"StartTime":179666.0,"Position":392.0}]},{"StartTime":179781.0,"Objects":[{"StartTime":179781.0,"Position":464.0}]},{"StartTime":179839.0,"Objects":[{"StartTime":179839.0,"Position":464.0}]},{"StartTime":179897.0,"Objects":[{"StartTime":179897.0,"Position":464.0}]},{"StartTime":180012.0,"Objects":[{"StartTime":180012.0,"Position":378.0}]},{"StartTime":180127.0,"Objects":[{"StartTime":180127.0,"Position":450.0}]},{"StartTime":180243.0,"Objects":[{"StartTime":180243.0,"Position":362.0}]},{"StartTime":180301.0,"Objects":[{"StartTime":180301.0,"Position":362.0}]},{"StartTime":180358.0,"Objects":[{"StartTime":180358.0,"Position":362.0},{"StartTime":180473.0,"Position":269.439728}]},{"StartTime":180589.0,"Objects":[{"StartTime":180589.0,"Position":160.0}]},{"StartTime":180704.0,"Objects":[{"StartTime":180704.0,"Position":105.0}]},{"StartTime":180820.0,"Objects":[{"StartTime":180820.0,"Position":269.0}]},{"StartTime":180935.0,"Objects":[{"StartTime":180935.0,"Position":259.0}]},{"StartTime":181051.0,"Objects":[{"StartTime":181051.0,"Position":172.0},{"StartTime":181148.0,"Position":183.745956},{"StartTime":181281.0,"Position":200.939163}]},{"StartTime":181397.0,"Objects":[{"StartTime":181397.0,"Position":121.0}]},{"StartTime":181512.0,"Objects":[{"StartTime":181512.0,"Position":37.0},{"StartTime":181609.0,"Position":7.25404358},{"StartTime":181742.0,"Position":8.060843}]},{"StartTime":181858.0,"Objects":[{"StartTime":181858.0,"Position":58.0}]},{"StartTime":181974.0,"Objects":[{"StartTime":181974.0,"Position":58.0},{"StartTime":182089.0,"Position":150.126}]},{"StartTime":182204.0,"Objects":[{"StartTime":182204.0,"Position":381.0},{"StartTime":182272.0,"Position":332.8273},{"StartTime":182377.0,"Position":254.1083}]},{"StartTime":182435.0,"Objects":[{"StartTime":182435.0,"Position":214.0},{"StartTime":182550.0,"Position":222.465088}]},{"StartTime":182666.0,"Objects":[{"StartTime":182666.0,"Position":184.0}]},{"StartTime":182781.0,"Objects":[{"StartTime":182781.0,"Position":278.0},{"StartTime":182878.0,"Position":343.517975},{"StartTime":183011.0,"Position":460.104675}]},{"StartTime":183127.0,"Objects":[{"StartTime":183127.0,"Position":505.0},{"StartTime":183224.0,"Position":506.0097},{"StartTime":183357.0,"Position":474.6805}]},{"StartTime":183474.0,"Objects":[{"StartTime":183474.0,"Position":403.0},{"StartTime":183589.0,"Position":384.290771}]},{"StartTime":183704.0,"Objects":[{"StartTime":183704.0,"Position":331.0}]},{"StartTime":183820.0,"Objects":[{"StartTime":183820.0,"Position":287.0},{"StartTime":183917.0,"Position":239.7063},{"StartTime":184050.0,"Position":124.792366}]},{"StartTime":184166.0,"Objects":[{"StartTime":184166.0,"Position":90.0}]},{"StartTime":184281.0,"Objects":[{"StartTime":184281.0,"Position":29.0},{"StartTime":184396.0,"Position":36.2351723}]},{"StartTime":184512.0,"Objects":[{"StartTime":184512.0,"Position":183.0},{"StartTime":184627.0,"Position":175.764832}]},{"StartTime":184743.0,"Objects":[{"StartTime":184743.0,"Position":134.0},{"StartTime":184840.0,"Position":205.774551},{"StartTime":184973.0,"Position":308.5132}]},{"StartTime":185089.0,"Objects":[{"StartTime":185089.0,"Position":370.0}]},{"StartTime":185204.0,"Objects":[{"StartTime":185204.0,"Position":357.0},{"StartTime":185301.0,"Position":296.225433},{"StartTime":185434.0,"Position":182.486786}]},{"StartTime":185551.0,"Objects":[{"StartTime":185551.0,"Position":102.0}]},{"StartTime":185666.0,"Objects":[{"StartTime":185666.0,"Position":102.0},{"StartTime":185781.0,"Position":91.49733}]},{"StartTime":185897.0,"Objects":[{"StartTime":185897.0,"Position":103.0},{"StartTime":185965.0,"Position":54.970726},{"StartTime":186070.0,"Position":73.73589}]},{"StartTime":186127.0,"Objects":[{"StartTime":186127.0,"Position":101.0},{"StartTime":186242.0,"Position":194.129517}]},{"StartTime":186358.0,"Objects":[{"StartTime":186358.0,"Position":281.0}]},{"StartTime":186474.0,"Objects":[{"StartTime":186474.0,"Position":254.0},{"StartTime":186571.0,"Position":244.698975},{"StartTime":186704.0,"Position":233.4666}]},{"StartTime":186820.0,"Objects":[{"StartTime":186820.0,"Position":274.0},{"StartTime":186917.0,"Position":358.1199},{"StartTime":187050.0,"Position":433.080933}]},{"StartTime":187166.0,"Objects":[{"StartTime":187166.0,"Position":509.0}]},{"StartTime":187281.0,"Objects":[{"StartTime":187281.0,"Position":422.0},{"StartTime":187396.0,"Position":340.965149}]},{"StartTime":187512.0,"Objects":[{"StartTime":187512.0,"Position":268.0},{"StartTime":187609.0,"Position":213.825912},{"StartTime":187742.0,"Position":105.566551}]},{"StartTime":187858.0,"Objects":[{"StartTime":187858.0,"Position":25.0}]},{"StartTime":187974.0,"Objects":[{"StartTime":187974.0,"Position":36.0},{"StartTime":188089.0,"Position":42.7299232}]},{"StartTime":188204.0,"Objects":[{"StartTime":188204.0,"Position":95.0},{"StartTime":188319.0,"Position":88.27008}]},{"StartTime":188435.0,"Objects":[{"StartTime":188435.0,"Position":164.0},{"StartTime":188532.0,"Position":250.74646},{"StartTime":188665.0,"Position":347.91684}]},{"StartTime":188781.0,"Objects":[{"StartTime":188781.0,"Position":438.0}]},{"StartTime":188897.0,"Objects":[{"StartTime":188897.0,"Position":367.0},{"StartTime":188994.0,"Position":300.25354},{"StartTime":189127.0,"Position":183.083176}]},{"StartTime":189243.0,"Objects":[{"StartTime":189243.0,"Position":95.0}]},{"StartTime":189358.0,"Objects":[{"StartTime":189358.0,"Position":95.0},{"StartTime":189473.0,"Position":105.123306}]},{"StartTime":189589.0,"Objects":[{"StartTime":189589.0,"Position":54.0},{"StartTime":189686.0,"Position":143.350739},{"StartTime":189819.0,"Position":211.608444}]},{"StartTime":189935.0,"Objects":[{"StartTime":189935.0,"Position":285.0}]},{"StartTime":190051.0,"Objects":[{"StartTime":190051.0,"Position":370.0},{"StartTime":190166.0,"Position":456.4452}]},{"StartTime":190281.0,"Objects":[{"StartTime":190281.0,"Position":497.0},{"StartTime":190378.0,"Position":487.7584},{"StartTime":190511.0,"Position":468.630341}]},{"StartTime":190627.0,"Objects":[{"StartTime":190627.0,"Position":387.0}]},{"StartTime":190743.0,"Objects":[{"StartTime":190743.0,"Position":387.0},{"StartTime":190858.0,"Position":377.603363}]},{"StartTime":190974.0,"Objects":[{"StartTime":190974.0,"Position":294.0},{"StartTime":191089.0,"Position":303.396637}]},{"StartTime":191204.0,"Objects":[{"StartTime":191204.0,"Position":291.0},{"StartTime":191301.0,"Position":243.908234},{"StartTime":191434.0,"Position":133.226776}]},{"StartTime":191551.0,"Objects":[{"StartTime":191551.0,"Position":110.0}]},{"StartTime":191666.0,"Objects":[{"StartTime":191666.0,"Position":161.0},{"StartTime":191781.0,"Position":240.658936}]},{"StartTime":191897.0,"Objects":[{"StartTime":191897.0,"Position":133.0},{"StartTime":192012.0,"Position":45.915966}]},{"StartTime":192127.0,"Objects":[{"StartTime":192127.0,"Position":13.0},{"StartTime":192184.0,"Position":44.7075653},{"StartTime":192242.0,"Position":89.5079346},{"StartTime":192299.0,"Position":137.603119},{"StartTime":192357.0,"Position":166.4208},{"StartTime":192414.0,"Position":210.151184},{"StartTime":192472.0,"Position":238.302551},{"StartTime":192530.0,"Position":303.220978},{"StartTime":192588.0,"Position":328.981537},{"StartTime":192685.0,"Position":401.712677},{"StartTime":192819.0,"Position":492.059631}]},{"StartTime":193051.0,"Objects":[{"StartTime":193051.0,"Position":373.0}]},{"StartTime":193974.0,"Objects":[{"StartTime":193974.0,"Position":13.0},{"StartTime":194031.0,"Position":20.7075653},{"StartTime":194089.0,"Position":81.5079346},{"StartTime":194146.0,"Position":136.603119},{"StartTime":194204.0,"Position":166.4208},{"StartTime":194261.0,"Position":225.151184},{"StartTime":194319.0,"Position":245.302551},{"StartTime":194377.0,"Position":294.220978},{"StartTime":194435.0,"Position":328.981537},{"StartTime":194532.0,"Position":407.712677},{"StartTime":194666.0,"Position":492.059631}]},{"StartTime":194898.0,"Objects":[{"StartTime":194898.0,"Position":373.0}]},{"StartTime":195127.0,"Objects":[{"StartTime":195127.0,"Position":139.0}]},{"StartTime":195358.0,"Objects":[{"StartTime":195358.0,"Position":343.0}]},{"StartTime":195589.0,"Objects":[{"StartTime":195589.0,"Position":373.0},{"StartTime":195704.0,"Position":361.7968}]},{"StartTime":195820.0,"Objects":[{"StartTime":195820.0,"Position":232.0},{"StartTime":195935.0,"Position":251.556152}]},{"StartTime":196051.0,"Objects":[{"StartTime":196051.0,"Position":447.0},{"StartTime":196166.0,"Position":466.890839}]},{"StartTime":196281.0,"Objects":[{"StartTime":196281.0,"Position":327.0}]},{"StartTime":196397.0,"Objects":[{"StartTime":196397.0,"Position":512.0}]},{"StartTime":196454.0,"Objects":[{"StartTime":196454.0,"Position":496.0}]},{"StartTime":196512.0,"Objects":[{"StartTime":196512.0,"Position":483.0}]},{"StartTime":196570.0,"Objects":[{"StartTime":196570.0,"Position":472.0}]},{"StartTime":196627.0,"Objects":[{"StartTime":196627.0,"Position":463.0}]},{"StartTime":196685.0,"Objects":[{"StartTime":196685.0,"Position":456.0}]},{"StartTime":196743.0,"Objects":[{"StartTime":196743.0,"Position":452.0}]},{"StartTime":196801.0,"Objects":[{"StartTime":196801.0,"Position":426.0}]},{"StartTime":196858.0,"Objects":[{"StartTime":196858.0,"Position":390.0}]},{"StartTime":196916.0,"Objects":[{"StartTime":196916.0,"Position":347.0}]},{"StartTime":196974.0,"Objects":[{"StartTime":196974.0,"Position":303.0}]},{"StartTime":197031.0,"Objects":[{"StartTime":197031.0,"Position":269.0}]},{"StartTime":197089.0,"Objects":[{"StartTime":197089.0,"Position":240.0}]},{"StartTime":197147.0,"Objects":[{"StartTime":197147.0,"Position":199.0}]},{"StartTime":197204.0,"Objects":[{"StartTime":197204.0,"Position":151.0}]},{"StartTime":197262.0,"Objects":[{"StartTime":197262.0,"Position":112.0}]},{"StartTime":197320.0,"Objects":[{"StartTime":197320.0,"Position":104.0}]},{"StartTime":197377.0,"Objects":[{"StartTime":197377.0,"Position":127.0}]},{"StartTime":197435.0,"Objects":[{"StartTime":197435.0,"Position":172.0}]},{"StartTime":197493.0,"Objects":[{"StartTime":197493.0,"Position":226.0}]},{"StartTime":197551.0,"Objects":[{"StartTime":197551.0,"Position":267.0}]},{"StartTime":197608.0,"Objects":[{"StartTime":197608.0,"Position":319.0}]},{"StartTime":197666.0,"Objects":[{"StartTime":197666.0,"Position":364.0},{"StartTime":197763.0,"Position":374.592529},{"StartTime":197896.0,"Position":383.675659}]},{"StartTime":198012.0,"Objects":[{"StartTime":198012.0,"Position":293.0}]},{"StartTime":198127.0,"Objects":[{"StartTime":198127.0,"Position":464.0},{"StartTime":198224.0,"Position":432.4073},{"StartTime":198357.0,"Position":444.324158}]},{"StartTime":198473.0,"Objects":[{"StartTime":198473.0,"Position":364.0}]},{"StartTime":198589.0,"Objects":[{"StartTime":198589.0,"Position":249.0},{"StartTime":198704.0,"Position":157.693237}]},{"StartTime":198820.0,"Objects":[{"StartTime":198820.0,"Position":30.0}]},{"StartTime":199051.0,"Objects":[{"StartTime":199051.0,"Position":30.0},{"StartTime":199166.0,"Position":121.198547}]},{"StartTime":199281.0,"Objects":[{"StartTime":199281.0,"Position":199.0}]},{"StartTime":199396.0,"Objects":[{"StartTime":199396.0,"Position":113.0}]},{"StartTime":199512.0,"Objects":[{"StartTime":199512.0,"Position":355.0},{"StartTime":199609.0,"Position":315.0066},{"StartTime":199742.0,"Position":197.701172}]},{"StartTime":199858.0,"Objects":[{"StartTime":199858.0,"Position":113.0}]},{"StartTime":199974.0,"Objects":[{"StartTime":199974.0,"Position":180.0},{"StartTime":200089.0,"Position":192.352448}]},{"StartTime":200204.0,"Objects":[{"StartTime":200204.0,"Position":16.0},{"StartTime":200319.0,"Position":3.64754772}]},{"StartTime":200435.0,"Objects":[{"StartTime":200435.0,"Position":86.0}]},{"StartTime":200551.0,"Objects":[{"StartTime":200551.0,"Position":192.0}]},{"StartTime":200666.0,"Objects":[{"StartTime":200666.0,"Position":71.0},{"StartTime":200781.0,"Position":72.2961349}]},{"StartTime":200897.0,"Objects":[{"StartTime":200897.0,"Position":268.0},{"StartTime":201012.0,"Position":266.703857}]},{"StartTime":201127.0,"Objects":[{"StartTime":201127.0,"Position":86.0},{"StartTime":201242.0,"Position":178.4856}]},{"StartTime":201358.0,"Objects":[{"StartTime":201358.0,"Position":512.0},{"StartTime":201455.0,"Position":416.254333},{"StartTime":201588.0,"Position":351.186523}]},{"StartTime":201704.0,"Objects":[{"StartTime":201704.0,"Position":247.0}]},{"StartTime":201820.0,"Objects":[{"StartTime":201820.0,"Position":190.0},{"StartTime":201935.0,"Position":177.555588}]},{"StartTime":202051.0,"Objects":[{"StartTime":202051.0,"Position":357.0},{"StartTime":202166.0,"Position":374.613831}]},{"StartTime":202281.0,"Objects":[{"StartTime":202281.0,"Position":427.0}]},{"StartTime":202397.0,"Objects":[{"StartTime":202397.0,"Position":449.0}]},{"StartTime":202512.0,"Objects":[{"StartTime":202512.0,"Position":287.0},{"StartTime":202627.0,"Position":195.426254}]},{"StartTime":202743.0,"Objects":[{"StartTime":202743.0,"Position":10.0},{"StartTime":202840.0,"Position":94.68268},{"StartTime":202973.0,"Position":178.229935}]},{"StartTime":203089.0,"Objects":[{"StartTime":203089.0,"Position":249.0}]},{"StartTime":203204.0,"Objects":[{"StartTime":203204.0,"Position":173.0},{"StartTime":203319.0,"Position":161.9855}]},{"StartTime":203435.0,"Objects":[{"StartTime":203435.0,"Position":327.0},{"StartTime":203550.0,"Position":336.995483}]},{"StartTime":203666.0,"Objects":[{"StartTime":203666.0,"Position":78.0},{"StartTime":203763.0,"Position":142.472641},{"StartTime":203896.0,"Position":236.651749}]},{"StartTime":204012.0,"Objects":[{"StartTime":204012.0,"Position":297.0}]},{"StartTime":204127.0,"Objects":[{"StartTime":204127.0,"Position":379.0},{"StartTime":204242.0,"Position":389.872437}]},{"StartTime":204358.0,"Objects":[{"StartTime":204358.0,"Position":327.0}]},{"StartTime":204474.0,"Objects":[{"StartTime":204474.0,"Position":357.0}]},{"StartTime":204589.0,"Objects":[{"StartTime":204589.0,"Position":512.0},{"StartTime":204704.0,"Position":420.056519}]},{"StartTime":204820.0,"Objects":[{"StartTime":204820.0,"Position":268.0}]},{"StartTime":204935.0,"Objects":[{"StartTime":204935.0,"Position":385.0}]},{"StartTime":205051.0,"Objects":[{"StartTime":205051.0,"Position":357.0},{"StartTime":205148.0,"Position":275.762268},{"StartTime":205281.0,"Position":171.487839}]},{"StartTime":205397.0,"Objects":[{"StartTime":205397.0,"Position":1.0}]},{"StartTime":205512.0,"Objects":[{"StartTime":205512.0,"Position":78.0},{"StartTime":205627.0,"Position":79.69282}]},{"StartTime":205743.0,"Objects":[{"StartTime":205743.0,"Position":1.0},{"StartTime":205858.0,"Position":0.0}]},{"StartTime":205974.0,"Objects":[{"StartTime":205974.0,"Position":130.0},{"StartTime":206089.0,"Position":37.09983}]},{"StartTime":206204.0,"Objects":[{"StartTime":206204.0,"Position":183.0}]},{"StartTime":206320.0,"Objects":[{"StartTime":206320.0,"Position":234.0}]},{"StartTime":206435.0,"Objects":[{"StartTime":206435.0,"Position":286.0},{"StartTime":206532.0,"Position":370.615448},{"StartTime":206665.0,"Position":455.482452}]},{"StartTime":206781.0,"Objects":[{"StartTime":206781.0,"Position":425.0}]},{"StartTime":206897.0,"Objects":[{"StartTime":206897.0,"Position":322.0},{"StartTime":206994.0,"Position":242.488861},{"StartTime":207127.0,"Position":140.309723}]},{"StartTime":207358.0,"Objects":[{"StartTime":207358.0,"Position":140.0},{"StartTime":207473.0,"Position":153.4727}]},{"StartTime":207589.0,"Objects":[{"StartTime":207589.0,"Position":323.0},{"StartTime":207704.0,"Position":309.527283}]},{"StartTime":207820.0,"Objects":[{"StartTime":207820.0,"Position":62.0},{"StartTime":207917.0,"Position":121.713829},{"StartTime":208050.0,"Position":218.93959}]},{"StartTime":208166.0,"Objects":[{"StartTime":208166.0,"Position":243.0}]},{"StartTime":208281.0,"Objects":[{"StartTime":208281.0,"Position":309.0},{"StartTime":208396.0,"Position":401.9958}]},{"StartTime":208512.0,"Objects":[{"StartTime":208512.0,"Position":461.0},{"StartTime":208627.0,"Position":368.04953}]},{"StartTime":208743.0,"Objects":[{"StartTime":208743.0,"Position":481.0},{"StartTime":208800.0,"Position":512.0},{"StartTime":208858.0,"Position":484.034363},{"StartTime":208915.0,"Position":444.613159},{"StartTime":208973.0,"Position":415.435059},{"StartTime":209070.0,"Position":492.559479},{"StartTime":209204.0,"Position":481.0}]},{"StartTime":209320.0,"Objects":[{"StartTime":209320.0,"Position":323.0}]},{"StartTime":209435.0,"Objects":[{"StartTime":209435.0,"Position":309.0},{"StartTime":209550.0,"Position":294.111755}]},{"StartTime":209666.0,"Objects":[{"StartTime":209666.0,"Position":145.0},{"StartTime":209781.0,"Position":232.516}]},{"StartTime":209897.0,"Objects":[{"StartTime":209897.0,"Position":401.0},{"StartTime":210012.0,"Position":328.206665}]},{"StartTime":210127.0,"Objects":[{"StartTime":210127.0,"Position":206.0}]},{"StartTime":210243.0,"Objects":[{"StartTime":210243.0,"Position":263.0}]},{"StartTime":210358.0,"Objects":[{"StartTime":210358.0,"Position":380.0}]},{"StartTime":210589.0,"Objects":[{"StartTime":210589.0,"Position":380.0},{"StartTime":210704.0,"Position":288.275177}]},{"StartTime":210820.0,"Objects":[{"StartTime":210820.0,"Position":197.0}]},{"StartTime":210935.0,"Objects":[{"StartTime":210935.0,"Position":116.0}]},{"StartTime":211051.0,"Objects":[{"StartTime":211051.0,"Position":12.0},{"StartTime":211166.0,"Position":103.829834}]},{"StartTime":211281.0,"Objects":[{"StartTime":211281.0,"Position":206.0}]},{"StartTime":211397.0,"Objects":[{"StartTime":211397.0,"Position":278.0}]},{"StartTime":211512.0,"Objects":[{"StartTime":211512.0,"Position":448.0},{"StartTime":211609.0,"Position":372.996918},{"StartTime":211742.0,"Position":287.3157}]},{"StartTime":211858.0,"Objects":[{"StartTime":211858.0,"Position":197.0}]},{"StartTime":211974.0,"Objects":[{"StartTime":211974.0,"Position":206.0}]},{"StartTime":212089.0,"Objects":[{"StartTime":212089.0,"Position":353.0}]},{"StartTime":212204.0,"Objects":[{"StartTime":212204.0,"Position":234.0}]},{"StartTime":212320.0,"Objects":[{"StartTime":212320.0,"Position":116.0}]},{"StartTime":212435.0,"Objects":[{"StartTime":212435.0,"Position":320.0},{"StartTime":212532.0,"Position":411.621948},{"StartTime":212665.0,"Position":504.5984}]},{"StartTime":212781.0,"Objects":[{"StartTime":212781.0,"Position":456.0}]},{"StartTime":212897.0,"Objects":[{"StartTime":212897.0,"Position":354.0},{"StartTime":212994.0,"Position":286.378052},{"StartTime":213127.0,"Position":169.401627}]},{"StartTime":213243.0,"Objects":[{"StartTime":213243.0,"Position":65.0}]},{"StartTime":213358.0,"Objects":[{"StartTime":213358.0,"Position":129.0},{"StartTime":213473.0,"Position":144.934341}]},{"StartTime":213589.0,"Objects":[{"StartTime":213589.0,"Position":81.0}]},{"StartTime":213820.0,"Objects":[{"StartTime":213820.0,"Position":81.0},{"StartTime":213935.0,"Position":96.02034}]},{"StartTime":214051.0,"Objects":[{"StartTime":214051.0,"Position":60.0}]},{"StartTime":214166.0,"Objects":[{"StartTime":214166.0,"Position":224.0}]},{"StartTime":214281.0,"Objects":[{"StartTime":214281.0,"Position":65.0},{"StartTime":214396.0,"Position":0.0}]},{"StartTime":214512.0,"Objects":[{"StartTime":214512.0,"Position":130.0}]},{"StartTime":214628.0,"Objects":[{"StartTime":214628.0,"Position":304.0}]},{"StartTime":214743.0,"Objects":[{"StartTime":214743.0,"Position":224.0},{"StartTime":214858.0,"Position":221.139755}]},{"StartTime":214974.0,"Objects":[{"StartTime":214974.0,"Position":366.0},{"StartTime":215089.0,"Position":368.186127}]},{"StartTime":215204.0,"Objects":[{"StartTime":215204.0,"Position":204.0}]},{"StartTime":215320.0,"Objects":[{"StartTime":215320.0,"Position":361.0}]},{"StartTime":215435.0,"Objects":[{"StartTime":215435.0,"Position":294.0},{"StartTime":215550.0,"Position":287.3384}]},{"StartTime":215666.0,"Objects":[{"StartTime":215666.0,"Position":50.0},{"StartTime":215763.0,"Position":95.19159},{"StartTime":215896.0,"Position":215.9359}]},{"StartTime":216012.0,"Objects":[{"StartTime":216012.0,"Position":432.0}]},{"StartTime":216070.0,"Objects":[{"StartTime":216070.0,"Position":432.0}]},{"StartTime":216127.0,"Objects":[{"StartTime":216127.0,"Position":432.0},{"StartTime":216242.0,"Position":340.248383}]},{"StartTime":216358.0,"Objects":[{"StartTime":216358.0,"Position":393.0},{"StartTime":216473.0,"Position":461.9513}]},{"StartTime":216589.0,"Objects":[{"StartTime":216589.0,"Position":295.0},{"StartTime":216686.0,"Position":229.769424},{"StartTime":216819.0,"Position":124.90863}]},{"StartTime":216935.0,"Objects":[{"StartTime":216935.0,"Position":48.0}]},{"StartTime":217051.0,"Objects":[{"StartTime":217051.0,"Position":18.0},{"StartTime":217166.0,"Position":39.7845459}]},{"StartTime":217281.0,"Objects":[{"StartTime":217281.0,"Position":131.0},{"StartTime":217378.0,"Position":137.511353},{"StartTime":217511.0,"Position":138.325424}]},{"StartTime":217627.0,"Objects":[{"StartTime":217627.0,"Position":279.0},{"StartTime":217742.0,"Position":219.329285}]},{"StartTime":217858.0,"Objects":[{"StartTime":217858.0,"Position":131.0}]},{"StartTime":217974.0,"Objects":[{"StartTime":217974.0,"Position":194.0},{"StartTime":218089.0,"Position":224.419708}]},{"StartTime":218204.0,"Objects":[{"StartTime":218204.0,"Position":48.0},{"StartTime":218319.0,"Position":46.1122551}]},{"StartTime":218435.0,"Objects":[{"StartTime":218435.0,"Position":274.0},{"StartTime":218550.0,"Position":294.7216}]},{"StartTime":218666.0,"Objects":[{"StartTime":218666.0,"Position":2.0},{"StartTime":218781.0,"Position":22.0704327}]},{"StartTime":218897.0,"Objects":[{"StartTime":218897.0,"Position":254.0},{"StartTime":218965.0,"Position":205.449738},{"StartTime":219070.0,"Position":135.86232}]},{"StartTime":219127.0,"Objects":[{"StartTime":219127.0,"Position":195.0},{"StartTime":219195.0,"Position":242.9607},{"StartTime":219300.0,"Position":264.2744}]},{"StartTime":219358.0,"Objects":[{"StartTime":219358.0,"Position":82.0},{"StartTime":219426.0,"Position":91.4965439},{"StartTime":219531.0,"Position":120.65477}]},{"StartTime":219589.0,"Objects":[{"StartTime":219589.0,"Position":171.0},{"StartTime":219704.0,"Position":179.589081}]},{"StartTime":219820.0,"Objects":[{"StartTime":219820.0,"Position":327.0},{"StartTime":219917.0,"Position":248.647552},{"StartTime":220050.0,"Position":163.564453}]},{"StartTime":220166.0,"Objects":[{"StartTime":220166.0,"Position":0.0}]},{"StartTime":220281.0,"Objects":[{"StartTime":220281.0,"Position":71.0},{"StartTime":220396.0,"Position":75.8352661}]},{"StartTime":220512.0,"Objects":[{"StartTime":220512.0,"Position":96.0},{"StartTime":220627.0,"Position":91.1647339}]},{"StartTime":220743.0,"Objects":[{"StartTime":220743.0,"Position":121.0},{"StartTime":220858.0,"Position":28.03209}]},{"StartTime":220974.0,"Objects":[{"StartTime":220974.0,"Position":161.0}]},{"StartTime":221089.0,"Objects":[{"StartTime":221089.0,"Position":242.0}]},{"StartTime":221204.0,"Objects":[{"StartTime":221204.0,"Position":281.0},{"StartTime":221301.0,"Position":364.473175},{"StartTime":221434.0,"Position":451.501068}]},{"StartTime":221551.0,"Objects":[{"StartTime":221551.0,"Position":389.0}]},{"StartTime":221608.0,"Objects":[{"StartTime":221608.0,"Position":389.0}]},{"StartTime":221666.0,"Objects":[{"StartTime":221666.0,"Position":389.0},{"StartTime":221781.0,"Position":369.661743}]},{"StartTime":221897.0,"Objects":[{"StartTime":221897.0,"Position":427.0},{"StartTime":221994.0,"Position":360.597534},{"StartTime":222127.0,"Position":241.097244}]},{"StartTime":222243.0,"Objects":[{"StartTime":222243.0,"Position":120.0}]},{"StartTime":222358.0,"Objects":[{"StartTime":222358.0,"Position":210.0},{"StartTime":222473.0,"Position":180.168533}]},{"StartTime":222589.0,"Objects":[{"StartTime":222589.0,"Position":267.0},{"StartTime":222704.0,"Position":204.82106}]},{"StartTime":222820.0,"Objects":[{"StartTime":222820.0,"Position":0.0},{"StartTime":222935.0,"Position":91.43494}]},{"StartTime":223051.0,"Objects":[{"StartTime":223051.0,"Position":301.0},{"StartTime":223166.0,"Position":209.844879}]},{"StartTime":223281.0,"Objects":[{"StartTime":223281.0,"Position":122.0}]},{"StartTime":223397.0,"Objects":[{"StartTime":223397.0,"Position":180.0}]},{"StartTime":223512.0,"Objects":[{"StartTime":223512.0,"Position":323.0},{"StartTime":223609.0,"Position":406.38382},{"StartTime":223742.0,"Position":480.961945}]},{"StartTime":223858.0,"Objects":[{"StartTime":223858.0,"Position":425.0},{"StartTime":223955.0,"Position":336.61618},{"StartTime":224088.0,"Position":267.038055}]},{"StartTime":224204.0,"Objects":[{"StartTime":224204.0,"Position":180.0},{"StartTime":224319.0,"Position":87.12355}]},{"StartTime":224435.0,"Objects":[{"StartTime":224435.0,"Position":5.0}]},{"StartTime":224551.0,"Objects":[{"StartTime":224551.0,"Position":64.0}]},{"StartTime":224666.0,"Objects":[{"StartTime":224666.0,"Position":154.0},{"StartTime":224781.0,"Position":158.953}]},{"StartTime":224897.0,"Objects":[{"StartTime":224897.0,"Position":84.0}]},{"StartTime":225012.0,"Objects":[{"StartTime":225012.0,"Position":241.0}]},{"StartTime":225127.0,"Objects":[{"StartTime":225127.0,"Position":84.0},{"StartTime":225242.0,"Position":0.0}]},{"StartTime":225358.0,"Objects":[{"StartTime":225358.0,"Position":149.0},{"StartTime":225455.0,"Position":219.601578},{"StartTime":225588.0,"Position":329.855469}]},{"StartTime":225704.0,"Objects":[{"StartTime":225704.0,"Position":448.0},{"StartTime":225801.0,"Position":360.4895},{"StartTime":225934.0,"Position":285.0467}]},{"StartTime":226051.0,"Objects":[{"StartTime":226051.0,"Position":406.0},{"StartTime":226166.0,"Position":416.920715}]},{"StartTime":226281.0,"Objects":[{"StartTime":226281.0,"Position":380.0}]},{"StartTime":226512.0,"Objects":[{"StartTime":226512.0,"Position":380.0}]},{"StartTime":226627.0,"Objects":[{"StartTime":226627.0,"Position":502.0}]},{"StartTime":226743.0,"Objects":[{"StartTime":226743.0,"Position":480.0}]},{"StartTime":226858.0,"Objects":[{"StartTime":226858.0,"Position":396.0}]},{"StartTime":226974.0,"Objects":[{"StartTime":226974.0,"Position":485.0}]},{"StartTime":227089.0,"Objects":[{"StartTime":227089.0,"Position":393.0}]},{"StartTime":227204.0,"Objects":[{"StartTime":227204.0,"Position":439.0},{"StartTime":227261.0,"Position":418.5026},{"StartTime":227319.0,"Position":424.803467},{"StartTime":227376.0,"Position":402.30603},{"StartTime":227434.0,"Position":392.6069},{"StartTime":227492.0,"Position":362.9078},{"StartTime":227549.0,"Position":376.4104},{"StartTime":227607.0,"Position":367.711243},{"StartTime":227665.0,"Position":346.012146},{"StartTime":227762.0,"Position":339.44635},{"StartTime":227896.0,"Position":299.417358}]},{"StartTime":228588.0,"Objects":[{"StartTime":228588.0,"Position":299.0},{"StartTime":228641.0,"Position":309.5071},{"StartTime":228694.0,"Position":274.095154},{"StartTime":228747.0,"Position":263.8877},{"StartTime":228800.0,"Position":286.214081},{"StartTime":228853.0,"Position":275.9026},{"StartTime":228906.0,"Position":264.0278},{"StartTime":228959.0,"Position":268.8211},{"StartTime":229049.0,"Position":278.438263}]},{"StartTime":229280.0,"Objects":[{"StartTime":229280.0,"Position":422.0},{"StartTime":229333.0,"Position":426.731476},{"StartTime":229386.0,"Position":420.100861},{"StartTime":229439.0,"Position":428.06842},{"StartTime":229492.0,"Position":418.578857},{"StartTime":229545.0,"Position":409.477844},{"StartTime":229598.0,"Position":427.007416},{"StartTime":229651.0,"Position":414.226776},{"StartTime":229741.0,"Position":407.2133}]},{"StartTime":229973.0,"Objects":[{"StartTime":229973.0,"Position":324.0}]},{"StartTime":230204.0,"Objects":[{"StartTime":230204.0,"Position":238.0}]},{"StartTime":230434.0,"Objects":[{"StartTime":230434.0,"Position":172.0}]},{"StartTime":230665.0,"Objects":[{"StartTime":230665.0,"Position":180.0}]},{"StartTime":230896.0,"Objects":[{"StartTime":230896.0,"Position":250.0},{"StartTime":230953.0,"Position":246.538712},{"StartTime":231011.0,"Position":229.051788},{"StartTime":231068.0,"Position":248.5905},{"StartTime":231126.0,"Position":231.103561},{"StartTime":231184.0,"Position":258.616638},{"StartTime":231241.0,"Position":221.15535},{"StartTime":231299.0,"Position":257.668427},{"StartTime":231357.0,"Position":238.1815},{"StartTime":231454.0,"Position":243.694748},{"StartTime":231588.0,"Position":232.25943}]},{"StartTime":232280.0,"Objects":[{"StartTime":232280.0,"Position":232.0},{"StartTime":232333.0,"Position":240.3837},{"StartTime":232386.0,"Position":227.7674},{"StartTime":232439.0,"Position":185.1511},{"StartTime":232492.0,"Position":182.53479},{"StartTime":232545.0,"Position":183.918488},{"StartTime":232598.0,"Position":173.302185},{"StartTime":232651.0,"Position":175.685883},{"StartTime":232741.0,"Position":139.6582}]},{"StartTime":232973.0,"Objects":[{"StartTime":232973.0,"Position":289.0},{"StartTime":233026.0,"Position":317.6163},{"StartTime":233079.0,"Position":295.2326},{"StartTime":233132.0,"Position":337.8489},{"StartTime":233185.0,"Position":336.4652},{"StartTime":233238.0,"Position":324.0815},{"StartTime":233291.0,"Position":350.6978},{"StartTime":233344.0,"Position":362.314117},{"StartTime":233434.0,"Position":381.3418}]},{"StartTime":233665.0,"Objects":[{"StartTime":233665.0,"Position":212.0}]},{"StartTime":233896.0,"Objects":[{"StartTime":233896.0,"Position":356.0}]},{"StartTime":234127.0,"Objects":[{"StartTime":234127.0,"Position":304.0}]},{"StartTime":234357.0,"Objects":[{"StartTime":234357.0,"Position":231.0}]},{"StartTime":234588.0,"Objects":[{"StartTime":234588.0,"Position":73.0},{"StartTime":234645.0,"Position":92.49741},{"StartTime":234703.0,"Position":113.196541},{"StartTime":234760.0,"Position":96.6939545},{"StartTime":234818.0,"Position":118.393082},{"StartTime":234876.0,"Position":133.0922},{"StartTime":234933.0,"Position":134.58963},{"StartTime":234991.0,"Position":150.288742},{"StartTime":235049.0,"Position":165.987869},{"StartTime":235146.0,"Position":171.55365},{"StartTime":235280.0,"Position":212.582657}]},{"StartTime":235973.0,"Objects":[{"StartTime":235973.0,"Position":213.0},{"StartTime":236026.0,"Position":220.492889},{"StartTime":236079.0,"Position":209.904846},{"StartTime":236132.0,"Position":236.1123},{"StartTime":236185.0,"Position":246.7859},{"StartTime":236238.0,"Position":237.097427},{"StartTime":236291.0,"Position":234.9722},{"StartTime":236344.0,"Position":237.178925},{"StartTime":236434.0,"Position":233.561722}]},{"StartTime":236665.0,"Objects":[{"StartTime":236665.0,"Position":90.0},{"StartTime":236718.0,"Position":70.92335},{"StartTime":236771.0,"Position":96.25737},{"StartTime":236824.0,"Position":82.05987},{"StartTime":236877.0,"Position":94.6354141},{"StartTime":236930.0,"Position":102.684189},{"StartTime":236983.0,"Position":96.18482},{"StartTime":237036.0,"Position":85.30122},{"StartTime":237126.0,"Position":104.846085}]},{"StartTime":237357.0,"Objects":[{"StartTime":237357.0,"Position":209.0},{"StartTime":237454.0,"Position":185.642929},{"StartTime":237587.0,"Position":163.101791}]},{"StartTime":237819.0,"Objects":[{"StartTime":237819.0,"Position":122.0}]},{"StartTime":238050.0,"Objects":[{"StartTime":238050.0,"Position":303.0}]},{"StartTime":238280.0,"Objects":[{"StartTime":238280.0,"Position":198.0},{"StartTime":238337.0,"Position":172.143723},{"StartTime":238395.0,"Position":172.086456},{"StartTime":238452.0,"Position":166.421417},{"StartTime":238510.0,"Position":152.883118},{"StartTime":238568.0,"Position":150.797348},{"StartTime":238625.0,"Position":167.218323},{"StartTime":238683.0,"Position":151.087875},{"StartTime":238741.0,"Position":161.562042},{"StartTime":238838.0,"Position":179.682129},{"StartTime":238972.0,"Position":178.171066}]},{"StartTime":239204.0,"Objects":[{"StartTime":239204.0,"Position":340.0}]},{"StartTime":239434.0,"Objects":[{"StartTime":239434.0,"Position":402.0}]},{"StartTime":239665.0,"Objects":[{"StartTime":239665.0,"Position":470.0}]},{"StartTime":239896.0,"Objects":[{"StartTime":239896.0,"Position":427.0}]},{"StartTime":240127.0,"Objects":[{"StartTime":240127.0,"Position":497.0}]},{"StartTime":240357.0,"Objects":[{"StartTime":240357.0,"Position":362.0}]},{"StartTime":240588.0,"Objects":[{"StartTime":240588.0,"Position":417.0}]},{"StartTime":240819.0,"Objects":[{"StartTime":240819.0,"Position":429.0}]},{"StartTime":241050.0,"Objects":[{"StartTime":241050.0,"Position":256.0}]},{"StartTime":241280.0,"Objects":[{"StartTime":241280.0,"Position":219.0}]},{"StartTime":241511.0,"Objects":[{"StartTime":241511.0,"Position":184.0}]},{"StartTime":241742.0,"Objects":[{"StartTime":241742.0,"Position":162.0}]},{"StartTime":241973.0,"Objects":[{"StartTime":241973.0,"Position":110.0},{"StartTime":242026.0,"Position":93.10535},{"StartTime":242079.0,"Position":108.723236},{"StartTime":242132.0,"Position":95.0576248},{"StartTime":242185.0,"Position":55.3367538},{"StartTime":242238.0,"Position":49.816864},{"StartTime":242291.0,"Position":53.7061462},{"StartTime":242344.0,"Position":51.2607536},{"StartTime":242434.0,"Position":24.3897762}]},{"StartTime":242665.0,"Objects":[{"StartTime":242665.0,"Position":140.0},{"StartTime":242762.0,"Position":138.915024},{"StartTime":242895.0,"Position":147.002945}]},{"StartTime":243127.0,"Objects":[{"StartTime":243127.0,"Position":96.0}]},{"StartTime":243357.0,"Objects":[{"StartTime":243357.0,"Position":75.0}]},{"StartTime":243588.0,"Objects":[{"StartTime":243588.0,"Position":215.0}]},{"StartTime":243819.0,"Objects":[{"StartTime":243819.0,"Position":322.0}]},{"StartTime":244050.0,"Objects":[{"StartTime":244050.0,"Position":396.0},{"StartTime":244147.0,"Position":425.540039},{"StartTime":244280.0,"Position":442.3321}]},{"StartTime":244511.0,"Objects":[{"StartTime":244511.0,"Position":497.0},{"StartTime":244564.0,"Position":487.3125},{"StartTime":244617.0,"Position":463.625031},{"StartTime":244670.0,"Position":469.937531},{"StartTime":244723.0,"Position":439.250031},{"StartTime":244776.0,"Position":447.562561},{"StartTime":244829.0,"Position":419.875061},{"StartTime":244882.0,"Position":422.187561},{"StartTime":244972.0,"Position":404.039}]},{"StartTime":245204.0,"Objects":[{"StartTime":245204.0,"Position":335.0}]},{"StartTime":245434.0,"Objects":[{"StartTime":245434.0,"Position":363.0},{"StartTime":245491.0,"Position":366.2679},{"StartTime":245549.0,"Position":374.8136},{"StartTime":245606.0,"Position":404.997833},{"StartTime":245664.0,"Position":378.847351},{"StartTime":245722.0,"Position":412.218323},{"StartTime":245779.0,"Position":396.615265},{"StartTime":245837.0,"Position":392.35144},{"StartTime":245895.0,"Position":408.217041},{"StartTime":245992.0,"Position":411.704224},{"StartTime":246126.0,"Position":389.61557}]},{"StartTime":246357.0,"Objects":[{"StartTime":246357.0,"Position":265.0}]},{"StartTime":246588.0,"Objects":[{"StartTime":246588.0,"Position":210.0}]},{"StartTime":246819.0,"Objects":[{"StartTime":246819.0,"Position":140.0},{"StartTime":246916.0,"Position":141.036453},{"StartTime":247049.0,"Position":131.233368}]},{"StartTime":247280.0,"Objects":[{"StartTime":247280.0,"Position":91.0}]},{"StartTime":247511.0,"Objects":[{"StartTime":247511.0,"Position":166.0},{"StartTime":247608.0,"Position":161.623718},{"StartTime":247741.0,"Position":156.782181}]},{"StartTime":247973.0,"Objects":[{"StartTime":247973.0,"Position":132.0},{"StartTime":248030.0,"Position":131.465683},{"StartTime":248088.0,"Position":143.132523},{"StartTime":248145.0,"Position":158.5982},{"StartTime":248203.0,"Position":178.365616},{"StartTime":248300.0,"Position":168.9544},{"StartTime":248434.0,"Position":132.0}]},{"StartTime":248665.0,"Objects":[{"StartTime":248665.0,"Position":309.0}]},{"StartTime":248896.0,"Objects":[{"StartTime":248896.0,"Position":379.0}]},{"StartTime":249127.0,"Objects":[{"StartTime":249127.0,"Position":238.0},{"StartTime":249224.0,"Position":235.5969},{"StartTime":249357.0,"Position":227.795822}]},{"StartTime":249588.0,"Objects":[{"StartTime":249588.0,"Position":212.0}]},{"StartTime":249819.0,"Objects":[{"StartTime":249819.0,"Position":225.0}]},{"StartTime":250050.0,"Objects":[{"StartTime":250050.0,"Position":356.0},{"StartTime":250147.0,"Position":370.4031},{"StartTime":250280.0,"Position":366.204163}]},{"StartTime":250511.0,"Objects":[{"StartTime":250511.0,"Position":382.0}]},{"StartTime":250742.0,"Objects":[{"StartTime":250742.0,"Position":464.0},{"StartTime":250795.0,"Position":472.35553},{"StartTime":250848.0,"Position":432.7111},{"StartTime":250901.0,"Position":430.501251},{"StartTime":250954.0,"Position":412.1907},{"StartTime":251007.0,"Position":423.880157},{"StartTime":251060.0,"Position":424.5696},{"StartTime":251113.0,"Position":379.259033},{"StartTime":251203.0,"Position":378.75058}]},{"StartTime":251550.0,"Objects":[{"StartTime":251550.0,"Position":310.0},{"StartTime":251628.0,"Position":286.397919},{"StartTime":251706.0,"Position":265.795837},{"StartTime":251784.0,"Position":275.193756},{"StartTime":251898.0,"Position":240.3907}]},{"StartTime":252247.0,"Objects":[{"StartTime":252247.0,"Position":210.0}]},{"StartTime":252702.0,"Objects":[{"StartTime":252702.0,"Position":210.0},{"StartTime":252782.0,"Position":197.390274},{"StartTime":252862.0,"Position":165.780563},{"StartTime":252942.0,"Position":162.170837},{"StartTime":253059.0,"Position":140.341629}]},{"StartTime":253506.0,"Objects":[{"StartTime":253506.0,"Position":117.0}]},{"StartTime":254095.0,"Objects":[{"StartTime":254095.0,"Position":117.0},{"StartTime":254161.0,"Position":91.8972549},{"StartTime":254227.0,"Position":109.79451},{"StartTime":254293.0,"Position":74.6917648},{"StartTime":254360.0,"Position":79.46625},{"StartTime":254426.0,"Position":58.36351},{"StartTime":254492.0,"Position":59.2607574},{"StartTime":254558.0,"Position":52.1580162},{"StartTime":254661.0,"Position":47.512825}]},{"StartTime":255580.0,"Objects":[{"StartTime":255580.0,"Position":19.0}]},{"StartTime":256480.0,"Objects":[{"StartTime":256480.0,"Position":71.0},{"StartTime":256547.0,"Position":67.87454},{"StartTime":256614.0,"Position":95.96705},{"StartTime":256681.0,"Position":91.2217941},{"StartTime":256748.0,"Position":105.581955},{"StartTime":256815.0,"Position":93.98999},{"StartTime":256882.0,"Position":103.388008},{"StartTime":256949.0,"Position":112.718117},{"StartTime":257016.0,"Position":109.920441},{"StartTime":257083.0,"Position":136.898544},{"StartTime":257150.0,"Position":128.617935},{"StartTime":257217.0,"Position":142.026443},{"StartTime":257284.0,"Position":151.074234},{"StartTime":257351.0,"Position":176.7141},{"StartTime":257418.0,"Position":170.9018},{"StartTime":257485.0,"Position":171.59639},{"StartTime":257588.0,"Position":176.631821}]},{"StartTime":257747.0,"Objects":[{"StartTime":257747.0,"Position":211.0},{"StartTime":257804.0,"Position":217.8565},{"StartTime":257861.0,"Position":212.029175},{"StartTime":257918.0,"Position":184.542419},{"StartTime":257975.0,"Position":206.420013},{"StartTime":258032.0,"Position":202.816925},{"StartTime":258089.0,"Position":185.700745},{"StartTime":258146.0,"Position":178.034622},{"StartTime":258204.0,"Position":192.803787},{"StartTime":258261.0,"Position":165.165955},{"StartTime":258318.0,"Position":184.163956},{"StartTime":258375.0,"Position":158.664185},{"StartTime":258432.0,"Position":182.668732},{"StartTime":258489.0,"Position":171.189255},{"StartTime":258546.0,"Position":177.41777},{"StartTime":258603.0,"Position":180.135727},{"StartTime":258697.0,"Position":185.032272}]},{"StartTime":258892.0,"Objects":[{"StartTime":258892.0,"Position":474.0},{"StartTime":258958.0,"Position":477.188232},{"StartTime":259025.0,"Position":473.31955},{"StartTime":259091.0,"Position":485.2887},{"StartTime":259158.0,"Position":464.169861},{"StartTime":259224.0,"Position":445.9263},{"StartTime":259291.0,"Position":472.565826},{"StartTime":259358.0,"Position":455.0796},{"StartTime":259424.0,"Position":456.524078},{"StartTime":259491.0,"Position":453.837036},{"StartTime":259557.0,"Position":467.0627},{"StartTime":259624.0,"Position":461.183319},{"StartTime":259691.0,"Position":432.1556},{"StartTime":259757.0,"Position":435.138733},{"StartTime":259824.0,"Position":423.912659},{"StartTime":259890.0,"Position":437.712677},{"StartTime":259957.0,"Position":422.313263},{"StartTime":260024.0,"Position":424.880035},{"StartTime":260090.0,"Position":440.3811},{"StartTime":260157.0,"Position":436.7791},{"StartTime":260223.0,"Position":400.141022},{"StartTime":260290.0,"Position":430.3847},{"StartTime":260357.0,"Position":419.5619},{"StartTime":260423.0,"Position":404.7234},{"StartTime":260490.0,"Position":413.783051},{"StartTime":260556.0,"Position":393.822571},{"StartTime":260623.0,"Position":379.777222},{"StartTime":260690.0,"Position":399.648926},{"StartTime":260756.0,"Position":394.5706},{"StartTime":260823.0,"Position":386.353851},{"StartTime":260889.0,"Position":359.18924},{"StartTime":260956.0,"Position":367.906677},{"StartTime":261023.0,"Position":369.60788},{"StartTime":261084.0,"Position":374.661255},{"StartTime":261145.0,"Position":370.703857},{"StartTime":261206.0,"Position":339.722168},{"StartTime":261268.0,"Position":356.6687},{"StartTime":261329.0,"Position":336.6645},{"StartTime":261390.0,"Position":328.6578},{"StartTime":261452.0,"Position":348.578},{"StartTime":261513.0,"Position":336.564667},{"StartTime":261574.0,"Position":318.553558},{"StartTime":261636.0,"Position":346.480042},{"StartTime":261697.0,"Position":341.4845},{"StartTime":261758.0,"Position":306.49408},{"StartTime":261820.0,"Position":319.461731},{"StartTime":261881.0,"Position":314.501068},{"StartTime":261942.0,"Position":314.5745},{"StartTime":262004.0,"Position":304.591248},{"StartTime":262065.0,"Position":317.7179},{"StartTime":262126.0,"Position":289.851746},{"StartTime":262187.0,"Position":305.043823},{"StartTime":262249.0,"Position":302.180573},{"StartTime":262310.0,"Position":270.450165},{"StartTime":262371.0,"Position":287.724823},{"StartTime":262433.0,"Position":264.024},{"StartTime":262494.0,"Position":257.386749},{"StartTime":262555.0,"Position":278.846466},{"StartTime":262617.0,"Position":259.2504},{"StartTime":262678.0,"Position":266.822083},{"StartTime":262739.0,"Position":255.3938},{"StartTime":262801.0,"Position":261.0324},{"StartTime":262862.0,"Position":261.727},{"StartTime":262923.0,"Position":261.5505},{"StartTime":263021.0,"Position":246.531586}]},{"StartTime":263197.0,"Objects":[{"StartTime":263197.0,"Position":210.0},{"StartTime":263294.0,"Position":306.607269},{"StartTime":263427.0,"Position":383.317047}]},{"StartTime":263543.0,"Objects":[{"StartTime":263543.0,"Position":456.0}]},{"StartTime":263658.0,"Objects":[{"StartTime":263658.0,"Position":465.0},{"StartTime":263755.0,"Position":475.812439},{"StartTime":263888.0,"Position":510.653168}]},{"StartTime":264004.0,"Objects":[{"StartTime":264004.0,"Position":425.0}]},{"StartTime":264120.0,"Objects":[{"StartTime":264120.0,"Position":368.0},{"StartTime":264235.0,"Position":275.061646}]},{"StartTime":264350.0,"Objects":[{"StartTime":264350.0,"Position":280.0},{"StartTime":264465.0,"Position":372.9198}]},{"StartTime":264581.0,"Objects":[{"StartTime":264581.0,"Position":197.0}]},{"StartTime":264697.0,"Objects":[{"StartTime":264697.0,"Position":121.0}]},{"StartTime":264812.0,"Objects":[{"StartTime":264812.0,"Position":50.0}]},{"StartTime":264927.0,"Objects":[{"StartTime":264927.0,"Position":21.0}]},{"StartTime":265043.0,"Objects":[{"StartTime":265043.0,"Position":37.0},{"StartTime":265140.0,"Position":125.654358},{"StartTime":265273.0,"Position":222.8014}]},{"StartTime":265389.0,"Objects":[{"StartTime":265389.0,"Position":314.0}]},{"StartTime":265504.0,"Objects":[{"StartTime":265504.0,"Position":283.0},{"StartTime":265601.0,"Position":219.753021},{"StartTime":265734.0,"Position":126.098457}]},{"StartTime":265850.0,"Objects":[{"StartTime":265850.0,"Position":57.0}]},{"StartTime":265966.0,"Objects":[{"StartTime":265966.0,"Position":142.0},{"StartTime":266081.0,"Position":157.97847}]},{"StartTime":266197.0,"Objects":[{"StartTime":266197.0,"Position":52.0},{"StartTime":266312.0,"Position":36.021534}]},{"StartTime":266427.0,"Objects":[{"StartTime":266427.0,"Position":217.0}]},{"StartTime":266543.0,"Objects":[{"StartTime":266543.0,"Position":297.0}]},{"StartTime":266658.0,"Objects":[{"StartTime":266658.0,"Position":368.0}]},{"StartTime":266773.0,"Objects":[{"StartTime":266773.0,"Position":406.0}]},{"StartTime":266889.0,"Objects":[{"StartTime":266889.0,"Position":404.0},{"StartTime":266986.0,"Position":407.60556},{"StartTime":267119.0,"Position":450.385132}]},{"StartTime":267235.0,"Objects":[{"StartTime":267235.0,"Position":503.0}]},{"StartTime":267350.0,"Objects":[{"StartTime":267350.0,"Position":411.0},{"StartTime":267465.0,"Position":318.369415}]},{"StartTime":267581.0,"Objects":[{"StartTime":267581.0,"Position":237.0}]},{"StartTime":267697.0,"Objects":[{"StartTime":267697.0,"Position":169.0}]},{"StartTime":267812.0,"Objects":[{"StartTime":267812.0,"Position":148.0},{"StartTime":267927.0,"Position":160.723953}]},{"StartTime":268043.0,"Objects":[{"StartTime":268043.0,"Position":333.0},{"StartTime":268158.0,"Position":320.017151}]},{"StartTime":268273.0,"Objects":[{"StartTime":268273.0,"Position":63.0}]},{"StartTime":268389.0,"Objects":[{"StartTime":268389.0,"Position":11.0}]},{"StartTime":268504.0,"Objects":[{"StartTime":268504.0,"Position":2.0}]},{"StartTime":268620.0,"Objects":[{"StartTime":268620.0,"Position":36.0}]},{"StartTime":268735.0,"Objects":[{"StartTime":268735.0,"Position":107.0},{"StartTime":268832.0,"Position":196.266815},{"StartTime":268965.0,"Position":291.10318}]},{"StartTime":269081.0,"Objects":[{"StartTime":269081.0,"Position":370.0}]},{"StartTime":269197.0,"Objects":[{"StartTime":269197.0,"Position":333.0},{"StartTime":269312.0,"Position":344.8143}]},{"StartTime":269427.0,"Objects":[{"StartTime":269427.0,"Position":288.0}]},{"StartTime":269543.0,"Objects":[{"StartTime":269543.0,"Position":368.0}]},{"StartTime":269658.0,"Objects":[{"StartTime":269658.0,"Position":512.0},{"StartTime":269773.0,"Position":419.4197}]},{"StartTime":269889.0,"Objects":[{"StartTime":269889.0,"Position":173.0},{"StartTime":270004.0,"Position":265.5803}]},{"StartTime":270120.0,"Objects":[{"StartTime":270120.0,"Position":381.0}]},{"StartTime":270235.0,"Objects":[{"StartTime":270235.0,"Position":306.0}]},{"StartTime":270350.0,"Objects":[{"StartTime":270350.0,"Position":232.0}]},{"StartTime":270466.0,"Objects":[{"StartTime":270466.0,"Position":158.0}]},{"StartTime":270523.0,"Objects":[{"StartTime":270523.0,"Position":154.0}]},{"StartTime":270581.0,"Objects":[{"StartTime":270581.0,"Position":150.0},{"StartTime":270638.0,"Position":158.515427}]},{"StartTime":270697.0,"Objects":[{"StartTime":270697.0,"Position":136.0},{"StartTime":270754.0,"Position":171.398178}]},{"StartTime":270812.0,"Objects":[{"StartTime":270812.0,"Position":318.0},{"StartTime":270869.0,"Position":274.58493}]},{"StartTime":270927.0,"Objects":[{"StartTime":270927.0,"Position":103.0},{"StartTime":270984.0,"Position":56.7936249},{"StartTime":271042.0,"Position":103.0}]},{"StartTime":271158.0,"Objects":[{"StartTime":271158.0,"Position":407.0},{"StartTime":271215.0,"Position":360.912872}]},{"StartTime":271273.0,"Objects":[{"StartTime":271273.0,"Position":216.0}]},{"StartTime":271331.0,"Objects":[{"StartTime":271331.0,"Position":221.0}]},{"StartTime":271389.0,"Objects":[{"StartTime":271389.0,"Position":227.0}]},{"StartTime":271447.0,"Objects":[{"StartTime":271447.0,"Position":235.0}]},{"StartTime":271504.0,"Objects":[{"StartTime":271504.0,"Position":243.0},{"StartTime":271619.0,"Position":274.106384}]},{"StartTime":271735.0,"Objects":[{"StartTime":271735.0,"Position":389.0}]},{"StartTime":271793.0,"Objects":[{"StartTime":271793.0,"Position":367.0}]},{"StartTime":271850.0,"Objects":[{"StartTime":271850.0,"Position":377.0}]},{"StartTime":271908.0,"Objects":[{"StartTime":271908.0,"Position":417.0}]},{"StartTime":271966.0,"Objects":[{"StartTime":271966.0,"Position":466.0},{"StartTime":272023.0,"Position":501.0169},{"StartTime":272081.0,"Position":466.0},{"StartTime":272139.0,"Position":501.0169}]},{"StartTime":272197.0,"Objects":[{"StartTime":272197.0,"Position":439.0},{"StartTime":272312.0,"Position":420.1435}]},{"StartTime":272370.0,"Objects":[{"StartTime":272370.0,"Position":436.0}]},{"StartTime":272427.0,"Objects":[{"StartTime":272427.0,"Position":441.0}]},{"StartTime":272485.0,"Objects":[{"StartTime":272485.0,"Position":391.0}]},{"StartTime":272543.0,"Objects":[{"StartTime":272543.0,"Position":334.0}]},{"StartTime":272600.0,"Objects":[{"StartTime":272600.0,"Position":285.0}]},{"StartTime":272658.0,"Objects":[{"StartTime":272658.0,"Position":262.0}]},{"StartTime":272716.0,"Objects":[{"StartTime":272716.0,"Position":219.0}]},{"StartTime":272773.0,"Objects":[{"StartTime":272773.0,"Position":163.0},{"StartTime":272830.0,"Position":117.800331}]},{"StartTime":272889.0,"Objects":[{"StartTime":272889.0,"Position":13.0}]},{"StartTime":272947.0,"Objects":[{"StartTime":272947.0,"Position":49.0}]},{"StartTime":273004.0,"Objects":[{"StartTime":273004.0,"Position":61.0}]},{"StartTime":273062.0,"Objects":[{"StartTime":273062.0,"Position":53.0}]},{"StartTime":273120.0,"Objects":[{"StartTime":273120.0,"Position":26.0}]},{"StartTime":273177.0,"Objects":[{"StartTime":273177.0,"Position":13.0}]},{"StartTime":273235.0,"Objects":[{"StartTime":273235.0,"Position":21.0},{"StartTime":273292.0,"Position":32.800724}]},{"StartTime":273350.0,"Objects":[{"StartTime":273350.0,"Position":126.0}]},{"StartTime":273408.0,"Objects":[{"StartTime":273408.0,"Position":162.0}]},{"StartTime":273466.0,"Objects":[{"StartTime":273466.0,"Position":194.0}]},{"StartTime":273523.0,"Objects":[{"StartTime":273523.0,"Position":213.0}]},{"StartTime":273581.0,"Objects":[{"StartTime":273581.0,"Position":242.0}]},{"StartTime":273639.0,"Objects":[{"StartTime":273639.0,"Position":277.0}]},{"StartTime":273697.0,"Objects":[{"StartTime":273697.0,"Position":307.0}]},{"StartTime":273754.0,"Objects":[{"StartTime":273754.0,"Position":343.0}]},{"StartTime":273812.0,"Objects":[{"StartTime":273812.0,"Position":375.0},{"StartTime":273927.0,"Position":384.45874}]},{"StartTime":273985.0,"Objects":[{"StartTime":273985.0,"Position":380.0}]},{"StartTime":274043.0,"Objects":[{"StartTime":274043.0,"Position":370.0},{"StartTime":274158.0,"Position":462.594574}]},{"StartTime":274273.0,"Objects":[{"StartTime":274273.0,"Position":263.0},{"StartTime":274388.0,"Position":170.405426}]},{"StartTime":274447.0,"Objects":[{"StartTime":274447.0,"Position":103.0}]},{"StartTime":274504.0,"Objects":[{"StartTime":274504.0,"Position":103.0},{"StartTime":274619.0,"Position":107.0641}]},{"StartTime":274735.0,"Objects":[{"StartTime":274735.0,"Position":315.0},{"StartTime":274850.0,"Position":310.935883}]},{"StartTime":274908.0,"Objects":[{"StartTime":274908.0,"Position":248.0}]},{"StartTime":274966.0,"Objects":[{"StartTime":274966.0,"Position":248.0},{"StartTime":275081.0,"Position":155.405426}]},{"StartTime":275197.0,"Objects":[{"StartTime":275197.0,"Position":18.0}]},{"StartTime":275312.0,"Objects":[{"StartTime":275312.0,"Position":115.0}]},{"StartTime":275370.0,"Objects":[{"StartTime":275370.0,"Position":115.0}]},{"StartTime":275427.0,"Objects":[{"StartTime":275427.0,"Position":115.0},{"StartTime":275542.0,"Position":102.681671}]},{"StartTime":275658.0,"Objects":[{"StartTime":275658.0,"Position":218.0},{"StartTime":275773.0,"Position":230.318329}]},{"StartTime":275889.0,"Objects":[{"StartTime":275889.0,"Position":307.0},{"StartTime":276004.0,"Position":399.981354}]},{"StartTime":276062.0,"Objects":[{"StartTime":276062.0,"Position":471.0}]},{"StartTime":276120.0,"Objects":[{"StartTime":276120.0,"Position":471.0},{"StartTime":276177.0,"Position":475.382782},{"StartTime":276235.0,"Position":471.0},{"StartTime":276293.0,"Position":475.382782},{"StartTime":276350.0,"Position":471.0},{"StartTime":276408.0,"Position":475.382782},{"StartTime":276466.0,"Position":471.0},{"StartTime":276523.0,"Position":475.382782}]},{"StartTime":276581.0,"Objects":[{"StartTime":276581.0,"Position":372.0},{"StartTime":276638.0,"Position":367.617218},{"StartTime":276696.0,"Position":372.0},{"StartTime":276754.0,"Position":367.617218},{"StartTime":276811.0,"Position":372.0},{"StartTime":276869.0,"Position":367.617218},{"StartTime":276927.0,"Position":372.0},{"StartTime":276984.0,"Position":367.617218}]},{"StartTime":277043.0,"Objects":[{"StartTime":277043.0,"Position":446.0}]},{"StartTime":277158.0,"Objects":[{"StartTime":277158.0,"Position":234.0}]},{"StartTime":277273.0,"Objects":[{"StartTime":277273.0,"Position":307.0}]},{"StartTime":277389.0,"Objects":[{"StartTime":277389.0,"Position":495.0}]},{"StartTime":277504.0,"Objects":[{"StartTime":277504.0,"Position":327.0}]},{"StartTime":277562.0,"Objects":[{"StartTime":277562.0,"Position":321.0}]},{"StartTime":277620.0,"Objects":[{"StartTime":277620.0,"Position":303.0}]},{"StartTime":277677.0,"Objects":[{"StartTime":277677.0,"Position":271.0}]},{"StartTime":277735.0,"Objects":[{"StartTime":277735.0,"Position":231.0}]},{"StartTime":277793.0,"Objects":[{"StartTime":277793.0,"Position":188.0}]},{"StartTime":277850.0,"Objects":[{"StartTime":277850.0,"Position":147.0}]},{"StartTime":277908.0,"Objects":[{"StartTime":277908.0,"Position":108.0}]},{"StartTime":277966.0,"Objects":[{"StartTime":277966.0,"Position":80.0},{"StartTime":278063.0,"Position":28.5068283},{"StartTime":278196.0,"Position":15.99887}]},{"StartTime":278312.0,"Objects":[{"StartTime":278312.0,"Position":84.0},{"StartTime":278409.0,"Position":146.614288},{"StartTime":278542.0,"Position":265.901367}]},{"StartTime":278658.0,"Objects":[{"StartTime":278658.0,"Position":351.0},{"StartTime":278773.0,"Position":441.5425}]},{"StartTime":278889.0,"Objects":[{"StartTime":278889.0,"Position":277.0}]},{"StartTime":279004.0,"Objects":[{"StartTime":279004.0,"Position":277.0},{"StartTime":279101.0,"Position":259.472473},{"StartTime":279234.0,"Position":250.534409}]},{"StartTime":279350.0,"Objects":[{"StartTime":279350.0,"Position":321.0},{"StartTime":279465.0,"Position":347.2083}]},{"StartTime":279581.0,"Objects":[{"StartTime":279581.0,"Position":178.0},{"StartTime":279696.0,"Position":151.791687}]},{"StartTime":279812.0,"Objects":[{"StartTime":279812.0,"Position":250.0},{"StartTime":279909.0,"Position":322.037628},{"StartTime":280042.0,"Position":433.910248}]},{"StartTime":280158.0,"Objects":[{"StartTime":280158.0,"Position":452.0},{"StartTime":280255.0,"Position":378.962372},{"StartTime":280388.0,"Position":268.089752}]},{"StartTime":280504.0,"Objects":[{"StartTime":280504.0,"Position":208.0},{"StartTime":280619.0,"Position":224.649811}]},{"StartTime":280735.0,"Objects":[{"StartTime":280735.0,"Position":125.0}]},{"StartTime":280850.0,"Objects":[{"StartTime":280850.0,"Position":125.0},{"StartTime":280947.0,"Position":30.3852921},{"StartTime":281080.0,"Position":0.0}]},{"StartTime":281197.0,"Objects":[{"StartTime":281197.0,"Position":62.0},{"StartTime":281312.0,"Position":67.96667}]},{"StartTime":281427.0,"Objects":[{"StartTime":281427.0,"Position":189.0},{"StartTime":281542.0,"Position":193.9514}]},{"StartTime":281600.0,"Objects":[{"StartTime":281600.0,"Position":205.0}]},{"StartTime":281658.0,"Objects":[{"StartTime":281658.0,"Position":218.0},{"StartTime":281755.0,"Position":289.812042},{"StartTime":281888.0,"Position":402.662872}]},{"StartTime":282004.0,"Objects":[{"StartTime":282004.0,"Position":489.0},{"StartTime":282101.0,"Position":512.0},{"StartTime":282234.0,"Position":508.0971}]},{"StartTime":282350.0,"Objects":[{"StartTime":282350.0,"Position":424.0},{"StartTime":282465.0,"Position":412.63028}]},{"StartTime":282581.0,"Objects":[{"StartTime":282581.0,"Position":491.0}]},{"StartTime":282697.0,"Objects":[{"StartTime":282697.0,"Position":491.0},{"StartTime":282794.0,"Position":407.245728},{"StartTime":282927.0,"Position":314.45224}]},{"StartTime":283043.0,"Objects":[{"StartTime":283043.0,"Position":239.0},{"StartTime":283158.0,"Position":225.275238}]},{"StartTime":283273.0,"Objects":[{"StartTime":283273.0,"Position":266.0},{"StartTime":283388.0,"Position":279.724762}]},{"StartTime":283504.0,"Objects":[{"StartTime":283504.0,"Position":148.0},{"StartTime":283601.0,"Position":102.355682},{"StartTime":283734.0,"Position":0.0}]},{"StartTime":283850.0,"Objects":[{"StartTime":283850.0,"Position":162.0},{"StartTime":283947.0,"Position":226.823669},{"StartTime":284080.0,"Position":344.177246}]},{"StartTime":284197.0,"Objects":[{"StartTime":284197.0,"Position":95.0},{"StartTime":284312.0,"Position":85.31283}]},{"StartTime":284427.0,"Objects":[{"StartTime":284427.0,"Position":61.0}]},{"StartTime":284543.0,"Objects":[{"StartTime":284543.0,"Position":61.0}]},{"StartTime":284658.0,"Objects":[{"StartTime":284658.0,"Position":227.0}]},{"StartTime":284773.0,"Objects":[{"StartTime":284773.0,"Position":227.0}]},{"StartTime":284889.0,"Objects":[{"StartTime":284889.0,"Position":159.0},{"StartTime":284957.0,"Position":137.58168},{"StartTime":285062.0,"Position":140.126938}]},{"StartTime":285120.0,"Objects":[{"StartTime":285120.0,"Position":216.0},{"StartTime":285188.0,"Position":214.337952},{"StartTime":285293.0,"Position":182.363892}]},{"StartTime":285350.0,"Objects":[{"StartTime":285350.0,"Position":121.0},{"StartTime":285447.0,"Position":181.8125},{"StartTime":285580.0,"Position":305.503845}]},{"StartTime":285697.0,"Objects":[{"StartTime":285697.0,"Position":377.0},{"StartTime":285794.0,"Position":417.9641},{"StartTime":285927.0,"Position":415.3728}]},{"StartTime":286043.0,"Objects":[{"StartTime":286043.0,"Position":299.0},{"StartTime":286158.0,"Position":284.9337}]},{"StartTime":286273.0,"Objects":[{"StartTime":286273.0,"Position":248.0}]},{"StartTime":286389.0,"Objects":[{"StartTime":286389.0,"Position":248.0},{"StartTime":286486.0,"Position":187.836212},{"StartTime":286619.0,"Position":87.4779053}]},{"StartTime":286735.0,"Objects":[{"StartTime":286735.0,"Position":0.0},{"StartTime":286850.0,"Position":90.79614}]},{"StartTime":286966.0,"Objects":[{"StartTime":286966.0,"Position":285.0},{"StartTime":287081.0,"Position":208.507446}]},{"StartTime":287197.0,"Objects":[{"StartTime":287197.0,"Position":160.0},{"StartTime":287294.0,"Position":157.901031},{"StartTime":287427.0,"Position":131.3117}]},{"StartTime":287543.0,"Objects":[{"StartTime":287543.0,"Position":196.0},{"StartTime":287640.0,"Position":239.657654},{"StartTime":287773.0,"Position":360.606018}]},{"StartTime":287889.0,"Objects":[{"StartTime":287889.0,"Position":430.0},{"StartTime":288004.0,"Position":512.0}]},{"StartTime":288120.0,"Objects":[{"StartTime":288120.0,"Position":349.0}]},{"StartTime":288235.0,"Objects":[{"StartTime":288235.0,"Position":349.0},{"StartTime":288332.0,"Position":326.11142},{"StartTime":288465.0,"Position":319.776855}]},{"StartTime":288581.0,"Objects":[{"StartTime":288581.0,"Position":382.0},{"StartTime":288696.0,"Position":474.508667}]},{"StartTime":288812.0,"Objects":[{"StartTime":288812.0,"Position":245.0},{"StartTime":288927.0,"Position":152.491333}]},{"StartTime":288985.0,"Objects":[{"StartTime":288985.0,"Position":139.0}]},{"StartTime":289043.0,"Objects":[{"StartTime":289043.0,"Position":124.0},{"StartTime":289140.0,"Position":146.676285},{"StartTime":289273.0,"Position":81.78579}]},{"StartTime":289389.0,"Objects":[{"StartTime":289389.0,"Position":29.0},{"StartTime":289486.0,"Position":91.9763641},{"StartTime":289619.0,"Position":212.819092}]},{"StartTime":289735.0,"Objects":[{"StartTime":289735.0,"Position":301.0},{"StartTime":289850.0,"Position":286.956635}]},{"StartTime":289966.0,"Objects":[{"StartTime":289966.0,"Position":195.0}]},{"StartTime":290081.0,"Objects":[{"StartTime":290081.0,"Position":195.0},{"StartTime":290178.0,"Position":178.194183},{"StartTime":290311.0,"Position":205.152008}]},{"StartTime":290427.0,"Objects":[{"StartTime":290427.0,"Position":365.0},{"StartTime":290542.0,"Position":272.528137}]},{"StartTime":290658.0,"Objects":[{"StartTime":290658.0,"Position":375.0},{"StartTime":290773.0,"Position":467.471863}]},{"StartTime":290889.0,"Objects":[{"StartTime":290889.0,"Position":505.0},{"StartTime":290986.0,"Position":512.0},{"StartTime":291119.0,"Position":486.800751}]},{"StartTime":291235.0,"Objects":[{"StartTime":291235.0,"Position":408.0},{"StartTime":291332.0,"Position":343.1368},{"StartTime":291465.0,"Position":225.277878}]},{"StartTime":291581.0,"Objects":[{"StartTime":291581.0,"Position":155.0},{"StartTime":291696.0,"Position":62.8730278}]},{"StartTime":291812.0,"Objects":[{"StartTime":291812.0,"Position":245.0},{"StartTime":291909.0,"Position":290.813446},{"StartTime":292042.0,"Position":259.524231}]},{"StartTime":292158.0,"Objects":[{"StartTime":292158.0,"Position":186.0}]},{"StartTime":292273.0,"Objects":[{"StartTime":292273.0,"Position":0.0},{"StartTime":292341.0,"Position":64.8035},{"StartTime":292446.0,"Position":139.426544}]},{"StartTime":292504.0,"Objects":[{"StartTime":292504.0,"Position":179.0},{"StartTime":292619.0,"Position":86.0954742}]},{"StartTime":292735.0,"Objects":[{"StartTime":292735.0,"Position":43.0},{"StartTime":292850.0,"Position":135.777985}]},{"StartTime":292966.0,"Objects":[{"StartTime":292966.0,"Position":378.0},{"StartTime":293063.0,"Position":316.065125},{"StartTime":293196.0,"Position":218.297974}]},{"StartTime":293312.0,"Objects":[{"StartTime":293312.0,"Position":132.0}]},{"StartTime":293427.0,"Objects":[{"StartTime":293427.0,"Position":227.0},{"StartTime":293542.0,"Position":210.002319}]},{"StartTime":293658.0,"Objects":[{"StartTime":293658.0,"Position":147.0}]},{"StartTime":293773.0,"Objects":[{"StartTime":293773.0,"Position":132.0}]},{"StartTime":293889.0,"Objects":[{"StartTime":293889.0,"Position":285.0},{"StartTime":294004.0,"Position":377.143}]},{"StartTime":294120.0,"Objects":[{"StartTime":294120.0,"Position":450.0}]},{"StartTime":294235.0,"Objects":[{"StartTime":294235.0,"Position":363.0}]},{"StartTime":294350.0,"Objects":[{"StartTime":294350.0,"Position":334.0}]},{"StartTime":294466.0,"Objects":[{"StartTime":294466.0,"Position":441.0}]},{"StartTime":294581.0,"Objects":[{"StartTime":294581.0,"Position":303.0},{"StartTime":294638.0,"Position":257.591858},{"StartTime":294696.0,"Position":303.0},{"StartTime":294754.0,"Position":257.591858}]},{"StartTime":294812.0,"Objects":[{"StartTime":294812.0,"Position":204.0},{"StartTime":294869.0,"Position":158.763885},{"StartTime":294927.0,"Position":204.0},{"StartTime":294985.0,"Position":158.763885}]},{"StartTime":295043.0,"Objects":[{"StartTime":295043.0,"Position":80.0}]},{"StartTime":295100.0,"Objects":[{"StartTime":295100.0,"Position":45.0}]},{"StartTime":295158.0,"Objects":[{"StartTime":295158.0,"Position":26.0}]},{"StartTime":295216.0,"Objects":[{"StartTime":295216.0,"Position":18.0}]},{"StartTime":295273.0,"Objects":[{"StartTime":295273.0,"Position":22.0}]},{"StartTime":295331.0,"Objects":[{"StartTime":295331.0,"Position":39.0}]},{"StartTime":295389.0,"Objects":[{"StartTime":295389.0,"Position":71.0}]},{"StartTime":295447.0,"Objects":[{"StartTime":295447.0,"Position":116.0}]},{"StartTime":295504.0,"Objects":[{"StartTime":295504.0,"Position":168.0},{"StartTime":295601.0,"Position":239.686127},{"StartTime":295734.0,"Position":352.204224}]},{"StartTime":295850.0,"Objects":[{"StartTime":295850.0,"Position":444.0}]},{"StartTime":295966.0,"Objects":[{"StartTime":295966.0,"Position":338.0},{"StartTime":296063.0,"Position":245.313873},{"StartTime":296196.0,"Position":153.795792}]},{"StartTime":296312.0,"Objects":[{"StartTime":296312.0,"Position":54.0}]},{"StartTime":296427.0,"Objects":[{"StartTime":296427.0,"Position":152.0},{"StartTime":296542.0,"Position":244.270477}]},{"StartTime":296658.0,"Objects":[{"StartTime":296658.0,"Position":499.0},{"StartTime":296726.0,"Position":446.291138},{"StartTime":296831.0,"Position":375.8472}]},{"StartTime":296889.0,"Objects":[{"StartTime":296889.0,"Position":338.0},{"StartTime":297004.0,"Position":327.5102}]},{"StartTime":297120.0,"Objects":[{"StartTime":297120.0,"Position":420.0}]},{"StartTime":297235.0,"Objects":[{"StartTime":297235.0,"Position":397.0}]},{"StartTime":297350.0,"Objects":[{"StartTime":297350.0,"Position":240.0},{"StartTime":297447.0,"Position":176.986374},{"StartTime":297580.0,"Position":62.06865}]},{"StartTime":297697.0,"Objects":[{"StartTime":297697.0,"Position":143.0},{"StartTime":297794.0,"Position":218.013626},{"StartTime":297927.0,"Position":320.931335}]},{"StartTime":298043.0,"Objects":[{"StartTime":298043.0,"Position":150.0},{"StartTime":298158.0,"Position":57.6743}]},{"StartTime":298273.0,"Objects":[{"StartTime":298273.0,"Position":264.0},{"StartTime":298370.0,"Position":350.144684},{"StartTime":298503.0,"Position":443.095062}]},{"StartTime":298620.0,"Objects":[{"StartTime":298620.0,"Position":306.0},{"StartTime":298735.0,"Position":275.675659}]},{"StartTime":298850.0,"Objects":[{"StartTime":298850.0,"Position":443.0}]},{"StartTime":298966.0,"Objects":[{"StartTime":298966.0,"Position":321.0}]},{"StartTime":299081.0,"Objects":[{"StartTime":299081.0,"Position":390.0}]},{"StartTime":299197.0,"Objects":[{"StartTime":299197.0,"Position":465.0},{"StartTime":299294.0,"Position":400.31842},{"StartTime":299427.0,"Position":289.129517}]},{"StartTime":299543.0,"Objects":[{"StartTime":299543.0,"Position":75.0}]},{"StartTime":299658.0,"Objects":[{"StartTime":299658.0,"Position":75.0},{"StartTime":299755.0,"Position":132.64238},{"StartTime":299888.0,"Position":228.278809}]},{"StartTime":300004.0,"Objects":[{"StartTime":300004.0,"Position":214.0}]},{"StartTime":300120.0,"Objects":[{"StartTime":300120.0,"Position":214.0},{"StartTime":300235.0,"Position":197.563568}]},{"StartTime":300350.0,"Objects":[{"StartTime":300350.0,"Position":325.0},{"StartTime":300418.0,"Position":310.842072},{"StartTime":300523.0,"Position":306.7894}]},{"StartTime":300581.0,"Objects":[{"StartTime":300581.0,"Position":332.0},{"StartTime":300696.0,"Position":239.2482}]},{"StartTime":300812.0,"Objects":[{"StartTime":300812.0,"Position":391.0},{"StartTime":300927.0,"Position":483.7518}]},{"StartTime":301043.0,"Objects":[{"StartTime":301043.0,"Position":237.0},{"StartTime":301140.0,"Position":172.93544},{"StartTime":301273.0,"Position":51.8984833}]},{"StartTime":301389.0,"Objects":[{"StartTime":301389.0,"Position":0.0}]},{"StartTime":301504.0,"Objects":[{"StartTime":301504.0,"Position":53.0},{"StartTime":301601.0,"Position":130.06456},{"StartTime":301734.0,"Position":238.101517}]},{"StartTime":301850.0,"Objects":[{"StartTime":301850.0,"Position":290.0}]},{"StartTime":301966.0,"Objects":[{"StartTime":301966.0,"Position":237.0},{"StartTime":302081.0,"Position":144.5551}]},{"StartTime":302197.0,"Objects":[{"StartTime":302197.0,"Position":348.0},{"StartTime":302312.0,"Position":440.4449}]},{"StartTime":302427.0,"Objects":[{"StartTime":302427.0,"Position":482.0},{"StartTime":302524.0,"Position":437.840454},{"StartTime":302657.0,"Position":332.600861}]},{"StartTime":302773.0,"Objects":[{"StartTime":302773.0,"Position":212.0}]},{"StartTime":302889.0,"Objects":[{"StartTime":302889.0,"Position":296.0},{"StartTime":303004.0,"Position":307.855774}]},{"StartTime":303120.0,"Objects":[{"StartTime":303120.0,"Position":144.0},{"StartTime":303235.0,"Position":132.144226}]},{"StartTime":303350.0,"Objects":[{"StartTime":303350.0,"Position":289.0},{"StartTime":303447.0,"Position":229.60788},{"StartTime":303580.0,"Position":112.767624}]},{"StartTime":303697.0,"Objects":[{"StartTime":303697.0,"Position":42.0}]},{"StartTime":303812.0,"Objects":[{"StartTime":303812.0,"Position":132.0},{"StartTime":303909.0,"Position":162.866043},{"StartTime":304042.0,"Position":163.28009}]},{"StartTime":304158.0,"Objects":[{"StartTime":304158.0,"Position":68.0}]},{"StartTime":304273.0,"Objects":[{"StartTime":304273.0,"Position":68.0},{"StartTime":304388.0,"Position":48.7815}]},{"StartTime":304504.0,"Objects":[{"StartTime":304504.0,"Position":269.0},{"StartTime":304619.0,"Position":288.2185}]},{"StartTime":304735.0,"Objects":[{"StartTime":304735.0,"Position":163.0},{"StartTime":304832.0,"Position":158.374649},{"StartTime":304965.0,"Position":181.006531}]},{"StartTime":305081.0,"Objects":[{"StartTime":305081.0,"Position":146.0},{"StartTime":305178.0,"Position":209.810577},{"StartTime":305311.0,"Position":311.379}]},{"StartTime":305427.0,"Objects":[{"StartTime":305427.0,"Position":378.0}]},{"StartTime":305543.0,"Objects":[{"StartTime":305543.0,"Position":470.0}]},{"StartTime":305658.0,"Objects":[{"StartTime":305658.0,"Position":403.0},{"StartTime":305755.0,"Position":410.545776},{"StartTime":305888.0,"Position":420.897156}]},{"StartTime":306004.0,"Objects":[{"StartTime":306004.0,"Position":353.0}]},{"StartTime":306120.0,"Objects":[{"StartTime":306120.0,"Position":248.0},{"StartTime":306235.0,"Position":334.8469}]},{"StartTime":306350.0,"Objects":[{"StartTime":306350.0,"Position":178.0},{"StartTime":306465.0,"Position":91.48886}]},{"StartTime":306581.0,"Objects":[{"StartTime":306581.0,"Position":67.0},{"StartTime":306696.0,"Position":50.63526}]},{"StartTime":306812.0,"Objects":[{"StartTime":306812.0,"Position":101.0}]},{"StartTime":306927.0,"Objects":[{"StartTime":306927.0,"Position":196.0}]},{"StartTime":307043.0,"Objects":[{"StartTime":307043.0,"Position":148.0},{"StartTime":307140.0,"Position":193.814041},{"StartTime":307273.0,"Position":316.875061}]},{"StartTime":307389.0,"Objects":[{"StartTime":307389.0,"Position":395.0}]},{"StartTime":307504.0,"Objects":[{"StartTime":307504.0,"Position":327.0},{"StartTime":307619.0,"Position":308.544983}]},{"StartTime":307735.0,"Objects":[{"StartTime":307735.0,"Position":379.0},{"StartTime":307850.0,"Position":397.455017}]},{"StartTime":307966.0,"Objects":[{"StartTime":307966.0,"Position":511.0},{"StartTime":308081.0,"Position":488.880981}]},{"StartTime":308197.0,"Objects":[{"StartTime":308197.0,"Position":473.0},{"StartTime":308312.0,"Position":495.201874}]},{"StartTime":308427.0,"Objects":[{"StartTime":308427.0,"Position":512.0}]},{"StartTime":308543.0,"Objects":[{"StartTime":308543.0,"Position":418.0}]},{"StartTime":308658.0,"Objects":[{"StartTime":308658.0,"Position":375.0}]},{"StartTime":308889.0,"Objects":[{"StartTime":308889.0,"Position":379.0}]},{"StartTime":309004.0,"Objects":[{"StartTime":309004.0,"Position":281.0}]},{"StartTime":309062.0,"Objects":[{"StartTime":309062.0,"Position":275.0}]},{"StartTime":309120.0,"Objects":[{"StartTime":309120.0,"Position":271.0}]},{"StartTime":309177.0,"Objects":[{"StartTime":309177.0,"Position":268.0}]},{"StartTime":309235.0,"Objects":[{"StartTime":309235.0,"Position":265.0}]},{"StartTime":309293.0,"Objects":[{"StartTime":309293.0,"Position":264.0}]},{"StartTime":309350.0,"Objects":[{"StartTime":309350.0,"Position":263.0}]},{"StartTime":309408.0,"Objects":[{"StartTime":309408.0,"Position":233.0}]},{"StartTime":309466.0,"Objects":[{"StartTime":309466.0,"Position":189.0}]},{"StartTime":309523.0,"Objects":[{"StartTime":309523.0,"Position":142.0}]},{"StartTime":309581.0,"Objects":[{"StartTime":309581.0,"Position":105.0}]},{"StartTime":309639.0,"Objects":[{"StartTime":309639.0,"Position":86.0}]},{"StartTime":309697.0,"Objects":[{"StartTime":309697.0,"Position":90.0}]},{"StartTime":309754.0,"Objects":[{"StartTime":309754.0,"Position":122.0}]},{"StartTime":309812.0,"Objects":[{"StartTime":309812.0,"Position":169.0},{"StartTime":309869.0,"Position":215.4298}]},{"StartTime":309927.0,"Objects":[{"StartTime":309927.0,"Position":263.0},{"StartTime":309984.0,"Position":309.429779}]},{"StartTime":310043.0,"Objects":[{"StartTime":310043.0,"Position":361.0},{"StartTime":310100.0,"Position":407.429779}]},{"StartTime":310158.0,"Objects":[{"StartTime":310158.0,"Position":495.0}]},{"StartTime":310216.0,"Objects":[{"StartTime":310216.0,"Position":495.0}]},{"StartTime":310273.0,"Objects":[{"StartTime":310273.0,"Position":495.0},{"StartTime":310370.0,"Position":494.433838},{"StartTime":310503.0,"Position":481.801849}]},{"StartTime":310620.0,"Objects":[{"StartTime":310620.0,"Position":428.0}]},{"StartTime":310735.0,"Objects":[{"StartTime":310735.0,"Position":316.0},{"StartTime":310832.0,"Position":316.4694},{"StartTime":310965.0,"Position":328.9687}]},{"StartTime":311081.0,"Objects":[{"StartTime":311081.0,"Position":242.0}]},{"StartTime":311197.0,"Objects":[{"StartTime":311197.0,"Position":316.0},{"StartTime":311312.0,"Position":402.284546}]},{"StartTime":311427.0,"Objects":[{"StartTime":311427.0,"Position":481.0}]},{"StartTime":311658.0,"Objects":[{"StartTime":311658.0,"Position":481.0},{"StartTime":311773.0,"Position":486.955963}]},{"StartTime":311889.0,"Objects":[{"StartTime":311889.0,"Position":495.0}]},{"StartTime":312004.0,"Objects":[{"StartTime":312004.0,"Position":316.0}]},{"StartTime":312120.0,"Objects":[{"StartTime":312120.0,"Position":428.0},{"StartTime":312217.0,"Position":341.799774},{"StartTime":312350.0,"Position":247.0695}]},{"StartTime":312466.0,"Objects":[{"StartTime":312466.0,"Position":157.0}]},{"StartTime":312581.0,"Objects":[{"StartTime":312581.0,"Position":61.0},{"StartTime":312696.0,"Position":73.8031}]},{"StartTime":312812.0,"Objects":[{"StartTime":312812.0,"Position":214.0},{"StartTime":312927.0,"Position":201.1969}]},{"StartTime":313043.0,"Objects":[{"StartTime":313043.0,"Position":90.0}]},{"StartTime":313158.0,"Objects":[{"StartTime":313158.0,"Position":146.0}]},{"StartTime":313273.0,"Objects":[{"StartTime":313273.0,"Position":288.0},{"StartTime":313388.0,"Position":304.056061}]},{"StartTime":313504.0,"Objects":[{"StartTime":313504.0,"Position":129.0},{"StartTime":313619.0,"Position":145.8128}]},{"StartTime":313735.0,"Objects":[{"StartTime":313735.0,"Position":178.0},{"StartTime":313850.0,"Position":89.88275}]},{"StartTime":313966.0,"Objects":[{"StartTime":313966.0,"Position":357.0},{"StartTime":314063.0,"Position":421.669067},{"StartTime":314196.0,"Position":510.901}]},{"StartTime":314312.0,"Objects":[{"StartTime":314312.0,"Position":490.0}]},{"StartTime":314427.0,"Objects":[{"StartTime":314427.0,"Position":465.0},{"StartTime":314542.0,"Position":372.772156}]},{"StartTime":314658.0,"Objects":[{"StartTime":314658.0,"Position":264.0},{"StartTime":314773.0,"Position":356.227844}]},{"StartTime":314889.0,"Objects":[{"StartTime":314889.0,"Position":201.0},{"StartTime":314957.0,"Position":142.767838},{"StartTime":315062.0,"Position":73.42414}]},{"StartTime":315120.0,"Objects":[{"StartTime":315120.0,"Position":32.0},{"StartTime":315235.0,"Position":25.1291542}]},{"StartTime":315350.0,"Objects":[{"StartTime":315350.0,"Position":258.0},{"StartTime":315447.0,"Position":246.790787},{"StartTime":315580.0,"Position":213.486267}]},{"StartTime":315697.0,"Objects":[{"StartTime":315697.0,"Position":262.0}]},{"StartTime":315812.0,"Objects":[{"StartTime":315812.0,"Position":353.0},{"StartTime":315927.0,"Position":371.1887}]},{"StartTime":316043.0,"Objects":[{"StartTime":316043.0,"Position":262.0},{"StartTime":316158.0,"Position":243.811325}]},{"StartTime":316273.0,"Objects":[{"StartTime":316273.0,"Position":372.0},{"StartTime":316388.0,"Position":464.0676}]},{"StartTime":316504.0,"Objects":[{"StartTime":316504.0,"Position":213.0},{"StartTime":316619.0,"Position":120.9324}]},{"StartTime":316735.0,"Objects":[{"StartTime":316735.0,"Position":36.0},{"StartTime":316832.0,"Position":120.081963},{"StartTime":316965.0,"Position":103.725967}]},{"StartTime":317081.0,"Objects":[{"StartTime":317081.0,"Position":37.0}]},{"StartTime":317197.0,"Objects":[{"StartTime":317197.0,"Position":37.0},{"StartTime":317294.0,"Position":13.7582474},{"StartTime":317427.0,"Position":120.612343}]},{"StartTime":317543.0,"Objects":[{"StartTime":317543.0,"Position":334.0}]},{"StartTime":317600.0,"Objects":[{"StartTime":317600.0,"Position":334.0}]},{"StartTime":317658.0,"Objects":[{"StartTime":317658.0,"Position":334.0},{"StartTime":317755.0,"Position":264.838531},{"StartTime":317888.0,"Position":180.6072}]},{"StartTime":318004.0,"Objects":[{"StartTime":318004.0,"Position":207.0}]},{"StartTime":318120.0,"Objects":[{"StartTime":318120.0,"Position":387.0},{"StartTime":318235.0,"Position":385.330536}]},{"StartTime":318350.0,"Objects":[{"StartTime":318350.0,"Position":491.0},{"StartTime":318465.0,"Position":492.6695}]},{"StartTime":318581.0,"Objects":[{"StartTime":318581.0,"Position":222.0},{"StartTime":318678.0,"Position":308.818359},{"StartTime":318811.0,"Position":407.656677}]},{"StartTime":318927.0,"Objects":[{"StartTime":318927.0,"Position":491.0}]},{"StartTime":319043.0,"Objects":[{"StartTime":319043.0,"Position":304.0},{"StartTime":319140.0,"Position":208.180573},{"StartTime":319273.0,"Position":118.342148}]},{"StartTime":319389.0,"Objects":[{"StartTime":319389.0,"Position":35.0}]},{"StartTime":319504.0,"Objects":[{"StartTime":319504.0,"Position":197.0},{"StartTime":319601.0,"Position":255.872513},{"StartTime":319734.0,"Position":231.314728}]},{"StartTime":319966.0,"Objects":[{"StartTime":319966.0,"Position":231.0},{"StartTime":320081.0,"Position":323.294769}]},{"StartTime":320197.0,"Objects":[{"StartTime":320197.0,"Position":501.0},{"StartTime":320312.0,"Position":408.931366}]},{"StartTime":320427.0,"Objects":[{"StartTime":320427.0,"Position":152.0},{"StartTime":320524.0,"Position":100.127495},{"StartTime":320657.0,"Position":117.685287}]},{"StartTime":320773.0,"Objects":[{"StartTime":320773.0,"Position":143.0}]},{"StartTime":320889.0,"Objects":[{"StartTime":320889.0,"Position":221.0},{"StartTime":321004.0,"Position":206.995148}]},{"StartTime":321120.0,"Objects":[{"StartTime":321120.0,"Position":63.0},{"StartTime":321235.0,"Position":49.1510544}]},{"StartTime":321350.0,"Objects":[{"StartTime":321350.0,"Position":340.0},{"StartTime":321407.0,"Position":324.524963},{"StartTime":321465.0,"Position":301.092224},{"StartTime":321522.0,"Position":289.045624},{"StartTime":321580.0,"Position":230.214066},{"StartTime":321677.0,"Position":323.128571},{"StartTime":321811.0,"Position":340.0}]},{"StartTime":321927.0,"Objects":[{"StartTime":321927.0,"Position":173.0}]},{"StartTime":322043.0,"Objects":[{"StartTime":322043.0,"Position":143.0},{"StartTime":322158.0,"Position":152.3036}]},{"StartTime":322273.0,"Objects":[{"StartTime":322273.0,"Position":400.0},{"StartTime":322388.0,"Position":409.3036}]},{"StartTime":322504.0,"Objects":[{"StartTime":322504.0,"Position":257.0},{"StartTime":322619.0,"Position":332.878479}]},{"StartTime":322735.0,"Objects":[{"StartTime":322735.0,"Position":512.0},{"StartTime":322850.0,"Position":426.4768}]},{"StartTime":322966.0,"Objects":[{"StartTime":322966.0,"Position":256.0}]},{"StartTime":323081.0,"Objects":[{"StartTime":323081.0,"Position":170.0}]},{"StartTime":323197.0,"Objects":[{"StartTime":323197.0,"Position":100.0},{"StartTime":323312.0,"Position":6.62146759}]},{"StartTime":323427.0,"Objects":[{"StartTime":323427.0,"Position":152.0},{"StartTime":323542.0,"Position":245.37854}]},{"StartTime":323658.0,"Objects":[{"StartTime":323658.0,"Position":93.0},{"StartTime":323773.0,"Position":0.0}]},{"StartTime":323888.0,"Objects":[{"StartTime":323888.0,"Position":145.0},{"StartTime":324003.0,"Position":238.37854}]},{"StartTime":324120.0,"Objects":[{"StartTime":324120.0,"Position":82.0}]},{"StartTime":324177.0,"Objects":[{"StartTime":324177.0,"Position":69.0}]},{"StartTime":324235.0,"Objects":[{"StartTime":324235.0,"Position":60.0}]},{"StartTime":324293.0,"Objects":[{"StartTime":324293.0,"Position":54.0}]},{"StartTime":324350.0,"Objects":[{"StartTime":324350.0,"Position":52.0}]},{"StartTime":324408.0,"Objects":[{"StartTime":324408.0,"Position":54.0}]},{"StartTime":324466.0,"Objects":[{"StartTime":324466.0,"Position":60.0}]},{"StartTime":324523.0,"Objects":[{"StartTime":324523.0,"Position":70.0}]},{"StartTime":324581.0,"Objects":[{"StartTime":324581.0,"Position":82.0}]},{"StartTime":324638.0,"Objects":[{"StartTime":324638.0,"Position":136.0}]},{"StartTime":324696.0,"Objects":[{"StartTime":324696.0,"Position":176.0}]},{"StartTime":324754.0,"Objects":[{"StartTime":324754.0,"Position":185.0}]},{"StartTime":324811.0,"Objects":[{"StartTime":324811.0,"Position":157.0}]},{"StartTime":324870.0,"Objects":[{"StartTime":324870.0,"Position":129.0}]},{"StartTime":324927.0,"Objects":[{"StartTime":324927.0,"Position":137.0}]},{"StartTime":324985.0,"Objects":[{"StartTime":324985.0,"Position":177.0}]},{"StartTime":325043.0,"Objects":[{"StartTime":325043.0,"Position":232.0},{"StartTime":325140.0,"Position":309.819427},{"StartTime":325273.0,"Position":417.921875}]},{"StartTime":325389.0,"Objects":[{"StartTime":325389.0,"Position":485.0}]},{"StartTime":325504.0,"Objects":[{"StartTime":325504.0,"Position":267.0},{"StartTime":325601.0,"Position":191.180573},{"StartTime":325734.0,"Position":81.07812}]},{"StartTime":325850.0,"Objects":[{"StartTime":325850.0,"Position":14.0}]},{"StartTime":325966.0,"Objects":[{"StartTime":325966.0,"Position":323.0},{"StartTime":326081.0,"Position":330.8841}]},{"StartTime":326197.0,"Objects":[{"StartTime":326197.0,"Position":250.0}]},{"StartTime":326427.0,"Objects":[{"StartTime":326427.0,"Position":250.0},{"StartTime":326542.0,"Position":240.312836}]},{"StartTime":326658.0,"Objects":[{"StartTime":326658.0,"Position":426.0},{"StartTime":326773.0,"Position":434.638153}]},{"StartTime":326889.0,"Objects":[{"StartTime":326889.0,"Position":82.0},{"StartTime":326986.0,"Position":160.843857},{"StartTime":327119.0,"Position":266.5864}]},{"StartTime":327235.0,"Objects":[{"StartTime":327235.0,"Position":511.0}]},{"StartTime":327350.0,"Objects":[{"StartTime":327350.0,"Position":449.0},{"StartTime":327465.0,"Position":355.981232}]},{"StartTime":327581.0,"Objects":[{"StartTime":327581.0,"Position":332.0},{"StartTime":327696.0,"Position":425.018768}]},{"StartTime":327812.0,"Objects":[{"StartTime":327812.0,"Position":505.0}]},{"StartTime":327927.0,"Objects":[{"StartTime":327927.0,"Position":304.0}]},{"StartTime":328043.0,"Objects":[{"StartTime":328043.0,"Position":323.0},{"StartTime":328158.0,"Position":333.2415}]},{"StartTime":328273.0,"Objects":[{"StartTime":328273.0,"Position":155.0},{"StartTime":328388.0,"Position":144.758514}]},{"StartTime":328504.0,"Objects":[{"StartTime":328504.0,"Position":248.0},{"StartTime":328619.0,"Position":154.981232}]},{"StartTime":328735.0,"Objects":[{"StartTime":328735.0,"Position":242.0},{"StartTime":328832.0,"Position":333.760437},{"StartTime":328965.0,"Position":425.4981}]},{"StartTime":329081.0,"Objects":[{"StartTime":329081.0,"Position":503.0}]},{"StartTime":329197.0,"Objects":[{"StartTime":329197.0,"Position":442.0},{"StartTime":329312.0,"Position":433.993866}]},{"StartTime":329427.0,"Objects":[{"StartTime":329427.0,"Position":323.0},{"StartTime":329542.0,"Position":330.1165}]},{"StartTime":329658.0,"Objects":[{"StartTime":329658.0,"Position":155.0},{"StartTime":329726.0,"Position":175.485352},{"StartTime":329831.0,"Position":168.9554}]},{"StartTime":329889.0,"Objects":[{"StartTime":329889.0,"Position":168.0},{"StartTime":330004.0,"Position":87.631546}]},{"StartTime":330120.0,"Objects":[{"StartTime":330120.0,"Position":229.0},{"StartTime":330235.0,"Position":321.9641}]},{"StartTime":330350.0,"Objects":[{"StartTime":330350.0,"Position":137.0},{"StartTime":330465.0,"Position":44.0246429}]},{"StartTime":330581.0,"Objects":[{"StartTime":330581.0,"Position":309.0},{"StartTime":330649.0,"Position":324.6894},{"StartTime":330754.0,"Position":413.2007}]},{"StartTime":330812.0,"Objects":[{"StartTime":330812.0,"Position":415.0},{"StartTime":330927.0,"Position":421.031}]},{"StartTime":331043.0,"Objects":[{"StartTime":331043.0,"Position":512.0},{"StartTime":331158.0,"Position":502.003845}]},{"StartTime":331273.0,"Objects":[{"StartTime":331273.0,"Position":330.0},{"StartTime":331388.0,"Position":338.911377}]},{"StartTime":331504.0,"Objects":[{"StartTime":331504.0,"Position":512.0},{"StartTime":331572.0,"Position":456.185364},{"StartTime":331677.0,"Position":385.767517}]},{"StartTime":331735.0,"Objects":[{"StartTime":331735.0,"Position":385.0},{"StartTime":331850.0,"Position":292.024658}]},{"StartTime":331966.0,"Objects":[{"StartTime":331966.0,"Position":62.0}]},{"StartTime":332081.0,"Objects":[{"StartTime":332081.0,"Position":161.0}]},{"StartTime":332138.0,"Objects":[{"StartTime":332138.0,"Position":162.0}]},{"StartTime":332196.0,"Objects":[{"StartTime":332196.0,"Position":140.0}]},{"StartTime":332254.0,"Objects":[{"StartTime":332254.0,"Position":101.0}]},{"StartTime":332312.0,"Objects":[{"StartTime":332312.0,"Position":73.0}]},{"StartTime":332370.0,"Objects":[{"StartTime":332370.0,"Position":73.0}]},{"StartTime":332427.0,"Objects":[{"StartTime":332427.0,"Position":96.0},{"StartTime":332524.0,"Position":183.878708},{"StartTime":332657.0,"Position":265.196472}]},{"StartTime":332773.0,"Objects":[{"StartTime":332773.0,"Position":337.0}]},{"StartTime":332889.0,"Objects":[{"StartTime":332889.0,"Position":421.0},{"StartTime":333004.0,"Position":418.8342}]},{"StartTime":333120.0,"Objects":[{"StartTime":333120.0,"Position":215.0},{"StartTime":333235.0,"Position":216.580368}]},{"StartTime":333350.0,"Objects":[{"StartTime":333350.0,"Position":344.0},{"StartTime":333418.0,"Position":323.561249},{"StartTime":333523.0,"Position":336.286469}]},{"StartTime":333581.0,"Objects":[{"StartTime":333581.0,"Position":337.0},{"StartTime":333696.0,"Position":429.627045}]},{"StartTime":333812.0,"Objects":[{"StartTime":333812.0,"Position":498.0},{"StartTime":333927.0,"Position":420.656433}]},{"StartTime":334043.0,"Objects":[{"StartTime":334043.0,"Position":292.0},{"StartTime":334158.0,"Position":213.406525}]},{"StartTime":334273.0,"Objects":[{"StartTime":334273.0,"Position":32.0},{"StartTime":334370.0,"Position":107.732246},{"StartTime":334503.0,"Position":214.972687}]},{"StartTime":334735.0,"Objects":[{"StartTime":334735.0,"Position":214.0},{"StartTime":334850.0,"Position":199.81752}]},{"StartTime":334966.0,"Objects":[{"StartTime":334966.0,"Position":306.0},{"StartTime":335081.0,"Position":291.648315}]},{"StartTime":335197.0,"Objects":[{"StartTime":335197.0,"Position":72.0},{"StartTime":335294.0,"Position":111.130783},{"StartTime":335427.0,"Position":216.634521}]},{"StartTime":335543.0,"Objects":[{"StartTime":335543.0,"Position":291.0}]},{"StartTime":335658.0,"Objects":[{"StartTime":335658.0,"Position":498.0},{"StartTime":335755.0,"Position":417.054535},{"StartTime":335888.0,"Position":314.288574}]},{"StartTime":336004.0,"Objects":[{"StartTime":336004.0,"Position":221.0}]},{"StartTime":336120.0,"Objects":[{"StartTime":336120.0,"Position":10.0},{"StartTime":336188.0,"Position":66.7611542},{"StartTime":336293.0,"Position":143.863708}]},{"StartTime":336350.0,"Objects":[{"StartTime":336350.0,"Position":143.0},{"StartTime":336465.0,"Position":112.3037}]},{"StartTime":336581.0,"Objects":[{"StartTime":336581.0,"Position":277.0},{"StartTime":336696.0,"Position":221.2786}]},{"StartTime":336812.0,"Objects":[{"StartTime":336812.0,"Position":41.0},{"StartTime":336927.0,"Position":128.285}]},{"StartTime":337043.0,"Objects":[{"StartTime":337043.0,"Position":223.0}]},{"StartTime":337100.0,"Objects":[{"StartTime":337100.0,"Position":221.0}]},{"StartTime":337158.0,"Objects":[{"StartTime":337158.0,"Position":219.0}]},{"StartTime":337216.0,"Objects":[{"StartTime":337216.0,"Position":217.0}]},{"StartTime":337273.0,"Objects":[{"StartTime":337273.0,"Position":215.0}]},{"StartTime":337331.0,"Objects":[{"StartTime":337331.0,"Position":213.0}]},{"StartTime":337389.0,"Objects":[{"StartTime":337389.0,"Position":211.0}]},{"StartTime":337446.0,"Objects":[{"StartTime":337446.0,"Position":209.0}]},{"StartTime":337504.0,"Objects":[{"StartTime":337504.0,"Position":208.0}]},{"StartTime":337561.0,"Objects":[{"StartTime":337561.0,"Position":258.0}]},{"StartTime":337619.0,"Objects":[{"StartTime":337619.0,"Position":283.0}]},{"StartTime":337677.0,"Objects":[{"StartTime":337677.0,"Position":270.0}]},{"StartTime":337734.0,"Objects":[{"StartTime":337734.0,"Position":227.0}]},{"StartTime":337793.0,"Objects":[{"StartTime":337793.0,"Position":183.0}]},{"StartTime":337851.0,"Objects":[{"StartTime":337851.0,"Position":170.0}]},{"StartTime":337909.0,"Objects":[{"StartTime":337909.0,"Position":195.0}]},{"StartTime":337966.0,"Objects":[{"StartTime":337966.0,"Position":246.0},{"StartTime":338063.0,"Position":315.24115},{"StartTime":338196.0,"Position":430.9931}]},{"StartTime":338312.0,"Objects":[{"StartTime":338312.0,"Position":501.0}]},{"StartTime":338427.0,"Objects":[{"StartTime":338427.0,"Position":266.0},{"StartTime":338524.0,"Position":168.714218},{"StartTime":338657.0,"Position":81.00041}]},{"StartTime":338773.0,"Objects":[{"StartTime":338773.0,"Position":11.0}]},{"StartTime":338889.0,"Objects":[{"StartTime":338889.0,"Position":252.0},{"StartTime":339004.0,"Position":248.010468}]},{"StartTime":339120.0,"Objects":[{"StartTime":339120.0,"Position":425.0},{"StartTime":339235.0,"Position":428.425751}]},{"StartTime":339350.0,"Objects":[{"StartTime":339350.0,"Position":336.0}]},{"StartTime":339407.0,"Objects":[{"StartTime":339407.0,"Position":336.0}]},{"StartTime":339465.0,"Objects":[{"StartTime":339465.0,"Position":337.0}]},{"StartTime":339523.0,"Objects":[{"StartTime":339523.0,"Position":338.0}]},{"StartTime":339580.0,"Objects":[{"StartTime":339580.0,"Position":338.0}]},{"StartTime":339638.0,"Objects":[{"StartTime":339638.0,"Position":339.0}]},{"StartTime":339696.0,"Objects":[{"StartTime":339696.0,"Position":340.0}]},{"StartTime":339753.0,"Objects":[{"StartTime":339753.0,"Position":340.0}]},{"StartTime":339812.0,"Objects":[{"StartTime":339812.0,"Position":340.0},{"StartTime":339909.0,"Position":410.297577},{"StartTime":340042.0,"Position":486.874847}]},{"StartTime":340158.0,"Objects":[{"StartTime":340158.0,"Position":425.0}]},{"StartTime":340273.0,"Objects":[{"StartTime":340273.0,"Position":246.0},{"StartTime":340388.0,"Position":221.6169}]},{"StartTime":340504.0,"Objects":[{"StartTime":340504.0,"Position":56.0},{"StartTime":340619.0,"Position":80.38311}]},{"StartTime":340735.0,"Objects":[{"StartTime":340735.0,"Position":306.0},{"StartTime":340832.0,"Position":318.7602},{"StartTime":340965.0,"Position":321.624359}]},{"StartTime":341081.0,"Objects":[{"StartTime":341081.0,"Position":237.0}]},{"StartTime":341197.0,"Objects":[{"StartTime":341197.0,"Position":340.0},{"StartTime":341312.0,"Position":432.88443}]},{"StartTime":341427.0,"Objects":[{"StartTime":341427.0,"Position":246.0},{"StartTime":341542.0,"Position":153.1035}]},{"StartTime":341658.0,"Objects":[{"StartTime":341658.0,"Position":13.0},{"StartTime":341755.0,"Position":106.829514},{"StartTime":341888.0,"Position":186.088242}]},{"StartTime":342004.0,"Objects":[{"StartTime":342004.0,"Position":241.0}]},{"StartTime":342120.0,"Objects":[{"StartTime":342120.0,"Position":42.0},{"StartTime":342235.0,"Position":50.8947067}]},{"StartTime":342350.0,"Objects":[{"StartTime":342350.0,"Position":162.0},{"StartTime":342465.0,"Position":153.1053}]},{"StartTime":342581.0,"Objects":[{"StartTime":342581.0,"Position":153.0},{"StartTime":342678.0,"Position":244.94281},{"StartTime":342811.0,"Position":336.57074}]},{"StartTime":342927.0,"Objects":[{"StartTime":342927.0,"Position":417.0}]},{"StartTime":343043.0,"Objects":[{"StartTime":343043.0,"Position":306.0},{"StartTime":343140.0,"Position":332.971375},{"StartTime":343273.0,"Position":362.014862}]},{"StartTime":343389.0,"Objects":[{"StartTime":343389.0,"Position":489.0}]},{"StartTime":343447.0,"Objects":[{"StartTime":343447.0,"Position":489.0}]},{"StartTime":343504.0,"Objects":[{"StartTime":343504.0,"Position":489.0},{"StartTime":343601.0,"Position":492.676025},{"StartTime":343734.0,"Position":430.810028}]},{"StartTime":343850.0,"Objects":[{"StartTime":343850.0,"Position":248.0},{"StartTime":343947.0,"Position":231.065659},{"StartTime":344080.0,"Position":303.8333}]},{"StartTime":344197.0,"Objects":[{"StartTime":344197.0,"Position":508.0},{"StartTime":344312.0,"Position":416.056519}]},{"StartTime":344370.0,"Objects":[{"StartTime":344370.0,"Position":401.0}]},{"StartTime":344427.0,"Objects":[{"StartTime":344427.0,"Position":386.0},{"StartTime":344524.0,"Position":311.311249},{"StartTime":344657.0,"Position":199.418442}]},{"StartTime":344773.0,"Objects":[{"StartTime":344773.0,"Position":107.0}]},{"StartTime":344889.0,"Objects":[{"StartTime":344889.0,"Position":122.0},{"StartTime":345004.0,"Position":139.229675}]},{"StartTime":345120.0,"Objects":[{"StartTime":345120.0,"Position":13.0},{"StartTime":345235.0,"Position":28.3985329}]},{"StartTime":345350.0,"Objects":[{"StartTime":345350.0,"Position":200.0},{"StartTime":345465.0,"Position":292.961}]},{"StartTime":345581.0,"Objects":[{"StartTime":345581.0,"Position":396.0},{"StartTime":345696.0,"Position":303.147247}]},{"StartTime":345812.0,"Objects":[{"StartTime":345812.0,"Position":384.0},{"StartTime":345927.0,"Position":372.899719}]},{"StartTime":346043.0,"Objects":[{"StartTime":346043.0,"Position":212.0},{"StartTime":346158.0,"Position":222.0252}]},{"StartTime":346273.0,"Objects":[{"StartTime":346273.0,"Position":512.0},{"StartTime":346341.0,"Position":474.170441},{"StartTime":346446.0,"Position":372.54837}]},{"StartTime":346504.0,"Objects":[{"StartTime":346504.0,"Position":349.0},{"StartTime":346572.0,"Position":308.7748},{"StartTime":346677.0,"Position":251.56488}]},{"StartTime":346735.0,"Objects":[{"StartTime":346735.0,"Position":212.0},{"StartTime":346803.0,"Position":155.574371},{"StartTime":346908.0,"Position":86.40335}]},{"StartTime":346966.0,"Objects":[{"StartTime":346966.0,"Position":27.0},{"StartTime":347081.0,"Position":17.0992432}]},{"StartTime":347197.0,"Objects":[{"StartTime":347197.0,"Position":133.0},{"StartTime":347294.0,"Position":147.489075},{"StartTime":347427.0,"Position":122.304}]},{"StartTime":347543.0,"Objects":[{"StartTime":347543.0,"Position":251.0}]},{"StartTime":347658.0,"Objects":[{"StartTime":347658.0,"Position":311.0},{"StartTime":347773.0,"Position":321.293121}]},{"StartTime":347889.0,"Objects":[{"StartTime":347889.0,"Position":232.0},{"StartTime":348004.0,"Position":221.182831}]},{"StartTime":348120.0,"Objects":[{"StartTime":348120.0,"Position":466.0},{"StartTime":348235.0,"Position":372.7931}]},{"StartTime":348350.0,"Objects":[{"StartTime":348350.0,"Position":228.0},{"StartTime":348465.0,"Position":321.100616}]},{"StartTime":348581.0,"Objects":[{"StartTime":348581.0,"Position":489.0},{"StartTime":348696.0,"Position":395.7931}]},{"StartTime":348811.0,"Objects":[{"StartTime":348811.0,"Position":251.0},{"StartTime":348926.0,"Position":344.100616}]},{"StartTime":348985.0,"Objects":[{"StartTime":348985.0,"Position":360.0}]},{"StartTime":349043.0,"Objects":[{"StartTime":349043.0,"Position":375.0},{"StartTime":349140.0,"Position":443.792},{"StartTime":349273.0,"Position":414.0389}]},{"StartTime":349389.0,"Objects":[{"StartTime":349389.0,"Position":372.0}]},{"StartTime":349504.0,"Objects":[{"StartTime":349504.0,"Position":496.0},{"StartTime":349619.0,"Position":487.986572}]},{"StartTime":349735.0,"Objects":[{"StartTime":349735.0,"Position":328.0},{"StartTime":349850.0,"Position":320.071228}]},{"StartTime":349966.0,"Objects":[{"StartTime":349966.0,"Position":125.0},{"StartTime":350063.0,"Position":192.578873},{"StartTime":350196.0,"Position":284.148956}]},{"StartTime":350312.0,"Objects":[{"StartTime":350312.0,"Position":356.0}]},{"StartTime":350427.0,"Objects":[{"StartTime":350427.0,"Position":227.0},{"StartTime":350524.0,"Position":222.054825},{"StartTime":350657.0,"Position":225.454483}]},{"StartTime":350773.0,"Objects":[{"StartTime":350773.0,"Position":134.0}]},{"StartTime":350889.0,"Objects":[{"StartTime":350889.0,"Position":10.0},{"StartTime":350986.0,"Position":19.6490536},{"StartTime":351119.0,"Position":0.0}]},{"StartTime":351235.0,"Objects":[{"StartTime":351235.0,"Position":51.0}]},{"StartTime":351350.0,"Objects":[{"StartTime":351350.0,"Position":215.0},{"StartTime":351447.0,"Position":216.350952},{"StartTime":351580.0,"Position":225.063126}]},{"StartTime":351812.0,"Objects":[{"StartTime":351812.0,"Position":502.0},{"StartTime":351909.0,"Position":512.0},{"StartTime":352042.0,"Position":512.0}]},{"StartTime":352158.0,"Objects":[{"StartTime":352158.0,"Position":461.0}]},{"StartTime":352273.0,"Objects":[{"StartTime":352273.0,"Position":372.0},{"StartTime":352388.0,"Position":357.579346}]},{"StartTime":352504.0,"Objects":[{"StartTime":352504.0,"Position":440.0},{"StartTime":352619.0,"Position":371.599976}]},{"StartTime":352735.0,"Objects":[{"StartTime":352735.0,"Position":99.0},{"StartTime":352832.0,"Position":176.413208},{"StartTime":352965.0,"Position":284.928223}]},{"StartTime":353081.0,"Objects":[{"StartTime":353081.0,"Position":371.0}]},{"StartTime":353197.0,"Objects":[{"StartTime":353197.0,"Position":450.0},{"StartTime":353312.0,"Position":357.0359}]},{"StartTime":353427.0,"Objects":[{"StartTime":353427.0,"Position":191.0},{"StartTime":353542.0,"Position":283.9525}]},{"StartTime":353658.0,"Objects":[{"StartTime":353658.0,"Position":393.0},{"StartTime":353773.0,"Position":371.820251}]},{"StartTime":353889.0,"Objects":[{"StartTime":353889.0,"Position":489.0},{"StartTime":354004.0,"Position":509.3886}]},{"StartTime":354120.0,"Objects":[{"StartTime":354120.0,"Position":357.0},{"StartTime":354235.0,"Position":371.809753}]},{"StartTime":354350.0,"Objects":[{"StartTime":354350.0,"Position":498.0},{"StartTime":354465.0,"Position":511.787018}]},{"StartTime":354581.0,"Objects":[{"StartTime":354581.0,"Position":512.0},{"StartTime":354678.0,"Position":433.735443},{"StartTime":354811.0,"Position":332.387054}]},{"StartTime":354927.0,"Objects":[{"StartTime":354927.0,"Position":284.0}]},{"StartTime":355043.0,"Objects":[{"StartTime":355043.0,"Position":228.0},{"StartTime":355140.0,"Position":154.237228},{"StartTime":355273.0,"Position":41.2429352}]},{"StartTime":355389.0,"Objects":[{"StartTime":355389.0,"Position":5.0}]},{"StartTime":355504.0,"Objects":[{"StartTime":355504.0,"Position":199.0}]},{"StartTime":355620.0,"Objects":[{"StartTime":355620.0,"Position":110.0}]},{"StartTime":355735.0,"Objects":[{"StartTime":355735.0,"Position":208.0}]},{"StartTime":355851.0,"Objects":[{"StartTime":355851.0,"Position":124.0}]},{"StartTime":355966.0,"Objects":[{"StartTime":355966.0,"Position":211.0}]},{"StartTime":356082.0,"Objects":[{"StartTime":356082.0,"Position":139.0}]},{"StartTime":356197.0,"Objects":[{"StartTime":356197.0,"Position":210.0}]},{"StartTime":356313.0,"Objects":[{"StartTime":356313.0,"Position":153.0}]},{"StartTime":356427.0,"Objects":[{"StartTime":356427.0,"Position":90.0},{"StartTime":356524.0,"Position":164.553955},{"StartTime":356657.0,"Position":276.261963}]},{"StartTime":356773.0,"Objects":[{"StartTime":356773.0,"Position":329.0}]},{"StartTime":356889.0,"Objects":[{"StartTime":356889.0,"Position":450.0},{"StartTime":357004.0,"Position":356.8368}]},{"StartTime":357120.0,"Objects":[{"StartTime":357120.0,"Position":414.0},{"StartTime":357235.0,"Position":507.065216}]},{"StartTime":357350.0,"Objects":[{"StartTime":357350.0,"Position":304.0},{"StartTime":357447.0,"Position":257.5512},{"StartTime":357580.0,"Position":275.4751}]},{"StartTime":357697.0,"Objects":[{"StartTime":357697.0,"Position":329.0}]},{"StartTime":357812.0,"Objects":[{"StartTime":357812.0,"Position":110.0}]},{"StartTime":357927.0,"Objects":[{"StartTime":357927.0,"Position":147.0}]},{"StartTime":358043.0,"Objects":[{"StartTime":358043.0,"Position":93.0}]},{"StartTime":358158.0,"Objects":[{"StartTime":358158.0,"Position":130.0}]},{"StartTime":358273.0,"Objects":[{"StartTime":358273.0,"Position":304.0},{"StartTime":358370.0,"Position":233.446045},{"StartTime":358503.0,"Position":117.738037}]},{"StartTime":358620.0,"Objects":[{"StartTime":358620.0,"Position":30.0}]},{"StartTime":358735.0,"Objects":[{"StartTime":358735.0,"Position":0.0},{"StartTime":358850.0,"Position":93.1559753}]},{"StartTime":358966.0,"Objects":[{"StartTime":358966.0,"Position":218.0},{"StartTime":359081.0,"Position":124.925636}]},{"StartTime":359197.0,"Objects":[{"StartTime":359197.0,"Position":265.0},{"StartTime":359254.0,"Position":307.7012},{"StartTime":359312.0,"Position":353.917175},{"StartTime":359369.0,"Position":405.375458},{"StartTime":359427.0,"Position":449.595276},{"StartTime":359524.0,"Position":361.8959},{"StartTime":359658.0,"Position":265.0}]},{"StartTime":359773.0,"Objects":[{"StartTime":359773.0,"Position":202.0}]},{"StartTime":359889.0,"Objects":[{"StartTime":359889.0,"Position":280.0}]},{"StartTime":360004.0,"Objects":[{"StartTime":360004.0,"Position":218.0}]},{"StartTime":360120.0,"Objects":[{"StartTime":360120.0,"Position":407.0},{"StartTime":360217.0,"Position":394.568481},{"StartTime":360350.0,"Position":387.007721}]},{"StartTime":360466.0,"Objects":[{"StartTime":360466.0,"Position":449.0}]},{"StartTime":360581.0,"Objects":[{"StartTime":360581.0,"Position":304.0},{"StartTime":360696.0,"Position":334.297119}]},{"StartTime":360812.0,"Objects":[{"StartTime":360812.0,"Position":479.0},{"StartTime":360927.0,"Position":448.5207}]},{"StartTime":361043.0,"Objects":[{"StartTime":361043.0,"Position":280.0},{"StartTime":361158.0,"Position":274.4001}]},{"StartTime":361273.0,"Objects":[{"StartTime":361273.0,"Position":193.0},{"StartTime":361388.0,"Position":198.019638}]},{"StartTime":361504.0,"Objects":[{"StartTime":361504.0,"Position":36.0}]},{"StartTime":361620.0,"Objects":[{"StartTime":361620.0,"Position":74.0}]},{"StartTime":361735.0,"Objects":[{"StartTime":361735.0,"Position":8.0}]},{"StartTime":361851.0,"Objects":[{"StartTime":361851.0,"Position":46.0}]},{"StartTime":361966.0,"Objects":[{"StartTime":361966.0,"Position":193.0},{"StartTime":362063.0,"Position":253.493744},{"StartTime":362196.0,"Position":336.945068}]},{"StartTime":362312.0,"Objects":[{"StartTime":362312.0,"Position":280.0}]},{"StartTime":362427.0,"Objects":[{"StartTime":362427.0,"Position":136.0},{"StartTime":362542.0,"Position":136.619537}]},{"StartTime":362658.0,"Objects":[{"StartTime":362658.0,"Position":304.0},{"StartTime":362773.0,"Position":303.383759}]},{"StartTime":362831.0,"Objects":[{"StartTime":362831.0,"Position":291.0}]},{"StartTime":362889.0,"Objects":[{"StartTime":362889.0,"Position":278.0},{"StartTime":362986.0,"Position":361.856934},{"StartTime":363119.0,"Position":464.980377}]},{"StartTime":363235.0,"Objects":[{"StartTime":363235.0,"Position":202.0},{"StartTime":363332.0,"Position":115.143066},{"StartTime":363465.0,"Position":15.0196228}]},{"StartTime":363581.0,"Objects":[{"StartTime":363581.0,"Position":280.0},{"StartTime":363696.0,"Position":373.482361}]},{"StartTime":363812.0,"Objects":[{"StartTime":363812.0,"Position":202.0},{"StartTime":363869.0,"Position":204.681473},{"StartTime":363927.0,"Position":192.147888},{"StartTime":363984.0,"Position":195.312729},{"StartTime":364042.0,"Position":190.085159},{"StartTime":364139.0,"Position":207.269684},{"StartTime":364273.0,"Position":202.0}]},{"StartTime":364389.0,"Objects":[{"StartTime":364389.0,"Position":280.0}]},{"StartTime":364504.0,"Objects":[{"StartTime":364504.0,"Position":136.0},{"StartTime":364619.0,"Position":136.152527}]},{"StartTime":364735.0,"Objects":[{"StartTime":364735.0,"Position":278.0},{"StartTime":364850.0,"Position":276.9106}]},{"StartTime":364966.0,"Objects":[{"StartTime":364966.0,"Position":36.0},{"StartTime":365023.0,"Position":72.85411},{"StartTime":365081.0,"Position":80.545166},{"StartTime":365138.0,"Position":98.44209},{"StartTime":365196.0,"Position":115.732025},{"StartTime":365293.0,"Position":153.141129},{"StartTime":365427.0,"Position":191.452774}]},{"StartTime":365543.0,"Objects":[{"StartTime":365543.0,"Position":277.0}]},{"StartTime":365658.0,"Objects":[{"StartTime":365658.0,"Position":437.0},{"StartTime":365773.0,"Position":464.182739}]},{"StartTime":365889.0,"Objects":[{"StartTime":365889.0,"Position":307.0},{"StartTime":366004.0,"Position":279.817261}]},{"StartTime":366120.0,"Objects":[{"StartTime":366120.0,"Position":374.0}]},{"StartTime":366235.0,"Objects":[{"StartTime":366235.0,"Position":500.0},{"StartTime":366292.0,"Position":497.226868},{"StartTime":366350.0,"Position":512.0},{"StartTime":366465.0,"Position":500.0}]},{"StartTime":366581.0,"Objects":[{"StartTime":366581.0,"Position":374.0},{"StartTime":366696.0,"Position":386.0932}]},{"StartTime":366812.0,"Objects":[{"StartTime":366812.0,"Position":414.0},{"StartTime":366909.0,"Position":355.945374},{"StartTime":367042.0,"Position":267.744141}]},{"StartTime":367158.0,"Objects":[{"StartTime":367158.0,"Position":188.0}]},{"StartTime":367273.0,"Objects":[{"StartTime":367273.0,"Position":117.0},{"StartTime":367388.0,"Position":109.341568}]},{"StartTime":367504.0,"Objects":[{"StartTime":367504.0,"Position":15.0},{"StartTime":367561.0,"Position":67.37976},{"StartTime":367619.0,"Position":116.344025},{"StartTime":367676.0,"Position":143.455261},{"StartTime":367734.0,"Position":196.347961},{"StartTime":367831.0,"Position":272.7755},{"StartTime":367965.0,"Position":378.823}]},{"StartTime":368081.0,"Objects":[{"StartTime":368081.0,"Position":468.0}]},{"StartTime":368197.0,"Objects":[{"StartTime":368197.0,"Position":445.0},{"StartTime":368312.0,"Position":452.021454}]},{"StartTime":368427.0,"Objects":[{"StartTime":368427.0,"Position":356.0},{"StartTime":368524.0,"Position":410.356049},{"StartTime":368657.0,"Position":499.8424}]},{"StartTime":368773.0,"Objects":[{"StartTime":368773.0,"Position":284.0},{"StartTime":368870.0,"Position":222.1471},{"StartTime":369003.0,"Position":140.1095}]},{"StartTime":369120.0,"Objects":[{"StartTime":369120.0,"Position":99.0},{"StartTime":369235.0,"Position":192.2299}]},{"StartTime":369350.0,"Objects":[{"StartTime":369350.0,"Position":378.0},{"StartTime":369447.0,"Position":285.965363},{"StartTime":369580.0,"Position":197.235046}]},{"StartTime":369697.0,"Objects":[{"StartTime":369697.0,"Position":111.0}]},{"StartTime":369812.0,"Objects":[{"StartTime":369812.0,"Position":17.0},{"StartTime":369927.0,"Position":31.7866936}]},{"StartTime":370043.0,"Objects":[{"StartTime":370043.0,"Position":152.0},{"StartTime":370158.0,"Position":138.411133}]},{"StartTime":370273.0,"Objects":[{"StartTime":370273.0,"Position":5.0}]},{"StartTime":370389.0,"Objects":[{"StartTime":370389.0,"Position":58.0}]},{"StartTime":370504.0,"Objects":[{"StartTime":370504.0,"Position":130.0}]},{"StartTime":370620.0,"Objects":[{"StartTime":370620.0,"Position":183.0}]},{"StartTime":370677.0,"Objects":[{"StartTime":370677.0,"Position":187.0}]},{"StartTime":370735.0,"Objects":[{"StartTime":370735.0,"Position":191.0}]},{"StartTime":370793.0,"Objects":[{"StartTime":370793.0,"Position":196.0}]},{"StartTime":370850.0,"Objects":[{"StartTime":370850.0,"Position":200.0}]},{"StartTime":370908.0,"Objects":[{"StartTime":370908.0,"Position":205.0}]},{"StartTime":370966.0,"Objects":[{"StartTime":370966.0,"Position":209.0}]},{"StartTime":371081.0,"Objects":[{"StartTime":371081.0,"Position":111.0}]},{"StartTime":371197.0,"Objects":[{"StartTime":371197.0,"Position":197.0},{"StartTime":371294.0,"Position":257.681274},{"StartTime":371427.0,"Position":383.563843}]},{"StartTime":371658.0,"Objects":[{"StartTime":371658.0,"Position":315.0},{"StartTime":371755.0,"Position":239.318741},{"StartTime":371888.0,"Position":128.436172}]},{"StartTime":372120.0,"Objects":[{"StartTime":372120.0,"Position":457.0},{"StartTime":372217.0,"Position":459.501343},{"StartTime":372350.0,"Position":443.9619}]},{"StartTime":372581.0,"Objects":[{"StartTime":372581.0,"Position":55.0},{"StartTime":372696.0,"Position":61.0197449}]},{"StartTime":372812.0,"Objects":[{"StartTime":372812.0,"Position":68.0}]},{"StartTime":372927.0,"Objects":[{"StartTime":372927.0,"Position":152.0}]},{"StartTime":373043.0,"Objects":[{"StartTime":373043.0,"Position":186.0},{"StartTime":373140.0,"Position":125.318741},{"StartTime":373273.0,"Position":0.0}]},{"StartTime":373504.0,"Objects":[{"StartTime":373504.0,"Position":326.0},{"StartTime":373601.0,"Position":418.681274},{"StartTime":373734.0,"Position":512.0}]},{"StartTime":373850.0,"Objects":[{"StartTime":373850.0,"Position":491.0}]},{"StartTime":373966.0,"Objects":[{"StartTime":373966.0,"Position":468.0},{"StartTime":374063.0,"Position":380.326721},{"StartTime":374196.0,"Position":281.455078}]},{"StartTime":374427.0,"Objects":[{"StartTime":374427.0,"Position":203.0},{"StartTime":374542.0,"Position":296.309082}]},{"StartTime":374658.0,"Objects":[{"StartTime":374658.0,"Position":389.0}]},{"StartTime":374773.0,"Objects":[{"StartTime":374773.0,"Position":329.0}]},{"StartTime":374830.0,"Objects":[{"StartTime":374830.0,"Position":327.0}]},{"StartTime":374889.0,"Objects":[{"StartTime":374889.0,"Position":326.0},{"StartTime":374986.0,"Position":404.681274},{"StartTime":375119.0,"Position":512.0}]},{"StartTime":375350.0,"Objects":[{"StartTime":375350.0,"Position":227.0}]},{"StartTime":375466.0,"Objects":[{"StartTime":375466.0,"Position":138.0}]},{"StartTime":375581.0,"Objects":[{"StartTime":375581.0,"Position":138.0}]},{"StartTime":375697.0,"Objects":[{"StartTime":375697.0,"Position":227.0}]},{"StartTime":375812.0,"Objects":[{"StartTime":375812.0,"Position":282.0},{"StartTime":375909.0,"Position":356.673279},{"StartTime":376042.0,"Position":468.544922}]},{"StartTime":376273.0,"Objects":[{"StartTime":376273.0,"Position":230.0},{"StartTime":376370.0,"Position":131.3267},{"StartTime":376503.0,"Position":43.45508}]},{"StartTime":376620.0,"Objects":[{"StartTime":376620.0,"Position":11.0}]},{"StartTime":376735.0,"Objects":[{"StartTime":376735.0,"Position":303.0},{"StartTime":376832.0,"Position":321.498657},{"StartTime":376965.0,"Position":316.0381}]},{"StartTime":377197.0,"Objects":[{"StartTime":377197.0,"Position":43.0}]},{"StartTime":377313.0,"Objects":[{"StartTime":377313.0,"Position":72.0}]},{"StartTime":377428.0,"Objects":[{"StartTime":377428.0,"Position":166.0}]},{"StartTime":377544.0,"Objects":[{"StartTime":377544.0,"Position":195.0}]},{"StartTime":377658.0,"Objects":[{"StartTime":377658.0,"Position":119.0},{"StartTime":377755.0,"Position":114.498672},{"StartTime":377888.0,"Position":132.038086}]},{"StartTime":378120.0,"Objects":[{"StartTime":378120.0,"Position":439.0},{"StartTime":378217.0,"Position":433.501343},{"StartTime":378350.0,"Position":425.9619}]},{"StartTime":378581.0,"Objects":[{"StartTime":378581.0,"Position":348.0},{"StartTime":378638.0,"Position":359.499878},{"StartTime":378696.0,"Position":396.119171},{"StartTime":378753.0,"Position":363.5212},{"StartTime":378811.0,"Position":334.379517},{"StartTime":378868.0,"Position":293.353027},{"StartTime":378926.0,"Position":224.793365},{"StartTime":378984.0,"Position":178.386932},{"StartTime":379042.0,"Position":152.0749},{"StartTime":379139.0,"Position":103.5945},{"StartTime":379273.0,"Position":132.2942}]},{"StartTime":379504.0,"Objects":[{"StartTime":379504.0,"Position":444.0},{"StartTime":379601.0,"Position":509.967316},{"StartTime":379734.0,"Position":473.311646}]},{"StartTime":379850.0,"Objects":[{"StartTime":379850.0,"Position":348.0},{"StartTime":379947.0,"Position":288.032684},{"StartTime":380080.0,"Position":318.688354}]},{"StartTime":380197.0,"Objects":[{"StartTime":380197.0,"Position":408.0},{"StartTime":380312.0,"Position":418.982574}]},{"StartTime":380427.0,"Objects":[{"StartTime":380427.0,"Position":396.0}]},{"StartTime":380543.0,"Objects":[{"StartTime":380543.0,"Position":396.0},{"StartTime":380640.0,"Position":327.917877},{"StartTime":380773.0,"Position":255.399872}]},{"StartTime":380889.0,"Objects":[{"StartTime":380889.0,"Position":324.0},{"StartTime":381004.0,"Position":416.852753}]},{"StartTime":381120.0,"Objects":[{"StartTime":381120.0,"Position":255.0},{"StartTime":381235.0,"Position":162.147247}]},{"StartTime":381350.0,"Objects":[{"StartTime":381350.0,"Position":32.0}]},{"StartTime":381466.0,"Objects":[{"StartTime":381466.0,"Position":32.0},{"StartTime":381563.0,"Position":101.082138},{"StartTime":381696.0,"Position":172.600113}]},{"StartTime":381812.0,"Objects":[{"StartTime":381812.0,"Position":104.0},{"StartTime":381927.0,"Position":11.1472549}]},{"StartTime":382043.0,"Objects":[{"StartTime":382043.0,"Position":173.0},{"StartTime":382158.0,"Position":265.852753}]},{"StartTime":382273.0,"Objects":[{"StartTime":382273.0,"Position":490.0},{"StartTime":382330.0,"Position":444.2234},{"StartTime":382388.0,"Position":490.0},{"StartTime":382446.0,"Position":444.2234}]},{"StartTime":382504.0,"Objects":[{"StartTime":382504.0,"Position":427.0},{"StartTime":382561.0,"Position":381.2234},{"StartTime":382619.0,"Position":427.0},{"StartTime":382677.0,"Position":381.2234}]},{"StartTime":382735.0,"Objects":[{"StartTime":382735.0,"Position":349.0}]},{"StartTime":382792.0,"Objects":[{"StartTime":382792.0,"Position":364.0}]},{"StartTime":382850.0,"Objects":[{"StartTime":382850.0,"Position":365.0}]},{"StartTime":382908.0,"Objects":[{"StartTime":382908.0,"Position":351.0}]},{"StartTime":382966.0,"Objects":[{"StartTime":382966.0,"Position":325.0}]},{"StartTime":383023.0,"Objects":[{"StartTime":383023.0,"Position":293.0}]},{"StartTime":383080.0,"Objects":[{"StartTime":383080.0,"Position":267.0}]},{"StartTime":383138.0,"Objects":[{"StartTime":383138.0,"Position":253.0}]},{"StartTime":383197.0,"Objects":[{"StartTime":383197.0,"Position":254.0}]},{"StartTime":383254.0,"Objects":[{"StartTime":383254.0,"Position":290.0}]},{"StartTime":383312.0,"Objects":[{"StartTime":383312.0,"Position":303.0}]},{"StartTime":383370.0,"Objects":[{"StartTime":383370.0,"Position":288.0}]},{"StartTime":383427.0,"Objects":[{"StartTime":383427.0,"Position":250.0}]},{"StartTime":383484.0,"Objects":[{"StartTime":383484.0,"Position":204.0}]},{"StartTime":383542.0,"Objects":[{"StartTime":383542.0,"Position":171.0}]},{"StartTime":383600.0,"Objects":[{"StartTime":383600.0,"Position":163.0}]},{"StartTime":383657.0,"Objects":[{"StartTime":383657.0,"Position":182.0}]},{"StartTime":383715.0,"Objects":[{"StartTime":383715.0,"Position":184.0}]},{"StartTime":383773.0,"Objects":[{"StartTime":383773.0,"Position":144.0}]},{"StartTime":383831.0,"Objects":[{"StartTime":383831.0,"Position":82.0}]},{"StartTime":383889.0,"Objects":[{"StartTime":383889.0,"Position":35.0}]},{"StartTime":383947.0,"Objects":[{"StartTime":383947.0,"Position":30.0}]},{"StartTime":384004.0,"Objects":[{"StartTime":384004.0,"Position":58.0}]},{"StartTime":384062.0,"Objects":[{"StartTime":384062.0,"Position":57.0}]},{"StartTime":384120.0,"Objects":[{"StartTime":384120.0,"Position":18.0}]}]} \ No newline at end of file diff --git a/osu.Game.Rulesets.Catch/Resources/Testing/Beatmaps/875945.osu b/osu.Game.Rulesets.Catch/Resources/Testing/Beatmaps/875945.osu new file mode 100644 index 0000000000..a24fcea30a --- /dev/null +++ b/osu.Game.Rulesets.Catch/Resources/Testing/Beatmaps/875945.osu @@ -0,0 +1,1824 @@ +osu file format v14 + +[General] +AudioFilename: imagematerial.mp3 +AudioLeadIn: 0 +PreviewTime: 165589 +Countdown: 0 +SampleSet: Soft +StackLeniency: 0.7 +Mode: 0 +LetterboxInBreaks: 0 +EpilepsyWarning: 1 +WidescreenStoryboard: 1 + +[Editor] +Bookmarks: 56435,71204,88743,103512,120127,134897,149666,181051,197666,310280,356434,371204,384127 +DistanceSpacing: 0.3 +BeatDivisor: 4 +GridSize: 4 +TimelineZoom: 5.700003 + +[Metadata] +Title:IMAGE -MATERIAL- +TitleUnicode:IMAGE -MATERIAL- +Artist:Tatsh +ArtistUnicode:Tatsh +Creator:Enon +Version:Revolution +Source: +Tags:(新曲) (Shinkyoku) REFLEC BEAT limelight 福山沙織 fukuyama saori Dailycare +BeatmapID:875945 +BeatmapSetID:402837 + +[Difficulty] +HPDrainRate:6 +CircleSize:4.2 +OverallDifficulty:9 +ApproachRate:9.8 +SliderMultiplier:1.87 +SliderTickRate:1 + +[Events] +//Background and Video events +0,0,"BG.jpg",0,0 +//Break Periods +2,49251,55956 +//Storyboard Layer 0 (Background) +//Storyboard Layer 1 (Fail) +//Storyboard Layer 2 (Pass) +//Storyboard Layer 3 (Foreground) +//Storyboard Sound Samples + +[TimingPoints] +6590,461.538461538462,4,2,2,15,1,0 +6590,-200,4,2,2,15,0,0 +8320,-200,4,2,2,5,0,0 +8436,-200,4,2,2,15,0,0 +10166,-200,4,2,2,5,0,0 +10282,-200,4,2,2,15,0,0 +12013,-200,4,2,2,5,0,0 +12128,-200,4,2,2,15,0,0 +13859,-200,4,2,2,5,0,0 +13974,-200,4,2,2,15,0,0 +15705,-200,4,2,2,5,0,0 +15820,-200,4,2,2,15,0,0 +17551,-200,4,2,2,5,0,0 +17666,-200,4,2,2,15,0,0 +49051,230.769230769231,4,2,1,15,1,0 +56435,-100,4,2,1,60,0,0 +62666,-200,4,2,1,60,0,0 +63820,-100,4,2,1,60,0,0 +69358,-100,4,2,1,55,0,0 +69589,-100,4,2,1,50,0,0 +69820,-100,4,2,1,45,0,0 +70051,-100,4,2,1,40,0,0 +70281,-100,4,2,1,30,0,0 +70512,-100,4,2,1,40,0,0 +70743,-100,4,2,1,50,0,0 +70974,-100,4,2,1,60,0,0 +71204,-100,4,2,1,70,0,0 +74839,-100,4,2,1,5,0,0 +74897,-100,4,2,1,70,0,0 +78301,-100,4,2,1,5,0,0 +78358,-100,4,2,1,70,0,0 +78531,-100,4,2,1,5,0,0 +78589,-100,4,2,1,70,0,0 +82224,-100,4,2,1,5,0,0 +82281,-100,4,2,1,70,0,0 +85685,-100,4,2,1,5,0,0 +85743,-100,4,2,1,70,0,0 +88743,-100,4,2,1,85,0,1 +90070,-100,4,2,1,5,0,1 +90127,-100,4,2,1,85,0,1 +93762,-100,4,2,1,5,0,1 +93820,-100,4,2,1,85,0,1 +95377,-100,4,2,1,5,0,1 +95435,-100,4,2,1,85,0,1 +103512,-100,4,2,1,60,0,0 +106916,-100,4,2,1,5,0,0 +106974,-100,4,2,1,60,0,0 +110608,-100,4,2,1,5,0,0 +110666,-100,4,2,1,60,0,0 +114301,-100,4,2,1,5,0,0 +114358,-100,4,2,1,60,0,0 +114820,-100,4,2,3,60,0,0 +114834,-100,4,2,1,60,0,0 +116666,-100,4,2,3,60,0,0 +116680,-100,4,2,1,60,0,0 +117358,-100,4,2,1,55,0,0 +117589,-100,4,2,1,50,0,0 +117820,-100,4,2,1,45,0,0 +118051,-100,4,2,1,40,0,0 +118281,-100,4,2,1,30,0,0 +118743,-100,4,2,1,40,0,0 +119204,-100,4,2,1,50,0,0 +119666,-100,4,2,1,60,0,0 +120127,-100,4,2,1,70,0,0 +126762,-100,4,2,1,5,0,0 +126820,-100,4,2,1,70,0,0 +143377,-100,4,2,1,5,0,0 +143435,-111.111111111111,4,2,1,70,0,0 +143608,-111.111111111111,4,2,1,5,0,0 +143666,-125,4,2,1,70,0,0 +143839,-125,4,2,1,5,0,0 +143897,-142.857142857143,4,2,1,70,0,0 +144070,-142.857142857143,4,2,1,5,0,0 +144127,-100,4,2,1,70,0,0 +149666,-200,4,2,1,40,0,0 +160743,-100,4,2,1,55,0,0 +166281,-100,4,2,1,85,0,1 +167608,-100,4,2,1,5,0,1 +167666,-100,4,2,1,85,0,1 +171301,-100,4,2,1,5,0,1 +171358,-100,4,2,1,85,0,1 +172916,-100,4,2,1,5,0,1 +172974,-100,4,2,1,85,0,1 +181051,-100,4,2,1,60,0,0 +182377,-100,4,2,1,5,0,0 +182435,-100,4,2,1,60,0,0 +192358,-100,4,2,3,60,0,0 +192373,-100,4,2,1,60,0,0 +194204,-100,4,2,3,60,0,0 +194219,-100,4,2,1,60,0,0 +194897,-100,4,2,1,55,0,0 +195127,-100,4,2,1,50,0,0 +195358,-100,4,2,1,45,0,0 +195589,-100,4,2,1,40,0,0 +195820,-100,4,2,1,30,0,0 +196281,-100,4,2,1,40,0,0 +196743,-100,4,2,1,50,0,0 +197204,-100,4,2,1,60,0,0 +197666,-100,4,2,1,85,0,1 +219070,-100,4,2,1,5,0,1 +219127,-142.857142857143,4,2,1,85,0,1 +219301,-142.857142857143,4,2,1,5,0,1 +219358,-111.111111111111,4,2,1,85,0,1 +219531,-111.111111111111,4,2,1,5,0,1 +219589,-166.666666666667,4,2,1,85,0,1 +219762,-166.666666666667,4,2,1,5,0,1 +219820,-100,4,2,1,85,0,1 +227204,461.538461538462,4,2,2,25,1,0 +227204,-200,4,2,2,25,0,0 +251550,697.674418604651,4,2,2,25,1,0 +251550,-133.333333333333,4,2,2,25,0,0 +252702,714.285714285714,4,2,2,20,1,0 +252702,-133.333333333333,4,2,2,20,0,0 +253506,800,4,2,2,18,1,0 +254095,1132.07547169811,4,2,2,15,1,0 +254095,-133.333333333333,4,2,2,15,0,0 +255580,1200,4,2,2,10,1,0 +256480,1267.10000000001,4,2,2,8,1,0 +256480,-133.333333333333,4,2,2,8,0,0 +258892,2131.45714285714,4,2,2,6,1,0 +258892,-133.333333333333,4,2,2,6,0,0 +263197,230.769230769231,4,2,1,65,1,0 +277966,-100,4,2,1,70,0,0 +285062,-100,4,2,1,5,0,0 +285120,-100,4,2,1,70,0,0 +285293,-100,4,2,1,5,0,0 +285350,-100,4,2,1,70,0,0 +292447,-100,4,2,1,5,0,0 +292504,-100,4,2,1,70,0,0 +295504,-100,4,2,1,85,0,1 +296831,-100,4,2,1,5,0,1 +296889,-100,4,2,1,85,0,1 +300523,-100,4,2,1,5,0,1 +300581,-100,4,2,1,85,0,1 +308889,-100,4,2,1,85,0,0 +310273,-100,4,2,1,85,0,1 +315062,-100,4,2,1,5,0,1 +315120,-100,4,2,1,85,0,1 +329831,-100,4,2,1,5,0,1 +329889,-100,4,2,1,85,0,1 +330754,-100,4,2,1,5,0,1 +330812,-100,4,2,1,85,0,1 +331677,-100,4,2,1,5,0,1 +331735,-100,4,2,1,85,0,1 +333523,-100,4,2,1,5,0,1 +333581,-100,4,2,1,85,0,1 +336293,-100,4,2,1,5,0,1 +336350,-100,4,2,1,85,0,1 +346447,-100,4,2,1,5,0,1 +346504,-142.857142857143,4,2,1,85,0,1 +346677,-142.857142857143,4,2,1,5,0,1 +346735,-111.111111111111,4,2,1,85,0,1 +346908,-111.111111111111,4,2,1,5,0,1 +346966,-166.666666666667,4,2,1,85,0,1 +347197,-100,4,2,1,85,0,1 +356427,-100,4,2,1,60,0,0 + + +[Colours] +Combo1 : 235,221,186 +Combo2 : 165,202,233 +Combo3 : 114,145,218 +Combo4 : 58,148,190 + +[HitObjects] +88,104,6590,6,0,B|176:156|256:108|256:108|336:60|423:112,1,350.625,6|0,0:0|0:0,0:0:0:0: +396,213,8436,2,0,P|277:247|376:172,1,350.625,6|0,0:0|0:0,0:0:0:0: +472,220,10282,2,0,P|456:288|220:300,1,350.625,6|0,0:0|0:0,0:0:0:0: +277,200,12128,2,0,P|398:225|276:244,1,350.625,6|0,0:0|0:0,0:0:0:0: +224,141,13974,6,0,P|379:90|473:224,1,350.625,6|0,0:0|0:0,0:0:0:0: +496,301,15820,2,0,B|304:277|329:378|139:354,1,350.625,6|0,0:0|0:0,0:0:0:0: +76,352,17666,2,0,B|128:271|43:128|43:128|96:217|173:187,1,374,6|2,0:0|0:0,0:0:0:0: +256,192,19628,12,0,21128,0:0:0:0: +213,117,21359,6,0,L|119:122,1,93.5,6|0,0:0|0:0,0:0:0:0: +300,161,22282,2,0,L|393:155,1,93.5,2|0,0:0|0:0,0:0:0:0: +233,38,23205,2,0,L|139:43,1,93.5,6|0,0:0|0:0,0:0:0:0: +280,240,24128,2,0,L|373:234,1,93.5,2|0,0:0|0:0,0:0:0:0: +509,22,25051,6,0,B|342:1|390:161|198:113,1,327.25,6|0,0:0|0:0,0:0:0:0: +139,43,26897,2,0,P|181:132|110:300,1,280.5,2|0,0:0|0:0,0:0:0:0: +46,366,28743,6,0,L|139:371,1,93.5,6|0,0:0|0:0,0:0:0:0: +280,175,29666,2,0,L|186:169,1,93.5,2|0,0:0|0:0,0:0:0:0: +26,287,30589,2,0,L|119:292,1,93.5,6|0,0:0|0:0,0:0:0:0: +300,254,31513,2,0,L|206:248,1,93.5,2|0,0:0|0:0,0:0:0:0: +0,57,32436,6,0,B|189:33|134:214|352:176,1,374,6|2,0:0|0:0,0:0:0:0: +334,178,35205,2,0,L|315:351,1,163.625,2|0,0:0|0:0,0:0:0:0: +396,313,36128,6,0,P|430:308|456:284,1,70.125,6|0,0:0|0:0,0:0:0:0: +508,233,36590,6,0,B|205:287|288:12|1:48,1,561,2|0,0:0|0:0,0:0:0:0: +10,47,39820,6,0,L|120:37,1,93.5,6|0,0:0|0:0,0:0:0:0: +233,130,40743,2,0,L|123:140,1,93.5,2|0,0:0|0:0,0:0:0:0: +268,229,41666,2,0,L|473:210,1,187,2|2,0:0|0:0,0:0:0:0: +271,366,43051,2,0,P|254:329|255:303,1,46.75 +268,229,43513,5,6,0:0:0:0: +256,192,43628,12,0,49051,0:0:0:0: +45,136,56435,6,0,B|140:151|119:74|222:88,1,187,6|8,0:0|0:0,0:0:0:0: +214,252,56781,1,0,0:0:0:0: +214,252,56897,2,0,P|209:223|187:144,1,93.5,2|0,0:0|0:0,0:0:0:0: +336,48,57127,2,0,P|323:93|314:138,1,93.5,8|0,0:0|0:0,0:0:0:0: +319,308,57358,6,0,P|379:321|411:306,1,93.5,2|0,0:0|0:0,0:0:0:0: +214,252,57589,2,0,P|154:239|122:254,1,93.5,8|0,0:0|0:0,0:0:0:0: +58,340,57820,1,2,0:0:0:0: +165,370,57935,1,0,0:0:0:0: +263,315,58051,1,8,0:0:0:0: +370,345,58166,1,8,0:0:0:0: +370,345,58224,1,0,0:0:0:0: +370,345,58281,6,0,P|361:263|435:186,1,187,2|8,0:0|0:0,0:0:0:0: +507,110,58627,1,0,0:0:0:0: +507,110,58685,1,0,0:0:0:0: +507,110,58743,2,0,L|491:3,1,93.5,2|0,0:0|0:0,0:0:0:0: +412,96,58974,2,0,L|428:203,1,93.5,8|2,0:0|0:0,0:0:0:0: +370,344,59204,6,0,P|331:353|275:333,1,93.5,2|0,0:0|0:0,0:0:0:0: +273,211,59435,2,0,P|293:253|331:280,1,93.5,8|0,0:0|0:0,0:0:0:0: +349,206,59666,2,0,P|341:160|357:117,1,93.5,2|0,0:0|0:0,0:0:0:0: +482,107,59897,2,0,P|440:127|414:165,1,93.5,8|0,0:0|0:0,0:0:0:0: +144,273,60127,6,0,L|331:280,1,187,2|8,0:0|0:0,0:0:0:0: +349,206,60474,2,0,L|162:199,1,187,0|2,0:0|0:0,0:0:0:0: +85,115,60820,2,0,L|179:119,1,93.5,8|2,0:0|0:0,0:0:0:0: +126,347,61051,6,0,P|88:326|66:277,1,93.5,2|0,0:0|0:0,0:0:0:0: +162,199,61281,2,0,P|200:220|222:269,1,93.5,8|0,0:0|0:0,0:0:0:0: +203,375,61512,2,0,L|306:368,1,93.5,2|2,0:0|0:0,0:0:0:0: +443,285,61743,2,0,L|349:291,1,93.5,8|0,0:0|0:0,0:0:0:0: +329,279,61916,1,0,0:0:0:0: +309,266,61974,6,0,L|289:66,1,187,2|8,0:0|0:0,0:0:0:0: +203,118,62320,2,0,L|223:318,1,187,0|2,0:0|0:0,0:0:0:0: +133,342,62666,2,0,B|132:316|132:316|128:316|128:316|130:295|130:295|126:296|126:296|129:275|129:275|125:275|125:275|127:254|127:254|123:255|123:255|125:234|125:234|121:234|121:234|123:213|123:213|119:214|119:214|121:193|121:193|118:193|118:193|118:172,1,187,8|8,0:0|0:0,0:0:0:0: +285,26,63358,5,2,0:0:0:0: +352,117,63474,1,8,0:0:0:0: +265,189,63589,1,10,0:0:0:0: +332,280,63705,1,8,0:0:0:0: +474,81,63820,5,2,0:0:0:0: +456,83,63877,1,2,0:0:0:0: +437,85,63935,1,2,0:0:0:0: +419,88,63993,1,2,0:0:0:0: +400,90,64051,2,0,L|288:73,1,93.5,8|0,0:0|0:0,0:0:0:0: +217,50,64281,5,2,0:0:0:0: +219,68,64338,1,2,0:0:0:0: +221,87,64396,1,2,0:0:0:0: +224,105,64454,1,2,0:0:0:0: +226,124,64512,2,0,L|209:236,1,93.5,8|0,0:0|0:0,0:0:0:0: +186,307,64743,5,2,0:0:0:0: +204,305,64800,1,2,0:0:0:0: +223,303,64858,1,2,0:0:0:0: +241,300,64916,1,2,0:0:0:0: +260,298,64974,2,0,L|372:315,1,93.5,8|0,0:0|0:0,0:0:0:0: +443,338,65205,5,2,0:0:0:0: +441,320,65262,1,2,0:0:0:0: +439,301,65320,1,2,0:0:0:0: +436,283,65378,1,2,0:0:0:0: +434,264,65436,2,0,L|451:152,1,93.5,8|0,0:0|0:0,0:0:0:0: +474,81,65666,5,2,0:0:0:0: +456,83,65723,1,2,0:0:0:0: +437,85,65781,1,2,0:0:0:0: +419,88,65839,1,2,0:0:0:0: +400,90,65897,2,0,L|288:73,1,93.5,8|0,0:0|0:0,0:0:0:0: +226,124,66127,5,2,0:0:0:0: +208,126,66184,1,2,0:0:0:0: +189,128,66242,1,2,0:0:0:0: +171,131,66300,1,2,0:0:0:0: +152,133,66358,2,0,L|40:116,1,93.5,8|0,0:0|0:0,0:0:0:0: +14,291,66589,6,0,P|0:241|8:176,1,93.5,2|2,0:0|0:0,0:0:0:0: +136,292,66820,2,0,P|150:342|142:407,1,93.5,8|2,0:0|0:0,0:0:0:0: +80,232,67051,2,0,P|154:263|265:207,1,187,2|8,0:0|0:0,0:0:0:0: +315,159,67397,1,0,0:0:0:0: +491,182,67512,6,0,B|480:253|480:253|484:286|484:286|472:373,1,187,6|8,0:1|0:0,0:0:0:0: +410,124,67858,2,0,B|399:195|399:195|403:228|403:228|391:315,1,187,2|8,0:1|0:0,0:0:0:0: +329,66,68204,2,0,L|313:166,1,93.5,10|0,1:2|0:0,0:0:0:0: +181,294,68435,6,0,P|226:315|288:293,1,93.5,2|2,0:0|0:0,0:0:0:0: +440,252,68666,2,0,P|395:231|333:253,1,93.5,8|2,0:0|0:0,0:0:0:0: +128,371,68897,5,10,0:0:0:0: +181,294,69012,1,8,0:0:0:0: +117,225,69127,1,10,0:0:0:0: +170,148,69242,1,8,0:0:0:0: +52,88,69358,6,0,L|43:181,1,93.5,2|2,0:0|0:0,0:0:0:0: +181,294,69589,2,0,L|191:202,1,93.5,8|2,0:0|0:0,0:0:0:0: +39,101,69820,6,0,L|30:193,1,93.5,2|2,0:0|0:0,0:0:0:0: +168,307,70051,2,0,L|177:214,1,93.5,8|2,0:0|0:0,0:0:0:0: +198,30,70281,5,8,0:0:0:0: +220,46,70339,1,0,0:0:0:0: +244,58,70397,1,8,0:0:0:0: +269,65,70455,1,0,0:0:0:0: +296,68,70512,1,2,0:0:0:0: +322,66,70570,1,2,0:0:0:0: +348,60,70627,1,2,0:0:0:0: +373,49,70685,1,2,0:0:0:0: +396,36,70742,5,10,0:0:0:0: +441,30,70800,1,2,0:0:0:0: +483,49,70858,1,10,0:0:0:0: +510,87,70916,1,2,0:0:0:0: +512,133,70974,1,10,0:0:0:0: +492,175,71031,1,2,0:0:0:0: +453,199,71089,1,10,0:0:0:0: +407,200,71146,1,2,0:0:0:0: +364,184,71204,6,0,P|321:209|338:359,1,187,6|8,0:0|0:0,0:0:0:0: +419,372,71551,2,0,P|462:347|445:197,1,187,2|2,0:0|0:0,0:0:0:0: +332,104,71897,2,0,L|441:100,1,93.5,8|0,0:0|0:0,0:0:0:0: +248,179,72127,5,2,0:0:0:0: +248,179,72243,2,0,L|54:186,1,187,2|2,0:0|0:0,0:0:0:0: +144,259,72589,2,0,L|240:255,1,93.5,2|0,0:0|0:0,0:0:0:0: +164,104,72820,2,0,L|68:108,1,93.5,8|0,0:0|0:0,0:0:0:0: +111,338,73051,6,0,P|200:325|223:228,1,187,2|8,0:0|0:0,0:0:0:0: +192,136,73397,2,0,L|-1:143,1,187,2|2,0:0|0:0,0:0:0:0: +78,57,73743,2,0,L|174:53,1,93.5,8|0,0:0|0:0,0:0:0:0: +365,83,73974,5,2,0:0:0:0: +365,83,74089,2,0,B|294:83|288:84|255:135|251:135|191:135,1,187,2|2,0:0|0:0,0:0:0:0: +45,195,74435,2,0,P|87:216|103:264,1,93.5,2|0,0:0|0:0,0:0:0:0: +16,332,74666,2,0,B|63:323|63:323|109:331|109:331|160:322,1,140.25,8|0,0:0|0:0,0:0:0:0: +240,352,74897,6,0,P|224:290|298:187,1,187,2|8,0:0|0:0,0:0:0:0: +395,224,75243,2,0,P|411:286|337:389,1,187,2|2,0:0|0:0,0:0:0:0: +249,166,75589,2,0,L|239:73,1,93.5,8|0,0:0|0:0,0:0:0:0: +198,230,75820,5,2,0:0:0:0: +198,230,75935,2,0,B|249:267|296:244|318:210|318:210|294:242|318:278,1,187,2|2,0:0|0:0,0:0:0:0: +340,364,76281,2,0,L|433:357,1,93.5,2|0,0:0|0:0,0:0:0:0: +236,324,76512,2,0,L|120:332,1,93.5,8|0,0:0|0:0,0:0:0:0: +13,228,76743,6,0,B|96:223|96:223|131:234|131:234|198:229,1,187,2|8,0:0|0:0,0:0:0:0: +324,152,77089,2,0,B|257:157|257:157|222:146|222:146|139:151,1,187,2|2,0:0|0:0,0:0:0:0: +294,235,77435,2,0,L|388:228,1,93.5,8|0,0:0|0:0,0:0:0:0: +452,108,77666,5,2,0:0:0:0: +452,108,77781,1,8,0:0:0:0: +492,272,77897,1,10,0:0:0:0: +492,272,78012,1,8,0:0:0:0: +376,88,78127,2,0,P|404:44|488:40,1,140.25,8|0,0:0|0:0,0:0:0:0: +452,108,78358,2,0,L|301:120,1,140.25,2|0,0:0|0:0,0:0:0:0: +216,60,78589,6,0,P|232:132|144:216,1,187,6|8,0:0|0:0,0:0:0:0: +56,176,78935,2,0,P|40:104|128:20,1,187,2|2,0:0|0:0,0:0:0:0: +216,60,79281,2,0,L|223:153,1,93.5,8|0,0:0|0:0,0:0:0:0: +333,284,79512,5,2,0:0:0:0: +333,284,79627,2,0,L|317:82,1,187,2|2,0:0|0:0,0:0:0:0: +157,170,79974,2,0,P|175:203|256:211,1,93.5,2|0,0:0|0:0,0:0:0:0: +400,264,80204,2,0,P|382:231|301:223,1,93.5,8|0,0:0|0:0,0:0:0:0: +255,374,80435,6,0,L|447:359,1,187,2|8,0:0|0:0,0:0:0:0: +512,272,80781,2,0,L|320:287,1,187,2|2,0:0|0:0,0:0:0:0: +244,210,81127,2,0,L|337:203,1,93.5,8|0,0:0|0:0,0:0:0:0: +464,92,81358,5,2,0:0:0:0: +464,92,81474,2,0,P|484:152|420:272,1,187,2|2,0:0|0:0,0:0:0:0: +321,123,81820,2,0,L|310:23,1,93.5,2|0,0:0|0:0,0:0:0:0: +201,117,82051,2,0,L|215:256,1,140.25,8|0,0:0|0:0,0:0:0:0: +225,332,82281,6,0,P|153:348|53:272,1,187,2|8,0:0|0:0,0:0:0:0: +90,181,82627,2,0,P|162:165|262:241,1,187,2|2,0:0|0:0,0:0:0:0: +315,317,82974,2,0,L|441:307,1,93.5,8|0,0:0|0:0,0:0:0:0: +500,169,83204,5,2,0:0:0:0: +500,169,83320,2,0,L|306:184,1,187,2|2,0:0|0:0,0:0:0:0: +156,120,83666,2,0,P|140:68|152:24,1,93.5,2|0,0:0|0:0,0:0:0:0: +260,20,83897,2,0,P|276:72|264:116,1,93.5,8|0,0:0|0:0,0:0:0:0: +196,260,84127,6,0,L|10:240,1,187,2|8,0:0|0:0,0:0:0:0: +80,328,84474,2,0,L|265:347,1,187,2|2,0:0|0:0,0:0:0:0: +372,382,84820,2,0,P|386:339|425:314,1,93.5,8|0,0:0|0:0,0:0:0:0: +506,236,85051,2,0,P|461:246|420:225,1,93.5,2|0,0:0|0:0,0:0:0:0: +313,195,85281,2,0,P|344:228|346:274,1,93.5,8|0,0:0|0:0,0:0:0:0: +163,144,85512,6,0,L|14:135,1,140.25,2|0,0:0|0:0,0:0:0:0: +44,187,85743,2,0,L|171:194,1,93.5,8|0,0:0|0:0,0:0:0:0: +245,159,85974,2,0,P|232:96|199:67,1,93.5,2|0,0:0|0:0,0:0:0:0: +214,244,86204,2,0,L|404:225,1,187,8|2,0:0|0:0,0:0:0:0: +497,283,86551,1,0,0:0:0:0: +497,283,86666,2,0,P|436:302|409:354,1,93.5,8|0,0:0|0:0,0:0:0:0: +318,374,86897,6,0,L|328:163,1,187,2|8,0:0|0:0,0:0:0:0: +238,257,87243,1,0,0:0:0:0: +238,257,87358,2,0,L|248:46,1,187,2|8,0:0|0:0,0:0:0:0: +158,140,87704,1,2,0:0:0:0: +158,140,87820,6,0,L|163:34,1,93.5,2|0,0:0|0:0,0:0:0:0: +75,118,88051,2,0,L|70:223,1,93.5,8|0,0:0|0:0,0:0:0:0: +113,345,88281,5,0,0:0:0:0: +130,335,88339,1,0,0:0:0:0: +150,333,88397,1,0,0:0:0:0: +169,339,88454,1,0,0:0:0:0: +188,347,88512,5,10,0:0:0:0: +230,365,88570,1,2,0:0:0:0: +276,366,88628,1,10,0:0:0:0: +320,349,88686,1,2,0:0:0:0: +353,317,88743,6,0,L|362:113,1,187,6|8,0:0|0:0,0:0:0:0: +265,71,89089,1,0,0:0:0:0: +265,71,89204,2,0,P|216:122|257:235,1,187,2|8,0:0|0:0,0:0:0:0: +356,237,89551,1,0,0:0:0:0: +356,237,89666,6,0,L|472:227,1,93.5,2|0,0:0|0:0,0:0:0:0: +373,145,89897,2,0,L|222:158,1,140.25,8|0,0:0|0:0,0:0:0:0: +189,190,90127,2,0,L|282:181,1,93.5,2|0,0:0|0:0,0:0:0:0: +147,85,90358,2,0,L|24:95,1,93.5,8|0,0:0|0:0,0:0:0:0: +129,242,90589,6,0,P|186:269|266:193,1,187,2|8,0:0|0:0,0:0:0:0: +116,165,90935,2,0,P|64:200|89:308,1,187,2|2,0:0|0:0,0:0:0:0: +189,190,91281,2,0,P|190:140|162:101,1,93.5,8|0,0:0|0:0,0:0:0:0: +81,31,91512,2,0,L|174:23,1,93.5,2|0,0:0|0:0,0:0:0:0: +350,92,91743,2,0,L|257:100,1,93.5,8|0,0:0|0:0,0:0:0:0: +95,198,91974,2,0,L|188:190,1,93.5,2|0,0:0|0:0,0:0:0:0: +377,205,92204,1,2,0:0:0:0: +365,240,92262,1,2,0:0:0:0: +355,276,92320,1,2,0:0:0:0: +345,311,92377,1,2,0:0:0:0: +334,347,92435,6,0,P|264:294|292:211,1,187,2|8,0:0|0:0,0:0:0:0: +392,153,92781,1,0,0:0:0:0: +392,153,92897,2,0,P|420:70|350:17,1,187,2|8,0:0|0:0,0:0:0:0: +256,79,93243,1,0,0:0:0:0: +256,79,93358,6,0,L|263:195,1,93.5,2|0,0:0|0:0,0:0:0:0: +152,304,93589,2,0,L|142:141,1,140.25,8|0,0:0|0:0,0:0:0:0: +154,109,93820,2,0,P|122:142|78:155,1,93.5,2|0,0:0|0:0,0:0:0:0: +0,62,94051,2,0,P|31:28|75:15,1,93.5,8|0,0:0|0:0,0:0:0:0: +256,79,94281,6,0,L|267:265,1,187,2|8,0:0|0:0,0:0:0:0: +198,354,94627,1,0,0:0:0:0: +198,354,94743,2,0,P|286:378|361:327,1,187,2|8,0:0|0:0,0:0:0:0: +407,224,95089,1,0,0:0:0:0: +407,224,95204,6,0,L|247:211,1,140.25,2|0,0:0|0:0,0:0:0:0: +218,184,95435,2,0,L|330:193,1,93.5,8|0,0:0|0:0,0:0:0:0: +401,124,95666,2,0,P|410:77|383:30,1,93.5,2|0,0:0|0:0,0:0:0:0: +300,104,95897,2,0,P|291:149|311:191,1,93.5,8|0,0:0|0:0,0:0:0:0: +420,317,96127,6,0,P|334:293|273:358,1,187,2|8,0:0|0:0,0:0:0:0: +159,359,96474,1,0,0:0:0:0: +159,359,96589,2,0,P|73:382|12:317,1,187,2|8,0:0|0:0,0:0:0:0: +78,186,96935,1,0,0:0:0:0: +174,245,97051,6,0,L|195:51,1,187,2|8,0:0|0:0,0:0:0:0: +300,104,97397,1,0,0:0:0:0: +300,104,97512,2,0,B|309:153|309:153|287:195,1,93.5,2|0,0:0|0:0,0:0:0:0: +185,332,97743,2,0,B|164:293|164:293|173:244,1,93.5,8|0,0:0|0:0,0:0:0:0: +450,270,97974,6,0,L|259:281,1,187,2|8,0:0|0:0,0:0:0:0: +218,184,98320,1,0,0:0:0:0: +218,184,98435,2,0,L|409:173,1,187,2|8,0:0|0:0,0:0:0:0: +509,216,98781,1,0,0:0:0:0: +509,216,98897,6,0,B|477:120|541:136|509:24,1,187,2|8,0:0|0:0,0:0:0:0: +402,4,99243,1,0,0:0:0:0: +207,91,99358,2,0,L|217:183,1,93.5,2|0,0:0|0:0,0:0:0:0: +364,222,99589,2,0,L|353:129,1,93.5,8|0,0:0|0:0,0:0:0:0: +300,359,99820,5,2,0:0:0:0: +391,372,99935,1,0,0:0:0:0: +432,287,100051,1,8,0:0:0:0: +364,222,100166,1,0,0:0:0:0: +282,268,100281,1,2,0:0:0:0: +200,314,100397,1,0,0:0:0:0: +132,249,100512,1,8,0:0:0:0: +173,164,100628,1,0,0:0:0:0: +264,177,100743,6,0,L|248:73,1,93.5,2|0,0:0|0:0,0:0:0:0: +158,71,100974,2,0,L|173:164,1,93.5,8|0,0:0|0:0,0:0:0:0: +146,341,101204,2,0,L|130:237,1,93.5,2|0,0:0|0:0,0:0:0:0: +40,235,101435,2,0,L|54:327,1,93.5,8|0,0:0|0:0,0:0:0:0: +146,341,101666,6,0,P|214:349|234:329,1,93.5,2|0,0:0|0:0,0:0:0:0: +321,224,101897,2,0,P|253:216|233:236,1,93.5,8|0,0:0|0:0,0:0:0:0: +325,317,102127,1,2,0:0:0:0: +353,129,102243,1,2,0:0:0:0: +345,116,102300,1,2,0:0:0:0: +351,104,102358,1,2,0:0:0:0: +340,93,102416,1,2,0:0:0:0: +342,79,102474,1,2,0:0:0:0: +333,68,102531,1,2,0:0:0:0: +322,58,102589,5,10,0:0:0:0: +360,78,102646,1,2,0:0:0:0: +404,81,102704,1,2,0:0:0:0: +446,65,102762,1,2,0:0:0:0: +477,34,102819,1,2,0:0:0:0: +232,124,102935,2,0,L|173:109,1,46.75,2|0,0:0|0:0,0:0:0:0: +256,114,103051,5,2,0:0:0:0: +249,146,103108,1,2,0:0:0:0: +271,173,103166,1,10,0:0:0:0: +255,200,103224,1,2,0:0:0:0: +271,229,103281,1,2,0:0:0:0: +294,258,103339,1,2,0:0:0:0: +277,283,103397,1,2,0:0:0:0: +291,312,103454,1,2,0:0:0:0: +285,344,103512,6,0,P|370:322|476:316,1,187,6|8,0:0|0:0,0:0:0:0: +495,206,103858,1,0,0:0:0:0: +495,206,103974,2,0,P|456:129|349:137,1,187,2|8,0:0|0:0,0:0:0:0: +272,191,104320,1,0,0:0:0:0: +272,191,104435,6,0,L|280:61,1,93.5,2|0,0:0|0:0,0:0:0:0: +362,23,104666,2,0,P|287:75|188:64,1,187,8|2,0:0|0:0,0:0:0:0: +108,121,105012,1,0,0:0:0:0: +97,10,105127,1,8,0:0:0:0: +195,67,105243,1,8,0:0:0:0: +195,67,105301,1,8,0:0:0:0: +195,67,105358,6,0,P|211:139|111:224,1,187,2|8,0:0|0:0,0:0:0:0: +33,192,105704,1,0,0:0:0:0: +33,192,105820,2,0,L|41:292,1,93.5,2|0,0:0|0:0,0:0:0:0: +149,312,106051,2,0,L|141:218,1,93.5,8|0,0:0|0:0,0:0:0:0: +239,165,106281,6,0,P|272:198|279:244,1,93.5,2|0,0:0|0:0,0:0:0:0: +255,354,106512,2,0,L|351:344,1,93.5,8|0,0:0|0:0,0:0:0:0: +460,337,106743,2,0,P|399:276|386:191,1,140.25,2|0,0:0|0:0,0:0:0:0: +385,226,106974,2,0,L|481:216,1,93.5,8|0,0:0|0:0,0:0:0:0: +391,72,107204,6,0,L|204:91,1,187,2|8,0:0|0:0,0:0:0:0: +126,7,107551,1,0,0:0:0:0: +126,7,107666,2,0,P|95:51|127:179,1,187,2|8,0:0|0:0,0:0:0:0: +233,165,108012,1,0,0:0:0:0: +233,165,108127,6,0,L|219:270,1,93.5,2|0,0:0|0:0,0:0:0:0: +145,342,108358,2,0,P|217:288|336:317,1,187,8|2,0:0|0:0,0:0:0:0: +414,258,108704,1,0,0:0:0:0: +394,369,108820,1,8,0:0:0:0: +309,298,108935,1,0,0:0:0:0: +309,298,108993,1,0,0:0:0:0: +309,298,109051,6,0,L|301:103,1,187,2|8,0:0|0:0,0:0:0:0: +396,51,109397,1,0,0:0:0:0: +396,51,109512,2,0,P|427:108|408:160,1,93.5,2|0,0:0|0:0,0:0:0:0: +385,240,109743,2,0,L|491:230,1,93.5,8|0,0:0|0:0,0:0:0:0: +445,339,109974,6,0,L|339:349,1,93.5,2|0,0:0|0:0,0:0:0:0: +264,278,110204,2,0,P|250:233|260:188,1,93.5,8|0,0:0|0:0,0:0:0:0: +150,164,110435,2,0,P|130:227|164:322,1,140.25,2|0,0:0|0:0,0:0:0:0: +147,298,110666,2,0,P|101:287|57:301,1,93.5,8|0,0:0|0:0,0:0:0:0: +214,357,110897,6,0,L|400:339,1,187,2|8,0:0|0:0,0:0:0:0: +451,239,111243,1,0,0:0:0:0: +451,239,111358,2,0,L|264:256,1,187,2|8,0:0|0:0,0:0:0:0: +314,155,111704,1,0,0:0:0:0: +314,155,111820,6,0,L|407:146,1,93.5,2|0,0:0|0:0,0:0:0:0: +486,65,112051,2,0,P|443:147|450:238,1,187,8|2,0:0|0:0,0:0:0:0: +499,340,112397,1,0,0:0:0:0: +390,312,112512,1,8,0:0:0:0: +288,358,112627,1,0,0:0:0:0: +288,358,112685,1,0,0:0:0:0: +288,358,112743,6,0,L|100:344,1,187,2|8,0:0|0:0,0:0:0:0: +30,256,113089,1,0,0:0:0:0: +30,256,113204,2,0,L|218:270,1,187,2|8,0:0|0:0,0:0:0:0: +308,202,113551,1,0,0:0:0:0: +308,202,113666,6,0,P|322:134|256:43,1,187,2|8,0:0|0:0,0:0:0:0: +211,146,114012,1,0,0:0:0:0: +211,146,114127,2,0,L|221:312,1,140.25,2|0,0:0|0:0,0:0:0:0: +219,285,114358,2,0,P|262:271|306:285,1,93.5,8|0,0:0|0:0,0:0:0:0: +166,367,114589,6,0,B|94:317|105:208|187:178|256:192|256:192|325:205|407:176|418:67|346:17,1,561,2|8,0:0|0:0,0:0:0:0: +292,98,115512,1,2,0:0:0:0: +346,367,116435,6,0,B|418:317|407:208|325:178|256:192|256:192|187:205|105:176|94:67|166:17,1,561,2|8,0:0|0:0,0:0:0:0: +219,98,117358,1,2,0:0:0:0: +292,285,117589,1,8,0:0:0:0: +438,147,117820,1,2,0:0:0:0: +219,98,118051,2,0,L|88:91,1,93.5,8|0,0:0|0:0,0:0:0:0: +10,235,118281,6,0,P|-9:192|1:144,1,93.5,2|2,0:0|0:0,0:0:0:0: +154,279,118512,2,0,P|173:322|163:369,1,93.5,8|0,0:0|0:0,0:0:0:0: +3,339,118743,1,8,0:0:0:0: +219,215,118858,2,0,P|224:170|244:-10,1,187,8|2,0:0|0:0,0:0:0:0: +114,85,119204,5,2,0:0:0:0: +145,112,119262,1,2,0:0:0:0: +151,155,119319,1,2,0:0:0:0: +134,195,119377,1,2,0:0:0:0: +102,223,119434,1,2,0:0:0:0: +84,265,119493,1,2,0:0:0:0: +80,305,119551,1,2,0:0:0:0: +101,342,119608,1,2,0:0:0:0: +135,372,119666,5,2,0:0:0:0: +190,375,119723,1,2,0:0:0:0: +230,335,119781,1,2,0:0:0:0: +280,309,119839,1,2,0:0:0:0: +336,310,119897,1,2,0:0:0:0: +377,346,119954,1,2,0:0:0:0: +425,374,120012,1,2,0:0:0:0: +475,348,120070,1,2,0:0:0:0: +495,297,120127,6,0,P|500:240|514:98,1,187,6|8,0:0|0:0,0:0:0:0: +351,20,120474,2,0,P|345:76|332:219,1,187,2|2,0:0|0:0,0:0:0:0: +415,362,120820,2,0,B|458:378|458:378|508:361,1,93.5,8|0,0:0|0:0,0:0:0:0: +407,268,121051,5,2,0:0:0:0: +332,321,121166,2,0,L|145:308,1,187,2|2,0:0|0:0,0:0:0:0: +213,192,121512,2,0,P|219:146|197:105,1,93.5,2|0,0:0|0:0,0:0:0:0: +47,283,121743,2,0,P|41:329|63:370,1,93.5,8|0,0:0|0:0,0:0:0:0: +213,192,121974,6,0,L|27:180,1,187,2|8,0:0|0:0,0:0:0:0: +146,308,122320,2,0,L|332:321,1,187,2|2,0:0|0:0,0:0:0:0: +226,107,122666,2,0,P|203:147|214:191,1,93.5,8|0,0:0|0:0,0:0:0:0: +83,365,122897,5,2,0:0:0:0: +31,289,123012,2,0,P|24:211|14:102,1,187,2|2,0:0|0:0,0:0:0:0: +214,192,123358,2,0,P|174:214|128:208,1,93.5,2|0,0:0|0:0,0:0:0:0: +303,114,123589,2,0,P|342:91|388:97,1,93.5,8|0,0:0|0:0,0:0:0:0: +498,293,123820,6,0,L|306:281,1,187,2|8,0:0|0:0,0:0:0:0: +214,192,124166,2,0,L|406:204,1,187,2|2,0:0|0:0,0:0:0:0: +278,344,124512,2,0,P|245:309|242:263,1,93.5,8|0,0:0|0:0,0:0:0:0: +408,48,124743,5,2,0:0:0:0: +327,94,124858,2,0,L|311:281,1,187,2|2,0:0|0:0,0:0:0:0: +214,192,125204,2,0,P|154:196|114:171,1,93.5,2|0,0:0|0:0,0:0:0:0: +60,84,125435,2,0,P|120:80|160:105,1,93.5,8|0,0:0|0:0,0:0:0:0: +110,374,125666,5,10,0:0:0:0: +10,209,125781,1,8,0:0:0:0: +184,284,125897,1,8,0:0:0:0: +0,326,126012,1,8,0:0:0:0: +125,181,126127,2,0,B|202:169|224:229|319:212,1,187,2|0,1:0|0:0,0:0:0:0: +398,154,126474,1,0,0:0:0:0: +398,154,126589,6,0,P|346:110|352:43,1,140.25,2|0,0:0|0:0,0:0:0:0: +413,83,126820,2,0,B|419:162|419:162|406:195|406:195|413:267,1,187,2|2,1:0|0:0,0:0:0:0: +367,346,127166,1,0,0:0:0:0: +275,323,127281,1,8,0:0:0:0: +195,372,127397,1,0,0:0:0:0: +195,372,127454,1,0,0:0:0:0: +195,372,127512,6,0,P|190:282|262:228,1,187,6|8,0:0|0:0,0:0:0:0: +330,85,127858,2,0,P|334:174|262:228,1,187,2|2,0:0|0:0,0:0:0:0: +157,129,128204,2,0,L|251:135,1,93.5,8|0,0:0|0:0,0:0:0:0: +456,206,128435,5,2,0:0:0:0: +394,273,128551,2,0,L|188:261,1,187,2|2,0:0|0:0,0:0:0:0: +298,358,128897,2,0,P|341:372|387:364,1,93.5,2|0,0:0|0:0,0:0:0:0: +303,177,129127,2,0,P|259:162|213:170,1,93.5,8|0,0:0|0:0,0:0:0:0: +20,270,129358,6,0,L|206:262,1,187,2|8,0:0|0:0,0:0:0:0: +303,177,129704,2,0,L|117:185,1,187,2|2,0:0|0:0,0:0:0:0: +22,90,130051,2,0,P|82:85|120:118,1,93.5,8|0,0:0|0:0,0:0:0:0: +206,261,130281,5,2,0:0:0:0: +128,351,130397,2,0,P|86:271|116:185,1,187,2|2,0:0|0:0,0:0:0:0: +206,261,130743,2,0,L|225:365,1,93.5,2|0,0:0|0:0,0:0:0:0: +320,268,130974,2,0,L|300:163,1,93.5,8|0,0:0|0:0,0:0:0:0: +236,21,131204,6,0,P|189:99|223:182,1,187,2|8,0:0|0:0,0:0:0:0: +368,330,131551,2,0,P|414:252|380:169,1,187,2|2,0:0|0:0,0:0:0:0: +285,84,131897,2,8,L|302:175,1,93.5,8|0,0:0|0:0,0:0:0:0: +256,337,132127,5,2,0:0:0:0: +167,301,132243,2,0,P|234:242|320:268,1,187,2|2,0:0|0:0,0:0:0:0: +104,372,132589,2,0,P|57:369|10:367,1,93.5,2|0,0:0|0:0,0:0:0:0: +155,245,132820,2,0,P|201:242|248:240,1,93.5,8|0,0:0|0:0,0:0:0:0: +376,268,133051,5,2,0:0:0:0: +363,249,133108,1,2,0:0:0:0: +356,228,133166,1,2,0:0:0:0: +355,206,133224,1,2,0:0:0:0: +360,184,133281,1,10,0:0:0:0: +372,165,133339,1,2,0:0:0:0: +388,150,133397,1,10,0:0:0:0: +408,140,133454,1,2,0:0:0:0: +431,136,133512,1,2,1:0:0:0: +433,216,133743,1,8,0:0:0:0: +433,216,133858,1,8,0:0:0:0: +500,268,133973,5,2,0:0:0:0: +495,296,134031,1,2,0:0:0:0: +490,324,134088,1,2,0:0:0:0: +485,352,134146,1,2,0:0:0:0: +480,380,134204,2,0,B|334:389|359:290|190:308,1,280.5,2|0,1:0|0:0,0:0:0:0: +213,83,134666,2,0,P|238:121|235:167,1,93.5,8|0,0:0|0:0,0:0:0:0: +109,244,134897,6,0,L|-10:240,1,93.5,4|0,0:0|0:0,0:0:0:0: +236,167,135127,2,0,L|329:170,1,93.5,8|0,0:0|0:0,0:0:0:0: +208,383,135358,2,0,L|21:376,1,187,2|8,0:0|0:0,0:0:0:0: +297,282,135704,2,0,L|203:278,1,93.5,0|2,0:0|0:0,0:0:0:0: +147,80,135935,6,0,L|240:83,1,93.5,0|8,0:0|0:0,0:0:0:0: +397,51,136166,2,0,L|347:130,1,93.5,0|2,0:0|0:0,0:0:0:0: +297,282,136397,2,0,L|253:199,1,93.5,0|8,0:0|0:0,0:0:0:0: +397,51,136627,1,0,0:0:0:0: +502,166,136743,6,0,L|409:169,1,93.5,2|0,0:0|0:0,0:0:0:0: +297,282,136974,2,0,L|390:285,1,93.5,8|0,0:0|0:0,0:0:0:0: +296,151,137204,6,0,L|203:154,1,93.5,2|0,0:0|0:0,0:0:0:0: +89,242,137435,2,0,L|182:245,1,93.5,8|0,0:0|0:0,0:0:0:0: +220,337,137666,6,0,L|-2:329,1,187,2|8,0:0|0:0,0:0:0:0: +202,154,138012,2,0,L|424:161,1,187,2|2,0:0|0:0,0:0:0:0: +338,61,138358,2,0,L|244:57,1,93.5,8|0,0:0|0:0,0:0:0:0: +431,315,138589,6,0,B|460:189|460:189|452:223|480:258,1,187,2|8,0:0|0:0,0:0:0:0: +507,343,138935,1,0,0:0:0:0: +507,343,139051,2,0,B|416:313|411:386|300:358,1,187,2|8,0:0|0:0,0:0:0:0: +177,244,139397,1,0,0:0:0:0: +177,244,139512,6,0,B|268:214|273:287|384:259,1,187,2|8,0:0|0:0,0:0:0:0: +424,173,139858,1,0,0:0:0:0: +339,99,139974,2,0,L|328:-1,1,93.5,2|2,0:0|0:0,0:0:0:0: +177,244,140204,2,0,L|167:151,1,93.5,8|0,0:0|0:0,0:0:0:0: +248,95,140435,6,0,L|257:187,1,93.5,2|0,0:0|0:0,0:0:0:0: +96,300,140666,2,0,L|86:207,1,93.5,8|0,0:0|0:0,0:0:0:0: +167,151,140897,6,0,L|177:244,1,93.5,2|0,0:0|0:0,0:0:0:0: +355,315,141127,2,0,L|346:222,1,93.5,8|0,0:0|0:0,0:0:0:0: +263,380,141358,6,0,P|317:344|444:352,1,187,2|8,0:0|0:0,0:0:0:0: +177,244,141704,1,0,0:0:0:0: +177,244,141820,2,0,P|123:280|-4:272,1,187,2|8,0:0|0:0,0:0:0:0: +0,182,142166,1,0,0:0:0:0: +176,58,142281,6,0,L|167:151,1,93.5,2|0,0:0|0:0,0:0:0:0: +345,221,142512,2,0,L|355:129,1,93.5,8|0,0:0|0:0,0:0:0:0: +257,188,142743,6,0,L|248:281,1,93.5,2|0,0:0|0:0,0:0:0:0: +426,351,142974,2,0,L|435:258,1,93.5,8|0,0:0|0:0,0:0:0:0: +203,348,143204,6,0,P|239:361|326:297,1,140.25,2|0,0:0|0:0,0:0:0:0: +435,258,143435,6,0,P|398:267|316:196,1,126.224996147919,8|0,0:0|0:0,0:0:0:0: +257,188,143666,6,0,P|292:194|361:121,1,112.2,2|0,0:0|0:0,0:0:0:0: +419,136,143897,6,0,P|388:138|333:70,1,98.1749970039369,8|0,0:0|0:0,0:0:0:0: +257,188,144127,6,0,L|275:1,1,187,2|8,0:0|0:0,0:0:0:0: +435,258,144474,1,0,0:0:0:0: +435,258,144589,2,0,L|453:71,1,187,2|8,0:0|0:0,0:0:0:0: +149,337,144935,1,0,0:0:0:0: +149,337,145051,6,0,L|159:232,1,93.5,2|0,0:0|0:0,0:0:0:0: +353,153,145281,2,0,L|342:257,1,93.5,8|0,0:0|0:0,0:0:0:0: +169,318,145512,6,0,L|181:199,1,93.5,2|0,0:0|0:0,0:0:0:0: +332,171,145742,2,0,L|319:300,1,93.5,8|0,0:0|0:0,0:0:0:0: +95,131,145974,6,0,L|104:28,1,93.5,2|0,0:0|0:0,0:0:0:0: +247,76,146204,2,0,L|237:169,1,93.5,8|0,0:0|0:0,0:0:0:0: +166,150,146435,2,0,L|176:57,1,93.5,2|0,0:0|0:0,0:0:0:0: +318,95,146666,2,0,L|308:188,1,93.5,8|0,0:0|0:0,0:0:0:0: +475,319,146897,6,0,L|465:216,1,93.5,2|0,0:0|0:0,0:0:0:0: +322,263,147127,2,0,L|332:357,1,93.5,8|0,0:0|0:0,0:0:0:0: +403,338,147358,2,0,L|394:245,1,93.5,2|0,0:0|0:0,0:0:0:0: +252,283,147589,2,0,L|261:376,1,93.5,8|0,0:0|0:0,0:0:0:0: +38,368,147820,6,0,L|140:358,1,93.5,2|0,0:0|0:0,0:0:0:0: +93,215,148050,2,0,L|-1:224,1,93.5,8|0,0:0|0:0,0:0:0:0: +247,203,148281,1,2,0:0:0:0: +186,101,148397,1,8,0:0:0:0: +365,200,148512,1,8,0:0:0:0: +189,304,148627,1,8,0:0:0:0: +237,20,148743,5,2,0:0:0:0: +95,132,148858,1,2,0:0:0:0: +95,132,148916,1,2,0:0:0:0: +95,132,148974,1,10,0:0:0:0: +276,126,149089,1,0,0:0:0:0: +125,24,149204,5,2,0:0:0:0: +189,196,149320,1,8,0:0:0:0: +361,132,149435,1,8,0:0:0:0: +425,304,149551,1,8,0:0:0:0: +330,357,149666,6,0,P|240:297|79:327,1,280.5,6|0,0:0|0:0,0:0:0:0: +237,168,150589,2,0,P|327:108|488:138,1,280.5,2|0,0:0|0:0,0:0:0:0: +401,288,151512,2,0,L|122:257,1,280.5,2|0,0:0|0:0,0:0:0:0: +44,309,152320,1,8,0:0:0:0: +44,309,152377,1,8,0:0:0:0: +44,309,152435,5,10,0:0:0:0: +44,197,152551,1,2,0:0:0:0: +151,162,152666,1,8,0:0:0:0: +216,253,152781,1,2,0:0:0:0: +281,344,152897,1,2,0:0:0:0: +388,309,153012,1,2,0:0:0:0: +388,197,153128,1,8,0:0:0:0: +281,162,153243,1,2,0:0:0:0: +216,253,153358,6,0,L|503:229,1,280.5,6|0,0:0|0:0,0:0:0:0: +296,131,154281,2,0,L|9:155,1,280.5,2|0,0:0|0:0,0:0:0:0: +148,338,155204,2,0,L|428:315,1,280.5,2|0,0:0|0:0,0:0:0:0: +492,225,156127,5,10,0:0:0:0: +492,225,156185,1,8,0:0:0:0: +492,225,156243,1,8,0:0:0:0: +320,168,156358,1,8,0:0:0:0: +427,315,156474,1,8,0:0:0:0: +427,315,156531,1,8,0:0:0:0: +427,315,156589,1,10,0:0:0:0: +427,133,156704,1,8,0:0:0:0: +320,280,156820,1,10,0:0:0:0: +492,225,156935,1,8,0:0:0:0: +320,280,157051,6,0,B|194:258|174:358|44:320,1,280.5,6|0,0:0|0:0,0:0:0:0: +0,138,157974,2,0,P|88:81|186:211,1,280.5,2|0,0:0|0:0,0:0:0:0: +281,344,158897,2,0,L|312:65,1,280.5,2|0,0:0|0:0,0:0:0:0: +419,30,159704,1,8,0:0:0:0: +419,30,159762,1,8,0:0:0:0: +419,30,159820,5,10,0:0:0:0: +484,121,159935,1,8,0:0:0:0: +419,212,160051,1,8,0:0:0:0: +312,177,160166,1,8,0:0:0:0: +312,65,160281,1,10,0:0:0:0: +205,30,160397,1,8,0:0:0:0: +140,121,160513,1,8,0:0:0:0: +206,210,160627,1,8,0:0:0:0: +312,65,160743,6,0,L|418:48,1,93.5,6|0,0:0|0:0,0:0:0:0: +484,121,160974,2,0,L|378:138,1,93.5,8|0,0:0|0:0,0:0:0:0: +206,210,161204,6,0,L|312:193,1,93.5,2|0,0:0|0:0,0:0:0:0: +378,266,161435,2,0,L|272:283,1,93.5,8|0,0:0|0:0,0:0:0:0: +44,197,161666,6,0,L|33:289,1,93.5,2|0,0:0|0:0,0:0:0:0: +116,362,161897,2,0,L|126:269,1,93.5,8|0,0:0|0:0,0:0:0:0: +216,117,162127,6,0,L|205:209,1,93.5,2|0,0:0|0:0,0:0:0:0: +288,282,162358,2,0,L|298:189,1,93.5,8|0,0:0|0:0,0:0:0:0: +388,124,162589,6,0,P|436:122|482:167,1,93.5,2|0,0:0|0:0,0:0:0:0: +494,219,162820,2,0,P|446:221|400:176,1,93.5,8|0,0:0|0:0,0:0:0:0: +496,64,163051,2,0,P|498:110|472:148,1,93.5,2|0,0:0|0:0,0:0:0:0: +386,278,163281,2,0,P|383:232|410:194,1,93.5,8|0,0:0|0:0,0:0:0:0: +511,346,163512,6,0,L|397:359,1,93.5,2|0,0:0|0:0,0:0:0:0: +195,271,163743,2,0,L|287:281,1,93.5,8|0,0:0|0:0,0:0:0:0: +410,194,163974,6,0,L|296:207,1,93.5,2|0,0:0|0:0,0:0:0:0: +94,119,164205,2,0,L|186:129,1,93.5,8|0,0:0|0:0,0:0:0:0: +440,44,164435,6,0,P|407:76|401:122,1,93.5,2|0,0:0|0:0,0:0:0:0: +458,266,164666,2,0,P|445:221|409:193,1,93.5,8|0,0:0|0:0,0:0:0:0: +255,171,164897,2,0,P|299:182|342:164,1,93.5,2|0,0:0|0:0,0:0:0:0: +508,108,165127,1,8,0:0:0:0: +494,219,165243,1,8,0:0:0:0: +494,219,165301,1,8,0:0:0:0: +494,219,165358,6,0,L|482:321,1,93.5,2|0,0:0|0:0,0:0:0:0: +341,164,165589,1,10,0:0:0:0: +341,164,165704,1,2,0:0:0:0: +306,264,165820,5,10,0:0:0:0: +271,234,165877,1,10,0:0:0:0: +225,232,165935,1,2,0:0:0:0: +188,258,165993,1,2,0:0:0:0: +176,303,166050,1,10,0:0:0:0: +164,348,166108,1,10,0:0:0:0: +127,374,166166,1,10,0:0:0:0: +81,372,166224,1,10,0:0:0:0: +46,343,166281,6,0,P|47:239|141:235,1,187,6|8,0:0|0:0,0:0:0:0: +225,232,166627,1,0,0:0:0:0: +225,232,166743,2,0,L|257:25,1,187,2|8,0:0|0:0,0:0:0:0: +150,1,167089,1,0,0:0:0:0: +150,1,167204,6,0,P|137:59|160:95,1,93.5,2|0,0:0|0:0,0:0:0:0: +235,165,167435,2,0,L|379:150,1,140.25,8|0,0:0|0:0,0:0:0:0: +426,172,167666,2,0,L|311:183,1,93.5,2|0,0:0|0:0,0:0:0:0: +223,301,167897,2,0,L|337:289,1,93.5,8|0,0:0|0:0,0:0:0:0: +476,116,168127,6,0,P|416:98|365:216,1,187,2|8,0:0|0:0,0:0:0:0: +425,314,168474,2,0,P|470:271|393:167,1,187,2|2,0:0|0:0,0:0:0:0: +280,170,168820,2,0,P|286:218|342:259,1,93.5,8|0,0:0|0:0,0:0:0:0: +352,356,169051,6,0,L|239:341,1,93.5,2|0,0:0|0:0,0:0:0:0: +122,225,169281,2,0,L|215:238,1,93.5,8|0,0:0|0:0,0:0:0:0: +425,171,169512,2,0,L|332:158,1,93.5,2|0,0:0|0:0,0:0:0:0: +200,91,169743,1,10,0:0:0:0: +203,126,169800,1,2,0:0:0:0: +206,163,169858,1,2,0:0:0:0: +211,201,169916,1,2,0:0:0:0: +215,238,169974,6,0,P|173:305|43:277,1,187,2|8,0:0|0:0,0:0:0:0: +29,212,170320,1,0,0:0:0:0: +29,212,170435,2,0,L|57:7,1,187,2|8,0:0|0:0,0:0:0:0: +127,111,170781,1,0,0:0:0:0: +127,111,170897,6,0,P|172:147|220:138,1,93.5,2|0,0:0|0:0,0:0:0:0: +389,111,171127,2,0,P|315:119|279:171,1,140.25,8|0,0:0|0:0,0:0:0:0: +264,184,171358,2,0,P|268:220|279:296,1,93.5,2|0,0:0|0:0,0:0:0:0: +470,358,171589,2,0,P|465:321|455:246,1,93.5,8|0,0:0|0:0,0:0:0:0: +508,108,171820,6,0,B|432:101|432:101|411:107|411:107|316:99,1,187,2|8,0:0|0:0,0:0:0:0: +214,201,172166,1,0,0:0:0:0: +214,201,172281,2,0,B|289:207|289:207|310:201|310:201|405:209,1,187,2|8,0:0|0:0,0:0:0:0: +223,301,172628,1,0,0:0:0:0: +223,301,172743,2,0,L|83:288,1,140.25,2|0,0:0|0:0,0:0:0:0: +59,302,172974,2,0,L|152:310,1,93.5,8|0,0:0|0:0,0:0:0:0: +329,295,173204,2,0,P|332:355|307:389,1,93.5,2|0,0:0|0:0,0:0:0:0: +264,186,173435,2,0,P|261:126|286:92,1,93.5,8|0,0:0|0:0,0:0:0:0: +170,178,173666,6,0,B|75:177|99:249|4:249,1,187,2|8,0:0|0:0,0:0:0:0: +203,99,174012,1,0,0:0:0:0: +203,99,174127,2,0,B|297:99|273:27|368:27,1,187,2|8,0:0|0:0,0:0:0:0: +484,72,174474,1,0,0:0:0:0: +484,72,174589,6,0,P|475:133|458:257,1,187,2|8,0:0|0:0,0:0:0:0: +361,315,174935,1,0,0:0:0:0: +361,315,175051,2,0,P|355:274|348:222,1,93.5,2|0,0:0|0:0,0:0:0:0: +249,292,175281,2,0,P|254:332|262:385,1,93.5,8|0,0:0|0:0,0:0:0:0: +398,152,175512,6,0,P|312:207|229:175,1,187,2|8,0:0|0:0,0:0:0:0: +164,280,175858,1,0,0:0:0:0: +164,280,175974,2,0,P|90:226|3:249,1,187,2|8,0:0|0:0,0:0:0:0: +237,182,176320,1,0,0:0:0:0: +237,182,176435,6,0,B|229:94|283:97|266:-7,1,187,2|8,0:0|0:0,0:0:0:0: +151,40,176781,1,0,0:0:0:0: +0,156,176897,2,0,L|93:149,1,93.5,2|0,0:0|0:0,0:0:0:0: +164,280,177127,2,0,L|62:286,1,93.5,8|0,0:0|0:0,0:0:0:0: +208,145,177358,5,6,0:0:0:0: +242,59,177474,1,0,0:0:0:0: +334,63,177589,1,8,0:0:0:0: +358,154,177704,1,0,0:0:0:0: +281,204,177820,1,2,0:0:0:0: +208,145,177935,1,0,0:0:0:0: +129,196,178051,1,8,0:0:0:0: +153,286,178166,1,0,0:0:0:0: +246,290,178281,6,0,L|235:384,1,93.5,2|0,0:0|0:0,0:0:0:0: +142,378,178512,2,0,L|153:286,1,93.5,8|0,0:0|0:0,0:0:0:0: +139,103,178743,2,0,L|128:197,1,93.5,2|0,0:0|0:0,0:0:0:0: +35,191,178974,2,0,L|45:98,1,93.5,8|0,0:0|0:0,0:0:0:0: +139,103,179204,6,0,P|186:128|228:120,1,93.5,2|0,0:0|0:0,0:0:0:0: +362,179,179435,2,0,P|316:174|277:198,1,93.5,8|0,0:0|0:0,0:0:0:0: +392,365,179666,5,2,0:0:0:0: +464,306,179781,1,8,0:0:0:0: +464,306,179839,1,8,0:0:0:0: +464,306,179897,1,8,0:0:0:0: +378,270,180012,1,8,0:0:0:0: +450,211,180127,5,2,0:0:0:0: +362,179,180243,1,8,0:0:0:0: +362,179,180301,1,8,0:0:0:0: +362,179,180358,2,0,L|257:164,1,93.5,8|0,0:0|0:0,0:0:0:0: +160,37,180589,5,2,0:0:0:0: +105,123,180704,1,8,0:0:0:0: +269,165,180820,1,8,0:0:0:0: +259,62,180935,1,8,0:0:0:0: +172,203,181051,6,0,P|205:334|201:384,1,187,6|8,0:0|0:0,0:0:0:0: +121,328,181397,1,0,0:0:0:0: +37,358,181512,2,0,P|4:227|8:177,1,187,2|8,0:0|0:0,0:0:0:0: +58,98,181858,1,0,0:0:0:0: +58,98,181974,6,0,P|104:96|150:106,1,93.5,2|0,0:0|0:0,0:0:0:0: +381,158,182204,2,0,P|334:191|224:165,1,140.25,8|0,0:0|0:0,0:0:0:0: +214,161,182435,2,0,L|223:260,1,93.5,2|0,0:0|0:0,0:0:0:0: +184,337,182666,1,8,0:0:0:0: +278,329,182781,6,0,B|383:304|353:370|477:341,1,187,2|2,0:0|0:0,0:0:0:0: +505,267,183127,2,0,P|488:184|474:75,1,187,8|2,0:0|0:0,0:0:0:0: +403,21,183474,2,0,P|382:61|397:133,1,93.5,0|8,0:0|0:0,0:0:0:0: +331,198,183704,1,0,0:0:0:0: +287,106,183820,6,0,P|225:59|118:89,1,187,2|8,0:0|0:0,0:0:0:0: +90,168,184166,1,0,0:0:0:0: +29,98,184281,2,0,P|36:44|36:0,1,93.5,2|0,0:0|0:0,0:0:0:0: +183,152,184512,2,0,P|176:206|176:250,1,93.5,8|0,0:0|0:0,0:0:0:0: +134,324,184743,6,0,P|183:295|325:315,1,187,2|8,0:0|0:0,0:0:0:0: +370,231,185089,1,0,0:0:0:0: +357,132,185204,2,0,P|308:161|166:141,1,187,2|8,0:0|0:0,0:0:0:0: +102,104,185551,1,0,0:0:0:0: +102,104,185666,6,0,L|89:-11,1,93.5,2|0,0:0|0:0,0:0:0:0: +103,202,185897,2,0,P|73:251|84:354,1,140.25,8|0,0:0|0:0,0:0:0:0: +101,371,186127,2,0,L|213:361,1,93.5,2|0,0:0|0:0,0:0:0:0: +281,384,186358,1,8,0:0:0:0: +254,295,186474,6,0,P|248:229|231:92,1,187,2|2,0:0|0:0,0:0:0:0: +274,29,186820,2,0,P|327:8|437:76,1,187,8|2,0:0|0:0,0:0:0:0: +509,130,187166,1,0,0:0:0:0: +422,165,187281,2,0,P|381:187|321:225,1,93.5,8|0,0:0|0:0,0:0:0:0: +268,273,187512,6,0,P|209:225|94:253,1,187,2|8,0:0|0:0,0:0:0:0: +25,205,187858,1,0,0:0:0:0: +36,296,187974,2,0,L|43:393,1,93.5,2|0,0:0|0:0,0:0:0:0: +95,151,188204,2,0,L|88:54,1,93.5,8|0,0:0|0:0,0:0:0:0: +164,6,188435,6,0,P|233:5|369:38,1,187,2|8,0:0|0:0,0:0:0:0: +438,57,188781,1,0,0:0:0:0: +367,123,188897,2,0,P|298:124|162:91,1,187,2|8,0:0|0:0,0:0:0:0: +95,151,189243,1,0,0:0:0:0: +95,151,189358,6,0,L|106:252,1,93.5,2|0,0:0|0:0,0:0:0:0: +54,321,189589,2,0,P|109:298|219:381,1,187,8|2,0:0|0:0,0:0:0:0: +285,305,189935,1,0,0:0:0:0: +370,338,190051,2,0,P|419:338|462:310,1,93.5,8|0,0:0|0:0,0:0:0:0: +497,235,190281,6,0,P|485:171|468:44,1,187,2|8,0:0|0:0,0:0:0:0: +387,10,190627,1,0,0:0:0:0: +387,10,190743,2,0,L|377:109,1,93.5,2|0,0:0|0:0,0:0:0:0: +294,258,190974,2,0,L|304:159,1,93.5,8|0,0:0|0:0,0:0:0:0: +291,73,191204,6,0,P|239:22|128:42,1,187,2|8,0:0|0:0,0:0:0:0: +110,126,191551,1,0,0:0:0:0: +161,202,191666,2,0,P|209:193|250:142,1,93.5,2|0,0:0|0:0,0:0:0:0: +133,37,191897,2,0,P|83:37|30:77,1,93.5,8|0,0:0|0:0,0:0:0:0: +13,160,192127,6,0,B|45:242|165:276|256:192|256:192|347:108|467:142|499:224,1,561,2|8,0:0|0:0,0:0:0:0: +373,263,193051,1,2,0:0:0:0: +13,224,193974,6,0,B|45:142|165:108|256:192|256:192|347:276|467:242|499:160,1,561,2|8,0:0|0:0,0:0:0:0: +373,121,194898,1,2,0:0:0:0: +139,263,195127,1,8,0:0:0:0: +343,342,195358,1,2,0:0:0:0: +373,121,195589,2,8,L|359:5,1,93.5 +232,190,195820,6,0,P|228:235|251:275,1,93.5,2|10,0:0|0:0,0:0:0:0: +447,186,196051,2,0,P|470:147|461:88,1,93.5,10|10,0:0|0:0,0:0:0:0: +327,213,196281,1,10,0:0:0:0: +512,262,196397,5,10,0:0:0:0: +496,271,196454,1,2,0:0:0:0: +483,284,196512,1,10,0:0:0:0: +472,299,196570,1,10,0:0:0:0: +463,316,196627,1,10,0:0:0:0: +456,335,196685,1,10,0:0:0:0: +452,358,196743,5,10,0:0:0:0: +426,322,196801,1,10,0:0:0:0: +390,303,196858,1,10,0:0:0:0: +347,295,196916,1,10,0:0:0:0: +303,298,196974,1,10,0:0:0:0: +269,319,197031,1,10,0:0:0:0: +240,350,197089,1,10,0:0:0:0: +199,361,197147,1,10,0:0:0:0: +151,345,197204,5,10,0:0:0:0: +112,305,197262,1,10,0:0:0:0: +104,251,197320,1,10,0:0:0:0: +127,202,197377,1,10,0:0:0:0: +172,171,197435,1,10,0:0:0:0: +226,173,197493,1,10,0:0:0:0: +267,207,197551,1,10,0:0:0:0: +319,215,197608,1,10,0:0:0:0: +364,185,197666,6,0,P|371:142|384:-12,1,187,6|8,0:0|0:0,0:0:0:0: +293,44,198012,1,0,0:0:0:0: +464,131,198127,2,0,P|457:174|444:328,1,187,2|8,0:0|0:0,0:0:0:0: +364,185,198473,1,0,0:0:0:0: +249,278,198589,6,0,P|198:265|118:255,1,93.5,2|0,0:0|0:0,0:0:0:0: +30,99,198820,1,8,0:0:0:0: +30,99,199051,2,0,P|76:91|121:79,1,93.5,2|0,0:0|0:0,0:0:0:0: +199,27,199281,1,8,0:0:0:0: +113,175,199396,1,0,0:0:0:0: +355,186,199512,6,0,P|284:122|191:131,1,187,2|8,0:0|0:0,0:0:0:0: +113,175,199858,1,0,0:0:0:0: +180,321,199974,2,0,P|188:279|192:191,1,93.5,2|0,0:0|0:0,0:0:0:0: +16,163,200204,2,0,P|8:205|4:293,1,93.5,8|0,0:0|0:0,0:0:0:0: +86,315,200435,5,2,0:0:0:0: +192,228,200551,1,0,0:0:0:0: +71,107,200666,2,0,B|57:79|57:79|74:12,1,93.5,8|0,0:0|0:0,0:0:0:0: +268,190,200897,2,0,B|282:218|282:218|265:285,1,93.5,2|0,0:0|0:0,0:0:0:0: +86,200,201127,2,0,L|187:185,1,93.5,8|0,0:0|0:0,0:0:0:0: +512,85,201358,6,0,P|428:94|348:27,1,187,2|8,0:0|0:0,0:0:0:0: +247,2,201704,1,0,0:0:0:0: +190,93,201820,2,0,P|185:138|171:219,1,93.5,2|0,0:0|0:0,0:0:0:0: +357,153,202051,2,0,P|364:198|384:277,1,93.5,8|0,0:0|0:0,0:0:0:0: +427,341,202281,5,2,0:0:0:0: +449,182,202397,1,0,0:0:0:0: +287,258,202512,2,0,L|190:278,1,93.5,8|0,0:0|0:0,0:0:0:0: +10,123,202743,2,0,B|78:138|78:138|103:170|103:170|182:186,1,187,2|8,0:0|0:0,0:0:0:0: +249,122,203089,1,0,0:0:0:0: +173,0,203204,6,0,P|165:46|162:92,1,93.5,2|0,0:0|0:0,0:0:0:0: +327,194,203435,2,0,P|334:147|337:101,1,93.5,8|0,0:0|0:0,0:0:0:0: +78,274,203666,2,0,P|159:213|264:257,1,187,2|8,0:0|0:0,0:0:0:0: +297,307,204012,1,0,0:0:0:0: +379,366,204127,6,0,P|387:315|390:269,1,93.5,2|0,0:0|0:0,0:0:0:0: +327,194,204358,1,8,0:0:0:0: +357,100,204474,1,0,0:0:0:0: +512,159,204589,6,0,L|420:176,1,93.5,2|0,0:0|0:0,0:0:0:0: +268,121,204820,1,8,0:0:0:0: +385,12,204935,1,0,0:0:0:0: +357,100,205051,6,0,L|160:75,1,187,2|8,0:0|0:0,0:0:0:0: +1,107,205397,1,0,0:0:0:0: +78,143,205512,2,0,B|94:114|94:114|74:32,1,93.5,2|0,0:0|0:0,0:0:0:0: +1,291,205743,2,0,B|-15:320|-15:320|5:402,1,93.5,8|0,0:0|0:0,0:0:0:0: +130,229,205974,6,0,L|7:215,1,93.5,2|0,0:0|0:0,0:0:0:0: +183,327,206204,1,8,0:0:0:0: +234,177,206320,1,0,0:0:0:0: +286,277,206435,2,0,P|374:289|468:223,1,187,2|8,0:0|0:0,0:0:0:0: +425,123,206781,1,0,0:0:0:0: +322,180,206897,6,0,P|224:170|135:140,1,187,2|8,0:0|0:0,0:0:0:0: +140,142,207358,2,0,P|150:195|154:258,1,93.5,2|0,0:0|0:0,0:0:0:0: +323,370,207589,2,0,P|313:317|309:254,1,93.5,8|0,0:0|0:0,0:0:0:0: +62,268,207820,6,0,P|127:324|222:300,1,187,2|8,0:0|0:0,0:0:0:0: +243,204,208166,1,0,0:0:0:0: +309,277,208281,2,0,P|365:282|426:290,1,93.5,2|0,0:0|0:0,0:0:0:0: +461,105,208512,2,0,P|404:99|344:92,1,93.5,8|0,0:0|0:0,0:0:0:0: +481,338,208743,6,0,P|492:262|383:195,2,187,2|8|2,0:0|0:0|0:0,0:0:0:0: +323,370,209320,1,0,0:0:0:0: +309,277,209435,6,0,L|289:153,1,93.5,8|0,0:0|0:0,0:0:0:0: +145,71,209666,2,0,L|262:115,1,93.5,2|0,0:0|0:0,0:0:0:0: +401,28,209897,2,0,L|303:107,1,93.5,8|0,0:0|0:0,0:0:0:0: +206,195,210127,5,2,0:0:0:0: +263,16,210243,1,0,0:0:0:0: +380,159,210358,1,8,0:0:0:0: +380,159,210589,6,0,P|333:151|288:141,1,93.5,2|0,0:0|0:0,0:0:0:0: +197,96,210820,1,8,0:0:0:0: +116,158,210935,1,0,0:0:0:0: +12,43,211051,6,0,P|58:50|103:60,1,93.5,2|0,0:0|0:0,0:0:0:0: +206,195,211281,1,8,0:0:0:0: +278,43,211397,1,0,0:0:0:0: +448,187,211512,6,0,P|357:198|287:140,1,187,2|8,0:0|0:0,0:0:0:0: +197,96,211858,1,0,0:0:0:0: +206,195,211974,5,10,0:0:0:0: +353,85,212089,1,0,0:0:0:0: +234,360,212204,1,8,0:0:0:0: +116,158,212320,1,8,0:0:0:0: +320,269,212435,6,0,P|392:256|515:238,1,187,6|8,0:0|0:0,0:0:0:0: +456,334,212781,1,0,0:0:0:0: +354,166,212897,2,0,P|282:179|159:197,1,187,2|8,0:0|0:0,0:0:0:0: +65,238,213243,1,0,0:0:0:0: +129,370,213358,6,0,P|139:303|154:247,1,93.5,2|0,0:0|0:0,0:0:0:0: +81,67,213589,1,8,0:0:0:0: +81,67,213820,2,0,P|90:112|96:159,1,93.5,2|0,0:0|0:0,0:0:0:0: +60,324,214051,1,8,0:0:0:0: +224,263,214166,1,0,0:0:0:0: +65,238,214281,6,0,L|-38:229,1,93.5,2|0,0:0|0:0,0:0:0:0: +130,367,214512,1,8,0:0:0:0: +304,314,214628,1,0,0:0:0:0: +224,263,214743,2,0,B|206:293|206:293|221:349,1,93.5,2|0,0:0|0:0,0:0:0:0: +366,147,214974,2,0,B|384:117|384:117|368:60,1,93.5,8|0,0:0|0:0,0:0:0:0: +204,176,215204,5,2,0:0:0:0: +361,243,215320,1,0,0:0:0:0: +294,103,215435,2,0,L|287:201,1,93.5,8|0,0:0|0:0,0:0:0:0: +50,91,215666,2,0,P|102:47|225:55,1,187,2|8,0:0|0:0,0:0:0:0: +432,36,216012,5,8,0:0:0:0: +432,36,216070,1,8,0:0:0:0: +432,36,216127,2,0,P|383:29|310:9,1,93.5,2|0,0:0|0:0,0:0:0:0: +393,222,216358,2,0,P|426:189|462:159,1,93.5,8|0,0:0|0:0,0:0:0:0: +295,134,216589,2,0,P|218:137|115:203,1,187,2|8,0:0|0:0,0:0:0:0: +48,248,216935,1,0,0:0:0:0: +18,62,217051,6,0,L|41:158,1,93.5,2|0,0:0|0:0,0:0:0:0: +131,296,217281,2,0,B|143:228|143:228|125:193|125:193|141:100,1,187,8|2,0:0|0:0,0:0:0:0: +279,110,217627,2,0,L|216:186,1,93.5,0|8,0:0|0:0,0:0:0:0: +131,296,217858,1,0,0:0:0:0: +194,368,217974,6,0,P|223:323|219:266,1,93.5,2|0,0:0|0:0,0:0:0:0: +48,248,218204,2,0,P|35:292|46:337,1,93.5,8|0,0:0|0:0,0:0:0:0: +274,225,218435,6,0,L|299:115,1,93.5,2|0,0:0|0:0,0:0:0:0: +2,80,218666,2,0,L|22:171,1,93.5,8|0,0:0|0:0,0:0:0:0: +254,53,218897,6,0,P|224:17|104:42,1,140.25,2|0,0:0|0:0,0:0:0:0: +195,199,219127,6,0,P|238:181|266:111,1,98.1749970039369,8|0,0:0|0:0,0:0:0:0: +82,73,219358,6,0,P|76:119|145:189,1,126.224996147919,2|0,2:0|2:0,2:0:0:0: +171,134,219589,6,0,L|182:63,1,56.0999982879639,8|0,0:0|0:0,0:0:0:0: +327,237,219820,6,0,P|229:220|153:292,1,187,2|8,0:0|0:0,0:0:0:0: +0,315,220166,1,0,0:0:0:0: +71,260,220281,2,0,B|87:291|87:291|74:358,1,93.5,2|0,0:0|0:0,0:0:0:0: +96,99,220512,2,0,B|80:68|80:68|93:1,1,93.5,8|0,0:0|0:0,0:0:0:0: +121,182,220743,6,0,L|9:170,1,93.5,2|0,0:0|0:0,0:0:0:0: +161,53,220974,1,8,0:0:0:0: +242,151,221089,1,0,0:0:0:0: +281,9,221204,2,0,P|379:-2|471:71,1,187,2|8,0:0|0:0,0:0:0:0: +389,306,221551,5,8,0:0:0:0: +389,306,221608,1,8,0:0:0:0: +389,306,221666,2,0,P|370:262|376:195,1,93.5,2|0,0:0|0:0,0:0:0:0: +427,130,221897,2,0,L|234:151,1,187,8|2,0:0|0:0,0:0:0:0: +120,283,222243,1,0,0:0:0:0: +210,299,222358,6,0,P|200:259|163:181,1,93.5,8|0,0:0|0:0,0:0:0:0: +267,2,222589,2,0,P|237:30|188:101,1,93.5,2|0,0:0|0:0,0:0:0:0: +0,103,222820,2,0,P|39:114|125:121,1,93.5,8|0,0:0|0:0,0:0:0:0: +301,317,223051,6,0,P|261:305|175:298,1,93.5,2|0,0:0|0:0,0:0:0:0: +122,344,223281,1,8,0:0:0:0: +180,210,223397,1,0,0:0:0:0: +323,244,223512,6,0,P|384:252|484:175,1,187,2|8,0:0|0:0,0:0:0:0: +425,99,223858,2,0,P|364:91|264:168,1,187,2|2,0:0|0:0,0:0:0:0: +180,210,224204,2,0,L|68:197,1,93.5,8|0,0:0|0:0,0:0:0:0: +5,166,224435,5,2,0:0:0:0: +64,286,224551,1,0,0:0:0:0: +154,124,224666,2,0,B|171:92|171:92|154:13,1,93.5,8|0,0:0|0:0,0:0:0:0: +84,78,224897,5,2,0:0:0:0: +241,118,225012,1,0,0:0:0:0: +84,78,225127,2,0,L|-13:89,1,93.5,8|0,0:0|0:0,0:0:0:0: +149,260,225358,6,0,B|251:234|212:312|352:265,1,187,2|8,0:0|0:0,0:0:0:0: +448,184,225704,2,0,B|324:153|324:153|310:177|284:198,1,187,2|2,0:0|0:0,0:0:0:0: +406,360,226051,2,0,P|412:311|418:257,1,93.5,8|0,0:0|0:0,0:0:0:0: +380,80,226281,1,2,0:0:0:0: +380,80,226512,5,8,0:0:0:0: +502,257,226627,1,2,0:0:0:0: +480,115,226743,5,2,0:0:0:0: +396,231,226858,1,8,0:0:0:0: +485,129,226974,5,8,0:0:0:0: +393,213,227089,1,8,0:0:0:0: +439,171,227204,6,0,L|296:157,1,140.25,2|2,0:0|0:0,0:0:0:0: +299,157,228588,6,0,P|275:197|283:252,1,93.5,2|0,0:0|0:0,0:0:0:0: +422,93,229280,2,0,P|428:47|407:6,1,93.5,2|0,0:0|0:0,0:0:0:0: +324,0,229973,1,2,0:0:0:0: +238,105,230204,5,0,0:0:0:0: +172,136,230434,1,0,0:0:0:0: +180,63,230665,1,0,0:0:0:0: +250,215,230896,6,0,L|231:364,1,140.25,2|2,0:0|0:0,0:0:0:0: +232,354,232280,6,0,L|125:371,1,93.5 +289,280,232973,2,0,L|396:297,1,93.5,2|0,0:0|0:0,0:0:0:0: +212,226,233665,1,2,0:0:0:0: +356,119,233896,5,0,0:0:0:0: +304,62,234127,1,0,0:0:0:0: +231,74,234357,1,0,0:0:0:0: +73,213,234588,6,0,L|216:227,1,140.25,2|2,0:0|0:0,0:0:0:0: +213,227,235973,6,0,P|237:187|229:132,1,93.5,2|0,0:0|0:0,0:0:0:0: +90,291,236665,2,0,P|83:336|107:379,1,93.5,2|0,0:0|0:0,0:0:0:0: +209,330,237357,6,0,L|147:318,1,46.75,2|0,0:0|0:0,0:0:0:0: +122,166,237819,1,0,0:0:0:0: +303,228,238050,1,0,0:0:0:0: +198,241,238280,6,0,P|161:169|186:107,1,140.25,2|0,0:0|0:0,0:0:0:0: +340,37,239204,5,0,0:0:0:0: +402,74,239434,1,0,0:0:0:0: +470,63,239665,1,2,0:0:0:0: +427,182,239896,5,0,0:0:0:0: +497,206,240127,1,0,0:0:0:0: +362,265,240357,5,2,0:0:0:0: +417,309,240588,1,0,0:0:0:0: +429,379,240819,1,0,0:0:0:0: +256,224,241050,5,2,0:0:0:0: +219,285,241280,1,0,0:0:0:0: +184,198,241511,1,0,0:0:0:0: +162,327,241742,1,0,0:0:0:0: +110,203,241973,6,0,P|64:196|16:229,1,93.5,2|2,0:0|0:0,0:0:0:0: +140,135,242665,2,0,P|148:95|140:71,1,46.75,2|0,0:0|0:0,0:0:0:0: +96,37,243127,1,2,0:0:0:0: +75,103,243357,1,0,0:0:0:0: +215,150,243588,5,2,0:0:0:0: +322,47,243819,1,0,0:0:0:0: +396,39,244050,2,0,L|448:32,1,46.75,2|0,0:0|0:0,0:0:0:0: +497,144,244511,2,0,L|395:133,1,93.5,2|0,0:0|0:0,0:0:0:0: +335,257,245204,1,0,0:0:0:0: +363,327,245434,6,0,P|405:282|382:203,1,140.25,2|0,0:0|0:0,0:0:0:0: +265,264,246357,1,2,0:0:0:0: +210,314,246588,1,0,0:0:0:0: +140,294,246819,2,0,P|132:264|133:230,1,46.75,2|0,0:0|0:0,0:0:0:0: +91,67,247280,5,2,0:0:0:0: +166,57,247511,2,0,P|163:80|157:102,1,46.75,2|0,0:0|0:0,0:0:0:0: +132,178,247973,2,0,L|194:170,2,46.75 +309,221,248665,1,2,0:0:0:0: +379,95,248896,1,0,0:0:0:0: +238,21,249127,6,0,P|228:61|228:79,1,46.75,2|0,0:0|0:0,0:0:0:0: +212,135,249588,1,0,0:0:0:0: +225,207,249819,1,2,0:0:0:0: +356,282,250050,6,0,P|366:242|366:224,1,46.75 +382,168,250511,1,0,0:0:0:0: +464,93,250742,6,0,B|441:76|441:76|363:99,1,93.5,2|0,0:0|0:0,0:0:0:0: +310,194,251550,2,0,L|228:184,1,70.1250026750566 +210,103,252247,1,0,0:0:0:0: +210,103,252702,6,0,L|141:111,1,70.1250026750566,2|0,0:0|0:0,0:0:0:0: +117,195,253506,1,2,0:0:0:0: +117,195,254095,6,0,L|36:184,1,70.1250026750566,2|2,0:0|0:0,0:0:0:0: +19,113,255580,1,2,0:0:0:0: +71,53,256480,6,0,P|126:48|182:100,1,122.718754681349,2|0,0:0|0:0,0:0:0:0: +211,259,257747,6,0,P|179:213|190:158,1,105.187504012585,2|0,0:0|0:0,0:0:0:0: +474,66,258892,6,0,P|433:121|242:116,1,271.734385365844,2|0,0:0|0:0,0:0:0:0: +210,216,263197,6,0,P|298:232|385:279,1,187,6|8,0:0|0:0,0:0:0:0: +456,330,263543,1,0,0:0:0:0: +465,242,263658,2,0,P|478:185|512:56,1,187,2|8,0:0|0:0,0:0:0:0: +425,84,264004,1,0,0:0:0:0: +368,19,264120,6,0,P|319:14|246:5,1,93.5,2|0,0:0|0:0,0:0:0:0: +280,139,264350,2,0,P|326:143|372:149,1,93.5,8|0,0:0|0:0,0:0:0:0: +197,57,264581,5,2,0:0:0:0: +121,35,264697,1,2,0:0:0:0: +50,67,264812,1,8,0:0:0:0: +21,139,264927,1,2,0:0:0:0: +37,213,265043,6,0,P|129:220|234:235,1,187,2|8,0:0|0:0,0:0:0:0: +314,216,265389,1,0,0:0:0:0: +283,308,265504,2,0,P|223:365|112:339,1,187,2|8,0:0|0:0,0:0:0:0: +57,295,265850,1,0,0:0:0:0: +142,255,265966,6,0,P|154:195|160:137,1,93.5,2|0,0:0|0:0,0:0:0:0: +52,120,266197,2,0,P|40:180|34:238,1,93.5,8|0,0:0|0:0,0:0:0:0: +217,109,266427,5,2,0:0:0:0: +297,102,266543,1,2,0:0:0:0: +368,138,266658,1,8,0:0:0:0: +406,207,266773,1,2,0:0:0:0: +404,283,266889,6,0,P|417:225|461:68,1,187,2|8,0:0|0:0,0:0:0:0: +503,22,267235,1,0,0:0:0:0: +411,13,267350,2,0,P|364:19|310:27,1,93.5,2|0,0:0|0:0,0:0:0:0: +237,75,267581,1,8,0:0:0:0: +169,6,267697,1,0,0:0:0:0: +148,102,267812,6,0,P|154:148|162:203,1,93.5,2|0,0:0|0:0,0:0:0:0: +333,216,268043,2,0,P|326:169|319:115,1,93.5,8|0,0:0|0:0,0:0:0:0: +63,146,268273,5,2,0:0:0:0: +11,206,268389,1,2,0:0:0:0: +2,283,268504,1,8,0:0:0:0: +36,352,268620,1,2,0:0:0:0: +107,381,268735,6,0,P|191:364|304:347,1,187,2|8,0:0|0:0,0:0:0:0: +370,299,269081,1,0,0:0:0:0: +333,216,269197,2,0,P|339:159|351:93,1,93.5,2|0,0:0|0:0,0:0:0:0: +288,44,269427,1,8,0:0:0:0: +368,2,269543,1,0,0:0:0:0: +512,90,269658,6,0,L|420:77,1,93.5,2|0,0:0|0:0,0:0:0:0: +173,113,269889,2,0,L|265:126,1,93.5,8|0,0:0|0:0,0:0:0:0: +381,222,270120,5,2,0:0:0:0: +306,244,270235,1,2,0:0:0:0: +232,267,270350,1,8,0:0:0:0: +158,289,270466,1,10,0:0:0:0: +154,280,270523,1,8,0:0:0:0: +150,272,270581,6,0,P|152:245|165:215,1,46.75,2|0,0:0|0:0,0:0:0:0: +136,76,270697,2,0,P|159:91|178:117,1,46.75,2|0,0:0|0:0,0:0:0:0: +318,154,270812,2,0,P|294:166|262:170,1,46.75,8|0,0:0|0:0,0:0:0:0: +103,158,270927,6,0,L|25:170,2,46.75,2|0|2,0:0|0:0|0:0,0:0:0:0: +407,33,271158,2,0,L|360:25,1,46.75,2|0,0:0|0:0,0:0:0:0: +216,97,271273,5,10,0:0:0:0: +221,91,271331,1,2,0:0:0:0: +227,87,271389,1,2,0:0:0:0: +235,86,271447,1,2,0:0:0:0: +243,87,271504,2,0,P|274:131|263:194,1,93.5,2|0,0:0|0:0,0:0:0:0: +389,311,271735,5,10,0:0:0:0: +367,268,271793,1,2,0:0:0:0: +377,221,271850,1,2,0:0:0:0: +417,190,271908,1,2,0:0:0:0: +466,194,271966,2,0,P|494:212|507:243,3,46.75,2|0|0|0,0:0|0:0|0:0|0:0,0:0:0:0: +439,260,272197,6,0,P|427:214|418:131,1,93.5,8|2,0:0|0:0,0:0:0:0: +436,94,272370,1,2,0:0:0:0: +441,88,272427,5,2,0:0:0:0: +391,121,272485,1,0,0:0:0:0: +334,118,272543,1,2,0:0:0:0: +285,90,272600,1,0,0:0:0:0: +262,39,272658,1,8,0:0:0:0: +219,3,272716,1,0,0:0:0:0: +163,0,272773,2,0,L|110:14,1,46.75,2|0,0:0|0:0,0:0:0:0: +13,60,272889,5,10,0:0:0:0: +49,87,272947,1,8,0:0:0:0: +61,128,273004,1,8,0:0:0:0: +53,174,273062,1,8,0:0:0:0: +26,207,273120,1,8,0:0:0:0: +13,249,273177,1,0,0:0:0:0: +21,291,273235,2,0,L|33:337,1,46.75,2|0,0:0|0:0,0:0:0:0: +126,380,273350,5,2,0:0:0:0: +162,383,273408,1,2,0:0:0:0: +194,367,273466,1,2,0:0:0:0: +213,339,273523,1,2,0:0:0:0: +242,320,273581,1,10,0:0:0:0: +277,322,273639,1,2,0:0:0:0: +307,345,273697,1,2,0:0:0:0: +343,352,273754,1,2,0:0:0:0: +375,334,273812,6,0,P|383:286|383:218,1,93.5,10|2,0:0|0:0,0:0:0:0: +380,221,273985,1,2,0:0:0:0: +370,203,274043,2,0,L|477:218,1,93.5,2|2,0:0|0:0,0:0:0:0: +263,211,274273,6,0,L|156:196,1,93.5,2|0,0:0|0:0,0:0:0:0: +103,234,274447,1,0,0:0:0:0: +103,234,274504,2,0,B|92:199|92:199|114:119,1,93.5,8|0,0:0|0:0,0:0:0:0: +315,46,274735,2,0,B|326:81|326:81|304:161,1,93.5,2|0,0:0|0:0,0:0:0:0: +248,83,274908,1,0,0:0:0:0: +248,83,274966,2,0,L|141:68,1,93.5,8|0,0:0|0:0,0:0:0:0: +18,156,275197,5,2,0:0:0:0: +115,326,275312,1,0,0:0:0:0: +115,326,275370,1,0,0:0:0:0: +115,326,275427,2,0,P|111:281|101:226,1,93.5,8|0,0:0|0:0,0:0:0:0: +218,50,275658,2,0,P|222:95|232:150,1,93.5,2|0,0:0|0:0,0:0:0:0: +307,291,275889,2,0,L|411:280,1,93.5,8|0,0:0|0:0,0:0:0:0: +471,313,276062,1,0,0:0:0:0: +471,313,276120,6,0,B|478:289|478:289|474:256,7,46.75,2|0|0|0|8|0|0|0,0:0|0:0|0:0|0:0|0:0|0:0|0:0|0:0,0:0:0:0: +372,161,276581,2,0,B|365:185|365:185|369:218,7,46.75,2|0|0|0|8|0|0|0,0:0|0:0|0:0|0:0|0:0|0:0|0:0|0:0,0:0:0:0: +446,195,277043,5,10,0:0:0:0: +234,69,277158,1,8,0:0:0:0: +307,291,277273,1,8,0:0:0:0: +495,131,277389,1,8,0:0:0:0: +327,42,277504,5,2,0:0:0:0: +321,85,277562,1,0,0:0:0:0: +303,124,277620,1,8,0:0:0:0: +271,153,277677,1,8,0:0:0:0: +231,167,277735,1,8,0:0:0:0: +188,170,277793,1,8,0:0:0:0: +147,161,277850,1,8,0:0:0:0: +108,142,277908,1,8,0:0:0:0: +80,111,277966,6,0,P|26:157|22:280,1,187,6|8,0:0|0:0,0:0:0:0: +84,330,278312,2,0,B|188:306|163:368|273:346,1,187,2|2,0:0|0:0,0:0:0:0: +351,312,278658,2,0,P|405:318|475:352,1,93.5,8|0,0:0|0:0,0:0:0:0: +277,257,278889,1,2,0:0:0:0: +277,257,279004,2,0,P|257:178|251:64,1,187,2|2,0:0|0:0,0:0:0:0: +321,3,279350,2,0,P|345:47|344:104,1,93.5,2|0,0:0|0:0,0:0:0:0: +178,142,279581,2,0,P|154:98|155:41,1,93.5,8|0,0:0|0:0,0:0:0:0: +250,72,279812,6,0,P|354:88|472:115,1,187,2|8,0:0|0:0,0:0:0:0: +452,198,280158,2,0,P|348:182|230:155,1,187,2|2,0:0|0:0,0:0:0:0: +208,235,280504,2,0,P|217:284|225:329,1,93.5,8|0,0:0|0:0,0:0:0:0: +125,215,280735,1,2,0:0:0:0: +125,215,280850,2,0,P|72:224|-13:122,1,187,2|2,0:0|0:0,0:0:0:0: +62,10,281197,2,0,P|69:52|67:110,1,93.5,2|0,0:0|0:0,0:0:0:0: +189,148,281427,2,0,P|187:101|194:55,1,93.5,8|0,0:0|0:0,0:0:0:0: +205,40,281600,1,0,0:0:0:0: +218,29,281658,6,0,P|303:43|413:60,1,187,2|8,0:0|0:0,0:0:0:0: +489,32,282004,2,0,P|524:69|499:203,1,187,2|2,0:0|0:0,0:0:0:0: +424,242,282350,2,0,P|416:191|412:130,1,93.5,8|0,0:0|0:0,0:0:0:0: +491,313,282581,1,2,0:0:0:0: +491,313,282697,2,0,P|427:279|296:283,1,187,2|2,0:0|0:0,0:0:0:0: +239,360,283043,2,0,P|230:291|217:234,1,93.5,2|0,0:0|0:0,0:0:0:0: +266,106,283273,2,0,P|275:175|288:232,1,93.5,8|0,0:0|0:0,0:0:0:0: +148,315,283504,6,0,P|91:273|-20:294,1,187,2|8,0:0|0:0,0:0:0:0: +162,217,283850,2,0,P|218:204|365:170,1,187,2|2,0:0|0:0,0:0:0:0: +95,87,284197,2,0,L|85:183,1,93.5,8|0,0:0|0:0,0:0:0:0: +61,358,284427,5,2,0:0:0:0: +61,358,284543,1,8,0:0:0:0: +227,288,284658,1,8,0:0:0:0: +227,288,284773,1,2,0:0:0:0: +159,375,284889,2,0,L|137:213,1,140.25,2|0,0:0|0:0,0:0:0:0: +216,73,285120,2,0,B|200:187|200:187|183:168|163:153,1,140.25,8|0,0:0|0:0,0:0:0:0: +121,113,285350,6,0,L|327:79,1,187,6|8,0:0|0:0,0:0:0:0: +377,144,285697,2,0,P|433:102|408:-9,1,187,2|2,0:0|0:0,0:0:0:0: +299,161,286043,2,0,L|285:253,1,93.5,8|0,0:0|0:0,0:0:0:0: +248,96,286273,1,2,0:0:0:0: +248,96,286389,2,0,P|202:52|83:71,1,187,2|2,0:0|0:0,0:0:0:0: +0,199,286735,2,0,P|51:195|108:172,1,93.5,2|0,0:0|0:0,0:0:0:0: +285,253,286966,2,8,P|239:229|196:185,1,93.5 +160,122,287197,6,0,L|126:341,1,187,2|8,0:0|0:0,0:0:0:0: +196,371,287543,2,0,P|276:320|373:351,1,187,2|2,0:0|0:0,0:0:0:0: +430,284,287889,2,0,P|479:295|538:303,1,93.5,8|0,0:0|0:0,0:0:0:0: +349,246,288120,1,2,0:0:0:0: +349,246,288235,2,0,P|336:185|319:51,1,187,2|2,0:0|0:0,0:0:0:0: +382,5,288581,2,0,L|491:21,1,93.5,2|0,0:0|0:0,0:0:0:0: +245,108,288812,2,0,L|136:92,1,93.5,8|0,0:0|0:0,0:0:0:0: +139,86,288985,1,0,0:0:0:0: +124,78,289043,6,0,P|142:128|46:249,1,187,2|8,0:0|0:0,0:0:0:0: +29,315,289389,2,0,P|114:328|249:358,1,187,2|2,0:0|0:0,0:0:0:0: +301,334,289735,2,0,P|292:280|283:203,1,93.5,8|0,0:0|0:0,0:0:0:0: +195,82,289966,1,2,0:0:0:0: +195,82,290081,2,0,B|163:199|163:199|209:254,1,187,2|2,0:0|0:0,0:0:0:0: +365,164,290427,2,0,L|258:148,1,93.5,2|0,0:0|0:0,0:0:0:0: +375,307,290658,2,0,L|482:323,1,93.5,8|0,0:0|0:0,0:0:0:0: +505,239,290889,6,0,P|519:179|483:55,1,187,2|8,0:0|0:0,0:0:0:0: +408,9,291235,2,0,P|334:30|193:48,1,187,2|2,0:0|0:0,0:0:0:0: +155,110,291581,2,0,P|118:102|55:94,1,93.5,8|0,0:0|0:0,0:0:0:0: +245,138,291812,2,0,P|285:200|249:315,1,187,2|8,0:0|0:0,0:0:0:0: +186,368,292158,1,0,0:0:0:0: +0,252,292273,6,0,L|147:236,1,140.25,2|0,0:0|0:0,0:0:0:0: +179,271,292504,2,0,L|82:282,1,93.5,8|0,0:0|0:0,0:0:0:0: +43,150,292735,2,0,L|139:138,1,93.5,2|0,0:0|0:0,0:0:0:0: +378,221,292966,2,0,P|309:240|212:164,1,187,8|2,0:0|0:0,0:0:0:0: +132,54,293312,1,0,0:0:0:0: +227,0,293427,2,0,L|205:119,1,93.5,8|0,0:0|0:0,0:0:0:0: +147,222,293658,5,2,0:0:0:0: +132,54,293773,1,0,0:0:0:0: +285,131,293889,2,0,P|331:141|388:146,1,93.5,8|0,0:0|0:0,0:0:0:0: +450,101,294120,5,2,0:0:0:0: +363,231,294235,1,2,0:0:0:0: +334,58,294350,1,8,0:0:0:0: +441,199,294466,1,2,0:0:0:0: +303,296,294581,6,0,L|254:308,3,46.75,2|2|2|0,0:0|0:0|0:0|0:0,0:0:0:0: +204,367,294812,2,0,L|158:355,3,46.75,8|2|8|2,0:0|0:0|0:0|0:0,0:0:0:0: +80,363,295043,1,2,0:0:0:0: +45,330,295100,1,2,0:0:0:0: +26,288,295158,1,10,0:0:0:0: +18,242,295216,1,2,0:0:0:0: +22,195,295273,1,2,0:0:0:0: +39,149,295331,1,2,0:0:0:0: +71,111,295389,1,2,0:0:0:0: +116,93,295447,1,2,0:0:0:0: +168,92,295504,6,0,L|391:131,1,187,6|8,0:0|0:0,0:0:0:0: +444,197,295850,1,0,0:0:0:0: +338,248,295966,2,0,L|115:209,1,187,2|8,0:0|0:0,0:0:0:0: +54,275,296312,1,0,0:0:0:0: +152,341,296427,2,0,L|268:360,1,93.5,2|0,0:0|0:0,0:0:0:0: +499,283,296658,2,0,P|473:256|339:249,1,140.25,8|0,0:0|0:0,0:0:0:0: +338,248,296889,2,0,L|324:124,1,93.5,2|0,0:0|0:0,0:0:0:0: +420,129,297120,1,8,0:0:0:0: +397,335,297235,1,0,0:0:0:0: +240,266,297350,6,0,B|197:242|197:242|56:271,1,187,2|8,0:0|0:0,0:0:0:0: +143,23,297697,2,0,B|186:47|186:47|327:18,1,187,2|2,0:0|0:0,0:0:0:0: +150,163,298043,2,0,L|50:147,1,93.5,8|0,0:0|0:0,0:0:0:0: +264,129,298273,2,0,B|334:122|334:122|371:146|371:146|460:136,1,187,2|8,0:0|0:0,0:0:0:0: +306,208,298620,2,0,L|270:313,1,93.5,0|2,0:0|0:0,0:0:0:0: +443,137,298850,5,10,0:0:0:0: +321,20,298966,1,8,0:0:0:0: +390,236,299081,1,10,0:0:0:0: +465,59,299197,6,0,B|352:46|412:116|277:97,1,187,2|8,0:0|0:0,0:0:0:0: +75,82,299543,1,0,0:0:0:0: +75,82,299658,2,0,P|122:26|258:65,1,187,2|8,0:0|0:0,0:0:0:0: +214,214,300004,1,0,0:0:0:0: +214,214,300120,2,0,L|194:102,1,93.5,2|0,0:0|0:0,0:0:0:0: +325,194,300350,2,0,L|303:362,1,140.25,8|0,0:0|0:0,0:0:0:0: +332,378,300581,2,0,L|222:364,1,93.5,2|0,0:0|0:0,0:0:0:0: +391,266,300812,2,0,L|501:280,1,93.5,8|0,0:0|0:0,0:0:0:0: +237,290,301043,6,0,L|42:262,1,187,2|8,0:0|0:0,0:0:0:0: +0,154,301389,1,0,0:0:0:0: +53,47,301504,2,0,L|248:75,1,187,2|8,0:0|0:0,0:0:0:0: +290,183,301850,1,0,0:0:0:0: +237,290,301966,2,0,L|138:275,1,93.5,2|0,0:0|0:0,0:0:0:0: +348,127,302197,2,0,L|447:112,1,93.5,8|0,0:0|0:0,0:0:0:0: +482,321,302427,2,0,P|448:268|318:266,1,187,2|8,0:0|0:0,0:0:0:0: +212,183,302773,1,0,0:0:0:0: +296,62,302889,6,0,P|307:111|306:171,1,93.5,2|0,0:0|0:0,0:0:0:0: +144,275,303120,2,0,P|133:226|134:166,1,93.5,8|0,0:0|0:0,0:0:0:0: +289,328,303350,2,0,B|183:302|233:387|95:356,1,187,2|8,0:0|0:0,0:0:0:0: +42,263,303697,1,0,0:0:0:0: +132,182,303812,6,0,P|180:125|149:5,1,187,2|8,0:0|0:0,0:0:0:0: +68,39,304158,1,0,0:0:0:0: +68,39,304273,2,0,P|55:75|49:136,1,93.5,2|0,0:0|0:0,0:0:0:0: +269,175,304504,2,0,P|282:139|288:78,1,93.5,8|0,0:0|0:0,0:0:0:0: +163,20,304735,6,0,P|173:115|183:232,1,187,2|8,0:0|0:0,0:0:0:0: +146,296,305081,2,0,P|197:258|325:295,1,187,2|2,0:0|0:0,0:0:0:0: +378,353,305427,1,8,0:0:0:0: +470,323,305543,1,0,0:0:0:0: +403,252,305658,6,0,P|411:158|421:65,1,187,2|8,0:0|0:0,0:0:0:0: +353,1,306004,1,0,0:0:0:0: +248,105,306120,2,0,P|304:107|352:65,1,93.5,2|0,0:0|0:0,0:0:0:0: +178,48,306350,2,0,P|136:26|91:31,1,93.5,8|0,0:0|0:0,0:0:0:0: +67,171,306581,6,0,P|56:224|49:280,1,93.5,2|0,0:0|0:0,0:0:0:0: +101,341,306812,1,8,0:0:0:0: +196,332,306927,1,0,0:0:0:0: +148,251,307043,2,0,P|207:210|328:230,1,187,2|8,0:0|0:0,0:0:0:0: +395,165,307389,1,0,0:0:0:0: +327,32,307504,6,0,P|315:80|308:129,1,93.5,2|0,0:0|0:0,0:0:0:0: +379,356,307735,2,0,P|391:308|398:259,1,93.5,8|0,0:0|0:0,0:0:0:0: +511,90,307966,6,0,L|483:-25,1,93.5,2|0,0:0|0:0,0:0:0:0: +473,292,308197,2,0,L|495:382,1,93.5,8|0,0:0|0:0,0:0:0:0: +512,192,308427,5,2,0:0:0:0: +418,163,308543,1,0,0:0:0:0: +375,249,308658,1,8,0:0:0:0: +379,256,308889,5,2,0:0:0:0: +281,219,309004,1,10,0:0:0:0: +275,203,309062,1,2,0:0:0:0: +271,188,309120,1,10,0:0:0:0: +268,171,309177,1,10,0:0:0:0: +265,156,309235,1,10,0:0:0:0: +264,140,309293,1,10,0:0:0:0: +263,124,309350,5,2,0:0:0:0: +233,165,309408,1,2,0:0:0:0: +189,185,309466,1,2,0:0:0:0: +142,183,309523,1,2,0:0:0:0: +105,155,309581,1,10,0:0:0:0: +86,111,309639,1,2,0:0:0:0: +90,63,309697,1,10,0:0:0:0: +122,27,309754,1,2,0:0:0:0: +169,16,309812,6,0,L|237:24,1,46.75,10|2,0:0|0:0,0:0:0:0: +263,124,309927,2,0,L|331:116,1,46.75,10|2,0:0|0:0,0:0:0:0: +361,42,310043,2,0,L|429:50,1,46.75,10|2,0:0|0:0,0:0:0:0: +495,106,310158,1,10,0:0:0:0: +495,106,310216,1,10,0:0:0:0: +495,106,310273,6,0,L|480:318,1,187,6|8,0:0|0:0,0:0:0:0: +428,371,310620,1,0,0:0:0:0: +316,222,310735,2,0,L|329:35,1,187,2|8,0:0|0:0,0:0:0:0: +242,71,311081,1,0,0:0:0:0: +316,222,311197,6,0,P|382:211|413:234,1,93.5,2|0,0:0|0:0,0:0:0:0: +481,292,311427,1,8,0:0:0:0: +481,292,311658,2,0,L|487:198,1,93.5,2|0,0:0|0:0,0:0:0:0: +495,106,311889,1,8,0:0:0:0: +316,222,312004,1,0,0:0:0:0: +428,371,312120,6,0,B|342:392|328:324|229:344,1,187,2|8,0:0|0:0,0:0:0:0: +157,369,312466,1,0,0:0:0:0: +61,235,312581,2,0,P|56:281|74:324,1,93.5,2|0,0:0|0:0,0:0:0:0: +214,214,312812,2,0,P|219:168|201:125,1,93.5,8|0,0:0|0:0,0:0:0:0: +90,63,313043,5,2,0:0:0:0: +146,259,313158,1,0,0:0:0:0: +288,113,313273,2,0,B|307:4,1,93.5,8|0,0:0|0:0,0:0:0:0: +129,166,313504,2,0,B|146:259,1,93.5,2|0,0:0|0:0,0:0:0:0: +178,48,313735,2,0,P|136:67|89:62,1,93.5,8|0,0:0|0:0,0:0:0:0: +357,237,313966,6,0,P|422:175|519:198,1,187,2|8,0:0|0:0,0:0:0:0: +490,283,314312,1,0,0:0:0:0: +465,372,314427,2,0,L|357:354,1,93.5,2|0,0:0|0:0,0:0:0:0: +264,221,314658,2,0,L|372:239,1,93.5,8|0,0:0|0:0,0:0:0:0: +201,356,314889,6,0,P|118:355|52:286,1,140.25,2|0,0:0|0:0,0:0:0:0: +32,263,315120,2,0,L|25:168,1,93.5,8|0,0:0|0:0,0:0:0:0: +258,36,315350,2,0,B|266:125|200:130|215:226,1,187,2|8,0:0|0:0,0:0:0:0: +262,294,315697,1,0,0:0:0:0: +353,237,315812,6,0,B|377:197|377:197|370:141,1,93.5,2|0,0:0|0:0,0:0:0:0: +262,294,316043,2,0,B|238:334|238:334|245:390,1,93.5,8|0,0:0|0:0,0:0:0:0: +372,356,316273,2,0,B|468:339,1,93.5,2|0,0:0|0:0,0:0:0:0: +213,213,316504,2,0,B|117:230,1,93.5,8|0,0:0|0:0,0:0:0:0: +36,14,316735,6,0,P|100:46|93:164,1,187,2|8,0:0|0:0,0:0:0:0: +37,357,317081,1,0,0:0:0:0: +37,357,317197,2,0,P|32:285|138:232,1,187,2|8,0:0|0:0,0:0:0:0: +334,185,317543,1,8,0:0:0:0: +334,185,317600,1,8,0:0:0:0: +334,185,317658,6,0,P|274:224|175:159,1,187,6|8,0:0|0:0,0:0:0:0: +207,84,318004,1,0,0:0:0:0: +387,119,318120,2,0,P|373:181|403:221,1,93.5,2|0,0:0|0:0,0:0:0:0: +491,311,318350,2,0,P|505:249|475:209,1,93.5,8|0,0:0|0:0,0:0:0:0: +222,356,318581,6,0,B|309:359|309:359|334:351|334:351|422:354,1,187,2|8,0:0|0:0,0:0:0:0: +491,311,318927,1,0,0:0:0:0: +304,229,319043,2,0,B|216:232|216:232|191:224|191:224|103:227,1,187,2|8,0:0|0:0,0:0:0:0: +35,184,319389,1,0,0:0:0:0: +197,0,319504,6,0,P|257:80|212:171,1,187,2|8,0:0|0:0,0:0:0:0: +231,155,319966,2,0,P|281:145|329:141,1,93.5,2|0,0:0|0:0,0:0:0:0: +501,305,320197,2,0,P|451:294|403:290,1,93.5,8|0,0:0|0:0,0:0:0:0: +152,382,320427,6,0,P|92:302|137:211,1,187,2|8,0:0|0:0,0:0:0:0: +143,136,320773,1,0,0:0:0:0: +221,242,320889,2,0,P|211:287|207:334,1,93.5,2|0,0:0|0:0,0:0:0:0: +63,159,321120,2,0,P|58:112|49:66,1,93.5,8|0,0:0|0:0,0:0:0:0: +340,49,321350,6,0,P|317:135|231:155,2,187,2|8|2,0:0|0:0|0:0,0:0:0:0: +173,47,321927,1,0,0:0:0:0: +143,136,322043,2,0,L|154:246,1,93.5,8|0,0:0|0:0,0:0:0:0: +400,384,322273,6,0,L|411:274,1,93.5,2|0,0:0|0:0,0:0:0:0: +257,173,322504,2,0,L|332:227,1,93.5,8|0,0:0|0:0,0:0:0:0: +512,154,322735,2,0,L|426:192,1,93.5,2|0,0:0|0:0,0:0:0:0: +256,352,322966,1,8,0:0:0:0: +170,310,323081,1,0,0:0:0:0: +100,373,323197,6,0,L|2:368,1,93.5,2|0,0:0|0:0,0:0:0:0: +152,229,323427,2,0,L|250:224,1,93.5,8|0,0:0|0:0,0:0:0:0: +93,294,323658,2,0,L|-5:289,1,93.5,2|0,0:0|0:0,0:0:0:0: +145,150,323888,2,0,L|243:145,1,93.5,8|0,0:0|0:0,0:0:0:0: +82,221,324120,5,2,0:0:0:0: +69,207,324177,1,2,0:0:0:0: +60,191,324235,1,2,0:0:0:0: +54,173,324293,1,2,0:0:0:0: +52,154,324350,1,10,0:0:0:0: +54,136,324408,1,2,0:0:0:0: +60,118,324466,1,10,0:0:0:0: +70,102,324523,1,10,0:0:0:0: +82,88,324581,5,2,0:0:0:0: +136,92,324638,1,2,0:0:0:0: +176,130,324696,1,10,0:0:0:0: +185,185,324754,1,2,0:0:0:0: +157,233,324811,1,10,0:0:0:0: +129,280,324870,1,10,0:0:0:0: +137,335,324927,1,10,0:0:0:0: +177,373,324985,1,10,0:0:0:0: +232,378,325043,6,0,B|320:375|320:375|344:382|344:382|418:380,1,187,6|8,0:0|0:0,0:0:0:0: +485,314,325389,1,0,0:0:0:0: +267,218,325504,2,0,B|179:215|179:215|155:222|155:222|81:220,1,187,2|8,0:0|0:0,0:0:0:0: +14,154,325850,1,0,0:0:0:0: +323,267,325966,6,0,P|341:225|331:180,1,93.5,2|0,0:0|0:0,0:0:0:0: +250,19,326197,1,8,0:0:0:0: +250,19,326427,2,0,L|240:115,1,93.5,2|0,0:0|0:0,0:0:0:0: +426,191,326658,2,0,L|435:94,1,93.5,8|0,0:0|0:0,0:0:0:0: +82,221,326889,6,0,B|159:244|180:198|267:218,1,187,2|8,0:0|0:0,0:0:0:0: +511,288,327235,1,0,0:0:0:0: +449,357,327350,2,0,B|341:346,1,93.5,2|0,0:0|0:0,0:0:0:0: +332,181,327581,2,0,B|440:192,1,93.5,8|0,0:0|0:0,0:0:0:0: +505,141,327812,5,2,0:0:0:0: +304,46,327927,1,0,0:0:0:0: +323,268,328043,2,0,P|341:229|327:170,1,93.5,8|0,0:0|0:0,0:0:0:0: +155,62,328273,2,0,P|137:101|151:160,1,93.5,2|0,0:0|0:0,0:0:0:0: +248,372,328504,2,0,B|140:383,1,93.5,8|0,0:0|0:0,0:0:0:0: +242,206,328735,6,0,B|297:201|297:201|302:204|302:204|305:200|305:200|433:189,1,187,2|8,0:0|0:0,0:0:0:0: +503,242,329081,1,0,0:0:0:0: +442,9,329197,2,0,B|423:49|423:49|434:97,1,93.5,2|0,0:0|0:0,0:0:0:0: +323,268,329427,2,0,B|341:227|341:227|330:179,1,93.5,8|0,0:0|0:0,0:0:0:0: +155,62,329658,6,0,L|171:222,1,140.25,2|0,0:0|0:0,0:0:0:0: +168,201,329889,2,0,P|123:169|75:182,1,93.5,8|0,0:0|0:0,0:0:0:0: +229,277,330120,2,0,L|322:267,1,93.5,2|0,0:0|0:0,0:0:0:0: +137,335,330350,2,0,L|43:325,1,93.5,8|0,0:0|0:0,0:0:0:0: +309,359,330581,6,0,P|346:302|414:298,1,140.25,2|0,0:0|0:0,0:0:0:0: +415,299,330812,2,0,P|405:251|426:205,1,93.5,8|0,0:0|0:0,0:0:0:0: +512,47,331043,2,0,L|502:140,1,93.5,2|0,0:0|0:0,0:0:0:0: +330,179,331273,2,0,L|339:85,1,93.5,8|0,0:0|0:0,0:0:0:0: +512,320,331504,6,0,B|450:318|452:378|380:370,1,140.25,2|0,0:0|0:0,0:0:0:0: +385,370,331735,2,0,L|291:360,1,93.5,8|0,0:0|0:0,0:0:0:0: +62,381,331966,1,2,0:0:0:0: +161,306,332081,1,8,0:0:0:0: +162,259,332138,1,8,0:0:0:0: +140,219,332196,1,8,0:0:0:0: +101,194,332254,1,8,0:0:0:0: +73,155,332312,1,8,0:0:0:0: +73,108,332370,1,8,0:0:0:0: +96,68,332427,6,0,P|152:99|289:37,1,187,6|8,0:0|0:0,0:0:0:0: +337,9,332773,1,0,0:0:0:0: +421,210,332889,2,0,B|435:170|435:170|418:119,1,93.5,2|0,0:0|0:0,0:0:0:0: +215,213,333120,2,0,B|201:253|201:253|217:303,1,93.5,8|0,0:0|0:0,0:0:0:0: +344,145,333350,6,0,B|340:81|340:81|344:76|344:76|340:73|340:73|335:-14,1,140.25,2|0,0:0|0:0,0:0:0:0: +337,9,333581,2,0,L|446:24,1,93.5,8|0,0:0|0:0,0:0:0:0: +498,196,333812,2,0,P|456:182|421:210,1,93.5,2|0,0:0|0:0,0:0:0:0: +292,360,334043,2,0,P|256:387|214:373,1,93.5,8|0,0:0|0:0,0:0:0:0: +32,201,334273,6,0,B|119:177|135:235|215:212,1,187,2|8,0:0|0:0,0:0:0:0: +214,212,334735,2,0,P|208:181|198:97,1,93.5,2|0,0:0|0:0,0:0:0:0: +306,267,334966,2,0,P|300:297|290:381,1,93.5,8|0,0:0|0:0,0:0:0:0: +72,357,335197,6,0,P|98:307|224:307,1,187,2|8,0:0|0:0,0:0:0:0: +291,359,335543,1,0,0:0:0:0: +498,196,335658,2,0,B|426:187|426:187|392:199|392:199|301:187,1,187,2|8,0:0|0:0,0:0:0:0: +221,176,336004,1,0,0:0:0:0: +10,86,336120,6,0,P|80:77|154:44,1,140.25,2|0,0:0|0:0,0:0:0:0: +143,50,336350,2,0,P|111:107|120:155,1,93.5,8|0,0:0|0:0,0:0:0:0: +277,245,336581,2,0,P|244:188|198:171,1,93.5,2|0,0:0|0:0,0:0:0:0: +41,262,336812,2,0,P|106:262|143:230,1,93.5,8|0,0:0|0:0,0:0:0:0: +223,176,337043,5,2,0:0:0:0: +221,157,337100,1,2,0:0:0:0: +219,138,337158,1,10,0:0:0:0: +217,120,337216,1,2,0:0:0:0: +215,101,337273,1,2,0:0:0:0: +213,82,337331,1,2,0:0:0:0: +211,64,337389,1,2,0:0:0:0: +209,45,337446,1,2,0:0:0:0: +208,27,337504,5,2,0:0:0:0: +258,48,337561,1,2,0:0:0:0: +283,97,337619,1,2,0:0:0:0: +270,151,337677,1,2,0:0:0:0: +227,184,337734,1,10,0:0:0:0: +183,217,337793,1,10,0:0:0:0: +170,270,337851,1,10,0:0:0:0: +195,319,337909,1,10,0:0:0:0: +246,340,337966,6,0,B|313:336|313:336|346:346|346:346|438:337,1,187,6|8,0:0|0:0,0:0:0:0: +501,276,338312,1,0,0:0:0:0: +266,215,338427,2,0,B|198:211|198:211|165:221|165:221|73:212,1,187,2|8,0:0|0:0,0:0:0:0: +11,151,338773,1,0,0:0:0:0: +252,34,338889,6,0,B|233:78|233:78|248:121,1,93.5,2|0,0:0|0:0,0:0:0:0: +425,190,339120,2,0,B|444:146|444:146|428:102,1,93.5,8|0,0:0|0:0,0:0:0:0: +336,155,339350,5,10,0:0:0:0: +336,173,339407,1,8,0:0:0:0: +337,192,339465,1,8,0:0:0:0: +338,211,339523,1,8,0:0:0:0: +338,229,339580,1,8,0:0:0:0: +339,248,339638,1,8,0:0:0:0: +340,267,339696,1,8,0:0:0:0: +340,285,339753,1,8,0:0:0:0: +340,303,339812,6,0,P|426:327|487:262,1,187,6|8,0:0|0:0,0:0:0:0: +425,190,340158,1,0,0:0:0:0: +246,340,340273,2,0,P|249:296|209:250,1,93.5,2|0,0:0|0:0,0:0:0:0: +56,129,340504,2,0,P|53:173|93:219,1,93.5,8|0,0:0|0:0,0:0:0:0: +306,198,340735,6,0,B|310:146|310:146|315:138|315:138|311:130|311:130|323:-1,1,187,2|8,0:0|0:0,0:0:0:0: +237,53,341081,1,0,0:0:0:0: +340,267,341197,2,0,P|368:263|441:256,1,93.5,2|0,0:0|0:0,0:0:0:0: +246,340,341427,2,0,P|217:336|145:329,1,93.5,8|0,0:0|0:0,0:0:0:0: +13,157,341658,6,0,B|101:149|101:221|190:213,1,187,2|8,0:0|0:0,0:0:0:0: +241,137,342004,1,0,0:0:0:0: +42,237,342120,2,0,P|35:289|60:336,1,93.5,2|0,0:0|0:0,0:0:0:0: +162,129,342350,2,0,P|169:77|144:30,1,93.5,8|0,0:0|0:0,0:0:0:0: +153,329,342581,6,0,B|223:321|223:321|269:337|269:337|336:331,1,187,2|8,0:0|0:0,0:0:0:0: +417,379,342927,1,0,0:0:0:0: +306,198,343043,2,0,B|298:113|370:113|362:25,1,187,2|8,0:0|0:0,0:0:0:0: +489,112,343389,1,8,0:0:0:0: +489,112,343447,1,8,0:0:0:0: +489,112,343504,6,0,P|504:193|417:256,1,187,2|8,0:0|0:0,0:0:0:0: +248,341,343850,2,0,P|232:259|319:196,1,187,2|2,0:0|0:0,0:0:0:0: +508,361,344197,2,0,L|416:378,1,93.5,8|0,0:0|0:0,0:0:0:0: +401,373,344370,1,0,0:0:0:0: +386,367,344427,6,0,L|192:354,1,187,2|8,0:0|0:0,0:0:0:0: +107,375,344773,1,0,0:0:0:0: +122,199,344889,2,0,P|144:240|139:286,1,93.5,2|0,0:0|0:0,0:0:0:0: +13,157,345120,2,0,P|7:111|29:70,1,93.5,8|0,0:0|0:0,0:0:0:0: +200,35,345350,6,0,L|302:46,1,93.5,2|0,0:0|0:0,0:0:0:0: +396,207,345581,2,0,L|303:196,1,93.5,8|0,0:0|0:0,0:0:0:0: +384,23,345812,2,0,L|373:115,1,93.5,2|0,0:0|0:0,0:0:0:0: +212,219,346043,2,0,L|223:117,1,93.5,8|0,0:0|0:0,0:0:0:0: +512,279,346273,6,0,P|483:282|372:294,1,140.25,2|0,0:0|0:0,0:0:0:0: +349,363,346504,6,0,P|328:360|251:351,1,98.1749970039369,8|0,0:0|0:0,0:0:0:0: +212,293,346735,6,0,P|188:295|74:307,1,126.224996147919,2|0,0:0|0:0,0:0:0:0: +27,257,346966,6,0,P|14:222|23:192,1,56.0999982879639,8|0,0:0|0:0,0:0:0:0: +133,13,347197,6,0,L|122:205,1,187,6|8,0:0|0:0,0:0:0:0: +251,351,347543,1,0,0:0:0:0: +311,280,347658,2,0,P|331:238|316:186,1,93.5,2|0,0:0|0:0,0:0:0:0: +232,39,347889,2,0,P|212:80|221:125,1,93.5,8|0,0:0|0:0,0:0:0:0: +466,107,348120,6,0,P|403:112|340:117,1,93.5,2|0,0:0|0:0,0:0:0:0: +228,202,348350,2,0,P|290:196|353:191,1,93.5,8|0,0:0|0:0,0:0:0:0: +489,256,348581,2,0,P|426:261|363:266,1,93.5,2|0,0:0|0:0,0:0:0:0: +251,351,348811,2,0,P|313:345|376:340,1,93.5,8|0,0:0|0:0,0:0:0:0: +360,351,348985,1,0,0:0:0:0: +375,359,349043,6,0,P|426:304|407:190,1,187,2|8,0:0|0:0,0:0:0:0: +372,115,349389,1,0,0:0:0:0: +496,18,349504,2,0,L|488:111,1,93.5,2|0,0:0|0:0,0:0:0:0: +328,286,349735,2,0,L|320:192,1,93.5,8|0,0:0|0:0,0:0:0:0: +125,50,349966,6,0,P|170:97|307:65,1,187,2|8,0:0|0:0,0:0:0:0: +356,28,350312,1,0,0:0:0:0: +227,184,350427,2,0,B|262:280|198:280|230:384,1,187,2|8,0:0|0:0,0:0:0:0: +134,342,350773,1,0,0:0:0:0: +10,277,350889,6,0,P|7:223|-1:72,1,187,2|8,0:0|0:0,0:0:0:0: +51,13,351235,1,0,0:0:0:0: +215,180,351350,2,0,P|218:234|226:385,1,187,2|8,0:0|0:0,0:0:0:0: +502,277,351812,6,0,P|505:223|513:72,1,187,2|8,0:0|0:0,0:0:0:0: +461,13,352158,1,0,0:0:0:0: +372,115,352273,2,0,P|356:141|366:217,1,93.5,2|0,0:0|0:0,0:0:0:0: +440,349,352504,2,0,P|425:322|353:292,1,93.5,8|0,0:0|0:0,0:0:0:0: +99,278,352735,6,0,L|285:258,1,187,2|8,0:0|0:0,0:0:0:0: +371,292,353081,1,0,0:0:0:0: +450,211,353197,2,0,L|357:201,1,93.5,2|0,0:0|0:0,0:0:0:0: +191,152,353427,2,0,L|283:142,1,93.5,8|0,0:0|0:0,0:0:0:0: +393,31,353658,6,0,B|365:69|365:69|372:116,1,93.5,2|0,0:0|0:0,0:0:0:0: +489,256,353889,2,0,B|517:218|517:218|509:170,1,93.5,8|0,0:0|0:0,0:0:0:0: +357,201,354120,2,0,P|366:239|372:311,1,93.5,2|0,0:0|0:0,0:0:0:0: +498,96,354350,2,0,P|502:49|512:3,1,93.5,8|0,0:0|0:0,0:0:0:0: +512,333,354581,6,0,B|427:318|423:388|325:362,1,187,2|8,0:0|0:0,0:0:0:0: +284,258,354927,1,0,0:0:0:0: +228,334,355043,2,0,B|32:324,1,187,2|8,0:0|0:0,0:0:0:0: +5,239,355389,1,0,0:0:0:0: +199,79,355504,5,10,0:0:0:0: +110,108,355620,1,8,0:0:0:0: +208,112,355735,5,8,0:0:0:0: +124,116,355851,1,8,0:0:0:0: +211,141,355966,5,10,0:0:0:0: +139,124,356082,1,8,0:0:0:0: +210,164,356197,5,8,0:0:0:0: +153,133,356313,1,8,0:0:0:0: +90,211,356427,6,0,L|292:193,1,187,6|8,0:0|0:0,0:0:0:0: +329,116,356773,1,0,0:0:0:0: +450,258,356889,2,0,L|356:266,1,93.5,2|0,0:0|0:0,0:0:0:0: +414,101,357120,2,0,L|507:92,1,93.5,8|0,0:0|0:0,0:0:0:0: +304,355,357350,6,0,P|252:281|275:194,1,187,2|8,0:0|0:0,0:0:0:0: +329,116,357697,1,0,0:0:0:0: +110,47,357812,5,2,0:0:0:0: +147,134,357927,1,8,0:0:0:0: +93,210,358043,1,10,0:0:0:0: +130,297,358158,1,8,0:0:0:0: +304,355,358273,6,0,L|102:337,1,187,2|8,0:0|0:0,0:0:0:0: +30,374,358620,1,0,0:0:0:0: +0,202,358735,2,0,L|93:210,1,93.5,2|0,0:0|0:0,0:0:0:0: +218,58,358966,2,0,L|124:49,1,93.5,8|0,0:0|0:0,0:0:0:0: +265,250,359197,6,0,B|350:227|364:281|472:252,2,187,2|8|2,0:0|0:0|0:0,0:0:0:0: +202,180,359773,1,0,0:0:0:0: +280,128,359889,1,8,0:0:0:0: +218,58,360004,1,0,0:0:0:0: +407,0,360120,6,0,L|387:186,1,187,2|8,0:0|0:0,0:0:0:0: +449,257,360466,1,0,0:0:0:0: +304,355,360581,2,0,P|310:296|359:272,1,93.5,2|0,0:0|0:0,0:0:0:0: +479,178,360812,2,0,P|473:237|423:260,1,93.5,8|0,0:0|0:0,0:0:0:0: +280,128,361043,6,0,L|274:28,1,93.5,2|0,0:0|0:0,0:0:0:0: +193,261,361273,2,0,L|198:354,1,93.5,8|0,0:0|0:0,0:0:0:0: +36,373,361504,5,8,0:0:0:0: +74,286,361620,1,2,0:0:0:0: +8,219,361735,1,2,0:0:0:0: +46,134,361851,1,8,0:0:0:0: +193,261,361966,6,0,P|274:272|338:188,1,187,2|8,0:0|0:0,0:0:0:0: +280,128,362312,1,0,0:0:0:0: +136,99,362427,2,0,P|123:154|141:192,1,93.5,2|0,0:0|0:0,0:0:0:0: +304,355,362658,2,0,P|317:300|298:261,1,93.5,8|0,0:0|0:0,0:0:0:0: +291,256,362831,1,0,0:0:0:0: +278,244,362889,6,0,L|485:247,1,187,2|8,0:0|0:0,0:0:0:0: +202,180,363235,2,0,L|-5:177,1,187,2|2,0:0|0:0,0:0:0:0: +280,128,363581,2,0,L|383:126,1,93.5,8|0,0:0|0:0,0:0:0:0: +202,180,363812,6,0,B|158:268|240:272|190:359,2,187,2|8|2,0:0|0:0|0:0,0:0:0:0: +280,128,364389,1,0,0:0:0:0: +136,99,364504,2,0,P|123:44|141:5,1,93.5,8|0,0:0|0:0,0:0:0:0: +278,244,364735,6,0,P|291:299|272:337,1,93.5,2|0,0:0|0:0,0:0:0:0: +36,304,364966,2,0,B|50:297|50:297|51:307|51:307|59:297|59:297|60:306|60:306|68:296|68:296|69:305|69:305|77:295|77:295|78:305|78:305|85:294|85:294|86:304|86:304|94:294|94:294|95:303|95:303|103:293|103:293|104:302|104:302|112:292|112:292|113:302|113:302|121:291|121:291|121:301|121:301|129:290|129:290|130:300|130:300|138:290|138:290|139:299|139:299|147:289|147:289|148:299|148:299|156:288|156:288|156:298|156:298|164:287|164:287|165:297|165:297|173:287|173:287|174:296|174:296|182:286|182:286|183:295|183:295|198:289,1,374,8|0,0:0|0:0,0:0:0:0: +277,331,365543,1,0,0:0:0:0: +437,330,365658,6,0,P|467:262|450:218,1,93.5,2|0,0:0|0:0,0:0:0:0: +307,44,365889,2,0,P|277:112|294:156,1,93.5,8|0,0:0|0:0,0:0:0:0: +374,266,366120,1,2,0:0:0:0: +500,153,366235,2,0,L|516:35,2,93.5,0|8|0,0:0|0:0|0:0,0:0:0:0: +374,266,366581,6,0,L|386:358,1,93.5,2|0,0:0|0:0,0:0:0:0: +414,164,366812,2,0,P|322:168|265:263,1,187,8|2,0:0|0:0,0:0:0:0: +188,359,367158,1,0,0:0:0:0: +117,297,367273,2,0,P|115:271|108:189,1,93.5,8|0,0:0|0:0,0:0:0:0: +15,83,367504,6,0,B|192:130|204:-6|413:48,1,374,2|2,0:0|0:0,0:0:0:0: +468,13,368081,1,0,0:0:0:0: +445,104,368197,2,0,P|448:150|452:197,1,93.5,8|0,0:0|0:0,0:0:0:0: +356,295,368427,6,0,P|443:278|500:348,1,187,2|8,0:0|0:0,0:0:0:0: +284,353,368773,2,0,P|196:368|140:298,1,187,2|2,0:0|0:0,0:0:0:0: +99,213,369120,2,0,P|145:216|192:220,1,93.5,8|0,0:0|0:0,0:0:0:0: +378,41,369350,6,0,B|291:17|285:85|196:62,1,187,2|8,0:0|0:0,0:0:0:0: +111,24,369697,1,0,0:0:0:0: +17,161,369812,2,0,P|11:115|32:74,1,93.5,2|0,0:0|0:0,0:0:0:0: +152,211,370043,2,0,P|158:257|138:299,1,93.5,8|0,0:0|0:0,0:0:0:0: +5,384,370273,5,2,0:0:0:0: +58,268,370389,1,2,0:0:0:0: +130,372,370504,1,8,0:0:0:0: +183,256,370620,1,8,0:0:0:0: +187,237,370677,1,8,0:0:0:0: +191,219,370735,1,10,0:0:0:0: +196,201,370793,1,8,0:0:0:0: +200,183,370850,1,8,0:0:0:0: +205,165,370908,1,8,0:0:0:0: +209,146,370966,1,10,0:0:0:0: +111,24,371081,1,2,0:0:0:0: +197,62,371197,6,0,L|387:49,1,187,6|8,0:0|0:0,0:0:0:0: +315,322,371658,2,0,L|125:335,1,187,2|8,0:0|0:0,0:0:0:0: +457,193,372120,2,0,L|444:379,1,187,2|8,0:0|0:0,0:0:0:0: +55,191,372581,2,0,L|63:67,1,93.5,2|0,0:0|0:0,0:0:0:0: +68,4,372812,1,8,0:0:0:0: +152,46,372927,1,0,0:0:0:0: +186,263,373043,6,0,L|-4:276,1,187,6|8,0:0|0:0,0:0:0:0: +326,121,373504,2,0,L|516:108,1,187,2|8,0:0|0:0,0:0:0:0: +491,199,373850,1,0,0:0:0:0: +468,288,373966,2,0,L|282:301,1,187,2|8,0:0|0:0,0:0:0:0: +203,5,374427,2,0,L|328:-3,1,93.5,2|0,0:0|0:0,0:0:0:0: +389,13,374658,1,8,0:0:0:0: +329,84,374773,1,8,0:0:0:0: +327,102,374830,1,8,0:0:0:0: +326,121,374889,6,0,L|516:108,1,187,6|8,0:0|0:0,0:0:0:0: +227,377,375350,1,2,0:0:0:0: +138,348,375466,1,8,0:0:0:0: +138,254,375581,1,8,0:0:0:0: +227,225,375697,1,2,0:0:0:0: +282,301,375812,2,0,L|468:288,1,187,2|8,0:0|0:0,0:0:0:0: +230,83,376273,2,0,L|44:96,1,187,2|8,0:0|0:0,0:0:0:0: +11,185,376620,1,0,0:0:0:0: +303,212,376735,6,0,L|316:26,1,187,6|8,0:0|0:0,0:0:0:0: +43,96,377197,1,2,0:0:0:0: +72,7,377313,1,8,0:0:0:0: +166,7,377428,1,8,0:0:0:0: +195,96,377544,1,8,0:0:0:0: +119,151,377658,2,0,L|132:337,1,187,2|8,0:0|0:0,0:0:0:0: +439,382,378120,2,0,L|426:196,1,187,2|8,0:0|0:0,0:0:0:0: +348,10,378581,6,0,B|414:65|393:172|309:195|241:175|241:175|174:156|90:178|69:285|132:337,1,561,6|8,0:0|0:0,0:0:0:0: +444,354,379504,2,0,P|501:284|473:199,1,187,2|8,0:0|0:0,0:0:0:0: +348,10,379850,2,0,P|291:80|319:165,1,187,2|2,0:0|0:0,0:0:0:0: +408,139,380197,2,0,L|419:46,1,93.5,8|0,0:0|0:0,0:0:0:0: +396,231,380427,5,2,0:0:0:0: +396,231,380543,2,0,P|322:217|256:317,1,187,2|2,0:0|0:0,0:0:0:0: +324,358,380889,2,0,L|417:347,1,93.5,2|0,0:0|0:0,0:0:0:0: +255,294,381120,2,0,L|162:283,1,93.5,8|0,0:0|0:0,0:0:0:0: +32,66,381350,5,2,0:0:0:0: +32,66,381466,2,0,P|106:52|172:152,1,187,2|2,0:0|0:0,0:0:0:0: +104,193,381812,2,0,L|11:182,1,93.5,2|0,0:0|0:0,0:0:0:0: +173,129,382043,2,0,L|266:118,1,93.5,8|0,0:0|0:0,0:0:0:0: +490,320,382273,6,2,L|408:303,3,46.75,2|2|10|2,0:0|0:0|0:0|0:0,0:0:0:0: +427,332,382504,2,2,L|345:315,3,46.75,2|2|10|2,0:0|0:0|0:0|0:0,0:0:0:0: +349,341,382735,5,10,0:0:0:0: +364,312,382792,1,2,0:0:0:0: +365,280,382850,1,10,0:0:0:0: +351,251,382908,1,2,0:0:0:0: +325,232,382966,1,10,0:0:0:0: +293,227,383023,1,2,0:0:0:0: +267,208,383080,1,10,0:0:0:0: +253,179,383138,1,2,0:0:0:0: +254,147,383197,5,10,0:0:0:0: +290,174,383254,1,2,0:0:0:0: +303,218,383312,1,10,0:0:0:0: +288,262,383370,1,2,0:0:0:0: +250,287,383427,1,10,0:0:0:0: +204,280,383484,1,2,0:0:0:0: +171,248,383542,1,10,0:0:0:0: +163,203,383600,1,2,0:0:0:0: +182,161,383657,5,10,0:0:0:0: +184,102,383715,1,2,0:0:0:0: +144,58,383773,1,10,0:0:0:0: +82,54,383831,1,2,0:0:0:0: +35,93,383889,1,10,0:0:0:0: +30,153,383947,1,2,0:0:0:0: +58,205,384004,1,10,0:0:0:0: +57,266,384062,1,2,0:0:0:0: +18,313,384120,5,14,0:0:0:0: diff --git a/osu.Game.Rulesets.Catch/Tests/CatchBeatmapConversionTest.cs b/osu.Game.Rulesets.Catch/Tests/CatchBeatmapConversionTest.cs new file mode 100644 index 0000000000..e07e40ff3a --- /dev/null +++ b/osu.Game.Rulesets.Catch/Tests/CatchBeatmapConversionTest.cs @@ -0,0 +1,67 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using System; +using System.Collections.Generic; +using NUnit.Framework; +using osu.Framework.MathUtils; +using osu.Game.Beatmaps; +using osu.Game.Rulesets.Catch.Beatmaps; +using osu.Game.Rulesets.Catch.Objects; +using osu.Game.Rulesets.Catch.UI; +using osu.Game.Rulesets.Objects; +using osu.Game.Tests.Beatmaps; + +namespace osu.Game.Rulesets.Catch.Tests +{ + public class CatchBeatmapConversionTest : BeatmapConversionTest + { + protected override string ResourceAssembly => "osu.Game.Rulesets.Catch"; + + [TestCase(875945)] + public new void Test(int beatmapId) + { + base.Test(beatmapId); + } + + protected override IEnumerable CreateConvertValue(HitObject hitObject) + { + if (hitObject is JuiceStream stream) + { + foreach (var nested in stream.NestedHitObjects) + { + yield return new ConvertValue + { + StartTime = nested.StartTime, + Position = ((CatchHitObject)nested).X * CatchPlayfield.BASE_WIDTH + }; + } + } + else + { + yield return new ConvertValue + { + StartTime = hitObject.StartTime, + Position = ((CatchHitObject)hitObject).X * CatchPlayfield.BASE_WIDTH + }; + } + } + + protected override ITestableBeatmapConverter CreateConverter(Beatmap beatmap) => new CatchBeatmapConverter(); + } + + public struct ConvertValue : IEquatable + { + /// + /// A sane value to account for osu!stable using ints everwhere. + /// + private const float conversion_lenience = 2; + + public double StartTime; + public float Position; + + public bool Equals(ConvertValue other) + => Precision.AlmostEquals(StartTime, other.StartTime) + && Precision.AlmostEquals(Position, other.Position, conversion_lenience); + } +} diff --git a/osu.Game.Rulesets.Catch/osu.Game.Rulesets.Catch.csproj b/osu.Game.Rulesets.Catch/osu.Game.Rulesets.Catch.csproj index 894fdc9b45..a1d1743c7a 100644 --- a/osu.Game.Rulesets.Catch/osu.Game.Rulesets.Catch.csproj +++ b/osu.Game.Rulesets.Catch/osu.Game.Rulesets.Catch.csproj @@ -95,6 +95,7 @@ + @@ -128,6 +129,10 @@ + + + + From 0145ef52772ca96f8fe8bf06a836c97204391ff7 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Fri, 2 Mar 2018 02:35:52 +0900 Subject: [PATCH 244/544] Fix mania using the wrong validation data --- .../Resources/Testing/Beatmaps/875945-expected-conversion.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game.Rulesets.Mania/Resources/Testing/Beatmaps/875945-expected-conversion.json b/osu.Game.Rulesets.Mania/Resources/Testing/Beatmaps/875945-expected-conversion.json index 165faaac17..935009aac6 100644 --- a/osu.Game.Rulesets.Mania/Resources/Testing/Beatmaps/875945-expected-conversion.json +++ b/osu.Game.Rulesets.Mania/Resources/Testing/Beatmaps/875945-expected-conversion.json @@ -1 +1 @@ -{"Mappings":[{"StartTime":6590.0,"Objects":[{"StartTime":6590.0,"EndTime":8320.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":8436.0,"Objects":[{"StartTime":8436.0,"EndTime":10166.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":10282.0,"Objects":[{"StartTime":10282.0,"EndTime":12012.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":12128.0,"Objects":[{"StartTime":12128.0,"EndTime":13858.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":13974.0,"Objects":[{"StartTime":13974.0,"EndTime":15704.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":15820.0,"Objects":[{"StartTime":15820.0,"EndTime":17550.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":17666.0,"Objects":[{"StartTime":17666.0,"EndTime":19512.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":19628.0,"Objects":[{"StartTime":19628.0,"EndTime":21128.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":false,"IsSwell":true,"IsStrong":false}]},{"StartTime":21359.0,"Objects":[{"StartTime":21359.0,"EndTime":21359.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":21820.0,"EndTime":21820.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":22282.0,"Objects":[{"StartTime":22282.0,"EndTime":22282.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":22743.0,"EndTime":22743.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":23205.0,"Objects":[{"StartTime":23205.0,"EndTime":23205.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":23666.0,"EndTime":23666.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":24128.0,"Objects":[{"StartTime":24128.0,"EndTime":24128.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":24589.0,"EndTime":24589.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":25051.0,"Objects":[{"StartTime":25051.0,"EndTime":26666.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":26897.0,"Objects":[{"StartTime":26897.0,"EndTime":28281.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":28743.0,"Objects":[{"StartTime":28743.0,"EndTime":28743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":29204.0,"EndTime":29204.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":29666.0,"Objects":[{"StartTime":29666.0,"EndTime":29666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":30127.0,"EndTime":30127.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":30589.0,"Objects":[{"StartTime":30589.0,"EndTime":30589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":31050.0,"EndTime":31050.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":31513.0,"Objects":[{"StartTime":31513.0,"EndTime":31513.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":31974.0,"EndTime":31974.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":32436.0,"Objects":[{"StartTime":32436.0,"EndTime":34282.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":35205.0,"Objects":[{"StartTime":35205.0,"EndTime":35205.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":35666.0,"EndTime":35666.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":36128.0,"Objects":[{"StartTime":36128.0,"EndTime":36128.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":36474.0,"EndTime":36474.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":36590.0,"Objects":[{"StartTime":36590.0,"EndTime":39359.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":39820.0,"Objects":[{"StartTime":39820.0,"EndTime":39820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":40281.0,"EndTime":40281.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":40743.0,"Objects":[{"StartTime":40743.0,"EndTime":40743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":41204.0,"EndTime":41204.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":41666.0,"Objects":[{"StartTime":41666.0,"EndTime":42589.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":43051.0,"Objects":[{"StartTime":43051.0,"EndTime":43051.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":43281.0,"EndTime":43281.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":43513.0,"Objects":[{"StartTime":43513.0,"EndTime":43513.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true}]},{"StartTime":43628.0,"Objects":[{"StartTime":43628.0,"EndTime":49051.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":false,"IsSwell":true,"IsStrong":false}]},{"StartTime":56435.0,"Objects":[{"StartTime":56435.0,"EndTime":56435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":56665.0,"EndTime":56665.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":56781.0,"Objects":[{"StartTime":56781.0,"EndTime":56781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":56897.0,"Objects":[{"StartTime":56897.0,"EndTime":56897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":57012.0,"EndTime":57012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":57127.0,"Objects":[{"StartTime":57127.0,"EndTime":57127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":57242.0,"EndTime":57242.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":57358.0,"Objects":[{"StartTime":57358.0,"EndTime":57358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":57473.0,"EndTime":57473.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":57589.0,"Objects":[{"StartTime":57589.0,"EndTime":57589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":57704.0,"EndTime":57704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":57820.0,"Objects":[{"StartTime":57820.0,"EndTime":57820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":57935.0,"Objects":[{"StartTime":57935.0,"EndTime":57935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":58051.0,"Objects":[{"StartTime":58051.0,"EndTime":58051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":58166.0,"Objects":[{"StartTime":58166.0,"EndTime":58166.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":58224.0,"Objects":[{"StartTime":58224.0,"EndTime":58224.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":58281.0,"Objects":[{"StartTime":58281.0,"EndTime":58281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":58511.0,"EndTime":58511.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":58627.0,"Objects":[{"StartTime":58627.0,"EndTime":58627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":58685.0,"Objects":[{"StartTime":58685.0,"EndTime":58685.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":58743.0,"Objects":[{"StartTime":58743.0,"EndTime":58743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":58858.0,"EndTime":58858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":58974.0,"Objects":[{"StartTime":58974.0,"EndTime":58974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":59089.0,"EndTime":59089.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":59204.0,"Objects":[{"StartTime":59204.0,"EndTime":59204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":59319.0,"EndTime":59319.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":59435.0,"Objects":[{"StartTime":59435.0,"EndTime":59435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":59550.0,"EndTime":59550.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":59666.0,"Objects":[{"StartTime":59666.0,"EndTime":59666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":59781.0,"EndTime":59781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":59897.0,"Objects":[{"StartTime":59897.0,"EndTime":59897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":60012.0,"EndTime":60012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":60127.0,"Objects":[{"StartTime":60127.0,"EndTime":60127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":60357.0,"EndTime":60357.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":60474.0,"Objects":[{"StartTime":60474.0,"EndTime":60474.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":60704.0,"EndTime":60704.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":60820.0,"Objects":[{"StartTime":60820.0,"EndTime":60820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":60935.0,"EndTime":60935.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":61051.0,"Objects":[{"StartTime":61051.0,"EndTime":61051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":61166.0,"EndTime":61166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":61281.0,"Objects":[{"StartTime":61281.0,"EndTime":61281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":61396.0,"EndTime":61396.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":61512.0,"Objects":[{"StartTime":61512.0,"EndTime":61512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":61627.0,"EndTime":61627.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":61743.0,"Objects":[{"StartTime":61743.0,"EndTime":61743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":61858.0,"EndTime":61858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":61916.0,"Objects":[{"StartTime":61916.0,"EndTime":61916.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":61974.0,"Objects":[{"StartTime":61974.0,"EndTime":61974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":62204.0,"EndTime":62204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":62320.0,"Objects":[{"StartTime":62320.0,"EndTime":62320.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":62550.0,"EndTime":62550.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":62666.0,"Objects":[{"StartTime":62666.0,"EndTime":63127.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":63358.0,"Objects":[{"StartTime":63358.0,"EndTime":63358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":63474.0,"Objects":[{"StartTime":63474.0,"EndTime":63474.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":63589.0,"Objects":[{"StartTime":63589.0,"EndTime":63589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":63705.0,"Objects":[{"StartTime":63705.0,"EndTime":63705.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":63820.0,"Objects":[{"StartTime":63820.0,"EndTime":63820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":63877.0,"Objects":[{"StartTime":63877.0,"EndTime":63877.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":63935.0,"Objects":[{"StartTime":63935.0,"EndTime":63935.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":63993.0,"Objects":[{"StartTime":63993.0,"EndTime":63993.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":64051.0,"Objects":[{"StartTime":64051.0,"EndTime":64051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":64166.0,"EndTime":64166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":64281.0,"Objects":[{"StartTime":64281.0,"EndTime":64281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":64338.0,"Objects":[{"StartTime":64338.0,"EndTime":64338.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":64396.0,"Objects":[{"StartTime":64396.0,"EndTime":64396.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":64454.0,"Objects":[{"StartTime":64454.0,"EndTime":64454.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":64512.0,"Objects":[{"StartTime":64512.0,"EndTime":64512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":64627.0,"EndTime":64627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":64743.0,"Objects":[{"StartTime":64743.0,"EndTime":64743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":64800.0,"Objects":[{"StartTime":64800.0,"EndTime":64800.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":64858.0,"Objects":[{"StartTime":64858.0,"EndTime":64858.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":64916.0,"Objects":[{"StartTime":64916.0,"EndTime":64916.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":64974.0,"Objects":[{"StartTime":64974.0,"EndTime":64974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":65089.0,"EndTime":65089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":65205.0,"Objects":[{"StartTime":65205.0,"EndTime":65205.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":65262.0,"Objects":[{"StartTime":65262.0,"EndTime":65262.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":65320.0,"Objects":[{"StartTime":65320.0,"EndTime":65320.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":65378.0,"Objects":[{"StartTime":65378.0,"EndTime":65378.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":65436.0,"Objects":[{"StartTime":65436.0,"EndTime":65436.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":65551.0,"EndTime":65551.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":65666.0,"Objects":[{"StartTime":65666.0,"EndTime":65666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":65723.0,"Objects":[{"StartTime":65723.0,"EndTime":65723.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":65781.0,"Objects":[{"StartTime":65781.0,"EndTime":65781.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":65839.0,"Objects":[{"StartTime":65839.0,"EndTime":65839.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":65897.0,"Objects":[{"StartTime":65897.0,"EndTime":65897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":66012.0,"EndTime":66012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":66127.0,"Objects":[{"StartTime":66127.0,"EndTime":66127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":66184.0,"Objects":[{"StartTime":66184.0,"EndTime":66184.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":66242.0,"Objects":[{"StartTime":66242.0,"EndTime":66242.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":66300.0,"Objects":[{"StartTime":66300.0,"EndTime":66300.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":66358.0,"Objects":[{"StartTime":66358.0,"EndTime":66358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":66473.0,"EndTime":66473.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":66589.0,"Objects":[{"StartTime":66589.0,"EndTime":66589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":66704.0,"EndTime":66704.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":66820.0,"Objects":[{"StartTime":66820.0,"EndTime":66820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":66935.0,"EndTime":66935.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":67051.0,"Objects":[{"StartTime":67051.0,"EndTime":67051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":67281.0,"EndTime":67281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":67397.0,"Objects":[{"StartTime":67397.0,"EndTime":67397.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":67512.0,"Objects":[{"StartTime":67512.0,"EndTime":67512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":67742.0,"EndTime":67742.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":67858.0,"Objects":[{"StartTime":67858.0,"EndTime":67858.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":68088.0,"EndTime":68088.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":68204.0,"Objects":[{"StartTime":68204.0,"EndTime":68204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":68319.0,"EndTime":68319.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":68435.0,"Objects":[{"StartTime":68435.0,"EndTime":68435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":68550.0,"EndTime":68550.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":68666.0,"Objects":[{"StartTime":68666.0,"EndTime":68666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":68781.0,"EndTime":68781.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":68897.0,"Objects":[{"StartTime":68897.0,"EndTime":68897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":69012.0,"Objects":[{"StartTime":69012.0,"EndTime":69012.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":69127.0,"Objects":[{"StartTime":69127.0,"EndTime":69127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":69242.0,"Objects":[{"StartTime":69242.0,"EndTime":69242.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":69358.0,"Objects":[{"StartTime":69358.0,"EndTime":69358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":69473.0,"EndTime":69473.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":69589.0,"Objects":[{"StartTime":69589.0,"EndTime":69589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":69704.0,"EndTime":69704.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":69820.0,"Objects":[{"StartTime":69820.0,"EndTime":69820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":69935.0,"EndTime":69935.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":70051.0,"Objects":[{"StartTime":70051.0,"EndTime":70051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":70166.0,"EndTime":70166.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":70281.0,"Objects":[{"StartTime":70281.0,"EndTime":70281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":70339.0,"Objects":[{"StartTime":70339.0,"EndTime":70339.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":70397.0,"Objects":[{"StartTime":70397.0,"EndTime":70397.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":70455.0,"Objects":[{"StartTime":70455.0,"EndTime":70455.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":70512.0,"Objects":[{"StartTime":70512.0,"EndTime":70512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":70570.0,"Objects":[{"StartTime":70570.0,"EndTime":70570.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":70627.0,"Objects":[{"StartTime":70627.0,"EndTime":70627.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":70685.0,"Objects":[{"StartTime":70685.0,"EndTime":70685.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":70742.0,"Objects":[{"StartTime":70742.0,"EndTime":70742.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":70800.0,"Objects":[{"StartTime":70800.0,"EndTime":70800.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":70858.0,"Objects":[{"StartTime":70858.0,"EndTime":70858.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":70916.0,"Objects":[{"StartTime":70916.0,"EndTime":70916.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":70974.0,"Objects":[{"StartTime":70974.0,"EndTime":70974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":71031.0,"Objects":[{"StartTime":71031.0,"EndTime":71031.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":71089.0,"Objects":[{"StartTime":71089.0,"EndTime":71089.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":71146.0,"Objects":[{"StartTime":71146.0,"EndTime":71146.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":71204.0,"Objects":[{"StartTime":71204.0,"EndTime":71204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":71434.0,"EndTime":71434.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":71551.0,"Objects":[{"StartTime":71551.0,"EndTime":71551.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":71781.0,"EndTime":71781.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":71897.0,"Objects":[{"StartTime":71897.0,"EndTime":71897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":72012.0,"EndTime":72012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":72127.0,"Objects":[{"StartTime":72127.0,"EndTime":72127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":72243.0,"Objects":[{"StartTime":72243.0,"EndTime":72243.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":72473.0,"EndTime":72473.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":72589.0,"Objects":[{"StartTime":72589.0,"EndTime":72589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":72704.0,"EndTime":72704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":72820.0,"Objects":[{"StartTime":72820.0,"EndTime":72820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":72935.0,"EndTime":72935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":73051.0,"Objects":[{"StartTime":73051.0,"EndTime":73051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":73281.0,"EndTime":73281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":73397.0,"Objects":[{"StartTime":73397.0,"EndTime":73397.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":73627.0,"EndTime":73627.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":73743.0,"Objects":[{"StartTime":73743.0,"EndTime":73743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":73858.0,"EndTime":73858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":73974.0,"Objects":[{"StartTime":73974.0,"EndTime":73974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":74089.0,"Objects":[{"StartTime":74089.0,"EndTime":74089.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":74319.0,"EndTime":74319.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":74435.0,"Objects":[{"StartTime":74435.0,"EndTime":74435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":74550.0,"EndTime":74550.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":74666.0,"Objects":[{"StartTime":74666.0,"EndTime":74666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":74839.0,"EndTime":74839.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":74897.0,"Objects":[{"StartTime":74897.0,"EndTime":74897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":75127.0,"EndTime":75127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":75243.0,"Objects":[{"StartTime":75243.0,"EndTime":75243.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":75473.0,"EndTime":75473.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":75589.0,"Objects":[{"StartTime":75589.0,"EndTime":75589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":75704.0,"EndTime":75704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":75820.0,"Objects":[{"StartTime":75820.0,"EndTime":75820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":75935.0,"Objects":[{"StartTime":75935.0,"EndTime":75935.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":76165.0,"EndTime":76165.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":76281.0,"Objects":[{"StartTime":76281.0,"EndTime":76281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":76396.0,"EndTime":76396.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":76512.0,"Objects":[{"StartTime":76512.0,"EndTime":76512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":76627.0,"EndTime":76627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":76743.0,"Objects":[{"StartTime":76743.0,"EndTime":76743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":76973.0,"EndTime":76973.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":77089.0,"Objects":[{"StartTime":77089.0,"EndTime":77089.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":77319.0,"EndTime":77319.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":77435.0,"Objects":[{"StartTime":77435.0,"EndTime":77435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":77550.0,"EndTime":77550.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":77666.0,"Objects":[{"StartTime":77666.0,"EndTime":77666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":77781.0,"Objects":[{"StartTime":77781.0,"EndTime":77781.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":77897.0,"Objects":[{"StartTime":77897.0,"EndTime":77897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":78012.0,"Objects":[{"StartTime":78012.0,"EndTime":78012.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":78127.0,"Objects":[{"StartTime":78127.0,"EndTime":78127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":78300.0,"EndTime":78300.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":78358.0,"Objects":[{"StartTime":78358.0,"EndTime":78358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":78531.0,"EndTime":78531.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":78589.0,"Objects":[{"StartTime":78589.0,"EndTime":78589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":78819.0,"EndTime":78819.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":78935.0,"Objects":[{"StartTime":78935.0,"EndTime":78935.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":79165.0,"EndTime":79165.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":79281.0,"Objects":[{"StartTime":79281.0,"EndTime":79281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":79396.0,"EndTime":79396.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":79512.0,"Objects":[{"StartTime":79512.0,"EndTime":79512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":79627.0,"Objects":[{"StartTime":79627.0,"EndTime":79627.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":79857.0,"EndTime":79857.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":79974.0,"Objects":[{"StartTime":79974.0,"EndTime":79974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":80089.0,"EndTime":80089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":80204.0,"Objects":[{"StartTime":80204.0,"EndTime":80204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":80319.0,"EndTime":80319.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":80435.0,"Objects":[{"StartTime":80435.0,"EndTime":80435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":80665.0,"EndTime":80665.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":80781.0,"Objects":[{"StartTime":80781.0,"EndTime":80781.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":81011.0,"EndTime":81011.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":81127.0,"Objects":[{"StartTime":81127.0,"EndTime":81127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":81242.0,"EndTime":81242.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":81358.0,"Objects":[{"StartTime":81358.0,"EndTime":81358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":81474.0,"Objects":[{"StartTime":81474.0,"EndTime":81474.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":81704.0,"EndTime":81704.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":81820.0,"Objects":[{"StartTime":81820.0,"EndTime":81820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":81935.0,"EndTime":81935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":82051.0,"Objects":[{"StartTime":82051.0,"EndTime":82051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":82224.0,"EndTime":82224.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":82281.0,"Objects":[{"StartTime":82281.0,"EndTime":82281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":82511.0,"EndTime":82511.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":82627.0,"Objects":[{"StartTime":82627.0,"EndTime":82627.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":82857.0,"EndTime":82857.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":82974.0,"Objects":[{"StartTime":82974.0,"EndTime":82974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":83089.0,"EndTime":83089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":83204.0,"Objects":[{"StartTime":83204.0,"EndTime":83204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":83320.0,"Objects":[{"StartTime":83320.0,"EndTime":83320.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":83550.0,"EndTime":83550.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":83666.0,"Objects":[{"StartTime":83666.0,"EndTime":83666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":83781.0,"EndTime":83781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":83897.0,"Objects":[{"StartTime":83897.0,"EndTime":83897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":84012.0,"EndTime":84012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":84127.0,"Objects":[{"StartTime":84127.0,"EndTime":84127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":84357.0,"EndTime":84357.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":84474.0,"Objects":[{"StartTime":84474.0,"EndTime":84474.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":84704.0,"EndTime":84704.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":84820.0,"Objects":[{"StartTime":84820.0,"EndTime":84820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":84935.0,"EndTime":84935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":85051.0,"Objects":[{"StartTime":85051.0,"EndTime":85051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":85166.0,"EndTime":85166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":85281.0,"Objects":[{"StartTime":85281.0,"EndTime":85281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":85396.0,"EndTime":85396.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":85512.0,"Objects":[{"StartTime":85512.0,"EndTime":85512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":85685.0,"EndTime":85685.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":85743.0,"Objects":[{"StartTime":85743.0,"EndTime":85743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":85858.0,"EndTime":85858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":85974.0,"Objects":[{"StartTime":85974.0,"EndTime":85974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":86089.0,"EndTime":86089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":86204.0,"Objects":[{"StartTime":86204.0,"EndTime":86204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":86434.0,"EndTime":86434.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":86551.0,"Objects":[{"StartTime":86551.0,"EndTime":86551.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":86666.0,"Objects":[{"StartTime":86666.0,"EndTime":86666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":86781.0,"EndTime":86781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":86897.0,"Objects":[{"StartTime":86897.0,"EndTime":86897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":87127.0,"EndTime":87127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":87243.0,"Objects":[{"StartTime":87243.0,"EndTime":87243.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":87358.0,"Objects":[{"StartTime":87358.0,"EndTime":87358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":87588.0,"EndTime":87588.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":87704.0,"Objects":[{"StartTime":87704.0,"EndTime":87704.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":87820.0,"Objects":[{"StartTime":87820.0,"EndTime":87820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":87935.0,"EndTime":87935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":88051.0,"Objects":[{"StartTime":88051.0,"EndTime":88051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":88166.0,"EndTime":88166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":88281.0,"Objects":[{"StartTime":88281.0,"EndTime":88281.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":88339.0,"Objects":[{"StartTime":88339.0,"EndTime":88339.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":88397.0,"Objects":[{"StartTime":88397.0,"EndTime":88397.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":88454.0,"Objects":[{"StartTime":88454.0,"EndTime":88454.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":88512.0,"Objects":[{"StartTime":88512.0,"EndTime":88512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":88570.0,"Objects":[{"StartTime":88570.0,"EndTime":88570.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":88628.0,"Objects":[{"StartTime":88628.0,"EndTime":88628.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":88686.0,"Objects":[{"StartTime":88686.0,"EndTime":88686.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":88743.0,"Objects":[{"StartTime":88743.0,"EndTime":88743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":88973.0,"EndTime":88973.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":89089.0,"Objects":[{"StartTime":89089.0,"EndTime":89089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":89204.0,"Objects":[{"StartTime":89204.0,"EndTime":89204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":89434.0,"EndTime":89434.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":89551.0,"Objects":[{"StartTime":89551.0,"EndTime":89551.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":89666.0,"Objects":[{"StartTime":89666.0,"EndTime":89666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":89781.0,"EndTime":89781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":89897.0,"Objects":[{"StartTime":89897.0,"EndTime":89897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":90070.0,"EndTime":90070.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":90127.0,"Objects":[{"StartTime":90127.0,"EndTime":90127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":90242.0,"EndTime":90242.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":90358.0,"Objects":[{"StartTime":90358.0,"EndTime":90358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":90473.0,"EndTime":90473.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":90589.0,"Objects":[{"StartTime":90589.0,"EndTime":90589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":90819.0,"EndTime":90819.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":90935.0,"Objects":[{"StartTime":90935.0,"EndTime":90935.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":91165.0,"EndTime":91165.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":91281.0,"Objects":[{"StartTime":91281.0,"EndTime":91281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":91396.0,"EndTime":91396.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":91512.0,"Objects":[{"StartTime":91512.0,"EndTime":91512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":91627.0,"EndTime":91627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":91743.0,"Objects":[{"StartTime":91743.0,"EndTime":91743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":91858.0,"EndTime":91858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":91974.0,"Objects":[{"StartTime":91974.0,"EndTime":91974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":92089.0,"EndTime":92089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":92204.0,"Objects":[{"StartTime":92204.0,"EndTime":92204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":92262.0,"Objects":[{"StartTime":92262.0,"EndTime":92262.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":92320.0,"Objects":[{"StartTime":92320.0,"EndTime":92320.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":92377.0,"Objects":[{"StartTime":92377.0,"EndTime":92377.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":92435.0,"Objects":[{"StartTime":92435.0,"EndTime":92435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":92665.0,"EndTime":92665.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":92781.0,"Objects":[{"StartTime":92781.0,"EndTime":92781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":92897.0,"Objects":[{"StartTime":92897.0,"EndTime":92897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":93127.0,"EndTime":93127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":93243.0,"Objects":[{"StartTime":93243.0,"EndTime":93243.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":93358.0,"Objects":[{"StartTime":93358.0,"EndTime":93358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":93473.0,"EndTime":93473.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":93589.0,"Objects":[{"StartTime":93589.0,"EndTime":93589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":93762.0,"EndTime":93762.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":93820.0,"Objects":[{"StartTime":93820.0,"EndTime":93820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":93935.0,"EndTime":93935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":94051.0,"Objects":[{"StartTime":94051.0,"EndTime":94051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":94166.0,"EndTime":94166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":94281.0,"Objects":[{"StartTime":94281.0,"EndTime":94281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":94511.0,"EndTime":94511.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":94627.0,"Objects":[{"StartTime":94627.0,"EndTime":94627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":94743.0,"Objects":[{"StartTime":94743.0,"EndTime":94743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":94973.0,"EndTime":94973.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":95089.0,"Objects":[{"StartTime":95089.0,"EndTime":95089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":95204.0,"Objects":[{"StartTime":95204.0,"EndTime":95204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":95377.0,"EndTime":95377.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":95435.0,"Objects":[{"StartTime":95435.0,"EndTime":95435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":95550.0,"EndTime":95550.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":95666.0,"Objects":[{"StartTime":95666.0,"EndTime":95666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":95781.0,"EndTime":95781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":95897.0,"Objects":[{"StartTime":95897.0,"EndTime":95897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":96012.0,"EndTime":96012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":96127.0,"Objects":[{"StartTime":96127.0,"EndTime":96127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":96357.0,"EndTime":96357.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":96474.0,"Objects":[{"StartTime":96474.0,"EndTime":96474.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":96589.0,"Objects":[{"StartTime":96589.0,"EndTime":96589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":96819.0,"EndTime":96819.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":96935.0,"Objects":[{"StartTime":96935.0,"EndTime":96935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":97051.0,"Objects":[{"StartTime":97051.0,"EndTime":97051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":97281.0,"EndTime":97281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":97397.0,"Objects":[{"StartTime":97397.0,"EndTime":97397.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":97512.0,"Objects":[{"StartTime":97512.0,"EndTime":97512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":97627.0,"EndTime":97627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":97743.0,"Objects":[{"StartTime":97743.0,"EndTime":97743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":97858.0,"EndTime":97858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":97974.0,"Objects":[{"StartTime":97974.0,"EndTime":97974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":98204.0,"EndTime":98204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":98320.0,"Objects":[{"StartTime":98320.0,"EndTime":98320.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":98435.0,"Objects":[{"StartTime":98435.0,"EndTime":98435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":98665.0,"EndTime":98665.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":98781.0,"Objects":[{"StartTime":98781.0,"EndTime":98781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":98897.0,"Objects":[{"StartTime":98897.0,"EndTime":98897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":99127.0,"EndTime":99127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":99243.0,"Objects":[{"StartTime":99243.0,"EndTime":99243.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":99358.0,"Objects":[{"StartTime":99358.0,"EndTime":99358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":99473.0,"EndTime":99473.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":99589.0,"Objects":[{"StartTime":99589.0,"EndTime":99589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":99704.0,"EndTime":99704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":99820.0,"Objects":[{"StartTime":99820.0,"EndTime":99820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":99935.0,"Objects":[{"StartTime":99935.0,"EndTime":99935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":100051.0,"Objects":[{"StartTime":100051.0,"EndTime":100051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":100166.0,"Objects":[{"StartTime":100166.0,"EndTime":100166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":100281.0,"Objects":[{"StartTime":100281.0,"EndTime":100281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":100397.0,"Objects":[{"StartTime":100397.0,"EndTime":100397.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":100512.0,"Objects":[{"StartTime":100512.0,"EndTime":100512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":100628.0,"Objects":[{"StartTime":100628.0,"EndTime":100628.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":100743.0,"Objects":[{"StartTime":100743.0,"EndTime":100743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":100858.0,"EndTime":100858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":100974.0,"Objects":[{"StartTime":100974.0,"EndTime":100974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":101089.0,"EndTime":101089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":101204.0,"Objects":[{"StartTime":101204.0,"EndTime":101204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":101319.0,"EndTime":101319.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":101435.0,"Objects":[{"StartTime":101435.0,"EndTime":101435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":101550.0,"EndTime":101550.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":101666.0,"Objects":[{"StartTime":101666.0,"EndTime":101666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":101781.0,"EndTime":101781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":101897.0,"Objects":[{"StartTime":101897.0,"EndTime":101897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":102012.0,"EndTime":102012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":102127.0,"Objects":[{"StartTime":102127.0,"EndTime":102127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":102243.0,"Objects":[{"StartTime":102243.0,"EndTime":102243.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":102300.0,"Objects":[{"StartTime":102300.0,"EndTime":102300.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":102358.0,"Objects":[{"StartTime":102358.0,"EndTime":102358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":102416.0,"Objects":[{"StartTime":102416.0,"EndTime":102416.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":102474.0,"Objects":[{"StartTime":102474.0,"EndTime":102474.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":102531.0,"Objects":[{"StartTime":102531.0,"EndTime":102531.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":102589.0,"Objects":[{"StartTime":102589.0,"EndTime":102589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":102646.0,"Objects":[{"StartTime":102646.0,"EndTime":102646.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":102704.0,"Objects":[{"StartTime":102704.0,"EndTime":102704.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":102762.0,"Objects":[{"StartTime":102762.0,"EndTime":102762.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":102819.0,"Objects":[{"StartTime":102819.0,"EndTime":102819.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":102935.0,"Objects":[{"StartTime":102935.0,"EndTime":102935.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":102992.0,"EndTime":102992.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":103051.0,"Objects":[{"StartTime":103051.0,"EndTime":103051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":103108.0,"Objects":[{"StartTime":103108.0,"EndTime":103108.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":103166.0,"Objects":[{"StartTime":103166.0,"EndTime":103166.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":103224.0,"Objects":[{"StartTime":103224.0,"EndTime":103224.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":103281.0,"Objects":[{"StartTime":103281.0,"EndTime":103281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":103339.0,"Objects":[{"StartTime":103339.0,"EndTime":103339.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":103397.0,"Objects":[{"StartTime":103397.0,"EndTime":103397.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":103454.0,"Objects":[{"StartTime":103454.0,"EndTime":103454.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":103512.0,"Objects":[{"StartTime":103512.0,"EndTime":103512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":103742.0,"EndTime":103742.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":103858.0,"Objects":[{"StartTime":103858.0,"EndTime":103858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":103974.0,"Objects":[{"StartTime":103974.0,"EndTime":103974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":104204.0,"EndTime":104204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":104320.0,"Objects":[{"StartTime":104320.0,"EndTime":104320.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":104435.0,"Objects":[{"StartTime":104435.0,"EndTime":104435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":104550.0,"EndTime":104550.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":104666.0,"Objects":[{"StartTime":104666.0,"EndTime":104666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":104896.0,"EndTime":104896.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":105012.0,"Objects":[{"StartTime":105012.0,"EndTime":105012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":105127.0,"Objects":[{"StartTime":105127.0,"EndTime":105127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":105243.0,"Objects":[{"StartTime":105243.0,"EndTime":105243.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":105301.0,"Objects":[{"StartTime":105301.0,"EndTime":105301.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":105358.0,"Objects":[{"StartTime":105358.0,"EndTime":105358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":105588.0,"EndTime":105588.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":105704.0,"Objects":[{"StartTime":105704.0,"EndTime":105704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":105820.0,"Objects":[{"StartTime":105820.0,"EndTime":105820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":105935.0,"EndTime":105935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":106051.0,"Objects":[{"StartTime":106051.0,"EndTime":106051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":106166.0,"EndTime":106166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":106281.0,"Objects":[{"StartTime":106281.0,"EndTime":106281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":106396.0,"EndTime":106396.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":106512.0,"Objects":[{"StartTime":106512.0,"EndTime":106512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":106627.0,"EndTime":106627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":106743.0,"Objects":[{"StartTime":106743.0,"EndTime":106743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":106916.0,"EndTime":106916.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":106974.0,"Objects":[{"StartTime":106974.0,"EndTime":106974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":107089.0,"EndTime":107089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":107204.0,"Objects":[{"StartTime":107204.0,"EndTime":107204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":107434.0,"EndTime":107434.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":107551.0,"Objects":[{"StartTime":107551.0,"EndTime":107551.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":107666.0,"Objects":[{"StartTime":107666.0,"EndTime":107666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":107896.0,"EndTime":107896.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":108012.0,"Objects":[{"StartTime":108012.0,"EndTime":108012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":108127.0,"Objects":[{"StartTime":108127.0,"EndTime":108127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":108242.0,"EndTime":108242.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":108358.0,"Objects":[{"StartTime":108358.0,"EndTime":108358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":108588.0,"EndTime":108588.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":108704.0,"Objects":[{"StartTime":108704.0,"EndTime":108704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":108820.0,"Objects":[{"StartTime":108820.0,"EndTime":108820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":108935.0,"Objects":[{"StartTime":108935.0,"EndTime":108935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":108993.0,"Objects":[{"StartTime":108993.0,"EndTime":108993.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":109051.0,"Objects":[{"StartTime":109051.0,"EndTime":109051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":109281.0,"EndTime":109281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":109397.0,"Objects":[{"StartTime":109397.0,"EndTime":109397.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":109512.0,"Objects":[{"StartTime":109512.0,"EndTime":109512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":109627.0,"EndTime":109627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":109743.0,"Objects":[{"StartTime":109743.0,"EndTime":109743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":109858.0,"EndTime":109858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":109974.0,"Objects":[{"StartTime":109974.0,"EndTime":109974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":110089.0,"EndTime":110089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":110204.0,"Objects":[{"StartTime":110204.0,"EndTime":110204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":110319.0,"EndTime":110319.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":110435.0,"Objects":[{"StartTime":110435.0,"EndTime":110435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":110608.0,"EndTime":110608.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":110666.0,"Objects":[{"StartTime":110666.0,"EndTime":110666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":110781.0,"EndTime":110781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":110897.0,"Objects":[{"StartTime":110897.0,"EndTime":110897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":111127.0,"EndTime":111127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":111243.0,"Objects":[{"StartTime":111243.0,"EndTime":111243.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":111358.0,"Objects":[{"StartTime":111358.0,"EndTime":111358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":111588.0,"EndTime":111588.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":111704.0,"Objects":[{"StartTime":111704.0,"EndTime":111704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":111820.0,"Objects":[{"StartTime":111820.0,"EndTime":111820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":111935.0,"EndTime":111935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":112051.0,"Objects":[{"StartTime":112051.0,"EndTime":112051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":112281.0,"EndTime":112281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":112397.0,"Objects":[{"StartTime":112397.0,"EndTime":112397.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":112512.0,"Objects":[{"StartTime":112512.0,"EndTime":112512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":112627.0,"Objects":[{"StartTime":112627.0,"EndTime":112627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":112685.0,"Objects":[{"StartTime":112685.0,"EndTime":112685.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":112743.0,"Objects":[{"StartTime":112743.0,"EndTime":112743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":112973.0,"EndTime":112973.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":113089.0,"Objects":[{"StartTime":113089.0,"EndTime":113089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":113204.0,"Objects":[{"StartTime":113204.0,"EndTime":113204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":113434.0,"EndTime":113434.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":113551.0,"Objects":[{"StartTime":113551.0,"EndTime":113551.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":113666.0,"Objects":[{"StartTime":113666.0,"EndTime":113666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":113896.0,"EndTime":113896.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":114012.0,"Objects":[{"StartTime":114012.0,"EndTime":114012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":114127.0,"Objects":[{"StartTime":114127.0,"EndTime":114127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":114300.0,"EndTime":114300.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":114358.0,"Objects":[{"StartTime":114358.0,"EndTime":114358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":114473.0,"EndTime":114473.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":114589.0,"Objects":[{"StartTime":114589.0,"EndTime":115281.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":115512.0,"Objects":[{"StartTime":115512.0,"EndTime":115512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":116435.0,"Objects":[{"StartTime":116435.0,"EndTime":117127.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":117358.0,"Objects":[{"StartTime":117358.0,"EndTime":117358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":117589.0,"Objects":[{"StartTime":117589.0,"EndTime":117589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":117820.0,"Objects":[{"StartTime":117820.0,"EndTime":117820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":118051.0,"Objects":[{"StartTime":118051.0,"EndTime":118051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":118166.0,"EndTime":118166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":118281.0,"Objects":[{"StartTime":118281.0,"EndTime":118281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":118396.0,"EndTime":118396.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":118512.0,"Objects":[{"StartTime":118512.0,"EndTime":118512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":118627.0,"EndTime":118627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":118743.0,"Objects":[{"StartTime":118743.0,"EndTime":118743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":118858.0,"Objects":[{"StartTime":118858.0,"EndTime":118858.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":119088.0,"EndTime":119088.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":119204.0,"Objects":[{"StartTime":119204.0,"EndTime":119204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":119262.0,"Objects":[{"StartTime":119262.0,"EndTime":119262.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":119319.0,"Objects":[{"StartTime":119319.0,"EndTime":119319.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":119377.0,"Objects":[{"StartTime":119377.0,"EndTime":119377.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":119434.0,"Objects":[{"StartTime":119434.0,"EndTime":119434.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":119493.0,"Objects":[{"StartTime":119493.0,"EndTime":119493.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":119551.0,"Objects":[{"StartTime":119551.0,"EndTime":119551.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":119608.0,"Objects":[{"StartTime":119608.0,"EndTime":119608.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":119666.0,"Objects":[{"StartTime":119666.0,"EndTime":119666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":119723.0,"Objects":[{"StartTime":119723.0,"EndTime":119723.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":119781.0,"Objects":[{"StartTime":119781.0,"EndTime":119781.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":119839.0,"Objects":[{"StartTime":119839.0,"EndTime":119839.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":119897.0,"Objects":[{"StartTime":119897.0,"EndTime":119897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":119954.0,"Objects":[{"StartTime":119954.0,"EndTime":119954.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":120012.0,"Objects":[{"StartTime":120012.0,"EndTime":120012.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":120070.0,"Objects":[{"StartTime":120070.0,"EndTime":120070.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":120127.0,"Objects":[{"StartTime":120127.0,"EndTime":120127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":120357.0,"EndTime":120357.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":120474.0,"Objects":[{"StartTime":120474.0,"EndTime":120474.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":120704.0,"EndTime":120704.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":120820.0,"Objects":[{"StartTime":120820.0,"EndTime":120820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":120935.0,"EndTime":120935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":121051.0,"Objects":[{"StartTime":121051.0,"EndTime":121051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":121166.0,"Objects":[{"StartTime":121166.0,"EndTime":121166.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":121396.0,"EndTime":121396.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":121512.0,"Objects":[{"StartTime":121512.0,"EndTime":121512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":121627.0,"EndTime":121627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":121743.0,"Objects":[{"StartTime":121743.0,"EndTime":121743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":121858.0,"EndTime":121858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":121974.0,"Objects":[{"StartTime":121974.0,"EndTime":121974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":122204.0,"EndTime":122204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":122320.0,"Objects":[{"StartTime":122320.0,"EndTime":122320.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":122550.0,"EndTime":122550.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":122666.0,"Objects":[{"StartTime":122666.0,"EndTime":122666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":122781.0,"EndTime":122781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":122897.0,"Objects":[{"StartTime":122897.0,"EndTime":122897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":123012.0,"Objects":[{"StartTime":123012.0,"EndTime":123012.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":123242.0,"EndTime":123242.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":123358.0,"Objects":[{"StartTime":123358.0,"EndTime":123358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":123473.0,"EndTime":123473.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":123589.0,"Objects":[{"StartTime":123589.0,"EndTime":123589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":123704.0,"EndTime":123704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":123820.0,"Objects":[{"StartTime":123820.0,"EndTime":123820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":124050.0,"EndTime":124050.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":124166.0,"Objects":[{"StartTime":124166.0,"EndTime":124166.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":124396.0,"EndTime":124396.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":124512.0,"Objects":[{"StartTime":124512.0,"EndTime":124512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":124627.0,"EndTime":124627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":124743.0,"Objects":[{"StartTime":124743.0,"EndTime":124743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":124858.0,"Objects":[{"StartTime":124858.0,"EndTime":124858.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":125088.0,"EndTime":125088.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":125204.0,"Objects":[{"StartTime":125204.0,"EndTime":125204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":125319.0,"EndTime":125319.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":125435.0,"Objects":[{"StartTime":125435.0,"EndTime":125435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":125550.0,"EndTime":125550.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":125666.0,"Objects":[{"StartTime":125666.0,"EndTime":125666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":125781.0,"Objects":[{"StartTime":125781.0,"EndTime":125781.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":125897.0,"Objects":[{"StartTime":125897.0,"EndTime":125897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":126012.0,"Objects":[{"StartTime":126012.0,"EndTime":126012.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":126127.0,"Objects":[{"StartTime":126127.0,"EndTime":126127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":126357.0,"EndTime":126357.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":126474.0,"Objects":[{"StartTime":126474.0,"EndTime":126474.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":126589.0,"Objects":[{"StartTime":126589.0,"EndTime":126589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":126762.0,"EndTime":126762.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":126820.0,"Objects":[{"StartTime":126820.0,"EndTime":126820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":127050.0,"EndTime":127050.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":127166.0,"Objects":[{"StartTime":127166.0,"EndTime":127166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":127281.0,"Objects":[{"StartTime":127281.0,"EndTime":127281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":127397.0,"Objects":[{"StartTime":127397.0,"EndTime":127397.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":127454.0,"Objects":[{"StartTime":127454.0,"EndTime":127454.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":127512.0,"Objects":[{"StartTime":127512.0,"EndTime":127512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":127742.0,"EndTime":127742.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":127858.0,"Objects":[{"StartTime":127858.0,"EndTime":127858.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":128088.0,"EndTime":128088.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":128204.0,"Objects":[{"StartTime":128204.0,"EndTime":128204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":128319.0,"EndTime":128319.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":128435.0,"Objects":[{"StartTime":128435.0,"EndTime":128435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":128551.0,"Objects":[{"StartTime":128551.0,"EndTime":128551.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":128781.0,"EndTime":128781.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":128897.0,"Objects":[{"StartTime":128897.0,"EndTime":128897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":129012.0,"EndTime":129012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":129127.0,"Objects":[{"StartTime":129127.0,"EndTime":129127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":129242.0,"EndTime":129242.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":129358.0,"Objects":[{"StartTime":129358.0,"EndTime":129358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":129588.0,"EndTime":129588.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":129704.0,"Objects":[{"StartTime":129704.0,"EndTime":129704.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":129934.0,"EndTime":129934.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":130051.0,"Objects":[{"StartTime":130051.0,"EndTime":130051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":130166.0,"EndTime":130166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":130281.0,"Objects":[{"StartTime":130281.0,"EndTime":130281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":130397.0,"Objects":[{"StartTime":130397.0,"EndTime":130397.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":130627.0,"EndTime":130627.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":130743.0,"Objects":[{"StartTime":130743.0,"EndTime":130743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":130858.0,"EndTime":130858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":130974.0,"Objects":[{"StartTime":130974.0,"EndTime":130974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":131089.0,"EndTime":131089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":131204.0,"Objects":[{"StartTime":131204.0,"EndTime":131204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":131434.0,"EndTime":131434.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":131551.0,"Objects":[{"StartTime":131551.0,"EndTime":131551.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":131781.0,"EndTime":131781.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":131897.0,"Objects":[{"StartTime":131897.0,"EndTime":131897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":132012.0,"EndTime":132012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":132127.0,"Objects":[{"StartTime":132127.0,"EndTime":132127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":132243.0,"Objects":[{"StartTime":132243.0,"EndTime":132243.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":132473.0,"EndTime":132473.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":132589.0,"Objects":[{"StartTime":132589.0,"EndTime":132589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":132704.0,"EndTime":132704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":132820.0,"Objects":[{"StartTime":132820.0,"EndTime":132820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":132935.0,"EndTime":132935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":133051.0,"Objects":[{"StartTime":133051.0,"EndTime":133051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":133108.0,"Objects":[{"StartTime":133108.0,"EndTime":133108.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":133166.0,"Objects":[{"StartTime":133166.0,"EndTime":133166.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":133224.0,"Objects":[{"StartTime":133224.0,"EndTime":133224.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":133281.0,"Objects":[{"StartTime":133281.0,"EndTime":133281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":133339.0,"Objects":[{"StartTime":133339.0,"EndTime":133339.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":133397.0,"Objects":[{"StartTime":133397.0,"EndTime":133397.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":133454.0,"Objects":[{"StartTime":133454.0,"EndTime":133454.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":133512.0,"Objects":[{"StartTime":133512.0,"EndTime":133512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":133743.0,"Objects":[{"StartTime":133743.0,"EndTime":133743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":133858.0,"Objects":[{"StartTime":133858.0,"EndTime":133858.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":133973.0,"Objects":[{"StartTime":133973.0,"EndTime":133973.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":134031.0,"Objects":[{"StartTime":134031.0,"EndTime":134031.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":134088.0,"Objects":[{"StartTime":134088.0,"EndTime":134088.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":134146.0,"Objects":[{"StartTime":134146.0,"EndTime":134146.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":134204.0,"Objects":[{"StartTime":134204.0,"EndTime":134204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":134434.0,"EndTime":134434.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":134666.0,"Objects":[{"StartTime":134666.0,"EndTime":134666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":134781.0,"EndTime":134781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":134897.0,"Objects":[{"StartTime":134897.0,"EndTime":134897.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":135012.0,"EndTime":135012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":135127.0,"Objects":[{"StartTime":135127.0,"EndTime":135127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":135242.0,"EndTime":135242.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":135358.0,"Objects":[{"StartTime":135358.0,"EndTime":135358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":135588.0,"EndTime":135588.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":135704.0,"Objects":[{"StartTime":135704.0,"EndTime":135704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":135819.0,"EndTime":135819.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":135935.0,"Objects":[{"StartTime":135935.0,"EndTime":135935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":136050.0,"EndTime":136050.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":136166.0,"Objects":[{"StartTime":136166.0,"EndTime":136166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":136281.0,"EndTime":136281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":136397.0,"Objects":[{"StartTime":136397.0,"EndTime":136397.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":136512.0,"EndTime":136512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":136627.0,"Objects":[{"StartTime":136627.0,"EndTime":136627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":136743.0,"Objects":[{"StartTime":136743.0,"EndTime":136743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":136858.0,"EndTime":136858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":136974.0,"Objects":[{"StartTime":136974.0,"EndTime":136974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":137089.0,"EndTime":137089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":137204.0,"Objects":[{"StartTime":137204.0,"EndTime":137204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":137319.0,"EndTime":137319.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":137435.0,"Objects":[{"StartTime":137435.0,"EndTime":137435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":137550.0,"EndTime":137550.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":137666.0,"Objects":[{"StartTime":137666.0,"EndTime":137666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":137896.0,"EndTime":137896.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":138012.0,"Objects":[{"StartTime":138012.0,"EndTime":138012.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":138242.0,"EndTime":138242.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":138358.0,"Objects":[{"StartTime":138358.0,"EndTime":138358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":138473.0,"EndTime":138473.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":138589.0,"Objects":[{"StartTime":138589.0,"EndTime":138589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":138819.0,"EndTime":138819.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":138935.0,"Objects":[{"StartTime":138935.0,"EndTime":138935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":139051.0,"Objects":[{"StartTime":139051.0,"EndTime":139051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":139281.0,"EndTime":139281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":139397.0,"Objects":[{"StartTime":139397.0,"EndTime":139397.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":139512.0,"Objects":[{"StartTime":139512.0,"EndTime":139512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":139742.0,"EndTime":139742.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":139858.0,"Objects":[{"StartTime":139858.0,"EndTime":139858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":139974.0,"Objects":[{"StartTime":139974.0,"EndTime":139974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":140089.0,"EndTime":140089.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":140204.0,"Objects":[{"StartTime":140204.0,"EndTime":140204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":140319.0,"EndTime":140319.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":140435.0,"Objects":[{"StartTime":140435.0,"EndTime":140435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":140550.0,"EndTime":140550.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":140666.0,"Objects":[{"StartTime":140666.0,"EndTime":140666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":140781.0,"EndTime":140781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":140897.0,"Objects":[{"StartTime":140897.0,"EndTime":140897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":141012.0,"EndTime":141012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":141127.0,"Objects":[{"StartTime":141127.0,"EndTime":141127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":141242.0,"EndTime":141242.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":141358.0,"Objects":[{"StartTime":141358.0,"EndTime":141358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":141588.0,"EndTime":141588.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":141704.0,"Objects":[{"StartTime":141704.0,"EndTime":141704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":141820.0,"Objects":[{"StartTime":141820.0,"EndTime":141820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":142050.0,"EndTime":142050.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":142166.0,"Objects":[{"StartTime":142166.0,"EndTime":142166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":142281.0,"Objects":[{"StartTime":142281.0,"EndTime":142281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":142396.0,"EndTime":142396.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":142512.0,"Objects":[{"StartTime":142512.0,"EndTime":142512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":142627.0,"EndTime":142627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":142743.0,"Objects":[{"StartTime":142743.0,"EndTime":142743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":142858.0,"EndTime":142858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":142974.0,"Objects":[{"StartTime":142974.0,"EndTime":142974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":143089.0,"EndTime":143089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":143204.0,"Objects":[{"StartTime":143204.0,"EndTime":143204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":143377.0,"EndTime":143377.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":143435.0,"Objects":[{"StartTime":143435.0,"EndTime":143435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":143608.0,"EndTime":143608.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":143666.0,"Objects":[{"StartTime":143666.0,"EndTime":143666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":143839.0,"EndTime":143839.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":143897.0,"Objects":[{"StartTime":143897.0,"EndTime":143897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":144070.0,"EndTime":144070.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":144127.0,"Objects":[{"StartTime":144127.0,"EndTime":144127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":144357.0,"EndTime":144357.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":144474.0,"Objects":[{"StartTime":144474.0,"EndTime":144474.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":144589.0,"Objects":[{"StartTime":144589.0,"EndTime":144589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":144819.0,"EndTime":144819.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":144935.0,"Objects":[{"StartTime":144935.0,"EndTime":144935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":145051.0,"Objects":[{"StartTime":145051.0,"EndTime":145051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":145166.0,"EndTime":145166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":145281.0,"Objects":[{"StartTime":145281.0,"EndTime":145281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":145396.0,"EndTime":145396.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":145512.0,"Objects":[{"StartTime":145512.0,"EndTime":145512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":145627.0,"EndTime":145627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":145742.0,"Objects":[{"StartTime":145742.0,"EndTime":145742.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":145857.0,"EndTime":145857.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":145974.0,"Objects":[{"StartTime":145974.0,"EndTime":145974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":146089.0,"EndTime":146089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":146204.0,"Objects":[{"StartTime":146204.0,"EndTime":146204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":146319.0,"EndTime":146319.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":146435.0,"Objects":[{"StartTime":146435.0,"EndTime":146435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":146550.0,"EndTime":146550.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":146666.0,"Objects":[{"StartTime":146666.0,"EndTime":146666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":146781.0,"EndTime":146781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":146897.0,"Objects":[{"StartTime":146897.0,"EndTime":146897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":147012.0,"EndTime":147012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":147127.0,"Objects":[{"StartTime":147127.0,"EndTime":147127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":147242.0,"EndTime":147242.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":147358.0,"Objects":[{"StartTime":147358.0,"EndTime":147358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":147473.0,"EndTime":147473.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":147589.0,"Objects":[{"StartTime":147589.0,"EndTime":147589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":147704.0,"EndTime":147704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":147820.0,"Objects":[{"StartTime":147820.0,"EndTime":147820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":147935.0,"EndTime":147935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":148050.0,"Objects":[{"StartTime":148050.0,"EndTime":148050.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":148165.0,"EndTime":148165.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":148281.0,"Objects":[{"StartTime":148281.0,"EndTime":148281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":148397.0,"Objects":[{"StartTime":148397.0,"EndTime":148397.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":148512.0,"Objects":[{"StartTime":148512.0,"EndTime":148512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":148627.0,"Objects":[{"StartTime":148627.0,"EndTime":148627.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":148743.0,"Objects":[{"StartTime":148743.0,"EndTime":148743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":148858.0,"Objects":[{"StartTime":148858.0,"EndTime":148858.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":148916.0,"Objects":[{"StartTime":148916.0,"EndTime":148916.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":148974.0,"Objects":[{"StartTime":148974.0,"EndTime":148974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":149089.0,"Objects":[{"StartTime":149089.0,"EndTime":149089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":149204.0,"Objects":[{"StartTime":149204.0,"EndTime":149204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":149320.0,"Objects":[{"StartTime":149320.0,"EndTime":149320.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":149435.0,"Objects":[{"StartTime":149435.0,"EndTime":149435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":149551.0,"Objects":[{"StartTime":149551.0,"EndTime":149551.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":149666.0,"Objects":[{"StartTime":149666.0,"EndTime":150358.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":150589.0,"Objects":[{"StartTime":150589.0,"EndTime":151281.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":151512.0,"Objects":[{"StartTime":151512.0,"EndTime":152204.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":152320.0,"Objects":[{"StartTime":152320.0,"EndTime":152320.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":152377.0,"Objects":[{"StartTime":152377.0,"EndTime":152377.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":152435.0,"Objects":[{"StartTime":152435.0,"EndTime":152435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":152551.0,"Objects":[{"StartTime":152551.0,"EndTime":152551.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":152666.0,"Objects":[{"StartTime":152666.0,"EndTime":152666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":152781.0,"Objects":[{"StartTime":152781.0,"EndTime":152781.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":152897.0,"Objects":[{"StartTime":152897.0,"EndTime":152897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":153012.0,"Objects":[{"StartTime":153012.0,"EndTime":153012.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":153128.0,"Objects":[{"StartTime":153128.0,"EndTime":153128.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":153243.0,"Objects":[{"StartTime":153243.0,"EndTime":153243.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":153358.0,"Objects":[{"StartTime":153358.0,"EndTime":154050.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":154281.0,"Objects":[{"StartTime":154281.0,"EndTime":154973.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":155204.0,"Objects":[{"StartTime":155204.0,"EndTime":155896.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":156127.0,"Objects":[{"StartTime":156127.0,"EndTime":156127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":156185.0,"Objects":[{"StartTime":156185.0,"EndTime":156185.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":156243.0,"Objects":[{"StartTime":156243.0,"EndTime":156243.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":156358.0,"Objects":[{"StartTime":156358.0,"EndTime":156358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":156474.0,"Objects":[{"StartTime":156474.0,"EndTime":156474.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":156531.0,"Objects":[{"StartTime":156531.0,"EndTime":156531.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":156589.0,"Objects":[{"StartTime":156589.0,"EndTime":156589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":156704.0,"Objects":[{"StartTime":156704.0,"EndTime":156704.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":156820.0,"Objects":[{"StartTime":156820.0,"EndTime":156820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":156935.0,"Objects":[{"StartTime":156935.0,"EndTime":156935.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":157051.0,"Objects":[{"StartTime":157051.0,"EndTime":157743.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":157974.0,"Objects":[{"StartTime":157974.0,"EndTime":158666.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":158897.0,"Objects":[{"StartTime":158897.0,"EndTime":159589.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":159704.0,"Objects":[{"StartTime":159704.0,"EndTime":159704.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":159762.0,"Objects":[{"StartTime":159762.0,"EndTime":159762.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":159820.0,"Objects":[{"StartTime":159820.0,"EndTime":159820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":159935.0,"Objects":[{"StartTime":159935.0,"EndTime":159935.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":160051.0,"Objects":[{"StartTime":160051.0,"EndTime":160051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":160166.0,"Objects":[{"StartTime":160166.0,"EndTime":160166.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":160281.0,"Objects":[{"StartTime":160281.0,"EndTime":160281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":160397.0,"Objects":[{"StartTime":160397.0,"EndTime":160397.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":160513.0,"Objects":[{"StartTime":160513.0,"EndTime":160513.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":160627.0,"Objects":[{"StartTime":160627.0,"EndTime":160627.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":160743.0,"Objects":[{"StartTime":160743.0,"EndTime":160743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":160858.0,"EndTime":160858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":160974.0,"Objects":[{"StartTime":160974.0,"EndTime":160974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":161089.0,"EndTime":161089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":161204.0,"Objects":[{"StartTime":161204.0,"EndTime":161204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":161319.0,"EndTime":161319.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":161435.0,"Objects":[{"StartTime":161435.0,"EndTime":161435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":161550.0,"EndTime":161550.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":161666.0,"Objects":[{"StartTime":161666.0,"EndTime":161666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":161781.0,"EndTime":161781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":161897.0,"Objects":[{"StartTime":161897.0,"EndTime":161897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":162012.0,"EndTime":162012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":162127.0,"Objects":[{"StartTime":162127.0,"EndTime":162127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":162242.0,"EndTime":162242.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":162358.0,"Objects":[{"StartTime":162358.0,"EndTime":162358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":162473.0,"EndTime":162473.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":162589.0,"Objects":[{"StartTime":162589.0,"EndTime":162589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":162704.0,"EndTime":162704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":162820.0,"Objects":[{"StartTime":162820.0,"EndTime":162820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":162935.0,"EndTime":162935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":163051.0,"Objects":[{"StartTime":163051.0,"EndTime":163051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":163166.0,"EndTime":163166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":163281.0,"Objects":[{"StartTime":163281.0,"EndTime":163281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":163396.0,"EndTime":163396.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":163512.0,"Objects":[{"StartTime":163512.0,"EndTime":163512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":163627.0,"EndTime":163627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":163743.0,"Objects":[{"StartTime":163743.0,"EndTime":163743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":163858.0,"EndTime":163858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":163974.0,"Objects":[{"StartTime":163974.0,"EndTime":163974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":164089.0,"EndTime":164089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":164205.0,"Objects":[{"StartTime":164205.0,"EndTime":164205.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":164320.0,"EndTime":164320.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":164435.0,"Objects":[{"StartTime":164435.0,"EndTime":164435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":164550.0,"EndTime":164550.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":164666.0,"Objects":[{"StartTime":164666.0,"EndTime":164666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":164781.0,"EndTime":164781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":164897.0,"Objects":[{"StartTime":164897.0,"EndTime":164897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":165012.0,"EndTime":165012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":165127.0,"Objects":[{"StartTime":165127.0,"EndTime":165127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":165243.0,"Objects":[{"StartTime":165243.0,"EndTime":165243.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":165301.0,"Objects":[{"StartTime":165301.0,"EndTime":165301.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":165358.0,"Objects":[{"StartTime":165358.0,"EndTime":165358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":165473.0,"EndTime":165473.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":165589.0,"Objects":[{"StartTime":165589.0,"EndTime":165589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":165704.0,"Objects":[{"StartTime":165704.0,"EndTime":165704.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":165820.0,"Objects":[{"StartTime":165820.0,"EndTime":165820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":165877.0,"Objects":[{"StartTime":165877.0,"EndTime":165877.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":165935.0,"Objects":[{"StartTime":165935.0,"EndTime":165935.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":165993.0,"Objects":[{"StartTime":165993.0,"EndTime":165993.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":166050.0,"Objects":[{"StartTime":166050.0,"EndTime":166050.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":166108.0,"Objects":[{"StartTime":166108.0,"EndTime":166108.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":166166.0,"Objects":[{"StartTime":166166.0,"EndTime":166166.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":166224.0,"Objects":[{"StartTime":166224.0,"EndTime":166224.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":166281.0,"Objects":[{"StartTime":166281.0,"EndTime":166281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":166511.0,"EndTime":166511.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":166627.0,"Objects":[{"StartTime":166627.0,"EndTime":166627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":166743.0,"Objects":[{"StartTime":166743.0,"EndTime":166743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":166973.0,"EndTime":166973.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":167089.0,"Objects":[{"StartTime":167089.0,"EndTime":167089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":167204.0,"Objects":[{"StartTime":167204.0,"EndTime":167204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":167319.0,"EndTime":167319.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":167435.0,"Objects":[{"StartTime":167435.0,"EndTime":167435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":167608.0,"EndTime":167608.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":167666.0,"Objects":[{"StartTime":167666.0,"EndTime":167666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":167781.0,"EndTime":167781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":167897.0,"Objects":[{"StartTime":167897.0,"EndTime":167897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":168012.0,"EndTime":168012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":168127.0,"Objects":[{"StartTime":168127.0,"EndTime":168127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":168357.0,"EndTime":168357.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":168474.0,"Objects":[{"StartTime":168474.0,"EndTime":168474.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":168704.0,"EndTime":168704.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":168820.0,"Objects":[{"StartTime":168820.0,"EndTime":168820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":168935.0,"EndTime":168935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":169051.0,"Objects":[{"StartTime":169051.0,"EndTime":169051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":169166.0,"EndTime":169166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":169281.0,"Objects":[{"StartTime":169281.0,"EndTime":169281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":169396.0,"EndTime":169396.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":169512.0,"Objects":[{"StartTime":169512.0,"EndTime":169512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":169627.0,"EndTime":169627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":169743.0,"Objects":[{"StartTime":169743.0,"EndTime":169743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":169800.0,"Objects":[{"StartTime":169800.0,"EndTime":169800.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":169858.0,"Objects":[{"StartTime":169858.0,"EndTime":169858.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":169916.0,"Objects":[{"StartTime":169916.0,"EndTime":169916.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":169974.0,"Objects":[{"StartTime":169974.0,"EndTime":169974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":170204.0,"EndTime":170204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":170320.0,"Objects":[{"StartTime":170320.0,"EndTime":170320.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":170435.0,"Objects":[{"StartTime":170435.0,"EndTime":170435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":170665.0,"EndTime":170665.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":170781.0,"Objects":[{"StartTime":170781.0,"EndTime":170781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":170897.0,"Objects":[{"StartTime":170897.0,"EndTime":170897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":171012.0,"EndTime":171012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":171127.0,"Objects":[{"StartTime":171127.0,"EndTime":171127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":171300.0,"EndTime":171300.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":171358.0,"Objects":[{"StartTime":171358.0,"EndTime":171358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":171473.0,"EndTime":171473.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":171589.0,"Objects":[{"StartTime":171589.0,"EndTime":171589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":171704.0,"EndTime":171704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":171820.0,"Objects":[{"StartTime":171820.0,"EndTime":171820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":172050.0,"EndTime":172050.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":172166.0,"Objects":[{"StartTime":172166.0,"EndTime":172166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":172281.0,"Objects":[{"StartTime":172281.0,"EndTime":172281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":172511.0,"EndTime":172511.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":172628.0,"Objects":[{"StartTime":172628.0,"EndTime":172628.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":172743.0,"Objects":[{"StartTime":172743.0,"EndTime":172743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":172916.0,"EndTime":172916.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":172974.0,"Objects":[{"StartTime":172974.0,"EndTime":172974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":173089.0,"EndTime":173089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":173204.0,"Objects":[{"StartTime":173204.0,"EndTime":173204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":173319.0,"EndTime":173319.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":173435.0,"Objects":[{"StartTime":173435.0,"EndTime":173435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":173550.0,"EndTime":173550.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":173666.0,"Objects":[{"StartTime":173666.0,"EndTime":173666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":173896.0,"EndTime":173896.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":174012.0,"Objects":[{"StartTime":174012.0,"EndTime":174012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":174127.0,"Objects":[{"StartTime":174127.0,"EndTime":174127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":174357.0,"EndTime":174357.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":174474.0,"Objects":[{"StartTime":174474.0,"EndTime":174474.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":174589.0,"Objects":[{"StartTime":174589.0,"EndTime":174589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":174819.0,"EndTime":174819.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":174935.0,"Objects":[{"StartTime":174935.0,"EndTime":174935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":175051.0,"Objects":[{"StartTime":175051.0,"EndTime":175051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":175166.0,"EndTime":175166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":175281.0,"Objects":[{"StartTime":175281.0,"EndTime":175281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":175396.0,"EndTime":175396.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":175512.0,"Objects":[{"StartTime":175512.0,"EndTime":175512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":175742.0,"EndTime":175742.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":175858.0,"Objects":[{"StartTime":175858.0,"EndTime":175858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":175974.0,"Objects":[{"StartTime":175974.0,"EndTime":175974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":176204.0,"EndTime":176204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":176320.0,"Objects":[{"StartTime":176320.0,"EndTime":176320.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":176435.0,"Objects":[{"StartTime":176435.0,"EndTime":176435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":176665.0,"EndTime":176665.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":176781.0,"Objects":[{"StartTime":176781.0,"EndTime":176781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":176897.0,"Objects":[{"StartTime":176897.0,"EndTime":176897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":177012.0,"EndTime":177012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":177127.0,"Objects":[{"StartTime":177127.0,"EndTime":177127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":177242.0,"EndTime":177242.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":177358.0,"Objects":[{"StartTime":177358.0,"EndTime":177358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true}]},{"StartTime":177474.0,"Objects":[{"StartTime":177474.0,"EndTime":177474.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":177589.0,"Objects":[{"StartTime":177589.0,"EndTime":177589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":177704.0,"Objects":[{"StartTime":177704.0,"EndTime":177704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":177820.0,"Objects":[{"StartTime":177820.0,"EndTime":177820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":177935.0,"Objects":[{"StartTime":177935.0,"EndTime":177935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":178051.0,"Objects":[{"StartTime":178051.0,"EndTime":178051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":178166.0,"Objects":[{"StartTime":178166.0,"EndTime":178166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":178281.0,"Objects":[{"StartTime":178281.0,"EndTime":178281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":178396.0,"EndTime":178396.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":178512.0,"Objects":[{"StartTime":178512.0,"EndTime":178512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":178627.0,"EndTime":178627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":178743.0,"Objects":[{"StartTime":178743.0,"EndTime":178743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":178858.0,"EndTime":178858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":178974.0,"Objects":[{"StartTime":178974.0,"EndTime":178974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":179089.0,"EndTime":179089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":179204.0,"Objects":[{"StartTime":179204.0,"EndTime":179204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":179319.0,"EndTime":179319.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":179435.0,"Objects":[{"StartTime":179435.0,"EndTime":179435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":179550.0,"EndTime":179550.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":179666.0,"Objects":[{"StartTime":179666.0,"EndTime":179666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":179781.0,"Objects":[{"StartTime":179781.0,"EndTime":179781.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":179839.0,"Objects":[{"StartTime":179839.0,"EndTime":179839.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":179897.0,"Objects":[{"StartTime":179897.0,"EndTime":179897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":180012.0,"Objects":[{"StartTime":180012.0,"EndTime":180012.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":180127.0,"Objects":[{"StartTime":180127.0,"EndTime":180127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":180243.0,"Objects":[{"StartTime":180243.0,"EndTime":180243.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":180301.0,"Objects":[{"StartTime":180301.0,"EndTime":180301.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":180358.0,"Objects":[{"StartTime":180358.0,"EndTime":180358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":180473.0,"EndTime":180473.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":180589.0,"Objects":[{"StartTime":180589.0,"EndTime":180589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":180704.0,"Objects":[{"StartTime":180704.0,"EndTime":180704.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":180820.0,"Objects":[{"StartTime":180820.0,"EndTime":180820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":180935.0,"Objects":[{"StartTime":180935.0,"EndTime":180935.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":181051.0,"Objects":[{"StartTime":181051.0,"EndTime":181051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":181281.0,"EndTime":181281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":181397.0,"Objects":[{"StartTime":181397.0,"EndTime":181397.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":181512.0,"Objects":[{"StartTime":181512.0,"EndTime":181512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":181742.0,"EndTime":181742.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":181858.0,"Objects":[{"StartTime":181858.0,"EndTime":181858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":181974.0,"Objects":[{"StartTime":181974.0,"EndTime":181974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":182089.0,"EndTime":182089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":182204.0,"Objects":[{"StartTime":182204.0,"EndTime":182204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":182377.0,"EndTime":182377.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":182435.0,"Objects":[{"StartTime":182435.0,"EndTime":182435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":182550.0,"EndTime":182550.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":182666.0,"Objects":[{"StartTime":182666.0,"EndTime":182666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":182781.0,"Objects":[{"StartTime":182781.0,"EndTime":182781.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":183011.0,"EndTime":183011.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":183127.0,"Objects":[{"StartTime":183127.0,"EndTime":183127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":183357.0,"EndTime":183357.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":183474.0,"Objects":[{"StartTime":183474.0,"EndTime":183474.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":183589.0,"EndTime":183589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":183704.0,"Objects":[{"StartTime":183704.0,"EndTime":183704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":183820.0,"Objects":[{"StartTime":183820.0,"EndTime":183820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":184050.0,"EndTime":184050.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":184166.0,"Objects":[{"StartTime":184166.0,"EndTime":184166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":184281.0,"Objects":[{"StartTime":184281.0,"EndTime":184281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":184396.0,"EndTime":184396.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":184512.0,"Objects":[{"StartTime":184512.0,"EndTime":184512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":184627.0,"EndTime":184627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":184743.0,"Objects":[{"StartTime":184743.0,"EndTime":184743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":184973.0,"EndTime":184973.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":185089.0,"Objects":[{"StartTime":185089.0,"EndTime":185089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":185204.0,"Objects":[{"StartTime":185204.0,"EndTime":185204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":185434.0,"EndTime":185434.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":185551.0,"Objects":[{"StartTime":185551.0,"EndTime":185551.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":185666.0,"Objects":[{"StartTime":185666.0,"EndTime":185666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":185781.0,"EndTime":185781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":185897.0,"Objects":[{"StartTime":185897.0,"EndTime":185897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":186070.0,"EndTime":186070.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":186127.0,"Objects":[{"StartTime":186127.0,"EndTime":186127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":186242.0,"EndTime":186242.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":186358.0,"Objects":[{"StartTime":186358.0,"EndTime":186358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":186474.0,"Objects":[{"StartTime":186474.0,"EndTime":186474.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":186704.0,"EndTime":186704.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":186820.0,"Objects":[{"StartTime":186820.0,"EndTime":186820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":187050.0,"EndTime":187050.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":187166.0,"Objects":[{"StartTime":187166.0,"EndTime":187166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":187281.0,"Objects":[{"StartTime":187281.0,"EndTime":187281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":187396.0,"EndTime":187396.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":187512.0,"Objects":[{"StartTime":187512.0,"EndTime":187512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":187742.0,"EndTime":187742.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":187858.0,"Objects":[{"StartTime":187858.0,"EndTime":187858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":187974.0,"Objects":[{"StartTime":187974.0,"EndTime":187974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":188089.0,"EndTime":188089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":188204.0,"Objects":[{"StartTime":188204.0,"EndTime":188204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":188319.0,"EndTime":188319.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":188435.0,"Objects":[{"StartTime":188435.0,"EndTime":188435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":188665.0,"EndTime":188665.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":188781.0,"Objects":[{"StartTime":188781.0,"EndTime":188781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":188897.0,"Objects":[{"StartTime":188897.0,"EndTime":188897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":189127.0,"EndTime":189127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":189243.0,"Objects":[{"StartTime":189243.0,"EndTime":189243.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":189358.0,"Objects":[{"StartTime":189358.0,"EndTime":189358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":189473.0,"EndTime":189473.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":189589.0,"Objects":[{"StartTime":189589.0,"EndTime":189589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":189819.0,"EndTime":189819.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":189935.0,"Objects":[{"StartTime":189935.0,"EndTime":189935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":190051.0,"Objects":[{"StartTime":190051.0,"EndTime":190051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":190166.0,"EndTime":190166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":190281.0,"Objects":[{"StartTime":190281.0,"EndTime":190281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":190511.0,"EndTime":190511.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":190627.0,"Objects":[{"StartTime":190627.0,"EndTime":190627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":190743.0,"Objects":[{"StartTime":190743.0,"EndTime":190743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":190858.0,"EndTime":190858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":190974.0,"Objects":[{"StartTime":190974.0,"EndTime":190974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":191089.0,"EndTime":191089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":191204.0,"Objects":[{"StartTime":191204.0,"EndTime":191204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":191434.0,"EndTime":191434.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":191551.0,"Objects":[{"StartTime":191551.0,"EndTime":191551.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":191666.0,"Objects":[{"StartTime":191666.0,"EndTime":191666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":191781.0,"EndTime":191781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":191897.0,"Objects":[{"StartTime":191897.0,"EndTime":191897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":192012.0,"EndTime":192012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":192127.0,"Objects":[{"StartTime":192127.0,"EndTime":192819.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":193051.0,"Objects":[{"StartTime":193051.0,"EndTime":193051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":193974.0,"Objects":[{"StartTime":193974.0,"EndTime":194666.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":194898.0,"Objects":[{"StartTime":194898.0,"EndTime":194898.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":195127.0,"Objects":[{"StartTime":195127.0,"EndTime":195127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":195358.0,"Objects":[{"StartTime":195358.0,"EndTime":195358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":195589.0,"Objects":[{"StartTime":195589.0,"EndTime":195589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":195704.0,"EndTime":195704.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":195820.0,"Objects":[{"StartTime":195820.0,"EndTime":195820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":195935.0,"EndTime":195935.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":196051.0,"Objects":[{"StartTime":196051.0,"EndTime":196051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":196166.0,"EndTime":196166.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":196281.0,"Objects":[{"StartTime":196281.0,"EndTime":196281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":196397.0,"Objects":[{"StartTime":196397.0,"EndTime":196397.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":196454.0,"Objects":[{"StartTime":196454.0,"EndTime":196454.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":196512.0,"Objects":[{"StartTime":196512.0,"EndTime":196512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":196570.0,"Objects":[{"StartTime":196570.0,"EndTime":196570.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":196627.0,"Objects":[{"StartTime":196627.0,"EndTime":196627.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":196685.0,"Objects":[{"StartTime":196685.0,"EndTime":196685.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":196743.0,"Objects":[{"StartTime":196743.0,"EndTime":196743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":196801.0,"Objects":[{"StartTime":196801.0,"EndTime":196801.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":196858.0,"Objects":[{"StartTime":196858.0,"EndTime":196858.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":196916.0,"Objects":[{"StartTime":196916.0,"EndTime":196916.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":196974.0,"Objects":[{"StartTime":196974.0,"EndTime":196974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":197031.0,"Objects":[{"StartTime":197031.0,"EndTime":197031.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":197089.0,"Objects":[{"StartTime":197089.0,"EndTime":197089.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":197147.0,"Objects":[{"StartTime":197147.0,"EndTime":197147.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":197204.0,"Objects":[{"StartTime":197204.0,"EndTime":197204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":197262.0,"Objects":[{"StartTime":197262.0,"EndTime":197262.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":197320.0,"Objects":[{"StartTime":197320.0,"EndTime":197320.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":197377.0,"Objects":[{"StartTime":197377.0,"EndTime":197377.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":197435.0,"Objects":[{"StartTime":197435.0,"EndTime":197435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":197493.0,"Objects":[{"StartTime":197493.0,"EndTime":197493.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":197551.0,"Objects":[{"StartTime":197551.0,"EndTime":197551.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":197608.0,"Objects":[{"StartTime":197608.0,"EndTime":197608.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":197666.0,"Objects":[{"StartTime":197666.0,"EndTime":197666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":197896.0,"EndTime":197896.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":198012.0,"Objects":[{"StartTime":198012.0,"EndTime":198012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":198127.0,"Objects":[{"StartTime":198127.0,"EndTime":198127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":198357.0,"EndTime":198357.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":198473.0,"Objects":[{"StartTime":198473.0,"EndTime":198473.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":198589.0,"Objects":[{"StartTime":198589.0,"EndTime":198589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":198704.0,"EndTime":198704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":198820.0,"Objects":[{"StartTime":198820.0,"EndTime":198820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":199051.0,"Objects":[{"StartTime":199051.0,"EndTime":199051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":199166.0,"EndTime":199166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":199281.0,"Objects":[{"StartTime":199281.0,"EndTime":199281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":199396.0,"Objects":[{"StartTime":199396.0,"EndTime":199396.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":199512.0,"Objects":[{"StartTime":199512.0,"EndTime":199512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":199742.0,"EndTime":199742.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":199858.0,"Objects":[{"StartTime":199858.0,"EndTime":199858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":199974.0,"Objects":[{"StartTime":199974.0,"EndTime":199974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":200089.0,"EndTime":200089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":200204.0,"Objects":[{"StartTime":200204.0,"EndTime":200204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":200319.0,"EndTime":200319.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":200435.0,"Objects":[{"StartTime":200435.0,"EndTime":200435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":200551.0,"Objects":[{"StartTime":200551.0,"EndTime":200551.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":200666.0,"Objects":[{"StartTime":200666.0,"EndTime":200666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":200781.0,"EndTime":200781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":200897.0,"Objects":[{"StartTime":200897.0,"EndTime":200897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":201012.0,"EndTime":201012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":201127.0,"Objects":[{"StartTime":201127.0,"EndTime":201127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":201242.0,"EndTime":201242.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":201358.0,"Objects":[{"StartTime":201358.0,"EndTime":201358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":201588.0,"EndTime":201588.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":201704.0,"Objects":[{"StartTime":201704.0,"EndTime":201704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":201820.0,"Objects":[{"StartTime":201820.0,"EndTime":201820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":201935.0,"EndTime":201935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":202051.0,"Objects":[{"StartTime":202051.0,"EndTime":202051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":202166.0,"EndTime":202166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":202281.0,"Objects":[{"StartTime":202281.0,"EndTime":202281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":202397.0,"Objects":[{"StartTime":202397.0,"EndTime":202397.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":202512.0,"Objects":[{"StartTime":202512.0,"EndTime":202512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":202627.0,"EndTime":202627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":202743.0,"Objects":[{"StartTime":202743.0,"EndTime":202743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":202973.0,"EndTime":202973.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":203089.0,"Objects":[{"StartTime":203089.0,"EndTime":203089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":203204.0,"Objects":[{"StartTime":203204.0,"EndTime":203204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":203319.0,"EndTime":203319.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":203435.0,"Objects":[{"StartTime":203435.0,"EndTime":203435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":203550.0,"EndTime":203550.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":203666.0,"Objects":[{"StartTime":203666.0,"EndTime":203666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":203896.0,"EndTime":203896.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":204012.0,"Objects":[{"StartTime":204012.0,"EndTime":204012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":204127.0,"Objects":[{"StartTime":204127.0,"EndTime":204127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":204242.0,"EndTime":204242.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":204358.0,"Objects":[{"StartTime":204358.0,"EndTime":204358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":204474.0,"Objects":[{"StartTime":204474.0,"EndTime":204474.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":204589.0,"Objects":[{"StartTime":204589.0,"EndTime":204589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":204704.0,"EndTime":204704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":204820.0,"Objects":[{"StartTime":204820.0,"EndTime":204820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":204935.0,"Objects":[{"StartTime":204935.0,"EndTime":204935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":205051.0,"Objects":[{"StartTime":205051.0,"EndTime":205051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":205281.0,"EndTime":205281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":205397.0,"Objects":[{"StartTime":205397.0,"EndTime":205397.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":205512.0,"Objects":[{"StartTime":205512.0,"EndTime":205512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":205627.0,"EndTime":205627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":205743.0,"Objects":[{"StartTime":205743.0,"EndTime":205743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":205858.0,"EndTime":205858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":205974.0,"Objects":[{"StartTime":205974.0,"EndTime":205974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":206089.0,"EndTime":206089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":206204.0,"Objects":[{"StartTime":206204.0,"EndTime":206204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":206320.0,"Objects":[{"StartTime":206320.0,"EndTime":206320.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":206435.0,"Objects":[{"StartTime":206435.0,"EndTime":206435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":206665.0,"EndTime":206665.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":206781.0,"Objects":[{"StartTime":206781.0,"EndTime":206781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":206897.0,"Objects":[{"StartTime":206897.0,"EndTime":206897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":207127.0,"EndTime":207127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":207358.0,"Objects":[{"StartTime":207358.0,"EndTime":207358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":207473.0,"EndTime":207473.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":207589.0,"Objects":[{"StartTime":207589.0,"EndTime":207589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":207704.0,"EndTime":207704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":207820.0,"Objects":[{"StartTime":207820.0,"EndTime":207820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":208050.0,"EndTime":208050.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":208166.0,"Objects":[{"StartTime":208166.0,"EndTime":208166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":208281.0,"Objects":[{"StartTime":208281.0,"EndTime":208281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":208396.0,"EndTime":208396.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":208512.0,"Objects":[{"StartTime":208512.0,"EndTime":208512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":208627.0,"EndTime":208627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":208743.0,"Objects":[{"StartTime":208743.0,"EndTime":209204.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":209320.0,"Objects":[{"StartTime":209320.0,"EndTime":209320.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":209435.0,"Objects":[{"StartTime":209435.0,"EndTime":209435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":209550.0,"EndTime":209550.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":209666.0,"Objects":[{"StartTime":209666.0,"EndTime":209666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":209781.0,"EndTime":209781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":209897.0,"Objects":[{"StartTime":209897.0,"EndTime":209897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":210012.0,"EndTime":210012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":210127.0,"Objects":[{"StartTime":210127.0,"EndTime":210127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":210243.0,"Objects":[{"StartTime":210243.0,"EndTime":210243.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":210358.0,"Objects":[{"StartTime":210358.0,"EndTime":210358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":210589.0,"Objects":[{"StartTime":210589.0,"EndTime":210589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":210704.0,"EndTime":210704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":210820.0,"Objects":[{"StartTime":210820.0,"EndTime":210820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":210935.0,"Objects":[{"StartTime":210935.0,"EndTime":210935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":211051.0,"Objects":[{"StartTime":211051.0,"EndTime":211051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":211166.0,"EndTime":211166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":211281.0,"Objects":[{"StartTime":211281.0,"EndTime":211281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":211397.0,"Objects":[{"StartTime":211397.0,"EndTime":211397.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":211512.0,"Objects":[{"StartTime":211512.0,"EndTime":211512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":211742.0,"EndTime":211742.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":211858.0,"Objects":[{"StartTime":211858.0,"EndTime":211858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":211974.0,"Objects":[{"StartTime":211974.0,"EndTime":211974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":212089.0,"Objects":[{"StartTime":212089.0,"EndTime":212089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":212204.0,"Objects":[{"StartTime":212204.0,"EndTime":212204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":212320.0,"Objects":[{"StartTime":212320.0,"EndTime":212320.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":212435.0,"Objects":[{"StartTime":212435.0,"EndTime":212435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":212665.0,"EndTime":212665.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":212781.0,"Objects":[{"StartTime":212781.0,"EndTime":212781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":212897.0,"Objects":[{"StartTime":212897.0,"EndTime":212897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":213127.0,"EndTime":213127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":213243.0,"Objects":[{"StartTime":213243.0,"EndTime":213243.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":213358.0,"Objects":[{"StartTime":213358.0,"EndTime":213358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":213473.0,"EndTime":213473.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":213589.0,"Objects":[{"StartTime":213589.0,"EndTime":213589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":213820.0,"Objects":[{"StartTime":213820.0,"EndTime":213820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":213935.0,"EndTime":213935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":214051.0,"Objects":[{"StartTime":214051.0,"EndTime":214051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":214166.0,"Objects":[{"StartTime":214166.0,"EndTime":214166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":214281.0,"Objects":[{"StartTime":214281.0,"EndTime":214281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":214396.0,"EndTime":214396.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":214512.0,"Objects":[{"StartTime":214512.0,"EndTime":214512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":214628.0,"Objects":[{"StartTime":214628.0,"EndTime":214628.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":214743.0,"Objects":[{"StartTime":214743.0,"EndTime":214743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":214858.0,"EndTime":214858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":214974.0,"Objects":[{"StartTime":214974.0,"EndTime":214974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":215089.0,"EndTime":215089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":215204.0,"Objects":[{"StartTime":215204.0,"EndTime":215204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":215320.0,"Objects":[{"StartTime":215320.0,"EndTime":215320.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":215435.0,"Objects":[{"StartTime":215435.0,"EndTime":215435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":215550.0,"EndTime":215550.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":215666.0,"Objects":[{"StartTime":215666.0,"EndTime":215666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":215896.0,"EndTime":215896.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":216012.0,"Objects":[{"StartTime":216012.0,"EndTime":216012.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":216070.0,"Objects":[{"StartTime":216070.0,"EndTime":216070.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":216127.0,"Objects":[{"StartTime":216127.0,"EndTime":216127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":216242.0,"EndTime":216242.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":216358.0,"Objects":[{"StartTime":216358.0,"EndTime":216358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":216473.0,"EndTime":216473.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":216589.0,"Objects":[{"StartTime":216589.0,"EndTime":216589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":216819.0,"EndTime":216819.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":216935.0,"Objects":[{"StartTime":216935.0,"EndTime":216935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":217051.0,"Objects":[{"StartTime":217051.0,"EndTime":217051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":217166.0,"EndTime":217166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":217281.0,"Objects":[{"StartTime":217281.0,"EndTime":217281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":217511.0,"EndTime":217511.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":217627.0,"Objects":[{"StartTime":217627.0,"EndTime":217627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":217742.0,"EndTime":217742.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":217858.0,"Objects":[{"StartTime":217858.0,"EndTime":217858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":217974.0,"Objects":[{"StartTime":217974.0,"EndTime":217974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":218089.0,"EndTime":218089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":218204.0,"Objects":[{"StartTime":218204.0,"EndTime":218204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":218319.0,"EndTime":218319.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":218435.0,"Objects":[{"StartTime":218435.0,"EndTime":218435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":218550.0,"EndTime":218550.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":218666.0,"Objects":[{"StartTime":218666.0,"EndTime":218666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":218781.0,"EndTime":218781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":218897.0,"Objects":[{"StartTime":218897.0,"EndTime":218897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":219070.0,"EndTime":219070.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":219127.0,"Objects":[{"StartTime":219127.0,"EndTime":219127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":219300.0,"EndTime":219300.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":219358.0,"Objects":[{"StartTime":219358.0,"EndTime":219358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":219531.0,"EndTime":219531.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":219589.0,"Objects":[{"StartTime":219589.0,"EndTime":219589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":219704.0,"EndTime":219704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":219820.0,"Objects":[{"StartTime":219820.0,"EndTime":219820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":220050.0,"EndTime":220050.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":220166.0,"Objects":[{"StartTime":220166.0,"EndTime":220166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":220281.0,"Objects":[{"StartTime":220281.0,"EndTime":220281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":220396.0,"EndTime":220396.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":220512.0,"Objects":[{"StartTime":220512.0,"EndTime":220512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":220627.0,"EndTime":220627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":220743.0,"Objects":[{"StartTime":220743.0,"EndTime":220743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":220858.0,"EndTime":220858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":220974.0,"Objects":[{"StartTime":220974.0,"EndTime":220974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":221089.0,"Objects":[{"StartTime":221089.0,"EndTime":221089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":221204.0,"Objects":[{"StartTime":221204.0,"EndTime":221204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":221434.0,"EndTime":221434.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":221551.0,"Objects":[{"StartTime":221551.0,"EndTime":221551.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":221608.0,"Objects":[{"StartTime":221608.0,"EndTime":221608.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":221666.0,"Objects":[{"StartTime":221666.0,"EndTime":221666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":221781.0,"EndTime":221781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":221897.0,"Objects":[{"StartTime":221897.0,"EndTime":221897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":222127.0,"EndTime":222127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":222243.0,"Objects":[{"StartTime":222243.0,"EndTime":222243.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":222358.0,"Objects":[{"StartTime":222358.0,"EndTime":222358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":222473.0,"EndTime":222473.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":222589.0,"Objects":[{"StartTime":222589.0,"EndTime":222589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":222704.0,"EndTime":222704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":222820.0,"Objects":[{"StartTime":222820.0,"EndTime":222820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":222935.0,"EndTime":222935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":223051.0,"Objects":[{"StartTime":223051.0,"EndTime":223051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":223166.0,"EndTime":223166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":223281.0,"Objects":[{"StartTime":223281.0,"EndTime":223281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":223397.0,"Objects":[{"StartTime":223397.0,"EndTime":223397.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":223512.0,"Objects":[{"StartTime":223512.0,"EndTime":223512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":223742.0,"EndTime":223742.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":223858.0,"Objects":[{"StartTime":223858.0,"EndTime":223858.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":224088.0,"EndTime":224088.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":224204.0,"Objects":[{"StartTime":224204.0,"EndTime":224204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":224319.0,"EndTime":224319.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":224435.0,"Objects":[{"StartTime":224435.0,"EndTime":224435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":224551.0,"Objects":[{"StartTime":224551.0,"EndTime":224551.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":224666.0,"Objects":[{"StartTime":224666.0,"EndTime":224666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":224781.0,"EndTime":224781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":224897.0,"Objects":[{"StartTime":224897.0,"EndTime":224897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":225012.0,"Objects":[{"StartTime":225012.0,"EndTime":225012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":225127.0,"Objects":[{"StartTime":225127.0,"EndTime":225127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":225242.0,"EndTime":225242.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":225358.0,"Objects":[{"StartTime":225358.0,"EndTime":225358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":225588.0,"EndTime":225588.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":225704.0,"Objects":[{"StartTime":225704.0,"EndTime":225704.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":225934.0,"EndTime":225934.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":226051.0,"Objects":[{"StartTime":226051.0,"EndTime":226051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":226166.0,"EndTime":226166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":226281.0,"Objects":[{"StartTime":226281.0,"EndTime":226281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":226512.0,"Objects":[{"StartTime":226512.0,"EndTime":226512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":226627.0,"Objects":[{"StartTime":226627.0,"EndTime":226627.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":226743.0,"Objects":[{"StartTime":226743.0,"EndTime":226743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":226858.0,"Objects":[{"StartTime":226858.0,"EndTime":226858.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":226974.0,"Objects":[{"StartTime":226974.0,"EndTime":226974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":227089.0,"Objects":[{"StartTime":227089.0,"EndTime":227089.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":227204.0,"Objects":[{"StartTime":227204.0,"EndTime":227204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":227665.0,"EndTime":227665.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":228588.0,"Objects":[{"StartTime":228588.0,"EndTime":228588.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":229049.0,"EndTime":229049.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":229280.0,"Objects":[{"StartTime":229280.0,"EndTime":229280.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":229741.0,"EndTime":229741.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":229973.0,"Objects":[{"StartTime":229973.0,"EndTime":229973.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":230204.0,"Objects":[{"StartTime":230204.0,"EndTime":230204.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":230434.0,"Objects":[{"StartTime":230434.0,"EndTime":230434.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":230665.0,"Objects":[{"StartTime":230665.0,"EndTime":230665.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":230896.0,"Objects":[{"StartTime":230896.0,"EndTime":230896.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":231357.0,"EndTime":231357.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":232280.0,"Objects":[{"StartTime":232280.0,"EndTime":232280.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":232741.0,"EndTime":232741.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":232973.0,"Objects":[{"StartTime":232973.0,"EndTime":232973.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":233434.0,"EndTime":233434.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":233665.0,"Objects":[{"StartTime":233665.0,"EndTime":233665.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":233896.0,"Objects":[{"StartTime":233896.0,"EndTime":233896.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":234127.0,"Objects":[{"StartTime":234127.0,"EndTime":234127.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":234357.0,"Objects":[{"StartTime":234357.0,"EndTime":234357.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":234588.0,"Objects":[{"StartTime":234588.0,"EndTime":234588.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":235049.0,"EndTime":235049.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":235973.0,"Objects":[{"StartTime":235973.0,"EndTime":235973.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":236434.0,"EndTime":236434.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":236665.0,"Objects":[{"StartTime":236665.0,"EndTime":236665.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":237126.0,"EndTime":237126.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":237357.0,"Objects":[{"StartTime":237357.0,"EndTime":237357.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":237587.0,"EndTime":237587.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":237819.0,"Objects":[{"StartTime":237819.0,"EndTime":237819.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":238050.0,"Objects":[{"StartTime":238050.0,"EndTime":238050.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":238280.0,"Objects":[{"StartTime":238280.0,"EndTime":238280.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":238741.0,"EndTime":238741.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":239204.0,"Objects":[{"StartTime":239204.0,"EndTime":239204.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":239434.0,"Objects":[{"StartTime":239434.0,"EndTime":239434.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":239665.0,"Objects":[{"StartTime":239665.0,"EndTime":239665.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":239896.0,"Objects":[{"StartTime":239896.0,"EndTime":239896.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":240127.0,"Objects":[{"StartTime":240127.0,"EndTime":240127.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":240357.0,"Objects":[{"StartTime":240357.0,"EndTime":240357.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":240588.0,"Objects":[{"StartTime":240588.0,"EndTime":240588.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":240819.0,"Objects":[{"StartTime":240819.0,"EndTime":240819.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":241050.0,"Objects":[{"StartTime":241050.0,"EndTime":241050.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":241280.0,"Objects":[{"StartTime":241280.0,"EndTime":241280.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":241511.0,"Objects":[{"StartTime":241511.0,"EndTime":241511.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":241742.0,"Objects":[{"StartTime":241742.0,"EndTime":241742.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":241973.0,"Objects":[{"StartTime":241973.0,"EndTime":241973.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":242434.0,"EndTime":242434.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":242665.0,"Objects":[{"StartTime":242665.0,"EndTime":242665.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":242895.0,"EndTime":242895.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":243127.0,"Objects":[{"StartTime":243127.0,"EndTime":243127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":243357.0,"Objects":[{"StartTime":243357.0,"EndTime":243357.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":243588.0,"Objects":[{"StartTime":243588.0,"EndTime":243588.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":243819.0,"Objects":[{"StartTime":243819.0,"EndTime":243819.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":244050.0,"Objects":[{"StartTime":244050.0,"EndTime":244050.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":244280.0,"EndTime":244280.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":244511.0,"Objects":[{"StartTime":244511.0,"EndTime":244511.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":244972.0,"EndTime":244972.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":245204.0,"Objects":[{"StartTime":245204.0,"EndTime":245204.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":245434.0,"Objects":[{"StartTime":245434.0,"EndTime":245434.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":245895.0,"EndTime":245895.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":246357.0,"Objects":[{"StartTime":246357.0,"EndTime":246357.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":246588.0,"Objects":[{"StartTime":246588.0,"EndTime":246588.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":246819.0,"Objects":[{"StartTime":246819.0,"EndTime":246819.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":247049.0,"EndTime":247049.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":247280.0,"Objects":[{"StartTime":247280.0,"EndTime":247280.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":247511.0,"Objects":[{"StartTime":247511.0,"EndTime":247511.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":247741.0,"EndTime":247741.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":247973.0,"Objects":[{"StartTime":247973.0,"EndTime":247973.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":248203.0,"EndTime":248203.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":248434.0,"EndTime":248434.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":248665.0,"Objects":[{"StartTime":248665.0,"EndTime":248665.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":248896.0,"Objects":[{"StartTime":248896.0,"EndTime":248896.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":249127.0,"Objects":[{"StartTime":249127.0,"EndTime":249127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":249357.0,"EndTime":249357.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":249588.0,"Objects":[{"StartTime":249588.0,"EndTime":249588.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":249819.0,"Objects":[{"StartTime":249819.0,"EndTime":249819.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":250050.0,"Objects":[{"StartTime":250050.0,"EndTime":250050.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":250280.0,"EndTime":250280.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":250511.0,"Objects":[{"StartTime":250511.0,"EndTime":250511.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":250742.0,"Objects":[{"StartTime":250742.0,"EndTime":250742.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":251203.0,"EndTime":251203.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":251550.0,"Objects":[{"StartTime":251550.0,"EndTime":251550.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":251898.0,"EndTime":251898.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":252247.0,"Objects":[{"StartTime":252247.0,"EndTime":252247.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":252702.0,"Objects":[{"StartTime":252702.0,"EndTime":252702.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":253059.0,"EndTime":253059.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":253506.0,"Objects":[{"StartTime":253506.0,"EndTime":253506.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":254095.0,"Objects":[{"StartTime":254095.0,"EndTime":254095.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":254661.0,"EndTime":254661.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":255580.0,"Objects":[{"StartTime":255580.0,"EndTime":255580.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":256480.0,"Objects":[{"StartTime":256480.0,"EndTime":256480.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":257588.0,"EndTime":257588.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":257747.0,"Objects":[{"StartTime":257747.0,"EndTime":257747.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":258697.0,"EndTime":258697.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":258892.0,"Objects":[{"StartTime":258892.0,"EndTime":258892.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":261023.0,"EndTime":261023.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":263154.0,"EndTime":263154.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":263197.0,"Objects":[{"StartTime":263197.0,"EndTime":263197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":263427.0,"EndTime":263427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":263543.0,"Objects":[{"StartTime":263543.0,"EndTime":263543.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":263658.0,"Objects":[{"StartTime":263658.0,"EndTime":263658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":263888.0,"EndTime":263888.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":264004.0,"Objects":[{"StartTime":264004.0,"EndTime":264004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":264120.0,"Objects":[{"StartTime":264120.0,"EndTime":264120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":264235.0,"EndTime":264235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":264350.0,"Objects":[{"StartTime":264350.0,"EndTime":264350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":264465.0,"EndTime":264465.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":264581.0,"Objects":[{"StartTime":264581.0,"EndTime":264581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":264697.0,"Objects":[{"StartTime":264697.0,"EndTime":264697.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":264812.0,"Objects":[{"StartTime":264812.0,"EndTime":264812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":264927.0,"Objects":[{"StartTime":264927.0,"EndTime":264927.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":265043.0,"Objects":[{"StartTime":265043.0,"EndTime":265043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":265273.0,"EndTime":265273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":265389.0,"Objects":[{"StartTime":265389.0,"EndTime":265389.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":265504.0,"Objects":[{"StartTime":265504.0,"EndTime":265504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":265734.0,"EndTime":265734.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":265850.0,"Objects":[{"StartTime":265850.0,"EndTime":265850.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":265966.0,"Objects":[{"StartTime":265966.0,"EndTime":265966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":266081.0,"EndTime":266081.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":266197.0,"Objects":[{"StartTime":266197.0,"EndTime":266197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":266312.0,"EndTime":266312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":266427.0,"Objects":[{"StartTime":266427.0,"EndTime":266427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":266543.0,"Objects":[{"StartTime":266543.0,"EndTime":266543.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":266658.0,"Objects":[{"StartTime":266658.0,"EndTime":266658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":266773.0,"Objects":[{"StartTime":266773.0,"EndTime":266773.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":266889.0,"Objects":[{"StartTime":266889.0,"EndTime":266889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":267119.0,"EndTime":267119.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":267235.0,"Objects":[{"StartTime":267235.0,"EndTime":267235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":267350.0,"Objects":[{"StartTime":267350.0,"EndTime":267350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":267465.0,"EndTime":267465.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":267581.0,"Objects":[{"StartTime":267581.0,"EndTime":267581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":267697.0,"Objects":[{"StartTime":267697.0,"EndTime":267697.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":267812.0,"Objects":[{"StartTime":267812.0,"EndTime":267812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":267927.0,"EndTime":267927.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":268043.0,"Objects":[{"StartTime":268043.0,"EndTime":268043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":268158.0,"EndTime":268158.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":268273.0,"Objects":[{"StartTime":268273.0,"EndTime":268273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":268389.0,"Objects":[{"StartTime":268389.0,"EndTime":268389.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":268504.0,"Objects":[{"StartTime":268504.0,"EndTime":268504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":268620.0,"Objects":[{"StartTime":268620.0,"EndTime":268620.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":268735.0,"Objects":[{"StartTime":268735.0,"EndTime":268735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":268965.0,"EndTime":268965.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":269081.0,"Objects":[{"StartTime":269081.0,"EndTime":269081.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":269197.0,"Objects":[{"StartTime":269197.0,"EndTime":269197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":269312.0,"EndTime":269312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":269427.0,"Objects":[{"StartTime":269427.0,"EndTime":269427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":269543.0,"Objects":[{"StartTime":269543.0,"EndTime":269543.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":269658.0,"Objects":[{"StartTime":269658.0,"EndTime":269658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":269773.0,"EndTime":269773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":269889.0,"Objects":[{"StartTime":269889.0,"EndTime":269889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":270004.0,"EndTime":270004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":270120.0,"Objects":[{"StartTime":270120.0,"EndTime":270120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":270235.0,"Objects":[{"StartTime":270235.0,"EndTime":270235.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":270350.0,"Objects":[{"StartTime":270350.0,"EndTime":270350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":270466.0,"Objects":[{"StartTime":270466.0,"EndTime":270466.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":270523.0,"Objects":[{"StartTime":270523.0,"EndTime":270523.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":270581.0,"Objects":[{"StartTime":270581.0,"EndTime":270581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":270638.0,"EndTime":270638.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":270697.0,"Objects":[{"StartTime":270697.0,"EndTime":270697.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":270754.0,"EndTime":270754.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":270812.0,"Objects":[{"StartTime":270812.0,"EndTime":270812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":270869.0,"EndTime":270869.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":270927.0,"Objects":[{"StartTime":270927.0,"EndTime":270927.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":270984.0,"EndTime":270984.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":271042.0,"EndTime":271042.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":271158.0,"Objects":[{"StartTime":271158.0,"EndTime":271158.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":271215.0,"EndTime":271215.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":271273.0,"Objects":[{"StartTime":271273.0,"EndTime":271273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":271331.0,"Objects":[{"StartTime":271331.0,"EndTime":271331.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":271389.0,"Objects":[{"StartTime":271389.0,"EndTime":271389.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":271447.0,"Objects":[{"StartTime":271447.0,"EndTime":271447.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":271504.0,"Objects":[{"StartTime":271504.0,"EndTime":271504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":271619.0,"EndTime":271619.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":271735.0,"Objects":[{"StartTime":271735.0,"EndTime":271735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":271793.0,"Objects":[{"StartTime":271793.0,"EndTime":271793.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":271850.0,"Objects":[{"StartTime":271850.0,"EndTime":271850.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":271908.0,"Objects":[{"StartTime":271908.0,"EndTime":271908.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":271966.0,"Objects":[{"StartTime":271966.0,"EndTime":271966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":272023.0,"EndTime":272023.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":272081.0,"EndTime":272081.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":272139.0,"EndTime":272139.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":272197.0,"Objects":[{"StartTime":272197.0,"EndTime":272197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":272312.0,"EndTime":272312.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":272370.0,"Objects":[{"StartTime":272370.0,"EndTime":272370.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":272427.0,"Objects":[{"StartTime":272427.0,"EndTime":272427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":272485.0,"Objects":[{"StartTime":272485.0,"EndTime":272485.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":272543.0,"Objects":[{"StartTime":272543.0,"EndTime":272543.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":272600.0,"Objects":[{"StartTime":272600.0,"EndTime":272600.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":272658.0,"Objects":[{"StartTime":272658.0,"EndTime":272658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":272716.0,"Objects":[{"StartTime":272716.0,"EndTime":272716.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":272773.0,"Objects":[{"StartTime":272773.0,"EndTime":272773.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":272830.0,"EndTime":272830.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":272889.0,"Objects":[{"StartTime":272889.0,"EndTime":272889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":272947.0,"Objects":[{"StartTime":272947.0,"EndTime":272947.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":273004.0,"Objects":[{"StartTime":273004.0,"EndTime":273004.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":273062.0,"Objects":[{"StartTime":273062.0,"EndTime":273062.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":273120.0,"Objects":[{"StartTime":273120.0,"EndTime":273120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":273177.0,"Objects":[{"StartTime":273177.0,"EndTime":273177.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":273235.0,"Objects":[{"StartTime":273235.0,"EndTime":273235.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":273292.0,"EndTime":273292.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":273350.0,"Objects":[{"StartTime":273350.0,"EndTime":273350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":273408.0,"Objects":[{"StartTime":273408.0,"EndTime":273408.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":273466.0,"Objects":[{"StartTime":273466.0,"EndTime":273466.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":273523.0,"Objects":[{"StartTime":273523.0,"EndTime":273523.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":273581.0,"Objects":[{"StartTime":273581.0,"EndTime":273581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":273639.0,"Objects":[{"StartTime":273639.0,"EndTime":273639.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":273697.0,"Objects":[{"StartTime":273697.0,"EndTime":273697.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":273754.0,"Objects":[{"StartTime":273754.0,"EndTime":273754.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":273812.0,"Objects":[{"StartTime":273812.0,"EndTime":273812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":273927.0,"EndTime":273927.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":273985.0,"Objects":[{"StartTime":273985.0,"EndTime":273985.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":274043.0,"Objects":[{"StartTime":274043.0,"EndTime":274043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":274158.0,"EndTime":274158.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":274273.0,"Objects":[{"StartTime":274273.0,"EndTime":274273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":274388.0,"EndTime":274388.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":274447.0,"Objects":[{"StartTime":274447.0,"EndTime":274447.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":274504.0,"Objects":[{"StartTime":274504.0,"EndTime":274504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":274619.0,"EndTime":274619.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":274735.0,"Objects":[{"StartTime":274735.0,"EndTime":274735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":274850.0,"EndTime":274850.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":274908.0,"Objects":[{"StartTime":274908.0,"EndTime":274908.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":274966.0,"Objects":[{"StartTime":274966.0,"EndTime":274966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":275081.0,"EndTime":275081.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":275197.0,"Objects":[{"StartTime":275197.0,"EndTime":275197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":275312.0,"Objects":[{"StartTime":275312.0,"EndTime":275312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":275370.0,"Objects":[{"StartTime":275370.0,"EndTime":275370.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":275427.0,"Objects":[{"StartTime":275427.0,"EndTime":275427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":275542.0,"EndTime":275542.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":275658.0,"Objects":[{"StartTime":275658.0,"EndTime":275658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":275773.0,"EndTime":275773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":275889.0,"Objects":[{"StartTime":275889.0,"EndTime":275889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":276004.0,"EndTime":276004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":276062.0,"Objects":[{"StartTime":276062.0,"EndTime":276062.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":276120.0,"Objects":[{"StartTime":276120.0,"EndTime":276120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":276177.0,"EndTime":276177.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":276235.0,"EndTime":276235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":276292.0,"EndTime":276292.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":276350.0,"EndTime":276350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":276407.0,"EndTime":276407.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":276465.0,"EndTime":276465.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":276522.0,"EndTime":276522.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":276581.0,"Objects":[{"StartTime":276581.0,"EndTime":276581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":276638.0,"EndTime":276638.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":276696.0,"EndTime":276696.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":276753.0,"EndTime":276753.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":276811.0,"EndTime":276811.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":276868.0,"EndTime":276868.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":276926.0,"EndTime":276926.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":276983.0,"EndTime":276983.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":277043.0,"Objects":[{"StartTime":277043.0,"EndTime":277043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":277158.0,"Objects":[{"StartTime":277158.0,"EndTime":277158.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":277273.0,"Objects":[{"StartTime":277273.0,"EndTime":277273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":277389.0,"Objects":[{"StartTime":277389.0,"EndTime":277389.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":277504.0,"Objects":[{"StartTime":277504.0,"EndTime":277504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":277562.0,"Objects":[{"StartTime":277562.0,"EndTime":277562.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":277620.0,"Objects":[{"StartTime":277620.0,"EndTime":277620.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":277677.0,"Objects":[{"StartTime":277677.0,"EndTime":277677.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":277735.0,"Objects":[{"StartTime":277735.0,"EndTime":277735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":277793.0,"Objects":[{"StartTime":277793.0,"EndTime":277793.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":277850.0,"Objects":[{"StartTime":277850.0,"EndTime":277850.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":277908.0,"Objects":[{"StartTime":277908.0,"EndTime":277908.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":277966.0,"Objects":[{"StartTime":277966.0,"EndTime":277966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":278196.0,"EndTime":278196.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":278312.0,"Objects":[{"StartTime":278312.0,"EndTime":278312.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":278542.0,"EndTime":278542.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":278658.0,"Objects":[{"StartTime":278658.0,"EndTime":278658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":278773.0,"EndTime":278773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":278889.0,"Objects":[{"StartTime":278889.0,"EndTime":278889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":279004.0,"Objects":[{"StartTime":279004.0,"EndTime":279004.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":279234.0,"EndTime":279234.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":279350.0,"Objects":[{"StartTime":279350.0,"EndTime":279350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":279465.0,"EndTime":279465.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":279581.0,"Objects":[{"StartTime":279581.0,"EndTime":279581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":279696.0,"EndTime":279696.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":279812.0,"Objects":[{"StartTime":279812.0,"EndTime":279812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":280042.0,"EndTime":280042.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":280158.0,"Objects":[{"StartTime":280158.0,"EndTime":280158.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":280388.0,"EndTime":280388.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":280504.0,"Objects":[{"StartTime":280504.0,"EndTime":280504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":280619.0,"EndTime":280619.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":280735.0,"Objects":[{"StartTime":280735.0,"EndTime":280735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":280850.0,"Objects":[{"StartTime":280850.0,"EndTime":280850.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":281080.0,"EndTime":281080.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":281197.0,"Objects":[{"StartTime":281197.0,"EndTime":281197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":281312.0,"EndTime":281312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":281427.0,"Objects":[{"StartTime":281427.0,"EndTime":281427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":281542.0,"EndTime":281542.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":281600.0,"Objects":[{"StartTime":281600.0,"EndTime":281600.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":281658.0,"Objects":[{"StartTime":281658.0,"EndTime":281658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":281888.0,"EndTime":281888.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":282004.0,"Objects":[{"StartTime":282004.0,"EndTime":282004.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":282234.0,"EndTime":282234.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":282350.0,"Objects":[{"StartTime":282350.0,"EndTime":282350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":282465.0,"EndTime":282465.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":282581.0,"Objects":[{"StartTime":282581.0,"EndTime":282581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":282697.0,"Objects":[{"StartTime":282697.0,"EndTime":282697.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":282927.0,"EndTime":282927.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":283043.0,"Objects":[{"StartTime":283043.0,"EndTime":283043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":283158.0,"EndTime":283158.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":283273.0,"Objects":[{"StartTime":283273.0,"EndTime":283273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":283388.0,"EndTime":283388.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":283504.0,"Objects":[{"StartTime":283504.0,"EndTime":283504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":283734.0,"EndTime":283734.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":283850.0,"Objects":[{"StartTime":283850.0,"EndTime":283850.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":284080.0,"EndTime":284080.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":284197.0,"Objects":[{"StartTime":284197.0,"EndTime":284197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":284312.0,"EndTime":284312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":284427.0,"Objects":[{"StartTime":284427.0,"EndTime":284427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":284543.0,"Objects":[{"StartTime":284543.0,"EndTime":284543.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":284658.0,"Objects":[{"StartTime":284658.0,"EndTime":284658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":284773.0,"Objects":[{"StartTime":284773.0,"EndTime":284773.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":284889.0,"Objects":[{"StartTime":284889.0,"EndTime":284889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":285062.0,"EndTime":285062.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":285120.0,"Objects":[{"StartTime":285120.0,"EndTime":285120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":285293.0,"EndTime":285293.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":285350.0,"Objects":[{"StartTime":285350.0,"EndTime":285350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":285580.0,"EndTime":285580.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":285697.0,"Objects":[{"StartTime":285697.0,"EndTime":285697.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":285927.0,"EndTime":285927.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":286043.0,"Objects":[{"StartTime":286043.0,"EndTime":286043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":286158.0,"EndTime":286158.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":286273.0,"Objects":[{"StartTime":286273.0,"EndTime":286273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":286389.0,"Objects":[{"StartTime":286389.0,"EndTime":286389.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":286619.0,"EndTime":286619.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":286735.0,"Objects":[{"StartTime":286735.0,"EndTime":286735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":286850.0,"EndTime":286850.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":286966.0,"Objects":[{"StartTime":286966.0,"EndTime":286966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":287081.0,"EndTime":287081.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":287197.0,"Objects":[{"StartTime":287197.0,"EndTime":287197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":287427.0,"EndTime":287427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":287543.0,"Objects":[{"StartTime":287543.0,"EndTime":287543.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":287773.0,"EndTime":287773.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":287889.0,"Objects":[{"StartTime":287889.0,"EndTime":287889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":288004.0,"EndTime":288004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":288120.0,"Objects":[{"StartTime":288120.0,"EndTime":288120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":288235.0,"Objects":[{"StartTime":288235.0,"EndTime":288235.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":288465.0,"EndTime":288465.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":288581.0,"Objects":[{"StartTime":288581.0,"EndTime":288581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":288696.0,"EndTime":288696.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":288812.0,"Objects":[{"StartTime":288812.0,"EndTime":288812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":288927.0,"EndTime":288927.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":288985.0,"Objects":[{"StartTime":288985.0,"EndTime":288985.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":289043.0,"Objects":[{"StartTime":289043.0,"EndTime":289043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":289273.0,"EndTime":289273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":289389.0,"Objects":[{"StartTime":289389.0,"EndTime":289389.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":289619.0,"EndTime":289619.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":289735.0,"Objects":[{"StartTime":289735.0,"EndTime":289735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":289850.0,"EndTime":289850.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":289966.0,"Objects":[{"StartTime":289966.0,"EndTime":289966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":290081.0,"Objects":[{"StartTime":290081.0,"EndTime":290081.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":290311.0,"EndTime":290311.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":290427.0,"Objects":[{"StartTime":290427.0,"EndTime":290427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":290542.0,"EndTime":290542.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":290658.0,"Objects":[{"StartTime":290658.0,"EndTime":290658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":290773.0,"EndTime":290773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":290889.0,"Objects":[{"StartTime":290889.0,"EndTime":290889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":291119.0,"EndTime":291119.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":291235.0,"Objects":[{"StartTime":291235.0,"EndTime":291235.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":291465.0,"EndTime":291465.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":291581.0,"Objects":[{"StartTime":291581.0,"EndTime":291581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":291696.0,"EndTime":291696.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":291812.0,"Objects":[{"StartTime":291812.0,"EndTime":291812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":292042.0,"EndTime":292042.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":292158.0,"Objects":[{"StartTime":292158.0,"EndTime":292158.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":292273.0,"Objects":[{"StartTime":292273.0,"EndTime":292273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":292446.0,"EndTime":292446.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":292504.0,"Objects":[{"StartTime":292504.0,"EndTime":292504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":292619.0,"EndTime":292619.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":292735.0,"Objects":[{"StartTime":292735.0,"EndTime":292735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":292850.0,"EndTime":292850.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":292966.0,"Objects":[{"StartTime":292966.0,"EndTime":292966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":293196.0,"EndTime":293196.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":293312.0,"Objects":[{"StartTime":293312.0,"EndTime":293312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":293427.0,"Objects":[{"StartTime":293427.0,"EndTime":293427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":293542.0,"EndTime":293542.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":293658.0,"Objects":[{"StartTime":293658.0,"EndTime":293658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":293773.0,"Objects":[{"StartTime":293773.0,"EndTime":293773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":293889.0,"Objects":[{"StartTime":293889.0,"EndTime":293889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":294004.0,"EndTime":294004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":294120.0,"Objects":[{"StartTime":294120.0,"EndTime":294120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":294235.0,"Objects":[{"StartTime":294235.0,"EndTime":294235.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":294350.0,"Objects":[{"StartTime":294350.0,"EndTime":294350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":294466.0,"Objects":[{"StartTime":294466.0,"EndTime":294466.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":294581.0,"Objects":[{"StartTime":294581.0,"EndTime":294581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":294638.0,"EndTime":294638.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":294696.0,"EndTime":294696.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":294754.0,"EndTime":294754.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":294812.0,"Objects":[{"StartTime":294812.0,"EndTime":294812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":294869.0,"EndTime":294869.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":294927.0,"EndTime":294927.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":294985.0,"EndTime":294985.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":295043.0,"Objects":[{"StartTime":295043.0,"EndTime":295043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":295100.0,"Objects":[{"StartTime":295100.0,"EndTime":295100.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":295158.0,"Objects":[{"StartTime":295158.0,"EndTime":295158.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":295216.0,"Objects":[{"StartTime":295216.0,"EndTime":295216.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":295273.0,"Objects":[{"StartTime":295273.0,"EndTime":295273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":295331.0,"Objects":[{"StartTime":295331.0,"EndTime":295331.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":295389.0,"Objects":[{"StartTime":295389.0,"EndTime":295389.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":295447.0,"Objects":[{"StartTime":295447.0,"EndTime":295447.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":295504.0,"Objects":[{"StartTime":295504.0,"EndTime":295504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":295734.0,"EndTime":295734.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":295850.0,"Objects":[{"StartTime":295850.0,"EndTime":295850.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":295966.0,"Objects":[{"StartTime":295966.0,"EndTime":295966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":296196.0,"EndTime":296196.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":296312.0,"Objects":[{"StartTime":296312.0,"EndTime":296312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":296427.0,"Objects":[{"StartTime":296427.0,"EndTime":296427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":296542.0,"EndTime":296542.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":296658.0,"Objects":[{"StartTime":296658.0,"EndTime":296658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":296831.0,"EndTime":296831.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":296889.0,"Objects":[{"StartTime":296889.0,"EndTime":296889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":297004.0,"EndTime":297004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":297120.0,"Objects":[{"StartTime":297120.0,"EndTime":297120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":297235.0,"Objects":[{"StartTime":297235.0,"EndTime":297235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":297350.0,"Objects":[{"StartTime":297350.0,"EndTime":297350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":297580.0,"EndTime":297580.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":297697.0,"Objects":[{"StartTime":297697.0,"EndTime":297697.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":297927.0,"EndTime":297927.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":298043.0,"Objects":[{"StartTime":298043.0,"EndTime":298043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":298158.0,"EndTime":298158.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":298273.0,"Objects":[{"StartTime":298273.0,"EndTime":298273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":298503.0,"EndTime":298503.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":298620.0,"Objects":[{"StartTime":298620.0,"EndTime":298620.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":298735.0,"EndTime":298735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":298850.0,"Objects":[{"StartTime":298850.0,"EndTime":298850.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":298966.0,"Objects":[{"StartTime":298966.0,"EndTime":298966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":299081.0,"Objects":[{"StartTime":299081.0,"EndTime":299081.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":299197.0,"Objects":[{"StartTime":299197.0,"EndTime":299197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":299427.0,"EndTime":299427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":299543.0,"Objects":[{"StartTime":299543.0,"EndTime":299543.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":299658.0,"Objects":[{"StartTime":299658.0,"EndTime":299658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":299888.0,"EndTime":299888.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":300004.0,"Objects":[{"StartTime":300004.0,"EndTime":300004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":300120.0,"Objects":[{"StartTime":300120.0,"EndTime":300120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":300235.0,"EndTime":300235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":300350.0,"Objects":[{"StartTime":300350.0,"EndTime":300350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":300523.0,"EndTime":300523.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":300581.0,"Objects":[{"StartTime":300581.0,"EndTime":300581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":300696.0,"EndTime":300696.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":300812.0,"Objects":[{"StartTime":300812.0,"EndTime":300812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":300927.0,"EndTime":300927.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":301043.0,"Objects":[{"StartTime":301043.0,"EndTime":301043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":301273.0,"EndTime":301273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":301389.0,"Objects":[{"StartTime":301389.0,"EndTime":301389.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":301504.0,"Objects":[{"StartTime":301504.0,"EndTime":301504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":301734.0,"EndTime":301734.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":301850.0,"Objects":[{"StartTime":301850.0,"EndTime":301850.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":301966.0,"Objects":[{"StartTime":301966.0,"EndTime":301966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":302081.0,"EndTime":302081.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":302197.0,"Objects":[{"StartTime":302197.0,"EndTime":302197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":302312.0,"EndTime":302312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":302427.0,"Objects":[{"StartTime":302427.0,"EndTime":302427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":302657.0,"EndTime":302657.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":302773.0,"Objects":[{"StartTime":302773.0,"EndTime":302773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":302889.0,"Objects":[{"StartTime":302889.0,"EndTime":302889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":303004.0,"EndTime":303004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":303120.0,"Objects":[{"StartTime":303120.0,"EndTime":303120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":303235.0,"EndTime":303235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":303350.0,"Objects":[{"StartTime":303350.0,"EndTime":303350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":303580.0,"EndTime":303580.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":303697.0,"Objects":[{"StartTime":303697.0,"EndTime":303697.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":303812.0,"Objects":[{"StartTime":303812.0,"EndTime":303812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":304042.0,"EndTime":304042.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":304158.0,"Objects":[{"StartTime":304158.0,"EndTime":304158.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":304273.0,"Objects":[{"StartTime":304273.0,"EndTime":304273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":304388.0,"EndTime":304388.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":304504.0,"Objects":[{"StartTime":304504.0,"EndTime":304504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":304619.0,"EndTime":304619.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":304735.0,"Objects":[{"StartTime":304735.0,"EndTime":304735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":304965.0,"EndTime":304965.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":305081.0,"Objects":[{"StartTime":305081.0,"EndTime":305081.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":305311.0,"EndTime":305311.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":305427.0,"Objects":[{"StartTime":305427.0,"EndTime":305427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":305543.0,"Objects":[{"StartTime":305543.0,"EndTime":305543.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":305658.0,"Objects":[{"StartTime":305658.0,"EndTime":305658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":305888.0,"EndTime":305888.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":306004.0,"Objects":[{"StartTime":306004.0,"EndTime":306004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":306120.0,"Objects":[{"StartTime":306120.0,"EndTime":306120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":306235.0,"EndTime":306235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":306350.0,"Objects":[{"StartTime":306350.0,"EndTime":306350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":306465.0,"EndTime":306465.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":306581.0,"Objects":[{"StartTime":306581.0,"EndTime":306581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":306696.0,"EndTime":306696.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":306812.0,"Objects":[{"StartTime":306812.0,"EndTime":306812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":306927.0,"Objects":[{"StartTime":306927.0,"EndTime":306927.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":307043.0,"Objects":[{"StartTime":307043.0,"EndTime":307043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":307273.0,"EndTime":307273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":307389.0,"Objects":[{"StartTime":307389.0,"EndTime":307389.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":307504.0,"Objects":[{"StartTime":307504.0,"EndTime":307504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":307619.0,"EndTime":307619.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":307735.0,"Objects":[{"StartTime":307735.0,"EndTime":307735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":307850.0,"EndTime":307850.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":307966.0,"Objects":[{"StartTime":307966.0,"EndTime":307966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":308081.0,"EndTime":308081.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":308197.0,"Objects":[{"StartTime":308197.0,"EndTime":308197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":308312.0,"EndTime":308312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":308427.0,"Objects":[{"StartTime":308427.0,"EndTime":308427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":308543.0,"Objects":[{"StartTime":308543.0,"EndTime":308543.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":308658.0,"Objects":[{"StartTime":308658.0,"EndTime":308658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":308889.0,"Objects":[{"StartTime":308889.0,"EndTime":308889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":309004.0,"Objects":[{"StartTime":309004.0,"EndTime":309004.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":309062.0,"Objects":[{"StartTime":309062.0,"EndTime":309062.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":309120.0,"Objects":[{"StartTime":309120.0,"EndTime":309120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":309177.0,"Objects":[{"StartTime":309177.0,"EndTime":309177.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":309235.0,"Objects":[{"StartTime":309235.0,"EndTime":309235.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":309293.0,"Objects":[{"StartTime":309293.0,"EndTime":309293.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":309350.0,"Objects":[{"StartTime":309350.0,"EndTime":309350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":309408.0,"Objects":[{"StartTime":309408.0,"EndTime":309408.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":309466.0,"Objects":[{"StartTime":309466.0,"EndTime":309466.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":309523.0,"Objects":[{"StartTime":309523.0,"EndTime":309523.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":309581.0,"Objects":[{"StartTime":309581.0,"EndTime":309581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":309639.0,"Objects":[{"StartTime":309639.0,"EndTime":309639.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":309697.0,"Objects":[{"StartTime":309697.0,"EndTime":309697.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":309754.0,"Objects":[{"StartTime":309754.0,"EndTime":309754.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":309812.0,"Objects":[{"StartTime":309812.0,"EndTime":309812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":309869.0,"EndTime":309869.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":309927.0,"Objects":[{"StartTime":309927.0,"EndTime":309927.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":309984.0,"EndTime":309984.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":310043.0,"Objects":[{"StartTime":310043.0,"EndTime":310043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":310100.0,"EndTime":310100.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":310158.0,"Objects":[{"StartTime":310158.0,"EndTime":310158.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":310216.0,"Objects":[{"StartTime":310216.0,"EndTime":310216.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":310273.0,"Objects":[{"StartTime":310273.0,"EndTime":310273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":310503.0,"EndTime":310503.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":310620.0,"Objects":[{"StartTime":310620.0,"EndTime":310620.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":310735.0,"Objects":[{"StartTime":310735.0,"EndTime":310735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":310965.0,"EndTime":310965.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":311081.0,"Objects":[{"StartTime":311081.0,"EndTime":311081.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":311197.0,"Objects":[{"StartTime":311197.0,"EndTime":311197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":311312.0,"EndTime":311312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":311427.0,"Objects":[{"StartTime":311427.0,"EndTime":311427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":311658.0,"Objects":[{"StartTime":311658.0,"EndTime":311658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":311773.0,"EndTime":311773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":311889.0,"Objects":[{"StartTime":311889.0,"EndTime":311889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":312004.0,"Objects":[{"StartTime":312004.0,"EndTime":312004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":312120.0,"Objects":[{"StartTime":312120.0,"EndTime":312120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":312350.0,"EndTime":312350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":312466.0,"Objects":[{"StartTime":312466.0,"EndTime":312466.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":312581.0,"Objects":[{"StartTime":312581.0,"EndTime":312581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":312696.0,"EndTime":312696.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":312812.0,"Objects":[{"StartTime":312812.0,"EndTime":312812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":312927.0,"EndTime":312927.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":313043.0,"Objects":[{"StartTime":313043.0,"EndTime":313043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":313158.0,"Objects":[{"StartTime":313158.0,"EndTime":313158.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":313273.0,"Objects":[{"StartTime":313273.0,"EndTime":313273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":313388.0,"EndTime":313388.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":313504.0,"Objects":[{"StartTime":313504.0,"EndTime":313504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":313619.0,"EndTime":313619.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":313735.0,"Objects":[{"StartTime":313735.0,"EndTime":313735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":313850.0,"EndTime":313850.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":313966.0,"Objects":[{"StartTime":313966.0,"EndTime":313966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":314196.0,"EndTime":314196.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":314312.0,"Objects":[{"StartTime":314312.0,"EndTime":314312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":314427.0,"Objects":[{"StartTime":314427.0,"EndTime":314427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":314542.0,"EndTime":314542.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":314658.0,"Objects":[{"StartTime":314658.0,"EndTime":314658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":314773.0,"EndTime":314773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":314889.0,"Objects":[{"StartTime":314889.0,"EndTime":314889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":315062.0,"EndTime":315062.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":315120.0,"Objects":[{"StartTime":315120.0,"EndTime":315120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":315235.0,"EndTime":315235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":315350.0,"Objects":[{"StartTime":315350.0,"EndTime":315350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":315580.0,"EndTime":315580.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":315697.0,"Objects":[{"StartTime":315697.0,"EndTime":315697.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":315812.0,"Objects":[{"StartTime":315812.0,"EndTime":315812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":315927.0,"EndTime":315927.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":316043.0,"Objects":[{"StartTime":316043.0,"EndTime":316043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":316158.0,"EndTime":316158.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":316273.0,"Objects":[{"StartTime":316273.0,"EndTime":316273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":316388.0,"EndTime":316388.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":316504.0,"Objects":[{"StartTime":316504.0,"EndTime":316504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":316619.0,"EndTime":316619.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":316735.0,"Objects":[{"StartTime":316735.0,"EndTime":316735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":316965.0,"EndTime":316965.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":317081.0,"Objects":[{"StartTime":317081.0,"EndTime":317081.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":317197.0,"Objects":[{"StartTime":317197.0,"EndTime":317197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":317427.0,"EndTime":317427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":317543.0,"Objects":[{"StartTime":317543.0,"EndTime":317543.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":317600.0,"Objects":[{"StartTime":317600.0,"EndTime":317600.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":317658.0,"Objects":[{"StartTime":317658.0,"EndTime":317658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":317888.0,"EndTime":317888.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":318004.0,"Objects":[{"StartTime":318004.0,"EndTime":318004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":318120.0,"Objects":[{"StartTime":318120.0,"EndTime":318120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":318235.0,"EndTime":318235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":318350.0,"Objects":[{"StartTime":318350.0,"EndTime":318350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":318465.0,"EndTime":318465.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":318581.0,"Objects":[{"StartTime":318581.0,"EndTime":318581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":318811.0,"EndTime":318811.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":318927.0,"Objects":[{"StartTime":318927.0,"EndTime":318927.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":319043.0,"Objects":[{"StartTime":319043.0,"EndTime":319043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":319273.0,"EndTime":319273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":319389.0,"Objects":[{"StartTime":319389.0,"EndTime":319389.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":319504.0,"Objects":[{"StartTime":319504.0,"EndTime":319504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":319734.0,"EndTime":319734.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":319966.0,"Objects":[{"StartTime":319966.0,"EndTime":319966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":320081.0,"EndTime":320081.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":320197.0,"Objects":[{"StartTime":320197.0,"EndTime":320197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":320312.0,"EndTime":320312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":320427.0,"Objects":[{"StartTime":320427.0,"EndTime":320427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":320657.0,"EndTime":320657.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":320773.0,"Objects":[{"StartTime":320773.0,"EndTime":320773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":320889.0,"Objects":[{"StartTime":320889.0,"EndTime":320889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":321004.0,"EndTime":321004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":321120.0,"Objects":[{"StartTime":321120.0,"EndTime":321120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":321235.0,"EndTime":321235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":321350.0,"Objects":[{"StartTime":321350.0,"EndTime":321811.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":321927.0,"Objects":[{"StartTime":321927.0,"EndTime":321927.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":322043.0,"Objects":[{"StartTime":322043.0,"EndTime":322043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":322158.0,"EndTime":322158.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":322273.0,"Objects":[{"StartTime":322273.0,"EndTime":322273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":322388.0,"EndTime":322388.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":322504.0,"Objects":[{"StartTime":322504.0,"EndTime":322504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":322619.0,"EndTime":322619.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":322735.0,"Objects":[{"StartTime":322735.0,"EndTime":322735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":322850.0,"EndTime":322850.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":322966.0,"Objects":[{"StartTime":322966.0,"EndTime":322966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":323081.0,"Objects":[{"StartTime":323081.0,"EndTime":323081.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":323197.0,"Objects":[{"StartTime":323197.0,"EndTime":323197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":323312.0,"EndTime":323312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":323427.0,"Objects":[{"StartTime":323427.0,"EndTime":323427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":323542.0,"EndTime":323542.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":323658.0,"Objects":[{"StartTime":323658.0,"EndTime":323658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":323773.0,"EndTime":323773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":323888.0,"Objects":[{"StartTime":323888.0,"EndTime":323888.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":324003.0,"EndTime":324003.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":324120.0,"Objects":[{"StartTime":324120.0,"EndTime":324120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":324177.0,"Objects":[{"StartTime":324177.0,"EndTime":324177.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":324235.0,"Objects":[{"StartTime":324235.0,"EndTime":324235.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":324293.0,"Objects":[{"StartTime":324293.0,"EndTime":324293.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":324350.0,"Objects":[{"StartTime":324350.0,"EndTime":324350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":324408.0,"Objects":[{"StartTime":324408.0,"EndTime":324408.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":324466.0,"Objects":[{"StartTime":324466.0,"EndTime":324466.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":324523.0,"Objects":[{"StartTime":324523.0,"EndTime":324523.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":324581.0,"Objects":[{"StartTime":324581.0,"EndTime":324581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":324638.0,"Objects":[{"StartTime":324638.0,"EndTime":324638.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":324696.0,"Objects":[{"StartTime":324696.0,"EndTime":324696.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":324754.0,"Objects":[{"StartTime":324754.0,"EndTime":324754.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":324811.0,"Objects":[{"StartTime":324811.0,"EndTime":324811.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":324870.0,"Objects":[{"StartTime":324870.0,"EndTime":324870.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":324927.0,"Objects":[{"StartTime":324927.0,"EndTime":324927.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":324985.0,"Objects":[{"StartTime":324985.0,"EndTime":324985.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":325043.0,"Objects":[{"StartTime":325043.0,"EndTime":325043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":325273.0,"EndTime":325273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":325389.0,"Objects":[{"StartTime":325389.0,"EndTime":325389.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":325504.0,"Objects":[{"StartTime":325504.0,"EndTime":325504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":325734.0,"EndTime":325734.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":325850.0,"Objects":[{"StartTime":325850.0,"EndTime":325850.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":325966.0,"Objects":[{"StartTime":325966.0,"EndTime":325966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":326081.0,"EndTime":326081.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":326197.0,"Objects":[{"StartTime":326197.0,"EndTime":326197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":326427.0,"Objects":[{"StartTime":326427.0,"EndTime":326427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":326542.0,"EndTime":326542.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":326658.0,"Objects":[{"StartTime":326658.0,"EndTime":326658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":326773.0,"EndTime":326773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":326889.0,"Objects":[{"StartTime":326889.0,"EndTime":326889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":327119.0,"EndTime":327119.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":327235.0,"Objects":[{"StartTime":327235.0,"EndTime":327235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":327350.0,"Objects":[{"StartTime":327350.0,"EndTime":327350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":327465.0,"EndTime":327465.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":327581.0,"Objects":[{"StartTime":327581.0,"EndTime":327581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":327696.0,"EndTime":327696.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":327812.0,"Objects":[{"StartTime":327812.0,"EndTime":327812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":327927.0,"Objects":[{"StartTime":327927.0,"EndTime":327927.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":328043.0,"Objects":[{"StartTime":328043.0,"EndTime":328043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":328158.0,"EndTime":328158.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":328273.0,"Objects":[{"StartTime":328273.0,"EndTime":328273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":328388.0,"EndTime":328388.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":328504.0,"Objects":[{"StartTime":328504.0,"EndTime":328504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":328619.0,"EndTime":328619.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":328735.0,"Objects":[{"StartTime":328735.0,"EndTime":328735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":328965.0,"EndTime":328965.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":329081.0,"Objects":[{"StartTime":329081.0,"EndTime":329081.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":329197.0,"Objects":[{"StartTime":329197.0,"EndTime":329197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":329312.0,"EndTime":329312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":329427.0,"Objects":[{"StartTime":329427.0,"EndTime":329427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":329542.0,"EndTime":329542.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":329658.0,"Objects":[{"StartTime":329658.0,"EndTime":329658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":329831.0,"EndTime":329831.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":329889.0,"Objects":[{"StartTime":329889.0,"EndTime":329889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":330004.0,"EndTime":330004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":330120.0,"Objects":[{"StartTime":330120.0,"EndTime":330120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":330235.0,"EndTime":330235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":330350.0,"Objects":[{"StartTime":330350.0,"EndTime":330350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":330465.0,"EndTime":330465.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":330581.0,"Objects":[{"StartTime":330581.0,"EndTime":330581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":330754.0,"EndTime":330754.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":330812.0,"Objects":[{"StartTime":330812.0,"EndTime":330812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":330927.0,"EndTime":330927.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":331043.0,"Objects":[{"StartTime":331043.0,"EndTime":331043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":331158.0,"EndTime":331158.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":331273.0,"Objects":[{"StartTime":331273.0,"EndTime":331273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":331388.0,"EndTime":331388.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":331504.0,"Objects":[{"StartTime":331504.0,"EndTime":331504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":331677.0,"EndTime":331677.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":331735.0,"Objects":[{"StartTime":331735.0,"EndTime":331735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":331850.0,"EndTime":331850.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":331966.0,"Objects":[{"StartTime":331966.0,"EndTime":331966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":332081.0,"Objects":[{"StartTime":332081.0,"EndTime":332081.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":332138.0,"Objects":[{"StartTime":332138.0,"EndTime":332138.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":332196.0,"Objects":[{"StartTime":332196.0,"EndTime":332196.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":332254.0,"Objects":[{"StartTime":332254.0,"EndTime":332254.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":332312.0,"Objects":[{"StartTime":332312.0,"EndTime":332312.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":332370.0,"Objects":[{"StartTime":332370.0,"EndTime":332370.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":332427.0,"Objects":[{"StartTime":332427.0,"EndTime":332427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":332657.0,"EndTime":332657.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":332773.0,"Objects":[{"StartTime":332773.0,"EndTime":332773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":332889.0,"Objects":[{"StartTime":332889.0,"EndTime":332889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":333004.0,"EndTime":333004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":333120.0,"Objects":[{"StartTime":333120.0,"EndTime":333120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":333235.0,"EndTime":333235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":333350.0,"Objects":[{"StartTime":333350.0,"EndTime":333350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":333523.0,"EndTime":333523.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":333581.0,"Objects":[{"StartTime":333581.0,"EndTime":333581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":333696.0,"EndTime":333696.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":333812.0,"Objects":[{"StartTime":333812.0,"EndTime":333812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":333927.0,"EndTime":333927.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":334043.0,"Objects":[{"StartTime":334043.0,"EndTime":334043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":334158.0,"EndTime":334158.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":334273.0,"Objects":[{"StartTime":334273.0,"EndTime":334273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":334503.0,"EndTime":334503.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":334735.0,"Objects":[{"StartTime":334735.0,"EndTime":334735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":334850.0,"EndTime":334850.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":334966.0,"Objects":[{"StartTime":334966.0,"EndTime":334966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":335081.0,"EndTime":335081.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":335197.0,"Objects":[{"StartTime":335197.0,"EndTime":335197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":335427.0,"EndTime":335427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":335543.0,"Objects":[{"StartTime":335543.0,"EndTime":335543.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":335658.0,"Objects":[{"StartTime":335658.0,"EndTime":335658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":335888.0,"EndTime":335888.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":336004.0,"Objects":[{"StartTime":336004.0,"EndTime":336004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":336120.0,"Objects":[{"StartTime":336120.0,"EndTime":336120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":336293.0,"EndTime":336293.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":336350.0,"Objects":[{"StartTime":336350.0,"EndTime":336350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":336465.0,"EndTime":336465.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":336581.0,"Objects":[{"StartTime":336581.0,"EndTime":336581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":336696.0,"EndTime":336696.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":336812.0,"Objects":[{"StartTime":336812.0,"EndTime":336812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":336927.0,"EndTime":336927.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":337043.0,"Objects":[{"StartTime":337043.0,"EndTime":337043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":337100.0,"Objects":[{"StartTime":337100.0,"EndTime":337100.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":337158.0,"Objects":[{"StartTime":337158.0,"EndTime":337158.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":337216.0,"Objects":[{"StartTime":337216.0,"EndTime":337216.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":337273.0,"Objects":[{"StartTime":337273.0,"EndTime":337273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":337331.0,"Objects":[{"StartTime":337331.0,"EndTime":337331.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":337389.0,"Objects":[{"StartTime":337389.0,"EndTime":337389.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":337446.0,"Objects":[{"StartTime":337446.0,"EndTime":337446.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":337504.0,"Objects":[{"StartTime":337504.0,"EndTime":337504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":337561.0,"Objects":[{"StartTime":337561.0,"EndTime":337561.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":337619.0,"Objects":[{"StartTime":337619.0,"EndTime":337619.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":337677.0,"Objects":[{"StartTime":337677.0,"EndTime":337677.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":337734.0,"Objects":[{"StartTime":337734.0,"EndTime":337734.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":337793.0,"Objects":[{"StartTime":337793.0,"EndTime":337793.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":337851.0,"Objects":[{"StartTime":337851.0,"EndTime":337851.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":337909.0,"Objects":[{"StartTime":337909.0,"EndTime":337909.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":337966.0,"Objects":[{"StartTime":337966.0,"EndTime":337966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":338196.0,"EndTime":338196.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":338312.0,"Objects":[{"StartTime":338312.0,"EndTime":338312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":338427.0,"Objects":[{"StartTime":338427.0,"EndTime":338427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":338657.0,"EndTime":338657.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":338773.0,"Objects":[{"StartTime":338773.0,"EndTime":338773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":338889.0,"Objects":[{"StartTime":338889.0,"EndTime":338889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":339004.0,"EndTime":339004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":339120.0,"Objects":[{"StartTime":339120.0,"EndTime":339120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":339235.0,"EndTime":339235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":339350.0,"Objects":[{"StartTime":339350.0,"EndTime":339350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":339407.0,"Objects":[{"StartTime":339407.0,"EndTime":339407.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":339465.0,"Objects":[{"StartTime":339465.0,"EndTime":339465.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":339523.0,"Objects":[{"StartTime":339523.0,"EndTime":339523.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":339580.0,"Objects":[{"StartTime":339580.0,"EndTime":339580.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":339638.0,"Objects":[{"StartTime":339638.0,"EndTime":339638.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":339696.0,"Objects":[{"StartTime":339696.0,"EndTime":339696.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":339753.0,"Objects":[{"StartTime":339753.0,"EndTime":339753.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":339812.0,"Objects":[{"StartTime":339812.0,"EndTime":339812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":340042.0,"EndTime":340042.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":340158.0,"Objects":[{"StartTime":340158.0,"EndTime":340158.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":340273.0,"Objects":[{"StartTime":340273.0,"EndTime":340273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":340388.0,"EndTime":340388.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":340504.0,"Objects":[{"StartTime":340504.0,"EndTime":340504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":340619.0,"EndTime":340619.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":340735.0,"Objects":[{"StartTime":340735.0,"EndTime":340735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":340965.0,"EndTime":340965.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":341081.0,"Objects":[{"StartTime":341081.0,"EndTime":341081.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":341197.0,"Objects":[{"StartTime":341197.0,"EndTime":341197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":341312.0,"EndTime":341312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":341427.0,"Objects":[{"StartTime":341427.0,"EndTime":341427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":341542.0,"EndTime":341542.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":341658.0,"Objects":[{"StartTime":341658.0,"EndTime":341658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":341888.0,"EndTime":341888.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":342004.0,"Objects":[{"StartTime":342004.0,"EndTime":342004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":342120.0,"Objects":[{"StartTime":342120.0,"EndTime":342120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":342235.0,"EndTime":342235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":342350.0,"Objects":[{"StartTime":342350.0,"EndTime":342350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":342465.0,"EndTime":342465.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":342581.0,"Objects":[{"StartTime":342581.0,"EndTime":342581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":342811.0,"EndTime":342811.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":342927.0,"Objects":[{"StartTime":342927.0,"EndTime":342927.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":343043.0,"Objects":[{"StartTime":343043.0,"EndTime":343043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":343273.0,"EndTime":343273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":343389.0,"Objects":[{"StartTime":343389.0,"EndTime":343389.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":343447.0,"Objects":[{"StartTime":343447.0,"EndTime":343447.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":343504.0,"Objects":[{"StartTime":343504.0,"EndTime":343504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":343734.0,"EndTime":343734.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":343850.0,"Objects":[{"StartTime":343850.0,"EndTime":343850.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":344080.0,"EndTime":344080.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":344197.0,"Objects":[{"StartTime":344197.0,"EndTime":344197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":344312.0,"EndTime":344312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":344370.0,"Objects":[{"StartTime":344370.0,"EndTime":344370.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":344427.0,"Objects":[{"StartTime":344427.0,"EndTime":344427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":344657.0,"EndTime":344657.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":344773.0,"Objects":[{"StartTime":344773.0,"EndTime":344773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":344889.0,"Objects":[{"StartTime":344889.0,"EndTime":344889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":345004.0,"EndTime":345004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":345120.0,"Objects":[{"StartTime":345120.0,"EndTime":345120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":345235.0,"EndTime":345235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":345350.0,"Objects":[{"StartTime":345350.0,"EndTime":345350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":345465.0,"EndTime":345465.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":345581.0,"Objects":[{"StartTime":345581.0,"EndTime":345581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":345696.0,"EndTime":345696.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":345812.0,"Objects":[{"StartTime":345812.0,"EndTime":345812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":345927.0,"EndTime":345927.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":346043.0,"Objects":[{"StartTime":346043.0,"EndTime":346043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":346158.0,"EndTime":346158.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":346273.0,"Objects":[{"StartTime":346273.0,"EndTime":346273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":346446.0,"EndTime":346446.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":346504.0,"Objects":[{"StartTime":346504.0,"EndTime":346504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":346677.0,"EndTime":346677.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":346735.0,"Objects":[{"StartTime":346735.0,"EndTime":346735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":346908.0,"EndTime":346908.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":346966.0,"Objects":[{"StartTime":346966.0,"EndTime":346966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":347081.0,"EndTime":347081.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":347197.0,"Objects":[{"StartTime":347197.0,"EndTime":347197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":347427.0,"EndTime":347427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":347543.0,"Objects":[{"StartTime":347543.0,"EndTime":347543.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":347658.0,"Objects":[{"StartTime":347658.0,"EndTime":347658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":347773.0,"EndTime":347773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":347889.0,"Objects":[{"StartTime":347889.0,"EndTime":347889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":348004.0,"EndTime":348004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":348120.0,"Objects":[{"StartTime":348120.0,"EndTime":348120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":348235.0,"EndTime":348235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":348350.0,"Objects":[{"StartTime":348350.0,"EndTime":348350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":348465.0,"EndTime":348465.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":348581.0,"Objects":[{"StartTime":348581.0,"EndTime":348581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":348696.0,"EndTime":348696.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":348811.0,"Objects":[{"StartTime":348811.0,"EndTime":348811.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":348926.0,"EndTime":348926.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":348985.0,"Objects":[{"StartTime":348985.0,"EndTime":348985.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":349043.0,"Objects":[{"StartTime":349043.0,"EndTime":349043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":349273.0,"EndTime":349273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":349389.0,"Objects":[{"StartTime":349389.0,"EndTime":349389.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":349504.0,"Objects":[{"StartTime":349504.0,"EndTime":349504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":349619.0,"EndTime":349619.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":349735.0,"Objects":[{"StartTime":349735.0,"EndTime":349735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":349850.0,"EndTime":349850.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":349966.0,"Objects":[{"StartTime":349966.0,"EndTime":349966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":350196.0,"EndTime":350196.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":350312.0,"Objects":[{"StartTime":350312.0,"EndTime":350312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":350427.0,"Objects":[{"StartTime":350427.0,"EndTime":350427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":350657.0,"EndTime":350657.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":350773.0,"Objects":[{"StartTime":350773.0,"EndTime":350773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":350889.0,"Objects":[{"StartTime":350889.0,"EndTime":350889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":351119.0,"EndTime":351119.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":351235.0,"Objects":[{"StartTime":351235.0,"EndTime":351235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":351350.0,"Objects":[{"StartTime":351350.0,"EndTime":351350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":351580.0,"EndTime":351580.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":351812.0,"Objects":[{"StartTime":351812.0,"EndTime":351812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":352042.0,"EndTime":352042.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":352158.0,"Objects":[{"StartTime":352158.0,"EndTime":352158.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":352273.0,"Objects":[{"StartTime":352273.0,"EndTime":352273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":352388.0,"EndTime":352388.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":352504.0,"Objects":[{"StartTime":352504.0,"EndTime":352504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":352619.0,"EndTime":352619.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":352735.0,"Objects":[{"StartTime":352735.0,"EndTime":352735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":352965.0,"EndTime":352965.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":353081.0,"Objects":[{"StartTime":353081.0,"EndTime":353081.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":353197.0,"Objects":[{"StartTime":353197.0,"EndTime":353197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":353312.0,"EndTime":353312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":353427.0,"Objects":[{"StartTime":353427.0,"EndTime":353427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":353542.0,"EndTime":353542.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":353658.0,"Objects":[{"StartTime":353658.0,"EndTime":353658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":353773.0,"EndTime":353773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":353889.0,"Objects":[{"StartTime":353889.0,"EndTime":353889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":354004.0,"EndTime":354004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":354120.0,"Objects":[{"StartTime":354120.0,"EndTime":354120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":354235.0,"EndTime":354235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":354350.0,"Objects":[{"StartTime":354350.0,"EndTime":354350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":354465.0,"EndTime":354465.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":354581.0,"Objects":[{"StartTime":354581.0,"EndTime":354581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":354811.0,"EndTime":354811.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":354927.0,"Objects":[{"StartTime":354927.0,"EndTime":354927.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":355043.0,"Objects":[{"StartTime":355043.0,"EndTime":355043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":355273.0,"EndTime":355273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":355389.0,"Objects":[{"StartTime":355389.0,"EndTime":355389.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":355504.0,"Objects":[{"StartTime":355504.0,"EndTime":355504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":355620.0,"Objects":[{"StartTime":355620.0,"EndTime":355620.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":355735.0,"Objects":[{"StartTime":355735.0,"EndTime":355735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":355851.0,"Objects":[{"StartTime":355851.0,"EndTime":355851.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":355966.0,"Objects":[{"StartTime":355966.0,"EndTime":355966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":356082.0,"Objects":[{"StartTime":356082.0,"EndTime":356082.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":356197.0,"Objects":[{"StartTime":356197.0,"EndTime":356197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":356313.0,"Objects":[{"StartTime":356313.0,"EndTime":356313.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":356427.0,"Objects":[{"StartTime":356427.0,"EndTime":356427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":356657.0,"EndTime":356657.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":356773.0,"Objects":[{"StartTime":356773.0,"EndTime":356773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":356889.0,"Objects":[{"StartTime":356889.0,"EndTime":356889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":357004.0,"EndTime":357004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":357120.0,"Objects":[{"StartTime":357120.0,"EndTime":357120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":357235.0,"EndTime":357235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":357350.0,"Objects":[{"StartTime":357350.0,"EndTime":357350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":357580.0,"EndTime":357580.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":357697.0,"Objects":[{"StartTime":357697.0,"EndTime":357697.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":357812.0,"Objects":[{"StartTime":357812.0,"EndTime":357812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":357927.0,"Objects":[{"StartTime":357927.0,"EndTime":357927.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":358043.0,"Objects":[{"StartTime":358043.0,"EndTime":358043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":358158.0,"Objects":[{"StartTime":358158.0,"EndTime":358158.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":358273.0,"Objects":[{"StartTime":358273.0,"EndTime":358273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":358503.0,"EndTime":358503.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":358620.0,"Objects":[{"StartTime":358620.0,"EndTime":358620.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":358735.0,"Objects":[{"StartTime":358735.0,"EndTime":358735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":358850.0,"EndTime":358850.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":358966.0,"Objects":[{"StartTime":358966.0,"EndTime":358966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":359081.0,"EndTime":359081.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":359197.0,"Objects":[{"StartTime":359197.0,"EndTime":359658.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":359773.0,"Objects":[{"StartTime":359773.0,"EndTime":359773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":359889.0,"Objects":[{"StartTime":359889.0,"EndTime":359889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":360004.0,"Objects":[{"StartTime":360004.0,"EndTime":360004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":360120.0,"Objects":[{"StartTime":360120.0,"EndTime":360120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":360350.0,"EndTime":360350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":360466.0,"Objects":[{"StartTime":360466.0,"EndTime":360466.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":360581.0,"Objects":[{"StartTime":360581.0,"EndTime":360581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":360696.0,"EndTime":360696.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":360812.0,"Objects":[{"StartTime":360812.0,"EndTime":360812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":360927.0,"EndTime":360927.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":361043.0,"Objects":[{"StartTime":361043.0,"EndTime":361043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":361158.0,"EndTime":361158.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":361273.0,"Objects":[{"StartTime":361273.0,"EndTime":361273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":361388.0,"EndTime":361388.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":361504.0,"Objects":[{"StartTime":361504.0,"EndTime":361504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":361620.0,"Objects":[{"StartTime":361620.0,"EndTime":361620.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":361735.0,"Objects":[{"StartTime":361735.0,"EndTime":361735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":361851.0,"Objects":[{"StartTime":361851.0,"EndTime":361851.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":361966.0,"Objects":[{"StartTime":361966.0,"EndTime":361966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":362196.0,"EndTime":362196.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":362312.0,"Objects":[{"StartTime":362312.0,"EndTime":362312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":362427.0,"Objects":[{"StartTime":362427.0,"EndTime":362427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":362542.0,"EndTime":362542.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":362658.0,"Objects":[{"StartTime":362658.0,"EndTime":362658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":362773.0,"EndTime":362773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":362831.0,"Objects":[{"StartTime":362831.0,"EndTime":362831.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":362889.0,"Objects":[{"StartTime":362889.0,"EndTime":362889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":363119.0,"EndTime":363119.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":363235.0,"Objects":[{"StartTime":363235.0,"EndTime":363235.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":363465.0,"EndTime":363465.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":363581.0,"Objects":[{"StartTime":363581.0,"EndTime":363581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":363696.0,"EndTime":363696.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":363812.0,"Objects":[{"StartTime":363812.0,"EndTime":364273.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":364389.0,"Objects":[{"StartTime":364389.0,"EndTime":364389.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":364504.0,"Objects":[{"StartTime":364504.0,"EndTime":364504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":364619.0,"EndTime":364619.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":364735.0,"Objects":[{"StartTime":364735.0,"EndTime":364735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":364850.0,"EndTime":364850.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":364966.0,"Objects":[{"StartTime":364966.0,"EndTime":365427.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":365543.0,"Objects":[{"StartTime":365543.0,"EndTime":365543.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":365658.0,"Objects":[{"StartTime":365658.0,"EndTime":365658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":365773.0,"EndTime":365773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":365889.0,"Objects":[{"StartTime":365889.0,"EndTime":365889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":366004.0,"EndTime":366004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":366120.0,"Objects":[{"StartTime":366120.0,"EndTime":366120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":366235.0,"Objects":[{"StartTime":366235.0,"EndTime":366235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":366350.0,"EndTime":366350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":366465.0,"EndTime":366465.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":366581.0,"Objects":[{"StartTime":366581.0,"EndTime":366581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":366696.0,"EndTime":366696.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":366812.0,"Objects":[{"StartTime":366812.0,"EndTime":366812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":367042.0,"EndTime":367042.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":367158.0,"Objects":[{"StartTime":367158.0,"EndTime":367158.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":367273.0,"Objects":[{"StartTime":367273.0,"EndTime":367273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":367388.0,"EndTime":367388.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":367504.0,"Objects":[{"StartTime":367504.0,"EndTime":367965.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":368081.0,"Objects":[{"StartTime":368081.0,"EndTime":368081.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":368197.0,"Objects":[{"StartTime":368197.0,"EndTime":368197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":368312.0,"EndTime":368312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":368427.0,"Objects":[{"StartTime":368427.0,"EndTime":368427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":368657.0,"EndTime":368657.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":368773.0,"Objects":[{"StartTime":368773.0,"EndTime":368773.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":369003.0,"EndTime":369003.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":369120.0,"Objects":[{"StartTime":369120.0,"EndTime":369120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":369235.0,"EndTime":369235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":369350.0,"Objects":[{"StartTime":369350.0,"EndTime":369350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":369580.0,"EndTime":369580.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":369697.0,"Objects":[{"StartTime":369697.0,"EndTime":369697.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":369812.0,"Objects":[{"StartTime":369812.0,"EndTime":369812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":369927.0,"EndTime":369927.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":370043.0,"Objects":[{"StartTime":370043.0,"EndTime":370043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":370158.0,"EndTime":370158.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":370273.0,"Objects":[{"StartTime":370273.0,"EndTime":370273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":370389.0,"Objects":[{"StartTime":370389.0,"EndTime":370389.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":370504.0,"Objects":[{"StartTime":370504.0,"EndTime":370504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":370620.0,"Objects":[{"StartTime":370620.0,"EndTime":370620.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":370677.0,"Objects":[{"StartTime":370677.0,"EndTime":370677.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":370735.0,"Objects":[{"StartTime":370735.0,"EndTime":370735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":370793.0,"Objects":[{"StartTime":370793.0,"EndTime":370793.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":370850.0,"Objects":[{"StartTime":370850.0,"EndTime":370850.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":370908.0,"Objects":[{"StartTime":370908.0,"EndTime":370908.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":370966.0,"Objects":[{"StartTime":370966.0,"EndTime":370966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":371081.0,"Objects":[{"StartTime":371081.0,"EndTime":371081.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":371197.0,"Objects":[{"StartTime":371197.0,"EndTime":371197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":371427.0,"EndTime":371427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":371658.0,"Objects":[{"StartTime":371658.0,"EndTime":371658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":371888.0,"EndTime":371888.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":372120.0,"Objects":[{"StartTime":372120.0,"EndTime":372120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":372350.0,"EndTime":372350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":372581.0,"Objects":[{"StartTime":372581.0,"EndTime":372581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":372696.0,"EndTime":372696.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":372812.0,"Objects":[{"StartTime":372812.0,"EndTime":372812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":372927.0,"Objects":[{"StartTime":372927.0,"EndTime":372927.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":373043.0,"Objects":[{"StartTime":373043.0,"EndTime":373043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":373273.0,"EndTime":373273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":373504.0,"Objects":[{"StartTime":373504.0,"EndTime":373504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":373734.0,"EndTime":373734.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":373850.0,"Objects":[{"StartTime":373850.0,"EndTime":373850.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":373966.0,"Objects":[{"StartTime":373966.0,"EndTime":373966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":374196.0,"EndTime":374196.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":374427.0,"Objects":[{"StartTime":374427.0,"EndTime":374427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":374542.0,"EndTime":374542.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":374658.0,"Objects":[{"StartTime":374658.0,"EndTime":374658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":374773.0,"Objects":[{"StartTime":374773.0,"EndTime":374773.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":374830.0,"Objects":[{"StartTime":374830.0,"EndTime":374830.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":374889.0,"Objects":[{"StartTime":374889.0,"EndTime":374889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":375119.0,"EndTime":375119.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":375350.0,"Objects":[{"StartTime":375350.0,"EndTime":375350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":375466.0,"Objects":[{"StartTime":375466.0,"EndTime":375466.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":375581.0,"Objects":[{"StartTime":375581.0,"EndTime":375581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":375697.0,"Objects":[{"StartTime":375697.0,"EndTime":375697.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":375812.0,"Objects":[{"StartTime":375812.0,"EndTime":375812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":376042.0,"EndTime":376042.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":376273.0,"Objects":[{"StartTime":376273.0,"EndTime":376273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":376503.0,"EndTime":376503.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":376620.0,"Objects":[{"StartTime":376620.0,"EndTime":376620.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":376735.0,"Objects":[{"StartTime":376735.0,"EndTime":376735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":376965.0,"EndTime":376965.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":377197.0,"Objects":[{"StartTime":377197.0,"EndTime":377197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":377313.0,"Objects":[{"StartTime":377313.0,"EndTime":377313.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":377428.0,"Objects":[{"StartTime":377428.0,"EndTime":377428.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":377544.0,"Objects":[{"StartTime":377544.0,"EndTime":377544.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":377658.0,"Objects":[{"StartTime":377658.0,"EndTime":377658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":377888.0,"EndTime":377888.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":378120.0,"Objects":[{"StartTime":378120.0,"EndTime":378120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":378350.0,"EndTime":378350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":378581.0,"Objects":[{"StartTime":378581.0,"EndTime":379273.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":379504.0,"Objects":[{"StartTime":379504.0,"EndTime":379504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":379734.0,"EndTime":379734.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":379850.0,"Objects":[{"StartTime":379850.0,"EndTime":379850.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":380080.0,"EndTime":380080.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":380197.0,"Objects":[{"StartTime":380197.0,"EndTime":380197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":380312.0,"EndTime":380312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":380427.0,"Objects":[{"StartTime":380427.0,"EndTime":380427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":380543.0,"Objects":[{"StartTime":380543.0,"EndTime":380543.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":380773.0,"EndTime":380773.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":380889.0,"Objects":[{"StartTime":380889.0,"EndTime":380889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":381004.0,"EndTime":381004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":381120.0,"Objects":[{"StartTime":381120.0,"EndTime":381120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":381235.0,"EndTime":381235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":381350.0,"Objects":[{"StartTime":381350.0,"EndTime":381350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":381466.0,"Objects":[{"StartTime":381466.0,"EndTime":381466.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":381696.0,"EndTime":381696.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":381812.0,"Objects":[{"StartTime":381812.0,"EndTime":381812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":381927.0,"EndTime":381927.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":382043.0,"Objects":[{"StartTime":382043.0,"EndTime":382043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":382158.0,"EndTime":382158.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":382273.0,"Objects":[{"StartTime":382273.0,"EndTime":382273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":382330.0,"EndTime":382330.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":382388.0,"EndTime":382388.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":382446.0,"EndTime":382446.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":382504.0,"Objects":[{"StartTime":382504.0,"EndTime":382504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":382561.0,"EndTime":382561.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":382619.0,"EndTime":382619.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":382677.0,"EndTime":382677.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":382735.0,"Objects":[{"StartTime":382735.0,"EndTime":382735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":382792.0,"Objects":[{"StartTime":382792.0,"EndTime":382792.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":382850.0,"Objects":[{"StartTime":382850.0,"EndTime":382850.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":382908.0,"Objects":[{"StartTime":382908.0,"EndTime":382908.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":382966.0,"Objects":[{"StartTime":382966.0,"EndTime":382966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":383023.0,"Objects":[{"StartTime":383023.0,"EndTime":383023.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":383080.0,"Objects":[{"StartTime":383080.0,"EndTime":383080.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":383138.0,"Objects":[{"StartTime":383138.0,"EndTime":383138.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":383197.0,"Objects":[{"StartTime":383197.0,"EndTime":383197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":383254.0,"Objects":[{"StartTime":383254.0,"EndTime":383254.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":383312.0,"Objects":[{"StartTime":383312.0,"EndTime":383312.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":383370.0,"Objects":[{"StartTime":383370.0,"EndTime":383370.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":383427.0,"Objects":[{"StartTime":383427.0,"EndTime":383427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":383484.0,"Objects":[{"StartTime":383484.0,"EndTime":383484.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":383542.0,"Objects":[{"StartTime":383542.0,"EndTime":383542.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":383600.0,"Objects":[{"StartTime":383600.0,"EndTime":383600.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":383657.0,"Objects":[{"StartTime":383657.0,"EndTime":383657.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":383715.0,"Objects":[{"StartTime":383715.0,"EndTime":383715.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":383773.0,"Objects":[{"StartTime":383773.0,"EndTime":383773.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":383831.0,"Objects":[{"StartTime":383831.0,"EndTime":383831.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":383889.0,"Objects":[{"StartTime":383889.0,"EndTime":383889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":383947.0,"Objects":[{"StartTime":383947.0,"EndTime":383947.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":384004.0,"Objects":[{"StartTime":384004.0,"EndTime":384004.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":384062.0,"Objects":[{"StartTime":384062.0,"EndTime":384062.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":384120.0,"Objects":[{"StartTime":384120.0,"EndTime":384120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true}]}]} \ No newline at end of file +{"Mappings":[{"StartTime":6590.0,"Objects":[{"StartTime":6590.0,"EndTime":8320.0,"Column":1}]},{"StartTime":8436.0,"Objects":[{"StartTime":8436.0,"EndTime":10166.0,"Column":6}]},{"StartTime":10282.0,"Objects":[{"StartTime":10282.0,"EndTime":12012.0,"Column":3}]},{"StartTime":12128.0,"Objects":[{"StartTime":12128.0,"EndTime":13858.0,"Column":1},{"StartTime":12128.0,"EndTime":13858.0,"Column":2}]},{"StartTime":13974.0,"Objects":[{"StartTime":13974.0,"EndTime":15704.0,"Column":5},{"StartTime":13974.0,"EndTime":15704.0,"Column":6}]},{"StartTime":15820.0,"Objects":[{"StartTime":15820.0,"EndTime":17550.0,"Column":1}]},{"StartTime":17666.0,"Objects":[{"StartTime":17666.0,"EndTime":19512.0,"Column":4}]},{"StartTime":19628.0,"Objects":[{"StartTime":19628.0,"EndTime":21128.0,"Column":0}]},{"StartTime":21359.0,"Objects":[{"StartTime":21359.0,"EndTime":21820.0,"Column":1},{"StartTime":21359.0,"EndTime":21820.0,"Column":3}]},{"StartTime":22282.0,"Objects":[{"StartTime":22282.0,"EndTime":22743.0,"Column":6}]},{"StartTime":23205.0,"Objects":[{"StartTime":23205.0,"EndTime":23666.0,"Column":3},{"StartTime":23205.0,"EndTime":23666.0,"Column":0}]},{"StartTime":24128.0,"Objects":[{"StartTime":24128.0,"EndTime":24589.0,"Column":6}]},{"StartTime":25051.0,"Objects":[{"StartTime":25051.0,"EndTime":26666.0,"Column":4}]},{"StartTime":26897.0,"Objects":[{"StartTime":26897.0,"EndTime":28281.0,"Column":6}]},{"StartTime":28743.0,"Objects":[{"StartTime":28743.0,"EndTime":29204.0,"Column":3}]},{"StartTime":29666.0,"Objects":[{"StartTime":29666.0,"EndTime":30127.0,"Column":1},{"StartTime":29666.0,"EndTime":30127.0,"Column":5},{"StartTime":29666.0,"EndTime":30127.0,"Column":0}]},{"StartTime":30589.0,"Objects":[{"StartTime":30589.0,"EndTime":31050.0,"Column":2}]},{"StartTime":31513.0,"Objects":[{"StartTime":31513.0,"EndTime":31974.0,"Column":1}]},{"StartTime":32436.0,"Objects":[{"StartTime":32436.0,"EndTime":34282.0,"Column":0},{"StartTime":32436.0,"EndTime":34282.0,"Column":5}]},{"StartTime":35205.0,"Objects":[{"StartTime":35205.0,"EndTime":36012.0,"Column":3}]},{"StartTime":36128.0,"Objects":[{"StartTime":36128.0,"EndTime":36474.0,"Column":1}]},{"StartTime":36590.0,"Objects":[{"StartTime":36590.0,"EndTime":39359.0,"Column":0},{"StartTime":36590.0,"EndTime":39359.0,"Column":3}]},{"StartTime":39820.0,"Objects":[{"StartTime":39820.0,"EndTime":40281.0,"Column":2},{"StartTime":39820.0,"EndTime":40281.0,"Column":5},{"StartTime":39820.0,"EndTime":40281.0,"Column":1}]},{"StartTime":40743.0,"Objects":[{"StartTime":40743.0,"EndTime":41204.0,"Column":4}]},{"StartTime":41666.0,"Objects":[{"StartTime":41666.0,"EndTime":42589.0,"Column":1}]},{"StartTime":43051.0,"Objects":[{"StartTime":43051.0,"EndTime":43281.0,"Column":3}]},{"StartTime":43513.0,"Objects":[{"StartTime":43513.0,"EndTime":43513.0,"Column":0},{"StartTime":43513.0,"EndTime":43513.0,"Column":6}]},{"StartTime":43628.0,"Objects":[{"StartTime":43628.0,"EndTime":49051.0,"Column":4}]},{"StartTime":56435.0,"Objects":[{"StartTime":56435.0,"EndTime":56665.0,"Column":2}]},{"StartTime":56781.0,"Objects":[{"StartTime":56781.0,"EndTime":56781.0,"Column":3}]},{"StartTime":56897.0,"Objects":[{"StartTime":56897.0,"EndTime":57012.0,"Column":1}]},{"StartTime":57127.0,"Objects":[{"StartTime":57127.0,"EndTime":57242.0,"Column":5},{"StartTime":57127.0,"EndTime":57242.0,"Column":6}]},{"StartTime":57358.0,"Objects":[{"StartTime":57358.0,"EndTime":57473.0,"Column":2},{"StartTime":57358.0,"EndTime":57473.0,"Column":1}]},{"StartTime":57589.0,"Objects":[{"StartTime":57589.0,"EndTime":57704.0,"Column":4}]},{"StartTime":57820.0,"Objects":[{"StartTime":57820.0,"EndTime":57820.0,"Column":0}]},{"StartTime":57935.0,"Objects":[{"StartTime":57935.0,"EndTime":57935.0,"Column":2}]},{"StartTime":58051.0,"Objects":[{"StartTime":58051.0,"EndTime":58051.0,"Column":3},{"StartTime":58051.0,"EndTime":58051.0,"Column":4},{"StartTime":58051.0,"EndTime":58051.0,"Column":5}]},{"StartTime":58166.0,"Objects":[{"StartTime":58166.0,"EndTime":58166.0,"Column":6},{"StartTime":58166.0,"EndTime":58166.0,"Column":0}]},{"StartTime":58224.0,"Objects":[{"StartTime":58224.0,"EndTime":58224.0,"Column":5}]},{"StartTime":58281.0,"Objects":[{"StartTime":58281.0,"EndTime":58511.0,"Column":3},{"StartTime":58281.0,"EndTime":58511.0,"Column":1}]},{"StartTime":58627.0,"Objects":[{"StartTime":58627.0,"EndTime":58627.0,"Column":6}]},{"StartTime":58685.0,"Objects":[{"StartTime":58685.0,"EndTime":58685.0,"Column":1}]},{"StartTime":58743.0,"Objects":[{"StartTime":58743.0,"EndTime":58858.0,"Column":6}]},{"StartTime":58974.0,"Objects":[{"StartTime":58974.0,"EndTime":59089.0,"Column":0}]},{"StartTime":59204.0,"Objects":[{"StartTime":59204.0,"EndTime":59319.0,"Column":2}]},{"StartTime":59435.0,"Objects":[{"StartTime":59435.0,"EndTime":59550.0,"Column":0},{"StartTime":59435.0,"EndTime":59550.0,"Column":3}]},{"StartTime":59666.0,"Objects":[{"StartTime":59666.0,"EndTime":59781.0,"Column":4},{"StartTime":59666.0,"EndTime":59781.0,"Column":2}]},{"StartTime":59897.0,"Objects":[{"StartTime":59897.0,"EndTime":60012.0,"Column":1}]},{"StartTime":60127.0,"Objects":[{"StartTime":60127.0,"EndTime":60357.0,"Column":5},{"StartTime":60127.0,"EndTime":60357.0,"Column":6}]},{"StartTime":60474.0,"Objects":[{"StartTime":60474.0,"EndTime":60704.0,"Column":1}]},{"StartTime":60820.0,"Objects":[{"StartTime":60820.0,"EndTime":60935.0,"Column":0},{"StartTime":60820.0,"EndTime":60935.0,"Column":5}]},{"StartTime":61051.0,"Objects":[{"StartTime":61051.0,"EndTime":61166.0,"Column":3}]},{"StartTime":61281.0,"Objects":[{"StartTime":61281.0,"EndTime":61396.0,"Column":2}]},{"StartTime":61512.0,"Objects":[{"StartTime":61512.0,"EndTime":61627.0,"Column":5}]},{"StartTime":61743.0,"Objects":[{"StartTime":61743.0,"EndTime":61858.0,"Column":4},{"StartTime":61743.0,"EndTime":61858.0,"Column":3},{"StartTime":61743.0,"EndTime":61858.0,"Column":6}]},{"StartTime":61916.0,"Objects":[{"StartTime":61916.0,"EndTime":61916.0,"Column":5}]},{"StartTime":61974.0,"Objects":[{"StartTime":61974.0,"EndTime":62204.0,"Column":1}]},{"StartTime":62320.0,"Objects":[{"StartTime":62320.0,"EndTime":62550.0,"Column":4}]},{"StartTime":62666.0,"Objects":[{"StartTime":62666.0,"EndTime":63127.0,"Column":2}]},{"StartTime":63358.0,"Objects":[{"StartTime":63358.0,"EndTime":63358.0,"Column":3}]},{"StartTime":63474.0,"Objects":[{"StartTime":63474.0,"EndTime":63474.0,"Column":4},{"StartTime":63474.0,"EndTime":63474.0,"Column":5}]},{"StartTime":63589.0,"Objects":[{"StartTime":63589.0,"EndTime":63589.0,"Column":3},{"StartTime":63589.0,"EndTime":63589.0,"Column":6},{"StartTime":63589.0,"EndTime":63589.0,"Column":0}]},{"StartTime":63705.0,"Objects":[{"StartTime":63705.0,"EndTime":63705.0,"Column":4},{"StartTime":63705.0,"EndTime":63705.0,"Column":5}]},{"StartTime":63820.0,"Objects":[{"StartTime":63820.0,"EndTime":63820.0,"Column":6}]},{"StartTime":63877.0,"Objects":[{"StartTime":63877.0,"EndTime":63877.0,"Column":5}]},{"StartTime":63935.0,"Objects":[{"StartTime":63935.0,"EndTime":63935.0,"Column":4}]},{"StartTime":63993.0,"Objects":[{"StartTime":63993.0,"EndTime":63993.0,"Column":5}]},{"StartTime":64051.0,"Objects":[{"StartTime":64051.0,"EndTime":64166.0,"Column":3},{"StartTime":64051.0,"EndTime":64166.0,"Column":0},{"StartTime":64051.0,"EndTime":64166.0,"Column":4}]},{"StartTime":64281.0,"Objects":[{"StartTime":64281.0,"EndTime":64281.0,"Column":2},{"StartTime":64281.0,"EndTime":64281.0,"Column":1}]},{"StartTime":64338.0,"Objects":[{"StartTime":64338.0,"EndTime":64338.0,"Column":5}]},{"StartTime":64396.0,"Objects":[{"StartTime":64396.0,"EndTime":64396.0,"Column":3}]},{"StartTime":64454.0,"Objects":[{"StartTime":64454.0,"EndTime":64454.0,"Column":0}]},{"StartTime":64512.0,"Objects":[{"StartTime":64512.0,"EndTime":64627.0,"Column":5}]},{"StartTime":64743.0,"Objects":[{"StartTime":64743.0,"EndTime":64743.0,"Column":2}]},{"StartTime":64800.0,"Objects":[{"StartTime":64800.0,"EndTime":64800.0,"Column":5}]},{"StartTime":64858.0,"Objects":[{"StartTime":64858.0,"EndTime":64858.0,"Column":3}]},{"StartTime":64916.0,"Objects":[{"StartTime":64916.0,"EndTime":64916.0,"Column":1}]},{"StartTime":64974.0,"Objects":[{"StartTime":64974.0,"EndTime":65089.0,"Column":3}]},{"StartTime":65205.0,"Objects":[{"StartTime":65205.0,"EndTime":65205.0,"Column":6},{"StartTime":65205.0,"EndTime":65205.0,"Column":2}]},{"StartTime":65262.0,"Objects":[{"StartTime":65262.0,"EndTime":65262.0,"Column":0}]},{"StartTime":65320.0,"Objects":[{"StartTime":65320.0,"EndTime":65320.0,"Column":6}]},{"StartTime":65378.0,"Objects":[{"StartTime":65378.0,"EndTime":65378.0,"Column":5}]},{"StartTime":65436.0,"Objects":[{"StartTime":65436.0,"EndTime":65551.0,"Column":3}]},{"StartTime":65666.0,"Objects":[{"StartTime":65666.0,"EndTime":65666.0,"Column":6}]},{"StartTime":65723.0,"Objects":[{"StartTime":65723.0,"EndTime":65723.0,"Column":1}]},{"StartTime":65781.0,"Objects":[{"StartTime":65781.0,"EndTime":65781.0,"Column":5}]},{"StartTime":65839.0,"Objects":[{"StartTime":65839.0,"EndTime":65839.0,"Column":1}]},{"StartTime":65897.0,"Objects":[{"StartTime":65897.0,"EndTime":66012.0,"Column":5},{"StartTime":65897.0,"EndTime":66012.0,"Column":3}]},{"StartTime":66127.0,"Objects":[{"StartTime":66127.0,"EndTime":66127.0,"Column":1},{"StartTime":66127.0,"EndTime":66127.0,"Column":0}]},{"StartTime":66184.0,"Objects":[{"StartTime":66184.0,"EndTime":66184.0,"Column":2}]},{"StartTime":66242.0,"Objects":[{"StartTime":66242.0,"EndTime":66242.0,"Column":1}]},{"StartTime":66300.0,"Objects":[{"StartTime":66300.0,"EndTime":66300.0,"Column":2}]},{"StartTime":66358.0,"Objects":[{"StartTime":66358.0,"EndTime":66473.0,"Column":0}]},{"StartTime":66589.0,"Objects":[{"StartTime":66589.0,"EndTime":66704.0,"Column":2},{"StartTime":66589.0,"EndTime":66704.0,"Column":6}]},{"StartTime":66820.0,"Objects":[{"StartTime":66820.0,"EndTime":66935.0,"Column":4},{"StartTime":66820.0,"EndTime":66935.0,"Column":1}]},{"StartTime":67051.0,"Objects":[{"StartTime":67051.0,"EndTime":67281.0,"Column":2}]},{"StartTime":67397.0,"Objects":[{"StartTime":67397.0,"EndTime":67397.0,"Column":4},{"StartTime":67397.0,"EndTime":67397.0,"Column":6}]},{"StartTime":67512.0,"Objects":[{"StartTime":67512.0,"EndTime":67742.0,"Column":5},{"StartTime":67512.0,"EndTime":67742.0,"Column":3}]},{"StartTime":67858.0,"Objects":[{"StartTime":67858.0,"EndTime":68088.0,"Column":1}]},{"StartTime":68204.0,"Objects":[{"StartTime":68204.0,"EndTime":68319.0,"Column":2}]},{"StartTime":68435.0,"Objects":[{"StartTime":68435.0,"EndTime":68550.0,"Column":1}]},{"StartTime":68666.0,"Objects":[{"StartTime":68666.0,"EndTime":68781.0,"Column":6},{"StartTime":68666.0,"EndTime":68781.0,"Column":2}]},{"StartTime":68897.0,"Objects":[{"StartTime":68897.0,"EndTime":68897.0,"Column":1},{"StartTime":68897.0,"EndTime":68897.0,"Column":3}]},{"StartTime":69012.0,"Objects":[{"StartTime":69012.0,"EndTime":69012.0,"Column":2},{"StartTime":69012.0,"EndTime":69012.0,"Column":4}]},{"StartTime":69127.0,"Objects":[{"StartTime":69127.0,"EndTime":69127.0,"Column":1},{"StartTime":69127.0,"EndTime":69127.0,"Column":3},{"StartTime":69127.0,"EndTime":69127.0,"Column":5}]},{"StartTime":69242.0,"Objects":[{"StartTime":69242.0,"EndTime":69242.0,"Column":2},{"StartTime":69242.0,"EndTime":69242.0,"Column":4}]},{"StartTime":69358.0,"Objects":[{"StartTime":69358.0,"EndTime":69473.0,"Column":3},{"StartTime":69358.0,"EndTime":69473.0,"Column":6}]},{"StartTime":69589.0,"Objects":[{"StartTime":69589.0,"EndTime":69704.0,"Column":5}]},{"StartTime":69820.0,"Objects":[{"StartTime":69820.0,"EndTime":69935.0,"Column":4}]},{"StartTime":70051.0,"Objects":[{"StartTime":70051.0,"EndTime":70166.0,"Column":5},{"StartTime":70051.0,"EndTime":70166.0,"Column":1},{"StartTime":70051.0,"EndTime":70166.0,"Column":6}]},{"StartTime":70281.0,"Objects":[{"StartTime":70281.0,"EndTime":70281.0,"Column":2},{"StartTime":70281.0,"EndTime":70281.0,"Column":3}]},{"StartTime":70339.0,"Objects":[{"StartTime":70339.0,"EndTime":70339.0,"Column":1}]},{"StartTime":70397.0,"Objects":[{"StartTime":70397.0,"EndTime":70397.0,"Column":3}]},{"StartTime":70455.0,"Objects":[{"StartTime":70455.0,"EndTime":70455.0,"Column":6}]},{"StartTime":70512.0,"Objects":[{"StartTime":70512.0,"EndTime":70512.0,"Column":4}]},{"StartTime":70570.0,"Objects":[{"StartTime":70570.0,"EndTime":70570.0,"Column":0}]},{"StartTime":70627.0,"Objects":[{"StartTime":70627.0,"EndTime":70627.0,"Column":4}]},{"StartTime":70685.0,"Objects":[{"StartTime":70685.0,"EndTime":70685.0,"Column":5}]},{"StartTime":70742.0,"Objects":[{"StartTime":70742.0,"EndTime":70742.0,"Column":0}]},{"StartTime":70800.0,"Objects":[{"StartTime":70800.0,"EndTime":70800.0,"Column":6}]},{"StartTime":70858.0,"Objects":[{"StartTime":70858.0,"EndTime":70858.0,"Column":1}]},{"StartTime":70916.0,"Objects":[{"StartTime":70916.0,"EndTime":70916.0,"Column":6}]},{"StartTime":70974.0,"Objects":[{"StartTime":70974.0,"EndTime":70974.0,"Column":1}]},{"StartTime":71031.0,"Objects":[{"StartTime":71031.0,"EndTime":71031.0,"Column":6}]},{"StartTime":71089.0,"Objects":[{"StartTime":71089.0,"EndTime":71089.0,"Column":0}]},{"StartTime":71146.0,"Objects":[{"StartTime":71146.0,"EndTime":71146.0,"Column":5}]},{"StartTime":71204.0,"Objects":[{"StartTime":71204.0,"EndTime":71434.0,"Column":0},{"StartTime":71204.0,"EndTime":71434.0,"Column":3}]},{"StartTime":71551.0,"Objects":[{"StartTime":71551.0,"EndTime":71781.0,"Column":1},{"StartTime":71551.0,"EndTime":71781.0,"Column":2}]},{"StartTime":71897.0,"Objects":[{"StartTime":71897.0,"EndTime":72012.0,"Column":0},{"StartTime":71897.0,"EndTime":72012.0,"Column":5}]},{"StartTime":72127.0,"Objects":[{"StartTime":72127.0,"EndTime":72127.0,"Column":3}]},{"StartTime":72243.0,"Objects":[{"StartTime":72243.0,"EndTime":72473.0,"Column":6}]},{"StartTime":72589.0,"Objects":[{"StartTime":72589.0,"EndTime":72704.0,"Column":3},{"StartTime":72589.0,"EndTime":72704.0,"Column":0},{"StartTime":72589.0,"EndTime":72704.0,"Column":1}]},{"StartTime":72820.0,"Objects":[{"StartTime":72820.0,"EndTime":72935.0,"Column":4}]},{"StartTime":73051.0,"Objects":[{"StartTime":73051.0,"EndTime":73281.0,"Column":0}]},{"StartTime":73397.0,"Objects":[{"StartTime":73397.0,"EndTime":73627.0,"Column":1}]},{"StartTime":73743.0,"Objects":[{"StartTime":73743.0,"EndTime":73858.0,"Column":2}]},{"StartTime":73974.0,"Objects":[{"StartTime":73974.0,"EndTime":73974.0,"Column":4},{"StartTime":73974.0,"EndTime":73974.0,"Column":0}]},{"StartTime":74089.0,"Objects":[{"StartTime":74089.0,"EndTime":74319.0,"Column":2},{"StartTime":74089.0,"EndTime":74319.0,"Column":1}]},{"StartTime":74435.0,"Objects":[{"StartTime":74435.0,"EndTime":74550.0,"Column":0},{"StartTime":74435.0,"EndTime":74550.0,"Column":3}]},{"StartTime":74666.0,"Objects":[{"StartTime":74666.0,"EndTime":74839.0,"Column":6}]},{"StartTime":74897.0,"Objects":[{"StartTime":74897.0,"EndTime":75127.0,"Column":0},{"StartTime":74897.0,"EndTime":75127.0,"Column":2},{"StartTime":74897.0,"EndTime":75127.0,"Column":1}]},{"StartTime":75243.0,"Objects":[{"StartTime":75243.0,"EndTime":75473.0,"Column":5}]},{"StartTime":75589.0,"Objects":[{"StartTime":75589.0,"EndTime":75704.0,"Column":6},{"StartTime":75589.0,"EndTime":75704.0,"Column":3}]},{"StartTime":75820.0,"Objects":[{"StartTime":75820.0,"EndTime":75820.0,"Column":2}]},{"StartTime":75935.0,"Objects":[{"StartTime":75935.0,"EndTime":76165.0,"Column":0},{"StartTime":75935.0,"EndTime":76165.0,"Column":6}]},{"StartTime":76281.0,"Objects":[{"StartTime":76281.0,"EndTime":76396.0,"Column":1}]},{"StartTime":76512.0,"Objects":[{"StartTime":76512.0,"EndTime":76627.0,"Column":0},{"StartTime":76512.0,"EndTime":76627.0,"Column":3}]},{"StartTime":76743.0,"Objects":[{"StartTime":76743.0,"EndTime":76973.0,"Column":1},{"StartTime":76743.0,"EndTime":76973.0,"Column":6}]},{"StartTime":77089.0,"Objects":[{"StartTime":77089.0,"EndTime":77319.0,"Column":4},{"StartTime":77089.0,"EndTime":77319.0,"Column":2}]},{"StartTime":77435.0,"Objects":[{"StartTime":77435.0,"EndTime":77550.0,"Column":5},{"StartTime":77435.0,"EndTime":77550.0,"Column":3}]},{"StartTime":77666.0,"Objects":[{"StartTime":77666.0,"EndTime":77666.0,"Column":6}]},{"StartTime":77781.0,"Objects":[{"StartTime":77781.0,"EndTime":77781.0,"Column":0},{"StartTime":77781.0,"EndTime":77781.0,"Column":1},{"StartTime":77781.0,"EndTime":77781.0,"Column":2}]},{"StartTime":77897.0,"Objects":[{"StartTime":77897.0,"EndTime":77897.0,"Column":6},{"StartTime":77897.0,"EndTime":77897.0,"Column":3},{"StartTime":77897.0,"EndTime":77897.0,"Column":4}]},{"StartTime":78012.0,"Objects":[{"StartTime":78012.0,"EndTime":78012.0,"Column":0},{"StartTime":78012.0,"EndTime":78012.0,"Column":1}]},{"StartTime":78127.0,"Objects":[{"StartTime":78127.0,"EndTime":78300.0,"Column":6}]},{"StartTime":78358.0,"Objects":[{"StartTime":78358.0,"EndTime":78531.0,"Column":3},{"StartTime":78358.0,"EndTime":78531.0,"Column":0}]},{"StartTime":78589.0,"Objects":[{"StartTime":78589.0,"EndTime":78819.0,"Column":5},{"StartTime":78589.0,"EndTime":78819.0,"Column":4}]},{"StartTime":78935.0,"Objects":[{"StartTime":78935.0,"EndTime":79165.0,"Column":1},{"StartTime":78935.0,"EndTime":79165.0,"Column":3}]},{"StartTime":79281.0,"Objects":[{"StartTime":79281.0,"EndTime":79396.0,"Column":4}]},{"StartTime":79512.0,"Objects":[{"StartTime":79512.0,"EndTime":79512.0,"Column":6},{"StartTime":79512.0,"EndTime":79512.0,"Column":3}]},{"StartTime":79627.0,"Objects":[{"StartTime":79627.0,"EndTime":79857.0,"Column":0}]},{"StartTime":79974.0,"Objects":[{"StartTime":79974.0,"EndTime":80089.0,"Column":5}]},{"StartTime":80204.0,"Objects":[{"StartTime":80204.0,"EndTime":80319.0,"Column":1}]},{"StartTime":80435.0,"Objects":[{"StartTime":80435.0,"EndTime":80665.0,"Column":0}]},{"StartTime":80781.0,"Objects":[{"StartTime":80781.0,"EndTime":81011.0,"Column":5}]},{"StartTime":81127.0,"Objects":[{"StartTime":81127.0,"EndTime":81242.0,"Column":2}]},{"StartTime":81358.0,"Objects":[{"StartTime":81358.0,"EndTime":81358.0,"Column":6}]},{"StartTime":81474.0,"Objects":[{"StartTime":81474.0,"EndTime":81704.0,"Column":2}]},{"StartTime":81820.0,"Objects":[{"StartTime":81820.0,"EndTime":81935.0,"Column":6},{"StartTime":81820.0,"EndTime":81935.0,"Column":1}]},{"StartTime":82051.0,"Objects":[{"StartTime":82051.0,"EndTime":82224.0,"Column":4}]},{"StartTime":82281.0,"Objects":[{"StartTime":82281.0,"EndTime":82511.0,"Column":0}]},{"StartTime":82627.0,"Objects":[{"StartTime":82627.0,"EndTime":82857.0,"Column":2}]},{"StartTime":82974.0,"Objects":[{"StartTime":82974.0,"EndTime":83089.0,"Column":4}]},{"StartTime":83204.0,"Objects":[{"StartTime":83204.0,"EndTime":83204.0,"Column":6}]},{"StartTime":83320.0,"Objects":[{"StartTime":83320.0,"EndTime":83550.0,"Column":3},{"StartTime":83320.0,"EndTime":83550.0,"Column":2}]},{"StartTime":83666.0,"Objects":[{"StartTime":83666.0,"EndTime":83781.0,"Column":1},{"StartTime":83666.0,"EndTime":83781.0,"Column":4}]},{"StartTime":83897.0,"Objects":[{"StartTime":83897.0,"EndTime":84012.0,"Column":5}]},{"StartTime":84127.0,"Objects":[{"StartTime":84127.0,"EndTime":84357.0,"Column":4},{"StartTime":84127.0,"EndTime":84357.0,"Column":3}]},{"StartTime":84474.0,"Objects":[{"StartTime":84474.0,"EndTime":84704.0,"Column":0},{"StartTime":84474.0,"EndTime":84704.0,"Column":6}]},{"StartTime":84820.0,"Objects":[{"StartTime":84820.0,"EndTime":84935.0,"Column":4}]},{"StartTime":85051.0,"Objects":[{"StartTime":85051.0,"EndTime":85166.0,"Column":5},{"StartTime":85051.0,"EndTime":85166.0,"Column":6}]},{"StartTime":85281.0,"Objects":[{"StartTime":85281.0,"EndTime":85396.0,"Column":2},{"StartTime":85281.0,"EndTime":85396.0,"Column":3}]},{"StartTime":85512.0,"Objects":[{"StartTime":85512.0,"EndTime":85685.0,"Column":4},{"StartTime":85512.0,"EndTime":85685.0,"Column":0}]},{"StartTime":85743.0,"Objects":[{"StartTime":85743.0,"EndTime":85858.0,"Column":6},{"StartTime":85743.0,"EndTime":85858.0,"Column":1}]},{"StartTime":85974.0,"Objects":[{"StartTime":85974.0,"EndTime":86089.0,"Column":5}]},{"StartTime":86204.0,"Objects":[{"StartTime":86204.0,"EndTime":86434.0,"Column":0}]},{"StartTime":86551.0,"Objects":[{"StartTime":86551.0,"EndTime":86551.0,"Column":6},{"StartTime":86551.0,"EndTime":86551.0,"Column":2}]},{"StartTime":86666.0,"Objects":[{"StartTime":86666.0,"EndTime":86781.0,"Column":3},{"StartTime":86666.0,"EndTime":86781.0,"Column":4}]},{"StartTime":86897.0,"Objects":[{"StartTime":86897.0,"EndTime":87127.0,"Column":0},{"StartTime":86897.0,"EndTime":87127.0,"Column":5}]},{"StartTime":87243.0,"Objects":[{"StartTime":87243.0,"EndTime":87243.0,"Column":3}]},{"StartTime":87358.0,"Objects":[{"StartTime":87358.0,"EndTime":87588.0,"Column":1}]},{"StartTime":87704.0,"Objects":[{"StartTime":87704.0,"EndTime":87704.0,"Column":2}]},{"StartTime":87820.0,"Objects":[{"StartTime":87820.0,"EndTime":87935.0,"Column":6}]},{"StartTime":88051.0,"Objects":[{"StartTime":88051.0,"EndTime":88166.0,"Column":2}]},{"StartTime":88281.0,"Objects":[{"StartTime":88281.0,"EndTime":88281.0,"Column":1},{"StartTime":88281.0,"EndTime":88281.0,"Column":3}]},{"StartTime":88339.0,"Objects":[{"StartTime":88339.0,"EndTime":88339.0,"Column":6}]},{"StartTime":88397.0,"Objects":[{"StartTime":88397.0,"EndTime":88397.0,"Column":2}]},{"StartTime":88454.0,"Objects":[{"StartTime":88454.0,"EndTime":88454.0,"Column":6}]},{"StartTime":88512.0,"Objects":[{"StartTime":88512.0,"EndTime":88512.0,"Column":2}]},{"StartTime":88570.0,"Objects":[{"StartTime":88570.0,"EndTime":88570.0,"Column":3}]},{"StartTime":88628.0,"Objects":[{"StartTime":88628.0,"EndTime":88628.0,"Column":4}]},{"StartTime":88686.0,"Objects":[{"StartTime":88686.0,"EndTime":88686.0,"Column":0}]},{"StartTime":88743.0,"Objects":[{"StartTime":88743.0,"EndTime":88973.0,"Column":4},{"StartTime":88743.0,"EndTime":88973.0,"Column":5}]},{"StartTime":89089.0,"Objects":[{"StartTime":89089.0,"EndTime":89089.0,"Column":3},{"StartTime":89089.0,"EndTime":89089.0,"Column":0}]},{"StartTime":89204.0,"Objects":[{"StartTime":89204.0,"EndTime":89434.0,"Column":6}]},{"StartTime":89551.0,"Objects":[{"StartTime":89551.0,"EndTime":89551.0,"Column":4},{"StartTime":89551.0,"EndTime":89551.0,"Column":2}]},{"StartTime":89666.0,"Objects":[{"StartTime":89666.0,"EndTime":89781.0,"Column":3}]},{"StartTime":89897.0,"Objects":[{"StartTime":89897.0,"EndTime":90070.0,"Column":5},{"StartTime":89897.0,"EndTime":90070.0,"Column":1}]},{"StartTime":90127.0,"Objects":[{"StartTime":90127.0,"EndTime":90242.0,"Column":2},{"StartTime":90127.0,"EndTime":90242.0,"Column":3},{"StartTime":90127.0,"EndTime":90242.0,"Column":6}]},{"StartTime":90358.0,"Objects":[{"StartTime":90358.0,"EndTime":90473.0,"Column":4},{"StartTime":90358.0,"EndTime":90473.0,"Column":1}]},{"StartTime":90589.0,"Objects":[{"StartTime":90589.0,"EndTime":90819.0,"Column":3}]},{"StartTime":90935.0,"Objects":[{"StartTime":90935.0,"EndTime":91165.0,"Column":6},{"StartTime":90935.0,"EndTime":91165.0,"Column":4},{"StartTime":90935.0,"EndTime":91165.0,"Column":5}]},{"StartTime":91281.0,"Objects":[{"StartTime":91281.0,"EndTime":91396.0,"Column":2},{"StartTime":91281.0,"EndTime":91396.0,"Column":1}]},{"StartTime":91512.0,"Objects":[{"StartTime":91512.0,"EndTime":91627.0,"Column":3}]},{"StartTime":91743.0,"Objects":[{"StartTime":91743.0,"EndTime":91858.0,"Column":6},{"StartTime":91743.0,"EndTime":91858.0,"Column":5}]},{"StartTime":91974.0,"Objects":[{"StartTime":91974.0,"EndTime":92089.0,"Column":4},{"StartTime":91974.0,"EndTime":92089.0,"Column":1},{"StartTime":91974.0,"EndTime":92089.0,"Column":2}]},{"StartTime":92204.0,"Objects":[{"StartTime":92204.0,"EndTime":92204.0,"Column":5}]},{"StartTime":92262.0,"Objects":[{"StartTime":92262.0,"EndTime":92262.0,"Column":4}]},{"StartTime":92320.0,"Objects":[{"StartTime":92320.0,"EndTime":92320.0,"Column":2}]},{"StartTime":92377.0,"Objects":[{"StartTime":92377.0,"EndTime":92377.0,"Column":4}]},{"StartTime":92435.0,"Objects":[{"StartTime":92435.0,"EndTime":92665.0,"Column":2}]},{"StartTime":92781.0,"Objects":[{"StartTime":92781.0,"EndTime":92781.0,"Column":5}]},{"StartTime":92897.0,"Objects":[{"StartTime":92897.0,"EndTime":93127.0,"Column":6},{"StartTime":92897.0,"EndTime":93127.0,"Column":2}]},{"StartTime":93243.0,"Objects":[{"StartTime":93243.0,"EndTime":93243.0,"Column":3}]},{"StartTime":93358.0,"Objects":[{"StartTime":93358.0,"EndTime":93473.0,"Column":0}]},{"StartTime":93589.0,"Objects":[{"StartTime":93589.0,"EndTime":93762.0,"Column":3},{"StartTime":93589.0,"EndTime":93762.0,"Column":6}]},{"StartTime":93820.0,"Objects":[{"StartTime":93820.0,"EndTime":93935.0,"Column":0}]},{"StartTime":94051.0,"Objects":[{"StartTime":94051.0,"EndTime":94166.0,"Column":1},{"StartTime":94051.0,"EndTime":94166.0,"Column":2}]},{"StartTime":94281.0,"Objects":[{"StartTime":94281.0,"EndTime":94511.0,"Column":6},{"StartTime":94281.0,"EndTime":94511.0,"Column":0}]},{"StartTime":94627.0,"Objects":[{"StartTime":94627.0,"EndTime":94627.0,"Column":2},{"StartTime":94627.0,"EndTime":94627.0,"Column":5}]},{"StartTime":94743.0,"Objects":[{"StartTime":94743.0,"EndTime":94973.0,"Column":6}]},{"StartTime":95089.0,"Objects":[{"StartTime":95089.0,"EndTime":95089.0,"Column":5}]},{"StartTime":95204.0,"Objects":[{"StartTime":95204.0,"EndTime":95377.0,"Column":2}]},{"StartTime":95435.0,"Objects":[{"StartTime":95435.0,"EndTime":95550.0,"Column":6},{"StartTime":95435.0,"EndTime":95550.0,"Column":5}]},{"StartTime":95666.0,"Objects":[{"StartTime":95666.0,"EndTime":95781.0,"Column":4},{"StartTime":95666.0,"EndTime":95781.0,"Column":2}]},{"StartTime":95897.0,"Objects":[{"StartTime":95897.0,"EndTime":96012.0,"Column":6},{"StartTime":95897.0,"EndTime":96012.0,"Column":1}]},{"StartTime":96127.0,"Objects":[{"StartTime":96127.0,"EndTime":96357.0,"Column":5},{"StartTime":96127.0,"EndTime":96357.0,"Column":4}]},{"StartTime":96474.0,"Objects":[{"StartTime":96474.0,"EndTime":96474.0,"Column":2},{"StartTime":96474.0,"EndTime":96474.0,"Column":6}]},{"StartTime":96589.0,"Objects":[{"StartTime":96589.0,"EndTime":96819.0,"Column":4},{"StartTime":96589.0,"EndTime":96819.0,"Column":3}]},{"StartTime":96935.0,"Objects":[{"StartTime":96935.0,"EndTime":96935.0,"Column":1},{"StartTime":96935.0,"EndTime":96935.0,"Column":6},{"StartTime":96935.0,"EndTime":96935.0,"Column":2}]},{"StartTime":97051.0,"Objects":[{"StartTime":97051.0,"EndTime":97281.0,"Column":4}]},{"StartTime":97397.0,"Objects":[{"StartTime":97397.0,"EndTime":97397.0,"Column":5},{"StartTime":97397.0,"EndTime":97397.0,"Column":0}]},{"StartTime":97512.0,"Objects":[{"StartTime":97512.0,"EndTime":97627.0,"Column":1}]},{"StartTime":97743.0,"Objects":[{"StartTime":97743.0,"EndTime":97858.0,"Column":3},{"StartTime":97743.0,"EndTime":97858.0,"Column":5}]},{"StartTime":97974.0,"Objects":[{"StartTime":97974.0,"EndTime":98204.0,"Column":6},{"StartTime":97974.0,"EndTime":98204.0,"Column":0}]},{"StartTime":98320.0,"Objects":[{"StartTime":98320.0,"EndTime":98320.0,"Column":2},{"StartTime":98320.0,"EndTime":98320.0,"Column":3}]},{"StartTime":98435.0,"Objects":[{"StartTime":98435.0,"EndTime":98665.0,"Column":0}]},{"StartTime":98781.0,"Objects":[{"StartTime":98781.0,"EndTime":98781.0,"Column":6},{"StartTime":98781.0,"EndTime":98781.0,"Column":4}]},{"StartTime":98897.0,"Objects":[{"StartTime":98897.0,"EndTime":99127.0,"Column":2},{"StartTime":98897.0,"EndTime":99127.0,"Column":0}]},{"StartTime":99243.0,"Objects":[{"StartTime":99243.0,"EndTime":99243.0,"Column":5}]},{"StartTime":99358.0,"Objects":[{"StartTime":99358.0,"EndTime":99473.0,"Column":3},{"StartTime":99358.0,"EndTime":99473.0,"Column":1},{"StartTime":99358.0,"EndTime":99473.0,"Column":6}]},{"StartTime":99589.0,"Objects":[{"StartTime":99589.0,"EndTime":99704.0,"Column":2},{"StartTime":99589.0,"EndTime":99704.0,"Column":5},{"StartTime":99589.0,"EndTime":99704.0,"Column":0}]},{"StartTime":99820.0,"Objects":[{"StartTime":99820.0,"EndTime":99820.0,"Column":4}]},{"StartTime":99935.0,"Objects":[{"StartTime":99935.0,"EndTime":99935.0,"Column":5}]},{"StartTime":100051.0,"Objects":[{"StartTime":100051.0,"EndTime":100051.0,"Column":6},{"StartTime":100051.0,"EndTime":100051.0,"Column":0}]},{"StartTime":100166.0,"Objects":[{"StartTime":100166.0,"EndTime":100166.0,"Column":4}]},{"StartTime":100281.0,"Objects":[{"StartTime":100281.0,"EndTime":100281.0,"Column":3}]},{"StartTime":100397.0,"Objects":[{"StartTime":100397.0,"EndTime":100397.0,"Column":2}]},{"StartTime":100512.0,"Objects":[{"StartTime":100512.0,"EndTime":100512.0,"Column":1},{"StartTime":100512.0,"EndTime":100512.0,"Column":3}]},{"StartTime":100628.0,"Objects":[{"StartTime":100628.0,"EndTime":100628.0,"Column":2}]},{"StartTime":100743.0,"Objects":[{"StartTime":100743.0,"EndTime":100858.0,"Column":5},{"StartTime":100743.0,"EndTime":100858.0,"Column":1}]},{"StartTime":100974.0,"Objects":[{"StartTime":100974.0,"EndTime":101089.0,"Column":6},{"StartTime":100974.0,"EndTime":101089.0,"Column":0}]},{"StartTime":101204.0,"Objects":[{"StartTime":101204.0,"EndTime":101319.0,"Column":4}]},{"StartTime":101435.0,"Objects":[{"StartTime":101435.0,"EndTime":101550.0,"Column":2},{"StartTime":101435.0,"EndTime":101550.0,"Column":3}]},{"StartTime":101666.0,"Objects":[{"StartTime":101666.0,"EndTime":101781.0,"Column":4},{"StartTime":101666.0,"EndTime":101781.0,"Column":1}]},{"StartTime":101897.0,"Objects":[{"StartTime":101897.0,"EndTime":102012.0,"Column":3},{"StartTime":101897.0,"EndTime":102012.0,"Column":2}]},{"StartTime":102127.0,"Objects":[{"StartTime":102127.0,"EndTime":102127.0,"Column":4},{"StartTime":102127.0,"EndTime":102127.0,"Column":6}]},{"StartTime":102243.0,"Objects":[{"StartTime":102243.0,"EndTime":102243.0,"Column":2}]},{"StartTime":102300.0,"Objects":[{"StartTime":102300.0,"EndTime":102300.0,"Column":4}]},{"StartTime":102358.0,"Objects":[{"StartTime":102358.0,"EndTime":102358.0,"Column":6}]},{"StartTime":102416.0,"Objects":[{"StartTime":102416.0,"EndTime":102416.0,"Column":4}]},{"StartTime":102474.0,"Objects":[{"StartTime":102474.0,"EndTime":102474.0,"Column":6}]},{"StartTime":102531.0,"Objects":[{"StartTime":102531.0,"EndTime":102531.0,"Column":4}]},{"StartTime":102589.0,"Objects":[{"StartTime":102589.0,"EndTime":102589.0,"Column":0}]},{"StartTime":102646.0,"Objects":[{"StartTime":102646.0,"EndTime":102646.0,"Column":4}]},{"StartTime":102704.0,"Objects":[{"StartTime":102704.0,"EndTime":102704.0,"Column":5}]},{"StartTime":102762.0,"Objects":[{"StartTime":102762.0,"EndTime":102762.0,"Column":6}]},{"StartTime":102819.0,"Objects":[{"StartTime":102819.0,"EndTime":102819.0,"Column":1}]},{"StartTime":102935.0,"Objects":[{"StartTime":102935.0,"EndTime":102935.0,"Column":3}]},{"StartTime":103051.0,"Objects":[{"StartTime":103051.0,"EndTime":103051.0,"Column":5}]},{"StartTime":103108.0,"Objects":[{"StartTime":103108.0,"EndTime":103108.0,"Column":3}]},{"StartTime":103166.0,"Objects":[{"StartTime":103166.0,"EndTime":103166.0,"Column":6}]},{"StartTime":103224.0,"Objects":[{"StartTime":103224.0,"EndTime":103224.0,"Column":3}]},{"StartTime":103281.0,"Objects":[{"StartTime":103281.0,"EndTime":103281.0,"Column":0}]},{"StartTime":103339.0,"Objects":[{"StartTime":103339.0,"EndTime":103339.0,"Column":4}]},{"StartTime":103397.0,"Objects":[{"StartTime":103397.0,"EndTime":103397.0,"Column":3}]},{"StartTime":103454.0,"Objects":[{"StartTime":103454.0,"EndTime":103454.0,"Column":5}]},{"StartTime":103512.0,"Objects":[{"StartTime":103512.0,"EndTime":103742.0,"Column":1},{"StartTime":103512.0,"EndTime":103742.0,"Column":2}]},{"StartTime":103858.0,"Objects":[{"StartTime":103858.0,"EndTime":103858.0,"Column":6}]},{"StartTime":103974.0,"Objects":[{"StartTime":103974.0,"EndTime":104204.0,"Column":0},{"StartTime":103974.0,"EndTime":104204.0,"Column":2},{"StartTime":103974.0,"EndTime":104204.0,"Column":5}]},{"StartTime":104320.0,"Objects":[{"StartTime":104320.0,"EndTime":104320.0,"Column":3},{"StartTime":104320.0,"EndTime":104320.0,"Column":1},{"StartTime":104320.0,"EndTime":104320.0,"Column":4}]},{"StartTime":104435.0,"Objects":[{"StartTime":104435.0,"EndTime":104550.0,"Column":0}]},{"StartTime":104666.0,"Objects":[{"StartTime":104666.0,"EndTime":104896.0,"Column":5}]},{"StartTime":105012.0,"Objects":[{"StartTime":105012.0,"EndTime":105012.0,"Column":1},{"StartTime":105012.0,"EndTime":105012.0,"Column":4}]},{"StartTime":105127.0,"Objects":[{"StartTime":105127.0,"EndTime":105127.0,"Column":2},{"StartTime":105127.0,"EndTime":105127.0,"Column":3}]},{"StartTime":105243.0,"Objects":[{"StartTime":105243.0,"EndTime":105243.0,"Column":4},{"StartTime":105243.0,"EndTime":105243.0,"Column":5}]},{"StartTime":105301.0,"Objects":[{"StartTime":105301.0,"EndTime":105301.0,"Column":2}]},{"StartTime":105358.0,"Objects":[{"StartTime":105358.0,"EndTime":105588.0,"Column":5}]},{"StartTime":105704.0,"Objects":[{"StartTime":105704.0,"EndTime":105704.0,"Column":0}]},{"StartTime":105820.0,"Objects":[{"StartTime":105820.0,"EndTime":105935.0,"Column":2},{"StartTime":105820.0,"EndTime":105935.0,"Column":6}]},{"StartTime":106051.0,"Objects":[{"StartTime":106051.0,"EndTime":106166.0,"Column":0},{"StartTime":106051.0,"EndTime":106166.0,"Column":1},{"StartTime":106051.0,"EndTime":106166.0,"Column":5}]},{"StartTime":106281.0,"Objects":[{"StartTime":106281.0,"EndTime":106396.0,"Column":6},{"StartTime":106281.0,"EndTime":106396.0,"Column":3}]},{"StartTime":106512.0,"Objects":[{"StartTime":106512.0,"EndTime":106627.0,"Column":4}]},{"StartTime":106743.0,"Objects":[{"StartTime":106743.0,"EndTime":106916.0,"Column":6}]},{"StartTime":106974.0,"Objects":[{"StartTime":106974.0,"EndTime":107089.0,"Column":2},{"StartTime":106974.0,"EndTime":107089.0,"Column":3}]},{"StartTime":107204.0,"Objects":[{"StartTime":107204.0,"EndTime":107434.0,"Column":0},{"StartTime":107204.0,"EndTime":107434.0,"Column":1}]},{"StartTime":107551.0,"Objects":[{"StartTime":107551.0,"EndTime":107551.0,"Column":2}]},{"StartTime":107666.0,"Objects":[{"StartTime":107666.0,"EndTime":107896.0,"Column":3}]},{"StartTime":108012.0,"Objects":[{"StartTime":108012.0,"EndTime":108012.0,"Column":4},{"StartTime":108012.0,"EndTime":108012.0,"Column":0}]},{"StartTime":108127.0,"Objects":[{"StartTime":108127.0,"EndTime":108242.0,"Column":6},{"StartTime":108127.0,"EndTime":108242.0,"Column":5}]},{"StartTime":108358.0,"Objects":[{"StartTime":108358.0,"EndTime":108588.0,"Column":2}]},{"StartTime":108704.0,"Objects":[{"StartTime":108704.0,"EndTime":108704.0,"Column":5},{"StartTime":108704.0,"EndTime":108704.0,"Column":0}]},{"StartTime":108820.0,"Objects":[{"StartTime":108820.0,"EndTime":108820.0,"Column":6},{"StartTime":108820.0,"EndTime":108820.0,"Column":1}]},{"StartTime":108935.0,"Objects":[{"StartTime":108935.0,"EndTime":108935.0,"Column":4},{"StartTime":108935.0,"EndTime":108935.0,"Column":0}]},{"StartTime":108993.0,"Objects":[{"StartTime":108993.0,"EndTime":108993.0,"Column":2}]},{"StartTime":109051.0,"Objects":[{"StartTime":109051.0,"EndTime":109281.0,"Column":6}]},{"StartTime":109397.0,"Objects":[{"StartTime":109397.0,"EndTime":109397.0,"Column":5},{"StartTime":109397.0,"EndTime":109397.0,"Column":4}]},{"StartTime":109512.0,"Objects":[{"StartTime":109512.0,"EndTime":109627.0,"Column":2}]},{"StartTime":109743.0,"Objects":[{"StartTime":109743.0,"EndTime":109858.0,"Column":3}]},{"StartTime":109974.0,"Objects":[{"StartTime":109974.0,"EndTime":110089.0,"Column":4},{"StartTime":109974.0,"EndTime":110089.0,"Column":5}]},{"StartTime":110204.0,"Objects":[{"StartTime":110204.0,"EndTime":110319.0,"Column":6},{"StartTime":110204.0,"EndTime":110319.0,"Column":0}]},{"StartTime":110435.0,"Objects":[{"StartTime":110435.0,"EndTime":110608.0,"Column":1},{"StartTime":110435.0,"EndTime":110608.0,"Column":2}]},{"StartTime":110666.0,"Objects":[{"StartTime":110666.0,"EndTime":110781.0,"Column":4}]},{"StartTime":110897.0,"Objects":[{"StartTime":110897.0,"EndTime":111127.0,"Column":2}]},{"StartTime":111243.0,"Objects":[{"StartTime":111243.0,"EndTime":111243.0,"Column":6},{"StartTime":111243.0,"EndTime":111243.0,"Column":3}]},{"StartTime":111358.0,"Objects":[{"StartTime":111358.0,"EndTime":111588.0,"Column":4}]},{"StartTime":111704.0,"Objects":[{"StartTime":111704.0,"EndTime":111704.0,"Column":1},{"StartTime":111704.0,"EndTime":111704.0,"Column":2},{"StartTime":111704.0,"EndTime":111704.0,"Column":5}]},{"StartTime":111820.0,"Objects":[{"StartTime":111820.0,"EndTime":111935.0,"Column":0}]},{"StartTime":112051.0,"Objects":[{"StartTime":112051.0,"EndTime":112281.0,"Column":5},{"StartTime":112051.0,"EndTime":112281.0,"Column":1}]},{"StartTime":112397.0,"Objects":[{"StartTime":112397.0,"EndTime":112397.0,"Column":6}]},{"StartTime":112512.0,"Objects":[{"StartTime":112512.0,"EndTime":112512.0,"Column":5},{"StartTime":112512.0,"EndTime":112512.0,"Column":0}]},{"StartTime":112627.0,"Objects":[{"StartTime":112627.0,"EndTime":112627.0,"Column":3},{"StartTime":112627.0,"EndTime":112627.0,"Column":6},{"StartTime":112627.0,"EndTime":112627.0,"Column":1}]},{"StartTime":112685.0,"Objects":[{"StartTime":112685.0,"EndTime":112685.0,"Column":2}]},{"StartTime":112743.0,"Objects":[{"StartTime":112743.0,"EndTime":112973.0,"Column":0}]},{"StartTime":113089.0,"Objects":[{"StartTime":113089.0,"EndTime":113089.0,"Column":4}]},{"StartTime":113204.0,"Objects":[{"StartTime":113204.0,"EndTime":113434.0,"Column":5}]},{"StartTime":113551.0,"Objects":[{"StartTime":113551.0,"EndTime":113551.0,"Column":4}]},{"StartTime":113666.0,"Objects":[{"StartTime":113666.0,"EndTime":113896.0,"Column":1},{"StartTime":113666.0,"EndTime":113896.0,"Column":0}]},{"StartTime":114012.0,"Objects":[{"StartTime":114012.0,"EndTime":114012.0,"Column":2},{"StartTime":114012.0,"EndTime":114012.0,"Column":6},{"StartTime":114012.0,"EndTime":114012.0,"Column":5}]},{"StartTime":114127.0,"Objects":[{"StartTime":114127.0,"EndTime":114300.0,"Column":3},{"StartTime":114127.0,"EndTime":114300.0,"Column":0}]},{"StartTime":114358.0,"Objects":[{"StartTime":114358.0,"EndTime":114473.0,"Column":2},{"StartTime":114358.0,"EndTime":114473.0,"Column":1},{"StartTime":114358.0,"EndTime":114473.0,"Column":4}]},{"StartTime":114589.0,"Objects":[{"StartTime":114589.0,"EndTime":115281.0,"Column":6}]},{"StartTime":115512.0,"Objects":[{"StartTime":115512.0,"EndTime":115512.0,"Column":3},{"StartTime":115512.0,"EndTime":115512.0,"Column":6}]},{"StartTime":116435.0,"Objects":[{"StartTime":116435.0,"EndTime":117127.0,"Column":2}]},{"StartTime":117358.0,"Objects":[{"StartTime":117358.0,"EndTime":117358.0,"Column":2}]},{"StartTime":117589.0,"Objects":[{"StartTime":117589.0,"EndTime":117589.0,"Column":3},{"StartTime":117589.0,"EndTime":117589.0,"Column":4}]},{"StartTime":117820.0,"Objects":[{"StartTime":117820.0,"EndTime":117820.0,"Column":5}]},{"StartTime":118051.0,"Objects":[{"StartTime":118051.0,"EndTime":118166.0,"Column":0}]},{"StartTime":118281.0,"Objects":[{"StartTime":118281.0,"EndTime":118396.0,"Column":3}]},{"StartTime":118512.0,"Objects":[{"StartTime":118512.0,"EndTime":118627.0,"Column":0}]},{"StartTime":118743.0,"Objects":[{"StartTime":118743.0,"EndTime":118743.0,"Column":1},{"StartTime":118743.0,"EndTime":118743.0,"Column":2}]},{"StartTime":118858.0,"Objects":[{"StartTime":118858.0,"EndTime":119088.0,"Column":4},{"StartTime":118858.0,"EndTime":119088.0,"Column":0}]},{"StartTime":119204.0,"Objects":[{"StartTime":119204.0,"EndTime":119204.0,"Column":1}]},{"StartTime":119262.0,"Objects":[{"StartTime":119262.0,"EndTime":119262.0,"Column":6}]},{"StartTime":119319.0,"Objects":[{"StartTime":119319.0,"EndTime":119319.0,"Column":2}]},{"StartTime":119377.0,"Objects":[{"StartTime":119377.0,"EndTime":119377.0,"Column":1}]},{"StartTime":119434.0,"Objects":[{"StartTime":119434.0,"EndTime":119434.0,"Column":2}]},{"StartTime":119493.0,"Objects":[{"StartTime":119493.0,"EndTime":119493.0,"Column":1}]},{"StartTime":119551.0,"Objects":[{"StartTime":119551.0,"EndTime":119551.0,"Column":3}]},{"StartTime":119608.0,"Objects":[{"StartTime":119608.0,"EndTime":119608.0,"Column":1}]},{"StartTime":119666.0,"Objects":[{"StartTime":119666.0,"EndTime":119666.0,"Column":0}]},{"StartTime":119723.0,"Objects":[{"StartTime":119723.0,"EndTime":119723.0,"Column":2}]},{"StartTime":119781.0,"Objects":[{"StartTime":119781.0,"EndTime":119781.0,"Column":3}]},{"StartTime":119839.0,"Objects":[{"StartTime":119839.0,"EndTime":119839.0,"Column":4}]},{"StartTime":119897.0,"Objects":[{"StartTime":119897.0,"EndTime":119897.0,"Column":5}]},{"StartTime":119954.0,"Objects":[{"StartTime":119954.0,"EndTime":119954.0,"Column":4}]},{"StartTime":120012.0,"Objects":[{"StartTime":120012.0,"EndTime":120012.0,"Column":5}]},{"StartTime":120070.0,"Objects":[{"StartTime":120070.0,"EndTime":120070.0,"Column":6}]},{"StartTime":120127.0,"Objects":[{"StartTime":120127.0,"EndTime":120357.0,"Column":0}]},{"StartTime":120474.0,"Objects":[{"StartTime":120474.0,"EndTime":120704.0,"Column":4}]},{"StartTime":120820.0,"Objects":[{"StartTime":120820.0,"EndTime":120935.0,"Column":5},{"StartTime":120820.0,"EndTime":120935.0,"Column":2},{"StartTime":120820.0,"EndTime":120935.0,"Column":3}]},{"StartTime":121051.0,"Objects":[{"StartTime":121051.0,"EndTime":121051.0,"Column":1}]},{"StartTime":121166.0,"Objects":[{"StartTime":121166.0,"EndTime":121396.0,"Column":3}]},{"StartTime":121512.0,"Objects":[{"StartTime":121512.0,"EndTime":121627.0,"Column":0},{"StartTime":121512.0,"EndTime":121627.0,"Column":2},{"StartTime":121512.0,"EndTime":121627.0,"Column":1}]},{"StartTime":121743.0,"Objects":[{"StartTime":121743.0,"EndTime":121858.0,"Column":6}]},{"StartTime":121974.0,"Objects":[{"StartTime":121974.0,"EndTime":122204.0,"Column":2}]},{"StartTime":122320.0,"Objects":[{"StartTime":122320.0,"EndTime":122550.0,"Column":0}]},{"StartTime":122666.0,"Objects":[{"StartTime":122666.0,"EndTime":122781.0,"Column":4},{"StartTime":122666.0,"EndTime":122781.0,"Column":5}]},{"StartTime":122897.0,"Objects":[{"StartTime":122897.0,"EndTime":122897.0,"Column":1}]},{"StartTime":123012.0,"Objects":[{"StartTime":123012.0,"EndTime":123242.0,"Column":3}]},{"StartTime":123358.0,"Objects":[{"StartTime":123358.0,"EndTime":123473.0,"Column":6},{"StartTime":123358.0,"EndTime":123473.0,"Column":4}]},{"StartTime":123589.0,"Objects":[{"StartTime":123589.0,"EndTime":123704.0,"Column":3},{"StartTime":123589.0,"EndTime":123704.0,"Column":5}]},{"StartTime":123820.0,"Objects":[{"StartTime":123820.0,"EndTime":124050.0,"Column":4},{"StartTime":123820.0,"EndTime":124050.0,"Column":0}]},{"StartTime":124166.0,"Objects":[{"StartTime":124166.0,"EndTime":124396.0,"Column":3}]},{"StartTime":124512.0,"Objects":[{"StartTime":124512.0,"EndTime":124627.0,"Column":0},{"StartTime":124512.0,"EndTime":124627.0,"Column":6},{"StartTime":124512.0,"EndTime":124627.0,"Column":5}]},{"StartTime":124743.0,"Objects":[{"StartTime":124743.0,"EndTime":124743.0,"Column":2},{"StartTime":124743.0,"EndTime":124743.0,"Column":4}]},{"StartTime":124858.0,"Objects":[{"StartTime":124858.0,"EndTime":125088.0,"Column":1}]},{"StartTime":125204.0,"Objects":[{"StartTime":125204.0,"EndTime":125319.0,"Column":5}]},{"StartTime":125435.0,"Objects":[{"StartTime":125435.0,"EndTime":125550.0,"Column":2},{"StartTime":125435.0,"EndTime":125550.0,"Column":0},{"StartTime":125435.0,"EndTime":125550.0,"Column":6}]},{"StartTime":125666.0,"Objects":[{"StartTime":125666.0,"EndTime":125666.0,"Column":1},{"StartTime":125666.0,"EndTime":125666.0,"Column":3}]},{"StartTime":125781.0,"Objects":[{"StartTime":125781.0,"EndTime":125781.0,"Column":0},{"StartTime":125781.0,"EndTime":125781.0,"Column":2}]},{"StartTime":125897.0,"Objects":[{"StartTime":125897.0,"EndTime":125897.0,"Column":3},{"StartTime":125897.0,"EndTime":125897.0,"Column":4},{"StartTime":125897.0,"EndTime":125897.0,"Column":5}]},{"StartTime":126012.0,"Objects":[{"StartTime":126012.0,"EndTime":126012.0,"Column":0},{"StartTime":126012.0,"EndTime":126012.0,"Column":1}]},{"StartTime":126127.0,"Objects":[{"StartTime":126127.0,"EndTime":126357.0,"Column":4}]},{"StartTime":126474.0,"Objects":[{"StartTime":126474.0,"EndTime":126474.0,"Column":5},{"StartTime":126474.0,"EndTime":126474.0,"Column":3}]},{"StartTime":126589.0,"Objects":[{"StartTime":126589.0,"EndTime":126762.0,"Column":2},{"StartTime":126589.0,"EndTime":126762.0,"Column":0}]},{"StartTime":126820.0,"Objects":[{"StartTime":126820.0,"EndTime":127050.0,"Column":6}]},{"StartTime":127166.0,"Objects":[{"StartTime":127166.0,"EndTime":127166.0,"Column":5},{"StartTime":127166.0,"EndTime":127166.0,"Column":4},{"StartTime":127166.0,"EndTime":127166.0,"Column":1}]},{"StartTime":127281.0,"Objects":[{"StartTime":127281.0,"EndTime":127281.0,"Column":3},{"StartTime":127281.0,"EndTime":127281.0,"Column":6},{"StartTime":127281.0,"EndTime":127281.0,"Column":0}]},{"StartTime":127397.0,"Objects":[{"StartTime":127397.0,"EndTime":127397.0,"Column":2},{"StartTime":127397.0,"EndTime":127397.0,"Column":4}]},{"StartTime":127454.0,"Objects":[{"StartTime":127454.0,"EndTime":127454.0,"Column":3}]},{"StartTime":127512.0,"Objects":[{"StartTime":127512.0,"EndTime":127742.0,"Column":6},{"StartTime":127512.0,"EndTime":127742.0,"Column":0}]},{"StartTime":127858.0,"Objects":[{"StartTime":127858.0,"EndTime":128088.0,"Column":2},{"StartTime":127858.0,"EndTime":128088.0,"Column":5},{"StartTime":127858.0,"EndTime":128088.0,"Column":4}]},{"StartTime":128204.0,"Objects":[{"StartTime":128204.0,"EndTime":128319.0,"Column":1},{"StartTime":128204.0,"EndTime":128319.0,"Column":0}]},{"StartTime":128435.0,"Objects":[{"StartTime":128435.0,"EndTime":128435.0,"Column":6},{"StartTime":128435.0,"EndTime":128435.0,"Column":2},{"StartTime":128435.0,"EndTime":128435.0,"Column":5}]},{"StartTime":128551.0,"Objects":[{"StartTime":128551.0,"EndTime":128781.0,"Column":3}]},{"StartTime":128897.0,"Objects":[{"StartTime":128897.0,"EndTime":129012.0,"Column":0}]},{"StartTime":129127.0,"Objects":[{"StartTime":129127.0,"EndTime":129242.0,"Column":1},{"StartTime":129127.0,"EndTime":129242.0,"Column":6}]},{"StartTime":129358.0,"Objects":[{"StartTime":129358.0,"EndTime":129588.0,"Column":5},{"StartTime":129358.0,"EndTime":129588.0,"Column":4}]},{"StartTime":129704.0,"Objects":[{"StartTime":129704.0,"EndTime":129934.0,"Column":0}]},{"StartTime":130051.0,"Objects":[{"StartTime":130051.0,"EndTime":130166.0,"Column":3},{"StartTime":130051.0,"EndTime":130166.0,"Column":4}]},{"StartTime":130281.0,"Objects":[{"StartTime":130281.0,"EndTime":130281.0,"Column":2},{"StartTime":130281.0,"EndTime":130281.0,"Column":6},{"StartTime":130281.0,"EndTime":130281.0,"Column":0}]},{"StartTime":130397.0,"Objects":[{"StartTime":130397.0,"EndTime":130627.0,"Column":1}]},{"StartTime":130743.0,"Objects":[{"StartTime":130743.0,"EndTime":130858.0,"Column":4}]},{"StartTime":130974.0,"Objects":[{"StartTime":130974.0,"EndTime":131089.0,"Column":0},{"StartTime":130974.0,"EndTime":131089.0,"Column":2},{"StartTime":130974.0,"EndTime":131089.0,"Column":6}]},{"StartTime":131204.0,"Objects":[{"StartTime":131204.0,"EndTime":131434.0,"Column":4},{"StartTime":131204.0,"EndTime":131434.0,"Column":5}]},{"StartTime":131551.0,"Objects":[{"StartTime":131551.0,"EndTime":131781.0,"Column":3},{"StartTime":131551.0,"EndTime":131781.0,"Column":1}]},{"StartTime":131897.0,"Objects":[{"StartTime":131897.0,"EndTime":132012.0,"Column":0}]},{"StartTime":132127.0,"Objects":[{"StartTime":132127.0,"EndTime":132127.0,"Column":3}]},{"StartTime":132243.0,"Objects":[{"StartTime":132243.0,"EndTime":132473.0,"Column":5}]},{"StartTime":132589.0,"Objects":[{"StartTime":132589.0,"EndTime":132704.0,"Column":1}]},{"StartTime":132820.0,"Objects":[{"StartTime":132820.0,"EndTime":132935.0,"Column":5},{"StartTime":132820.0,"EndTime":132935.0,"Column":4}]},{"StartTime":133051.0,"Objects":[{"StartTime":133051.0,"EndTime":133051.0,"Column":6}]},{"StartTime":133108.0,"Objects":[{"StartTime":133108.0,"EndTime":133108.0,"Column":4}]},{"StartTime":133166.0,"Objects":[{"StartTime":133166.0,"EndTime":133166.0,"Column":5}]},{"StartTime":133224.0,"Objects":[{"StartTime":133224.0,"EndTime":133224.0,"Column":4}]},{"StartTime":133281.0,"Objects":[{"StartTime":133281.0,"EndTime":133281.0,"Column":3}]},{"StartTime":133339.0,"Objects":[{"StartTime":133339.0,"EndTime":133339.0,"Column":5}]},{"StartTime":133397.0,"Objects":[{"StartTime":133397.0,"EndTime":133397.0,"Column":2}]},{"StartTime":133454.0,"Objects":[{"StartTime":133454.0,"EndTime":133454.0,"Column":5}]},{"StartTime":133512.0,"Objects":[{"StartTime":133512.0,"EndTime":133512.0,"Column":3}]},{"StartTime":133743.0,"Objects":[{"StartTime":133743.0,"EndTime":133743.0,"Column":5},{"StartTime":133743.0,"EndTime":133743.0,"Column":6},{"StartTime":133743.0,"EndTime":133743.0,"Column":0}]},{"StartTime":133858.0,"Objects":[{"StartTime":133858.0,"EndTime":133858.0,"Column":1},{"StartTime":133858.0,"EndTime":133858.0,"Column":2}]},{"StartTime":133973.0,"Objects":[{"StartTime":133973.0,"EndTime":133973.0,"Column":6},{"StartTime":133973.0,"EndTime":133973.0,"Column":3},{"StartTime":133973.0,"EndTime":133973.0,"Column":5}]},{"StartTime":134031.0,"Objects":[{"StartTime":134031.0,"EndTime":134031.0,"Column":2}]},{"StartTime":134088.0,"Objects":[{"StartTime":134088.0,"EndTime":134088.0,"Column":6}]},{"StartTime":134146.0,"Objects":[{"StartTime":134146.0,"EndTime":134146.0,"Column":2}]},{"StartTime":134204.0,"Objects":[{"StartTime":134204.0,"EndTime":134550.0,"Column":4}]},{"StartTime":134666.0,"Objects":[{"StartTime":134666.0,"EndTime":134781.0,"Column":3}]},{"StartTime":134897.0,"Objects":[{"StartTime":134897.0,"EndTime":135012.0,"Column":5}]},{"StartTime":135127.0,"Objects":[{"StartTime":135127.0,"EndTime":135242.0,"Column":1}]},{"StartTime":135358.0,"Objects":[{"StartTime":135358.0,"EndTime":135588.0,"Column":5},{"StartTime":135358.0,"EndTime":135588.0,"Column":2}]},{"StartTime":135704.0,"Objects":[{"StartTime":135704.0,"EndTime":135819.0,"Column":3}]},{"StartTime":135935.0,"Objects":[{"StartTime":135935.0,"EndTime":136050.0,"Column":2}]},{"StartTime":136166.0,"Objects":[{"StartTime":136166.0,"EndTime":136281.0,"Column":6},{"StartTime":136166.0,"EndTime":136281.0,"Column":1}]},{"StartTime":136397.0,"Objects":[{"StartTime":136397.0,"EndTime":136512.0,"Column":2}]},{"StartTime":136627.0,"Objects":[{"StartTime":136627.0,"EndTime":136627.0,"Column":5}]},{"StartTime":136743.0,"Objects":[{"StartTime":136743.0,"EndTime":136858.0,"Column":1}]},{"StartTime":136974.0,"Objects":[{"StartTime":136974.0,"EndTime":137089.0,"Column":4},{"StartTime":136974.0,"EndTime":137089.0,"Column":6}]},{"StartTime":137204.0,"Objects":[{"StartTime":137204.0,"EndTime":137319.0,"Column":5}]},{"StartTime":137435.0,"Objects":[{"StartTime":137435.0,"EndTime":137550.0,"Column":2}]},{"StartTime":137666.0,"Objects":[{"StartTime":137666.0,"EndTime":137896.0,"Column":3},{"StartTime":137666.0,"EndTime":137896.0,"Column":6}]},{"StartTime":138012.0,"Objects":[{"StartTime":138012.0,"EndTime":138242.0,"Column":5},{"StartTime":138012.0,"EndTime":138242.0,"Column":1}]},{"StartTime":138358.0,"Objects":[{"StartTime":138358.0,"EndTime":138473.0,"Column":6}]},{"StartTime":138589.0,"Objects":[{"StartTime":138589.0,"EndTime":138819.0,"Column":0},{"StartTime":138589.0,"EndTime":138819.0,"Column":4}]},{"StartTime":138935.0,"Objects":[{"StartTime":138935.0,"EndTime":138935.0,"Column":6},{"StartTime":138935.0,"EndTime":138935.0,"Column":5}]},{"StartTime":139051.0,"Objects":[{"StartTime":139051.0,"EndTime":139281.0,"Column":1}]},{"StartTime":139397.0,"Objects":[{"StartTime":139397.0,"EndTime":139397.0,"Column":2},{"StartTime":139397.0,"EndTime":139397.0,"Column":3}]},{"StartTime":139512.0,"Objects":[{"StartTime":139512.0,"EndTime":139742.0,"Column":6}]},{"StartTime":139858.0,"Objects":[{"StartTime":139858.0,"EndTime":139858.0,"Column":5}]},{"StartTime":139974.0,"Objects":[{"StartTime":139974.0,"EndTime":140089.0,"Column":1}]},{"StartTime":140204.0,"Objects":[{"StartTime":140204.0,"EndTime":140319.0,"Column":3},{"StartTime":140204.0,"EndTime":140319.0,"Column":2}]},{"StartTime":140435.0,"Objects":[{"StartTime":140435.0,"EndTime":140550.0,"Column":6},{"StartTime":140435.0,"EndTime":140550.0,"Column":4}]},{"StartTime":140666.0,"Objects":[{"StartTime":140666.0,"EndTime":140781.0,"Column":2},{"StartTime":140666.0,"EndTime":140781.0,"Column":1}]},{"StartTime":140897.0,"Objects":[{"StartTime":140897.0,"EndTime":141012.0,"Column":6}]},{"StartTime":141127.0,"Objects":[{"StartTime":141127.0,"EndTime":141242.0,"Column":3}]},{"StartTime":141358.0,"Objects":[{"StartTime":141358.0,"EndTime":141588.0,"Column":6}]},{"StartTime":141704.0,"Objects":[{"StartTime":141704.0,"EndTime":141704.0,"Column":2},{"StartTime":141704.0,"EndTime":141704.0,"Column":3},{"StartTime":141704.0,"EndTime":141704.0,"Column":0}]},{"StartTime":141820.0,"Objects":[{"StartTime":141820.0,"EndTime":142050.0,"Column":6},{"StartTime":141820.0,"EndTime":142050.0,"Column":5}]},{"StartTime":142166.0,"Objects":[{"StartTime":142166.0,"EndTime":142166.0,"Column":0},{"StartTime":142166.0,"EndTime":142166.0,"Column":4}]},{"StartTime":142281.0,"Objects":[{"StartTime":142281.0,"EndTime":142396.0,"Column":5},{"StartTime":142281.0,"EndTime":142396.0,"Column":1}]},{"StartTime":142512.0,"Objects":[{"StartTime":142512.0,"EndTime":142627.0,"Column":4}]},{"StartTime":142743.0,"Objects":[{"StartTime":142743.0,"EndTime":142858.0,"Column":5},{"StartTime":142743.0,"EndTime":142858.0,"Column":6}]},{"StartTime":142974.0,"Objects":[{"StartTime":142974.0,"EndTime":143089.0,"Column":4}]},{"StartTime":143204.0,"Objects":[{"StartTime":143204.0,"EndTime":143377.0,"Column":2},{"StartTime":143204.0,"EndTime":143377.0,"Column":1},{"StartTime":143204.0,"EndTime":143377.0,"Column":0}]},{"StartTime":143435.0,"Objects":[{"StartTime":143435.0,"EndTime":143608.0,"Column":5}]},{"StartTime":143666.0,"Objects":[{"StartTime":143666.0,"EndTime":143839.0,"Column":6},{"StartTime":143666.0,"EndTime":143839.0,"Column":0}]},{"StartTime":143897.0,"Objects":[{"StartTime":143897.0,"EndTime":144070.0,"Column":2}]},{"StartTime":144127.0,"Objects":[{"StartTime":144127.0,"EndTime":144357.0,"Column":0}]},{"StartTime":144474.0,"Objects":[{"StartTime":144474.0,"EndTime":144474.0,"Column":5},{"StartTime":144474.0,"EndTime":144474.0,"Column":1}]},{"StartTime":144589.0,"Objects":[{"StartTime":144589.0,"EndTime":144819.0,"Column":4}]},{"StartTime":144935.0,"Objects":[{"StartTime":144935.0,"EndTime":144935.0,"Column":2}]},{"StartTime":145051.0,"Objects":[{"StartTime":145051.0,"EndTime":145166.0,"Column":5},{"StartTime":145051.0,"EndTime":145166.0,"Column":0},{"StartTime":145051.0,"EndTime":145166.0,"Column":4}]},{"StartTime":145281.0,"Objects":[{"StartTime":145281.0,"EndTime":145396.0,"Column":3},{"StartTime":145281.0,"EndTime":145396.0,"Column":1}]},{"StartTime":145512.0,"Objects":[{"StartTime":145512.0,"EndTime":145627.0,"Column":2}]},{"StartTime":145742.0,"Objects":[{"StartTime":145742.0,"EndTime":145857.0,"Column":1}]},{"StartTime":145974.0,"Objects":[{"StartTime":145974.0,"EndTime":146089.0,"Column":5}]},{"StartTime":146204.0,"Objects":[{"StartTime":146204.0,"EndTime":146319.0,"Column":2},{"StartTime":146204.0,"EndTime":146319.0,"Column":0}]},{"StartTime":146435.0,"Objects":[{"StartTime":146435.0,"EndTime":146550.0,"Column":4},{"StartTime":146435.0,"EndTime":146550.0,"Column":5}]},{"StartTime":146666.0,"Objects":[{"StartTime":146666.0,"EndTime":146781.0,"Column":6}]},{"StartTime":146897.0,"Objects":[{"StartTime":146897.0,"EndTime":147012.0,"Column":4},{"StartTime":146897.0,"EndTime":147012.0,"Column":5},{"StartTime":146897.0,"EndTime":147012.0,"Column":0}]},{"StartTime":147127.0,"Objects":[{"StartTime":147127.0,"EndTime":147242.0,"Column":6},{"StartTime":147127.0,"EndTime":147242.0,"Column":3}]},{"StartTime":147358.0,"Objects":[{"StartTime":147358.0,"EndTime":147473.0,"Column":1}]},{"StartTime":147589.0,"Objects":[{"StartTime":147589.0,"EndTime":147704.0,"Column":5}]},{"StartTime":147820.0,"Objects":[{"StartTime":147820.0,"EndTime":147935.0,"Column":3}]},{"StartTime":148050.0,"Objects":[{"StartTime":148050.0,"EndTime":148165.0,"Column":4}]},{"StartTime":148281.0,"Objects":[{"StartTime":148281.0,"EndTime":148281.0,"Column":3},{"StartTime":148281.0,"EndTime":148281.0,"Column":0}]},{"StartTime":148397.0,"Objects":[{"StartTime":148397.0,"EndTime":148397.0,"Column":2},{"StartTime":148397.0,"EndTime":148397.0,"Column":4}]},{"StartTime":148512.0,"Objects":[{"StartTime":148512.0,"EndTime":148512.0,"Column":5},{"StartTime":148512.0,"EndTime":148512.0,"Column":6}]},{"StartTime":148627.0,"Objects":[{"StartTime":148627.0,"EndTime":148627.0,"Column":2},{"StartTime":148627.0,"EndTime":148627.0,"Column":3}]},{"StartTime":148743.0,"Objects":[{"StartTime":148743.0,"EndTime":148743.0,"Column":0}]},{"StartTime":148858.0,"Objects":[{"StartTime":148858.0,"EndTime":148858.0,"Column":1},{"StartTime":148858.0,"EndTime":148858.0,"Column":5},{"StartTime":148858.0,"EndTime":148858.0,"Column":4}]},{"StartTime":148916.0,"Objects":[{"StartTime":148916.0,"EndTime":148916.0,"Column":3}]},{"StartTime":148974.0,"Objects":[{"StartTime":148974.0,"EndTime":148974.0,"Column":1}]},{"StartTime":149089.0,"Objects":[{"StartTime":149089.0,"EndTime":149089.0,"Column":3},{"StartTime":149089.0,"EndTime":149089.0,"Column":6}]},{"StartTime":149204.0,"Objects":[{"StartTime":149204.0,"EndTime":149204.0,"Column":1}]},{"StartTime":149320.0,"Objects":[{"StartTime":149320.0,"EndTime":149320.0,"Column":2},{"StartTime":149320.0,"EndTime":149320.0,"Column":3}]},{"StartTime":149435.0,"Objects":[{"StartTime":149435.0,"EndTime":149435.0,"Column":4},{"StartTime":149435.0,"EndTime":149435.0,"Column":5}]},{"StartTime":149551.0,"Objects":[{"StartTime":149551.0,"EndTime":149551.0,"Column":6},{"StartTime":149551.0,"EndTime":149551.0,"Column":0}]},{"StartTime":149666.0,"Objects":[{"StartTime":149666.0,"EndTime":150358.0,"Column":2}]},{"StartTime":150589.0,"Objects":[{"StartTime":150589.0,"EndTime":151281.0,"Column":3},{"StartTime":150589.0,"EndTime":151281.0,"Column":6}]},{"StartTime":151512.0,"Objects":[{"StartTime":151512.0,"EndTime":152204.0,"Column":1},{"StartTime":151512.0,"EndTime":152204.0,"Column":4}]},{"StartTime":152320.0,"Objects":[{"StartTime":152320.0,"EndTime":152320.0,"Column":0},{"StartTime":152320.0,"EndTime":152320.0,"Column":2}]},{"StartTime":152377.0,"Objects":[{"StartTime":152377.0,"EndTime":152377.0,"Column":4}]},{"StartTime":152435.0,"Objects":[{"StartTime":152435.0,"EndTime":152435.0,"Column":0}]},{"StartTime":152551.0,"Objects":[{"StartTime":152551.0,"EndTime":152551.0,"Column":2},{"StartTime":152551.0,"EndTime":152551.0,"Column":3},{"StartTime":152551.0,"EndTime":152551.0,"Column":5}]},{"StartTime":152666.0,"Objects":[{"StartTime":152666.0,"EndTime":152666.0,"Column":4},{"StartTime":152666.0,"EndTime":152666.0,"Column":6}]},{"StartTime":152781.0,"Objects":[{"StartTime":152781.0,"EndTime":152781.0,"Column":2}]},{"StartTime":152897.0,"Objects":[{"StartTime":152897.0,"EndTime":152897.0,"Column":3}]},{"StartTime":153012.0,"Objects":[{"StartTime":153012.0,"EndTime":153012.0,"Column":5},{"StartTime":153012.0,"EndTime":153012.0,"Column":4},{"StartTime":153012.0,"EndTime":153012.0,"Column":1}]},{"StartTime":153128.0,"Objects":[{"StartTime":153128.0,"EndTime":153128.0,"Column":6},{"StartTime":153128.0,"EndTime":153128.0,"Column":0}]},{"StartTime":153243.0,"Objects":[{"StartTime":153243.0,"EndTime":153243.0,"Column":3}]},{"StartTime":153358.0,"Objects":[{"StartTime":153358.0,"EndTime":154050.0,"Column":1},{"StartTime":153358.0,"EndTime":154050.0,"Column":6}]},{"StartTime":154281.0,"Objects":[{"StartTime":154281.0,"EndTime":154973.0,"Column":5}]},{"StartTime":155204.0,"Objects":[{"StartTime":155204.0,"EndTime":155896.0,"Column":2}]},{"StartTime":156127.0,"Objects":[{"StartTime":156127.0,"EndTime":156127.0,"Column":6},{"StartTime":156127.0,"EndTime":156127.0,"Column":0}]},{"StartTime":156185.0,"Objects":[{"StartTime":156185.0,"EndTime":156185.0,"Column":3}]},{"StartTime":156243.0,"Objects":[{"StartTime":156243.0,"EndTime":156243.0,"Column":6}]},{"StartTime":156358.0,"Objects":[{"StartTime":156358.0,"EndTime":156358.0,"Column":4},{"StartTime":156358.0,"EndTime":156358.0,"Column":5}]},{"StartTime":156474.0,"Objects":[{"StartTime":156474.0,"EndTime":156474.0,"Column":6},{"StartTime":156474.0,"EndTime":156474.0,"Column":0}]},{"StartTime":156531.0,"Objects":[{"StartTime":156531.0,"EndTime":156531.0,"Column":5}]},{"StartTime":156589.0,"Objects":[{"StartTime":156589.0,"EndTime":156589.0,"Column":3}]},{"StartTime":156704.0,"Objects":[{"StartTime":156704.0,"EndTime":156704.0,"Column":5},{"StartTime":156704.0,"EndTime":156704.0,"Column":6},{"StartTime":156704.0,"EndTime":156704.0,"Column":0}]},{"StartTime":156820.0,"Objects":[{"StartTime":156820.0,"EndTime":156820.0,"Column":4},{"StartTime":156820.0,"EndTime":156820.0,"Column":1}]},{"StartTime":156935.0,"Objects":[{"StartTime":156935.0,"EndTime":156935.0,"Column":6},{"StartTime":156935.0,"EndTime":156935.0,"Column":0}]},{"StartTime":157051.0,"Objects":[{"StartTime":157051.0,"EndTime":157743.0,"Column":3},{"StartTime":157051.0,"EndTime":157743.0,"Column":4},{"StartTime":157051.0,"EndTime":157743.0,"Column":5}]},{"StartTime":157974.0,"Objects":[{"StartTime":157974.0,"EndTime":158666.0,"Column":1},{"StartTime":157974.0,"EndTime":158666.0,"Column":6}]},{"StartTime":158897.0,"Objects":[{"StartTime":158897.0,"EndTime":159589.0,"Column":2}]},{"StartTime":159704.0,"Objects":[{"StartTime":159704.0,"EndTime":159704.0,"Column":5},{"StartTime":159704.0,"EndTime":159704.0,"Column":6},{"StartTime":159704.0,"EndTime":159704.0,"Column":0}]},{"StartTime":159762.0,"Objects":[{"StartTime":159762.0,"EndTime":159762.0,"Column":4}]},{"StartTime":159820.0,"Objects":[{"StartTime":159820.0,"EndTime":159820.0,"Column":5}]},{"StartTime":159935.0,"Objects":[{"StartTime":159935.0,"EndTime":159935.0,"Column":6},{"StartTime":159935.0,"EndTime":159935.0,"Column":0}]},{"StartTime":160051.0,"Objects":[{"StartTime":160051.0,"EndTime":160051.0,"Column":5},{"StartTime":160051.0,"EndTime":160051.0,"Column":1}]},{"StartTime":160166.0,"Objects":[{"StartTime":160166.0,"EndTime":160166.0,"Column":4},{"StartTime":160166.0,"EndTime":160166.0,"Column":6}]},{"StartTime":160281.0,"Objects":[{"StartTime":160281.0,"EndTime":160281.0,"Column":5},{"StartTime":160281.0,"EndTime":160281.0,"Column":0}]},{"StartTime":160397.0,"Objects":[{"StartTime":160397.0,"EndTime":160397.0,"Column":2},{"StartTime":160397.0,"EndTime":160397.0,"Column":3}]},{"StartTime":160513.0,"Objects":[{"StartTime":160513.0,"EndTime":160513.0,"Column":1},{"StartTime":160513.0,"EndTime":160513.0,"Column":4}]},{"StartTime":160627.0,"Objects":[{"StartTime":160627.0,"EndTime":160627.0,"Column":2},{"StartTime":160627.0,"EndTime":160627.0,"Column":3}]},{"StartTime":160743.0,"Objects":[{"StartTime":160743.0,"EndTime":160858.0,"Column":4},{"StartTime":160743.0,"EndTime":160858.0,"Column":0}]},{"StartTime":160974.0,"Objects":[{"StartTime":160974.0,"EndTime":161089.0,"Column":2}]},{"StartTime":161204.0,"Objects":[{"StartTime":161204.0,"EndTime":161319.0,"Column":4}]},{"StartTime":161435.0,"Objects":[{"StartTime":161435.0,"EndTime":161550.0,"Column":3}]},{"StartTime":161666.0,"Objects":[{"StartTime":161666.0,"EndTime":161781.0,"Column":4}]},{"StartTime":161897.0,"Objects":[{"StartTime":161897.0,"EndTime":162012.0,"Column":5},{"StartTime":161897.0,"EndTime":162012.0,"Column":1},{"StartTime":161897.0,"EndTime":162012.0,"Column":3}]},{"StartTime":162127.0,"Objects":[{"StartTime":162127.0,"EndTime":162242.0,"Column":4},{"StartTime":162127.0,"EndTime":162242.0,"Column":6}]},{"StartTime":162358.0,"Objects":[{"StartTime":162358.0,"EndTime":162473.0,"Column":5},{"StartTime":162358.0,"EndTime":162473.0,"Column":2}]},{"StartTime":162589.0,"Objects":[{"StartTime":162589.0,"EndTime":162704.0,"Column":4}]},{"StartTime":162820.0,"Objects":[{"StartTime":162820.0,"EndTime":162935.0,"Column":0}]},{"StartTime":163051.0,"Objects":[{"StartTime":163051.0,"EndTime":163166.0,"Column":2},{"StartTime":163051.0,"EndTime":163166.0,"Column":6}]},{"StartTime":163281.0,"Objects":[{"StartTime":163281.0,"EndTime":163396.0,"Column":4}]},{"StartTime":163512.0,"Objects":[{"StartTime":163512.0,"EndTime":163627.0,"Column":5}]},{"StartTime":163743.0,"Objects":[{"StartTime":163743.0,"EndTime":163858.0,"Column":1},{"StartTime":163743.0,"EndTime":163858.0,"Column":4}]},{"StartTime":163974.0,"Objects":[{"StartTime":163974.0,"EndTime":164089.0,"Column":3}]},{"StartTime":164205.0,"Objects":[{"StartTime":164205.0,"EndTime":164320.0,"Column":6}]},{"StartTime":164435.0,"Objects":[{"StartTime":164435.0,"EndTime":164550.0,"Column":5}]},{"StartTime":164666.0,"Objects":[{"StartTime":164666.0,"EndTime":164781.0,"Column":1}]},{"StartTime":164897.0,"Objects":[{"StartTime":164897.0,"EndTime":165012.0,"Column":2},{"StartTime":164897.0,"EndTime":165012.0,"Column":6}]},{"StartTime":165127.0,"Objects":[{"StartTime":165127.0,"EndTime":165127.0,"Column":0},{"StartTime":165127.0,"EndTime":165127.0,"Column":1}]},{"StartTime":165243.0,"Objects":[{"StartTime":165243.0,"EndTime":165243.0,"Column":6},{"StartTime":165243.0,"EndTime":165243.0,"Column":2}]},{"StartTime":165301.0,"Objects":[{"StartTime":165301.0,"EndTime":165301.0,"Column":4}]},{"StartTime":165358.0,"Objects":[{"StartTime":165358.0,"EndTime":165473.0,"Column":6}]},{"StartTime":165589.0,"Objects":[{"StartTime":165589.0,"EndTime":165589.0,"Column":4},{"StartTime":165589.0,"EndTime":165589.0,"Column":5},{"StartTime":165589.0,"EndTime":165589.0,"Column":0}]},{"StartTime":165704.0,"Objects":[{"StartTime":165704.0,"EndTime":165704.0,"Column":6},{"StartTime":165704.0,"EndTime":165704.0,"Column":1}]},{"StartTime":165820.0,"Objects":[{"StartTime":165820.0,"EndTime":165820.0,"Column":4},{"StartTime":165820.0,"EndTime":165820.0,"Column":5}]},{"StartTime":165877.0,"Objects":[{"StartTime":165877.0,"EndTime":165877.0,"Column":3}]},{"StartTime":165935.0,"Objects":[{"StartTime":165935.0,"EndTime":165935.0,"Column":6}]},{"StartTime":165993.0,"Objects":[{"StartTime":165993.0,"EndTime":165993.0,"Column":2}]},{"StartTime":166050.0,"Objects":[{"StartTime":166050.0,"EndTime":166050.0,"Column":0}]},{"StartTime":166108.0,"Objects":[{"StartTime":166108.0,"EndTime":166108.0,"Column":2}]},{"StartTime":166166.0,"Objects":[{"StartTime":166166.0,"EndTime":166166.0,"Column":1}]},{"StartTime":166224.0,"Objects":[{"StartTime":166224.0,"EndTime":166224.0,"Column":4}]},{"StartTime":166281.0,"Objects":[{"StartTime":166281.0,"EndTime":166511.0,"Column":2},{"StartTime":166281.0,"EndTime":166511.0,"Column":1}]},{"StartTime":166627.0,"Objects":[{"StartTime":166627.0,"EndTime":166627.0,"Column":3},{"StartTime":166627.0,"EndTime":166627.0,"Column":6}]},{"StartTime":166743.0,"Objects":[{"StartTime":166743.0,"EndTime":166973.0,"Column":5},{"StartTime":166743.0,"EndTime":166973.0,"Column":1}]},{"StartTime":167089.0,"Objects":[{"StartTime":167089.0,"EndTime":167089.0,"Column":2},{"StartTime":167089.0,"EndTime":167089.0,"Column":0}]},{"StartTime":167204.0,"Objects":[{"StartTime":167204.0,"EndTime":167319.0,"Column":3},{"StartTime":167204.0,"EndTime":167319.0,"Column":1}]},{"StartTime":167435.0,"Objects":[{"StartTime":167435.0,"EndTime":167608.0,"Column":2},{"StartTime":167435.0,"EndTime":167608.0,"Column":5}]},{"StartTime":167666.0,"Objects":[{"StartTime":167666.0,"EndTime":167781.0,"Column":1},{"StartTime":167666.0,"EndTime":167781.0,"Column":6}]},{"StartTime":167897.0,"Objects":[{"StartTime":167897.0,"EndTime":168012.0,"Column":4},{"StartTime":167897.0,"EndTime":168012.0,"Column":2}]},{"StartTime":168127.0,"Objects":[{"StartTime":168127.0,"EndTime":168357.0,"Column":5},{"StartTime":168127.0,"EndTime":168357.0,"Column":1}]},{"StartTime":168474.0,"Objects":[{"StartTime":168474.0,"EndTime":168704.0,"Column":3}]},{"StartTime":168820.0,"Objects":[{"StartTime":168820.0,"EndTime":168935.0,"Column":0},{"StartTime":168820.0,"EndTime":168935.0,"Column":2}]},{"StartTime":169051.0,"Objects":[{"StartTime":169051.0,"EndTime":169166.0,"Column":1}]},{"StartTime":169281.0,"Objects":[{"StartTime":169281.0,"EndTime":169396.0,"Column":3},{"StartTime":169281.0,"EndTime":169396.0,"Column":6},{"StartTime":169281.0,"EndTime":169396.0,"Column":0}]},{"StartTime":169512.0,"Objects":[{"StartTime":169512.0,"EndTime":169627.0,"Column":5}]},{"StartTime":169743.0,"Objects":[{"StartTime":169743.0,"EndTime":169743.0,"Column":2},{"StartTime":169743.0,"EndTime":169743.0,"Column":3},{"StartTime":169743.0,"EndTime":169743.0,"Column":4}]},{"StartTime":169800.0,"Objects":[{"StartTime":169800.0,"EndTime":169800.0,"Column":5}]},{"StartTime":169858.0,"Objects":[{"StartTime":169858.0,"EndTime":169858.0,"Column":2}]},{"StartTime":169916.0,"Objects":[{"StartTime":169916.0,"EndTime":169916.0,"Column":3}]},{"StartTime":169974.0,"Objects":[{"StartTime":169974.0,"EndTime":170204.0,"Column":2},{"StartTime":169974.0,"EndTime":170204.0,"Column":6}]},{"StartTime":170320.0,"Objects":[{"StartTime":170320.0,"EndTime":170320.0,"Column":0}]},{"StartTime":170435.0,"Objects":[{"StartTime":170435.0,"EndTime":170665.0,"Column":5}]},{"StartTime":170781.0,"Objects":[{"StartTime":170781.0,"EndTime":170781.0,"Column":1}]},{"StartTime":170897.0,"Objects":[{"StartTime":170897.0,"EndTime":171012.0,"Column":5}]},{"StartTime":171127.0,"Objects":[{"StartTime":171127.0,"EndTime":171300.0,"Column":6},{"StartTime":171127.0,"EndTime":171300.0,"Column":1},{"StartTime":171127.0,"EndTime":171300.0,"Column":2}]},{"StartTime":171358.0,"Objects":[{"StartTime":171358.0,"EndTime":171473.0,"Column":4},{"StartTime":171358.0,"EndTime":171473.0,"Column":3}]},{"StartTime":171589.0,"Objects":[{"StartTime":171589.0,"EndTime":171704.0,"Column":0},{"StartTime":171589.0,"EndTime":171704.0,"Column":2}]},{"StartTime":171820.0,"Objects":[{"StartTime":171820.0,"EndTime":172050.0,"Column":3},{"StartTime":171820.0,"EndTime":172050.0,"Column":4}]},{"StartTime":172166.0,"Objects":[{"StartTime":172166.0,"EndTime":172166.0,"Column":2},{"StartTime":172166.0,"EndTime":172166.0,"Column":6}]},{"StartTime":172281.0,"Objects":[{"StartTime":172281.0,"EndTime":172511.0,"Column":1},{"StartTime":172281.0,"EndTime":172511.0,"Column":0},{"StartTime":172281.0,"EndTime":172511.0,"Column":4}]},{"StartTime":172628.0,"Objects":[{"StartTime":172628.0,"EndTime":172628.0,"Column":3},{"StartTime":172628.0,"EndTime":172628.0,"Column":5}]},{"StartTime":172743.0,"Objects":[{"StartTime":172743.0,"EndTime":172916.0,"Column":0}]},{"StartTime":172974.0,"Objects":[{"StartTime":172974.0,"EndTime":173089.0,"Column":1},{"StartTime":172974.0,"EndTime":173089.0,"Column":3}]},{"StartTime":173204.0,"Objects":[{"StartTime":173204.0,"EndTime":173319.0,"Column":2},{"StartTime":173204.0,"EndTime":173319.0,"Column":4}]},{"StartTime":173435.0,"Objects":[{"StartTime":173435.0,"EndTime":173550.0,"Column":5},{"StartTime":173435.0,"EndTime":173550.0,"Column":1},{"StartTime":173435.0,"EndTime":173550.0,"Column":6}]},{"StartTime":173666.0,"Objects":[{"StartTime":173666.0,"EndTime":173896.0,"Column":4},{"StartTime":173666.0,"EndTime":173896.0,"Column":0}]},{"StartTime":174012.0,"Objects":[{"StartTime":174012.0,"EndTime":174012.0,"Column":2}]},{"StartTime":174127.0,"Objects":[{"StartTime":174127.0,"EndTime":174357.0,"Column":4},{"StartTime":174127.0,"EndTime":174357.0,"Column":5}]},{"StartTime":174474.0,"Objects":[{"StartTime":174474.0,"EndTime":174474.0,"Column":6},{"StartTime":174474.0,"EndTime":174474.0,"Column":2}]},{"StartTime":174589.0,"Objects":[{"StartTime":174589.0,"EndTime":174819.0,"Column":5},{"StartTime":174589.0,"EndTime":174819.0,"Column":1},{"StartTime":174589.0,"EndTime":174819.0,"Column":3}]},{"StartTime":174935.0,"Objects":[{"StartTime":174935.0,"EndTime":174935.0,"Column":4}]},{"StartTime":175051.0,"Objects":[{"StartTime":175051.0,"EndTime":175166.0,"Column":3},{"StartTime":175051.0,"EndTime":175166.0,"Column":2},{"StartTime":175051.0,"EndTime":175166.0,"Column":1}]},{"StartTime":175281.0,"Objects":[{"StartTime":175281.0,"EndTime":175396.0,"Column":5},{"StartTime":175281.0,"EndTime":175396.0,"Column":6}]},{"StartTime":175512.0,"Objects":[{"StartTime":175512.0,"EndTime":175742.0,"Column":4}]},{"StartTime":175858.0,"Objects":[{"StartTime":175858.0,"EndTime":175858.0,"Column":2}]},{"StartTime":175974.0,"Objects":[{"StartTime":175974.0,"EndTime":176204.0,"Column":4},{"StartTime":175974.0,"EndTime":176204.0,"Column":5}]},{"StartTime":176320.0,"Objects":[{"StartTime":176320.0,"EndTime":176320.0,"Column":3},{"StartTime":176320.0,"EndTime":176320.0,"Column":1},{"StartTime":176320.0,"EndTime":176320.0,"Column":6}]},{"StartTime":176435.0,"Objects":[{"StartTime":176435.0,"EndTime":176665.0,"Column":0},{"StartTime":176435.0,"EndTime":176665.0,"Column":5},{"StartTime":176435.0,"EndTime":176665.0,"Column":4}]},{"StartTime":176781.0,"Objects":[{"StartTime":176781.0,"EndTime":176781.0,"Column":2}]},{"StartTime":176897.0,"Objects":[{"StartTime":176897.0,"EndTime":177012.0,"Column":5}]},{"StartTime":177127.0,"Objects":[{"StartTime":177127.0,"EndTime":177242.0,"Column":4},{"StartTime":177127.0,"EndTime":177242.0,"Column":3}]},{"StartTime":177358.0,"Objects":[{"StartTime":177358.0,"EndTime":177358.0,"Column":2},{"StartTime":177358.0,"EndTime":177358.0,"Column":5},{"StartTime":177358.0,"EndTime":177358.0,"Column":1},{"StartTime":177358.0,"EndTime":177358.0,"Column":6}]},{"StartTime":177474.0,"Objects":[{"StartTime":177474.0,"EndTime":177474.0,"Column":3},{"StartTime":177474.0,"EndTime":177474.0,"Column":4}]},{"StartTime":177589.0,"Objects":[{"StartTime":177589.0,"EndTime":177589.0,"Column":5},{"StartTime":177589.0,"EndTime":177589.0,"Column":6}]},{"StartTime":177704.0,"Objects":[{"StartTime":177704.0,"EndTime":177704.0,"Column":4}]},{"StartTime":177820.0,"Objects":[{"StartTime":177820.0,"EndTime":177820.0,"Column":3},{"StartTime":177820.0,"EndTime":177820.0,"Column":0}]},{"StartTime":177935.0,"Objects":[{"StartTime":177935.0,"EndTime":177935.0,"Column":2}]},{"StartTime":178051.0,"Objects":[{"StartTime":178051.0,"EndTime":178051.0,"Column":1},{"StartTime":178051.0,"EndTime":178051.0,"Column":3},{"StartTime":178051.0,"EndTime":178051.0,"Column":4}]},{"StartTime":178166.0,"Objects":[{"StartTime":178166.0,"EndTime":178166.0,"Column":2},{"StartTime":178166.0,"EndTime":178166.0,"Column":0},{"StartTime":178166.0,"EndTime":178166.0,"Column":6}]},{"StartTime":178281.0,"Objects":[{"StartTime":178281.0,"EndTime":178396.0,"Column":3}]},{"StartTime":178512.0,"Objects":[{"StartTime":178512.0,"EndTime":178627.0,"Column":4},{"StartTime":178512.0,"EndTime":178627.0,"Column":0}]},{"StartTime":178743.0,"Objects":[{"StartTime":178743.0,"EndTime":178858.0,"Column":5}]},{"StartTime":178974.0,"Objects":[{"StartTime":178974.0,"EndTime":179089.0,"Column":1},{"StartTime":178974.0,"EndTime":179089.0,"Column":6}]},{"StartTime":179204.0,"Objects":[{"StartTime":179204.0,"EndTime":179319.0,"Column":5}]},{"StartTime":179435.0,"Objects":[{"StartTime":179435.0,"EndTime":179550.0,"Column":4},{"StartTime":179435.0,"EndTime":179550.0,"Column":1},{"StartTime":179435.0,"EndTime":179550.0,"Column":6}]},{"StartTime":179666.0,"Objects":[{"StartTime":179666.0,"EndTime":179666.0,"Column":5},{"StartTime":179666.0,"EndTime":179666.0,"Column":0},{"StartTime":179666.0,"EndTime":179666.0,"Column":2}]},{"StartTime":179781.0,"Objects":[{"StartTime":179781.0,"EndTime":179781.0,"Column":6},{"StartTime":179781.0,"EndTime":179781.0,"Column":1},{"StartTime":179781.0,"EndTime":179781.0,"Column":3}]},{"StartTime":179839.0,"Objects":[{"StartTime":179839.0,"EndTime":179839.0,"Column":4}]},{"StartTime":179897.0,"Objects":[{"StartTime":179897.0,"EndTime":179897.0,"Column":6}]},{"StartTime":180012.0,"Objects":[{"StartTime":180012.0,"EndTime":180012.0,"Column":5},{"StartTime":180012.0,"EndTime":180012.0,"Column":0}]},{"StartTime":180127.0,"Objects":[{"StartTime":180127.0,"EndTime":180127.0,"Column":6}]},{"StartTime":180243.0,"Objects":[{"StartTime":180243.0,"EndTime":180243.0,"Column":4},{"StartTime":180243.0,"EndTime":180243.0,"Column":5}]},{"StartTime":180301.0,"Objects":[{"StartTime":180301.0,"EndTime":180301.0,"Column":3}]},{"StartTime":180358.0,"Objects":[{"StartTime":180358.0,"EndTime":180473.0,"Column":5},{"StartTime":180358.0,"EndTime":180473.0,"Column":6}]},{"StartTime":180589.0,"Objects":[{"StartTime":180589.0,"EndTime":180589.0,"Column":2}]},{"StartTime":180704.0,"Objects":[{"StartTime":180704.0,"EndTime":180704.0,"Column":1},{"StartTime":180704.0,"EndTime":180704.0,"Column":3}]},{"StartTime":180820.0,"Objects":[{"StartTime":180820.0,"EndTime":180820.0,"Column":4},{"StartTime":180820.0,"EndTime":180820.0,"Column":5}]},{"StartTime":180935.0,"Objects":[{"StartTime":180935.0,"EndTime":180935.0,"Column":3},{"StartTime":180935.0,"EndTime":180935.0,"Column":6}]},{"StartTime":181051.0,"Objects":[{"StartTime":181051.0,"EndTime":181281.0,"Column":5}]},{"StartTime":181397.0,"Objects":[{"StartTime":181397.0,"EndTime":181397.0,"Column":1}]},{"StartTime":181512.0,"Objects":[{"StartTime":181512.0,"EndTime":181742.0,"Column":6}]},{"StartTime":181858.0,"Objects":[{"StartTime":181858.0,"EndTime":181858.0,"Column":0}]},{"StartTime":181974.0,"Objects":[{"StartTime":181974.0,"EndTime":182089.0,"Column":6}]},{"StartTime":182204.0,"Objects":[{"StartTime":182204.0,"EndTime":182377.0,"Column":0}]},{"StartTime":182435.0,"Objects":[{"StartTime":182435.0,"EndTime":182550.0,"Column":6}]},{"StartTime":182666.0,"Objects":[{"StartTime":182666.0,"EndTime":182666.0,"Column":2},{"StartTime":182666.0,"EndTime":182666.0,"Column":3}]},{"StartTime":182781.0,"Objects":[{"StartTime":182781.0,"EndTime":183011.0,"Column":1}]},{"StartTime":183127.0,"Objects":[{"StartTime":183127.0,"EndTime":183357.0,"Column":0}]},{"StartTime":183474.0,"Objects":[{"StartTime":183474.0,"EndTime":183589.0,"Column":5}]},{"StartTime":183704.0,"Objects":[{"StartTime":183704.0,"EndTime":183704.0,"Column":4}]},{"StartTime":183820.0,"Objects":[{"StartTime":183820.0,"EndTime":184050.0,"Column":0},{"StartTime":183820.0,"EndTime":184050.0,"Column":5}]},{"StartTime":184166.0,"Objects":[{"StartTime":184166.0,"EndTime":184166.0,"Column":1},{"StartTime":184166.0,"EndTime":184166.0,"Column":3}]},{"StartTime":184281.0,"Objects":[{"StartTime":184281.0,"EndTime":184396.0,"Column":4}]},{"StartTime":184512.0,"Objects":[{"StartTime":184512.0,"EndTime":184627.0,"Column":2}]},{"StartTime":184743.0,"Objects":[{"StartTime":184743.0,"EndTime":184973.0,"Column":1}]},{"StartTime":185089.0,"Objects":[{"StartTime":185089.0,"EndTime":185089.0,"Column":5}]},{"StartTime":185204.0,"Objects":[{"StartTime":185204.0,"EndTime":185434.0,"Column":3}]},{"StartTime":185551.0,"Objects":[{"StartTime":185551.0,"EndTime":185551.0,"Column":1}]},{"StartTime":185666.0,"Objects":[{"StartTime":185666.0,"EndTime":185781.0,"Column":2}]},{"StartTime":185897.0,"Objects":[{"StartTime":185897.0,"EndTime":186070.0,"Column":4}]},{"StartTime":186127.0,"Objects":[{"StartTime":186127.0,"EndTime":186242.0,"Column":6},{"StartTime":186127.0,"EndTime":186242.0,"Column":1}]},{"StartTime":186358.0,"Objects":[{"StartTime":186358.0,"EndTime":186358.0,"Column":3},{"StartTime":186358.0,"EndTime":186358.0,"Column":4},{"StartTime":186358.0,"EndTime":186358.0,"Column":5}]},{"StartTime":186474.0,"Objects":[{"StartTime":186474.0,"EndTime":186704.0,"Column":0}]},{"StartTime":186820.0,"Objects":[{"StartTime":186820.0,"EndTime":187050.0,"Column":4},{"StartTime":186820.0,"EndTime":187050.0,"Column":5}]},{"StartTime":187166.0,"Objects":[{"StartTime":187166.0,"EndTime":187166.0,"Column":6},{"StartTime":187166.0,"EndTime":187166.0,"Column":1}]},{"StartTime":187281.0,"Objects":[{"StartTime":187281.0,"EndTime":187396.0,"Column":0}]},{"StartTime":187512.0,"Objects":[{"StartTime":187512.0,"EndTime":187742.0,"Column":6}]},{"StartTime":187858.0,"Objects":[{"StartTime":187858.0,"EndTime":187858.0,"Column":0}]},{"StartTime":187974.0,"Objects":[{"StartTime":187974.0,"EndTime":188089.0,"Column":3}]},{"StartTime":188204.0,"Objects":[{"StartTime":188204.0,"EndTime":188319.0,"Column":4}]},{"StartTime":188435.0,"Objects":[{"StartTime":188435.0,"EndTime":188665.0,"Column":6}]},{"StartTime":188781.0,"Objects":[{"StartTime":188781.0,"EndTime":188781.0,"Column":5},{"StartTime":188781.0,"EndTime":188781.0,"Column":1},{"StartTime":188781.0,"EndTime":188781.0,"Column":2}]},{"StartTime":188897.0,"Objects":[{"StartTime":188897.0,"EndTime":189127.0,"Column":0},{"StartTime":188897.0,"EndTime":189127.0,"Column":3},{"StartTime":188897.0,"EndTime":189127.0,"Column":4}]},{"StartTime":189243.0,"Objects":[{"StartTime":189243.0,"EndTime":189243.0,"Column":1},{"StartTime":189243.0,"EndTime":189243.0,"Column":6}]},{"StartTime":189358.0,"Objects":[{"StartTime":189358.0,"EndTime":189473.0,"Column":0}]},{"StartTime":189589.0,"Objects":[{"StartTime":189589.0,"EndTime":189819.0,"Column":6},{"StartTime":189589.0,"EndTime":189819.0,"Column":4}]},{"StartTime":189935.0,"Objects":[{"StartTime":189935.0,"EndTime":189935.0,"Column":3}]},{"StartTime":190051.0,"Objects":[{"StartTime":190051.0,"EndTime":190166.0,"Column":2},{"StartTime":190051.0,"EndTime":190166.0,"Column":5}]},{"StartTime":190281.0,"Objects":[{"StartTime":190281.0,"EndTime":190511.0,"Column":6}]},{"StartTime":190627.0,"Objects":[{"StartTime":190627.0,"EndTime":190627.0,"Column":5}]},{"StartTime":190743.0,"Objects":[{"StartTime":190743.0,"EndTime":190858.0,"Column":2},{"StartTime":190743.0,"EndTime":190858.0,"Column":3}]},{"StartTime":190974.0,"Objects":[{"StartTime":190974.0,"EndTime":191089.0,"Column":6},{"StartTime":190974.0,"EndTime":191089.0,"Column":1}]},{"StartTime":191204.0,"Objects":[{"StartTime":191204.0,"EndTime":191434.0,"Column":2},{"StartTime":191204.0,"EndTime":191434.0,"Column":5}]},{"StartTime":191551.0,"Objects":[{"StartTime":191551.0,"EndTime":191551.0,"Column":1}]},{"StartTime":191666.0,"Objects":[{"StartTime":191666.0,"EndTime":191781.0,"Column":4},{"StartTime":191666.0,"EndTime":191781.0,"Column":2}]},{"StartTime":191897.0,"Objects":[{"StartTime":191897.0,"EndTime":192012.0,"Column":3}]},{"StartTime":192127.0,"Objects":[{"StartTime":192127.0,"EndTime":192819.0,"Column":5},{"StartTime":192127.0,"EndTime":192819.0,"Column":6}]},{"StartTime":193051.0,"Objects":[{"StartTime":193051.0,"EndTime":193051.0,"Column":5}]},{"StartTime":193974.0,"Objects":[{"StartTime":193974.0,"EndTime":194666.0,"Column":0}]},{"StartTime":194898.0,"Objects":[{"StartTime":194898.0,"EndTime":194898.0,"Column":5},{"StartTime":194898.0,"EndTime":194898.0,"Column":1}]},{"StartTime":195127.0,"Objects":[{"StartTime":195127.0,"EndTime":195127.0,"Column":1},{"StartTime":195127.0,"EndTime":195127.0,"Column":2}]},{"StartTime":195358.0,"Objects":[{"StartTime":195358.0,"EndTime":195358.0,"Column":4},{"StartTime":195358.0,"EndTime":195358.0,"Column":3}]},{"StartTime":195589.0,"Objects":[{"StartTime":195589.0,"EndTime":195704.0,"Column":5}]},{"StartTime":195820.0,"Objects":[{"StartTime":195820.0,"EndTime":195935.0,"Column":2},{"StartTime":195820.0,"EndTime":195935.0,"Column":4},{"StartTime":195820.0,"EndTime":195935.0,"Column":3}]},{"StartTime":196051.0,"Objects":[{"StartTime":196051.0,"EndTime":196166.0,"Column":6}]},{"StartTime":196281.0,"Objects":[{"StartTime":196281.0,"EndTime":196281.0,"Column":4},{"StartTime":196281.0,"EndTime":196281.0,"Column":5}]},{"StartTime":196397.0,"Objects":[{"StartTime":196397.0,"EndTime":196397.0,"Column":6},{"StartTime":196397.0,"EndTime":196397.0,"Column":0}]},{"StartTime":196454.0,"Objects":[{"StartTime":196454.0,"EndTime":196454.0,"Column":4}]},{"StartTime":196512.0,"Objects":[{"StartTime":196512.0,"EndTime":196512.0,"Column":6}]},{"StartTime":196570.0,"Objects":[{"StartTime":196570.0,"EndTime":196570.0,"Column":5}]},{"StartTime":196627.0,"Objects":[{"StartTime":196627.0,"EndTime":196627.0,"Column":6}]},{"StartTime":196685.0,"Objects":[{"StartTime":196685.0,"EndTime":196685.0,"Column":4}]},{"StartTime":196743.0,"Objects":[{"StartTime":196743.0,"EndTime":196743.0,"Column":6}]},{"StartTime":196801.0,"Objects":[{"StartTime":196801.0,"EndTime":196801.0,"Column":5}]},{"StartTime":196858.0,"Objects":[{"StartTime":196858.0,"EndTime":196858.0,"Column":1}]},{"StartTime":196916.0,"Objects":[{"StartTime":196916.0,"EndTime":196916.0,"Column":4}]},{"StartTime":196974.0,"Objects":[{"StartTime":196974.0,"EndTime":196974.0,"Column":1}]},{"StartTime":197031.0,"Objects":[{"StartTime":197031.0,"EndTime":197031.0,"Column":3}]},{"StartTime":197089.0,"Objects":[{"StartTime":197089.0,"EndTime":197089.0,"Column":1}]},{"StartTime":197147.0,"Objects":[{"StartTime":197147.0,"EndTime":197147.0,"Column":2}]},{"StartTime":197204.0,"Objects":[{"StartTime":197204.0,"EndTime":197204.0,"Column":5}]},{"StartTime":197262.0,"Objects":[{"StartTime":197262.0,"EndTime":197262.0,"Column":1}]},{"StartTime":197320.0,"Objects":[{"StartTime":197320.0,"EndTime":197320.0,"Column":4}]},{"StartTime":197377.0,"Objects":[{"StartTime":197377.0,"EndTime":197377.0,"Column":1}]},{"StartTime":197435.0,"Objects":[{"StartTime":197435.0,"EndTime":197435.0,"Column":2}]},{"StartTime":197493.0,"Objects":[{"StartTime":197493.0,"EndTime":197493.0,"Column":3}]},{"StartTime":197551.0,"Objects":[{"StartTime":197551.0,"EndTime":197551.0,"Column":5}]},{"StartTime":197608.0,"Objects":[{"StartTime":197608.0,"EndTime":197608.0,"Column":4}]},{"StartTime":197666.0,"Objects":[{"StartTime":197666.0,"EndTime":197896.0,"Column":3},{"StartTime":197666.0,"EndTime":197896.0,"Column":2}]},{"StartTime":198012.0,"Objects":[{"StartTime":198012.0,"EndTime":198012.0,"Column":4}]},{"StartTime":198127.0,"Objects":[{"StartTime":198127.0,"EndTime":198357.0,"Column":2}]},{"StartTime":198473.0,"Objects":[{"StartTime":198473.0,"EndTime":198473.0,"Column":4},{"StartTime":198473.0,"EndTime":198473.0,"Column":5}]},{"StartTime":198589.0,"Objects":[{"StartTime":198589.0,"EndTime":198704.0,"Column":2}]},{"StartTime":198820.0,"Objects":[{"StartTime":198820.0,"EndTime":198820.0,"Column":0},{"StartTime":198820.0,"EndTime":198820.0,"Column":1},{"StartTime":198820.0,"EndTime":198820.0,"Column":3}]},{"StartTime":199051.0,"Objects":[{"StartTime":199051.0,"EndTime":199166.0,"Column":6}]},{"StartTime":199281.0,"Objects":[{"StartTime":199281.0,"EndTime":199281.0,"Column":2},{"StartTime":199281.0,"EndTime":199281.0,"Column":3}]},{"StartTime":199396.0,"Objects":[{"StartTime":199396.0,"EndTime":199396.0,"Column":1}]},{"StartTime":199512.0,"Objects":[{"StartTime":199512.0,"EndTime":199742.0,"Column":2},{"StartTime":199512.0,"EndTime":199742.0,"Column":5}]},{"StartTime":199858.0,"Objects":[{"StartTime":199858.0,"EndTime":199858.0,"Column":1},{"StartTime":199858.0,"EndTime":199858.0,"Column":4}]},{"StartTime":199974.0,"Objects":[{"StartTime":199974.0,"EndTime":200089.0,"Column":6}]},{"StartTime":200204.0,"Objects":[{"StartTime":200204.0,"EndTime":200319.0,"Column":3},{"StartTime":200204.0,"EndTime":200319.0,"Column":4}]},{"StartTime":200435.0,"Objects":[{"StartTime":200435.0,"EndTime":200435.0,"Column":1}]},{"StartTime":200551.0,"Objects":[{"StartTime":200551.0,"EndTime":200551.0,"Column":2}]},{"StartTime":200666.0,"Objects":[{"StartTime":200666.0,"EndTime":200781.0,"Column":4},{"StartTime":200666.0,"EndTime":200781.0,"Column":1}]},{"StartTime":200897.0,"Objects":[{"StartTime":200897.0,"EndTime":201012.0,"Column":6},{"StartTime":200897.0,"EndTime":201012.0,"Column":3}]},{"StartTime":201127.0,"Objects":[{"StartTime":201127.0,"EndTime":201242.0,"Column":0},{"StartTime":201127.0,"EndTime":201242.0,"Column":5},{"StartTime":201127.0,"EndTime":201242.0,"Column":2}]},{"StartTime":201358.0,"Objects":[{"StartTime":201358.0,"EndTime":201588.0,"Column":6}]},{"StartTime":201704.0,"Objects":[{"StartTime":201704.0,"EndTime":201704.0,"Column":3},{"StartTime":201704.0,"EndTime":201704.0,"Column":1}]},{"StartTime":201820.0,"Objects":[{"StartTime":201820.0,"EndTime":201935.0,"Column":6},{"StartTime":201820.0,"EndTime":201935.0,"Column":5}]},{"StartTime":202051.0,"Objects":[{"StartTime":202051.0,"EndTime":202166.0,"Column":2},{"StartTime":202051.0,"EndTime":202166.0,"Column":4}]},{"StartTime":202281.0,"Objects":[{"StartTime":202281.0,"EndTime":202281.0,"Column":5}]},{"StartTime":202397.0,"Objects":[{"StartTime":202397.0,"EndTime":202397.0,"Column":6},{"StartTime":202397.0,"EndTime":202397.0,"Column":3}]},{"StartTime":202512.0,"Objects":[{"StartTime":202512.0,"EndTime":202627.0,"Column":0},{"StartTime":202512.0,"EndTime":202627.0,"Column":2}]},{"StartTime":202743.0,"Objects":[{"StartTime":202743.0,"EndTime":202973.0,"Column":6},{"StartTime":202743.0,"EndTime":202973.0,"Column":4}]},{"StartTime":203089.0,"Objects":[{"StartTime":203089.0,"EndTime":203089.0,"Column":3},{"StartTime":203089.0,"EndTime":203089.0,"Column":2}]},{"StartTime":203204.0,"Objects":[{"StartTime":203204.0,"EndTime":203319.0,"Column":5}]},{"StartTime":203435.0,"Objects":[{"StartTime":203435.0,"EndTime":203550.0,"Column":6},{"StartTime":203435.0,"EndTime":203550.0,"Column":0},{"StartTime":203435.0,"EndTime":203550.0,"Column":1}]},{"StartTime":203666.0,"Objects":[{"StartTime":203666.0,"EndTime":203896.0,"Column":4},{"StartTime":203666.0,"EndTime":203896.0,"Column":2}]},{"StartTime":204012.0,"Objects":[{"StartTime":204012.0,"EndTime":204012.0,"Column":1}]},{"StartTime":204127.0,"Objects":[{"StartTime":204127.0,"EndTime":204242.0,"Column":6},{"StartTime":204127.0,"EndTime":204242.0,"Column":3},{"StartTime":204127.0,"EndTime":204242.0,"Column":0}]},{"StartTime":204358.0,"Objects":[{"StartTime":204358.0,"EndTime":204358.0,"Column":4},{"StartTime":204358.0,"EndTime":204358.0,"Column":5}]},{"StartTime":204474.0,"Objects":[{"StartTime":204474.0,"EndTime":204474.0,"Column":2}]},{"StartTime":204589.0,"Objects":[{"StartTime":204589.0,"EndTime":204704.0,"Column":1}]},{"StartTime":204820.0,"Objects":[{"StartTime":204820.0,"EndTime":204820.0,"Column":3},{"StartTime":204820.0,"EndTime":204820.0,"Column":4}]},{"StartTime":204935.0,"Objects":[{"StartTime":204935.0,"EndTime":204935.0,"Column":5},{"StartTime":204935.0,"EndTime":204935.0,"Column":6},{"StartTime":204935.0,"EndTime":204935.0,"Column":2}]},{"StartTime":205051.0,"Objects":[{"StartTime":205051.0,"EndTime":205281.0,"Column":0},{"StartTime":205051.0,"EndTime":205281.0,"Column":3}]},{"StartTime":205397.0,"Objects":[{"StartTime":205397.0,"EndTime":205397.0,"Column":4},{"StartTime":205397.0,"EndTime":205397.0,"Column":6}]},{"StartTime":205512.0,"Objects":[{"StartTime":205512.0,"EndTime":205627.0,"Column":3},{"StartTime":205512.0,"EndTime":205627.0,"Column":1}]},{"StartTime":205743.0,"Objects":[{"StartTime":205743.0,"EndTime":205858.0,"Column":2},{"StartTime":205743.0,"EndTime":205858.0,"Column":5}]},{"StartTime":205974.0,"Objects":[{"StartTime":205974.0,"EndTime":206089.0,"Column":0},{"StartTime":205974.0,"EndTime":206089.0,"Column":3}]},{"StartTime":206204.0,"Objects":[{"StartTime":206204.0,"EndTime":206204.0,"Column":2},{"StartTime":206204.0,"EndTime":206204.0,"Column":4}]},{"StartTime":206320.0,"Objects":[{"StartTime":206320.0,"EndTime":206320.0,"Column":3},{"StartTime":206320.0,"EndTime":206320.0,"Column":0}]},{"StartTime":206435.0,"Objects":[{"StartTime":206435.0,"EndTime":206665.0,"Column":4}]},{"StartTime":206781.0,"Objects":[{"StartTime":206781.0,"EndTime":206781.0,"Column":5},{"StartTime":206781.0,"EndTime":206781.0,"Column":0}]},{"StartTime":206897.0,"Objects":[{"StartTime":206897.0,"EndTime":207127.0,"Column":1}]},{"StartTime":207358.0,"Objects":[{"StartTime":207358.0,"EndTime":207473.0,"Column":6}]},{"StartTime":207589.0,"Objects":[{"StartTime":207589.0,"EndTime":207704.0,"Column":2},{"StartTime":207589.0,"EndTime":207704.0,"Column":3}]},{"StartTime":207820.0,"Objects":[{"StartTime":207820.0,"EndTime":208050.0,"Column":1},{"StartTime":207820.0,"EndTime":208050.0,"Column":0}]},{"StartTime":208166.0,"Objects":[{"StartTime":208166.0,"EndTime":208166.0,"Column":3},{"StartTime":208166.0,"EndTime":208166.0,"Column":4}]},{"StartTime":208281.0,"Objects":[{"StartTime":208281.0,"EndTime":208396.0,"Column":0},{"StartTime":208281.0,"EndTime":208396.0,"Column":6}]},{"StartTime":208512.0,"Objects":[{"StartTime":208512.0,"EndTime":208627.0,"Column":1},{"StartTime":208512.0,"EndTime":208627.0,"Column":2}]},{"StartTime":208743.0,"Objects":[{"StartTime":208743.0,"EndTime":209204.0,"Column":6},{"StartTime":208743.0,"EndTime":208743.0,"Column":0},{"StartTime":208973.0,"EndTime":208973.0,"Column":0},{"StartTime":209203.0,"EndTime":209203.0,"Column":0}]},{"StartTime":209320.0,"Objects":[{"StartTime":209320.0,"EndTime":209320.0,"Column":4},{"StartTime":209320.0,"EndTime":209320.0,"Column":1},{"StartTime":209320.0,"EndTime":209320.0,"Column":5}]},{"StartTime":209435.0,"Objects":[{"StartTime":209435.0,"EndTime":209550.0,"Column":2},{"StartTime":209435.0,"EndTime":209550.0,"Column":3}]},{"StartTime":209666.0,"Objects":[{"StartTime":209666.0,"EndTime":209781.0,"Column":4},{"StartTime":209666.0,"EndTime":209781.0,"Column":1}]},{"StartTime":209897.0,"Objects":[{"StartTime":209897.0,"EndTime":210012.0,"Column":5},{"StartTime":209897.0,"EndTime":210012.0,"Column":6}]},{"StartTime":210127.0,"Objects":[{"StartTime":210127.0,"EndTime":210127.0,"Column":2},{"StartTime":210127.0,"EndTime":210127.0,"Column":0},{"StartTime":210127.0,"EndTime":210127.0,"Column":3}]},{"StartTime":210243.0,"Objects":[{"StartTime":210243.0,"EndTime":210243.0,"Column":6}]},{"StartTime":210358.0,"Objects":[{"StartTime":210358.0,"EndTime":210358.0,"Column":5},{"StartTime":210358.0,"EndTime":210358.0,"Column":0},{"StartTime":210358.0,"EndTime":210358.0,"Column":1}]},{"StartTime":210589.0,"Objects":[{"StartTime":210589.0,"EndTime":210704.0,"Column":2}]},{"StartTime":210820.0,"Objects":[{"StartTime":210820.0,"EndTime":210820.0,"Column":3},{"StartTime":210820.0,"EndTime":210820.0,"Column":4}]},{"StartTime":210935.0,"Objects":[{"StartTime":210935.0,"EndTime":210935.0,"Column":1},{"StartTime":210935.0,"EndTime":210935.0,"Column":6}]},{"StartTime":211051.0,"Objects":[{"StartTime":211051.0,"EndTime":211166.0,"Column":4},{"StartTime":211051.0,"EndTime":211166.0,"Column":0}]},{"StartTime":211281.0,"Objects":[{"StartTime":211281.0,"EndTime":211281.0,"Column":2},{"StartTime":211281.0,"EndTime":211281.0,"Column":3}]},{"StartTime":211397.0,"Objects":[{"StartTime":211397.0,"EndTime":211397.0,"Column":4},{"StartTime":211397.0,"EndTime":211397.0,"Column":1}]},{"StartTime":211512.0,"Objects":[{"StartTime":211512.0,"EndTime":211742.0,"Column":3},{"StartTime":211512.0,"EndTime":211742.0,"Column":5}]},{"StartTime":211858.0,"Objects":[{"StartTime":211858.0,"EndTime":211858.0,"Column":2},{"StartTime":211858.0,"EndTime":211858.0,"Column":6}]},{"StartTime":211974.0,"Objects":[{"StartTime":211974.0,"EndTime":211974.0,"Column":3},{"StartTime":211974.0,"EndTime":211974.0,"Column":4}]},{"StartTime":212089.0,"Objects":[{"StartTime":212089.0,"EndTime":212089.0,"Column":6}]},{"StartTime":212204.0,"Objects":[{"StartTime":212204.0,"EndTime":212204.0,"Column":3},{"StartTime":212204.0,"EndTime":212204.0,"Column":4},{"StartTime":212204.0,"EndTime":212204.0,"Column":5}]},{"StartTime":212320.0,"Objects":[{"StartTime":212320.0,"EndTime":212320.0,"Column":1},{"StartTime":212320.0,"EndTime":212320.0,"Column":2}]},{"StartTime":212435.0,"Objects":[{"StartTime":212435.0,"EndTime":212665.0,"Column":6},{"StartTime":212435.0,"EndTime":212665.0,"Column":0}]},{"StartTime":212781.0,"Objects":[{"StartTime":212781.0,"EndTime":212781.0,"Column":1}]},{"StartTime":212897.0,"Objects":[{"StartTime":212897.0,"EndTime":213127.0,"Column":2}]},{"StartTime":213243.0,"Objects":[{"StartTime":213243.0,"EndTime":213243.0,"Column":0},{"StartTime":213243.0,"EndTime":213243.0,"Column":1},{"StartTime":213243.0,"EndTime":213243.0,"Column":3}]},{"StartTime":213358.0,"Objects":[{"StartTime":213358.0,"EndTime":213473.0,"Column":6},{"StartTime":213358.0,"EndTime":213473.0,"Column":4}]},{"StartTime":213589.0,"Objects":[{"StartTime":213589.0,"EndTime":213589.0,"Column":1},{"StartTime":213589.0,"EndTime":213589.0,"Column":2}]},{"StartTime":213820.0,"Objects":[{"StartTime":213820.0,"EndTime":213935.0,"Column":4},{"StartTime":213820.0,"EndTime":213935.0,"Column":6}]},{"StartTime":214051.0,"Objects":[{"StartTime":214051.0,"EndTime":214051.0,"Column":0},{"StartTime":214051.0,"EndTime":214051.0,"Column":1}]},{"StartTime":214166.0,"Objects":[{"StartTime":214166.0,"EndTime":214166.0,"Column":3},{"StartTime":214166.0,"EndTime":214166.0,"Column":5}]},{"StartTime":214281.0,"Objects":[{"StartTime":214281.0,"EndTime":214396.0,"Column":2},{"StartTime":214281.0,"EndTime":214396.0,"Column":0}]},{"StartTime":214512.0,"Objects":[{"StartTime":214512.0,"EndTime":214512.0,"Column":1},{"StartTime":214512.0,"EndTime":214512.0,"Column":3}]},{"StartTime":214628.0,"Objects":[{"StartTime":214628.0,"EndTime":214628.0,"Column":4},{"StartTime":214628.0,"EndTime":214628.0,"Column":6}]},{"StartTime":214743.0,"Objects":[{"StartTime":214743.0,"EndTime":214858.0,"Column":5}]},{"StartTime":214974.0,"Objects":[{"StartTime":214974.0,"EndTime":215089.0,"Column":6},{"StartTime":214974.0,"EndTime":215089.0,"Column":3}]},{"StartTime":215204.0,"Objects":[{"StartTime":215204.0,"EndTime":215204.0,"Column":2},{"StartTime":215204.0,"EndTime":215204.0,"Column":5},{"StartTime":215204.0,"EndTime":215204.0,"Column":0}]},{"StartTime":215320.0,"Objects":[{"StartTime":215320.0,"EndTime":215320.0,"Column":4},{"StartTime":215320.0,"EndTime":215320.0,"Column":1}]},{"StartTime":215435.0,"Objects":[{"StartTime":215435.0,"EndTime":215550.0,"Column":0},{"StartTime":215435.0,"EndTime":215550.0,"Column":3}]},{"StartTime":215666.0,"Objects":[{"StartTime":215666.0,"EndTime":215896.0,"Column":1},{"StartTime":215666.0,"EndTime":215896.0,"Column":5},{"StartTime":215666.0,"EndTime":215896.0,"Column":6}]},{"StartTime":216012.0,"Objects":[{"StartTime":216012.0,"EndTime":216012.0,"Column":0},{"StartTime":216012.0,"EndTime":216012.0,"Column":2}]},{"StartTime":216070.0,"Objects":[{"StartTime":216070.0,"EndTime":216070.0,"Column":5}]},{"StartTime":216127.0,"Objects":[{"StartTime":216127.0,"EndTime":216242.0,"Column":0}]},{"StartTime":216358.0,"Objects":[{"StartTime":216358.0,"EndTime":216473.0,"Column":4},{"StartTime":216358.0,"EndTime":216473.0,"Column":5}]},{"StartTime":216589.0,"Objects":[{"StartTime":216589.0,"EndTime":216819.0,"Column":3}]},{"StartTime":216935.0,"Objects":[{"StartTime":216935.0,"EndTime":216935.0,"Column":0}]},{"StartTime":217051.0,"Objects":[{"StartTime":217051.0,"EndTime":217166.0,"Column":2}]},{"StartTime":217281.0,"Objects":[{"StartTime":217281.0,"EndTime":217511.0,"Column":3},{"StartTime":217281.0,"EndTime":217511.0,"Column":5}]},{"StartTime":217627.0,"Objects":[{"StartTime":217627.0,"EndTime":217742.0,"Column":0},{"StartTime":217627.0,"EndTime":217742.0,"Column":4},{"StartTime":217627.0,"EndTime":217742.0,"Column":6}]},{"StartTime":217858.0,"Objects":[{"StartTime":217858.0,"EndTime":217858.0,"Column":1},{"StartTime":217858.0,"EndTime":217858.0,"Column":2}]},{"StartTime":217974.0,"Objects":[{"StartTime":217974.0,"EndTime":218089.0,"Column":0},{"StartTime":217974.0,"EndTime":218089.0,"Column":6}]},{"StartTime":218204.0,"Objects":[{"StartTime":218204.0,"EndTime":218319.0,"Column":5},{"StartTime":218204.0,"EndTime":218319.0,"Column":4}]},{"StartTime":218435.0,"Objects":[{"StartTime":218435.0,"EndTime":218550.0,"Column":1},{"StartTime":218435.0,"EndTime":218550.0,"Column":2},{"StartTime":218435.0,"EndTime":218550.0,"Column":6}]},{"StartTime":218666.0,"Objects":[{"StartTime":218666.0,"EndTime":218781.0,"Column":4},{"StartTime":218666.0,"EndTime":218781.0,"Column":3},{"StartTime":218666.0,"EndTime":218781.0,"Column":5}]},{"StartTime":218897.0,"Objects":[{"StartTime":218897.0,"EndTime":219070.0,"Column":6},{"StartTime":218897.0,"EndTime":219070.0,"Column":0},{"StartTime":218897.0,"EndTime":219070.0,"Column":2}]},{"StartTime":219127.0,"Objects":[{"StartTime":219127.0,"EndTime":219300.0,"Column":1},{"StartTime":219127.0,"EndTime":219300.0,"Column":3}]},{"StartTime":219358.0,"Objects":[{"StartTime":219358.0,"EndTime":219531.0,"Column":0}]},{"StartTime":219589.0,"Objects":[{"StartTime":219589.0,"EndTime":219704.0,"Column":6},{"StartTime":219589.0,"EndTime":219704.0,"Column":3}]},{"StartTime":219820.0,"Objects":[{"StartTime":219820.0,"EndTime":220050.0,"Column":5}]},{"StartTime":220166.0,"Objects":[{"StartTime":220166.0,"EndTime":220166.0,"Column":0},{"StartTime":220166.0,"EndTime":220166.0,"Column":6}]},{"StartTime":220281.0,"Objects":[{"StartTime":220281.0,"EndTime":220396.0,"Column":2},{"StartTime":220281.0,"EndTime":220396.0,"Column":1},{"StartTime":220281.0,"EndTime":220396.0,"Column":4}]},{"StartTime":220512.0,"Objects":[{"StartTime":220512.0,"EndTime":220627.0,"Column":0},{"StartTime":220512.0,"EndTime":220627.0,"Column":5}]},{"StartTime":220743.0,"Objects":[{"StartTime":220743.0,"EndTime":220858.0,"Column":6},{"StartTime":220743.0,"EndTime":220858.0,"Column":2}]},{"StartTime":220974.0,"Objects":[{"StartTime":220974.0,"EndTime":220974.0,"Column":3},{"StartTime":220974.0,"EndTime":220974.0,"Column":4}]},{"StartTime":221089.0,"Objects":[{"StartTime":221089.0,"EndTime":221089.0,"Column":1},{"StartTime":221089.0,"EndTime":221089.0,"Column":6}]},{"StartTime":221204.0,"Objects":[{"StartTime":221204.0,"EndTime":221434.0,"Column":4}]},{"StartTime":221551.0,"Objects":[{"StartTime":221551.0,"EndTime":221551.0,"Column":5},{"StartTime":221551.0,"EndTime":221551.0,"Column":6}]},{"StartTime":221608.0,"Objects":[{"StartTime":221608.0,"EndTime":221608.0,"Column":1}]},{"StartTime":221666.0,"Objects":[{"StartTime":221666.0,"EndTime":221781.0,"Column":4}]},{"StartTime":221897.0,"Objects":[{"StartTime":221897.0,"EndTime":222127.0,"Column":5},{"StartTime":221897.0,"EndTime":222127.0,"Column":2}]},{"StartTime":222243.0,"Objects":[{"StartTime":222243.0,"EndTime":222243.0,"Column":1},{"StartTime":222243.0,"EndTime":222243.0,"Column":3}]},{"StartTime":222358.0,"Objects":[{"StartTime":222358.0,"EndTime":222473.0,"Column":2},{"StartTime":222358.0,"EndTime":222473.0,"Column":4}]},{"StartTime":222589.0,"Objects":[{"StartTime":222589.0,"EndTime":222704.0,"Column":5},{"StartTime":222589.0,"EndTime":222704.0,"Column":6},{"StartTime":222589.0,"EndTime":222704.0,"Column":1}]},{"StartTime":222820.0,"Objects":[{"StartTime":222820.0,"EndTime":222935.0,"Column":2},{"StartTime":222820.0,"EndTime":222935.0,"Column":0}]},{"StartTime":223051.0,"Objects":[{"StartTime":223051.0,"EndTime":223166.0,"Column":4},{"StartTime":223051.0,"EndTime":223166.0,"Column":3}]},{"StartTime":223281.0,"Objects":[{"StartTime":223281.0,"EndTime":223281.0,"Column":1},{"StartTime":223281.0,"EndTime":223281.0,"Column":2}]},{"StartTime":223397.0,"Objects":[{"StartTime":223397.0,"EndTime":223397.0,"Column":4},{"StartTime":223397.0,"EndTime":223397.0,"Column":5}]},{"StartTime":223512.0,"Objects":[{"StartTime":223512.0,"EndTime":223742.0,"Column":2},{"StartTime":223512.0,"EndTime":223742.0,"Column":6},{"StartTime":223512.0,"EndTime":223742.0,"Column":3}]},{"StartTime":223858.0,"Objects":[{"StartTime":223858.0,"EndTime":224088.0,"Column":4},{"StartTime":223858.0,"EndTime":224088.0,"Column":0},{"StartTime":223858.0,"EndTime":224088.0,"Column":5}]},{"StartTime":224204.0,"Objects":[{"StartTime":224204.0,"EndTime":224319.0,"Column":6},{"StartTime":224204.0,"EndTime":224319.0,"Column":1},{"StartTime":224204.0,"EndTime":224319.0,"Column":3}]},{"StartTime":224435.0,"Objects":[{"StartTime":224435.0,"EndTime":224435.0,"Column":0},{"StartTime":224435.0,"EndTime":224435.0,"Column":2}]},{"StartTime":224551.0,"Objects":[{"StartTime":224551.0,"EndTime":224551.0,"Column":4}]},{"StartTime":224666.0,"Objects":[{"StartTime":224666.0,"EndTime":224781.0,"Column":1},{"StartTime":224666.0,"EndTime":224781.0,"Column":2}]},{"StartTime":224897.0,"Objects":[{"StartTime":224897.0,"EndTime":224897.0,"Column":5}]},{"StartTime":225012.0,"Objects":[{"StartTime":225012.0,"EndTime":225012.0,"Column":3}]},{"StartTime":225127.0,"Objects":[{"StartTime":225127.0,"EndTime":225242.0,"Column":5},{"StartTime":225127.0,"EndTime":225242.0,"Column":6}]},{"StartTime":225358.0,"Objects":[{"StartTime":225358.0,"EndTime":225588.0,"Column":1}]},{"StartTime":225704.0,"Objects":[{"StartTime":225704.0,"EndTime":225934.0,"Column":0},{"StartTime":225704.0,"EndTime":225934.0,"Column":5}]},{"StartTime":226051.0,"Objects":[{"StartTime":226051.0,"EndTime":226166.0,"Column":3},{"StartTime":226051.0,"EndTime":226166.0,"Column":4}]},{"StartTime":226281.0,"Objects":[{"StartTime":226281.0,"EndTime":226281.0,"Column":5},{"StartTime":226281.0,"EndTime":226281.0,"Column":2}]},{"StartTime":226512.0,"Objects":[{"StartTime":226512.0,"EndTime":226512.0,"Column":4},{"StartTime":226512.0,"EndTime":226512.0,"Column":1}]},{"StartTime":226627.0,"Objects":[{"StartTime":226627.0,"EndTime":226627.0,"Column":6}]},{"StartTime":226743.0,"Objects":[{"StartTime":226743.0,"EndTime":226743.0,"Column":3}]},{"StartTime":226858.0,"Objects":[{"StartTime":226858.0,"EndTime":226858.0,"Column":5},{"StartTime":226858.0,"EndTime":226858.0,"Column":6}]},{"StartTime":226974.0,"Objects":[{"StartTime":226974.0,"EndTime":226974.0,"Column":0},{"StartTime":226974.0,"EndTime":226974.0,"Column":1}]},{"StartTime":227089.0,"Objects":[{"StartTime":227089.0,"EndTime":227089.0,"Column":5},{"StartTime":227089.0,"EndTime":227089.0,"Column":6}]},{"StartTime":227204.0,"Objects":[{"StartTime":227204.0,"EndTime":227896.0,"Column":3},{"StartTime":227204.0,"EndTime":227896.0,"Column":2}]},{"StartTime":228588.0,"Objects":[{"StartTime":228588.0,"EndTime":229049.0,"Column":5}]},{"StartTime":229280.0,"Objects":[{"StartTime":229280.0,"EndTime":229741.0,"Column":4}]},{"StartTime":229973.0,"Objects":[{"StartTime":229973.0,"EndTime":229973.0,"Column":4},{"StartTime":229973.0,"EndTime":229973.0,"Column":1}]},{"StartTime":230204.0,"Objects":[{"StartTime":230204.0,"EndTime":230204.0,"Column":3}]},{"StartTime":230434.0,"Objects":[{"StartTime":230434.0,"EndTime":230434.0,"Column":2}]},{"StartTime":230665.0,"Objects":[{"StartTime":230665.0,"EndTime":230665.0,"Column":2},{"StartTime":230665.0,"EndTime":230665.0,"Column":6}]},{"StartTime":230896.0,"Objects":[{"StartTime":230896.0,"EndTime":231588.0,"Column":5}]},{"StartTime":232280.0,"Objects":[{"StartTime":232280.0,"EndTime":232741.0,"Column":3}]},{"StartTime":232973.0,"Objects":[{"StartTime":232973.0,"EndTime":233434.0,"Column":4},{"StartTime":232973.0,"EndTime":233434.0,"Column":5}]},{"StartTime":233665.0,"Objects":[{"StartTime":233665.0,"EndTime":233665.0,"Column":2}]},{"StartTime":233896.0,"Objects":[{"StartTime":233896.0,"EndTime":233896.0,"Column":4}]},{"StartTime":234127.0,"Objects":[{"StartTime":234127.0,"EndTime":234127.0,"Column":4},{"StartTime":234127.0,"EndTime":234127.0,"Column":3}]},{"StartTime":234357.0,"Objects":[{"StartTime":234357.0,"EndTime":234357.0,"Column":3}]},{"StartTime":234588.0,"Objects":[{"StartTime":234588.0,"EndTime":235280.0,"Column":4},{"StartTime":234588.0,"EndTime":235280.0,"Column":1},{"StartTime":234588.0,"EndTime":235280.0,"Column":2}]},{"StartTime":235973.0,"Objects":[{"StartTime":235973.0,"EndTime":236434.0,"Column":3},{"StartTime":235973.0,"EndTime":236434.0,"Column":6},{"StartTime":235973.0,"EndTime":236434.0,"Column":5}]},{"StartTime":236665.0,"Objects":[{"StartTime":236665.0,"EndTime":237126.0,"Column":0},{"StartTime":236665.0,"EndTime":237126.0,"Column":2}]},{"StartTime":237357.0,"Objects":[{"StartTime":237357.0,"EndTime":237587.0,"Column":3}]},{"StartTime":237819.0,"Objects":[{"StartTime":237819.0,"EndTime":237819.0,"Column":1}]},{"StartTime":238050.0,"Objects":[{"StartTime":238050.0,"EndTime":238050.0,"Column":4}]},{"StartTime":238280.0,"Objects":[{"StartTime":238280.0,"EndTime":238972.0,"Column":1}]},{"StartTime":239204.0,"Objects":[{"StartTime":239204.0,"EndTime":239204.0,"Column":4},{"StartTime":239204.0,"EndTime":239204.0,"Column":1},{"StartTime":239204.0,"EndTime":239204.0,"Column":6}]},{"StartTime":239434.0,"Objects":[{"StartTime":239434.0,"EndTime":239434.0,"Column":5}]},{"StartTime":239665.0,"Objects":[{"StartTime":239665.0,"EndTime":239665.0,"Column":6},{"StartTime":239665.0,"EndTime":239665.0,"Column":3}]},{"StartTime":239896.0,"Objects":[{"StartTime":239896.0,"EndTime":239896.0,"Column":5},{"StartTime":239896.0,"EndTime":239896.0,"Column":0},{"StartTime":239896.0,"EndTime":239896.0,"Column":6}]},{"StartTime":240127.0,"Objects":[{"StartTime":240127.0,"EndTime":240127.0,"Column":6},{"StartTime":240127.0,"EndTime":240127.0,"Column":3}]},{"StartTime":240357.0,"Objects":[{"StartTime":240357.0,"EndTime":240357.0,"Column":4}]},{"StartTime":240588.0,"Objects":[{"StartTime":240588.0,"EndTime":240588.0,"Column":5}]},{"StartTime":240819.0,"Objects":[{"StartTime":240819.0,"EndTime":240819.0,"Column":5},{"StartTime":240819.0,"EndTime":240819.0,"Column":3},{"StartTime":240819.0,"EndTime":240819.0,"Column":2}]},{"StartTime":241050.0,"Objects":[{"StartTime":241050.0,"EndTime":241050.0,"Column":3}]},{"StartTime":241280.0,"Objects":[{"StartTime":241280.0,"EndTime":241280.0,"Column":2}]},{"StartTime":241511.0,"Objects":[{"StartTime":241511.0,"EndTime":241511.0,"Column":2}]},{"StartTime":241742.0,"Objects":[{"StartTime":241742.0,"EndTime":241742.0,"Column":2},{"StartTime":241742.0,"EndTime":241742.0,"Column":0}]},{"StartTime":241973.0,"Objects":[{"StartTime":241973.0,"EndTime":242434.0,"Column":1},{"StartTime":241973.0,"EndTime":242434.0,"Column":6}]},{"StartTime":242665.0,"Objects":[{"StartTime":242665.0,"EndTime":242895.0,"Column":4}]},{"StartTime":243127.0,"Objects":[{"StartTime":243127.0,"EndTime":243127.0,"Column":1},{"StartTime":243127.0,"EndTime":243127.0,"Column":2}]},{"StartTime":243357.0,"Objects":[{"StartTime":243357.0,"EndTime":243357.0,"Column":1}]},{"StartTime":243588.0,"Objects":[{"StartTime":243588.0,"EndTime":243588.0,"Column":2},{"StartTime":243588.0,"EndTime":243588.0,"Column":3}]},{"StartTime":243819.0,"Objects":[{"StartTime":243819.0,"EndTime":243819.0,"Column":4}]},{"StartTime":244050.0,"Objects":[{"StartTime":244050.0,"EndTime":244280.0,"Column":1}]},{"StartTime":244511.0,"Objects":[{"StartTime":244511.0,"EndTime":244972.0,"Column":5}]},{"StartTime":245204.0,"Objects":[{"StartTime":245204.0,"EndTime":245204.0,"Column":4}]},{"StartTime":245434.0,"Objects":[{"StartTime":245434.0,"EndTime":246126.0,"Column":3},{"StartTime":245434.0,"EndTime":246126.0,"Column":6}]},{"StartTime":246357.0,"Objects":[{"StartTime":246357.0,"EndTime":246357.0,"Column":3},{"StartTime":246357.0,"EndTime":246357.0,"Column":0}]},{"StartTime":246588.0,"Objects":[{"StartTime":246588.0,"EndTime":246588.0,"Column":2},{"StartTime":246588.0,"EndTime":246588.0,"Column":6}]},{"StartTime":246819.0,"Objects":[{"StartTime":246819.0,"EndTime":247049.0,"Column":1},{"StartTime":246819.0,"EndTime":247049.0,"Column":4}]},{"StartTime":247280.0,"Objects":[{"StartTime":247280.0,"EndTime":247280.0,"Column":1}]},{"StartTime":247511.0,"Objects":[{"StartTime":247511.0,"EndTime":247741.0,"Column":4}]},{"StartTime":247973.0,"Objects":[{"StartTime":247973.0,"EndTime":248434.0,"Column":1},{"StartTime":248203.0,"EndTime":248203.0,"Column":3},{"StartTime":248433.0,"EndTime":248433.0,"Column":3}]},{"StartTime":248665.0,"Objects":[{"StartTime":248665.0,"EndTime":248665.0,"Column":4}]},{"StartTime":248896.0,"Objects":[{"StartTime":248896.0,"EndTime":248896.0,"Column":5},{"StartTime":248896.0,"EndTime":248896.0,"Column":4}]},{"StartTime":249127.0,"Objects":[{"StartTime":249127.0,"EndTime":249357.0,"Column":3}]},{"StartTime":249588.0,"Objects":[{"StartTime":249588.0,"EndTime":249588.0,"Column":2}]},{"StartTime":249819.0,"Objects":[{"StartTime":249819.0,"EndTime":249819.0,"Column":3}]},{"StartTime":250050.0,"Objects":[{"StartTime":250050.0,"EndTime":250280.0,"Column":1},{"StartTime":250050.0,"EndTime":250280.0,"Column":0}]},{"StartTime":250511.0,"Objects":[{"StartTime":250511.0,"EndTime":250511.0,"Column":5}]},{"StartTime":250742.0,"Objects":[{"StartTime":250742.0,"EndTime":251203.0,"Column":2},{"StartTime":250742.0,"EndTime":251203.0,"Column":4}]},{"StartTime":251550.0,"Objects":[{"StartTime":251550.0,"EndTime":251898.0,"Column":0}]},{"StartTime":252247.0,"Objects":[{"StartTime":252247.0,"EndTime":252247.0,"Column":2}]},{"StartTime":252702.0,"Objects":[{"StartTime":252702.0,"EndTime":253059.0,"Column":4},{"StartTime":252702.0,"EndTime":253059.0,"Column":6}]},{"StartTime":253506.0,"Objects":[{"StartTime":253506.0,"EndTime":253506.0,"Column":1}]},{"StartTime":254095.0,"Objects":[{"StartTime":254095.0,"EndTime":254661.0,"Column":4},{"StartTime":254095.0,"EndTime":254661.0,"Column":5}]},{"StartTime":255580.0,"Objects":[{"StartTime":255580.0,"EndTime":255580.0,"Column":0},{"StartTime":255580.0,"EndTime":255580.0,"Column":3},{"StartTime":255580.0,"EndTime":255580.0,"Column":5}]},{"StartTime":256480.0,"Objects":[{"StartTime":256480.0,"EndTime":257588.0,"Column":2}]},{"StartTime":257747.0,"Objects":[{"StartTime":257747.0,"EndTime":258697.0,"Column":1}]},{"StartTime":258892.0,"Objects":[{"StartTime":258892.0,"EndTime":263021.0,"Column":0}]},{"StartTime":263197.0,"Objects":[{"StartTime":263197.0,"EndTime":263427.0,"Column":3}]},{"StartTime":263543.0,"Objects":[{"StartTime":263543.0,"EndTime":263543.0,"Column":6},{"StartTime":263543.0,"EndTime":263543.0,"Column":0}]},{"StartTime":263658.0,"Objects":[{"StartTime":263658.0,"EndTime":263888.0,"Column":3}]},{"StartTime":264004.0,"Objects":[{"StartTime":264004.0,"EndTime":264004.0,"Column":5},{"StartTime":264004.0,"EndTime":264004.0,"Column":4}]},{"StartTime":264120.0,"Objects":[{"StartTime":264120.0,"EndTime":264235.0,"Column":0},{"StartTime":264120.0,"EndTime":264235.0,"Column":2}]},{"StartTime":264350.0,"Objects":[{"StartTime":264350.0,"EndTime":264465.0,"Column":5}]},{"StartTime":264581.0,"Objects":[{"StartTime":264581.0,"EndTime":264581.0,"Column":2}]},{"StartTime":264697.0,"Objects":[{"StartTime":264697.0,"EndTime":264697.0,"Column":1},{"StartTime":264697.0,"EndTime":264697.0,"Column":4}]},{"StartTime":264812.0,"Objects":[{"StartTime":264812.0,"EndTime":264812.0,"Column":0},{"StartTime":264812.0,"EndTime":264812.0,"Column":2}]},{"StartTime":264927.0,"Objects":[{"StartTime":264927.0,"EndTime":264927.0,"Column":5},{"StartTime":264927.0,"EndTime":264927.0,"Column":3}]},{"StartTime":265043.0,"Objects":[{"StartTime":265043.0,"EndTime":265273.0,"Column":2}]},{"StartTime":265389.0,"Objects":[{"StartTime":265389.0,"EndTime":265389.0,"Column":4}]},{"StartTime":265504.0,"Objects":[{"StartTime":265504.0,"EndTime":265734.0,"Column":5}]},{"StartTime":265850.0,"Objects":[{"StartTime":265850.0,"EndTime":265850.0,"Column":0}]},{"StartTime":265966.0,"Objects":[{"StartTime":265966.0,"EndTime":266081.0,"Column":4},{"StartTime":265966.0,"EndTime":266081.0,"Column":1}]},{"StartTime":266197.0,"Objects":[{"StartTime":266197.0,"EndTime":266312.0,"Column":5}]},{"StartTime":266427.0,"Objects":[{"StartTime":266427.0,"EndTime":266427.0,"Column":2},{"StartTime":266427.0,"EndTime":266427.0,"Column":1},{"StartTime":266427.0,"EndTime":266427.0,"Column":4}]},{"StartTime":266543.0,"Objects":[{"StartTime":266543.0,"EndTime":266543.0,"Column":0},{"StartTime":266543.0,"EndTime":266543.0,"Column":5}]},{"StartTime":266658.0,"Objects":[{"StartTime":266658.0,"EndTime":266658.0,"Column":6},{"StartTime":266658.0,"EndTime":266658.0,"Column":1}]},{"StartTime":266773.0,"Objects":[{"StartTime":266773.0,"EndTime":266773.0,"Column":5}]},{"StartTime":266889.0,"Objects":[{"StartTime":266889.0,"EndTime":267119.0,"Column":1},{"StartTime":266889.0,"EndTime":267119.0,"Column":2}]},{"StartTime":267235.0,"Objects":[{"StartTime":267235.0,"EndTime":267235.0,"Column":6}]},{"StartTime":267350.0,"Objects":[{"StartTime":267350.0,"EndTime":267465.0,"Column":5}]},{"StartTime":267581.0,"Objects":[{"StartTime":267581.0,"EndTime":267581.0,"Column":3},{"StartTime":267581.0,"EndTime":267581.0,"Column":4}]},{"StartTime":267697.0,"Objects":[{"StartTime":267697.0,"EndTime":267697.0,"Column":2},{"StartTime":267697.0,"EndTime":267697.0,"Column":1}]},{"StartTime":267812.0,"Objects":[{"StartTime":267812.0,"EndTime":267927.0,"Column":0},{"StartTime":267812.0,"EndTime":267927.0,"Column":4},{"StartTime":267812.0,"EndTime":267927.0,"Column":6}]},{"StartTime":268043.0,"Objects":[{"StartTime":268043.0,"EndTime":268158.0,"Column":1}]},{"StartTime":268273.0,"Objects":[{"StartTime":268273.0,"EndTime":268273.0,"Column":0}]},{"StartTime":268389.0,"Objects":[{"StartTime":268389.0,"EndTime":268389.0,"Column":6},{"StartTime":268389.0,"EndTime":268389.0,"Column":4}]},{"StartTime":268504.0,"Objects":[{"StartTime":268504.0,"EndTime":268504.0,"Column":0},{"StartTime":268504.0,"EndTime":268504.0,"Column":1}]},{"StartTime":268620.0,"Objects":[{"StartTime":268620.0,"EndTime":268620.0,"Column":2}]},{"StartTime":268735.0,"Objects":[{"StartTime":268735.0,"EndTime":268965.0,"Column":1},{"StartTime":268735.0,"EndTime":268965.0,"Column":4}]},{"StartTime":269081.0,"Objects":[{"StartTime":269081.0,"EndTime":269081.0,"Column":5}]},{"StartTime":269197.0,"Objects":[{"StartTime":269197.0,"EndTime":269312.0,"Column":6},{"StartTime":269197.0,"EndTime":269312.0,"Column":1}]},{"StartTime":269427.0,"Objects":[{"StartTime":269427.0,"EndTime":269427.0,"Column":3},{"StartTime":269427.0,"EndTime":269427.0,"Column":4}]},{"StartTime":269543.0,"Objects":[{"StartTime":269543.0,"EndTime":269543.0,"Column":5}]},{"StartTime":269658.0,"Objects":[{"StartTime":269658.0,"EndTime":269773.0,"Column":3},{"StartTime":269658.0,"EndTime":269773.0,"Column":0},{"StartTime":269658.0,"EndTime":269773.0,"Column":4}]},{"StartTime":269889.0,"Objects":[{"StartTime":269889.0,"EndTime":270004.0,"Column":1}]},{"StartTime":270120.0,"Objects":[{"StartTime":270120.0,"EndTime":270120.0,"Column":5}]},{"StartTime":270235.0,"Objects":[{"StartTime":270235.0,"EndTime":270235.0,"Column":4},{"StartTime":270235.0,"EndTime":270235.0,"Column":6}]},{"StartTime":270350.0,"Objects":[{"StartTime":270350.0,"EndTime":270350.0,"Column":3},{"StartTime":270350.0,"EndTime":270350.0,"Column":5}]},{"StartTime":270466.0,"Objects":[{"StartTime":270466.0,"EndTime":270466.0,"Column":2},{"StartTime":270466.0,"EndTime":270466.0,"Column":4}]},{"StartTime":270523.0,"Objects":[{"StartTime":270523.0,"EndTime":270523.0,"Column":5}]},{"StartTime":270581.0,"Objects":[{"StartTime":270581.0,"EndTime":270581.0,"Column":2}]},{"StartTime":270697.0,"Objects":[{"StartTime":270697.0,"EndTime":270697.0,"Column":1}]},{"StartTime":270812.0,"Objects":[{"StartTime":270812.0,"EndTime":270812.0,"Column":4}]},{"StartTime":270927.0,"Objects":[{"StartTime":270927.0,"EndTime":271042.0,"Column":6}]},{"StartTime":271158.0,"Objects":[{"StartTime":271158.0,"EndTime":271158.0,"Column":5}]},{"StartTime":271273.0,"Objects":[{"StartTime":271273.0,"EndTime":271273.0,"Column":2}]},{"StartTime":271331.0,"Objects":[{"StartTime":271331.0,"EndTime":271331.0,"Column":3}]},{"StartTime":271389.0,"Objects":[{"StartTime":271389.0,"EndTime":271389.0,"Column":1}]},{"StartTime":271447.0,"Objects":[{"StartTime":271447.0,"EndTime":271447.0,"Column":3}]},{"StartTime":271504.0,"Objects":[{"StartTime":271504.0,"EndTime":271619.0,"Column":1},{"StartTime":271504.0,"EndTime":271619.0,"Column":2},{"StartTime":271504.0,"EndTime":271619.0,"Column":5}]},{"StartTime":271735.0,"Objects":[{"StartTime":271735.0,"EndTime":271735.0,"Column":6},{"StartTime":271735.0,"EndTime":271735.0,"Column":0}]},{"StartTime":271793.0,"Objects":[{"StartTime":271793.0,"EndTime":271793.0,"Column":5}]},{"StartTime":271850.0,"Objects":[{"StartTime":271850.0,"EndTime":271850.0,"Column":4}]},{"StartTime":271908.0,"Objects":[{"StartTime":271908.0,"EndTime":271908.0,"Column":5}]},{"StartTime":271966.0,"Objects":[{"StartTime":271966.0,"EndTime":272139.0,"Column":6}]},{"StartTime":272197.0,"Objects":[{"StartTime":272197.0,"EndTime":272312.0,"Column":5},{"StartTime":272197.0,"EndTime":272312.0,"Column":2},{"StartTime":272197.0,"EndTime":272312.0,"Column":1}]},{"StartTime":272370.0,"Objects":[{"StartTime":272370.0,"EndTime":272370.0,"Column":3}]},{"StartTime":272427.0,"Objects":[{"StartTime":272427.0,"EndTime":272427.0,"Column":6}]},{"StartTime":272485.0,"Objects":[{"StartTime":272485.0,"EndTime":272485.0,"Column":5}]},{"StartTime":272543.0,"Objects":[{"StartTime":272543.0,"EndTime":272543.0,"Column":4}]},{"StartTime":272600.0,"Objects":[{"StartTime":272600.0,"EndTime":272600.0,"Column":3}]},{"StartTime":272658.0,"Objects":[{"StartTime":272658.0,"EndTime":272658.0,"Column":5}]},{"StartTime":272716.0,"Objects":[{"StartTime":272716.0,"EndTime":272716.0,"Column":2}]},{"StartTime":272773.0,"Objects":[{"StartTime":272773.0,"EndTime":272773.0,"Column":3}]},{"StartTime":272889.0,"Objects":[{"StartTime":272889.0,"EndTime":272889.0,"Column":0}]},{"StartTime":272947.0,"Objects":[{"StartTime":272947.0,"EndTime":272947.0,"Column":5}]},{"StartTime":273004.0,"Objects":[{"StartTime":273004.0,"EndTime":273004.0,"Column":0}]},{"StartTime":273062.0,"Objects":[{"StartTime":273062.0,"EndTime":273062.0,"Column":5}]},{"StartTime":273120.0,"Objects":[{"StartTime":273120.0,"EndTime":273120.0,"Column":0}]},{"StartTime":273177.0,"Objects":[{"StartTime":273177.0,"EndTime":273177.0,"Column":1}]},{"StartTime":273235.0,"Objects":[{"StartTime":273235.0,"EndTime":273235.0,"Column":0}]},{"StartTime":273350.0,"Objects":[{"StartTime":273350.0,"EndTime":273350.0,"Column":1}]},{"StartTime":273408.0,"Objects":[{"StartTime":273408.0,"EndTime":273408.0,"Column":2}]},{"StartTime":273466.0,"Objects":[{"StartTime":273466.0,"EndTime":273466.0,"Column":6}]},{"StartTime":273523.0,"Objects":[{"StartTime":273523.0,"EndTime":273523.0,"Column":2}]},{"StartTime":273581.0,"Objects":[{"StartTime":273581.0,"EndTime":273581.0,"Column":3}]},{"StartTime":273639.0,"Objects":[{"StartTime":273639.0,"EndTime":273639.0,"Column":5}]},{"StartTime":273697.0,"Objects":[{"StartTime":273697.0,"EndTime":273697.0,"Column":4}]},{"StartTime":273754.0,"Objects":[{"StartTime":273754.0,"EndTime":273754.0,"Column":5}]},{"StartTime":273812.0,"Objects":[{"StartTime":273812.0,"EndTime":273927.0,"Column":2}]},{"StartTime":273985.0,"Objects":[{"StartTime":273985.0,"EndTime":273985.0,"Column":5}]},{"StartTime":274043.0,"Objects":[{"StartTime":274043.0,"EndTime":274158.0,"Column":6}]},{"StartTime":274273.0,"Objects":[{"StartTime":274273.0,"EndTime":274388.0,"Column":3}]},{"StartTime":274447.0,"Objects":[{"StartTime":274447.0,"EndTime":274447.0,"Column":1}]},{"StartTime":274504.0,"Objects":[{"StartTime":274504.0,"EndTime":274619.0,"Column":3}]},{"StartTime":274735.0,"Objects":[{"StartTime":274735.0,"EndTime":274850.0,"Column":4}]},{"StartTime":274908.0,"Objects":[{"StartTime":274908.0,"EndTime":274908.0,"Column":3}]},{"StartTime":274966.0,"Objects":[{"StartTime":274966.0,"EndTime":275081.0,"Column":2}]},{"StartTime":275197.0,"Objects":[{"StartTime":275197.0,"EndTime":275197.0,"Column":0},{"StartTime":275197.0,"EndTime":275197.0,"Column":4}]},{"StartTime":275312.0,"Objects":[{"StartTime":275312.0,"EndTime":275312.0,"Column":1}]},{"StartTime":275370.0,"Objects":[{"StartTime":275370.0,"EndTime":275370.0,"Column":6}]},{"StartTime":275427.0,"Objects":[{"StartTime":275427.0,"EndTime":275542.0,"Column":1}]},{"StartTime":275658.0,"Objects":[{"StartTime":275658.0,"EndTime":275773.0,"Column":3},{"StartTime":275658.0,"EndTime":275773.0,"Column":4}]},{"StartTime":275889.0,"Objects":[{"StartTime":275889.0,"EndTime":276004.0,"Column":6}]},{"StartTime":276062.0,"Objects":[{"StartTime":276062.0,"EndTime":276062.0,"Column":4}]},{"StartTime":276120.0,"Objects":[{"StartTime":276120.0,"EndTime":276523.0,"Column":5}]},{"StartTime":276581.0,"Objects":[{"StartTime":276581.0,"EndTime":276984.0,"Column":4}]},{"StartTime":277043.0,"Objects":[{"StartTime":277043.0,"EndTime":277043.0,"Column":6}]},{"StartTime":277158.0,"Objects":[{"StartTime":277158.0,"EndTime":277158.0,"Column":3},{"StartTime":277158.0,"EndTime":277158.0,"Column":4}]},{"StartTime":277273.0,"Objects":[{"StartTime":277273.0,"EndTime":277273.0,"Column":5},{"StartTime":277273.0,"EndTime":277273.0,"Column":6}]},{"StartTime":277389.0,"Objects":[{"StartTime":277389.0,"EndTime":277389.0,"Column":0},{"StartTime":277389.0,"EndTime":277389.0,"Column":1}]},{"StartTime":277504.0,"Objects":[{"StartTime":277504.0,"EndTime":277504.0,"Column":4},{"StartTime":277504.0,"EndTime":277504.0,"Column":2}]},{"StartTime":277562.0,"Objects":[{"StartTime":277562.0,"EndTime":277562.0,"Column":0}]},{"StartTime":277620.0,"Objects":[{"StartTime":277620.0,"EndTime":277620.0,"Column":4}]},{"StartTime":277677.0,"Objects":[{"StartTime":277677.0,"EndTime":277677.0,"Column":3}]},{"StartTime":277735.0,"Objects":[{"StartTime":277735.0,"EndTime":277735.0,"Column":4}]},{"StartTime":277793.0,"Objects":[{"StartTime":277793.0,"EndTime":277793.0,"Column":2}]},{"StartTime":277850.0,"Objects":[{"StartTime":277850.0,"EndTime":277850.0,"Column":3}]},{"StartTime":277908.0,"Objects":[{"StartTime":277908.0,"EndTime":277908.0,"Column":1}]},{"StartTime":277966.0,"Objects":[{"StartTime":277966.0,"EndTime":278196.0,"Column":2},{"StartTime":277966.0,"EndTime":278196.0,"Column":4}]},{"StartTime":278312.0,"Objects":[{"StartTime":278312.0,"EndTime":278542.0,"Column":3}]},{"StartTime":278658.0,"Objects":[{"StartTime":278658.0,"EndTime":278773.0,"Column":4}]},{"StartTime":278889.0,"Objects":[{"StartTime":278889.0,"EndTime":278889.0,"Column":3}]},{"StartTime":279004.0,"Objects":[{"StartTime":279004.0,"EndTime":279234.0,"Column":4},{"StartTime":279004.0,"EndTime":279234.0,"Column":2}]},{"StartTime":279350.0,"Objects":[{"StartTime":279350.0,"EndTime":279465.0,"Column":1}]},{"StartTime":279581.0,"Objects":[{"StartTime":279581.0,"EndTime":279696.0,"Column":0},{"StartTime":279581.0,"EndTime":279696.0,"Column":3}]},{"StartTime":279812.0,"Objects":[{"StartTime":279812.0,"EndTime":280042.0,"Column":4}]},{"StartTime":280158.0,"Objects":[{"StartTime":280158.0,"EndTime":280388.0,"Column":3},{"StartTime":280158.0,"EndTime":280388.0,"Column":5}]},{"StartTime":280504.0,"Objects":[{"StartTime":280504.0,"EndTime":280619.0,"Column":4}]},{"StartTime":280735.0,"Objects":[{"StartTime":280735.0,"EndTime":280735.0,"Column":1}]},{"StartTime":280850.0,"Objects":[{"StartTime":280850.0,"EndTime":281080.0,"Column":4},{"StartTime":280850.0,"EndTime":281080.0,"Column":3}]},{"StartTime":281197.0,"Objects":[{"StartTime":281197.0,"EndTime":281312.0,"Column":5},{"StartTime":281197.0,"EndTime":281312.0,"Column":2}]},{"StartTime":281427.0,"Objects":[{"StartTime":281427.0,"EndTime":281542.0,"Column":0}]},{"StartTime":281600.0,"Objects":[{"StartTime":281600.0,"EndTime":281600.0,"Column":2}]},{"StartTime":281658.0,"Objects":[{"StartTime":281658.0,"EndTime":281888.0,"Column":4}]},{"StartTime":282004.0,"Objects":[{"StartTime":282004.0,"EndTime":282234.0,"Column":6},{"StartTime":282004.0,"EndTime":282234.0,"Column":2}]},{"StartTime":282350.0,"Objects":[{"StartTime":282350.0,"EndTime":282465.0,"Column":0}]},{"StartTime":282581.0,"Objects":[{"StartTime":282581.0,"EndTime":282581.0,"Column":6}]},{"StartTime":282697.0,"Objects":[{"StartTime":282697.0,"EndTime":282927.0,"Column":3},{"StartTime":282697.0,"EndTime":282927.0,"Column":5}]},{"StartTime":283043.0,"Objects":[{"StartTime":283043.0,"EndTime":283158.0,"Column":2}]},{"StartTime":283273.0,"Objects":[{"StartTime":283273.0,"EndTime":283388.0,"Column":3}]},{"StartTime":283504.0,"Objects":[{"StartTime":283504.0,"EndTime":283734.0,"Column":5}]},{"StartTime":283850.0,"Objects":[{"StartTime":283850.0,"EndTime":284080.0,"Column":6}]},{"StartTime":284197.0,"Objects":[{"StartTime":284197.0,"EndTime":284312.0,"Column":3}]},{"StartTime":284427.0,"Objects":[{"StartTime":284427.0,"EndTime":284427.0,"Column":0}]},{"StartTime":284543.0,"Objects":[{"StartTime":284543.0,"EndTime":284543.0,"Column":1},{"StartTime":284543.0,"EndTime":284543.0,"Column":2}]},{"StartTime":284658.0,"Objects":[{"StartTime":284658.0,"EndTime":284658.0,"Column":3},{"StartTime":284658.0,"EndTime":284658.0,"Column":4},{"StartTime":284658.0,"EndTime":284658.0,"Column":5}]},{"StartTime":284773.0,"Objects":[{"StartTime":284773.0,"EndTime":284773.0,"Column":2}]},{"StartTime":284889.0,"Objects":[{"StartTime":284889.0,"EndTime":285062.0,"Column":6},{"StartTime":284889.0,"EndTime":285062.0,"Column":1}]},{"StartTime":285120.0,"Objects":[{"StartTime":285120.0,"EndTime":285293.0,"Column":4},{"StartTime":285120.0,"EndTime":285293.0,"Column":5}]},{"StartTime":285350.0,"Objects":[{"StartTime":285350.0,"EndTime":285580.0,"Column":6},{"StartTime":285350.0,"EndTime":285580.0,"Column":0}]},{"StartTime":285697.0,"Objects":[{"StartTime":285697.0,"EndTime":285927.0,"Column":2}]},{"StartTime":286043.0,"Objects":[{"StartTime":286043.0,"EndTime":286158.0,"Column":3},{"StartTime":286043.0,"EndTime":286158.0,"Column":4},{"StartTime":286043.0,"EndTime":286158.0,"Column":5}]},{"StartTime":286273.0,"Objects":[{"StartTime":286273.0,"EndTime":286273.0,"Column":0},{"StartTime":286273.0,"EndTime":286273.0,"Column":2}]},{"StartTime":286389.0,"Objects":[{"StartTime":286389.0,"EndTime":286619.0,"Column":6},{"StartTime":286389.0,"EndTime":286619.0,"Column":3}]},{"StartTime":286735.0,"Objects":[{"StartTime":286735.0,"EndTime":286850.0,"Column":4}]},{"StartTime":286966.0,"Objects":[{"StartTime":286966.0,"EndTime":287081.0,"Column":0}]},{"StartTime":287197.0,"Objects":[{"StartTime":287197.0,"EndTime":287427.0,"Column":6}]},{"StartTime":287543.0,"Objects":[{"StartTime":287543.0,"EndTime":287773.0,"Column":4}]},{"StartTime":287889.0,"Objects":[{"StartTime":287889.0,"EndTime":288004.0,"Column":1},{"StartTime":287889.0,"EndTime":288004.0,"Column":2}]},{"StartTime":288120.0,"Objects":[{"StartTime":288120.0,"EndTime":288120.0,"Column":4},{"StartTime":288120.0,"EndTime":288120.0,"Column":3},{"StartTime":288120.0,"EndTime":288120.0,"Column":5}]},{"StartTime":288235.0,"Objects":[{"StartTime":288235.0,"EndTime":288465.0,"Column":1},{"StartTime":288235.0,"EndTime":288465.0,"Column":6}]},{"StartTime":288581.0,"Objects":[{"StartTime":288581.0,"EndTime":288696.0,"Column":5}]},{"StartTime":288812.0,"Objects":[{"StartTime":288812.0,"EndTime":288927.0,"Column":4},{"StartTime":288812.0,"EndTime":288927.0,"Column":2},{"StartTime":288812.0,"EndTime":288927.0,"Column":1}]},{"StartTime":288985.0,"Objects":[{"StartTime":288985.0,"EndTime":288985.0,"Column":0}]},{"StartTime":289043.0,"Objects":[{"StartTime":289043.0,"EndTime":289273.0,"Column":2},{"StartTime":289043.0,"EndTime":289273.0,"Column":4}]},{"StartTime":289389.0,"Objects":[{"StartTime":289389.0,"EndTime":289619.0,"Column":0}]},{"StartTime":289735.0,"Objects":[{"StartTime":289735.0,"EndTime":289850.0,"Column":2},{"StartTime":289735.0,"EndTime":289850.0,"Column":6},{"StartTime":289735.0,"EndTime":289850.0,"Column":4}]},{"StartTime":289966.0,"Objects":[{"StartTime":289966.0,"EndTime":289966.0,"Column":0},{"StartTime":289966.0,"EndTime":289966.0,"Column":5}]},{"StartTime":290081.0,"Objects":[{"StartTime":290081.0,"EndTime":290311.0,"Column":2},{"StartTime":290081.0,"EndTime":290311.0,"Column":6},{"StartTime":290081.0,"EndTime":290311.0,"Column":3}]},{"StartTime":290427.0,"Objects":[{"StartTime":290427.0,"EndTime":290542.0,"Column":5},{"StartTime":290427.0,"EndTime":290542.0,"Column":4}]},{"StartTime":290658.0,"Objects":[{"StartTime":290658.0,"EndTime":290773.0,"Column":3},{"StartTime":290658.0,"EndTime":290773.0,"Column":2},{"StartTime":290658.0,"EndTime":290773.0,"Column":1}]},{"StartTime":290889.0,"Objects":[{"StartTime":290889.0,"EndTime":291119.0,"Column":5},{"StartTime":290889.0,"EndTime":291119.0,"Column":4},{"StartTime":290889.0,"EndTime":291119.0,"Column":0}]},{"StartTime":291235.0,"Objects":[{"StartTime":291235.0,"EndTime":291465.0,"Column":3}]},{"StartTime":291581.0,"Objects":[{"StartTime":291581.0,"EndTime":291696.0,"Column":6}]},{"StartTime":291812.0,"Objects":[{"StartTime":291812.0,"EndTime":292042.0,"Column":0},{"StartTime":291812.0,"EndTime":292042.0,"Column":2}]},{"StartTime":292158.0,"Objects":[{"StartTime":292158.0,"EndTime":292158.0,"Column":4},{"StartTime":292158.0,"EndTime":292158.0,"Column":5}]},{"StartTime":292273.0,"Objects":[{"StartTime":292273.0,"EndTime":292446.0,"Column":2}]},{"StartTime":292504.0,"Objects":[{"StartTime":292504.0,"EndTime":292619.0,"Column":0}]},{"StartTime":292735.0,"Objects":[{"StartTime":292735.0,"EndTime":292850.0,"Column":5},{"StartTime":292735.0,"EndTime":292850.0,"Column":6}]},{"StartTime":292966.0,"Objects":[{"StartTime":292966.0,"EndTime":293196.0,"Column":0}]},{"StartTime":293312.0,"Objects":[{"StartTime":293312.0,"EndTime":293312.0,"Column":1},{"StartTime":293312.0,"EndTime":293312.0,"Column":4},{"StartTime":293312.0,"EndTime":293312.0,"Column":3}]},{"StartTime":293427.0,"Objects":[{"StartTime":293427.0,"EndTime":293542.0,"Column":0}]},{"StartTime":293658.0,"Objects":[{"StartTime":293658.0,"EndTime":293658.0,"Column":2}]},{"StartTime":293773.0,"Objects":[{"StartTime":293773.0,"EndTime":293773.0,"Column":1}]},{"StartTime":293889.0,"Objects":[{"StartTime":293889.0,"EndTime":294004.0,"Column":5}]},{"StartTime":294120.0,"Objects":[{"StartTime":294120.0,"EndTime":294120.0,"Column":6}]},{"StartTime":294235.0,"Objects":[{"StartTime":294235.0,"EndTime":294235.0,"Column":4}]},{"StartTime":294350.0,"Objects":[{"StartTime":294350.0,"EndTime":294350.0,"Column":5},{"StartTime":294350.0,"EndTime":294350.0,"Column":6}]},{"StartTime":294466.0,"Objects":[{"StartTime":294466.0,"EndTime":294466.0,"Column":3}]},{"StartTime":294581.0,"Objects":[{"StartTime":294581.0,"EndTime":294754.0,"Column":1}]},{"StartTime":294812.0,"Objects":[{"StartTime":294812.0,"EndTime":294985.0,"Column":5}]},{"StartTime":295043.0,"Objects":[{"StartTime":295043.0,"EndTime":295043.0,"Column":1}]},{"StartTime":295100.0,"Objects":[{"StartTime":295100.0,"EndTime":295100.0,"Column":0}]},{"StartTime":295158.0,"Objects":[{"StartTime":295158.0,"EndTime":295158.0,"Column":3}]},{"StartTime":295216.0,"Objects":[{"StartTime":295216.0,"EndTime":295216.0,"Column":0}]},{"StartTime":295273.0,"Objects":[{"StartTime":295273.0,"EndTime":295273.0,"Column":4}]},{"StartTime":295331.0,"Objects":[{"StartTime":295331.0,"EndTime":295331.0,"Column":0}]},{"StartTime":295389.0,"Objects":[{"StartTime":295389.0,"EndTime":295389.0,"Column":3}]},{"StartTime":295447.0,"Objects":[{"StartTime":295447.0,"EndTime":295447.0,"Column":1}]},{"StartTime":295504.0,"Objects":[{"StartTime":295504.0,"EndTime":295734.0,"Column":5},{"StartTime":295504.0,"EndTime":295734.0,"Column":0}]},{"StartTime":295850.0,"Objects":[{"StartTime":295850.0,"EndTime":295850.0,"Column":6}]},{"StartTime":295966.0,"Objects":[{"StartTime":295966.0,"EndTime":296196.0,"Column":0},{"StartTime":295966.0,"EndTime":296196.0,"Column":4},{"StartTime":295966.0,"EndTime":296196.0,"Column":2}]},{"StartTime":296312.0,"Objects":[{"StartTime":296312.0,"EndTime":296312.0,"Column":6}]},{"StartTime":296427.0,"Objects":[{"StartTime":296427.0,"EndTime":296542.0,"Column":1}]},{"StartTime":296658.0,"Objects":[{"StartTime":296658.0,"EndTime":296831.0,"Column":3},{"StartTime":296658.0,"EndTime":296831.0,"Column":6}]},{"StartTime":296889.0,"Objects":[{"StartTime":296889.0,"EndTime":297004.0,"Column":0}]},{"StartTime":297120.0,"Objects":[{"StartTime":297120.0,"EndTime":297120.0,"Column":5},{"StartTime":297120.0,"EndTime":297120.0,"Column":6}]},{"StartTime":297235.0,"Objects":[{"StartTime":297235.0,"EndTime":297235.0,"Column":1},{"StartTime":297235.0,"EndTime":297235.0,"Column":2}]},{"StartTime":297350.0,"Objects":[{"StartTime":297350.0,"EndTime":297580.0,"Column":0},{"StartTime":297350.0,"EndTime":297580.0,"Column":4},{"StartTime":297350.0,"EndTime":297580.0,"Column":6}]},{"StartTime":297697.0,"Objects":[{"StartTime":297697.0,"EndTime":297927.0,"Column":5},{"StartTime":297697.0,"EndTime":297927.0,"Column":2},{"StartTime":297697.0,"EndTime":297927.0,"Column":1}]},{"StartTime":298043.0,"Objects":[{"StartTime":298043.0,"EndTime":298158.0,"Column":6},{"StartTime":298043.0,"EndTime":298158.0,"Column":4}]},{"StartTime":298273.0,"Objects":[{"StartTime":298273.0,"EndTime":298503.0,"Column":2},{"StartTime":298273.0,"EndTime":298503.0,"Column":3},{"StartTime":298273.0,"EndTime":298503.0,"Column":5}]},{"StartTime":298620.0,"Objects":[{"StartTime":298620.0,"EndTime":298735.0,"Column":6}]},{"StartTime":298850.0,"Objects":[{"StartTime":298850.0,"EndTime":298850.0,"Column":0},{"StartTime":298850.0,"EndTime":298850.0,"Column":1}]},{"StartTime":298966.0,"Objects":[{"StartTime":298966.0,"EndTime":298966.0,"Column":4},{"StartTime":298966.0,"EndTime":298966.0,"Column":5}]},{"StartTime":299081.0,"Objects":[{"StartTime":299081.0,"EndTime":299081.0,"Column":6},{"StartTime":299081.0,"EndTime":299081.0,"Column":0},{"StartTime":299081.0,"EndTime":299081.0,"Column":1}]},{"StartTime":299197.0,"Objects":[{"StartTime":299197.0,"EndTime":299427.0,"Column":5}]},{"StartTime":299543.0,"Objects":[{"StartTime":299543.0,"EndTime":299543.0,"Column":1},{"StartTime":299543.0,"EndTime":299543.0,"Column":6}]},{"StartTime":299658.0,"Objects":[{"StartTime":299658.0,"EndTime":299888.0,"Column":3},{"StartTime":299658.0,"EndTime":299888.0,"Column":4}]},{"StartTime":300004.0,"Objects":[{"StartTime":300004.0,"EndTime":300004.0,"Column":2},{"StartTime":300004.0,"EndTime":300004.0,"Column":1}]},{"StartTime":300120.0,"Objects":[{"StartTime":300120.0,"EndTime":300235.0,"Column":6}]},{"StartTime":300350.0,"Objects":[{"StartTime":300350.0,"EndTime":300523.0,"Column":0},{"StartTime":300350.0,"EndTime":300523.0,"Column":4}]},{"StartTime":300581.0,"Objects":[{"StartTime":300581.0,"EndTime":300696.0,"Column":6},{"StartTime":300581.0,"EndTime":300696.0,"Column":3},{"StartTime":300581.0,"EndTime":300696.0,"Column":1}]},{"StartTime":300812.0,"Objects":[{"StartTime":300812.0,"EndTime":300927.0,"Column":2},{"StartTime":300812.0,"EndTime":300927.0,"Column":4}]},{"StartTime":301043.0,"Objects":[{"StartTime":301043.0,"EndTime":301273.0,"Column":3},{"StartTime":301043.0,"EndTime":301273.0,"Column":1}]},{"StartTime":301389.0,"Objects":[{"StartTime":301389.0,"EndTime":301389.0,"Column":0},{"StartTime":301389.0,"EndTime":301389.0,"Column":6},{"StartTime":301389.0,"EndTime":301389.0,"Column":4}]},{"StartTime":301504.0,"Objects":[{"StartTime":301504.0,"EndTime":301734.0,"Column":1}]},{"StartTime":301850.0,"Objects":[{"StartTime":301850.0,"EndTime":301850.0,"Column":3},{"StartTime":301850.0,"EndTime":301850.0,"Column":2}]},{"StartTime":301966.0,"Objects":[{"StartTime":301966.0,"EndTime":302081.0,"Column":0}]},{"StartTime":302197.0,"Objects":[{"StartTime":302197.0,"EndTime":302312.0,"Column":5},{"StartTime":302197.0,"EndTime":302312.0,"Column":6},{"StartTime":302197.0,"EndTime":302312.0,"Column":3}]},{"StartTime":302427.0,"Objects":[{"StartTime":302427.0,"EndTime":302657.0,"Column":1}]},{"StartTime":302773.0,"Objects":[{"StartTime":302773.0,"EndTime":302773.0,"Column":2},{"StartTime":302773.0,"EndTime":302773.0,"Column":3}]},{"StartTime":302889.0,"Objects":[{"StartTime":302889.0,"EndTime":303004.0,"Column":4},{"StartTime":302889.0,"EndTime":303004.0,"Column":6}]},{"StartTime":303120.0,"Objects":[{"StartTime":303120.0,"EndTime":303235.0,"Column":3},{"StartTime":303120.0,"EndTime":303235.0,"Column":0},{"StartTime":303120.0,"EndTime":303235.0,"Column":2}]},{"StartTime":303350.0,"Objects":[{"StartTime":303350.0,"EndTime":303580.0,"Column":1}]},{"StartTime":303697.0,"Objects":[{"StartTime":303697.0,"EndTime":303697.0,"Column":0},{"StartTime":303697.0,"EndTime":303697.0,"Column":5}]},{"StartTime":303812.0,"Objects":[{"StartTime":303812.0,"EndTime":304042.0,"Column":2}]},{"StartTime":304158.0,"Objects":[{"StartTime":304158.0,"EndTime":304158.0,"Column":0},{"StartTime":304158.0,"EndTime":304158.0,"Column":1}]},{"StartTime":304273.0,"Objects":[{"StartTime":304273.0,"EndTime":304388.0,"Column":5},{"StartTime":304273.0,"EndTime":304388.0,"Column":6}]},{"StartTime":304504.0,"Objects":[{"StartTime":304504.0,"EndTime":304619.0,"Column":0},{"StartTime":304504.0,"EndTime":304619.0,"Column":4}]},{"StartTime":304735.0,"Objects":[{"StartTime":304735.0,"EndTime":304965.0,"Column":3},{"StartTime":304735.0,"EndTime":304965.0,"Column":6}]},{"StartTime":305081.0,"Objects":[{"StartTime":305081.0,"EndTime":305311.0,"Column":1},{"StartTime":305081.0,"EndTime":305311.0,"Column":4},{"StartTime":305081.0,"EndTime":305311.0,"Column":2}]},{"StartTime":305427.0,"Objects":[{"StartTime":305427.0,"EndTime":305427.0,"Column":5},{"StartTime":305427.0,"EndTime":305427.0,"Column":6}]},{"StartTime":305543.0,"Objects":[{"StartTime":305543.0,"EndTime":305543.0,"Column":0},{"StartTime":305543.0,"EndTime":305543.0,"Column":2}]},{"StartTime":305658.0,"Objects":[{"StartTime":305658.0,"EndTime":305888.0,"Column":5}]},{"StartTime":306004.0,"Objects":[{"StartTime":306004.0,"EndTime":306004.0,"Column":4}]},{"StartTime":306120.0,"Objects":[{"StartTime":306120.0,"EndTime":306235.0,"Column":3},{"StartTime":306120.0,"EndTime":306235.0,"Column":2}]},{"StartTime":306350.0,"Objects":[{"StartTime":306350.0,"EndTime":306465.0,"Column":4},{"StartTime":306350.0,"EndTime":306465.0,"Column":5},{"StartTime":306350.0,"EndTime":306465.0,"Column":1}]},{"StartTime":306581.0,"Objects":[{"StartTime":306581.0,"EndTime":306696.0,"Column":2},{"StartTime":306581.0,"EndTime":306696.0,"Column":6}]},{"StartTime":306812.0,"Objects":[{"StartTime":306812.0,"EndTime":306812.0,"Column":1},{"StartTime":306812.0,"EndTime":306812.0,"Column":3},{"StartTime":306812.0,"EndTime":306812.0,"Column":4}]},{"StartTime":306927.0,"Objects":[{"StartTime":306927.0,"EndTime":306927.0,"Column":2}]},{"StartTime":307043.0,"Objects":[{"StartTime":307043.0,"EndTime":307273.0,"Column":4},{"StartTime":307043.0,"EndTime":307273.0,"Column":6}]},{"StartTime":307389.0,"Objects":[{"StartTime":307389.0,"EndTime":307389.0,"Column":5},{"StartTime":307389.0,"EndTime":307389.0,"Column":1}]},{"StartTime":307504.0,"Objects":[{"StartTime":307504.0,"EndTime":307619.0,"Column":0},{"StartTime":307504.0,"EndTime":307619.0,"Column":2}]},{"StartTime":307735.0,"Objects":[{"StartTime":307735.0,"EndTime":307850.0,"Column":5},{"StartTime":307735.0,"EndTime":307850.0,"Column":4}]},{"StartTime":307966.0,"Objects":[{"StartTime":307966.0,"EndTime":308081.0,"Column":1},{"StartTime":307966.0,"EndTime":308081.0,"Column":3}]},{"StartTime":308197.0,"Objects":[{"StartTime":308197.0,"EndTime":308312.0,"Column":0},{"StartTime":308197.0,"EndTime":308312.0,"Column":2}]},{"StartTime":308427.0,"Objects":[{"StartTime":308427.0,"EndTime":308427.0,"Column":6},{"StartTime":308427.0,"EndTime":308427.0,"Column":5}]},{"StartTime":308543.0,"Objects":[{"StartTime":308543.0,"EndTime":308543.0,"Column":0}]},{"StartTime":308658.0,"Objects":[{"StartTime":308658.0,"EndTime":308658.0,"Column":5},{"StartTime":308658.0,"EndTime":308658.0,"Column":6}]},{"StartTime":308889.0,"Objects":[{"StartTime":308889.0,"EndTime":308889.0,"Column":1},{"StartTime":308889.0,"EndTime":308889.0,"Column":0}]},{"StartTime":309004.0,"Objects":[{"StartTime":309004.0,"EndTime":309004.0,"Column":3},{"StartTime":309004.0,"EndTime":309004.0,"Column":4}]},{"StartTime":309062.0,"Objects":[{"StartTime":309062.0,"EndTime":309062.0,"Column":2}]},{"StartTime":309120.0,"Objects":[{"StartTime":309120.0,"EndTime":309120.0,"Column":3}]},{"StartTime":309177.0,"Objects":[{"StartTime":309177.0,"EndTime":309177.0,"Column":0}]},{"StartTime":309235.0,"Objects":[{"StartTime":309235.0,"EndTime":309235.0,"Column":3}]},{"StartTime":309293.0,"Objects":[{"StartTime":309293.0,"EndTime":309293.0,"Column":1}]},{"StartTime":309350.0,"Objects":[{"StartTime":309350.0,"EndTime":309350.0,"Column":3}]},{"StartTime":309408.0,"Objects":[{"StartTime":309408.0,"EndTime":309408.0,"Column":0}]},{"StartTime":309466.0,"Objects":[{"StartTime":309466.0,"EndTime":309466.0,"Column":2}]},{"StartTime":309523.0,"Objects":[{"StartTime":309523.0,"EndTime":309523.0,"Column":1}]},{"StartTime":309581.0,"Objects":[{"StartTime":309581.0,"EndTime":309581.0,"Column":4}]},{"StartTime":309639.0,"Objects":[{"StartTime":309639.0,"EndTime":309639.0,"Column":1}]},{"StartTime":309697.0,"Objects":[{"StartTime":309697.0,"EndTime":309697.0,"Column":3}]},{"StartTime":309754.0,"Objects":[{"StartTime":309754.0,"EndTime":309754.0,"Column":1}]},{"StartTime":309812.0,"Objects":[{"StartTime":309812.0,"EndTime":309812.0,"Column":2}]},{"StartTime":309927.0,"Objects":[{"StartTime":309927.0,"EndTime":309927.0,"Column":3}]},{"StartTime":310043.0,"Objects":[{"StartTime":310043.0,"EndTime":310043.0,"Column":4}]},{"StartTime":310158.0,"Objects":[{"StartTime":310158.0,"EndTime":310158.0,"Column":6}]},{"StartTime":310216.0,"Objects":[{"StartTime":310216.0,"EndTime":310216.0,"Column":5}]},{"StartTime":310273.0,"Objects":[{"StartTime":310273.0,"EndTime":310503.0,"Column":0},{"StartTime":310273.0,"EndTime":310503.0,"Column":1}]},{"StartTime":310620.0,"Objects":[{"StartTime":310620.0,"EndTime":310620.0,"Column":5}]},{"StartTime":310735.0,"Objects":[{"StartTime":310735.0,"EndTime":310965.0,"Column":0}]},{"StartTime":311081.0,"Objects":[{"StartTime":311081.0,"EndTime":311081.0,"Column":3}]},{"StartTime":311197.0,"Objects":[{"StartTime":311197.0,"EndTime":311312.0,"Column":1},{"StartTime":311197.0,"EndTime":311312.0,"Column":5}]},{"StartTime":311427.0,"Objects":[{"StartTime":311427.0,"EndTime":311427.0,"Column":6},{"StartTime":311427.0,"EndTime":311427.0,"Column":0}]},{"StartTime":311658.0,"Objects":[{"StartTime":311658.0,"EndTime":311773.0,"Column":5},{"StartTime":311658.0,"EndTime":311773.0,"Column":3},{"StartTime":311658.0,"EndTime":311773.0,"Column":1}]},{"StartTime":311889.0,"Objects":[{"StartTime":311889.0,"EndTime":311889.0,"Column":6},{"StartTime":311889.0,"EndTime":311889.0,"Column":0}]},{"StartTime":312004.0,"Objects":[{"StartTime":312004.0,"EndTime":312004.0,"Column":4},{"StartTime":312004.0,"EndTime":312004.0,"Column":2}]},{"StartTime":312120.0,"Objects":[{"StartTime":312120.0,"EndTime":312350.0,"Column":0},{"StartTime":312120.0,"EndTime":312350.0,"Column":3},{"StartTime":312120.0,"EndTime":312350.0,"Column":6}]},{"StartTime":312466.0,"Objects":[{"StartTime":312466.0,"EndTime":312466.0,"Column":2},{"StartTime":312466.0,"EndTime":312466.0,"Column":1},{"StartTime":312466.0,"EndTime":312466.0,"Column":4}]},{"StartTime":312581.0,"Objects":[{"StartTime":312581.0,"EndTime":312696.0,"Column":0},{"StartTime":312581.0,"EndTime":312696.0,"Column":6}]},{"StartTime":312812.0,"Objects":[{"StartTime":312812.0,"EndTime":312927.0,"Column":5},{"StartTime":312812.0,"EndTime":312927.0,"Column":3}]},{"StartTime":313043.0,"Objects":[{"StartTime":313043.0,"EndTime":313043.0,"Column":1},{"StartTime":313043.0,"EndTime":313043.0,"Column":4}]},{"StartTime":313158.0,"Objects":[{"StartTime":313158.0,"EndTime":313158.0,"Column":0}]},{"StartTime":313273.0,"Objects":[{"StartTime":313273.0,"EndTime":313388.0,"Column":6},{"StartTime":313273.0,"EndTime":313388.0,"Column":5}]},{"StartTime":313504.0,"Objects":[{"StartTime":313504.0,"EndTime":313619.0,"Column":3},{"StartTime":313504.0,"EndTime":313619.0,"Column":0},{"StartTime":313504.0,"EndTime":313619.0,"Column":1}]},{"StartTime":313735.0,"Objects":[{"StartTime":313735.0,"EndTime":313850.0,"Column":6},{"StartTime":313735.0,"EndTime":313850.0,"Column":2}]},{"StartTime":313966.0,"Objects":[{"StartTime":313966.0,"EndTime":314196.0,"Column":3},{"StartTime":313966.0,"EndTime":314196.0,"Column":5},{"StartTime":313966.0,"EndTime":314196.0,"Column":4}]},{"StartTime":314312.0,"Objects":[{"StartTime":314312.0,"EndTime":314312.0,"Column":6},{"StartTime":314312.0,"EndTime":314312.0,"Column":0}]},{"StartTime":314427.0,"Objects":[{"StartTime":314427.0,"EndTime":314542.0,"Column":3}]},{"StartTime":314658.0,"Objects":[{"StartTime":314658.0,"EndTime":314773.0,"Column":6},{"StartTime":314658.0,"EndTime":314773.0,"Column":4},{"StartTime":314658.0,"EndTime":314773.0,"Column":2}]},{"StartTime":314889.0,"Objects":[{"StartTime":314889.0,"EndTime":315062.0,"Column":1}]},{"StartTime":315120.0,"Objects":[{"StartTime":315120.0,"EndTime":315235.0,"Column":4},{"StartTime":315120.0,"EndTime":315235.0,"Column":3}]},{"StartTime":315350.0,"Objects":[{"StartTime":315350.0,"EndTime":315580.0,"Column":1},{"StartTime":315350.0,"EndTime":315580.0,"Column":6},{"StartTime":315350.0,"EndTime":315580.0,"Column":5}]},{"StartTime":315697.0,"Objects":[{"StartTime":315697.0,"EndTime":315697.0,"Column":3},{"StartTime":315697.0,"EndTime":315697.0,"Column":2}]},{"StartTime":315812.0,"Objects":[{"StartTime":315812.0,"EndTime":315927.0,"Column":4},{"StartTime":315812.0,"EndTime":315927.0,"Column":6},{"StartTime":315812.0,"EndTime":315927.0,"Column":1}]},{"StartTime":316043.0,"Objects":[{"StartTime":316043.0,"EndTime":316158.0,"Column":0},{"StartTime":316043.0,"EndTime":316158.0,"Column":3},{"StartTime":316043.0,"EndTime":316158.0,"Column":2}]},{"StartTime":316273.0,"Objects":[{"StartTime":316273.0,"EndTime":316388.0,"Column":6},{"StartTime":316273.0,"EndTime":316388.0,"Column":1},{"StartTime":316273.0,"EndTime":316388.0,"Column":4}]},{"StartTime":316504.0,"Objects":[{"StartTime":316504.0,"EndTime":316619.0,"Column":2},{"StartTime":316504.0,"EndTime":316619.0,"Column":5},{"StartTime":316504.0,"EndTime":316619.0,"Column":0}]},{"StartTime":316735.0,"Objects":[{"StartTime":316735.0,"EndTime":316965.0,"Column":1},{"StartTime":316735.0,"EndTime":316965.0,"Column":4}]},{"StartTime":317081.0,"Objects":[{"StartTime":317081.0,"EndTime":317081.0,"Column":0},{"StartTime":317081.0,"EndTime":317081.0,"Column":3},{"StartTime":317081.0,"EndTime":317081.0,"Column":5}]},{"StartTime":317197.0,"Objects":[{"StartTime":317197.0,"EndTime":317427.0,"Column":6},{"StartTime":317197.0,"EndTime":317427.0,"Column":2}]},{"StartTime":317543.0,"Objects":[{"StartTime":317543.0,"EndTime":317543.0,"Column":4},{"StartTime":317543.0,"EndTime":317543.0,"Column":5}]},{"StartTime":317600.0,"Objects":[{"StartTime":317600.0,"EndTime":317600.0,"Column":6}]},{"StartTime":317658.0,"Objects":[{"StartTime":317658.0,"EndTime":317888.0,"Column":1},{"StartTime":317658.0,"EndTime":317888.0,"Column":3}]},{"StartTime":318004.0,"Objects":[{"StartTime":318004.0,"EndTime":318004.0,"Column":2}]},{"StartTime":318120.0,"Objects":[{"StartTime":318120.0,"EndTime":318235.0,"Column":0}]},{"StartTime":318350.0,"Objects":[{"StartTime":318350.0,"EndTime":318465.0,"Column":3},{"StartTime":318350.0,"EndTime":318465.0,"Column":1}]},{"StartTime":318581.0,"Objects":[{"StartTime":318581.0,"EndTime":318811.0,"Column":4},{"StartTime":318581.0,"EndTime":318811.0,"Column":5}]},{"StartTime":318927.0,"Objects":[{"StartTime":318927.0,"EndTime":318927.0,"Column":6},{"StartTime":318927.0,"EndTime":318927.0,"Column":1}]},{"StartTime":319043.0,"Objects":[{"StartTime":319043.0,"EndTime":319273.0,"Column":4},{"StartTime":319043.0,"EndTime":319273.0,"Column":0}]},{"StartTime":319389.0,"Objects":[{"StartTime":319389.0,"EndTime":319389.0,"Column":5}]},{"StartTime":319504.0,"Objects":[{"StartTime":319504.0,"EndTime":319734.0,"Column":1},{"StartTime":319504.0,"EndTime":319734.0,"Column":2}]},{"StartTime":319966.0,"Objects":[{"StartTime":319966.0,"EndTime":320081.0,"Column":3},{"StartTime":319966.0,"EndTime":320081.0,"Column":6}]},{"StartTime":320197.0,"Objects":[{"StartTime":320197.0,"EndTime":320312.0,"Column":4},{"StartTime":320197.0,"EndTime":320312.0,"Column":1}]},{"StartTime":320427.0,"Objects":[{"StartTime":320427.0,"EndTime":320657.0,"Column":0},{"StartTime":320427.0,"EndTime":320657.0,"Column":6},{"StartTime":320427.0,"EndTime":320657.0,"Column":3}]},{"StartTime":320773.0,"Objects":[{"StartTime":320773.0,"EndTime":320773.0,"Column":1}]},{"StartTime":320889.0,"Objects":[{"StartTime":320889.0,"EndTime":321004.0,"Column":4},{"StartTime":320889.0,"EndTime":321004.0,"Column":6}]},{"StartTime":321120.0,"Objects":[{"StartTime":321120.0,"EndTime":321235.0,"Column":0},{"StartTime":321120.0,"EndTime":321235.0,"Column":2}]},{"StartTime":321350.0,"Objects":[{"StartTime":321350.0,"EndTime":321811.0,"Column":4},{"StartTime":321350.0,"EndTime":321350.0,"Column":0},{"StartTime":321350.0,"EndTime":321350.0,"Column":6},{"StartTime":321580.0,"EndTime":321580.0,"Column":6},{"StartTime":321580.0,"EndTime":321580.0,"Column":0},{"StartTime":321810.0,"EndTime":321810.0,"Column":0},{"StartTime":321810.0,"EndTime":321810.0,"Column":2}]},{"StartTime":321927.0,"Objects":[{"StartTime":321927.0,"EndTime":321927.0,"Column":2}]},{"StartTime":322043.0,"Objects":[{"StartTime":322043.0,"EndTime":322158.0,"Column":3},{"StartTime":322043.0,"EndTime":322158.0,"Column":1}]},{"StartTime":322273.0,"Objects":[{"StartTime":322273.0,"EndTime":322388.0,"Column":4},{"StartTime":322273.0,"EndTime":322388.0,"Column":6}]},{"StartTime":322504.0,"Objects":[{"StartTime":322504.0,"EndTime":322619.0,"Column":3},{"StartTime":322504.0,"EndTime":322619.0,"Column":5}]},{"StartTime":322735.0,"Objects":[{"StartTime":322735.0,"EndTime":322850.0,"Column":0},{"StartTime":322735.0,"EndTime":322850.0,"Column":1}]},{"StartTime":322966.0,"Objects":[{"StartTime":322966.0,"EndTime":322966.0,"Column":3},{"StartTime":322966.0,"EndTime":322966.0,"Column":4},{"StartTime":322966.0,"EndTime":322966.0,"Column":5}]},{"StartTime":323081.0,"Objects":[{"StartTime":323081.0,"EndTime":323081.0,"Column":2},{"StartTime":323081.0,"EndTime":323081.0,"Column":6}]},{"StartTime":323197.0,"Objects":[{"StartTime":323197.0,"EndTime":323312.0,"Column":0}]},{"StartTime":323427.0,"Objects":[{"StartTime":323427.0,"EndTime":323542.0,"Column":6},{"StartTime":323427.0,"EndTime":323542.0,"Column":5}]},{"StartTime":323658.0,"Objects":[{"StartTime":323658.0,"EndTime":323773.0,"Column":4},{"StartTime":323658.0,"EndTime":323773.0,"Column":1},{"StartTime":323658.0,"EndTime":323773.0,"Column":0}]},{"StartTime":323888.0,"Objects":[{"StartTime":323888.0,"EndTime":324003.0,"Column":5},{"StartTime":323888.0,"EndTime":324003.0,"Column":3}]},{"StartTime":324120.0,"Objects":[{"StartTime":324120.0,"EndTime":324120.0,"Column":1}]},{"StartTime":324177.0,"Objects":[{"StartTime":324177.0,"EndTime":324177.0,"Column":0}]},{"StartTime":324235.0,"Objects":[{"StartTime":324235.0,"EndTime":324235.0,"Column":3}]},{"StartTime":324293.0,"Objects":[{"StartTime":324293.0,"EndTime":324293.0,"Column":0}]},{"StartTime":324350.0,"Objects":[{"StartTime":324350.0,"EndTime":324350.0,"Column":2}]},{"StartTime":324408.0,"Objects":[{"StartTime":324408.0,"EndTime":324408.0,"Column":0}]},{"StartTime":324466.0,"Objects":[{"StartTime":324466.0,"EndTime":324466.0,"Column":5}]},{"StartTime":324523.0,"Objects":[{"StartTime":324523.0,"EndTime":324523.0,"Column":0}]},{"StartTime":324581.0,"Objects":[{"StartTime":324581.0,"EndTime":324581.0,"Column":1}]},{"StartTime":324638.0,"Objects":[{"StartTime":324638.0,"EndTime":324638.0,"Column":2}]},{"StartTime":324696.0,"Objects":[{"StartTime":324696.0,"EndTime":324696.0,"Column":0}]},{"StartTime":324754.0,"Objects":[{"StartTime":324754.0,"EndTime":324754.0,"Column":2}]},{"StartTime":324811.0,"Objects":[{"StartTime":324811.0,"EndTime":324811.0,"Column":3}]},{"StartTime":324870.0,"Objects":[{"StartTime":324870.0,"EndTime":324870.0,"Column":1}]},{"StartTime":324927.0,"Objects":[{"StartTime":324927.0,"EndTime":324927.0,"Column":5}]},{"StartTime":324985.0,"Objects":[{"StartTime":324985.0,"EndTime":324985.0,"Column":2}]},{"StartTime":325043.0,"Objects":[{"StartTime":325043.0,"EndTime":325273.0,"Column":3},{"StartTime":325043.0,"EndTime":325273.0,"Column":4}]},{"StartTime":325389.0,"Objects":[{"StartTime":325389.0,"EndTime":325389.0,"Column":6},{"StartTime":325389.0,"EndTime":325389.0,"Column":1},{"StartTime":325389.0,"EndTime":325389.0,"Column":5}]},{"StartTime":325504.0,"Objects":[{"StartTime":325504.0,"EndTime":325734.0,"Column":3},{"StartTime":325504.0,"EndTime":325734.0,"Column":4}]},{"StartTime":325850.0,"Objects":[{"StartTime":325850.0,"EndTime":325850.0,"Column":0}]},{"StartTime":325966.0,"Objects":[{"StartTime":325966.0,"EndTime":326081.0,"Column":4},{"StartTime":325966.0,"EndTime":326081.0,"Column":1}]},{"StartTime":326197.0,"Objects":[{"StartTime":326197.0,"EndTime":326197.0,"Column":3},{"StartTime":326197.0,"EndTime":326197.0,"Column":5}]},{"StartTime":326427.0,"Objects":[{"StartTime":326427.0,"EndTime":326542.0,"Column":1},{"StartTime":326427.0,"EndTime":326542.0,"Column":6},{"StartTime":326427.0,"EndTime":326542.0,"Column":2}]},{"StartTime":326658.0,"Objects":[{"StartTime":326658.0,"EndTime":326773.0,"Column":0},{"StartTime":326658.0,"EndTime":326773.0,"Column":3}]},{"StartTime":326889.0,"Objects":[{"StartTime":326889.0,"EndTime":327119.0,"Column":1}]},{"StartTime":327235.0,"Objects":[{"StartTime":327235.0,"EndTime":327235.0,"Column":6},{"StartTime":327235.0,"EndTime":327235.0,"Column":0}]},{"StartTime":327350.0,"Objects":[{"StartTime":327350.0,"EndTime":327465.0,"Column":2},{"StartTime":327350.0,"EndTime":327465.0,"Column":5}]},{"StartTime":327581.0,"Objects":[{"StartTime":327581.0,"EndTime":327696.0,"Column":4},{"StartTime":327581.0,"EndTime":327696.0,"Column":0}]},{"StartTime":327812.0,"Objects":[{"StartTime":327812.0,"EndTime":327812.0,"Column":6},{"StartTime":327812.0,"EndTime":327812.0,"Column":2}]},{"StartTime":327927.0,"Objects":[{"StartTime":327927.0,"EndTime":327927.0,"Column":4},{"StartTime":327927.0,"EndTime":327927.0,"Column":5}]},{"StartTime":328043.0,"Objects":[{"StartTime":328043.0,"EndTime":328158.0,"Column":2},{"StartTime":328043.0,"EndTime":328158.0,"Column":0}]},{"StartTime":328273.0,"Objects":[{"StartTime":328273.0,"EndTime":328388.0,"Column":4}]},{"StartTime":328504.0,"Objects":[{"StartTime":328504.0,"EndTime":328619.0,"Column":5},{"StartTime":328504.0,"EndTime":328619.0,"Column":0}]},{"StartTime":328735.0,"Objects":[{"StartTime":328735.0,"EndTime":328965.0,"Column":4},{"StartTime":328735.0,"EndTime":328965.0,"Column":6},{"StartTime":328735.0,"EndTime":328965.0,"Column":1}]},{"StartTime":329081.0,"Objects":[{"StartTime":329081.0,"EndTime":329081.0,"Column":2}]},{"StartTime":329197.0,"Objects":[{"StartTime":329197.0,"EndTime":329312.0,"Column":6},{"StartTime":329197.0,"EndTime":329312.0,"Column":0}]},{"StartTime":329427.0,"Objects":[{"StartTime":329427.0,"EndTime":329542.0,"Column":2},{"StartTime":329427.0,"EndTime":329542.0,"Column":3}]},{"StartTime":329658.0,"Objects":[{"StartTime":329658.0,"EndTime":329831.0,"Column":1},{"StartTime":329658.0,"EndTime":329831.0,"Column":4}]},{"StartTime":329889.0,"Objects":[{"StartTime":329889.0,"EndTime":330004.0,"Column":3},{"StartTime":329889.0,"EndTime":330004.0,"Column":6}]},{"StartTime":330120.0,"Objects":[{"StartTime":330120.0,"EndTime":330235.0,"Column":1},{"StartTime":330120.0,"EndTime":330235.0,"Column":4}]},{"StartTime":330350.0,"Objects":[{"StartTime":330350.0,"EndTime":330465.0,"Column":2},{"StartTime":330350.0,"EndTime":330465.0,"Column":5}]},{"StartTime":330581.0,"Objects":[{"StartTime":330581.0,"EndTime":330754.0,"Column":3}]},{"StartTime":330812.0,"Objects":[{"StartTime":330812.0,"EndTime":330927.0,"Column":6},{"StartTime":330812.0,"EndTime":330927.0,"Column":1}]},{"StartTime":331043.0,"Objects":[{"StartTime":331043.0,"EndTime":331158.0,"Column":2},{"StartTime":331043.0,"EndTime":331158.0,"Column":4}]},{"StartTime":331273.0,"Objects":[{"StartTime":331273.0,"EndTime":331388.0,"Column":6},{"StartTime":331273.0,"EndTime":331388.0,"Column":3}]},{"StartTime":331504.0,"Objects":[{"StartTime":331504.0,"EndTime":331677.0,"Column":4}]},{"StartTime":331735.0,"Objects":[{"StartTime":331735.0,"EndTime":331850.0,"Column":1},{"StartTime":331735.0,"EndTime":331850.0,"Column":2}]},{"StartTime":331966.0,"Objects":[{"StartTime":331966.0,"EndTime":331966.0,"Column":0},{"StartTime":331966.0,"EndTime":331966.0,"Column":4},{"StartTime":331966.0,"EndTime":331966.0,"Column":3}]},{"StartTime":332081.0,"Objects":[{"StartTime":332081.0,"EndTime":332081.0,"Column":2},{"StartTime":332081.0,"EndTime":332081.0,"Column":5}]},{"StartTime":332138.0,"Objects":[{"StartTime":332138.0,"EndTime":332138.0,"Column":0}]},{"StartTime":332196.0,"Objects":[{"StartTime":332196.0,"EndTime":332196.0,"Column":1}]},{"StartTime":332254.0,"Objects":[{"StartTime":332254.0,"EndTime":332254.0,"Column":5}]},{"StartTime":332312.0,"Objects":[{"StartTime":332312.0,"EndTime":332312.0,"Column":0}]},{"StartTime":332370.0,"Objects":[{"StartTime":332370.0,"EndTime":332370.0,"Column":2}]},{"StartTime":332427.0,"Objects":[{"StartTime":332427.0,"EndTime":332657.0,"Column":1},{"StartTime":332427.0,"EndTime":332657.0,"Column":4}]},{"StartTime":332773.0,"Objects":[{"StartTime":332773.0,"EndTime":332773.0,"Column":3}]},{"StartTime":332889.0,"Objects":[{"StartTime":332889.0,"EndTime":333004.0,"Column":5},{"StartTime":332889.0,"EndTime":333004.0,"Column":2}]},{"StartTime":333120.0,"Objects":[{"StartTime":333120.0,"EndTime":333235.0,"Column":6},{"StartTime":333120.0,"EndTime":333235.0,"Column":0}]},{"StartTime":333350.0,"Objects":[{"StartTime":333350.0,"EndTime":333523.0,"Column":1},{"StartTime":333350.0,"EndTime":333523.0,"Column":5}]},{"StartTime":333581.0,"Objects":[{"StartTime":333581.0,"EndTime":333696.0,"Column":3},{"StartTime":333581.0,"EndTime":333696.0,"Column":2}]},{"StartTime":333812.0,"Objects":[{"StartTime":333812.0,"EndTime":333927.0,"Column":1},{"StartTime":333812.0,"EndTime":333927.0,"Column":5}]},{"StartTime":334043.0,"Objects":[{"StartTime":334043.0,"EndTime":334158.0,"Column":0},{"StartTime":334043.0,"EndTime":334158.0,"Column":6}]},{"StartTime":334273.0,"Objects":[{"StartTime":334273.0,"EndTime":334503.0,"Column":3},{"StartTime":334273.0,"EndTime":334503.0,"Column":4},{"StartTime":334273.0,"EndTime":334503.0,"Column":5}]},{"StartTime":334735.0,"Objects":[{"StartTime":334735.0,"EndTime":334850.0,"Column":1},{"StartTime":334735.0,"EndTime":334850.0,"Column":0}]},{"StartTime":334966.0,"Objects":[{"StartTime":334966.0,"EndTime":335081.0,"Column":6},{"StartTime":334966.0,"EndTime":335081.0,"Column":4}]},{"StartTime":335197.0,"Objects":[{"StartTime":335197.0,"EndTime":335427.0,"Column":3}]},{"StartTime":335543.0,"Objects":[{"StartTime":335543.0,"EndTime":335543.0,"Column":5}]},{"StartTime":335658.0,"Objects":[{"StartTime":335658.0,"EndTime":335888.0,"Column":1},{"StartTime":335658.0,"EndTime":335888.0,"Column":4}]},{"StartTime":336004.0,"Objects":[{"StartTime":336004.0,"EndTime":336004.0,"Column":3},{"StartTime":336004.0,"EndTime":336004.0,"Column":5}]},{"StartTime":336120.0,"Objects":[{"StartTime":336120.0,"EndTime":336293.0,"Column":1}]},{"StartTime":336350.0,"Objects":[{"StartTime":336350.0,"EndTime":336465.0,"Column":5},{"StartTime":336350.0,"EndTime":336465.0,"Column":2}]},{"StartTime":336581.0,"Objects":[{"StartTime":336581.0,"EndTime":336696.0,"Column":1}]},{"StartTime":336812.0,"Objects":[{"StartTime":336812.0,"EndTime":336927.0,"Column":0},{"StartTime":336812.0,"EndTime":336927.0,"Column":5},{"StartTime":336812.0,"EndTime":336927.0,"Column":2}]},{"StartTime":337043.0,"Objects":[{"StartTime":337043.0,"EndTime":337043.0,"Column":3}]},{"StartTime":337100.0,"Objects":[{"StartTime":337100.0,"EndTime":337100.0,"Column":5}]},{"StartTime":337158.0,"Objects":[{"StartTime":337158.0,"EndTime":337158.0,"Column":2}]},{"StartTime":337216.0,"Objects":[{"StartTime":337216.0,"EndTime":337216.0,"Column":1}]},{"StartTime":337273.0,"Objects":[{"StartTime":337273.0,"EndTime":337273.0,"Column":2}]},{"StartTime":337331.0,"Objects":[{"StartTime":337331.0,"EndTime":337331.0,"Column":4}]},{"StartTime":337389.0,"Objects":[{"StartTime":337389.0,"EndTime":337389.0,"Column":2}]},{"StartTime":337446.0,"Objects":[{"StartTime":337446.0,"EndTime":337446.0,"Column":6}]},{"StartTime":337504.0,"Objects":[{"StartTime":337504.0,"EndTime":337504.0,"Column":2}]},{"StartTime":337561.0,"Objects":[{"StartTime":337561.0,"EndTime":337561.0,"Column":3}]},{"StartTime":337619.0,"Objects":[{"StartTime":337619.0,"EndTime":337619.0,"Column":2}]},{"StartTime":337677.0,"Objects":[{"StartTime":337677.0,"EndTime":337677.0,"Column":3}]},{"StartTime":337734.0,"Objects":[{"StartTime":337734.0,"EndTime":337734.0,"Column":5}]},{"StartTime":337793.0,"Objects":[{"StartTime":337793.0,"EndTime":337793.0,"Column":2}]},{"StartTime":337851.0,"Objects":[{"StartTime":337851.0,"EndTime":337851.0,"Column":0}]},{"StartTime":337909.0,"Objects":[{"StartTime":337909.0,"EndTime":337909.0,"Column":2}]},{"StartTime":337966.0,"Objects":[{"StartTime":337966.0,"EndTime":338196.0,"Column":5},{"StartTime":337966.0,"EndTime":338196.0,"Column":4}]},{"StartTime":338312.0,"Objects":[{"StartTime":338312.0,"EndTime":338312.0,"Column":6},{"StartTime":338312.0,"EndTime":338312.0,"Column":1}]},{"StartTime":338427.0,"Objects":[{"StartTime":338427.0,"EndTime":338657.0,"Column":3},{"StartTime":338427.0,"EndTime":338657.0,"Column":0}]},{"StartTime":338773.0,"Objects":[{"StartTime":338773.0,"EndTime":338773.0,"Column":6},{"StartTime":338773.0,"EndTime":338773.0,"Column":2}]},{"StartTime":338889.0,"Objects":[{"StartTime":338889.0,"EndTime":339004.0,"Column":1},{"StartTime":338889.0,"EndTime":339004.0,"Column":0},{"StartTime":338889.0,"EndTime":339004.0,"Column":5}]},{"StartTime":339120.0,"Objects":[{"StartTime":339120.0,"EndTime":339235.0,"Column":6},{"StartTime":339120.0,"EndTime":339235.0,"Column":3}]},{"StartTime":339350.0,"Objects":[{"StartTime":339350.0,"EndTime":339350.0,"Column":4},{"StartTime":339350.0,"EndTime":339350.0,"Column":5}]},{"StartTime":339407.0,"Objects":[{"StartTime":339407.0,"EndTime":339407.0,"Column":2}]},{"StartTime":339465.0,"Objects":[{"StartTime":339465.0,"EndTime":339465.0,"Column":4}]},{"StartTime":339523.0,"Objects":[{"StartTime":339523.0,"EndTime":339523.0,"Column":3}]},{"StartTime":339580.0,"Objects":[{"StartTime":339580.0,"EndTime":339580.0,"Column":4}]},{"StartTime":339638.0,"Objects":[{"StartTime":339638.0,"EndTime":339638.0,"Column":2}]},{"StartTime":339696.0,"Objects":[{"StartTime":339696.0,"EndTime":339696.0,"Column":4}]},{"StartTime":339753.0,"Objects":[{"StartTime":339753.0,"EndTime":339753.0,"Column":0}]},{"StartTime":339812.0,"Objects":[{"StartTime":339812.0,"EndTime":340042.0,"Column":6},{"StartTime":339812.0,"EndTime":340042.0,"Column":4},{"StartTime":339812.0,"EndTime":340042.0,"Column":1}]},{"StartTime":340158.0,"Objects":[{"StartTime":340158.0,"EndTime":340158.0,"Column":5},{"StartTime":340158.0,"EndTime":340158.0,"Column":3},{"StartTime":340158.0,"EndTime":340158.0,"Column":0}]},{"StartTime":340273.0,"Objects":[{"StartTime":340273.0,"EndTime":340388.0,"Column":6},{"StartTime":340273.0,"EndTime":340388.0,"Column":2}]},{"StartTime":340504.0,"Objects":[{"StartTime":340504.0,"EndTime":340619.0,"Column":3},{"StartTime":340504.0,"EndTime":340619.0,"Column":4}]},{"StartTime":340735.0,"Objects":[{"StartTime":340735.0,"EndTime":340965.0,"Column":5},{"StartTime":340735.0,"EndTime":340965.0,"Column":6}]},{"StartTime":341081.0,"Objects":[{"StartTime":341081.0,"EndTime":341081.0,"Column":3}]},{"StartTime":341197.0,"Objects":[{"StartTime":341197.0,"EndTime":341312.0,"Column":1},{"StartTime":341197.0,"EndTime":341312.0,"Column":2},{"StartTime":341197.0,"EndTime":341312.0,"Column":5}]},{"StartTime":341427.0,"Objects":[{"StartTime":341427.0,"EndTime":341542.0,"Column":6},{"StartTime":341427.0,"EndTime":341542.0,"Column":0},{"StartTime":341427.0,"EndTime":341542.0,"Column":4}]},{"StartTime":341658.0,"Objects":[{"StartTime":341658.0,"EndTime":341888.0,"Column":3},{"StartTime":341658.0,"EndTime":341888.0,"Column":2},{"StartTime":341658.0,"EndTime":341888.0,"Column":5}]},{"StartTime":342004.0,"Objects":[{"StartTime":342004.0,"EndTime":342004.0,"Column":1},{"StartTime":342004.0,"EndTime":342004.0,"Column":4},{"StartTime":342004.0,"EndTime":342004.0,"Column":0}]},{"StartTime":342120.0,"Objects":[{"StartTime":342120.0,"EndTime":342235.0,"Column":3}]},{"StartTime":342350.0,"Objects":[{"StartTime":342350.0,"EndTime":342465.0,"Column":4},{"StartTime":342350.0,"EndTime":342465.0,"Column":6}]},{"StartTime":342581.0,"Objects":[{"StartTime":342581.0,"EndTime":342811.0,"Column":3},{"StartTime":342581.0,"EndTime":342811.0,"Column":5}]},{"StartTime":342927.0,"Objects":[{"StartTime":342927.0,"EndTime":342927.0,"Column":0},{"StartTime":342927.0,"EndTime":342927.0,"Column":4},{"StartTime":342927.0,"EndTime":342927.0,"Column":1}]},{"StartTime":343043.0,"Objects":[{"StartTime":343043.0,"EndTime":343273.0,"Column":3}]},{"StartTime":343389.0,"Objects":[{"StartTime":343389.0,"EndTime":343389.0,"Column":6},{"StartTime":343389.0,"EndTime":343389.0,"Column":0}]},{"StartTime":343447.0,"Objects":[{"StartTime":343447.0,"EndTime":343447.0,"Column":5}]},{"StartTime":343504.0,"Objects":[{"StartTime":343504.0,"EndTime":343734.0,"Column":1},{"StartTime":343504.0,"EndTime":343734.0,"Column":0}]},{"StartTime":343850.0,"Objects":[{"StartTime":343850.0,"EndTime":344080.0,"Column":6},{"StartTime":343850.0,"EndTime":344080.0,"Column":2}]},{"StartTime":344197.0,"Objects":[{"StartTime":344197.0,"EndTime":344312.0,"Column":3},{"StartTime":344197.0,"EndTime":344312.0,"Column":0}]},{"StartTime":344370.0,"Objects":[{"StartTime":344370.0,"EndTime":344370.0,"Column":5}]},{"StartTime":344427.0,"Objects":[{"StartTime":344427.0,"EndTime":344657.0,"Column":2},{"StartTime":344427.0,"EndTime":344657.0,"Column":3}]},{"StartTime":344773.0,"Objects":[{"StartTime":344773.0,"EndTime":344773.0,"Column":1},{"StartTime":344773.0,"EndTime":344773.0,"Column":6}]},{"StartTime":344889.0,"Objects":[{"StartTime":344889.0,"EndTime":345004.0,"Column":3},{"StartTime":344889.0,"EndTime":345004.0,"Column":4}]},{"StartTime":345120.0,"Objects":[{"StartTime":345120.0,"EndTime":345235.0,"Column":0},{"StartTime":345120.0,"EndTime":345235.0,"Column":6}]},{"StartTime":345350.0,"Objects":[{"StartTime":345350.0,"EndTime":345465.0,"Column":1},{"StartTime":345350.0,"EndTime":345465.0,"Column":3},{"StartTime":345350.0,"EndTime":345465.0,"Column":5}]},{"StartTime":345581.0,"Objects":[{"StartTime":345581.0,"EndTime":345696.0,"Column":0},{"StartTime":345581.0,"EndTime":345696.0,"Column":4}]},{"StartTime":345812.0,"Objects":[{"StartTime":345812.0,"EndTime":345927.0,"Column":1},{"StartTime":345812.0,"EndTime":345927.0,"Column":5}]},{"StartTime":346043.0,"Objects":[{"StartTime":346043.0,"EndTime":346158.0,"Column":4},{"StartTime":346043.0,"EndTime":346158.0,"Column":3}]},{"StartTime":346273.0,"Objects":[{"StartTime":346273.0,"EndTime":346446.0,"Column":1},{"StartTime":346273.0,"EndTime":346446.0,"Column":0}]},{"StartTime":346504.0,"Objects":[{"StartTime":346504.0,"EndTime":346677.0,"Column":4},{"StartTime":346504.0,"EndTime":346677.0,"Column":6}]},{"StartTime":346735.0,"Objects":[{"StartTime":346735.0,"EndTime":346908.0,"Column":1},{"StartTime":346735.0,"EndTime":346908.0,"Column":0},{"StartTime":346735.0,"EndTime":346908.0,"Column":3}]},{"StartTime":346966.0,"Objects":[{"StartTime":346966.0,"EndTime":347081.0,"Column":4},{"StartTime":346966.0,"EndTime":347081.0,"Column":2}]},{"StartTime":347197.0,"Objects":[{"StartTime":347197.0,"EndTime":347427.0,"Column":3},{"StartTime":347197.0,"EndTime":347427.0,"Column":5}]},{"StartTime":347543.0,"Objects":[{"StartTime":347543.0,"EndTime":347543.0,"Column":0},{"StartTime":347543.0,"EndTime":347543.0,"Column":1}]},{"StartTime":347658.0,"Objects":[{"StartTime":347658.0,"EndTime":347773.0,"Column":5}]},{"StartTime":347889.0,"Objects":[{"StartTime":347889.0,"EndTime":348004.0,"Column":2},{"StartTime":347889.0,"EndTime":348004.0,"Column":1}]},{"StartTime":348120.0,"Objects":[{"StartTime":348120.0,"EndTime":348235.0,"Column":6}]},{"StartTime":348350.0,"Objects":[{"StartTime":348350.0,"EndTime":348465.0,"Column":2},{"StartTime":348350.0,"EndTime":348465.0,"Column":4}]},{"StartTime":348581.0,"Objects":[{"StartTime":348581.0,"EndTime":348696.0,"Column":6},{"StartTime":348581.0,"EndTime":348696.0,"Column":5},{"StartTime":348581.0,"EndTime":348696.0,"Column":3}]},{"StartTime":348811.0,"Objects":[{"StartTime":348811.0,"EndTime":348926.0,"Column":1},{"StartTime":348811.0,"EndTime":348926.0,"Column":2}]},{"StartTime":348985.0,"Objects":[{"StartTime":348985.0,"EndTime":348985.0,"Column":4}]},{"StartTime":349043.0,"Objects":[{"StartTime":349043.0,"EndTime":349273.0,"Column":3},{"StartTime":349043.0,"EndTime":349273.0,"Column":0},{"StartTime":349043.0,"EndTime":349273.0,"Column":1}]},{"StartTime":349389.0,"Objects":[{"StartTime":349389.0,"EndTime":349389.0,"Column":5},{"StartTime":349389.0,"EndTime":349389.0,"Column":6},{"StartTime":349389.0,"EndTime":349389.0,"Column":4}]},{"StartTime":349504.0,"Objects":[{"StartTime":349504.0,"EndTime":349619.0,"Column":1}]},{"StartTime":349735.0,"Objects":[{"StartTime":349735.0,"EndTime":349850.0,"Column":2},{"StartTime":349735.0,"EndTime":349850.0,"Column":0}]},{"StartTime":349966.0,"Objects":[{"StartTime":349966.0,"EndTime":350196.0,"Column":3}]},{"StartTime":350312.0,"Objects":[{"StartTime":350312.0,"EndTime":350312.0,"Column":4}]},{"StartTime":350427.0,"Objects":[{"StartTime":350427.0,"EndTime":350657.0,"Column":0}]},{"StartTime":350773.0,"Objects":[{"StartTime":350773.0,"EndTime":350773.0,"Column":1}]},{"StartTime":350889.0,"Objects":[{"StartTime":350889.0,"EndTime":351119.0,"Column":3}]},{"StartTime":351235.0,"Objects":[{"StartTime":351235.0,"EndTime":351235.0,"Column":0},{"StartTime":351235.0,"EndTime":351235.0,"Column":2}]},{"StartTime":351350.0,"Objects":[{"StartTime":351350.0,"EndTime":351580.0,"Column":4},{"StartTime":351350.0,"EndTime":351580.0,"Column":6},{"StartTime":351350.0,"EndTime":351580.0,"Column":5}]},{"StartTime":351812.0,"Objects":[{"StartTime":351812.0,"EndTime":352042.0,"Column":0}]},{"StartTime":352158.0,"Objects":[{"StartTime":352158.0,"EndTime":352158.0,"Column":6},{"StartTime":352158.0,"EndTime":352158.0,"Column":3}]},{"StartTime":352273.0,"Objects":[{"StartTime":352273.0,"EndTime":352388.0,"Column":4}]},{"StartTime":352504.0,"Objects":[{"StartTime":352504.0,"EndTime":352619.0,"Column":2},{"StartTime":352504.0,"EndTime":352619.0,"Column":0}]},{"StartTime":352735.0,"Objects":[{"StartTime":352735.0,"EndTime":352965.0,"Column":3}]},{"StartTime":353081.0,"Objects":[{"StartTime":353081.0,"EndTime":353081.0,"Column":5}]},{"StartTime":353197.0,"Objects":[{"StartTime":353197.0,"EndTime":353312.0,"Column":4},{"StartTime":353197.0,"EndTime":353312.0,"Column":1}]},{"StartTime":353427.0,"Objects":[{"StartTime":353427.0,"EndTime":353542.0,"Column":5},{"StartTime":353427.0,"EndTime":353542.0,"Column":0}]},{"StartTime":353658.0,"Objects":[{"StartTime":353658.0,"EndTime":353773.0,"Column":4},{"StartTime":353658.0,"EndTime":353773.0,"Column":3}]},{"StartTime":353889.0,"Objects":[{"StartTime":353889.0,"EndTime":354004.0,"Column":1},{"StartTime":353889.0,"EndTime":354004.0,"Column":6}]},{"StartTime":354120.0,"Objects":[{"StartTime":354120.0,"EndTime":354235.0,"Column":3},{"StartTime":354120.0,"EndTime":354235.0,"Column":5}]},{"StartTime":354350.0,"Objects":[{"StartTime":354350.0,"EndTime":354465.0,"Column":2},{"StartTime":354350.0,"EndTime":354465.0,"Column":6}]},{"StartTime":354581.0,"Objects":[{"StartTime":354581.0,"EndTime":354811.0,"Column":5}]},{"StartTime":354927.0,"Objects":[{"StartTime":354927.0,"EndTime":354927.0,"Column":3},{"StartTime":354927.0,"EndTime":354927.0,"Column":6},{"StartTime":354927.0,"EndTime":354927.0,"Column":4}]},{"StartTime":355043.0,"Objects":[{"StartTime":355043.0,"EndTime":355273.0,"Column":5}]},{"StartTime":355389.0,"Objects":[{"StartTime":355389.0,"EndTime":355389.0,"Column":0},{"StartTime":355389.0,"EndTime":355389.0,"Column":6}]},{"StartTime":355504.0,"Objects":[{"StartTime":355504.0,"EndTime":355504.0,"Column":2},{"StartTime":355504.0,"EndTime":355504.0,"Column":3}]},{"StartTime":355620.0,"Objects":[{"StartTime":355620.0,"EndTime":355620.0,"Column":1},{"StartTime":355620.0,"EndTime":355620.0,"Column":4}]},{"StartTime":355735.0,"Objects":[{"StartTime":355735.0,"EndTime":355735.0,"Column":2},{"StartTime":355735.0,"EndTime":355735.0,"Column":3},{"StartTime":355735.0,"EndTime":355735.0,"Column":5}]},{"StartTime":355851.0,"Objects":[{"StartTime":355851.0,"EndTime":355851.0,"Column":1},{"StartTime":355851.0,"EndTime":355851.0,"Column":4},{"StartTime":355851.0,"EndTime":355851.0,"Column":6}]},{"StartTime":355966.0,"Objects":[{"StartTime":355966.0,"EndTime":355966.0,"Column":2},{"StartTime":355966.0,"EndTime":355966.0,"Column":3}]},{"StartTime":356082.0,"Objects":[{"StartTime":356082.0,"EndTime":356082.0,"Column":1},{"StartTime":356082.0,"EndTime":356082.0,"Column":4},{"StartTime":356082.0,"EndTime":356082.0,"Column":5}]},{"StartTime":356197.0,"Objects":[{"StartTime":356197.0,"EndTime":356197.0,"Column":2},{"StartTime":356197.0,"EndTime":356197.0,"Column":3}]},{"StartTime":356313.0,"Objects":[{"StartTime":356313.0,"EndTime":356313.0,"Column":4},{"StartTime":356313.0,"EndTime":356313.0,"Column":5}]},{"StartTime":356427.0,"Objects":[{"StartTime":356427.0,"EndTime":356657.0,"Column":6},{"StartTime":356427.0,"EndTime":356657.0,"Column":1}]},{"StartTime":356773.0,"Objects":[{"StartTime":356773.0,"EndTime":356773.0,"Column":4},{"StartTime":356773.0,"EndTime":356773.0,"Column":2}]},{"StartTime":356889.0,"Objects":[{"StartTime":356889.0,"EndTime":357004.0,"Column":1}]},{"StartTime":357120.0,"Objects":[{"StartTime":357120.0,"EndTime":357235.0,"Column":2}]},{"StartTime":357350.0,"Objects":[{"StartTime":357350.0,"EndTime":357580.0,"Column":4},{"StartTime":357350.0,"EndTime":357580.0,"Column":5}]},{"StartTime":357697.0,"Objects":[{"StartTime":357697.0,"EndTime":357697.0,"Column":6},{"StartTime":357697.0,"EndTime":357697.0,"Column":3}]},{"StartTime":357812.0,"Objects":[{"StartTime":357812.0,"EndTime":357812.0,"Column":1},{"StartTime":357812.0,"EndTime":357812.0,"Column":0}]},{"StartTime":357927.0,"Objects":[{"StartTime":357927.0,"EndTime":357927.0,"Column":2},{"StartTime":357927.0,"EndTime":357927.0,"Column":3}]},{"StartTime":358043.0,"Objects":[{"StartTime":358043.0,"EndTime":358043.0,"Column":1},{"StartTime":358043.0,"EndTime":358043.0,"Column":4}]},{"StartTime":358158.0,"Objects":[{"StartTime":358158.0,"EndTime":358158.0,"Column":2},{"StartTime":358158.0,"EndTime":358158.0,"Column":3}]},{"StartTime":358273.0,"Objects":[{"StartTime":358273.0,"EndTime":358503.0,"Column":4}]},{"StartTime":358620.0,"Objects":[{"StartTime":358620.0,"EndTime":358620.0,"Column":0},{"StartTime":358620.0,"EndTime":358620.0,"Column":2}]},{"StartTime":358735.0,"Objects":[{"StartTime":358735.0,"EndTime":358850.0,"Column":3},{"StartTime":358735.0,"EndTime":358850.0,"Column":4}]},{"StartTime":358966.0,"Objects":[{"StartTime":358966.0,"EndTime":359081.0,"Column":5}]},{"StartTime":359197.0,"Objects":[{"StartTime":359197.0,"EndTime":359658.0,"Column":3},{"StartTime":359197.0,"EndTime":359197.0,"Column":6},{"StartTime":359427.0,"EndTime":359427.0,"Column":6},{"StartTime":359657.0,"EndTime":359657.0,"Column":6}]},{"StartTime":359773.0,"Objects":[{"StartTime":359773.0,"EndTime":359773.0,"Column":2},{"StartTime":359773.0,"EndTime":359773.0,"Column":0}]},{"StartTime":359889.0,"Objects":[{"StartTime":359889.0,"EndTime":359889.0,"Column":3},{"StartTime":359889.0,"EndTime":359889.0,"Column":4}]},{"StartTime":360004.0,"Objects":[{"StartTime":360004.0,"EndTime":360004.0,"Column":2}]},{"StartTime":360120.0,"Objects":[{"StartTime":360120.0,"EndTime":360350.0,"Column":5},{"StartTime":360120.0,"EndTime":360350.0,"Column":1},{"StartTime":360120.0,"EndTime":360350.0,"Column":4}]},{"StartTime":360466.0,"Objects":[{"StartTime":360466.0,"EndTime":360466.0,"Column":6}]},{"StartTime":360581.0,"Objects":[{"StartTime":360581.0,"EndTime":360696.0,"Column":0}]},{"StartTime":360812.0,"Objects":[{"StartTime":360812.0,"EndTime":360927.0,"Column":6}]},{"StartTime":361043.0,"Objects":[{"StartTime":361043.0,"EndTime":361158.0,"Column":2}]},{"StartTime":361273.0,"Objects":[{"StartTime":361273.0,"EndTime":361388.0,"Column":3},{"StartTime":361273.0,"EndTime":361388.0,"Column":4}]},{"StartTime":361504.0,"Objects":[{"StartTime":361504.0,"EndTime":361504.0,"Column":0},{"StartTime":361504.0,"EndTime":361504.0,"Column":1}]},{"StartTime":361620.0,"Objects":[{"StartTime":361620.0,"EndTime":361620.0,"Column":2}]},{"StartTime":361735.0,"Objects":[{"StartTime":361735.0,"EndTime":361735.0,"Column":0},{"StartTime":361735.0,"EndTime":361735.0,"Column":1},{"StartTime":361735.0,"EndTime":361735.0,"Column":6}]},{"StartTime":361851.0,"Objects":[{"StartTime":361851.0,"EndTime":361851.0,"Column":2},{"StartTime":361851.0,"EndTime":361851.0,"Column":3}]},{"StartTime":361966.0,"Objects":[{"StartTime":361966.0,"EndTime":362196.0,"Column":0}]},{"StartTime":362312.0,"Objects":[{"StartTime":362312.0,"EndTime":362312.0,"Column":3},{"StartTime":362312.0,"EndTime":362312.0,"Column":5}]},{"StartTime":362427.0,"Objects":[{"StartTime":362427.0,"EndTime":362542.0,"Column":2}]},{"StartTime":362658.0,"Objects":[{"StartTime":362658.0,"EndTime":362773.0,"Column":1},{"StartTime":362658.0,"EndTime":362773.0,"Column":0}]},{"StartTime":362831.0,"Objects":[{"StartTime":362831.0,"EndTime":362831.0,"Column":3}]},{"StartTime":362889.0,"Objects":[{"StartTime":362889.0,"EndTime":363119.0,"Column":6},{"StartTime":362889.0,"EndTime":363119.0,"Column":5}]},{"StartTime":363235.0,"Objects":[{"StartTime":363235.0,"EndTime":363465.0,"Column":1},{"StartTime":363235.0,"EndTime":363465.0,"Column":0}]},{"StartTime":363581.0,"Objects":[{"StartTime":363581.0,"EndTime":363696.0,"Column":2},{"StartTime":363581.0,"EndTime":363696.0,"Column":3}]},{"StartTime":363812.0,"Objects":[{"StartTime":363812.0,"EndTime":364273.0,"Column":2},{"StartTime":363812.0,"EndTime":363812.0,"Column":3},{"StartTime":363812.0,"EndTime":363812.0,"Column":6},{"StartTime":364042.0,"EndTime":364042.0,"Column":6},{"StartTime":364042.0,"EndTime":364042.0,"Column":0},{"StartTime":364272.0,"EndTime":364272.0,"Column":0},{"StartTime":364272.0,"EndTime":364272.0,"Column":3}]},{"StartTime":364389.0,"Objects":[{"StartTime":364389.0,"EndTime":364389.0,"Column":3},{"StartTime":364389.0,"EndTime":364389.0,"Column":1}]},{"StartTime":364504.0,"Objects":[{"StartTime":364504.0,"EndTime":364619.0,"Column":2},{"StartTime":364504.0,"EndTime":364619.0,"Column":6}]},{"StartTime":364735.0,"Objects":[{"StartTime":364735.0,"EndTime":364850.0,"Column":3},{"StartTime":364735.0,"EndTime":364850.0,"Column":1}]},{"StartTime":364966.0,"Objects":[{"StartTime":364966.0,"EndTime":365427.0,"Column":6}]},{"StartTime":365543.0,"Objects":[{"StartTime":365543.0,"EndTime":365543.0,"Column":3},{"StartTime":365543.0,"EndTime":365543.0,"Column":5},{"StartTime":365543.0,"EndTime":365543.0,"Column":0}]},{"StartTime":365658.0,"Objects":[{"StartTime":365658.0,"EndTime":365773.0,"Column":2}]},{"StartTime":365889.0,"Objects":[{"StartTime":365889.0,"EndTime":366004.0,"Column":4},{"StartTime":365889.0,"EndTime":366004.0,"Column":6}]},{"StartTime":366120.0,"Objects":[{"StartTime":366120.0,"EndTime":366120.0,"Column":5}]},{"StartTime":366235.0,"Objects":[{"StartTime":366235.0,"EndTime":366235.0,"Column":6},{"StartTime":366350.0,"EndTime":366350.0,"Column":2},{"StartTime":366465.0,"EndTime":366465.0,"Column":1}]},{"StartTime":366581.0,"Objects":[{"StartTime":366581.0,"EndTime":366696.0,"Column":5},{"StartTime":366581.0,"EndTime":366696.0,"Column":4}]},{"StartTime":366812.0,"Objects":[{"StartTime":366812.0,"EndTime":367042.0,"Column":6}]},{"StartTime":367158.0,"Objects":[{"StartTime":367158.0,"EndTime":367158.0,"Column":2}]},{"StartTime":367273.0,"Objects":[{"StartTime":367273.0,"EndTime":367388.0,"Column":6}]},{"StartTime":367504.0,"Objects":[{"StartTime":367504.0,"EndTime":367965.0,"Column":0}]},{"StartTime":368081.0,"Objects":[{"StartTime":368081.0,"EndTime":368081.0,"Column":6}]},{"StartTime":368197.0,"Objects":[{"StartTime":368197.0,"EndTime":368312.0,"Column":3}]},{"StartTime":368427.0,"Objects":[{"StartTime":368427.0,"EndTime":368657.0,"Column":1}]},{"StartTime":368773.0,"Objects":[{"StartTime":368773.0,"EndTime":369003.0,"Column":4}]},{"StartTime":369120.0,"Objects":[{"StartTime":369120.0,"EndTime":369235.0,"Column":6},{"StartTime":369120.0,"EndTime":369235.0,"Column":3}]},{"StartTime":369350.0,"Objects":[{"StartTime":369350.0,"EndTime":369580.0,"Column":2}]},{"StartTime":369697.0,"Objects":[{"StartTime":369697.0,"EndTime":369697.0,"Column":1}]},{"StartTime":369812.0,"Objects":[{"StartTime":369812.0,"EndTime":369927.0,"Column":6}]},{"StartTime":370043.0,"Objects":[{"StartTime":370043.0,"EndTime":370158.0,"Column":3},{"StartTime":370043.0,"EndTime":370158.0,"Column":0}]},{"StartTime":370273.0,"Objects":[{"StartTime":370273.0,"EndTime":370273.0,"Column":4}]},{"StartTime":370389.0,"Objects":[{"StartTime":370389.0,"EndTime":370389.0,"Column":0}]},{"StartTime":370504.0,"Objects":[{"StartTime":370504.0,"EndTime":370504.0,"Column":1},{"StartTime":370504.0,"EndTime":370504.0,"Column":2}]},{"StartTime":370620.0,"Objects":[{"StartTime":370620.0,"EndTime":370620.0,"Column":3},{"StartTime":370620.0,"EndTime":370620.0,"Column":4}]},{"StartTime":370677.0,"Objects":[{"StartTime":370677.0,"EndTime":370677.0,"Column":2}]},{"StartTime":370735.0,"Objects":[{"StartTime":370735.0,"EndTime":370735.0,"Column":3}]},{"StartTime":370793.0,"Objects":[{"StartTime":370793.0,"EndTime":370793.0,"Column":2}]},{"StartTime":370850.0,"Objects":[{"StartTime":370850.0,"EndTime":370850.0,"Column":4}]},{"StartTime":370908.0,"Objects":[{"StartTime":370908.0,"EndTime":370908.0,"Column":2}]},{"StartTime":370966.0,"Objects":[{"StartTime":370966.0,"EndTime":370966.0,"Column":6}]},{"StartTime":371081.0,"Objects":[{"StartTime":371081.0,"EndTime":371081.0,"Column":1},{"StartTime":371081.0,"EndTime":371081.0,"Column":0},{"StartTime":371081.0,"EndTime":371081.0,"Column":4}]},{"StartTime":371197.0,"Objects":[{"StartTime":371197.0,"EndTime":371427.0,"Column":3},{"StartTime":371197.0,"EndTime":371427.0,"Column":2}]},{"StartTime":371658.0,"Objects":[{"StartTime":371658.0,"EndTime":371888.0,"Column":6}]},{"StartTime":372120.0,"Objects":[{"StartTime":372120.0,"EndTime":372350.0,"Column":2}]},{"StartTime":372581.0,"Objects":[{"StartTime":372581.0,"EndTime":372696.0,"Column":1},{"StartTime":372581.0,"EndTime":372696.0,"Column":5}]},{"StartTime":372812.0,"Objects":[{"StartTime":372812.0,"EndTime":372812.0,"Column":0},{"StartTime":372812.0,"EndTime":372812.0,"Column":2}]},{"StartTime":372927.0,"Objects":[{"StartTime":372927.0,"EndTime":372927.0,"Column":1},{"StartTime":372927.0,"EndTime":372927.0,"Column":4},{"StartTime":372927.0,"EndTime":372927.0,"Column":3}]},{"StartTime":373043.0,"Objects":[{"StartTime":373043.0,"EndTime":373273.0,"Column":2},{"StartTime":373043.0,"EndTime":373273.0,"Column":0}]},{"StartTime":373504.0,"Objects":[{"StartTime":373504.0,"EndTime":373734.0,"Column":5}]},{"StartTime":373850.0,"Objects":[{"StartTime":373850.0,"EndTime":373850.0,"Column":6}]},{"StartTime":373966.0,"Objects":[{"StartTime":373966.0,"EndTime":374196.0,"Column":1},{"StartTime":373966.0,"EndTime":374196.0,"Column":2}]},{"StartTime":374427.0,"Objects":[{"StartTime":374427.0,"EndTime":374542.0,"Column":6}]},{"StartTime":374658.0,"Objects":[{"StartTime":374658.0,"EndTime":374658.0,"Column":5},{"StartTime":374658.0,"EndTime":374658.0,"Column":0}]},{"StartTime":374773.0,"Objects":[{"StartTime":374773.0,"EndTime":374773.0,"Column":4},{"StartTime":374773.0,"EndTime":374773.0,"Column":6}]},{"StartTime":374830.0,"Objects":[{"StartTime":374830.0,"EndTime":374830.0,"Column":0}]},{"StartTime":374889.0,"Objects":[{"StartTime":374889.0,"EndTime":375119.0,"Column":1}]},{"StartTime":375350.0,"Objects":[{"StartTime":375350.0,"EndTime":375350.0,"Column":3}]},{"StartTime":375466.0,"Objects":[{"StartTime":375466.0,"EndTime":375466.0,"Column":1},{"StartTime":375466.0,"EndTime":375466.0,"Column":2}]},{"StartTime":375581.0,"Objects":[{"StartTime":375581.0,"EndTime":375581.0,"Column":3},{"StartTime":375581.0,"EndTime":375581.0,"Column":4}]},{"StartTime":375697.0,"Objects":[{"StartTime":375697.0,"EndTime":375697.0,"Column":5}]},{"StartTime":375812.0,"Objects":[{"StartTime":375812.0,"EndTime":376042.0,"Column":3},{"StartTime":375812.0,"EndTime":376042.0,"Column":2},{"StartTime":375812.0,"EndTime":376042.0,"Column":6}]},{"StartTime":376273.0,"Objects":[{"StartTime":376273.0,"EndTime":376503.0,"Column":4}]},{"StartTime":376620.0,"Objects":[{"StartTime":376620.0,"EndTime":376620.0,"Column":0}]},{"StartTime":376735.0,"Objects":[{"StartTime":376735.0,"EndTime":376965.0,"Column":5}]},{"StartTime":377197.0,"Objects":[{"StartTime":377197.0,"EndTime":377197.0,"Column":0},{"StartTime":377197.0,"EndTime":377197.0,"Column":6}]},{"StartTime":377313.0,"Objects":[{"StartTime":377313.0,"EndTime":377313.0,"Column":1},{"StartTime":377313.0,"EndTime":377313.0,"Column":2}]},{"StartTime":377428.0,"Objects":[{"StartTime":377428.0,"EndTime":377428.0,"Column":3},{"StartTime":377428.0,"EndTime":377428.0,"Column":4}]},{"StartTime":377544.0,"Objects":[{"StartTime":377544.0,"EndTime":377544.0,"Column":2},{"StartTime":377544.0,"EndTime":377544.0,"Column":5}]},{"StartTime":377658.0,"Objects":[{"StartTime":377658.0,"EndTime":377888.0,"Column":4}]},{"StartTime":378120.0,"Objects":[{"StartTime":378120.0,"EndTime":378350.0,"Column":0},{"StartTime":378120.0,"EndTime":378350.0,"Column":1}]},{"StartTime":378581.0,"Objects":[{"StartTime":378581.0,"EndTime":379273.0,"Column":6}]},{"StartTime":379504.0,"Objects":[{"StartTime":379504.0,"EndTime":379734.0,"Column":3}]},{"StartTime":379850.0,"Objects":[{"StartTime":379850.0,"EndTime":380080.0,"Column":0},{"StartTime":379850.0,"EndTime":380080.0,"Column":6}]},{"StartTime":380197.0,"Objects":[{"StartTime":380197.0,"EndTime":380312.0,"Column":3}]},{"StartTime":380427.0,"Objects":[{"StartTime":380427.0,"EndTime":380427.0,"Column":5},{"StartTime":380427.0,"EndTime":380427.0,"Column":1},{"StartTime":380427.0,"EndTime":380427.0,"Column":6}]},{"StartTime":380543.0,"Objects":[{"StartTime":380543.0,"EndTime":380773.0,"Column":3}]},{"StartTime":380889.0,"Objects":[{"StartTime":380889.0,"EndTime":381004.0,"Column":0}]},{"StartTime":381120.0,"Objects":[{"StartTime":381120.0,"EndTime":381235.0,"Column":6}]},{"StartTime":381350.0,"Objects":[{"StartTime":381350.0,"EndTime":381350.0,"Column":0}]},{"StartTime":381466.0,"Objects":[{"StartTime":381466.0,"EndTime":381696.0,"Column":4}]},{"StartTime":381812.0,"Objects":[{"StartTime":381812.0,"EndTime":381927.0,"Column":2}]},{"StartTime":382043.0,"Objects":[{"StartTime":382043.0,"EndTime":382158.0,"Column":4}]},{"StartTime":382273.0,"Objects":[{"StartTime":382273.0,"EndTime":382446.0,"Column":1}]},{"StartTime":382504.0,"Objects":[{"StartTime":382504.0,"EndTime":382677.0,"Column":0}]},{"StartTime":382735.0,"Objects":[{"StartTime":382735.0,"EndTime":382735.0,"Column":4}]},{"StartTime":382792.0,"Objects":[{"StartTime":382792.0,"EndTime":382792.0,"Column":5}]},{"StartTime":382850.0,"Objects":[{"StartTime":382850.0,"EndTime":382850.0,"Column":4}]},{"StartTime":382908.0,"Objects":[{"StartTime":382908.0,"EndTime":382908.0,"Column":1}]},{"StartTime":382966.0,"Objects":[{"StartTime":382966.0,"EndTime":382966.0,"Column":4}]},{"StartTime":383023.0,"Objects":[{"StartTime":383023.0,"EndTime":383023.0,"Column":6}]},{"StartTime":383080.0,"Objects":[{"StartTime":383080.0,"EndTime":383080.0,"Column":3}]},{"StartTime":383138.0,"Objects":[{"StartTime":383138.0,"EndTime":383138.0,"Column":2}]},{"StartTime":383197.0,"Objects":[{"StartTime":383197.0,"EndTime":383197.0,"Column":3}]},{"StartTime":383254.0,"Objects":[{"StartTime":383254.0,"EndTime":383254.0,"Column":6}]},{"StartTime":383312.0,"Objects":[{"StartTime":383312.0,"EndTime":383312.0,"Column":4}]},{"StartTime":383370.0,"Objects":[{"StartTime":383370.0,"EndTime":383370.0,"Column":3}]},{"StartTime":383427.0,"Objects":[{"StartTime":383427.0,"EndTime":383427.0,"Column":5}]},{"StartTime":383484.0,"Objects":[{"StartTime":383484.0,"EndTime":383484.0,"Column":2}]},{"StartTime":383542.0,"Objects":[{"StartTime":383542.0,"EndTime":383542.0,"Column":3}]},{"StartTime":383600.0,"Objects":[{"StartTime":383600.0,"EndTime":383600.0,"Column":2}]},{"StartTime":383657.0,"Objects":[{"StartTime":383657.0,"EndTime":383657.0,"Column":1}]},{"StartTime":383715.0,"Objects":[{"StartTime":383715.0,"EndTime":383715.0,"Column":2}]},{"StartTime":383773.0,"Objects":[{"StartTime":383773.0,"EndTime":383773.0,"Column":1}]},{"StartTime":383831.0,"Objects":[{"StartTime":383831.0,"EndTime":383831.0,"Column":0}]},{"StartTime":383889.0,"Objects":[{"StartTime":383889.0,"EndTime":383889.0,"Column":5}]},{"StartTime":383947.0,"Objects":[{"StartTime":383947.0,"EndTime":383947.0,"Column":0}]},{"StartTime":384004.0,"Objects":[{"StartTime":384004.0,"EndTime":384004.0,"Column":5}]},{"StartTime":384062.0,"Objects":[{"StartTime":384062.0,"EndTime":384062.0,"Column":0}]},{"StartTime":384120.0,"Objects":[{"StartTime":384120.0,"EndTime":384120.0,"Column":3}]}]} \ No newline at end of file From 2e3ee00c19ec203908d0ccc9dbe9a115224803c7 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Fri, 2 Mar 2018 13:10:09 +0900 Subject: [PATCH 245/544] Remove unnecessary changes --- osu.Game.Rulesets.Osu/osu.Game.Rulesets.Osu.csproj | 3 --- osu.Game/Properties/AssemblyInfo.cs | 5 ----- 2 files changed, 8 deletions(-) diff --git a/osu.Game.Rulesets.Osu/osu.Game.Rulesets.Osu.csproj b/osu.Game.Rulesets.Osu/osu.Game.Rulesets.Osu.csproj index d4d001de81..fc3e3fa72f 100644 --- a/osu.Game.Rulesets.Osu/osu.Game.Rulesets.Osu.csproj +++ b/osu.Game.Rulesets.Osu/osu.Game.Rulesets.Osu.csproj @@ -37,9 +37,6 @@ $(SolutionDir)\packages\JetBrains.Annotations.11.1.0\lib\net20\JetBrains.Annotations.dll True - - ..\packages\Newtonsoft.Json.10.0.3\lib\net45\Newtonsoft.Json.dll - $(SolutionDir)\packages\NUnit.3.8.1\lib\net45\nunit.framework.dll True diff --git a/osu.Game/Properties/AssemblyInfo.cs b/osu.Game/Properties/AssemblyInfo.cs index 5b33ee0761..56558044f8 100644 --- a/osu.Game/Properties/AssemblyInfo.cs +++ b/osu.Game/Properties/AssemblyInfo.cs @@ -2,9 +2,7 @@ // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using System.Reflection; -using System.Runtime.CompilerServices; using System.Runtime.InteropServices; -using osu.Framework.Testing; // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information @@ -18,9 +16,6 @@ using osu.Framework.Testing; [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] -[assembly: InternalsVisibleTo("osu.Game.Tests")] -[assembly: InternalsVisibleTo(DynamicClassCompiler.DYNAMIC_ASSEMBLY_NAME)] - // Setting ComVisible to false makes the types in this assembly not visible // to COM components. If you need to access a type in this assembly from // COM, set the ComVisible attribute to true on that type. From 6fff6da751ee050920115d7bc457940c462ff5cc Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Fri, 2 Mar 2018 14:01:34 +0900 Subject: [PATCH 246/544] Ignore broken testcases --- osu.Game.Rulesets.Catch/Tests/CatchBeatmapConversionTest.cs | 2 +- osu.Game.Rulesets.Mania/Tests/ManiaBeatmapConversionTest.cs | 3 ++- osu.Game.Rulesets.Osu/Tests/OsuBeatmapConversionTest.cs | 2 +- osu.Game.Rulesets.Taiko/Tests/TaikoBeatmapConversionTest.cs | 3 ++- 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/osu.Game.Rulesets.Catch/Tests/CatchBeatmapConversionTest.cs b/osu.Game.Rulesets.Catch/Tests/CatchBeatmapConversionTest.cs index e07e40ff3a..5a3dee5dda 100644 --- a/osu.Game.Rulesets.Catch/Tests/CatchBeatmapConversionTest.cs +++ b/osu.Game.Rulesets.Catch/Tests/CatchBeatmapConversionTest.cs @@ -18,7 +18,7 @@ namespace osu.Game.Rulesets.Catch.Tests { protected override string ResourceAssembly => "osu.Game.Rulesets.Catch"; - [TestCase(875945)] + [TestCase(875945), Ignore("See: https://github.com/ppy/osu/issues/2149")] public new void Test(int beatmapId) { base.Test(beatmapId); diff --git a/osu.Game.Rulesets.Mania/Tests/ManiaBeatmapConversionTest.cs b/osu.Game.Rulesets.Mania/Tests/ManiaBeatmapConversionTest.cs index 3c11478eab..c61ec85f34 100644 --- a/osu.Game.Rulesets.Mania/Tests/ManiaBeatmapConversionTest.cs +++ b/osu.Game.Rulesets.Mania/Tests/ManiaBeatmapConversionTest.cs @@ -20,7 +20,8 @@ namespace osu.Game.Rulesets.Mania.Tests private bool isForCurrentRuleset; - [TestCase(875945, false), NonParallelizable] + [NonParallelizable] + [TestCase(875945, false), Ignore("See: https://github.com/ppy/osu/issues/2150")] public void Test(int beatmapId, bool isForCurrentRuleset) { this.isForCurrentRuleset = isForCurrentRuleset; diff --git a/osu.Game.Rulesets.Osu/Tests/OsuBeatmapConversionTest.cs b/osu.Game.Rulesets.Osu/Tests/OsuBeatmapConversionTest.cs index 900b4bcb9b..cac0c83e96 100644 --- a/osu.Game.Rulesets.Osu/Tests/OsuBeatmapConversionTest.cs +++ b/osu.Game.Rulesets.Osu/Tests/OsuBeatmapConversionTest.cs @@ -19,7 +19,7 @@ namespace osu.Game.Rulesets.Osu.Tests { protected override string ResourceAssembly => "osu.Game.Rulesets.Osu"; - [TestCase(875945)] + [TestCase(875945), Ignore("See: https://github.com/ppy/osu/issues/2151")] public new void Test(int beatmapId) { base.Test(beatmapId); diff --git a/osu.Game.Rulesets.Taiko/Tests/TaikoBeatmapConversionTest.cs b/osu.Game.Rulesets.Taiko/Tests/TaikoBeatmapConversionTest.cs index 0522e01d19..3c779589cf 100644 --- a/osu.Game.Rulesets.Taiko/Tests/TaikoBeatmapConversionTest.cs +++ b/osu.Game.Rulesets.Taiko/Tests/TaikoBeatmapConversionTest.cs @@ -20,7 +20,8 @@ namespace osu.Game.Rulesets.Taiko.Tests private bool isForCurrentRuleset; - [TestCase(875945, false), NonParallelizable] + [NonParallelizable] + [TestCase(875945, false), Ignore("See: https://github.com/ppy/osu/issues/2152")] public void Test(int beatmapId, bool isForCurrentRuleset) { this.isForCurrentRuleset = isForCurrentRuleset; From 0ec462b98dd8f02201a33755fdf9a5936ff4b89d Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Fri, 2 Mar 2018 14:46:05 +0900 Subject: [PATCH 247/544] Only use osu.Desktop to determine test assemblies --- appveyor.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/appveyor.yml b/appveyor.yml index b86082334d..e63f6ea55c 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -20,6 +20,10 @@ build: project: osu.sln parallel: true verbosity: minimal +test: + assemblies: + only: + - 'osu.Desktop\**\*.dll' after_build: - cmd: inspectcode --o="inspectcodereport.xml" --projects:osu.Game* --caches-home="inspectcode" osu.sln > NUL - cmd: NVika parsereport "inspectcodereport.xml" --treatwarningsaserrors \ No newline at end of file From 3d5fefae8c192b33bfba3e79aae68579de76ea43 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Fri, 2 Mar 2018 15:34:31 +0900 Subject: [PATCH 248/544] Add TestFixtureAttribute to all tests --- osu.Game.Rulesets.Catch/Tests/TestCaseFruitObjects.cs | 2 ++ osu.Game.Rulesets.Catch/Tests/TestCasePerformancePoints.cs | 3 +++ osu.Game.Rulesets.Mania/Tests/TestCaseAutoGeneration.cs | 1 + osu.Game.Rulesets.Mania/Tests/TestCasePerformancePoints.cs | 3 +++ osu.Game.Rulesets.Osu/Tests/TestCaseHitCircle.cs | 2 ++ osu.Game.Rulesets.Osu/Tests/TestCaseHitCircleHidden.cs | 2 ++ osu.Game.Rulesets.Osu/Tests/TestCasePerformancePoints.cs | 3 +++ osu.Game.Rulesets.Osu/Tests/TestCaseSlider.cs | 2 ++ osu.Game.Rulesets.Osu/Tests/TestCaseSliderHidden.cs | 2 ++ osu.Game.Rulesets.Osu/Tests/TestCaseSpinner.cs | 2 ++ osu.Game.Rulesets.Osu/Tests/TestCaseSpinnerHidden.cs | 2 ++ osu.Game.Rulesets.Taiko/Tests/TestCaseInputDrum.cs | 2 ++ osu.Game.Rulesets.Taiko/Tests/TestCasePerformancePoints.cs | 3 +++ osu.Game.Tests/Visual/TestCaseAllPlayers.cs | 3 +++ osu.Game.Tests/Visual/TestCaseBeatSyncedContainer.cs | 2 ++ osu.Game.Tests/Visual/TestCaseBeatmapCarousel.cs | 2 ++ osu.Game.Tests/Visual/TestCaseBeatmapInfoWedge.cs | 2 ++ osu.Game.Tests/Visual/TestCaseBeatmapSetOverlay.cs | 2 ++ osu.Game.Tests/Visual/TestCaseBreadcrumbs.cs | 2 ++ osu.Game.Tests/Visual/TestCaseBreakOverlay.cs | 2 ++ osu.Game.Tests/Visual/TestCaseButtonSystem.cs | 2 ++ osu.Game.Tests/Visual/TestCaseChatLink.cs | 2 ++ osu.Game.Tests/Visual/TestCaseContextMenu.cs | 2 ++ osu.Game.Tests/Visual/TestCaseCursors.cs | 2 ++ osu.Game.Tests/Visual/TestCaseDialogOverlay.cs | 2 ++ osu.Game.Tests/Visual/TestCaseDirect.cs | 2 ++ osu.Game.Tests/Visual/TestCaseDrawableRoom.cs | 2 ++ osu.Game.Tests/Visual/TestCaseEditor.cs | 2 ++ osu.Game.Tests/Visual/TestCaseEditorCompose.cs | 2 ++ osu.Game.Tests/Visual/TestCaseEditorComposeRadioButtons.cs | 2 ++ osu.Game.Tests/Visual/TestCaseEditorComposeTimeline.cs | 2 ++ osu.Game.Tests/Visual/TestCaseEditorMenuBar.cs | 2 ++ osu.Game.Tests/Visual/TestCaseEditorSelectionLayer.cs | 2 ++ osu.Game.Tests/Visual/TestCaseEditorSummaryTimeline.cs | 2 ++ osu.Game.Tests/Visual/TestCaseGamefield.cs | 2 ++ osu.Game.Tests/Visual/TestCaseGraph.cs | 2 ++ osu.Game.Tests/Visual/TestCaseHistoricalSection.cs | 2 ++ osu.Game.Tests/Visual/TestCaseIconButton.cs | 2 ++ osu.Game.Tests/Visual/TestCaseIntroSequence.cs | 2 ++ osu.Game.Tests/Visual/TestCaseKeyConfiguration.cs | 2 ++ osu.Game.Tests/Visual/TestCaseKeyCounter.cs | 2 ++ osu.Game.Tests/Visual/TestCaseMedalOverlay.cs | 2 ++ osu.Game.Tests/Visual/TestCaseMusicController.cs | 2 ++ osu.Game.Tests/Visual/TestCaseNotificationOverlay.cs | 2 ++ osu.Game.Tests/Visual/TestCaseOnScreenDisplay.cs | 2 ++ osu.Game.Tests/Visual/TestCaseOsuGame.cs | 2 ++ osu.Game.Tests/Visual/TestCasePlaySongSelect.cs | 2 ++ osu.Game.Tests/Visual/TestCasePlaybackControl.cs | 2 ++ osu.Game.Tests/Visual/TestCasePopupDialog.cs | 2 ++ osu.Game.Tests/Visual/TestCaseRankGraph.cs | 2 ++ osu.Game.Tests/Visual/TestCaseReplaySettingsOverlay.cs | 2 ++ osu.Game.Tests/Visual/TestCaseResults.cs | 2 ++ osu.Game.Tests/Visual/TestCaseRoomInspector.cs | 2 ++ osu.Game.Tests/Visual/TestCaseScoreCounter.cs | 2 ++ osu.Game.Tests/Visual/TestCaseScrollingHitObjects.cs | 2 ++ osu.Game.Tests/Visual/TestCaseSettings.cs | 2 ++ osu.Game.Tests/Visual/TestCaseSkipButton.cs | 2 ++ osu.Game.Tests/Visual/TestCaseSocial.cs | 2 ++ osu.Game.Tests/Visual/TestCaseSongProgress.cs | 2 ++ osu.Game.Tests/Visual/TestCaseStoryboard.cs | 2 ++ osu.Game.Tests/Visual/TestCaseTextAwesome.cs | 2 ++ osu.Game.Tests/Visual/TestCaseToolbar.cs | 2 ++ osu.Game.Tests/Visual/TestCaseUserPanel.cs | 2 ++ osu.Game.Tests/Visual/TestCaseUserProfile.cs | 2 ++ osu.Game.Tests/Visual/TestCaseUserRanks.cs | 2 ++ osu.Game.Tests/Visual/TestCaseWaveform.cs | 2 ++ 66 files changed, 136 insertions(+) diff --git a/osu.Game.Rulesets.Catch/Tests/TestCaseFruitObjects.cs b/osu.Game.Rulesets.Catch/Tests/TestCaseFruitObjects.cs index 1b348f9c8c..16266196e7 100644 --- a/osu.Game.Rulesets.Catch/Tests/TestCaseFruitObjects.cs +++ b/osu.Game.Rulesets.Catch/Tests/TestCaseFruitObjects.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; +using NUnit.Framework; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Framework.MathUtils; @@ -15,6 +16,7 @@ using OpenTK.Graphics; namespace osu.Game.Rulesets.Catch.Tests { + [TestFixture] public class TestCaseFruitObjects : OsuTestCase { public override IReadOnlyList RequiredTypes => new[] diff --git a/osu.Game.Rulesets.Catch/Tests/TestCasePerformancePoints.cs b/osu.Game.Rulesets.Catch/Tests/TestCasePerformancePoints.cs index e2760795c9..2be6dd005d 100644 --- a/osu.Game.Rulesets.Catch/Tests/TestCasePerformancePoints.cs +++ b/osu.Game.Rulesets.Catch/Tests/TestCasePerformancePoints.cs @@ -1,8 +1,11 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using NUnit.Framework; + namespace osu.Game.Rulesets.Catch.Tests { + [TestFixture] public class TestCasePerformancePoints : Game.Tests.Visual.TestCasePerformancePoints { public TestCasePerformancePoints() diff --git a/osu.Game.Rulesets.Mania/Tests/TestCaseAutoGeneration.cs b/osu.Game.Rulesets.Mania/Tests/TestCaseAutoGeneration.cs index 07fb6ac670..1f00b7f32d 100644 --- a/osu.Game.Rulesets.Mania/Tests/TestCaseAutoGeneration.cs +++ b/osu.Game.Rulesets.Mania/Tests/TestCaseAutoGeneration.cs @@ -9,6 +9,7 @@ using osu.Game.Tests.Visual; namespace osu.Game.Rulesets.Mania.Tests { + [TestFixture] public class TestCaseAutoGeneration : OsuTestCase { [Test] diff --git a/osu.Game.Rulesets.Mania/Tests/TestCasePerformancePoints.cs b/osu.Game.Rulesets.Mania/Tests/TestCasePerformancePoints.cs index e3aa4c1fd6..3c776a2f4c 100644 --- a/osu.Game.Rulesets.Mania/Tests/TestCasePerformancePoints.cs +++ b/osu.Game.Rulesets.Mania/Tests/TestCasePerformancePoints.cs @@ -1,8 +1,11 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using NUnit.Framework; + namespace osu.Game.Rulesets.Mania.Tests { + [TestFixture] public class TestCasePerformancePoints : Game.Tests.Visual.TestCasePerformancePoints { public TestCasePerformancePoints() diff --git a/osu.Game.Rulesets.Osu/Tests/TestCaseHitCircle.cs b/osu.Game.Rulesets.Osu/Tests/TestCaseHitCircle.cs index d8bb7f88c7..f40d9c05d1 100644 --- a/osu.Game.Rulesets.Osu/Tests/TestCaseHitCircle.cs +++ b/osu.Game.Rulesets.Osu/Tests/TestCaseHitCircle.cs @@ -16,10 +16,12 @@ using System.Collections.Generic; using System; using osu.Game.Rulesets.Mods; using System.Linq; +using NUnit.Framework; using osu.Game.Rulesets.Scoring; namespace osu.Game.Rulesets.Osu.Tests { + [TestFixture] public class TestCaseHitCircle : OsuTestCase { public override IReadOnlyList RequiredTypes => new[] diff --git a/osu.Game.Rulesets.Osu/Tests/TestCaseHitCircleHidden.cs b/osu.Game.Rulesets.Osu/Tests/TestCaseHitCircleHidden.cs index 563df631a1..f030c6db60 100644 --- a/osu.Game.Rulesets.Osu/Tests/TestCaseHitCircleHidden.cs +++ b/osu.Game.Rulesets.Osu/Tests/TestCaseHitCircleHidden.cs @@ -4,10 +4,12 @@ using System; using System.Collections.Generic; using System.Linq; +using NUnit.Framework; using osu.Game.Rulesets.Osu.Mods; namespace osu.Game.Rulesets.Osu.Tests { + [TestFixture] public class TestCaseHitCircleHidden : TestCaseHitCircle { public override IReadOnlyList RequiredTypes => base.RequiredTypes.Concat(new[] { typeof(OsuModHidden) }).ToList(); diff --git a/osu.Game.Rulesets.Osu/Tests/TestCasePerformancePoints.cs b/osu.Game.Rulesets.Osu/Tests/TestCasePerformancePoints.cs index 32339aaf3c..b6dca3f1cb 100644 --- a/osu.Game.Rulesets.Osu/Tests/TestCasePerformancePoints.cs +++ b/osu.Game.Rulesets.Osu/Tests/TestCasePerformancePoints.cs @@ -1,8 +1,11 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using NUnit.Framework; + namespace osu.Game.Rulesets.Osu.Tests { + [TestFixture] public class TestCasePerformancePoints : Game.Tests.Visual.TestCasePerformancePoints { public TestCasePerformancePoints() diff --git a/osu.Game.Rulesets.Osu/Tests/TestCaseSlider.cs b/osu.Game.Rulesets.Osu/Tests/TestCaseSlider.cs index ed212b48cd..b68f59877b 100644 --- a/osu.Game.Rulesets.Osu/Tests/TestCaseSlider.cs +++ b/osu.Game.Rulesets.Osu/Tests/TestCaseSlider.cs @@ -15,6 +15,7 @@ using OpenTK; using OpenTK.Graphics; using osu.Game.Rulesets.Mods; using System.Linq; +using NUnit.Framework; using osu.Game.Graphics.Sprites; using osu.Game.Rulesets.Judgements; using osu.Game.Rulesets.Objects.Drawables; @@ -23,6 +24,7 @@ using osu.Game.Rulesets.Osu.Objects.Drawables.Pieces; namespace osu.Game.Rulesets.Osu.Tests { + [TestFixture] public class TestCaseSlider : OsuTestCase { public override IReadOnlyList RequiredTypes => new[] diff --git a/osu.Game.Rulesets.Osu/Tests/TestCaseSliderHidden.cs b/osu.Game.Rulesets.Osu/Tests/TestCaseSliderHidden.cs index eba0ebc642..57b719464f 100644 --- a/osu.Game.Rulesets.Osu/Tests/TestCaseSliderHidden.cs +++ b/osu.Game.Rulesets.Osu/Tests/TestCaseSliderHidden.cs @@ -4,10 +4,12 @@ using System; using System.Collections.Generic; using System.Linq; +using NUnit.Framework; using osu.Game.Rulesets.Osu.Mods; namespace osu.Game.Rulesets.Osu.Tests { + [TestFixture] public class TestCaseSliderHidden : TestCaseSlider { public override IReadOnlyList RequiredTypes => base.RequiredTypes.Concat(new[] { typeof(OsuModHidden) }).ToList(); diff --git a/osu.Game.Rulesets.Osu/Tests/TestCaseSpinner.cs b/osu.Game.Rulesets.Osu/Tests/TestCaseSpinner.cs index c054f6aa28..d3620bcbda 100644 --- a/osu.Game.Rulesets.Osu/Tests/TestCaseSpinner.cs +++ b/osu.Game.Rulesets.Osu/Tests/TestCaseSpinner.cs @@ -4,6 +4,7 @@ using System; using System.Collections.Generic; using System.Linq; +using NUnit.Framework; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Game.Beatmaps; @@ -16,6 +17,7 @@ using osu.Game.Tests.Visual; namespace osu.Game.Rulesets.Osu.Tests { + [TestFixture] public class TestCaseSpinner : OsuTestCase { public override IReadOnlyList RequiredTypes => new[] diff --git a/osu.Game.Rulesets.Osu/Tests/TestCaseSpinnerHidden.cs b/osu.Game.Rulesets.Osu/Tests/TestCaseSpinnerHidden.cs index a3bbce5b39..75b3b4c763 100644 --- a/osu.Game.Rulesets.Osu/Tests/TestCaseSpinnerHidden.cs +++ b/osu.Game.Rulesets.Osu/Tests/TestCaseSpinnerHidden.cs @@ -4,10 +4,12 @@ using System; using System.Collections.Generic; using System.Linq; +using NUnit.Framework; using osu.Game.Rulesets.Osu.Mods; namespace osu.Game.Rulesets.Osu.Tests { + [TestFixture] public class TestCaseSpinnerHidden : TestCaseSpinner { public override IReadOnlyList RequiredTypes => base.RequiredTypes.Concat(new[] { typeof(OsuModHidden) }).ToList(); diff --git a/osu.Game.Rulesets.Taiko/Tests/TestCaseInputDrum.cs b/osu.Game.Rulesets.Taiko/Tests/TestCaseInputDrum.cs index 437237661c..80721271d6 100644 --- a/osu.Game.Rulesets.Taiko/Tests/TestCaseInputDrum.cs +++ b/osu.Game.Rulesets.Taiko/Tests/TestCaseInputDrum.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; +using NUnit.Framework; using OpenTK; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; @@ -14,6 +15,7 @@ using osu.Game.Tests.Visual; namespace osu.Game.Rulesets.Taiko.Tests { + [TestFixture] public class TestCaseInputDrum : OsuTestCase { public override IReadOnlyList RequiredTypes => new[] diff --git a/osu.Game.Rulesets.Taiko/Tests/TestCasePerformancePoints.cs b/osu.Game.Rulesets.Taiko/Tests/TestCasePerformancePoints.cs index a291bc2eea..f6b0ceb7bd 100644 --- a/osu.Game.Rulesets.Taiko/Tests/TestCasePerformancePoints.cs +++ b/osu.Game.Rulesets.Taiko/Tests/TestCasePerformancePoints.cs @@ -1,8 +1,11 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using NUnit.Framework; + namespace osu.Game.Rulesets.Taiko.Tests { + [TestFixture] public class TestCasePerformancePoints : Game.Tests.Visual.TestCasePerformancePoints { public TestCasePerformancePoints() diff --git a/osu.Game.Tests/Visual/TestCaseAllPlayers.cs b/osu.Game.Tests/Visual/TestCaseAllPlayers.cs index 912dbc4056..e633d121ca 100644 --- a/osu.Game.Tests/Visual/TestCaseAllPlayers.cs +++ b/osu.Game.Tests/Visual/TestCaseAllPlayers.cs @@ -1,8 +1,11 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using NUnit.Framework; + namespace osu.Game.Tests.Visual { + [TestFixture] public class TestCaseAllPlayers : TestCasePlayer { } diff --git a/osu.Game.Tests/Visual/TestCaseBeatSyncedContainer.cs b/osu.Game.Tests/Visual/TestCaseBeatSyncedContainer.cs index f081d090c8..66cee634f5 100644 --- a/osu.Game.Tests/Visual/TestCaseBeatSyncedContainer.cs +++ b/osu.Game.Tests/Visual/TestCaseBeatSyncedContainer.cs @@ -2,6 +2,7 @@ // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using System; +using NUnit.Framework; using osu.Framework.Audio.Track; using osu.Framework.Extensions.Color4Extensions; using osu.Framework.Graphics; @@ -17,6 +18,7 @@ using osu.Framework.Lists; namespace osu.Game.Tests.Visual { + [TestFixture] public class TestCaseBeatSyncedContainer : OsuTestCase { private readonly MusicController mc; diff --git a/osu.Game.Tests/Visual/TestCaseBeatmapCarousel.cs b/osu.Game.Tests/Visual/TestCaseBeatmapCarousel.cs index e50dc4b8fc..fe26366362 100644 --- a/osu.Game.Tests/Visual/TestCaseBeatmapCarousel.cs +++ b/osu.Game.Tests/Visual/TestCaseBeatmapCarousel.cs @@ -6,6 +6,7 @@ using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; +using NUnit.Framework; using osu.Framework.Allocation; using osu.Framework.Extensions; using osu.Framework.Graphics; @@ -17,6 +18,7 @@ using osu.Game.Screens.Select.Filter; namespace osu.Game.Tests.Visual { + [TestFixture] public class TestCaseBeatmapCarousel : OsuTestCase { private TestBeatmapCarousel carousel; diff --git a/osu.Game.Tests/Visual/TestCaseBeatmapInfoWedge.cs b/osu.Game.Tests/Visual/TestCaseBeatmapInfoWedge.cs index bde071c4a3..3ccdaa90d9 100644 --- a/osu.Game.Tests/Visual/TestCaseBeatmapInfoWedge.cs +++ b/osu.Game.Tests/Visual/TestCaseBeatmapInfoWedge.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; +using NUnit.Framework; using OpenTK; using osu.Framework.Allocation; using osu.Framework.Configuration; @@ -18,6 +19,7 @@ using osu.Game.Tests.Beatmaps; namespace osu.Game.Tests.Visual { + [TestFixture] public class TestCaseBeatmapInfoWedge : OsuTestCase { private RulesetStore rulesets; diff --git a/osu.Game.Tests/Visual/TestCaseBeatmapSetOverlay.cs b/osu.Game.Tests/Visual/TestCaseBeatmapSetOverlay.cs index ad85b3ed52..d9aedb7a5f 100644 --- a/osu.Game.Tests/Visual/TestCaseBeatmapSetOverlay.cs +++ b/osu.Game.Tests/Visual/TestCaseBeatmapSetOverlay.cs @@ -4,6 +4,7 @@ using System; using System.Collections.Generic; using System.Linq; +using NUnit.Framework; using osu.Framework.Allocation; using osu.Game.Beatmaps; using osu.Game.Overlays; @@ -12,6 +13,7 @@ using osu.Game.Users; namespace osu.Game.Tests.Visual { + [TestFixture] public class TestCaseBeatmapSetOverlay : OsuTestCase { private readonly BeatmapSetOverlay overlay; diff --git a/osu.Game.Tests/Visual/TestCaseBreadcrumbs.cs b/osu.Game.Tests/Visual/TestCaseBreadcrumbs.cs index 34abef7d76..20bdd6736c 100644 --- a/osu.Game.Tests/Visual/TestCaseBreadcrumbs.cs +++ b/osu.Game.Tests/Visual/TestCaseBreadcrumbs.cs @@ -1,11 +1,13 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using NUnit.Framework; using osu.Framework.Graphics; using osu.Game.Graphics.UserInterface; namespace osu.Game.Tests.Visual { + [TestFixture] public class TestCaseBreadcrumbs : OsuTestCase { public TestCaseBreadcrumbs() diff --git a/osu.Game.Tests/Visual/TestCaseBreakOverlay.cs b/osu.Game.Tests/Visual/TestCaseBreakOverlay.cs index f9ed606080..ae24d86325 100644 --- a/osu.Game.Tests/Visual/TestCaseBreakOverlay.cs +++ b/osu.Game.Tests/Visual/TestCaseBreakOverlay.cs @@ -5,9 +5,11 @@ using osu.Framework.Timing; using osu.Game.Beatmaps.Timing; using osu.Game.Screens.Play.BreaksOverlay; using System.Collections.Generic; +using NUnit.Framework; namespace osu.Game.Tests.Visual { + [TestFixture] public class TestCaseBreakOverlay : OsuTestCase { private readonly BreakOverlay breakOverlay; diff --git a/osu.Game.Tests/Visual/TestCaseButtonSystem.cs b/osu.Game.Tests/Visual/TestCaseButtonSystem.cs index 61da76970e..93740593cb 100644 --- a/osu.Game.Tests/Visual/TestCaseButtonSystem.cs +++ b/osu.Game.Tests/Visual/TestCaseButtonSystem.cs @@ -1,6 +1,7 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using NUnit.Framework; using osu.Framework.Graphics; using osu.Framework.Graphics.Colour; using osu.Framework.Graphics.Shapes; @@ -9,6 +10,7 @@ using OpenTK.Graphics; namespace osu.Game.Tests.Visual { + [TestFixture] public class TestCaseButtonSystem : OsuTestCase { public TestCaseButtonSystem() diff --git a/osu.Game.Tests/Visual/TestCaseChatLink.cs b/osu.Game.Tests/Visual/TestCaseChatLink.cs index 3a7be686e1..786fcb64ab 100644 --- a/osu.Game.Tests/Visual/TestCaseChatLink.cs +++ b/osu.Game.Tests/Visual/TestCaseChatLink.cs @@ -12,12 +12,14 @@ using osu.Game.Users; using System; using System.Collections.Generic; using System.Linq; +using NUnit.Framework; using osu.Game.Graphics.Containers; using osu.Game.Graphics.Sprites; using osu.Game.Overlays; namespace osu.Game.Tests.Visual { + [TestFixture] public class TestCaseChatLink : OsuTestCase { private readonly TestChatLineContainer textContainer; diff --git a/osu.Game.Tests/Visual/TestCaseContextMenu.cs b/osu.Game.Tests/Visual/TestCaseContextMenu.cs index 6098187dd6..45c12cf4af 100644 --- a/osu.Game.Tests/Visual/TestCaseContextMenu.cs +++ b/osu.Game.Tests/Visual/TestCaseContextMenu.cs @@ -1,6 +1,7 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using NUnit.Framework; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Cursor; @@ -13,6 +14,7 @@ using osu.Game.Graphics.Cursor; namespace osu.Game.Tests.Visual { + [TestFixture] public class TestCaseContextMenu : OsuTestCase { private const int start_time = 0; diff --git a/osu.Game.Tests/Visual/TestCaseCursors.cs b/osu.Game.Tests/Visual/TestCaseCursors.cs index 363f6b53f0..72e699c54b 100644 --- a/osu.Game.Tests/Visual/TestCaseCursors.cs +++ b/osu.Game.Tests/Visual/TestCaseCursors.cs @@ -1,6 +1,7 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using NUnit.Framework; using osu.Framework.Extensions.IEnumerableExtensions; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; @@ -16,6 +17,7 @@ using OpenTK.Graphics; namespace osu.Game.Tests.Visual { + [TestFixture] public class TestCaseCursors : OsuTestCase { private readonly ManualInputManager inputManager; diff --git a/osu.Game.Tests/Visual/TestCaseDialogOverlay.cs b/osu.Game.Tests/Visual/TestCaseDialogOverlay.cs index d7fbf64664..e9512b29f7 100644 --- a/osu.Game.Tests/Visual/TestCaseDialogOverlay.cs +++ b/osu.Game.Tests/Visual/TestCaseDialogOverlay.cs @@ -1,12 +1,14 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using NUnit.Framework; using osu.Game.Graphics; using osu.Game.Overlays; using osu.Game.Overlays.Dialog; namespace osu.Game.Tests.Visual { + [TestFixture] public class TestCaseDialogOverlay : OsuTestCase { public TestCaseDialogOverlay() diff --git a/osu.Game.Tests/Visual/TestCaseDirect.cs b/osu.Game.Tests/Visual/TestCaseDirect.cs index 8fa576135e..3f3dbb0bca 100644 --- a/osu.Game.Tests/Visual/TestCaseDirect.cs +++ b/osu.Game.Tests/Visual/TestCaseDirect.cs @@ -2,6 +2,7 @@ // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using System.Collections.Generic; +using NUnit.Framework; using osu.Framework.Allocation; using osu.Game.Beatmaps; using osu.Game.Overlays; @@ -9,6 +10,7 @@ using osu.Game.Rulesets; namespace osu.Game.Tests.Visual { + [TestFixture] public class TestCaseDirect : OsuTestCase { private DirectOverlay direct; diff --git a/osu.Game.Tests/Visual/TestCaseDrawableRoom.cs b/osu.Game.Tests/Visual/TestCaseDrawableRoom.cs index ec70253118..4268fd305e 100644 --- a/osu.Game.Tests/Visual/TestCaseDrawableRoom.cs +++ b/osu.Game.Tests/Visual/TestCaseDrawableRoom.cs @@ -1,6 +1,7 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using NUnit.Framework; using osu.Framework.Allocation; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; @@ -12,6 +13,7 @@ using osu.Game.Users; namespace osu.Game.Tests.Visual { + [TestFixture] public class TestCaseDrawableRoom : OsuTestCase { private RulesetStore rulesets; diff --git a/osu.Game.Tests/Visual/TestCaseEditor.cs b/osu.Game.Tests/Visual/TestCaseEditor.cs index 37da41c228..c626ca8e7f 100644 --- a/osu.Game.Tests/Visual/TestCaseEditor.cs +++ b/osu.Game.Tests/Visual/TestCaseEditor.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; +using NUnit.Framework; using osu.Framework.Allocation; using osu.Game.Beatmaps; using osu.Game.Screens.Edit; @@ -10,6 +11,7 @@ using osu.Game.Screens.Edit.Screens; namespace osu.Game.Tests.Visual { + [TestFixture] public class TestCaseEditor : OsuTestCase { public override IReadOnlyList RequiredTypes => new[] { typeof(Editor), typeof(EditorScreen) }; diff --git a/osu.Game.Tests/Visual/TestCaseEditorCompose.cs b/osu.Game.Tests/Visual/TestCaseEditorCompose.cs index 76771ecf82..15bccac172 100644 --- a/osu.Game.Tests/Visual/TestCaseEditorCompose.cs +++ b/osu.Game.Tests/Visual/TestCaseEditorCompose.cs @@ -2,12 +2,14 @@ // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using System; +using NUnit.Framework; using osu.Framework.Allocation; using osu.Game.Beatmaps; using osu.Game.Screens.Edit.Screens.Compose; namespace osu.Game.Tests.Visual { + [TestFixture] public class TestCaseEditorCompose : OsuTestCase { private readonly Random random; diff --git a/osu.Game.Tests/Visual/TestCaseEditorComposeRadioButtons.cs b/osu.Game.Tests/Visual/TestCaseEditorComposeRadioButtons.cs index 8717f15311..d9850139cd 100644 --- a/osu.Game.Tests/Visual/TestCaseEditorComposeRadioButtons.cs +++ b/osu.Game.Tests/Visual/TestCaseEditorComposeRadioButtons.cs @@ -3,11 +3,13 @@ using System; using System.Collections.Generic; +using NUnit.Framework; using osu.Framework.Graphics; using osu.Game.Screens.Edit.Screens.Compose.RadioButtons; namespace osu.Game.Tests.Visual { + [TestFixture] public class TestCaseEditorComposeRadioButtons : OsuTestCase { public override IReadOnlyList RequiredTypes => new[] { typeof(DrawableRadioButton) }; diff --git a/osu.Game.Tests/Visual/TestCaseEditorComposeTimeline.cs b/osu.Game.Tests/Visual/TestCaseEditorComposeTimeline.cs index 6a47933a3c..d15ee32d8d 100644 --- a/osu.Game.Tests/Visual/TestCaseEditorComposeTimeline.cs +++ b/osu.Game.Tests/Visual/TestCaseEditorComposeTimeline.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; +using NUnit.Framework; using OpenTK; using osu.Framework.Allocation; using osu.Framework.Graphics; @@ -12,6 +13,7 @@ using osu.Game.Screens.Edit.Screens.Compose.Timeline; namespace osu.Game.Tests.Visual { + [TestFixture] public class TestCaseEditorComposeTimeline : OsuTestCase { public override IReadOnlyList RequiredTypes => new[] { typeof(ScrollableTimeline), typeof(ScrollingTimelineContainer), typeof(BeatmapWaveformGraph), typeof(TimelineButton) }; diff --git a/osu.Game.Tests/Visual/TestCaseEditorMenuBar.cs b/osu.Game.Tests/Visual/TestCaseEditorMenuBar.cs index edfcde22b3..ee98fa087a 100644 --- a/osu.Game.Tests/Visual/TestCaseEditorMenuBar.cs +++ b/osu.Game.Tests/Visual/TestCaseEditorMenuBar.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; +using NUnit.Framework; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.UserInterface; @@ -11,6 +12,7 @@ using osu.Game.Screens.Edit.Menus; namespace osu.Game.Tests.Visual { + [TestFixture] public class TestCaseEditorMenuBar : OsuTestCase { public override IReadOnlyList RequiredTypes => new[] { typeof(EditorMenuBar), typeof(ScreenSelectionTabControl) }; diff --git a/osu.Game.Tests/Visual/TestCaseEditorSelectionLayer.cs b/osu.Game.Tests/Visual/TestCaseEditorSelectionLayer.cs index 4926faa78c..8d12dfc517 100644 --- a/osu.Game.Tests/Visual/TestCaseEditorSelectionLayer.cs +++ b/osu.Game.Tests/Visual/TestCaseEditorSelectionLayer.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; +using NUnit.Framework; using osu.Framework.Allocation; using OpenTK; using osu.Game.Beatmaps; @@ -18,6 +19,7 @@ using osu.Game.Tests.Beatmaps; namespace osu.Game.Tests.Visual { + [TestFixture] public class TestCaseEditorSelectionLayer : OsuTestCase { public override IReadOnlyList RequiredTypes => new[] diff --git a/osu.Game.Tests/Visual/TestCaseEditorSummaryTimeline.cs b/osu.Game.Tests/Visual/TestCaseEditorSummaryTimeline.cs index 8c8699fffa..26c8814bc4 100644 --- a/osu.Game.Tests/Visual/TestCaseEditorSummaryTimeline.cs +++ b/osu.Game.Tests/Visual/TestCaseEditorSummaryTimeline.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; +using NUnit.Framework; using osu.Framework.Audio.Track; using osu.Framework.Graphics.Textures; using osu.Framework.Graphics; @@ -14,6 +15,7 @@ using osu.Framework.Configuration; namespace osu.Game.Tests.Visual { + [TestFixture] public class TestCaseEditorSummaryTimeline : OsuTestCase { private const int length = 60000; diff --git a/osu.Game.Tests/Visual/TestCaseGamefield.cs b/osu.Game.Tests/Visual/TestCaseGamefield.cs index 44f46dea18..80b3f9eb40 100644 --- a/osu.Game.Tests/Visual/TestCaseGamefield.cs +++ b/osu.Game.Tests/Visual/TestCaseGamefield.cs @@ -1,10 +1,12 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using NUnit.Framework; using osu.Game.Beatmaps.ControlPoints; namespace osu.Game.Tests.Visual { + [TestFixture] public class TestCaseGamefield : OsuTestCase { protected override void LoadComplete() diff --git a/osu.Game.Tests/Visual/TestCaseGraph.cs b/osu.Game.Tests/Visual/TestCaseGraph.cs index 99184d4689..285a43707a 100644 --- a/osu.Game.Tests/Visual/TestCaseGraph.cs +++ b/osu.Game.Tests/Visual/TestCaseGraph.cs @@ -2,12 +2,14 @@ // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using System.Linq; +using NUnit.Framework; using osu.Framework.Graphics; using osu.Game.Graphics.UserInterface; using OpenTK; namespace osu.Game.Tests.Visual { + [TestFixture] public class TestCaseGraph : OsuTestCase { public TestCaseGraph() diff --git a/osu.Game.Tests/Visual/TestCaseHistoricalSection.cs b/osu.Game.Tests/Visual/TestCaseHistoricalSection.cs index a7fc58f2b5..2e94baa9fc 100644 --- a/osu.Game.Tests/Visual/TestCaseHistoricalSection.cs +++ b/osu.Game.Tests/Visual/TestCaseHistoricalSection.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; +using NUnit.Framework; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Shapes; @@ -13,6 +14,7 @@ using osu.Game.Users; namespace osu.Game.Tests.Visual { + [TestFixture] public class TestCaseHistoricalSection : OsuTestCase { public override IReadOnlyList RequiredTypes => diff --git a/osu.Game.Tests/Visual/TestCaseIconButton.cs b/osu.Game.Tests/Visual/TestCaseIconButton.cs index 525e867c56..fae79e25bd 100644 --- a/osu.Game.Tests/Visual/TestCaseIconButton.cs +++ b/osu.Game.Tests/Visual/TestCaseIconButton.cs @@ -1,6 +1,7 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using NUnit.Framework; using OpenTK; using OpenTK.Graphics; using osu.Framework.Graphics; @@ -12,6 +13,7 @@ using osu.Game.Graphics.UserInterface; namespace osu.Game.Tests.Visual { + [TestFixture] public class TestCaseIconButton : OsuTestCase { public TestCaseIconButton() diff --git a/osu.Game.Tests/Visual/TestCaseIntroSequence.cs b/osu.Game.Tests/Visual/TestCaseIntroSequence.cs index 97116e7746..4af6255b48 100644 --- a/osu.Game.Tests/Visual/TestCaseIntroSequence.cs +++ b/osu.Game.Tests/Visual/TestCaseIntroSequence.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; +using NUnit.Framework; using OpenTK.Graphics; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; @@ -12,6 +13,7 @@ using osu.Game.Screens.Menu; namespace osu.Game.Tests.Visual { + [TestFixture] public class TestCaseIntroSequence : OsuTestCase { public override IReadOnlyList RequiredTypes => new[] diff --git a/osu.Game.Tests/Visual/TestCaseKeyConfiguration.cs b/osu.Game.Tests/Visual/TestCaseKeyConfiguration.cs index 57bb36d144..e39b9f6683 100644 --- a/osu.Game.Tests/Visual/TestCaseKeyConfiguration.cs +++ b/osu.Game.Tests/Visual/TestCaseKeyConfiguration.cs @@ -1,10 +1,12 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using NUnit.Framework; using osu.Game.Overlays; namespace osu.Game.Tests.Visual { + [TestFixture] public class TestCaseKeyConfiguration : OsuTestCase { private readonly KeyBindingOverlay overlay; diff --git a/osu.Game.Tests/Visual/TestCaseKeyCounter.cs b/osu.Game.Tests/Visual/TestCaseKeyCounter.cs index ff1b320b5a..bf73c6899b 100644 --- a/osu.Game.Tests/Visual/TestCaseKeyCounter.cs +++ b/osu.Game.Tests/Visual/TestCaseKeyCounter.cs @@ -1,6 +1,7 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using NUnit.Framework; using osu.Framework.Graphics; using osu.Framework.MathUtils; using osu.Game.Screens.Play; @@ -8,6 +9,7 @@ using OpenTK.Input; namespace osu.Game.Tests.Visual { + [TestFixture] public class TestCaseKeyCounter : OsuTestCase { public TestCaseKeyCounter() diff --git a/osu.Game.Tests/Visual/TestCaseMedalOverlay.cs b/osu.Game.Tests/Visual/TestCaseMedalOverlay.cs index f11c37f5b2..8d91a0f0dd 100644 --- a/osu.Game.Tests/Visual/TestCaseMedalOverlay.cs +++ b/osu.Game.Tests/Visual/TestCaseMedalOverlay.cs @@ -3,12 +3,14 @@ using System; using System.Collections.Generic; +using NUnit.Framework; using osu.Game.Overlays; using osu.Game.Overlays.MedalSplash; using osu.Game.Users; namespace osu.Game.Tests.Visual { + [TestFixture] public class TestCaseMedalOverlay : OsuTestCase { public override IReadOnlyList RequiredTypes => new[] diff --git a/osu.Game.Tests/Visual/TestCaseMusicController.cs b/osu.Game.Tests/Visual/TestCaseMusicController.cs index 9424a3fee7..2ddc57d7b4 100644 --- a/osu.Game.Tests/Visual/TestCaseMusicController.cs +++ b/osu.Game.Tests/Visual/TestCaseMusicController.cs @@ -1,6 +1,7 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using NUnit.Framework; using osu.Framework.Allocation; using osu.Framework.Configuration; using osu.Framework.Graphics; @@ -11,6 +12,7 @@ using osu.Game.Overlays; namespace osu.Game.Tests.Visual { + [TestFixture] public class TestCaseMusicController : OsuTestCase { private readonly Bindable beatmapBacking = new Bindable(); diff --git a/osu.Game.Tests/Visual/TestCaseNotificationOverlay.cs b/osu.Game.Tests/Visual/TestCaseNotificationOverlay.cs index b2d3ac8c4d..2ba57f2bd2 100644 --- a/osu.Game.Tests/Visual/TestCaseNotificationOverlay.cs +++ b/osu.Game.Tests/Visual/TestCaseNotificationOverlay.cs @@ -4,6 +4,7 @@ using System; using System.Collections.Generic; using System.Linq; +using NUnit.Framework; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Sprites; @@ -13,6 +14,7 @@ using osu.Game.Overlays.Notifications; namespace osu.Game.Tests.Visual { + [TestFixture] public class TestCaseNotificationOverlay : OsuTestCase { private readonly NotificationOverlay manager; diff --git a/osu.Game.Tests/Visual/TestCaseOnScreenDisplay.cs b/osu.Game.Tests/Visual/TestCaseOnScreenDisplay.cs index 9c6c50858f..6fe8bc5a8a 100644 --- a/osu.Game.Tests/Visual/TestCaseOnScreenDisplay.cs +++ b/osu.Game.Tests/Visual/TestCaseOnScreenDisplay.cs @@ -1,12 +1,14 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using NUnit.Framework; using osu.Framework.Allocation; using osu.Framework.Configuration; using osu.Game.Overlays; namespace osu.Game.Tests.Visual { + [TestFixture] public class TestCaseOnScreenDisplay : OsuTestCase { private FrameworkConfigManager config; diff --git a/osu.Game.Tests/Visual/TestCaseOsuGame.cs b/osu.Game.Tests/Visual/TestCaseOsuGame.cs index 9e6776800e..a802db6a10 100644 --- a/osu.Game.Tests/Visual/TestCaseOsuGame.cs +++ b/osu.Game.Tests/Visual/TestCaseOsuGame.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; +using NUnit.Framework; using osu.Framework.Graphics; using osu.Framework.Graphics.Shapes; using osu.Framework.Timing; @@ -12,6 +13,7 @@ using OpenTK.Graphics; namespace osu.Game.Tests.Visual { + [TestFixture] public class TestCaseOsuGame : OsuTestCase { public override IReadOnlyList RequiredTypes => new[] diff --git a/osu.Game.Tests/Visual/TestCasePlaySongSelect.cs b/osu.Game.Tests/Visual/TestCasePlaySongSelect.cs index 13b2be9fdb..cede0160bc 100644 --- a/osu.Game.Tests/Visual/TestCasePlaySongSelect.cs +++ b/osu.Game.Tests/Visual/TestCasePlaySongSelect.cs @@ -6,6 +6,7 @@ using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; +using NUnit.Framework; using osu.Framework.Allocation; using osu.Framework.Extensions; using osu.Framework.MathUtils; @@ -19,6 +20,7 @@ using osu.Game.Tests.Platform; namespace osu.Game.Tests.Visual { + [TestFixture] public class TestCasePlaySongSelect : OsuTestCase { private BeatmapManager manager; diff --git a/osu.Game.Tests/Visual/TestCasePlaybackControl.cs b/osu.Game.Tests/Visual/TestCasePlaybackControl.cs index 82c0b8f4fd..43e977ba23 100644 --- a/osu.Game.Tests/Visual/TestCasePlaybackControl.cs +++ b/osu.Game.Tests/Visual/TestCasePlaybackControl.cs @@ -1,6 +1,7 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using NUnit.Framework; using osu.Framework.Graphics; using osu.Game.Beatmaps; using osu.Game.Screens.Edit.Components; @@ -9,6 +10,7 @@ using OpenTK; namespace osu.Game.Tests.Visual { + [TestFixture] public class TestCasePlaybackControl : OsuTestCase { public TestCasePlaybackControl() diff --git a/osu.Game.Tests/Visual/TestCasePopupDialog.cs b/osu.Game.Tests/Visual/TestCasePopupDialog.cs index e3bae3955a..8d830672b7 100644 --- a/osu.Game.Tests/Visual/TestCasePopupDialog.cs +++ b/osu.Game.Tests/Visual/TestCasePopupDialog.cs @@ -1,12 +1,14 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using NUnit.Framework; using osu.Framework.Graphics; using osu.Game.Graphics; using osu.Game.Overlays.Dialog; namespace osu.Game.Tests.Visual { + [TestFixture] public class TestCasePopupDialog : OsuTestCase { public TestCasePopupDialog() diff --git a/osu.Game.Tests/Visual/TestCaseRankGraph.cs b/osu.Game.Tests/Visual/TestCaseRankGraph.cs index 88631aa982..ad53238e76 100644 --- a/osu.Game.Tests/Visual/TestCaseRankGraph.cs +++ b/osu.Game.Tests/Visual/TestCaseRankGraph.cs @@ -9,11 +9,13 @@ using osu.Framework.Graphics.Shapes; using osu.Game.Graphics; using System.Collections.Generic; using System; +using NUnit.Framework; using osu.Game.Graphics.UserInterface; using osu.Game.Users; namespace osu.Game.Tests.Visual { + [TestFixture] public class TestCaseRankGraph : OsuTestCase { public override IReadOnlyList RequiredTypes => new[] diff --git a/osu.Game.Tests/Visual/TestCaseReplaySettingsOverlay.cs b/osu.Game.Tests/Visual/TestCaseReplaySettingsOverlay.cs index 595a93b194..a1b683b64c 100644 --- a/osu.Game.Tests/Visual/TestCaseReplaySettingsOverlay.cs +++ b/osu.Game.Tests/Visual/TestCaseReplaySettingsOverlay.cs @@ -1,6 +1,7 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using NUnit.Framework; using osu.Framework.Graphics; using osu.Game.Graphics.UserInterface; using osu.Game.Screens.Play.HUD; @@ -8,6 +9,7 @@ using osu.Game.Screens.Play.PlayerSettings; namespace osu.Game.Tests.Visual { + [TestFixture] public class TestCaseReplaySettingsOverlay : OsuTestCase { public TestCaseReplaySettingsOverlay() diff --git a/osu.Game.Tests/Visual/TestCaseResults.cs b/osu.Game.Tests/Visual/TestCaseResults.cs index 012d31e75a..06bdfdb7e1 100644 --- a/osu.Game.Tests/Visual/TestCaseResults.cs +++ b/osu.Game.Tests/Visual/TestCaseResults.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; +using NUnit.Framework; using osu.Framework.Allocation; using osu.Game.Beatmaps; using osu.Game.Rulesets.Scoring; @@ -11,6 +12,7 @@ using osu.Game.Users; namespace osu.Game.Tests.Visual { + [TestFixture] public class TestCaseResults : OsuTestCase { private BeatmapManager beatmaps; diff --git a/osu.Game.Tests/Visual/TestCaseRoomInspector.cs b/osu.Game.Tests/Visual/TestCaseRoomInspector.cs index 8c4aa02a68..c45312392f 100644 --- a/osu.Game.Tests/Visual/TestCaseRoomInspector.cs +++ b/osu.Game.Tests/Visual/TestCaseRoomInspector.cs @@ -1,6 +1,7 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using NUnit.Framework; using osu.Framework.Allocation; using osu.Framework.Graphics; using osu.Game.Beatmaps; @@ -11,6 +12,7 @@ using osu.Game.Users; namespace osu.Game.Tests.Visual { + [TestFixture] public class TestCaseRoomInspector : OsuTestCase { private RulesetStore rulesets; diff --git a/osu.Game.Tests/Visual/TestCaseScoreCounter.cs b/osu.Game.Tests/Visual/TestCaseScoreCounter.cs index a8dc96ad72..e657035355 100644 --- a/osu.Game.Tests/Visual/TestCaseScoreCounter.cs +++ b/osu.Game.Tests/Visual/TestCaseScoreCounter.cs @@ -1,6 +1,7 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using NUnit.Framework; using osu.Framework.Graphics; using osu.Framework.Graphics.Sprites; using osu.Framework.MathUtils; @@ -10,6 +11,7 @@ using OpenTK; namespace osu.Game.Tests.Visual { + [TestFixture] public class TestCaseScoreCounter : OsuTestCase { public TestCaseScoreCounter() diff --git a/osu.Game.Tests/Visual/TestCaseScrollingHitObjects.cs b/osu.Game.Tests/Visual/TestCaseScrollingHitObjects.cs index 21d967c3e3..cfa4846939 100644 --- a/osu.Game.Tests/Visual/TestCaseScrollingHitObjects.cs +++ b/osu.Game.Tests/Visual/TestCaseScrollingHitObjects.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; +using NUnit.Framework; using osu.Framework.Extensions.IEnumerableExtensions; using OpenTK; using osu.Framework.Graphics; @@ -16,6 +17,7 @@ using osu.Game.Rulesets.UI.Scrolling; namespace osu.Game.Tests.Visual { + [TestFixture] public class TestCaseScrollingHitObjects : OsuTestCase { public override IReadOnlyList RequiredTypes => new[] { typeof(Playfield) }; diff --git a/osu.Game.Tests/Visual/TestCaseSettings.cs b/osu.Game.Tests/Visual/TestCaseSettings.cs index 923ae540db..3f42f2e863 100644 --- a/osu.Game.Tests/Visual/TestCaseSettings.cs +++ b/osu.Game.Tests/Visual/TestCaseSettings.cs @@ -1,12 +1,14 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using NUnit.Framework; using osu.Framework.Allocation; using osu.Framework.Graphics.Containers; using osu.Game.Overlays; namespace osu.Game.Tests.Visual { + [TestFixture] public class TestCaseSettings : OsuTestCase { private readonly SettingsOverlay settings; diff --git a/osu.Game.Tests/Visual/TestCaseSkipButton.cs b/osu.Game.Tests/Visual/TestCaseSkipButton.cs index 3fd66f8be3..a4d2019cd7 100644 --- a/osu.Game.Tests/Visual/TestCaseSkipButton.cs +++ b/osu.Game.Tests/Visual/TestCaseSkipButton.cs @@ -1,10 +1,12 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using NUnit.Framework; using osu.Game.Screens.Play; namespace osu.Game.Tests.Visual { + [TestFixture] public class TestCaseSkipButton : OsuTestCase { protected override void LoadComplete() diff --git a/osu.Game.Tests/Visual/TestCaseSocial.cs b/osu.Game.Tests/Visual/TestCaseSocial.cs index d3ff18b37f..4003d834d5 100644 --- a/osu.Game.Tests/Visual/TestCaseSocial.cs +++ b/osu.Game.Tests/Visual/TestCaseSocial.cs @@ -3,12 +3,14 @@ using System; using System.Collections.Generic; +using NUnit.Framework; using osu.Game.Overlays; using osu.Game.Overlays.Social; using osu.Game.Users; namespace osu.Game.Tests.Visual { + [TestFixture] public class TestCaseSocial : OsuTestCase { public override IReadOnlyList RequiredTypes => new[] diff --git a/osu.Game.Tests/Visual/TestCaseSongProgress.cs b/osu.Game.Tests/Visual/TestCaseSongProgress.cs index 2320e8d8db..857fd6c902 100644 --- a/osu.Game.Tests/Visual/TestCaseSongProgress.cs +++ b/osu.Game.Tests/Visual/TestCaseSongProgress.cs @@ -2,6 +2,7 @@ // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using System.Collections.Generic; +using NUnit.Framework; using osu.Framework.Graphics; using osu.Framework.MathUtils; using osu.Framework.Timing; @@ -10,6 +11,7 @@ using osu.Game.Screens.Play; namespace osu.Game.Tests.Visual { + [TestFixture] public class TestCaseSongProgress : OsuTestCase { private readonly SongProgress progress; diff --git a/osu.Game.Tests/Visual/TestCaseStoryboard.cs b/osu.Game.Tests/Visual/TestCaseStoryboard.cs index 089733c57e..d34a0e0e5f 100644 --- a/osu.Game.Tests/Visual/TestCaseStoryboard.cs +++ b/osu.Game.Tests/Visual/TestCaseStoryboard.cs @@ -1,6 +1,7 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using NUnit.Framework; using osu.Framework.Allocation; using osu.Framework.Configuration; using osu.Framework.Graphics; @@ -14,6 +15,7 @@ using OpenTK.Graphics; namespace osu.Game.Tests.Visual { + [TestFixture] public class TestCaseStoryboard : OsuTestCase { private readonly Bindable beatmapBacking = new Bindable(); diff --git a/osu.Game.Tests/Visual/TestCaseTextAwesome.cs b/osu.Game.Tests/Visual/TestCaseTextAwesome.cs index 830dea406a..bf7609ff8d 100644 --- a/osu.Game.Tests/Visual/TestCaseTextAwesome.cs +++ b/osu.Game.Tests/Visual/TestCaseTextAwesome.cs @@ -2,6 +2,7 @@ // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using System; +using NUnit.Framework; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Cursor; @@ -10,6 +11,7 @@ using OpenTK; namespace osu.Game.Tests.Visual { + [TestFixture] public class TestCaseTextAwesome : OsuTestCase { public TestCaseTextAwesome() diff --git a/osu.Game.Tests/Visual/TestCaseToolbar.cs b/osu.Game.Tests/Visual/TestCaseToolbar.cs index b596c4d5e0..94e45fe0c2 100644 --- a/osu.Game.Tests/Visual/TestCaseToolbar.cs +++ b/osu.Game.Tests/Visual/TestCaseToolbar.cs @@ -4,11 +4,13 @@ using System; using System.Collections.Generic; using System.Linq; +using NUnit.Framework; using osu.Framework.Graphics.Containers; using osu.Game.Overlays.Toolbar; namespace osu.Game.Tests.Visual { + [TestFixture] public class TestCaseToolbar : OsuTestCase { public override IReadOnlyList RequiredTypes => new[] diff --git a/osu.Game.Tests/Visual/TestCaseUserPanel.cs b/osu.Game.Tests/Visual/TestCaseUserPanel.cs index b18edf0ccb..ed377dc160 100644 --- a/osu.Game.Tests/Visual/TestCaseUserPanel.cs +++ b/osu.Game.Tests/Visual/TestCaseUserPanel.cs @@ -1,6 +1,7 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using NUnit.Framework; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Game.Users; @@ -8,6 +9,7 @@ using OpenTK; namespace osu.Game.Tests.Visual { + [TestFixture] public class TestCaseUserPanel : OsuTestCase { public TestCaseUserPanel() diff --git a/osu.Game.Tests/Visual/TestCaseUserProfile.cs b/osu.Game.Tests/Visual/TestCaseUserProfile.cs index 8acc8d1b5b..3caef777e7 100644 --- a/osu.Game.Tests/Visual/TestCaseUserProfile.cs +++ b/osu.Game.Tests/Visual/TestCaseUserProfile.cs @@ -4,6 +4,7 @@ using System; using System.Collections.Generic; using System.Linq; +using NUnit.Framework; using osu.Game.Graphics.UserInterface; using osu.Game.Overlays; using osu.Game.Overlays.Profile; @@ -11,6 +12,7 @@ using osu.Game.Users; namespace osu.Game.Tests.Visual { + [TestFixture] public class TestCaseUserProfile : OsuTestCase { private readonly TestUserProfileOverlay profile; diff --git a/osu.Game.Tests/Visual/TestCaseUserRanks.cs b/osu.Game.Tests/Visual/TestCaseUserRanks.cs index 1926585f07..effc98c381 100644 --- a/osu.Game.Tests/Visual/TestCaseUserRanks.cs +++ b/osu.Game.Tests/Visual/TestCaseUserRanks.cs @@ -10,9 +10,11 @@ using osu.Game.Overlays.Profile.Sections.Ranks; using osu.Game.Users; using System; using System.Collections.Generic; +using NUnit.Framework; namespace osu.Game.Tests.Visual { + [TestFixture] public class TestCaseUserRanks : OsuTestCase { public override IReadOnlyList RequiredTypes => new[] { typeof(DrawableProfileScore), typeof(RanksSection) }; diff --git a/osu.Game.Tests/Visual/TestCaseWaveform.cs b/osu.Game.Tests/Visual/TestCaseWaveform.cs index 87492e2332..7d4a9d663b 100644 --- a/osu.Game.Tests/Visual/TestCaseWaveform.cs +++ b/osu.Game.Tests/Visual/TestCaseWaveform.cs @@ -1,6 +1,7 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using NUnit.Framework; using OpenTK; using OpenTK.Graphics; using osu.Framework.Allocation; @@ -15,6 +16,7 @@ using osu.Game.Screens.Edit.Screens.Compose.Timeline; namespace osu.Game.Tests.Visual { + [TestFixture] public class TestCaseWaveform : OsuTestCase { private readonly Bindable beatmapBacking = new Bindable(); From 1f834825dc0a08dce9e537fa358756d56c738c68 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Fri, 2 Mar 2018 15:43:55 +0900 Subject: [PATCH 249/544] Add testcase to osu.Game in-case nunit tries to discover tests in it --- osu.Game/Tests/TestTestCase.cs | 15 +++++++++++++++ osu.Game/osu.Game.csproj | 3 ++- 2 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 osu.Game/Tests/TestTestCase.cs diff --git a/osu.Game/Tests/TestTestCase.cs b/osu.Game/Tests/TestTestCase.cs new file mode 100644 index 0000000000..4efd57095e --- /dev/null +++ b/osu.Game/Tests/TestTestCase.cs @@ -0,0 +1,15 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using NUnit.Framework; +using osu.Framework.Testing; + +namespace osu.Game.Tests +{ + [TestFixture] + internal class TestTestCase : TestCase + { + // This TestCase is required for nunit to not throw errors + // See: https://github.com/nunit/nunit/issues/1118 + } +} diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index f1b61341db..d3c4dd9c92 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -886,6 +886,7 @@ + @@ -939,4 +940,4 @@ - + \ No newline at end of file From 1f21ccffb0b34c4d6fdb7c4cdfec1dd007ab62db Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Fri, 2 Mar 2018 18:20:12 +0900 Subject: [PATCH 250/544] Add lenience to start times --- osu.Game.Rulesets.Catch/Tests/CatchBeatmapConversionTest.cs | 2 +- osu.Game.Rulesets.Mania/Tests/ManiaBeatmapConversionTest.cs | 2 +- osu.Game.Rulesets.Taiko/Tests/TaikoBeatmapConversionTest.cs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/osu.Game.Rulesets.Catch/Tests/CatchBeatmapConversionTest.cs b/osu.Game.Rulesets.Catch/Tests/CatchBeatmapConversionTest.cs index 5a3dee5dda..a771cbb414 100644 --- a/osu.Game.Rulesets.Catch/Tests/CatchBeatmapConversionTest.cs +++ b/osu.Game.Rulesets.Catch/Tests/CatchBeatmapConversionTest.cs @@ -61,7 +61,7 @@ namespace osu.Game.Rulesets.Catch.Tests public float Position; public bool Equals(ConvertValue other) - => Precision.AlmostEquals(StartTime, other.StartTime) + => Precision.AlmostEquals(StartTime, other.StartTime, conversion_lenience) && Precision.AlmostEquals(Position, other.Position, conversion_lenience); } } diff --git a/osu.Game.Rulesets.Mania/Tests/ManiaBeatmapConversionTest.cs b/osu.Game.Rulesets.Mania/Tests/ManiaBeatmapConversionTest.cs index c61ec85f34..056e608289 100644 --- a/osu.Game.Rulesets.Mania/Tests/ManiaBeatmapConversionTest.cs +++ b/osu.Game.Rulesets.Mania/Tests/ManiaBeatmapConversionTest.cs @@ -53,7 +53,7 @@ namespace osu.Game.Rulesets.Mania.Tests public int Column; public bool Equals(ConvertValue other) - => Precision.AlmostEquals(StartTime, other.StartTime) + => Precision.AlmostEquals(StartTime, other.StartTime, conversion_lenience) && Precision.AlmostEquals(EndTime, other.EndTime, conversion_lenience) && Column == other.Column; } diff --git a/osu.Game.Rulesets.Taiko/Tests/TaikoBeatmapConversionTest.cs b/osu.Game.Rulesets.Taiko/Tests/TaikoBeatmapConversionTest.cs index 3c779589cf..29f5f1b848 100644 --- a/osu.Game.Rulesets.Taiko/Tests/TaikoBeatmapConversionTest.cs +++ b/osu.Game.Rulesets.Taiko/Tests/TaikoBeatmapConversionTest.cs @@ -61,7 +61,7 @@ namespace osu.Game.Rulesets.Taiko.Tests public bool IsStrong; public bool Equals(ConvertValue other) - => Precision.AlmostEquals(StartTime, other.StartTime) + => Precision.AlmostEquals(StartTime, other.StartTime, conversion_lenience) && Precision.AlmostEquals(EndTime, other.EndTime, conversion_lenience) && IsRim == other.IsRim && IsCentre == other.IsCentre From cdca7371a3928111289567002e8beb5786b349d6 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Fri, 2 Mar 2018 18:20:33 +0900 Subject: [PATCH 251/544] Replace testcases with a basic test suite --- .../Beatmaps/875945-expected-conversion.json | 1 - .../Resources/Testing/Beatmaps/875945.osu | 1824 ----------------- .../Beatmaps/basic-expected-conversion.json | 1 + .../Resources/Testing/Beatmaps/basic.osu | 66 + .../Tests/CatchBeatmapConversionTest.cs | 6 +- .../osu.Game.Rulesets.Catch.csproj | 4 +- .../Beatmaps/875945-expected-conversion.json | 1 - .../Resources/Testing/Beatmaps/875945.osu | 1824 ----------------- .../Beatmaps/basic-expected-conversion.json | 1 + .../Resources/Testing/Beatmaps/basic.osu | 66 + .../Tests/ManiaBeatmapConversionTest.cs | 6 +- .../osu.Game.Rulesets.Mania.csproj | 4 +- .../Beatmaps/875945-expected-conversion.json | 1 - .../Resources/Testing/Beatmaps/875945.osu | 1824 ----------------- .../Beatmaps/basic-expected-conversion.json | 1 + .../Resources/Testing/Beatmaps/basic.osu | 66 + .../Tests/OsuBeatmapConversionTest.cs | 6 +- .../osu.Game.Rulesets.Osu.csproj | 4 +- .../Beatmaps/875945-expected-conversion.json | 1 - .../Resources/Testing/Beatmaps/875945.osu | 1824 ----------------- .../Beatmaps/basic-expected-conversion.json | 1 + .../Resources/Testing/Beatmaps/basic.osu | 66 + .../Tests/TaikoBeatmapConversionTest.cs | 6 +- .../osu.Game.Rulesets.Taiko.csproj | 4 +- .../Tests/Beatmaps/BeatmapConversionTest.cs | 18 +- 25 files changed, 297 insertions(+), 7329 deletions(-) delete mode 100644 osu.Game.Rulesets.Catch/Resources/Testing/Beatmaps/875945-expected-conversion.json delete mode 100644 osu.Game.Rulesets.Catch/Resources/Testing/Beatmaps/875945.osu create mode 100644 osu.Game.Rulesets.Catch/Resources/Testing/Beatmaps/basic-expected-conversion.json create mode 100644 osu.Game.Rulesets.Catch/Resources/Testing/Beatmaps/basic.osu delete mode 100644 osu.Game.Rulesets.Mania/Resources/Testing/Beatmaps/875945-expected-conversion.json delete mode 100644 osu.Game.Rulesets.Mania/Resources/Testing/Beatmaps/875945.osu create mode 100644 osu.Game.Rulesets.Mania/Resources/Testing/Beatmaps/basic-expected-conversion.json create mode 100644 osu.Game.Rulesets.Mania/Resources/Testing/Beatmaps/basic.osu delete mode 100644 osu.Game.Rulesets.Osu/Resources/Testing/Beatmaps/875945-expected-conversion.json delete mode 100644 osu.Game.Rulesets.Osu/Resources/Testing/Beatmaps/875945.osu create mode 100644 osu.Game.Rulesets.Osu/Resources/Testing/Beatmaps/basic-expected-conversion.json create mode 100644 osu.Game.Rulesets.Osu/Resources/Testing/Beatmaps/basic.osu delete mode 100644 osu.Game.Rulesets.Taiko/Resources/Testing/Beatmaps/875945-expected-conversion.json delete mode 100644 osu.Game.Rulesets.Taiko/Resources/Testing/Beatmaps/875945.osu create mode 100644 osu.Game.Rulesets.Taiko/Resources/Testing/Beatmaps/basic-expected-conversion.json create mode 100644 osu.Game.Rulesets.Taiko/Resources/Testing/Beatmaps/basic.osu diff --git a/osu.Game.Rulesets.Catch/Resources/Testing/Beatmaps/875945-expected-conversion.json b/osu.Game.Rulesets.Catch/Resources/Testing/Beatmaps/875945-expected-conversion.json deleted file mode 100644 index 5783ef5f2f..0000000000 --- a/osu.Game.Rulesets.Catch/Resources/Testing/Beatmaps/875945-expected-conversion.json +++ /dev/null @@ -1 +0,0 @@ -{"Mappings":[{"StartTime":6590.0,"Objects":[{"StartTime":6590.0,"Position":88.0},{"StartTime":6647.0,"Position":83.08524},{"StartTime":6705.0,"Position":97.61914},{"StartTime":6762.0,"Position":116.238136},{"StartTime":6820.0,"Position":145.302155},{"StartTime":6878.0,"Position":158.60434},{"StartTime":6935.0,"Position":153.908829},{"StartTime":6993.0,"Position":163.564133},{"StartTime":7051.0,"Position":176.301346},{"StartTime":7108.0,"Position":179.8428},{"StartTime":7166.0,"Position":187.514572},{"StartTime":7224.0,"Position":207.029556},{"StartTime":7282.0,"Position":236.314514},{"StartTime":7339.0,"Position":237.128815},{"StartTime":7397.0,"Position":234.809814},{"StartTime":7455.0,"Position":259.138367},{"StartTime":7513.0,"Position":264.3658},{"StartTime":7570.0,"Position":265.7322},{"StartTime":7628.0,"Position":303.613647},{"StartTime":7685.0,"Position":313.604279},{"StartTime":7743.0,"Position":321.043335},{"StartTime":7801.0,"Position":311.664124},{"StartTime":7858.0,"Position":314.187317},{"StartTime":7916.0,"Position":355.936859},{"StartTime":7974.0,"Position":354.625977},{"StartTime":8051.0,"Position":373.933746},{"StartTime":8129.0,"Position":370.0712},{"StartTime":8206.0,"Position":395.554626},{"StartTime":8320.0,"Position":420.097382}]},{"StartTime":8436.0,"Objects":[{"StartTime":8436.0,"Position":396.0},{"StartTime":8493.0,"Position":394.7825},{"StartTime":8551.0,"Position":407.601776},{"StartTime":8608.0,"Position":374.3075},{"StartTime":8666.0,"Position":364.0566},{"StartTime":8724.0,"Position":359.088959},{"StartTime":8781.0,"Position":378.792633},{"StartTime":8839.0,"Position":372.283325},{"StartTime":8897.0,"Position":343.934357},{"StartTime":8954.0,"Position":325.449036},{"StartTime":9012.0,"Position":319.79303},{"StartTime":9070.0,"Position":328.5426},{"StartTime":9128.0,"Position":293.138641},{"StartTime":9185.0,"Position":295.05484},{"StartTime":9243.0,"Position":295.250916},{"StartTime":9301.0,"Position":293.307},{"StartTime":9359.0,"Position":272.170135},{"StartTime":9416.0,"Position":285.38324},{"StartTime":9474.0,"Position":287.529724},{"StartTime":9531.0,"Position":281.927765},{"StartTime":9589.0,"Position":260.360565},{"StartTime":9647.0,"Position":288.73526},{"StartTime":9704.0,"Position":279.7069},{"StartTime":9762.0,"Position":286.166},{"StartTime":9820.0,"Position":311.825378},{"StartTime":9897.0,"Position":318.987823},{"StartTime":9975.0,"Position":358.7278},{"StartTime":10052.0,"Position":360.687378},{"StartTime":10166.0,"Position":376.979553}]},{"StartTime":10282.0,"Objects":[{"StartTime":10282.0,"Position":472.0},{"StartTime":10339.0,"Position":461.751862},{"StartTime":10397.0,"Position":471.600067},{"StartTime":10454.0,"Position":458.4382},{"StartTime":10512.0,"Position":465.3091},{"StartTime":10570.0,"Position":443.2122},{"StartTime":10627.0,"Position":440.2789},{"StartTime":10685.0,"Position":458.408447},{"StartTime":10743.0,"Position":443.645142},{"StartTime":10800.0,"Position":416.286163},{"StartTime":10858.0,"Position":422.982971},{"StartTime":10916.0,"Position":408.064972},{"StartTime":10974.0,"Position":417.476044},{"StartTime":11031.0,"Position":397.554626},{"StartTime":11089.0,"Position":405.9712},{"StartTime":11147.0,"Position":360.9966},{"StartTime":11205.0,"Position":366.705933},{"StartTime":11262.0,"Position":374.373932},{"StartTime":11320.0,"Position":353.699646},{"StartTime":11377.0,"Position":342.154724},{"StartTime":11435.0,"Position":324.4215},{"StartTime":11493.0,"Position":315.801636},{"StartTime":11550.0,"Position":313.5487},{"StartTime":11608.0,"Position":271.382233},{"StartTime":11666.0,"Position":275.551453},{"StartTime":11743.0,"Position":251.860443},{"StartTime":11821.0,"Position":253.941635},{"StartTime":11898.0,"Position":246.294464},{"StartTime":12012.0,"Position":222.380341}]},{"StartTime":12128.0,"Objects":[{"StartTime":12128.0,"Position":277.0},{"StartTime":12185.0,"Position":286.367584},{"StartTime":12243.0,"Position":279.495453},{"StartTime":12300.0,"Position":288.1463},{"StartTime":12358.0,"Position":315.20166},{"StartTime":12416.0,"Position":333.197174},{"StartTime":12473.0,"Position":337.572571},{"StartTime":12531.0,"Position":354.3016},{"StartTime":12589.0,"Position":353.764526},{"StartTime":12646.0,"Position":345.45694},{"StartTime":12704.0,"Position":357.232819},{"StartTime":12762.0,"Position":385.726257},{"StartTime":12820.0,"Position":397.4973},{"StartTime":12877.0,"Position":387.321167},{"StartTime":12935.0,"Position":400.226685},{"StartTime":12993.0,"Position":395.857452},{"StartTime":13051.0,"Position":396.461},{"StartTime":13108.0,"Position":375.792877},{"StartTime":13166.0,"Position":398.245056},{"StartTime":13223.0,"Position":360.8882},{"StartTime":13281.0,"Position":377.927124},{"StartTime":13339.0,"Position":371.7029},{"StartTime":13396.0,"Position":340.773041},{"StartTime":13454.0,"Position":331.170654},{"StartTime":13512.0,"Position":326.4561},{"StartTime":13589.0,"Position":317.45755},{"StartTime":13667.0,"Position":282.7605},{"StartTime":13744.0,"Position":294.553864},{"StartTime":13858.0,"Position":275.41626}]},{"StartTime":13974.0,"Objects":[{"StartTime":13974.0,"Position":224.0},{"StartTime":14031.0,"Position":242.10614},{"StartTime":14089.0,"Position":231.030609},{"StartTime":14146.0,"Position":251.547287},{"StartTime":14204.0,"Position":268.8433},{"StartTime":14262.0,"Position":261.7123},{"StartTime":14319.0,"Position":277.927216},{"StartTime":14377.0,"Position":274.7192},{"StartTime":14435.0,"Position":298.902283},{"StartTime":14492.0,"Position":329.133179},{"StartTime":14550.0,"Position":318.761},{"StartTime":14608.0,"Position":333.488434},{"StartTime":14666.0,"Position":327.233429},{"StartTime":14723.0,"Position":342.709534},{"StartTime":14781.0,"Position":367.243256},{"StartTime":14839.0,"Position":396.5221},{"StartTime":14897.0,"Position":390.511658},{"StartTime":14954.0,"Position":411.8796},{"StartTime":15012.0,"Position":408.991516},{"StartTime":15069.0,"Position":437.3712},{"StartTime":15127.0,"Position":420.3055},{"StartTime":15185.0,"Position":452.5711},{"StartTime":15242.0,"Position":431.9301},{"StartTime":15300.0,"Position":440.694916},{"StartTime":15358.0,"Position":457.511383},{"StartTime":15435.0,"Position":451.915558},{"StartTime":15513.0,"Position":484.714874},{"StartTime":15590.0,"Position":459.728149},{"StartTime":15704.0,"Position":473.000916}]},{"StartTime":15820.0,"Objects":[{"StartTime":15820.0,"Position":496.0},{"StartTime":15877.0,"Position":483.522858},{"StartTime":15935.0,"Position":459.817322},{"StartTime":15992.0,"Position":455.2906},{"StartTime":16050.0,"Position":441.544861},{"StartTime":16108.0,"Position":428.790771},{"StartTime":16165.0,"Position":421.243561},{"StartTime":16223.0,"Position":409.5152},{"StartTime":16281.0,"Position":402.8313},{"StartTime":16338.0,"Position":394.4202},{"StartTime":16396.0,"Position":367.913544},{"StartTime":16454.0,"Position":356.550537},{"StartTime":16512.0,"Position":342.3495},{"StartTime":16569.0,"Position":342.516174},{"StartTime":16627.0,"Position":338.6564},{"StartTime":16685.0,"Position":305.922882},{"StartTime":16743.0,"Position":314.2508},{"StartTime":16800.0,"Position":316.746429},{"StartTime":16858.0,"Position":289.968872},{"StartTime":16915.0,"Position":298.2334},{"StartTime":16973.0,"Position":262.136932},{"StartTime":17031.0,"Position":248.865051},{"StartTime":17088.0,"Position":234.631226},{"StartTime":17146.0,"Position":255.076126},{"StartTime":17204.0,"Position":225.427078},{"StartTime":17281.0,"Position":228.8747},{"StartTime":17359.0,"Position":177.073364},{"StartTime":17436.0,"Position":172.47197},{"StartTime":17550.0,"Position":155.424408}]},{"StartTime":17666.0,"Objects":[{"StartTime":17666.0,"Position":76.0},{"StartTime":17723.0,"Position":87.77035},{"StartTime":17781.0,"Position":98.64252},{"StartTime":17838.0,"Position":77.40019},{"StartTime":17896.0,"Position":79.17106},{"StartTime":17954.0,"Position":75.9109},{"StartTime":18011.0,"Position":98.67864},{"StartTime":18069.0,"Position":81.55746},{"StartTime":18127.0,"Position":94.6412},{"StartTime":18184.0,"Position":106.02198},{"StartTime":18242.0,"Position":80.74162},{"StartTime":18300.0,"Position":80.8934555},{"StartTime":18358.0,"Position":94.54145},{"StartTime":18415.0,"Position":89.81274},{"StartTime":18473.0,"Position":83.62778},{"StartTime":18531.0,"Position":70.08861},{"StartTime":18589.0,"Position":67.22952},{"StartTime":18646.0,"Position":56.1856537},{"StartTime":18704.0,"Position":49.79115},{"StartTime":18761.0,"Position":70.26942},{"StartTime":18819.0,"Position":40.4434967},{"StartTime":18877.0,"Position":46.63468},{"StartTime":18934.0,"Position":68.05432},{"StartTime":18992.0,"Position":44.13054},{"StartTime":19050.0,"Position":67.82982},{"StartTime":19103.0,"Position":78.455},{"StartTime":19156.0,"Position":79.6943054},{"StartTime":19209.0,"Position":100.563232},{"StartTime":19263.0,"Position":101.227158},{"StartTime":19316.0,"Position":127.280083},{"StartTime":19369.0,"Position":110.728683},{"StartTime":19422.0,"Position":117.413574},{"StartTime":19512.0,"Position":151.558578}]},{"StartTime":19628.0,"Objects":[{"StartTime":19628.0,"Position":175.0},{"StartTime":19721.0,"Position":327.0},{"StartTime":19815.0,"Position":472.0},{"StartTime":19909.0,"Position":95.0},{"StartTime":20003.0,"Position":295.0},{"StartTime":20096.0,"Position":3.0},{"StartTime":20190.0,"Position":261.0},{"StartTime":20284.0,"Position":125.0},{"StartTime":20378.0,"Position":467.0},{"StartTime":20471.0,"Position":18.0},{"StartTime":20565.0,"Position":269.0},{"StartTime":20659.0,"Position":97.0},{"StartTime":20753.0,"Position":26.0},{"StartTime":20846.0,"Position":406.0},{"StartTime":20940.0,"Position":371.0},{"StartTime":21034.0,"Position":419.0},{"StartTime":21128.0,"Position":100.0}]},{"StartTime":21359.0,"Objects":[{"StartTime":21359.0,"Position":213.0},{"StartTime":21412.0,"Position":195.265717},{"StartTime":21465.0,"Position":172.531433},{"StartTime":21518.0,"Position":182.79715},{"StartTime":21571.0,"Position":165.062866},{"StartTime":21624.0,"Position":140.328583},{"StartTime":21677.0,"Position":133.5943},{"StartTime":21730.0,"Position":143.860016},{"StartTime":21820.0,"Position":119.631989}]},{"StartTime":22282.0,"Objects":[{"StartTime":22282.0,"Position":300.0},{"StartTime":22335.0,"Position":308.727142},{"StartTime":22388.0,"Position":315.4543},{"StartTime":22441.0,"Position":319.181458},{"StartTime":22494.0,"Position":333.90863},{"StartTime":22547.0,"Position":347.635773},{"StartTime":22600.0,"Position":353.362946},{"StartTime":22653.0,"Position":375.0901},{"StartTime":22743.0,"Position":393.30603}]},{"StartTime":23205.0,"Objects":[{"StartTime":23205.0,"Position":233.0},{"StartTime":23258.0,"Position":208.265717},{"StartTime":23311.0,"Position":212.531433},{"StartTime":23364.0,"Position":215.79715},{"StartTime":23417.0,"Position":179.062866},{"StartTime":23470.0,"Position":173.328583},{"StartTime":23523.0,"Position":185.5943},{"StartTime":23576.0,"Position":138.860016},{"StartTime":23666.0,"Position":139.631989}]},{"StartTime":24128.0,"Objects":[{"StartTime":24128.0,"Position":280.0},{"StartTime":24181.0,"Position":305.727142},{"StartTime":24234.0,"Position":319.4543},{"StartTime":24287.0,"Position":295.181458},{"StartTime":24340.0,"Position":306.90863},{"StartTime":24393.0,"Position":345.635773},{"StartTime":24446.0,"Position":356.362946},{"StartTime":24499.0,"Position":370.0901},{"StartTime":24589.0,"Position":373.30603}]},{"StartTime":25051.0,"Objects":[{"StartTime":25051.0,"Position":509.0},{"StartTime":25108.0,"Position":489.511871},{"StartTime":25166.0,"Position":471.778442},{"StartTime":25223.0,"Position":470.23056},{"StartTime":25281.0,"Position":475.5067},{"StartTime":25339.0,"Position":449.876923},{"StartTime":25396.0,"Position":439.6286},{"StartTime":25454.0,"Position":421.4741},{"StartTime":25512.0,"Position":417.74292},{"StartTime":25569.0,"Position":416.689667},{"StartTime":25627.0,"Position":391.007355},{"StartTime":25685.0,"Position":404.830078},{"StartTime":25743.0,"Position":364.05426},{"StartTime":25800.0,"Position":370.67514},{"StartTime":25858.0,"Position":346.2108},{"StartTime":25916.0,"Position":342.618164},{"StartTime":25974.0,"Position":345.704254},{"StartTime":26031.0,"Position":328.489929},{"StartTime":26089.0,"Position":328.5705},{"StartTime":26146.0,"Position":305.2769},{"StartTime":26204.0,"Position":322.3134},{"StartTime":26262.0,"Position":302.982635},{"StartTime":26319.0,"Position":272.607971},{"StartTime":26377.0,"Position":285.90564},{"StartTime":26435.0,"Position":259.157166},{"StartTime":26532.0,"Position":228.552155},{"StartTime":26666.0,"Position":212.757538}]},{"StartTime":26897.0,"Objects":[{"StartTime":26897.0,"Position":139.0},{"StartTime":26954.0,"Position":133.361816},{"StartTime":27012.0,"Position":143.286819},{"StartTime":27069.0,"Position":161.413025},{"StartTime":27127.0,"Position":156.985428},{"StartTime":27185.0,"Position":187.844818},{"StartTime":27242.0,"Position":179.886826},{"StartTime":27300.0,"Position":192.294571},{"StartTime":27358.0,"Position":179.870422},{"StartTime":27415.0,"Position":165.7108},{"StartTime":27473.0,"Position":165.724655},{"StartTime":27531.0,"Position":195.002426},{"StartTime":27589.0,"Position":189.446243},{"StartTime":27646.0,"Position":163.145172},{"StartTime":27704.0,"Position":183.047577},{"StartTime":27762.0,"Position":177.146835},{"StartTime":27820.0,"Position":172.526245},{"StartTime":27873.0,"Position":153.507584},{"StartTime":27926.0,"Position":159.91684},{"StartTime":27979.0,"Position":157.750839},{"StartTime":28032.0,"Position":159.959869},{"StartTime":28085.0,"Position":134.653137},{"StartTime":28138.0,"Position":146.842239},{"StartTime":28191.0,"Position":130.478638},{"StartTime":28281.0,"Position":118.957672}]},{"StartTime":28743.0,"Objects":[{"StartTime":28743.0,"Position":46.0},{"StartTime":28796.0,"Position":55.7339554},{"StartTime":28849.0,"Position":60.46791},{"StartTime":28902.0,"Position":76.20187},{"StartTime":28955.0,"Position":103.935829},{"StartTime":29008.0,"Position":116.669785},{"StartTime":29061.0,"Position":94.40374},{"StartTime":29114.0,"Position":103.137695},{"StartTime":29204.0,"Position":139.365158}]},{"StartTime":29666.0,"Objects":[{"StartTime":29666.0,"Position":280.0},{"StartTime":29719.0,"Position":281.272369},{"StartTime":29772.0,"Position":265.544739},{"StartTime":29825.0,"Position":227.817123},{"StartTime":29878.0,"Position":236.0895},{"StartTime":29931.0,"Position":211.361862},{"StartTime":29984.0,"Position":196.634247},{"StartTime":30037.0,"Position":208.906616},{"StartTime":30127.0,"Position":186.68988}]},{"StartTime":30589.0,"Objects":[{"StartTime":30589.0,"Position":26.0},{"StartTime":30642.0,"Position":38.7339554},{"StartTime":30695.0,"Position":64.46791},{"StartTime":30748.0,"Position":69.20187},{"StartTime":30801.0,"Position":70.93583},{"StartTime":30854.0,"Position":87.6697845},{"StartTime":30907.0,"Position":83.40374},{"StartTime":30960.0,"Position":102.137695},{"StartTime":31050.0,"Position":119.365158}]},{"StartTime":31513.0,"Objects":[{"StartTime":31513.0,"Position":300.0},{"StartTime":31566.0,"Position":273.272369},{"StartTime":31619.0,"Position":259.544739},{"StartTime":31672.0,"Position":247.817108},{"StartTime":31725.0,"Position":260.089478},{"StartTime":31778.0,"Position":246.361862},{"StartTime":31831.0,"Position":245.634247},{"StartTime":31884.0,"Position":206.906616},{"StartTime":31974.0,"Position":206.68988}]},{"StartTime":32436.0,"Objects":[{"StartTime":32436.0,"Position":0.0},{"StartTime":32493.0,"Position":8.481003},{"StartTime":32551.0,"Position":17.2065411},{"StartTime":32608.0,"Position":36.75175},{"StartTime":32666.0,"Position":63.492},{"StartTime":32724.0,"Position":69.1785355},{"StartTime":32781.0,"Position":64.5525742},{"StartTime":32839.0,"Position":67.93051},{"StartTime":32897.0,"Position":92.01424},{"StartTime":32954.0,"Position":104.527992},{"StartTime":33012.0,"Position":108.767555},{"StartTime":33070.0,"Position":115.489395},{"StartTime":33128.0,"Position":142.74057},{"StartTime":33185.0,"Position":130.392532},{"StartTime":33243.0,"Position":167.886856},{"StartTime":33301.0,"Position":144.19075},{"StartTime":33359.0,"Position":165.439865},{"StartTime":33416.0,"Position":187.637711},{"StartTime":33474.0,"Position":187.212952},{"StartTime":33531.0,"Position":180.968018},{"StartTime":33589.0,"Position":206.289978},{"StartTime":33647.0,"Position":212.1045},{"StartTime":33704.0,"Position":201.208252},{"StartTime":33762.0,"Position":233.917343},{"StartTime":33820.0,"Position":241.988678},{"StartTime":33873.0,"Position":268.349731},{"StartTime":33926.0,"Position":255.874725},{"StartTime":33979.0,"Position":263.512756},{"StartTime":34033.0,"Position":291.417633},{"StartTime":34086.0,"Position":277.149475},{"StartTime":34139.0,"Position":292.8848},{"StartTime":34192.0,"Position":324.60495},{"StartTime":34282.0,"Position":334.7409}]},{"StartTime":35205.0,"Objects":[{"StartTime":35205.0,"Position":334.0},{"StartTime":35262.0,"Position":340.7383},{"StartTime":35320.0,"Position":340.454468},{"StartTime":35377.0,"Position":330.19278},{"StartTime":35435.0,"Position":310.908936},{"StartTime":35493.0,"Position":342.625122},{"StartTime":35550.0,"Position":329.3634},{"StartTime":35608.0,"Position":326.0796},{"StartTime":35666.0,"Position":323.795746},{"StartTime":35743.0,"Position":339.091339},{"StartTime":35821.0,"Position":332.3648},{"StartTime":35898.0,"Position":326.660431},{"StartTime":36012.0,"Position":316.137024}]},{"StartTime":36128.0,"Objects":[{"StartTime":36128.0,"Position":396.0},{"StartTime":36205.0,"Position":424.562164},{"StartTime":36283.0,"Position":411.8008},{"StartTime":36360.0,"Position":445.324},{"StartTime":36474.0,"Position":455.6553}]},{"StartTime":36590.0,"Objects":[{"StartTime":36590.0,"Position":508.0},{"StartTime":36647.0,"Position":507.608643},{"StartTime":36705.0,"Position":467.976624},{"StartTime":36762.0,"Position":491.5103},{"StartTime":36820.0,"Position":467.808167},{"StartTime":36878.0,"Position":439.079285},{"StartTime":36935.0,"Position":450.5368},{"StartTime":36993.0,"Position":418.7871},{"StartTime":37051.0,"Position":415.0512},{"StartTime":37108.0,"Position":400.549622},{"StartTime":37166.0,"Position":374.909882},{"StartTime":37224.0,"Position":360.366669},{"StartTime":37282.0,"Position":351.960266},{"StartTime":37339.0,"Position":373.927246},{"StartTime":37397.0,"Position":327.92276},{"StartTime":37455.0,"Position":355.1943},{"StartTime":37513.0,"Position":325.7901},{"StartTime":37570.0,"Position":315.897064},{"StartTime":37628.0,"Position":301.1828},{"StartTime":37685.0,"Position":282.9958},{"StartTime":37743.0,"Position":273.99173},{"StartTime":37801.0,"Position":296.2926},{"StartTime":37858.0,"Position":255.011658},{"StartTime":37916.0,"Position":280.795471},{"StartTime":37974.0,"Position":254.726242},{"StartTime":38031.0,"Position":248.885468},{"StartTime":38089.0,"Position":254.920837},{"StartTime":38147.0,"Position":247.9064},{"StartTime":38205.0,"Position":226.7846},{"StartTime":38262.0,"Position":210.6326},{"StartTime":38320.0,"Position":196.086411},{"StartTime":38378.0,"Position":206.264862},{"StartTime":38436.0,"Position":188.119415},{"StartTime":38493.0,"Position":166.78624},{"StartTime":38551.0,"Position":157.938934},{"StartTime":38608.0,"Position":173.9212},{"StartTime":38666.0,"Position":152.396286},{"StartTime":38724.0,"Position":144.574},{"StartTime":38781.0,"Position":139.691086},{"StartTime":38839.0,"Position":106.411957},{"StartTime":38897.0,"Position":103.968422},{"StartTime":38950.0,"Position":85.40208},{"StartTime":39003.0,"Position":75.759964},{"StartTime":39056.0,"Position":80.06977},{"StartTime":39110.0,"Position":57.1452141},{"StartTime":39163.0,"Position":66.4100647},{"StartTime":39216.0,"Position":26.6742554},{"StartTime":39269.0,"Position":30.94808},{"StartTime":39359.0,"Position":10.77596}]},{"StartTime":39820.0,"Objects":[{"StartTime":39820.0,"Position":10.0},{"StartTime":39873.0,"Position":39.7053146},{"StartTime":39926.0,"Position":31.4106255},{"StartTime":39979.0,"Position":48.1159363},{"StartTime":40032.0,"Position":35.82125},{"StartTime":40085.0,"Position":56.52656},{"StartTime":40138.0,"Position":82.23187},{"StartTime":40191.0,"Position":64.93718},{"StartTime":40281.0,"Position":103.116005}]},{"StartTime":40743.0,"Objects":[{"StartTime":40743.0,"Position":233.0},{"StartTime":40796.0,"Position":207.2947},{"StartTime":40849.0,"Position":214.589371},{"StartTime":40902.0,"Position":212.884064},{"StartTime":40955.0,"Position":200.178741},{"StartTime":41008.0,"Position":185.473434},{"StartTime":41061.0,"Position":163.768127},{"StartTime":41114.0,"Position":149.0628},{"StartTime":41204.0,"Position":139.884}]},{"StartTime":41666.0,"Objects":[{"StartTime":41666.0,"Position":268.0},{"StartTime":41723.0,"Position":293.498932},{"StartTime":41781.0,"Position":294.1996},{"StartTime":41838.0,"Position":320.698517},{"StartTime":41896.0,"Position":319.3992},{"StartTime":41954.0,"Position":319.099854},{"StartTime":42011.0,"Position":354.5988},{"StartTime":42069.0,"Position":351.299438},{"StartTime":42127.0,"Position":361.000122},{"StartTime":42180.0,"Position":387.6921},{"StartTime":42233.0,"Position":401.3841},{"StartTime":42286.0,"Position":382.07608},{"StartTime":42340.0,"Position":415.9698},{"StartTime":42393.0,"Position":400.6618},{"StartTime":42446.0,"Position":441.35376},{"StartTime":42499.0,"Position":448.045776},{"StartTime":42589.0,"Position":454.201965}]},{"StartTime":43051.0,"Objects":[{"StartTime":43051.0,"Position":271.0},{"StartTime":43148.0,"Position":248.313141},{"StartTime":43281.0,"Position":253.544708}]},{"StartTime":43513.0,"Objects":[{"StartTime":43513.0,"Position":268.0}]},{"StartTime":43628.0,"Objects":[{"StartTime":43628.0,"Position":408.0},{"StartTime":43712.0,"Position":396.0},{"StartTime":43797.0,"Position":293.0},{"StartTime":43882.0,"Position":157.0},{"StartTime":43966.0,"Position":172.0},{"StartTime":44051.0,"Position":110.0},{"StartTime":44136.0,"Position":285.0},{"StartTime":44221.0,"Position":73.0},{"StartTime":44305.0,"Position":118.0},{"StartTime":44390.0,"Position":161.0},{"StartTime":44475.0,"Position":222.0},{"StartTime":44560.0,"Position":461.0},{"StartTime":44644.0,"Position":234.0},{"StartTime":44729.0,"Position":99.0},{"StartTime":44814.0,"Position":219.0},{"StartTime":44899.0,"Position":395.0},{"StartTime":44983.0,"Position":390.0},{"StartTime":45068.0,"Position":496.0},{"StartTime":45153.0,"Position":412.0},{"StartTime":45237.0,"Position":362.0},{"StartTime":45322.0,"Position":3.0},{"StartTime":45407.0,"Position":116.0},{"StartTime":45492.0,"Position":339.0},{"StartTime":45576.0,"Position":487.0},{"StartTime":45661.0,"Position":447.0},{"StartTime":45746.0,"Position":58.0},{"StartTime":45831.0,"Position":235.0},{"StartTime":45915.0,"Position":263.0},{"StartTime":46000.0,"Position":279.0},{"StartTime":46085.0,"Position":53.0},{"StartTime":46170.0,"Position":74.0},{"StartTime":46254.0,"Position":234.0},{"StartTime":46339.0,"Position":215.0},{"StartTime":46424.0,"Position":79.0},{"StartTime":46508.0,"Position":335.0},{"StartTime":46593.0,"Position":453.0},{"StartTime":46678.0,"Position":380.0},{"StartTime":46763.0,"Position":428.0},{"StartTime":46847.0,"Position":323.0},{"StartTime":46932.0,"Position":350.0},{"StartTime":47017.0,"Position":363.0},{"StartTime":47102.0,"Position":294.0},{"StartTime":47186.0,"Position":278.0},{"StartTime":47271.0,"Position":111.0},{"StartTime":47356.0,"Position":173.0},{"StartTime":47441.0,"Position":362.0},{"StartTime":47525.0,"Position":377.0},{"StartTime":47610.0,"Position":87.0},{"StartTime":47695.0,"Position":268.0},{"StartTime":47779.0,"Position":67.0},{"StartTime":47864.0,"Position":43.0},{"StartTime":47949.0,"Position":275.0},{"StartTime":48034.0,"Position":190.0},{"StartTime":48118.0,"Position":219.0},{"StartTime":48203.0,"Position":72.0},{"StartTime":48288.0,"Position":103.0},{"StartTime":48373.0,"Position":143.0},{"StartTime":48457.0,"Position":439.0},{"StartTime":48542.0,"Position":446.0},{"StartTime":48627.0,"Position":59.0},{"StartTime":48712.0,"Position":297.0},{"StartTime":48796.0,"Position":295.0},{"StartTime":48881.0,"Position":494.0},{"StartTime":48966.0,"Position":483.0},{"StartTime":49051.0,"Position":477.0}]},{"StartTime":56435.0,"Objects":[{"StartTime":56435.0,"Position":45.0},{"StartTime":56532.0,"Position":132.88501},{"StartTime":56665.0,"Position":218.481384}]},{"StartTime":56781.0,"Objects":[{"StartTime":56781.0,"Position":214.0}]},{"StartTime":56897.0,"Objects":[{"StartTime":56897.0,"Position":214.0},{"StartTime":57012.0,"Position":192.823029}]},{"StartTime":57127.0,"Objects":[{"StartTime":57127.0,"Position":336.0},{"StartTime":57242.0,"Position":313.87915}]},{"StartTime":57358.0,"Objects":[{"StartTime":57358.0,"Position":319.0},{"StartTime":57473.0,"Position":406.663483}]},{"StartTime":57589.0,"Objects":[{"StartTime":57589.0,"Position":214.0},{"StartTime":57704.0,"Position":126.336525}]},{"StartTime":57820.0,"Objects":[{"StartTime":57820.0,"Position":58.0}]},{"StartTime":57935.0,"Objects":[{"StartTime":57935.0,"Position":165.0}]},{"StartTime":58051.0,"Objects":[{"StartTime":58051.0,"Position":263.0}]},{"StartTime":58166.0,"Objects":[{"StartTime":58166.0,"Position":370.0}]},{"StartTime":58224.0,"Objects":[{"StartTime":58224.0,"Position":370.0}]},{"StartTime":58281.0,"Objects":[{"StartTime":58281.0,"Position":370.0},{"StartTime":58378.0,"Position":368.716156},{"StartTime":58511.0,"Position":426.762177}]},{"StartTime":58627.0,"Objects":[{"StartTime":58627.0,"Position":507.0}]},{"StartTime":58685.0,"Objects":[{"StartTime":58685.0,"Position":507.0}]},{"StartTime":58743.0,"Objects":[{"StartTime":58743.0,"Position":507.0},{"StartTime":58858.0,"Position":493.172424}]},{"StartTime":58974.0,"Objects":[{"StartTime":58974.0,"Position":412.0},{"StartTime":59089.0,"Position":425.827576}]},{"StartTime":59204.0,"Objects":[{"StartTime":59204.0,"Position":370.0},{"StartTime":59319.0,"Position":281.006439}]},{"StartTime":59435.0,"Objects":[{"StartTime":59435.0,"Position":273.0},{"StartTime":59550.0,"Position":330.438354}]},{"StartTime":59666.0,"Objects":[{"StartTime":59666.0,"Position":349.0},{"StartTime":59781.0,"Position":356.9348}]},{"StartTime":59897.0,"Objects":[{"StartTime":59897.0,"Position":482.0},{"StartTime":60012.0,"Position":414.039063}]},{"StartTime":60127.0,"Objects":[{"StartTime":60127.0,"Position":144.0},{"StartTime":60224.0,"Position":221.810028},{"StartTime":60357.0,"Position":330.869141}]},{"StartTime":60474.0,"Objects":[{"StartTime":60474.0,"Position":349.0},{"StartTime":60571.0,"Position":283.189972},{"StartTime":60704.0,"Position":162.130859}]},{"StartTime":60820.0,"Objects":[{"StartTime":60820.0,"Position":85.0},{"StartTime":60935.0,"Position":178.415466}]},{"StartTime":61051.0,"Objects":[{"StartTime":61051.0,"Position":126.0},{"StartTime":61166.0,"Position":66.6307449}]},{"StartTime":61281.0,"Objects":[{"StartTime":61281.0,"Position":162.0},{"StartTime":61396.0,"Position":221.369263}]},{"StartTime":61512.0,"Objects":[{"StartTime":61512.0,"Position":203.0},{"StartTime":61627.0,"Position":296.284821}]},{"StartTime":61743.0,"Objects":[{"StartTime":61743.0,"Position":443.0},{"StartTime":61858.0,"Position":349.68988}]},{"StartTime":61916.0,"Objects":[{"StartTime":61916.0,"Position":329.0}]},{"StartTime":61974.0,"Objects":[{"StartTime":61974.0,"Position":309.0},{"StartTime":62071.0,"Position":286.152618},{"StartTime":62204.0,"Position":290.392822}]},{"StartTime":62320.0,"Objects":[{"StartTime":62320.0,"Position":203.0},{"StartTime":62417.0,"Position":201.847382},{"StartTime":62550.0,"Position":221.6072}]},{"StartTime":62666.0,"Objects":[{"StartTime":62666.0,"Position":133.0},{"StartTime":62723.0,"Position":120.111374},{"StartTime":62781.0,"Position":131.576614},{"StartTime":62838.0,"Position":112.055237},{"StartTime":62896.0,"Position":126.217979},{"StartTime":62993.0,"Position":137.178284},{"StartTime":63127.0,"Position":118.0}]},{"StartTime":63358.0,"Objects":[{"StartTime":63358.0,"Position":285.0}]},{"StartTime":63474.0,"Objects":[{"StartTime":63474.0,"Position":352.0}]},{"StartTime":63589.0,"Objects":[{"StartTime":63589.0,"Position":265.0}]},{"StartTime":63705.0,"Objects":[{"StartTime":63705.0,"Position":332.0}]},{"StartTime":63820.0,"Objects":[{"StartTime":63820.0,"Position":474.0}]},{"StartTime":63877.0,"Objects":[{"StartTime":63877.0,"Position":456.0}]},{"StartTime":63935.0,"Objects":[{"StartTime":63935.0,"Position":437.0}]},{"StartTime":63993.0,"Objects":[{"StartTime":63993.0,"Position":419.0}]},{"StartTime":64051.0,"Objects":[{"StartTime":64051.0,"Position":400.0},{"StartTime":64166.0,"Position":307.5588}]},{"StartTime":64281.0,"Objects":[{"StartTime":64281.0,"Position":217.0}]},{"StartTime":64338.0,"Objects":[{"StartTime":64338.0,"Position":219.0}]},{"StartTime":64396.0,"Objects":[{"StartTime":64396.0,"Position":221.0}]},{"StartTime":64454.0,"Objects":[{"StartTime":64454.0,"Position":224.0}]},{"StartTime":64512.0,"Objects":[{"StartTime":64512.0,"Position":226.0},{"StartTime":64627.0,"Position":211.96875}]},{"StartTime":64743.0,"Objects":[{"StartTime":64743.0,"Position":186.0}]},{"StartTime":64800.0,"Objects":[{"StartTime":64800.0,"Position":204.0}]},{"StartTime":64858.0,"Objects":[{"StartTime":64858.0,"Position":223.0}]},{"StartTime":64916.0,"Objects":[{"StartTime":64916.0,"Position":241.0}]},{"StartTime":64974.0,"Objects":[{"StartTime":64974.0,"Position":260.0},{"StartTime":65089.0,"Position":352.4412}]},{"StartTime":65205.0,"Objects":[{"StartTime":65205.0,"Position":443.0}]},{"StartTime":65262.0,"Objects":[{"StartTime":65262.0,"Position":441.0}]},{"StartTime":65320.0,"Objects":[{"StartTime":65320.0,"Position":439.0}]},{"StartTime":65378.0,"Objects":[{"StartTime":65378.0,"Position":436.0}]},{"StartTime":65436.0,"Objects":[{"StartTime":65436.0,"Position":434.0},{"StartTime":65551.0,"Position":448.03125}]},{"StartTime":65666.0,"Objects":[{"StartTime":65666.0,"Position":474.0}]},{"StartTime":65723.0,"Objects":[{"StartTime":65723.0,"Position":456.0}]},{"StartTime":65781.0,"Objects":[{"StartTime":65781.0,"Position":437.0}]},{"StartTime":65839.0,"Objects":[{"StartTime":65839.0,"Position":419.0}]},{"StartTime":65897.0,"Objects":[{"StartTime":65897.0,"Position":400.0},{"StartTime":66012.0,"Position":307.5588}]},{"StartTime":66127.0,"Objects":[{"StartTime":66127.0,"Position":226.0}]},{"StartTime":66184.0,"Objects":[{"StartTime":66184.0,"Position":208.0}]},{"StartTime":66242.0,"Objects":[{"StartTime":66242.0,"Position":189.0}]},{"StartTime":66300.0,"Objects":[{"StartTime":66300.0,"Position":171.0}]},{"StartTime":66358.0,"Objects":[{"StartTime":66358.0,"Position":152.0},{"StartTime":66473.0,"Position":59.5588074}]},{"StartTime":66589.0,"Objects":[{"StartTime":66589.0,"Position":14.0},{"StartTime":66704.0,"Position":1.656276}]},{"StartTime":66820.0,"Objects":[{"StartTime":66820.0,"Position":136.0},{"StartTime":66935.0,"Position":148.343719}]},{"StartTime":67051.0,"Objects":[{"StartTime":67051.0,"Position":80.0},{"StartTime":67148.0,"Position":131.161148},{"StartTime":67281.0,"Position":249.358459}]},{"StartTime":67397.0,"Objects":[{"StartTime":67397.0,"Position":315.0}]},{"StartTime":67512.0,"Objects":[{"StartTime":67512.0,"Position":491.0},{"StartTime":67609.0,"Position":481.8445},{"StartTime":67742.0,"Position":472.807831}]},{"StartTime":67858.0,"Objects":[{"StartTime":67858.0,"Position":410.0},{"StartTime":67955.0,"Position":402.8445},{"StartTime":68088.0,"Position":391.807831}]},{"StartTime":68204.0,"Objects":[{"StartTime":68204.0,"Position":329.0},{"StartTime":68319.0,"Position":314.227875}]},{"StartTime":68435.0,"Objects":[{"StartTime":68435.0,"Position":181.0},{"StartTime":68550.0,"Position":267.731628}]},{"StartTime":68666.0,"Objects":[{"StartTime":68666.0,"Position":440.0},{"StartTime":68781.0,"Position":353.268341}]},{"StartTime":68897.0,"Objects":[{"StartTime":68897.0,"Position":128.0}]},{"StartTime":69012.0,"Objects":[{"StartTime":69012.0,"Position":181.0}]},{"StartTime":69127.0,"Objects":[{"StartTime":69127.0,"Position":117.0}]},{"StartTime":69242.0,"Objects":[{"StartTime":69242.0,"Position":170.0}]},{"StartTime":69358.0,"Objects":[{"StartTime":69358.0,"Position":52.0},{"StartTime":69473.0,"Position":42.99369}]},{"StartTime":69589.0,"Objects":[{"StartTime":69589.0,"Position":181.0},{"StartTime":69704.0,"Position":191.103531}]},{"StartTime":69820.0,"Objects":[{"StartTime":69820.0,"Position":39.0},{"StartTime":69935.0,"Position":29.8967171}]},{"StartTime":70051.0,"Objects":[{"StartTime":70051.0,"Position":168.0},{"StartTime":70166.0,"Position":177.006317}]},{"StartTime":70281.0,"Objects":[{"StartTime":70281.0,"Position":198.0}]},{"StartTime":70339.0,"Objects":[{"StartTime":70339.0,"Position":220.0}]},{"StartTime":70397.0,"Objects":[{"StartTime":70397.0,"Position":244.0}]},{"StartTime":70455.0,"Objects":[{"StartTime":70455.0,"Position":269.0}]},{"StartTime":70512.0,"Objects":[{"StartTime":70512.0,"Position":296.0}]},{"StartTime":70570.0,"Objects":[{"StartTime":70570.0,"Position":322.0}]},{"StartTime":70627.0,"Objects":[{"StartTime":70627.0,"Position":348.0}]},{"StartTime":70685.0,"Objects":[{"StartTime":70685.0,"Position":373.0}]},{"StartTime":70742.0,"Objects":[{"StartTime":70742.0,"Position":396.0}]},{"StartTime":70800.0,"Objects":[{"StartTime":70800.0,"Position":441.0}]},{"StartTime":70858.0,"Objects":[{"StartTime":70858.0,"Position":483.0}]},{"StartTime":70916.0,"Objects":[{"StartTime":70916.0,"Position":510.0}]},{"StartTime":70974.0,"Objects":[{"StartTime":70974.0,"Position":512.0}]},{"StartTime":71031.0,"Objects":[{"StartTime":71031.0,"Position":492.0}]},{"StartTime":71089.0,"Objects":[{"StartTime":71089.0,"Position":453.0}]},{"StartTime":71146.0,"Objects":[{"StartTime":71146.0,"Position":407.0}]},{"StartTime":71204.0,"Objects":[{"StartTime":71204.0,"Position":364.0},{"StartTime":71301.0,"Position":321.164063},{"StartTime":71434.0,"Position":311.518982}]},{"StartTime":71551.0,"Objects":[{"StartTime":71551.0,"Position":419.0},{"StartTime":71648.0,"Position":485.835938},{"StartTime":71781.0,"Position":471.481018}]},{"StartTime":71897.0,"Objects":[{"StartTime":71897.0,"Position":332.0},{"StartTime":72012.0,"Position":425.4371}]},{"StartTime":72127.0,"Objects":[{"StartTime":72127.0,"Position":248.0}]},{"StartTime":72243.0,"Objects":[{"StartTime":72243.0,"Position":248.0},{"StartTime":72340.0,"Position":171.186066},{"StartTime":72473.0,"Position":61.1216278}]},{"StartTime":72589.0,"Objects":[{"StartTime":72589.0,"Position":144.0},{"StartTime":72704.0,"Position":237.418945}]},{"StartTime":72820.0,"Objects":[{"StartTime":72820.0,"Position":164.0},{"StartTime":72935.0,"Position":70.58106}]},{"StartTime":73051.0,"Objects":[{"StartTime":73051.0,"Position":111.0},{"StartTime":73148.0,"Position":186.929337},{"StartTime":73281.0,"Position":227.3736}]},{"StartTime":73397.0,"Objects":[{"StartTime":73397.0,"Position":192.0},{"StartTime":73494.0,"Position":111.186607},{"StartTime":73627.0,"Position":5.122879}]},{"StartTime":73743.0,"Objects":[{"StartTime":73743.0,"Position":78.0},{"StartTime":73858.0,"Position":171.418945}]},{"StartTime":73974.0,"Objects":[{"StartTime":73974.0,"Position":365.0}]},{"StartTime":74089.0,"Objects":[{"StartTime":74089.0,"Position":365.0},{"StartTime":74186.0,"Position":295.6195},{"StartTime":74319.0,"Position":191.714233}]},{"StartTime":74435.0,"Objects":[{"StartTime":74435.0,"Position":45.0},{"StartTime":74550.0,"Position":103.137146}]},{"StartTime":74666.0,"Objects":[{"StartTime":74666.0,"Position":16.0},{"StartTime":74734.0,"Position":58.1656647},{"StartTime":74839.0,"Position":154.0101}]},{"StartTime":74897.0,"Objects":[{"StartTime":74897.0,"Position":240.0},{"StartTime":74994.0,"Position":219.3829},{"StartTime":75127.0,"Position":286.697662}]},{"StartTime":75243.0,"Objects":[{"StartTime":75243.0,"Position":395.0},{"StartTime":75340.0,"Position":426.6171},{"StartTime":75473.0,"Position":348.302338}]},{"StartTime":75589.0,"Objects":[{"StartTime":75589.0,"Position":249.0},{"StartTime":75704.0,"Position":239.00386}]},{"StartTime":75820.0,"Objects":[{"StartTime":75820.0,"Position":198.0}]},{"StartTime":75935.0,"Objects":[{"StartTime":75935.0,"Position":198.0},{"StartTime":76032.0,"Position":269.303131},{"StartTime":76165.0,"Position":307.749573}]},{"StartTime":76281.0,"Objects":[{"StartTime":76281.0,"Position":340.0},{"StartTime":76396.0,"Position":433.236267}]},{"StartTime":76512.0,"Objects":[{"StartTime":76512.0,"Position":236.0},{"StartTime":76627.0,"Position":142.721558}]},{"StartTime":76743.0,"Objects":[{"StartTime":76743.0,"Position":13.0},{"StartTime":76840.0,"Position":87.7225},{"StartTime":76973.0,"Position":197.975418}]},{"StartTime":77089.0,"Objects":[{"StartTime":77089.0,"Position":324.0},{"StartTime":77186.0,"Position":235.8584},{"StartTime":77319.0,"Position":139.0246}]},{"StartTime":77435.0,"Objects":[{"StartTime":77435.0,"Position":294.0},{"StartTime":77550.0,"Position":387.241821}]},{"StartTime":77666.0,"Objects":[{"StartTime":77666.0,"Position":452.0}]},{"StartTime":77781.0,"Objects":[{"StartTime":77781.0,"Position":452.0}]},{"StartTime":77897.0,"Objects":[{"StartTime":77897.0,"Position":492.0}]},{"StartTime":78012.0,"Objects":[{"StartTime":78012.0,"Position":492.0}]},{"StartTime":78127.0,"Objects":[{"StartTime":78127.0,"Position":376.0},{"StartTime":78195.0,"Position":385.579041},{"StartTime":78300.0,"Position":485.975616}]},{"StartTime":78358.0,"Objects":[{"StartTime":78358.0,"Position":452.0},{"StartTime":78426.0,"Position":412.046082},{"StartTime":78531.0,"Position":312.1908}]},{"StartTime":78589.0,"Objects":[{"StartTime":78589.0,"Position":216.0},{"StartTime":78686.0,"Position":239.335068},{"StartTime":78819.0,"Position":162.709442}]},{"StartTime":78935.0,"Objects":[{"StartTime":78935.0,"Position":56.0},{"StartTime":79032.0,"Position":36.6649323},{"StartTime":79165.0,"Position":109.290558}]},{"StartTime":79281.0,"Objects":[{"StartTime":79281.0,"Position":216.0},{"StartTime":79396.0,"Position":223.017776}]},{"StartTime":79512.0,"Objects":[{"StartTime":79512.0,"Position":333.0}]},{"StartTime":79627.0,"Objects":[{"StartTime":79627.0,"Position":333.0},{"StartTime":79724.0,"Position":333.772766},{"StartTime":79857.0,"Position":318.234375}]},{"StartTime":79974.0,"Objects":[{"StartTime":79974.0,"Position":157.0},{"StartTime":80089.0,"Position":225.494568}]},{"StartTime":80204.0,"Objects":[{"StartTime":80204.0,"Position":400.0},{"StartTime":80319.0,"Position":331.505432}]},{"StartTime":80435.0,"Objects":[{"StartTime":80435.0,"Position":255.0},{"StartTime":80532.0,"Position":330.625641},{"StartTime":80665.0,"Position":441.4319}]},{"StartTime":80781.0,"Objects":[{"StartTime":80781.0,"Position":512.0},{"StartTime":80878.0,"Position":452.374359},{"StartTime":81011.0,"Position":325.5681}]},{"StartTime":81127.0,"Objects":[{"StartTime":81127.0,"Position":244.0},{"StartTime":81242.0,"Position":337.236267}]},{"StartTime":81358.0,"Objects":[{"StartTime":81358.0,"Position":464.0}]},{"StartTime":81474.0,"Objects":[{"StartTime":81474.0,"Position":464.0},{"StartTime":81571.0,"Position":485.126251},{"StartTime":81704.0,"Position":436.704865}]},{"StartTime":81820.0,"Objects":[{"StartTime":81820.0,"Position":321.0},{"StartTime":81935.0,"Position":310.776672}]},{"StartTime":82051.0,"Objects":[{"StartTime":82051.0,"Position":201.0},{"StartTime":82119.0,"Position":200.524429},{"StartTime":82224.0,"Position":215.0548}]},{"StartTime":82281.0,"Objects":[{"StartTime":82281.0,"Position":225.0},{"StartTime":82378.0,"Position":133.1369},{"StartTime":82511.0,"Position":61.8697166}]},{"StartTime":82627.0,"Objects":[{"StartTime":82627.0,"Position":90.0},{"StartTime":82724.0,"Position":181.8631},{"StartTime":82857.0,"Position":253.13028}]},{"StartTime":82974.0,"Objects":[{"StartTime":82974.0,"Position":315.0},{"StartTime":83089.0,"Position":408.2069}]},{"StartTime":83204.0,"Objects":[{"StartTime":83204.0,"Position":500.0}]},{"StartTime":83320.0,"Objects":[{"StartTime":83320.0,"Position":500.0},{"StartTime":83417.0,"Position":418.369476},{"StartTime":83550.0,"Position":313.556458}]},{"StartTime":83666.0,"Objects":[{"StartTime":83666.0,"Position":156.0},{"StartTime":83781.0,"Position":148.402573}]},{"StartTime":83897.0,"Objects":[{"StartTime":83897.0,"Position":260.0},{"StartTime":84012.0,"Position":267.597443}]},{"StartTime":84127.0,"Objects":[{"StartTime":84127.0,"Position":196.0},{"StartTime":84224.0,"Position":118.586784},{"StartTime":84357.0,"Position":10.0717621}]},{"StartTime":84474.0,"Objects":[{"StartTime":84474.0,"Position":80.0},{"StartTime":84571.0,"Position":153.452545},{"StartTime":84704.0,"Position":266.0215}]},{"StartTime":84820.0,"Objects":[{"StartTime":84820.0,"Position":372.0},{"StartTime":84935.0,"Position":425.185242}]},{"StartTime":85051.0,"Objects":[{"StartTime":85051.0,"Position":506.0},{"StartTime":85166.0,"Position":420.3389}]},{"StartTime":85281.0,"Objects":[{"StartTime":85281.0,"Position":313.0},{"StartTime":85396.0,"Position":345.927277}]},{"StartTime":85512.0,"Objects":[{"StartTime":85512.0,"Position":163.0},{"StartTime":85580.0,"Position":110.973129},{"StartTime":85685.0,"Position":23.0051575}]},{"StartTime":85743.0,"Objects":[{"StartTime":85743.0,"Position":44.0},{"StartTime":85858.0,"Position":137.3583}]},{"StartTime":85974.0,"Objects":[{"StartTime":85974.0,"Position":245.0},{"StartTime":86089.0,"Position":213.251648}]},{"StartTime":86204.0,"Objects":[{"StartTime":86204.0,"Position":214.0},{"StartTime":86301.0,"Position":302.473816},{"StartTime":86434.0,"Position":400.07196}]},{"StartTime":86551.0,"Objects":[{"StartTime":86551.0,"Position":497.0}]},{"StartTime":86666.0,"Objects":[{"StartTime":86666.0,"Position":497.0},{"StartTime":86781.0,"Position":418.634644}]},{"StartTime":86897.0,"Objects":[{"StartTime":86897.0,"Position":318.0},{"StartTime":86994.0,"Position":314.7335},{"StartTime":87127.0,"Position":326.852631}]},{"StartTime":87243.0,"Objects":[{"StartTime":87243.0,"Position":238.0}]},{"StartTime":87358.0,"Objects":[{"StartTime":87358.0,"Position":238.0},{"StartTime":87455.0,"Position":237.7335},{"StartTime":87588.0,"Position":246.852631}]},{"StartTime":87704.0,"Objects":[{"StartTime":87704.0,"Position":158.0}]},{"StartTime":87820.0,"Objects":[{"StartTime":87820.0,"Position":158.0},{"StartTime":87935.0,"Position":162.405472}]},{"StartTime":88051.0,"Objects":[{"StartTime":88051.0,"Position":75.0},{"StartTime":88166.0,"Position":70.55266}]},{"StartTime":88281.0,"Objects":[{"StartTime":88281.0,"Position":113.0}]},{"StartTime":88339.0,"Objects":[{"StartTime":88339.0,"Position":130.0}]},{"StartTime":88397.0,"Objects":[{"StartTime":88397.0,"Position":150.0}]},{"StartTime":88454.0,"Objects":[{"StartTime":88454.0,"Position":169.0}]},{"StartTime":88512.0,"Objects":[{"StartTime":88512.0,"Position":188.0}]},{"StartTime":88570.0,"Objects":[{"StartTime":88570.0,"Position":230.0}]},{"StartTime":88628.0,"Objects":[{"StartTime":88628.0,"Position":276.0}]},{"StartTime":88686.0,"Objects":[{"StartTime":88686.0,"Position":320.0}]},{"StartTime":88743.0,"Objects":[{"StartTime":88743.0,"Position":353.0},{"StartTime":88840.0,"Position":338.475952},{"StartTime":88973.0,"Position":361.241974}]},{"StartTime":89089.0,"Objects":[{"StartTime":89089.0,"Position":265.0}]},{"StartTime":89204.0,"Objects":[{"StartTime":89204.0,"Position":265.0},{"StartTime":89301.0,"Position":213.01651},{"StartTime":89434.0,"Position":243.2195}]},{"StartTime":89551.0,"Objects":[{"StartTime":89551.0,"Position":356.0}]},{"StartTime":89666.0,"Objects":[{"StartTime":89666.0,"Position":356.0},{"StartTime":89781.0,"Position":449.1545}]},{"StartTime":89897.0,"Objects":[{"StartTime":89897.0,"Position":373.0},{"StartTime":89965.0,"Position":333.076},{"StartTime":90070.0,"Position":233.266891}]},{"StartTime":90127.0,"Objects":[{"StartTime":90127.0,"Position":189.0},{"StartTime":90242.0,"Position":282.065216}]},{"StartTime":90358.0,"Objects":[{"StartTime":90358.0,"Position":147.0},{"StartTime":90473.0,"Position":53.8074875}]},{"StartTime":90589.0,"Objects":[{"StartTime":90589.0,"Position":129.0},{"StartTime":90686.0,"Position":192.910873},{"StartTime":90819.0,"Position":265.9673}]},{"StartTime":90935.0,"Objects":[{"StartTime":90935.0,"Position":116.0},{"StartTime":91032.0,"Position":74.5559},{"StartTime":91165.0,"Position":88.36763}]},{"StartTime":91281.0,"Objects":[{"StartTime":91281.0,"Position":189.0},{"StartTime":91396.0,"Position":166.779434}]},{"StartTime":91512.0,"Objects":[{"StartTime":91512.0,"Position":81.0},{"StartTime":91627.0,"Position":174.155975}]},{"StartTime":91743.0,"Objects":[{"StartTime":91743.0,"Position":350.0},{"StartTime":91858.0,"Position":256.844025}]},{"StartTime":91974.0,"Objects":[{"StartTime":91974.0,"Position":95.0},{"StartTime":92089.0,"Position":188.155975}]},{"StartTime":92204.0,"Objects":[{"StartTime":92204.0,"Position":377.0}]},{"StartTime":92262.0,"Objects":[{"StartTime":92262.0,"Position":365.0}]},{"StartTime":92320.0,"Objects":[{"StartTime":92320.0,"Position":355.0}]},{"StartTime":92377.0,"Objects":[{"StartTime":92377.0,"Position":345.0}]},{"StartTime":92435.0,"Objects":[{"StartTime":92435.0,"Position":334.0},{"StartTime":92532.0,"Position":280.8279},{"StartTime":92665.0,"Position":291.821869}]},{"StartTime":92781.0,"Objects":[{"StartTime":92781.0,"Position":392.0}]},{"StartTime":92897.0,"Objects":[{"StartTime":92897.0,"Position":392.0},{"StartTime":92994.0,"Position":426.812744},{"StartTime":93127.0,"Position":350.227783}]},{"StartTime":93243.0,"Objects":[{"StartTime":93243.0,"Position":256.0}]},{"StartTime":93358.0,"Objects":[{"StartTime":93358.0,"Position":256.0},{"StartTime":93473.0,"Position":261.632}]},{"StartTime":93589.0,"Objects":[{"StartTime":93589.0,"Position":152.0},{"StartTime":93657.0,"Position":156.624313},{"StartTime":93762.0,"Position":143.41185}]},{"StartTime":93820.0,"Objects":[{"StartTime":93820.0,"Position":154.0},{"StartTime":93935.0,"Position":77.33286}]},{"StartTime":94051.0,"Objects":[{"StartTime":94051.0,"Position":0.0},{"StartTime":94166.0,"Position":75.5017853}]},{"StartTime":94281.0,"Objects":[{"StartTime":94281.0,"Position":256.0},{"StartTime":94378.0,"Position":269.655945},{"StartTime":94511.0,"Position":267.039856}]},{"StartTime":94627.0,"Objects":[{"StartTime":94627.0,"Position":198.0}]},{"StartTime":94743.0,"Objects":[{"StartTime":94743.0,"Position":198.0},{"StartTime":94840.0,"Position":284.83786},{"StartTime":94973.0,"Position":360.646973}]},{"StartTime":95089.0,"Objects":[{"StartTime":95089.0,"Position":407.0}]},{"StartTime":95204.0,"Objects":[{"StartTime":95204.0,"Position":407.0},{"StartTime":95272.0,"Position":339.0539},{"StartTime":95377.0,"Position":267.210632}]},{"StartTime":95435.0,"Objects":[{"StartTime":95435.0,"Position":218.0},{"StartTime":95550.0,"Position":311.1996}]},{"StartTime":95666.0,"Objects":[{"StartTime":95666.0,"Position":401.0},{"StartTime":95781.0,"Position":390.806671}]},{"StartTime":95897.0,"Objects":[{"StartTime":95897.0,"Position":300.0},{"StartTime":96012.0,"Position":310.698975}]},{"StartTime":96127.0,"Objects":[{"StartTime":96127.0,"Position":420.0},{"StartTime":96224.0,"Position":343.702423},{"StartTime":96357.0,"Position":273.125153}]},{"StartTime":96474.0,"Objects":[{"StartTime":96474.0,"Position":159.0}]},{"StartTime":96589.0,"Objects":[{"StartTime":96589.0,"Position":159.0},{"StartTime":96686.0,"Position":74.30558},{"StartTime":96819.0,"Position":12.0078545}]},{"StartTime":96935.0,"Objects":[{"StartTime":96935.0,"Position":78.0}]},{"StartTime":97051.0,"Objects":[{"StartTime":97051.0,"Position":174.0},{"StartTime":97148.0,"Position":196.487381},{"StartTime":97281.0,"Position":194.12471}]},{"StartTime":97397.0,"Objects":[{"StartTime":97397.0,"Position":300.0}]},{"StartTime":97512.0,"Objects":[{"StartTime":97512.0,"Position":300.0},{"StartTime":97627.0,"Position":288.732025}]},{"StartTime":97743.0,"Objects":[{"StartTime":97743.0,"Position":185.0},{"StartTime":97858.0,"Position":172.889053}]},{"StartTime":97974.0,"Objects":[{"StartTime":97974.0,"Position":450.0},{"StartTime":98071.0,"Position":359.265259},{"StartTime":98204.0,"Position":263.309357}]},{"StartTime":98320.0,"Objects":[{"StartTime":98320.0,"Position":218.0}]},{"StartTime":98435.0,"Objects":[{"StartTime":98435.0,"Position":218.0},{"StartTime":98532.0,"Position":314.734741},{"StartTime":98665.0,"Position":404.690643}]},{"StartTime":98781.0,"Objects":[{"StartTime":98781.0,"Position":509.0}]},{"StartTime":98897.0,"Objects":[{"StartTime":98897.0,"Position":509.0},{"StartTime":98994.0,"Position":504.543457},{"StartTime":99127.0,"Position":511.477661}]},{"StartTime":99243.0,"Objects":[{"StartTime":99243.0,"Position":402.0}]},{"StartTime":99358.0,"Objects":[{"StartTime":99358.0,"Position":207.0},{"StartTime":99473.0,"Position":217.103531}]},{"StartTime":99589.0,"Objects":[{"StartTime":99589.0,"Position":364.0},{"StartTime":99704.0,"Position":353.017426}]},{"StartTime":99820.0,"Objects":[{"StartTime":99820.0,"Position":300.0}]},{"StartTime":99935.0,"Objects":[{"StartTime":99935.0,"Position":391.0}]},{"StartTime":100051.0,"Objects":[{"StartTime":100051.0,"Position":432.0}]},{"StartTime":100166.0,"Objects":[{"StartTime":100166.0,"Position":364.0}]},{"StartTime":100281.0,"Objects":[{"StartTime":100281.0,"Position":282.0}]},{"StartTime":100397.0,"Objects":[{"StartTime":100397.0,"Position":200.0}]},{"StartTime":100512.0,"Objects":[{"StartTime":100512.0,"Position":132.0}]},{"StartTime":100628.0,"Objects":[{"StartTime":100628.0,"Position":173.0}]},{"StartTime":100743.0,"Objects":[{"StartTime":100743.0,"Position":264.0},{"StartTime":100858.0,"Position":249.782654}]},{"StartTime":100974.0,"Objects":[{"StartTime":100974.0,"Position":158.0},{"StartTime":101089.0,"Position":172.888229}]},{"StartTime":101204.0,"Objects":[{"StartTime":101204.0,"Position":146.0},{"StartTime":101319.0,"Position":131.782654}]},{"StartTime":101435.0,"Objects":[{"StartTime":101435.0,"Position":40.0},{"StartTime":101550.0,"Position":54.0663261}]},{"StartTime":101666.0,"Objects":[{"StartTime":101666.0,"Position":146.0},{"StartTime":101781.0,"Position":229.125732}]},{"StartTime":101897.0,"Objects":[{"StartTime":101897.0,"Position":321.0},{"StartTime":102012.0,"Position":237.874268}]},{"StartTime":102127.0,"Objects":[{"StartTime":102127.0,"Position":325.0}]},{"StartTime":102243.0,"Objects":[{"StartTime":102243.0,"Position":353.0}]},{"StartTime":102300.0,"Objects":[{"StartTime":102300.0,"Position":345.0}]},{"StartTime":102358.0,"Objects":[{"StartTime":102358.0,"Position":351.0}]},{"StartTime":102416.0,"Objects":[{"StartTime":102416.0,"Position":340.0}]},{"StartTime":102474.0,"Objects":[{"StartTime":102474.0,"Position":342.0}]},{"StartTime":102531.0,"Objects":[{"StartTime":102531.0,"Position":333.0}]},{"StartTime":102589.0,"Objects":[{"StartTime":102589.0,"Position":322.0}]},{"StartTime":102646.0,"Objects":[{"StartTime":102646.0,"Position":360.0}]},{"StartTime":102704.0,"Objects":[{"StartTime":102704.0,"Position":404.0}]},{"StartTime":102762.0,"Objects":[{"StartTime":102762.0,"Position":446.0}]},{"StartTime":102819.0,"Objects":[{"StartTime":102819.0,"Position":477.0}]},{"StartTime":102935.0,"Objects":[{"StartTime":102935.0,"Position":232.0},{"StartTime":102992.0,"Position":186.691376}]},{"StartTime":103051.0,"Objects":[{"StartTime":103051.0,"Position":256.0}]},{"StartTime":103108.0,"Objects":[{"StartTime":103108.0,"Position":249.0}]},{"StartTime":103166.0,"Objects":[{"StartTime":103166.0,"Position":271.0}]},{"StartTime":103224.0,"Objects":[{"StartTime":103224.0,"Position":255.0}]},{"StartTime":103281.0,"Objects":[{"StartTime":103281.0,"Position":271.0}]},{"StartTime":103339.0,"Objects":[{"StartTime":103339.0,"Position":294.0}]},{"StartTime":103397.0,"Objects":[{"StartTime":103397.0,"Position":277.0}]},{"StartTime":103454.0,"Objects":[{"StartTime":103454.0,"Position":291.0}]},{"StartTime":103512.0,"Objects":[{"StartTime":103512.0,"Position":285.0},{"StartTime":103609.0,"Position":360.087341},{"StartTime":103742.0,"Position":468.7167}]},{"StartTime":103858.0,"Objects":[{"StartTime":103858.0,"Position":495.0}]},{"StartTime":103974.0,"Objects":[{"StartTime":103974.0,"Position":495.0},{"StartTime":104071.0,"Position":475.9798},{"StartTime":104204.0,"Position":364.1515}]},{"StartTime":104320.0,"Objects":[{"StartTime":104320.0,"Position":272.0}]},{"StartTime":104435.0,"Objects":[{"StartTime":104435.0,"Position":272.0},{"StartTime":104550.0,"Position":277.742981}]},{"StartTime":104666.0,"Objects":[{"StartTime":104666.0,"Position":362.0},{"StartTime":104763.0,"Position":304.462067},{"StartTime":104896.0,"Position":195.2012}]},{"StartTime":105012.0,"Objects":[{"StartTime":105012.0,"Position":108.0}]},{"StartTime":105127.0,"Objects":[{"StartTime":105127.0,"Position":97.0}]},{"StartTime":105243.0,"Objects":[{"StartTime":105243.0,"Position":195.0}]},{"StartTime":105301.0,"Objects":[{"StartTime":105301.0,"Position":195.0}]},{"StartTime":105358.0,"Objects":[{"StartTime":105358.0,"Position":195.0},{"StartTime":105455.0,"Position":216.359055},{"StartTime":105588.0,"Position":141.92659}]},{"StartTime":105704.0,"Objects":[{"StartTime":105704.0,"Position":33.0}]},{"StartTime":105820.0,"Objects":[{"StartTime":105820.0,"Position":33.0},{"StartTime":105935.0,"Position":40.4561768}]},{"StartTime":106051.0,"Objects":[{"StartTime":106051.0,"Position":149.0},{"StartTime":106166.0,"Position":141.071213}]},{"StartTime":106281.0,"Objects":[{"StartTime":106281.0,"Position":239.0},{"StartTime":106396.0,"Position":279.132324}]},{"StartTime":106512.0,"Objects":[{"StartTime":106512.0,"Position":255.0},{"StartTime":106627.0,"Position":347.996826}]},{"StartTime":106743.0,"Objects":[{"StartTime":106743.0,"Position":460.0},{"StartTime":106811.0,"Position":417.0297},{"StartTime":106916.0,"Position":384.705444}]},{"StartTime":106974.0,"Objects":[{"StartTime":106974.0,"Position":385.0},{"StartTime":107089.0,"Position":477.996826}]},{"StartTime":107204.0,"Objects":[{"StartTime":107204.0,"Position":391.0},{"StartTime":107301.0,"Position":323.538727},{"StartTime":107434.0,"Position":204.95784}]},{"StartTime":107551.0,"Objects":[{"StartTime":107551.0,"Position":126.0}]},{"StartTime":107666.0,"Objects":[{"StartTime":107666.0,"Position":126.0},{"StartTime":107763.0,"Position":78.60708},{"StartTime":107896.0,"Position":121.048843}]},{"StartTime":108012.0,"Objects":[{"StartTime":108012.0,"Position":233.0}]},{"StartTime":108127.0,"Objects":[{"StartTime":108127.0,"Position":233.0},{"StartTime":108242.0,"Position":220.6427}]},{"StartTime":108358.0,"Objects":[{"StartTime":108358.0,"Position":145.0},{"StartTime":108455.0,"Position":217.530029},{"StartTime":108588.0,"Position":309.147552}]},{"StartTime":108704.0,"Objects":[{"StartTime":108704.0,"Position":414.0}]},{"StartTime":108820.0,"Objects":[{"StartTime":108820.0,"Position":394.0}]},{"StartTime":108935.0,"Objects":[{"StartTime":108935.0,"Position":309.0}]},{"StartTime":108993.0,"Objects":[{"StartTime":108993.0,"Position":309.0}]},{"StartTime":109051.0,"Objects":[{"StartTime":109051.0,"Position":309.0},{"StartTime":109148.0,"Position":318.7672},{"StartTime":109281.0,"Position":301.334656}]},{"StartTime":109397.0,"Objects":[{"StartTime":109397.0,"Position":396.0}]},{"StartTime":109512.0,"Objects":[{"StartTime":109512.0,"Position":396.0},{"StartTime":109627.0,"Position":423.202057}]},{"StartTime":109743.0,"Objects":[{"StartTime":109743.0,"Position":385.0},{"StartTime":109858.0,"Position":478.08667}]},{"StartTime":109974.0,"Objects":[{"StartTime":109974.0,"Position":445.0},{"StartTime":110089.0,"Position":351.91333}]},{"StartTime":110204.0,"Objects":[{"StartTime":110204.0,"Position":264.0},{"StartTime":110319.0,"Position":259.688171}]},{"StartTime":110435.0,"Objects":[{"StartTime":110435.0,"Position":150.0},{"StartTime":110503.0,"Position":134.168854},{"StartTime":110608.0,"Position":146.468857}]},{"StartTime":110666.0,"Objects":[{"StartTime":110666.0,"Position":147.0},{"StartTime":110781.0,"Position":57.94221}]},{"StartTime":110897.0,"Objects":[{"StartTime":110897.0,"Position":214.0},{"StartTime":110994.0,"Position":303.498474},{"StartTime":111127.0,"Position":400.130432}]},{"StartTime":111243.0,"Objects":[{"StartTime":111243.0,"Position":451.0}]},{"StartTime":111358.0,"Objects":[{"StartTime":111358.0,"Position":451.0},{"StartTime":111455.0,"Position":366.458679},{"StartTime":111588.0,"Position":264.767944}]},{"StartTime":111704.0,"Objects":[{"StartTime":111704.0,"Position":314.0}]},{"StartTime":111820.0,"Objects":[{"StartTime":111820.0,"Position":314.0},{"StartTime":111935.0,"Position":407.065216}]},{"StartTime":112051.0,"Objects":[{"StartTime":112051.0,"Position":486.0},{"StartTime":112148.0,"Position":431.676819},{"StartTime":112281.0,"Position":450.23877}]},{"StartTime":112397.0,"Objects":[{"StartTime":112397.0,"Position":499.0}]},{"StartTime":112512.0,"Objects":[{"StartTime":112512.0,"Position":390.0}]},{"StartTime":112627.0,"Objects":[{"StartTime":112627.0,"Position":288.0}]},{"StartTime":112685.0,"Objects":[{"StartTime":112685.0,"Position":288.0}]},{"StartTime":112743.0,"Objects":[{"StartTime":112743.0,"Position":288.0},{"StartTime":112840.0,"Position":214.352554},{"StartTime":112973.0,"Position":101.516357}]},{"StartTime":113089.0,"Objects":[{"StartTime":113089.0,"Position":30.0}]},{"StartTime":113204.0,"Objects":[{"StartTime":113204.0,"Position":30.0},{"StartTime":113301.0,"Position":119.647446},{"StartTime":113434.0,"Position":216.483643}]},{"StartTime":113551.0,"Objects":[{"StartTime":113551.0,"Position":308.0}]},{"StartTime":113666.0,"Objects":[{"StartTime":113666.0,"Position":308.0},{"StartTime":113763.0,"Position":320.730225},{"StartTime":113896.0,"Position":257.027771}]},{"StartTime":114012.0,"Objects":[{"StartTime":114012.0,"Position":211.0}]},{"StartTime":114127.0,"Objects":[{"StartTime":114127.0,"Position":211.0},{"StartTime":114195.0,"Position":201.3149},{"StartTime":114300.0,"Position":219.4335}]},{"StartTime":114358.0,"Objects":[{"StartTime":114358.0,"Position":219.0},{"StartTime":114473.0,"Position":306.556854}]},{"StartTime":114589.0,"Objects":[{"StartTime":114589.0,"Position":166.0},{"StartTime":114646.0,"Position":121.082016},{"StartTime":114704.0,"Position":113.537971},{"StartTime":114761.0,"Position":116.181473},{"StartTime":114819.0,"Position":162.68277},{"StartTime":114876.0,"Position":192.15361},{"StartTime":114934.0,"Position":258.931335},{"StartTime":114992.0,"Position":290.682373},{"StartTime":115050.0,"Position":343.0563},{"StartTime":115147.0,"Position":397.662018},{"StartTime":115281.0,"Position":351.058228}]},{"StartTime":115512.0,"Objects":[{"StartTime":115512.0,"Position":292.0}]},{"StartTime":116435.0,"Objects":[{"StartTime":116435.0,"Position":346.0},{"StartTime":116492.0,"Position":384.917969},{"StartTime":116550.0,"Position":372.462},{"StartTime":116607.0,"Position":393.8185},{"StartTime":116665.0,"Position":349.31723},{"StartTime":116722.0,"Position":320.846375},{"StartTime":116780.0,"Position":245.0687},{"StartTime":116838.0,"Position":204.317627},{"StartTime":116896.0,"Position":168.9437},{"StartTime":116993.0,"Position":121.33799},{"StartTime":117127.0,"Position":160.941772}]},{"StartTime":117358.0,"Objects":[{"StartTime":117358.0,"Position":219.0}]},{"StartTime":117589.0,"Objects":[{"StartTime":117589.0,"Position":292.0}]},{"StartTime":117820.0,"Objects":[{"StartTime":117820.0,"Position":438.0}]},{"StartTime":118051.0,"Objects":[{"StartTime":118051.0,"Position":219.0},{"StartTime":118166.0,"Position":125.6332}]},{"StartTime":118281.0,"Objects":[{"StartTime":118281.0,"Position":10.0},{"StartTime":118396.0,"Position":0.0}]},{"StartTime":118512.0,"Objects":[{"StartTime":118512.0,"Position":154.0},{"StartTime":118627.0,"Position":164.4093}]},{"StartTime":118743.0,"Objects":[{"StartTime":118743.0,"Position":3.0}]},{"StartTime":118858.0,"Objects":[{"StartTime":118858.0,"Position":219.0},{"StartTime":118955.0,"Position":244.709213},{"StartTime":119088.0,"Position":239.6507}]},{"StartTime":119204.0,"Objects":[{"StartTime":119204.0,"Position":114.0}]},{"StartTime":119262.0,"Objects":[{"StartTime":119262.0,"Position":145.0}]},{"StartTime":119319.0,"Objects":[{"StartTime":119319.0,"Position":151.0}]},{"StartTime":119377.0,"Objects":[{"StartTime":119377.0,"Position":134.0}]},{"StartTime":119434.0,"Objects":[{"StartTime":119434.0,"Position":102.0}]},{"StartTime":119493.0,"Objects":[{"StartTime":119493.0,"Position":84.0}]},{"StartTime":119551.0,"Objects":[{"StartTime":119551.0,"Position":80.0}]},{"StartTime":119608.0,"Objects":[{"StartTime":119608.0,"Position":101.0}]},{"StartTime":119666.0,"Objects":[{"StartTime":119666.0,"Position":135.0}]},{"StartTime":119723.0,"Objects":[{"StartTime":119723.0,"Position":190.0}]},{"StartTime":119781.0,"Objects":[{"StartTime":119781.0,"Position":230.0}]},{"StartTime":119839.0,"Objects":[{"StartTime":119839.0,"Position":280.0}]},{"StartTime":119897.0,"Objects":[{"StartTime":119897.0,"Position":336.0}]},{"StartTime":119954.0,"Objects":[{"StartTime":119954.0,"Position":377.0}]},{"StartTime":120012.0,"Objects":[{"StartTime":120012.0,"Position":425.0}]},{"StartTime":120070.0,"Objects":[{"StartTime":120070.0,"Position":475.0}]},{"StartTime":120127.0,"Objects":[{"StartTime":120127.0,"Position":495.0},{"StartTime":120224.0,"Position":494.9837},{"StartTime":120357.0,"Position":512.0}]},{"StartTime":120474.0,"Objects":[{"StartTime":120474.0,"Position":351.0},{"StartTime":120571.0,"Position":354.741882},{"StartTime":120704.0,"Position":333.0354}]},{"StartTime":120820.0,"Objects":[{"StartTime":120820.0,"Position":415.0},{"StartTime":120935.0,"Position":503.085052}]},{"StartTime":121051.0,"Objects":[{"StartTime":121051.0,"Position":407.0}]},{"StartTime":121166.0,"Objects":[{"StartTime":121166.0,"Position":332.0},{"StartTime":121263.0,"Position":262.324677},{"StartTime":121396.0,"Position":145.450241}]},{"StartTime":121512.0,"Objects":[{"StartTime":121512.0,"Position":213.0},{"StartTime":121627.0,"Position":197.601456}]},{"StartTime":121743.0,"Objects":[{"StartTime":121743.0,"Position":47.0},{"StartTime":121858.0,"Position":62.3985329}]},{"StartTime":121974.0,"Objects":[{"StartTime":121974.0,"Position":213.0},{"StartTime":122071.0,"Position":132.2984},{"StartTime":122204.0,"Position":26.3879547}]},{"StartTime":122320.0,"Objects":[{"StartTime":122320.0,"Position":146.0},{"StartTime":122417.0,"Position":215.6733},{"StartTime":122550.0,"Position":332.544922}]},{"StartTime":122666.0,"Objects":[{"StartTime":122666.0,"Position":226.0},{"StartTime":122781.0,"Position":213.894272}]},{"StartTime":122897.0,"Objects":[{"StartTime":122897.0,"Position":83.0}]},{"StartTime":123012.0,"Objects":[{"StartTime":123012.0,"Position":31.0},{"StartTime":123109.0,"Position":37.946228},{"StartTime":123242.0,"Position":14.0712194}]},{"StartTime":123358.0,"Objects":[{"StartTime":123358.0,"Position":214.0},{"StartTime":123473.0,"Position":128.038635}]},{"StartTime":123589.0,"Objects":[{"StartTime":123589.0,"Position":303.0},{"StartTime":123704.0,"Position":388.1753}]},{"StartTime":123820.0,"Objects":[{"StartTime":123820.0,"Position":498.0},{"StartTime":123917.0,"Position":432.288361},{"StartTime":124050.0,"Position":311.364166}]},{"StartTime":124166.0,"Objects":[{"StartTime":124166.0,"Position":214.0},{"StartTime":124263.0,"Position":283.711639},{"StartTime":124396.0,"Position":400.635834}]},{"StartTime":124512.0,"Objects":[{"StartTime":124512.0,"Position":278.0},{"StartTime":124627.0,"Position":241.45549}]},{"StartTime":124743.0,"Objects":[{"StartTime":124743.0,"Position":408.0}]},{"StartTime":124858.0,"Objects":[{"StartTime":124858.0,"Position":327.0},{"StartTime":124955.0,"Position":333.276733},{"StartTime":125088.0,"Position":311.058258}]},{"StartTime":125204.0,"Objects":[{"StartTime":125204.0,"Position":214.0},{"StartTime":125319.0,"Position":125.519653}]},{"StartTime":125435.0,"Objects":[{"StartTime":125435.0,"Position":60.0},{"StartTime":125550.0,"Position":148.480347}]},{"StartTime":125666.0,"Objects":[{"StartTime":125666.0,"Position":110.0}]},{"StartTime":125781.0,"Objects":[{"StartTime":125781.0,"Position":10.0}]},{"StartTime":125897.0,"Objects":[{"StartTime":125897.0,"Position":184.0}]},{"StartTime":126012.0,"Objects":[{"StartTime":126012.0,"Position":0.0}]},{"StartTime":126127.0,"Objects":[{"StartTime":126127.0,"Position":125.0},{"StartTime":126224.0,"Position":184.826523},{"StartTime":126357.0,"Position":306.275452}]},{"StartTime":126474.0,"Objects":[{"StartTime":126474.0,"Position":398.0}]},{"StartTime":126589.0,"Objects":[{"StartTime":126589.0,"Position":398.0},{"StartTime":126657.0,"Position":368.49},{"StartTime":126762.0,"Position":351.8152}]},{"StartTime":126820.0,"Objects":[{"StartTime":126820.0,"Position":413.0},{"StartTime":126917.0,"Position":405.972565},{"StartTime":127050.0,"Position":412.996582}]},{"StartTime":127166.0,"Objects":[{"StartTime":127166.0,"Position":367.0}]},{"StartTime":127281.0,"Objects":[{"StartTime":127281.0,"Position":275.0}]},{"StartTime":127397.0,"Objects":[{"StartTime":127397.0,"Position":195.0}]},{"StartTime":127454.0,"Objects":[{"StartTime":127454.0,"Position":195.0}]},{"StartTime":127512.0,"Objects":[{"StartTime":127512.0,"Position":195.0},{"StartTime":127609.0,"Position":188.8304},{"StartTime":127742.0,"Position":261.4693}]},{"StartTime":127858.0,"Objects":[{"StartTime":127858.0,"Position":330.0},{"StartTime":127955.0,"Position":325.868042},{"StartTime":128088.0,"Position":261.3013}]},{"StartTime":128204.0,"Objects":[{"StartTime":128204.0,"Position":157.0},{"StartTime":128319.0,"Position":250.31012}]},{"StartTime":128435.0,"Objects":[{"StartTime":128435.0,"Position":456.0}]},{"StartTime":128551.0,"Objects":[{"StartTime":128551.0,"Position":394.0},{"StartTime":128648.0,"Position":320.26825},{"StartTime":128781.0,"Position":207.316452}]},{"StartTime":128897.0,"Objects":[{"StartTime":128897.0,"Position":298.0},{"StartTime":129012.0,"Position":387.654083}]},{"StartTime":129127.0,"Objects":[{"StartTime":129127.0,"Position":303.0},{"StartTime":129242.0,"Position":213.581131}]},{"StartTime":129358.0,"Objects":[{"StartTime":129358.0,"Position":20.0},{"StartTime":129455.0,"Position":82.79237},{"StartTime":129588.0,"Position":206.827255}]},{"StartTime":129704.0,"Objects":[{"StartTime":129704.0,"Position":303.0},{"StartTime":129801.0,"Position":209.207626},{"StartTime":129934.0,"Position":116.172745}]},{"StartTime":130051.0,"Objects":[{"StartTime":130051.0,"Position":22.0},{"StartTime":130166.0,"Position":108.0569}]},{"StartTime":130281.0,"Objects":[{"StartTime":130281.0,"Position":206.0}]},{"StartTime":130397.0,"Objects":[{"StartTime":130397.0,"Position":128.0},{"StartTime":130494.0,"Position":98.9740753},{"StartTime":130627.0,"Position":116.280022}]},{"StartTime":130743.0,"Objects":[{"StartTime":130743.0,"Position":206.0},{"StartTime":130858.0,"Position":222.803619}]},{"StartTime":130974.0,"Objects":[{"StartTime":130974.0,"Position":320.0},{"StartTime":131089.0,"Position":302.505}]},{"StartTime":131204.0,"Objects":[{"StartTime":131204.0,"Position":236.0},{"StartTime":131301.0,"Position":203.407822},{"StartTime":131434.0,"Position":222.704208}]},{"StartTime":131551.0,"Objects":[{"StartTime":131551.0,"Position":368.0},{"StartTime":131648.0,"Position":414.792053},{"StartTime":131781.0,"Position":379.811676}]},{"StartTime":131897.0,"Objects":[{"StartTime":131897.0,"Position":285.0},{"StartTime":132012.0,"Position":302.169983}]},{"StartTime":132127.0,"Objects":[{"StartTime":132127.0,"Position":256.0}]},{"StartTime":132243.0,"Objects":[{"StartTime":132243.0,"Position":167.0},{"StartTime":132340.0,"Position":217.343735},{"StartTime":132473.0,"Position":320.004059}]},{"StartTime":132589.0,"Objects":[{"StartTime":132589.0,"Position":104.0},{"StartTime":132704.0,"Position":10.6395264}]},{"StartTime":132820.0,"Objects":[{"StartTime":132820.0,"Position":155.0},{"StartTime":132935.0,"Position":248.357635}]},{"StartTime":133051.0,"Objects":[{"StartTime":133051.0,"Position":376.0}]},{"StartTime":133108.0,"Objects":[{"StartTime":133108.0,"Position":363.0}]},{"StartTime":133166.0,"Objects":[{"StartTime":133166.0,"Position":356.0}]},{"StartTime":133224.0,"Objects":[{"StartTime":133224.0,"Position":355.0}]},{"StartTime":133281.0,"Objects":[{"StartTime":133281.0,"Position":360.0}]},{"StartTime":133339.0,"Objects":[{"StartTime":133339.0,"Position":372.0}]},{"StartTime":133397.0,"Objects":[{"StartTime":133397.0,"Position":388.0}]},{"StartTime":133454.0,"Objects":[{"StartTime":133454.0,"Position":408.0}]},{"StartTime":133512.0,"Objects":[{"StartTime":133512.0,"Position":431.0}]},{"StartTime":133743.0,"Objects":[{"StartTime":133743.0,"Position":433.0}]},{"StartTime":133858.0,"Objects":[{"StartTime":133858.0,"Position":433.0}]},{"StartTime":133973.0,"Objects":[{"StartTime":133973.0,"Position":500.0}]},{"StartTime":134031.0,"Objects":[{"StartTime":134031.0,"Position":495.0}]},{"StartTime":134088.0,"Objects":[{"StartTime":134088.0,"Position":490.0}]},{"StartTime":134146.0,"Objects":[{"StartTime":134146.0,"Position":485.0}]},{"StartTime":134204.0,"Objects":[{"StartTime":134204.0,"Position":480.0},{"StartTime":134261.0,"Position":451.870575},{"StartTime":134319.0,"Position":390.643158},{"StartTime":134376.0,"Position":355.5535},{"StartTime":134434.0,"Position":307.729279},{"StartTime":134550.0,"Position":215.65274}]},{"StartTime":134666.0,"Objects":[{"StartTime":134666.0,"Position":213.0},{"StartTime":134781.0,"Position":234.885178}]},{"StartTime":134897.0,"Objects":[{"StartTime":134897.0,"Position":109.0},{"StartTime":135012.0,"Position":15.55278}]},{"StartTime":135127.0,"Objects":[{"StartTime":135127.0,"Position":236.0},{"StartTime":135242.0,"Position":329.4514}]},{"StartTime":135358.0,"Objects":[{"StartTime":135358.0,"Position":208.0},{"StartTime":135455.0,"Position":134.189972},{"StartTime":135588.0,"Position":21.13086}]},{"StartTime":135704.0,"Objects":[{"StartTime":135704.0,"Position":297.0},{"StartTime":135819.0,"Position":203.584534}]},{"StartTime":135935.0,"Objects":[{"StartTime":135935.0,"Position":147.0},{"StartTime":136050.0,"Position":240.451385}]},{"StartTime":136166.0,"Objects":[{"StartTime":136166.0,"Position":397.0},{"StartTime":136281.0,"Position":346.996429}]},{"StartTime":136397.0,"Objects":[{"StartTime":136397.0,"Position":297.0},{"StartTime":136512.0,"Position":253.206772}]},{"StartTime":136627.0,"Objects":[{"StartTime":136627.0,"Position":397.0}]},{"StartTime":136743.0,"Objects":[{"StartTime":136743.0,"Position":502.0},{"StartTime":136858.0,"Position":408.5486}]},{"StartTime":136974.0,"Objects":[{"StartTime":136974.0,"Position":297.0},{"StartTime":137089.0,"Position":390.4514}]},{"StartTime":137204.0,"Objects":[{"StartTime":137204.0,"Position":296.0},{"StartTime":137319.0,"Position":202.548615}]},{"StartTime":137435.0,"Objects":[{"StartTime":137435.0,"Position":89.0},{"StartTime":137550.0,"Position":182.451385}]},{"StartTime":137666.0,"Objects":[{"StartTime":137666.0,"Position":220.0},{"StartTime":137763.0,"Position":147.185944},{"StartTime":137896.0,"Position":33.1213074}]},{"StartTime":138012.0,"Objects":[{"StartTime":138012.0,"Position":202.0},{"StartTime":138109.0,"Position":280.82605},{"StartTime":138242.0,"Position":388.9071}]},{"StartTime":138358.0,"Objects":[{"StartTime":138358.0,"Position":338.0},{"StartTime":138473.0,"Position":244.584534}]},{"StartTime":138589.0,"Objects":[{"StartTime":138589.0,"Position":431.0},{"StartTime":138686.0,"Position":432.689056},{"StartTime":138819.0,"Position":470.369141}]},{"StartTime":138935.0,"Objects":[{"StartTime":138935.0,"Position":507.0}]},{"StartTime":139051.0,"Objects":[{"StartTime":139051.0,"Position":507.0},{"StartTime":139148.0,"Position":411.7753},{"StartTime":139281.0,"Position":325.330963}]},{"StartTime":139397.0,"Objects":[{"StartTime":139397.0,"Position":177.0}]},{"StartTime":139512.0,"Objects":[{"StartTime":139512.0,"Position":177.0},{"StartTime":139609.0,"Position":273.2247},{"StartTime":139742.0,"Position":358.669037}]},{"StartTime":139858.0,"Objects":[{"StartTime":139858.0,"Position":424.0}]},{"StartTime":139974.0,"Objects":[{"StartTime":139974.0,"Position":339.0},{"StartTime":140089.0,"Position":328.776672}]},{"StartTime":140204.0,"Objects":[{"StartTime":140204.0,"Position":177.0},{"StartTime":140319.0,"Position":167.00386}]},{"StartTime":140435.0,"Objects":[{"StartTime":140435.0,"Position":248.0},{"StartTime":140550.0,"Position":257.103271}]},{"StartTime":140666.0,"Objects":[{"StartTime":140666.0,"Position":96.0},{"StartTime":140781.0,"Position":86.00386}]},{"StartTime":140897.0,"Objects":[{"StartTime":140897.0,"Position":167.0},{"StartTime":141012.0,"Position":176.99614}]},{"StartTime":141127.0,"Objects":[{"StartTime":141127.0,"Position":355.0},{"StartTime":141242.0,"Position":345.993683}]},{"StartTime":141358.0,"Objects":[{"StartTime":141358.0,"Position":263.0},{"StartTime":141455.0,"Position":336.762451},{"StartTime":141588.0,"Position":435.289673}]},{"StartTime":141704.0,"Objects":[{"StartTime":141704.0,"Position":177.0}]},{"StartTime":141820.0,"Objects":[{"StartTime":141820.0,"Position":177.0},{"StartTime":141917.0,"Position":122.237534},{"StartTime":142050.0,"Position":4.71032143}]},{"StartTime":142166.0,"Objects":[{"StartTime":142166.0,"Position":0.0}]},{"StartTime":142281.0,"Objects":[{"StartTime":142281.0,"Position":176.0},{"StartTime":142396.0,"Position":166.993683}]},{"StartTime":142512.0,"Objects":[{"StartTime":142512.0,"Position":345.0},{"StartTime":142627.0,"Position":355.103546}]},{"StartTime":142743.0,"Objects":[{"StartTime":142743.0,"Position":257.0},{"StartTime":142858.0,"Position":247.993683}]},{"StartTime":142974.0,"Objects":[{"StartTime":142974.0,"Position":426.0},{"StartTime":143089.0,"Position":435.006317}]},{"StartTime":143204.0,"Objects":[{"StartTime":143204.0,"Position":203.0},{"StartTime":143272.0,"Position":241.465088},{"StartTime":143377.0,"Position":320.980042}]},{"StartTime":143435.0,"Objects":[{"StartTime":143435.0,"Position":435.0},{"StartTime":143503.0,"Position":392.8229},{"StartTime":143608.0,"Position":325.7411}]},{"StartTime":143666.0,"Objects":[{"StartTime":143666.0,"Position":257.0},{"StartTime":143734.0,"Position":286.1751},{"StartTime":143839.0,"Position":352.8504}]},{"StartTime":143897.0,"Objects":[{"StartTime":143897.0,"Position":419.0},{"StartTime":143965.0,"Position":379.9646},{"StartTime":144070.0,"Position":338.0948}]},{"StartTime":144127.0,"Objects":[{"StartTime":144127.0,"Position":257.0},{"StartTime":144224.0,"Position":256.556366},{"StartTime":144357.0,"Position":274.917175}]},{"StartTime":144474.0,"Objects":[{"StartTime":144474.0,"Position":435.0}]},{"StartTime":144589.0,"Objects":[{"StartTime":144589.0,"Position":435.0},{"StartTime":144686.0,"Position":427.556366},{"StartTime":144819.0,"Position":452.917175}]},{"StartTime":144935.0,"Objects":[{"StartTime":144935.0,"Position":149.0}]},{"StartTime":145051.0,"Objects":[{"StartTime":145051.0,"Position":149.0},{"StartTime":145166.0,"Position":157.864655}]},{"StartTime":145281.0,"Objects":[{"StartTime":145281.0,"Position":353.0},{"StartTime":145396.0,"Position":343.165436}]},{"StartTime":145512.0,"Objects":[{"StartTime":145512.0,"Position":169.0},{"StartTime":145627.0,"Position":178.381}]},{"StartTime":145742.0,"Objects":[{"StartTime":145742.0,"Position":332.0},{"StartTime":145857.0,"Position":322.625}]},{"StartTime":145974.0,"Objects":[{"StartTime":145974.0,"Position":95.0},{"StartTime":146089.0,"Position":103.138893}]},{"StartTime":146204.0,"Objects":[{"StartTime":146204.0,"Position":247.0},{"StartTime":146319.0,"Position":237.00386}]},{"StartTime":146435.0,"Objects":[{"StartTime":146435.0,"Position":166.0},{"StartTime":146550.0,"Position":175.99614}]},{"StartTime":146666.0,"Objects":[{"StartTime":146666.0,"Position":318.0},{"StartTime":146781.0,"Position":308.003845}]},{"StartTime":146897.0,"Objects":[{"StartTime":146897.0,"Position":475.0},{"StartTime":147012.0,"Position":465.9648}]},{"StartTime":147127.0,"Objects":[{"StartTime":147127.0,"Position":322.0},{"StartTime":147242.0,"Position":331.891}]},{"StartTime":147358.0,"Objects":[{"StartTime":147358.0,"Position":403.0},{"StartTime":147473.0,"Position":393.993683}]},{"StartTime":147589.0,"Objects":[{"StartTime":147589.0,"Position":252.0},{"StartTime":147704.0,"Position":261.006317}]},{"StartTime":147820.0,"Objects":[{"StartTime":147820.0,"Position":38.0},{"StartTime":147935.0,"Position":131.053864}]},{"StartTime":148050.0,"Objects":[{"StartTime":148050.0,"Position":93.0},{"StartTime":148165.0,"Position":0.0}]},{"StartTime":148281.0,"Objects":[{"StartTime":148281.0,"Position":247.0}]},{"StartTime":148397.0,"Objects":[{"StartTime":148397.0,"Position":186.0}]},{"StartTime":148512.0,"Objects":[{"StartTime":148512.0,"Position":365.0}]},{"StartTime":148627.0,"Objects":[{"StartTime":148627.0,"Position":189.0}]},{"StartTime":148743.0,"Objects":[{"StartTime":148743.0,"Position":237.0}]},{"StartTime":148858.0,"Objects":[{"StartTime":148858.0,"Position":95.0}]},{"StartTime":148916.0,"Objects":[{"StartTime":148916.0,"Position":95.0}]},{"StartTime":148974.0,"Objects":[{"StartTime":148974.0,"Position":95.0}]},{"StartTime":149089.0,"Objects":[{"StartTime":149089.0,"Position":276.0}]},{"StartTime":149204.0,"Objects":[{"StartTime":149204.0,"Position":125.0}]},{"StartTime":149320.0,"Objects":[{"StartTime":149320.0,"Position":189.0}]},{"StartTime":149435.0,"Objects":[{"StartTime":149435.0,"Position":361.0}]},{"StartTime":149551.0,"Objects":[{"StartTime":149551.0,"Position":425.0}]},{"StartTime":149666.0,"Objects":[{"StartTime":149666.0,"Position":330.0},{"StartTime":149723.0,"Position":331.352},{"StartTime":149781.0,"Position":311.357727},{"StartTime":149838.0,"Position":279.9202},{"StartTime":149896.0,"Position":255.683853},{"StartTime":149953.0,"Position":217.7223},{"StartTime":150011.0,"Position":200.628571},{"StartTime":150069.0,"Position":203.167557},{"StartTime":150127.0,"Position":163.74411},{"StartTime":150224.0,"Position":117.720741},{"StartTime":150358.0,"Position":78.3954544}]},{"StartTime":150589.0,"Objects":[{"StartTime":150589.0,"Position":237.0},{"StartTime":150646.0,"Position":260.648},{"StartTime":150704.0,"Position":255.642273},{"StartTime":150761.0,"Position":287.079773},{"StartTime":150819.0,"Position":311.316132},{"StartTime":150876.0,"Position":340.2777},{"StartTime":150934.0,"Position":336.371429},{"StartTime":150992.0,"Position":361.832428},{"StartTime":151050.0,"Position":403.2559},{"StartTime":151147.0,"Position":436.279266},{"StartTime":151281.0,"Position":488.604553}]},{"StartTime":151512.0,"Objects":[{"StartTime":151512.0,"Position":401.0},{"StartTime":151569.0,"Position":377.03656},{"StartTime":151627.0,"Position":340.670227},{"StartTime":151684.0,"Position":329.7068},{"StartTime":151742.0,"Position":308.340454},{"StartTime":151799.0,"Position":277.376984},{"StartTime":151857.0,"Position":281.010681},{"StartTime":151915.0,"Position":235.644348},{"StartTime":151973.0,"Position":215.27803},{"StartTime":152070.0,"Position":161.19986},{"StartTime":152204.0,"Position":122.215607}]},{"StartTime":152320.0,"Objects":[{"StartTime":152320.0,"Position":44.0}]},{"StartTime":152377.0,"Objects":[{"StartTime":152377.0,"Position":44.0}]},{"StartTime":152435.0,"Objects":[{"StartTime":152435.0,"Position":44.0}]},{"StartTime":152551.0,"Objects":[{"StartTime":152551.0,"Position":44.0}]},{"StartTime":152666.0,"Objects":[{"StartTime":152666.0,"Position":151.0}]},{"StartTime":152781.0,"Objects":[{"StartTime":152781.0,"Position":216.0}]},{"StartTime":152897.0,"Objects":[{"StartTime":152897.0,"Position":281.0}]},{"StartTime":153012.0,"Objects":[{"StartTime":153012.0,"Position":388.0}]},{"StartTime":153128.0,"Objects":[{"StartTime":153128.0,"Position":388.0}]},{"StartTime":153243.0,"Objects":[{"StartTime":153243.0,"Position":281.0}]},{"StartTime":153358.0,"Objects":[{"StartTime":153358.0,"Position":216.0},{"StartTime":153415.0,"Position":226.0244},{"StartTime":153473.0,"Position":266.452759},{"StartTime":153530.0,"Position":277.477142},{"StartTime":153588.0,"Position":308.9055},{"StartTime":153645.0,"Position":320.9299},{"StartTime":153703.0,"Position":352.358246},{"StartTime":153761.0,"Position":395.78656},{"StartTime":153819.0,"Position":402.2149},{"StartTime":153916.0,"Position":425.3968},{"StartTime":154050.0,"Position":495.524353}]},{"StartTime":154281.0,"Objects":[{"StartTime":154281.0,"Position":296.0},{"StartTime":154338.0,"Position":291.9756},{"StartTime":154396.0,"Position":244.547256},{"StartTime":154453.0,"Position":217.522858},{"StartTime":154511.0,"Position":203.094513},{"StartTime":154568.0,"Position":171.0701},{"StartTime":154626.0,"Position":142.641754},{"StartTime":154684.0,"Position":151.213425},{"StartTime":154742.0,"Position":109.78508},{"StartTime":154839.0,"Position":81.6031952},{"StartTime":154973.0,"Position":16.475647}]},{"StartTime":155204.0,"Objects":[{"StartTime":155204.0,"Position":148.0},{"StartTime":155261.0,"Position":167.0272},{"StartTime":155319.0,"Position":197.4584},{"StartTime":155376.0,"Position":235.485626},{"StartTime":155434.0,"Position":240.916824},{"StartTime":155491.0,"Position":280.944031},{"StartTime":155549.0,"Position":292.375244},{"StartTime":155607.0,"Position":324.806427},{"StartTime":155665.0,"Position":334.2376},{"StartTime":155762.0,"Position":358.424316},{"StartTime":155896.0,"Position":427.558441}]},{"StartTime":156127.0,"Objects":[{"StartTime":156127.0,"Position":492.0}]},{"StartTime":156185.0,"Objects":[{"StartTime":156185.0,"Position":492.0}]},{"StartTime":156243.0,"Objects":[{"StartTime":156243.0,"Position":492.0}]},{"StartTime":156358.0,"Objects":[{"StartTime":156358.0,"Position":320.0}]},{"StartTime":156474.0,"Objects":[{"StartTime":156474.0,"Position":427.0}]},{"StartTime":156531.0,"Objects":[{"StartTime":156531.0,"Position":427.0}]},{"StartTime":156589.0,"Objects":[{"StartTime":156589.0,"Position":427.0}]},{"StartTime":156704.0,"Objects":[{"StartTime":156704.0,"Position":427.0}]},{"StartTime":156820.0,"Objects":[{"StartTime":156820.0,"Position":320.0}]},{"StartTime":156935.0,"Objects":[{"StartTime":156935.0,"Position":492.0}]},{"StartTime":157051.0,"Objects":[{"StartTime":157051.0,"Position":320.0},{"StartTime":157108.0,"Position":293.075256},{"StartTime":157166.0,"Position":291.5834},{"StartTime":157223.0,"Position":265.708435},{"StartTime":157281.0,"Position":228.07811},{"StartTime":157338.0,"Position":198.635651},{"StartTime":157396.0,"Position":200.338867},{"StartTime":157454.0,"Position":155.91835},{"StartTime":157512.0,"Position":141.778442},{"StartTime":157609.0,"Position":120.033043},{"StartTime":157743.0,"Position":49.3783264}]},{"StartTime":157974.0,"Objects":[{"StartTime":157974.0,"Position":0.0},{"StartTime":158031.0,"Position":0.0},{"StartTime":158089.0,"Position":41.02053},{"StartTime":158146.0,"Position":65.73743},{"StartTime":158204.0,"Position":71.05002},{"StartTime":158261.0,"Position":96.01849},{"StartTime":158319.0,"Position":109.1918},{"StartTime":158377.0,"Position":127.905212},{"StartTime":158435.0,"Position":157.97081},{"StartTime":158532.0,"Position":185.086624},{"StartTime":158666.0,"Position":189.926224}]},{"StartTime":158897.0,"Objects":[{"StartTime":158897.0,"Position":281.0},{"StartTime":158954.0,"Position":299.551483},{"StartTime":159012.0,"Position":301.147766},{"StartTime":159069.0,"Position":286.699249},{"StartTime":159127.0,"Position":291.2955},{"StartTime":159184.0,"Position":309.847},{"StartTime":159242.0,"Position":310.443268},{"StartTime":159300.0,"Position":314.03952},{"StartTime":159358.0,"Position":301.635773},{"StartTime":159455.0,"Position":304.977783},{"StartTime":159589.0,"Position":311.976044}]},{"StartTime":159704.0,"Objects":[{"StartTime":159704.0,"Position":419.0}]},{"StartTime":159762.0,"Objects":[{"StartTime":159762.0,"Position":419.0}]},{"StartTime":159820.0,"Objects":[{"StartTime":159820.0,"Position":419.0}]},{"StartTime":159935.0,"Objects":[{"StartTime":159935.0,"Position":484.0}]},{"StartTime":160051.0,"Objects":[{"StartTime":160051.0,"Position":419.0}]},{"StartTime":160166.0,"Objects":[{"StartTime":160166.0,"Position":312.0}]},{"StartTime":160281.0,"Objects":[{"StartTime":160281.0,"Position":312.0}]},{"StartTime":160397.0,"Objects":[{"StartTime":160397.0,"Position":205.0}]},{"StartTime":160513.0,"Objects":[{"StartTime":160513.0,"Position":140.0}]},{"StartTime":160627.0,"Objects":[{"StartTime":160627.0,"Position":206.0}]},{"StartTime":160743.0,"Objects":[{"StartTime":160743.0,"Position":312.0},{"StartTime":160858.0,"Position":404.320251}]},{"StartTime":160974.0,"Objects":[{"StartTime":160974.0,"Position":484.0},{"StartTime":161089.0,"Position":391.679749}]},{"StartTime":161204.0,"Objects":[{"StartTime":161204.0,"Position":206.0},{"StartTime":161319.0,"Position":298.320251}]},{"StartTime":161435.0,"Objects":[{"StartTime":161435.0,"Position":378.0},{"StartTime":161550.0,"Position":285.679749}]},{"StartTime":161666.0,"Objects":[{"StartTime":161666.0,"Position":44.0},{"StartTime":161781.0,"Position":32.89971}]},{"StartTime":161897.0,"Objects":[{"StartTime":161897.0,"Position":116.0},{"StartTime":162012.0,"Position":125.99614}]},{"StartTime":162127.0,"Objects":[{"StartTime":162127.0,"Position":216.0},{"StartTime":162242.0,"Position":204.899719}]},{"StartTime":162358.0,"Objects":[{"StartTime":162358.0,"Position":288.0},{"StartTime":162473.0,"Position":297.996155}]},{"StartTime":162589.0,"Objects":[{"StartTime":162589.0,"Position":388.0},{"StartTime":162704.0,"Position":471.636383}]},{"StartTime":162820.0,"Objects":[{"StartTime":162820.0,"Position":494.0},{"StartTime":162935.0,"Position":410.363617}]},{"StartTime":163051.0,"Objects":[{"StartTime":163051.0,"Position":496.0},{"StartTime":163166.0,"Position":472.107727}]},{"StartTime":163281.0,"Objects":[{"StartTime":163281.0,"Position":386.0},{"StartTime":163396.0,"Position":409.233765}]},{"StartTime":163512.0,"Objects":[{"StartTime":163512.0,"Position":511.0},{"StartTime":163627.0,"Position":418.102081}]},{"StartTime":163743.0,"Objects":[{"StartTime":163743.0,"Position":195.0},{"StartTime":163858.0,"Position":287.9525}]},{"StartTime":163974.0,"Objects":[{"StartTime":163974.0,"Position":410.0},{"StartTime":164089.0,"Position":317.102081}]},{"StartTime":164205.0,"Objects":[{"StartTime":164205.0,"Position":94.0},{"StartTime":164320.0,"Position":186.952515}]},{"StartTime":164435.0,"Objects":[{"StartTime":164435.0,"Position":440.0},{"StartTime":164550.0,"Position":400.919037}]},{"StartTime":164666.0,"Objects":[{"StartTime":164666.0,"Position":458.0},{"StartTime":164781.0,"Position":409.400452}]},{"StartTime":164897.0,"Objects":[{"StartTime":164897.0,"Position":255.0},{"StartTime":165012.0,"Position":341.989532}]},{"StartTime":165127.0,"Objects":[{"StartTime":165127.0,"Position":508.0}]},{"StartTime":165243.0,"Objects":[{"StartTime":165243.0,"Position":494.0}]},{"StartTime":165301.0,"Objects":[{"StartTime":165301.0,"Position":494.0}]},{"StartTime":165358.0,"Objects":[{"StartTime":165358.0,"Position":494.0},{"StartTime":165473.0,"Position":483.075348}]},{"StartTime":165589.0,"Objects":[{"StartTime":165589.0,"Position":341.0}]},{"StartTime":165704.0,"Objects":[{"StartTime":165704.0,"Position":341.0}]},{"StartTime":165820.0,"Objects":[{"StartTime":165820.0,"Position":306.0}]},{"StartTime":165877.0,"Objects":[{"StartTime":165877.0,"Position":271.0}]},{"StartTime":165935.0,"Objects":[{"StartTime":165935.0,"Position":225.0}]},{"StartTime":165993.0,"Objects":[{"StartTime":165993.0,"Position":188.0}]},{"StartTime":166050.0,"Objects":[{"StartTime":166050.0,"Position":176.0}]},{"StartTime":166108.0,"Objects":[{"StartTime":166108.0,"Position":164.0}]},{"StartTime":166166.0,"Objects":[{"StartTime":166166.0,"Position":127.0}]},{"StartTime":166224.0,"Objects":[{"StartTime":166224.0,"Position":81.0}]},{"StartTime":166281.0,"Objects":[{"StartTime":166281.0,"Position":46.0},{"StartTime":166378.0,"Position":13.5703487},{"StartTime":166511.0,"Position":112.726479}]},{"StartTime":166627.0,"Objects":[{"StartTime":166627.0,"Position":225.0}]},{"StartTime":166743.0,"Objects":[{"StartTime":166743.0,"Position":225.0},{"StartTime":166840.0,"Position":225.048615},{"StartTime":166973.0,"Position":253.568863}]},{"StartTime":167089.0,"Objects":[{"StartTime":167089.0,"Position":150.0}]},{"StartTime":167204.0,"Objects":[{"StartTime":167204.0,"Position":150.0},{"StartTime":167319.0,"Position":151.753357}]},{"StartTime":167435.0,"Objects":[{"StartTime":167435.0,"Position":235.0},{"StartTime":167503.0,"Position":308.8305},{"StartTime":167608.0,"Position":374.495239}]},{"StartTime":167666.0,"Objects":[{"StartTime":167666.0,"Position":426.0},{"StartTime":167781.0,"Position":332.9248}]},{"StartTime":167897.0,"Objects":[{"StartTime":167897.0,"Position":223.0},{"StartTime":168012.0,"Position":315.986267}]},{"StartTime":168127.0,"Objects":[{"StartTime":168127.0,"Position":476.0},{"StartTime":168224.0,"Position":390.140137},{"StartTime":168357.0,"Position":352.612549}]},{"StartTime":168474.0,"Objects":[{"StartTime":168474.0,"Position":425.0},{"StartTime":168571.0,"Position":461.0984},{"StartTime":168704.0,"Position":424.602539}]},{"StartTime":168820.0,"Objects":[{"StartTime":168820.0,"Position":280.0},{"StartTime":168935.0,"Position":315.84964}]},{"StartTime":169051.0,"Objects":[{"StartTime":169051.0,"Position":352.0},{"StartTime":169166.0,"Position":259.313049}]},{"StartTime":169281.0,"Objects":[{"StartTime":169281.0,"Position":122.0},{"StartTime":169396.0,"Position":214.599686}]},{"StartTime":169512.0,"Objects":[{"StartTime":169512.0,"Position":425.0},{"StartTime":169627.0,"Position":332.40033}]},{"StartTime":169743.0,"Objects":[{"StartTime":169743.0,"Position":200.0}]},{"StartTime":169800.0,"Objects":[{"StartTime":169800.0,"Position":203.0}]},{"StartTime":169858.0,"Objects":[{"StartTime":169858.0,"Position":206.0}]},{"StartTime":169916.0,"Objects":[{"StartTime":169916.0,"Position":211.0}]},{"StartTime":169974.0,"Objects":[{"StartTime":169974.0,"Position":215.0},{"StartTime":170071.0,"Position":180.225677},{"StartTime":170204.0,"Position":73.0661545}]},{"StartTime":170320.0,"Objects":[{"StartTime":170320.0,"Position":29.0}]},{"StartTime":170435.0,"Objects":[{"StartTime":170435.0,"Position":29.0},{"StartTime":170532.0,"Position":42.67274},{"StartTime":170665.0,"Position":54.3065}]},{"StartTime":170781.0,"Objects":[{"StartTime":170781.0,"Position":127.0}]},{"StartTime":170897.0,"Objects":[{"StartTime":170897.0,"Position":127.0},{"StartTime":171012.0,"Position":205.322327}]},{"StartTime":171127.0,"Objects":[{"StartTime":171127.0,"Position":389.0},{"StartTime":171195.0,"Position":323.909668},{"StartTime":171300.0,"Position":279.463837}]},{"StartTime":171358.0,"Objects":[{"StartTime":171358.0,"Position":264.0},{"StartTime":171473.0,"Position":275.884918}]},{"StartTime":171589.0,"Objects":[{"StartTime":171589.0,"Position":470.0},{"StartTime":171704.0,"Position":457.559143}]},{"StartTime":171820.0,"Objects":[{"StartTime":171820.0,"Position":508.0},{"StartTime":171917.0,"Position":426.554321},{"StartTime":172050.0,"Position":322.475342}]},{"StartTime":172166.0,"Objects":[{"StartTime":172166.0,"Position":214.0}]},{"StartTime":172281.0,"Objects":[{"StartTime":172281.0,"Position":214.0},{"StartTime":172378.0,"Position":300.4861},{"StartTime":172511.0,"Position":399.6029}]},{"StartTime":172628.0,"Objects":[{"StartTime":172628.0,"Position":223.0}]},{"StartTime":172743.0,"Objects":[{"StartTime":172743.0,"Position":223.0},{"StartTime":172811.0,"Position":156.108978},{"StartTime":172916.0,"Position":83.35077}]},{"StartTime":172974.0,"Objects":[{"StartTime":172974.0,"Position":59.0},{"StartTime":173089.0,"Position":152.155975}]},{"StartTime":173204.0,"Objects":[{"StartTime":173204.0,"Position":329.0},{"StartTime":173319.0,"Position":315.0967}]},{"StartTime":173435.0,"Objects":[{"StartTime":173435.0,"Position":264.0},{"StartTime":173550.0,"Position":277.903259}]},{"StartTime":173666.0,"Objects":[{"StartTime":173666.0,"Position":170.0},{"StartTime":173763.0,"Position":114.439369},{"StartTime":173896.0,"Position":4.07558155}]},{"StartTime":174012.0,"Objects":[{"StartTime":174012.0,"Position":203.0}]},{"StartTime":174127.0,"Objects":[{"StartTime":174127.0,"Position":203.0},{"StartTime":174224.0,"Position":269.13266},{"StartTime":174357.0,"Position":368.4376}]},{"StartTime":174474.0,"Objects":[{"StartTime":174474.0,"Position":484.0}]},{"StartTime":174589.0,"Objects":[{"StartTime":174589.0,"Position":484.0},{"StartTime":174686.0,"Position":490.562531},{"StartTime":174819.0,"Position":457.976868}]},{"StartTime":174935.0,"Objects":[{"StartTime":174935.0,"Position":361.0}]},{"StartTime":175051.0,"Objects":[{"StartTime":175051.0,"Position":361.0},{"StartTime":175166.0,"Position":348.052032}]},{"StartTime":175281.0,"Objects":[{"StartTime":175281.0,"Position":249.0},{"StartTime":175396.0,"Position":261.933167}]},{"StartTime":175512.0,"Objects":[{"StartTime":175512.0,"Position":398.0},{"StartTime":175609.0,"Position":357.004059},{"StartTime":175742.0,"Position":237.310669}]},{"StartTime":175858.0,"Objects":[{"StartTime":175858.0,"Position":164.0}]},{"StartTime":175974.0,"Objects":[{"StartTime":175974.0,"Position":164.0},{"StartTime":176071.0,"Position":112.3117},{"StartTime":176204.0,"Position":3.52966261}]},{"StartTime":176320.0,"Objects":[{"StartTime":176320.0,"Position":237.0}]},{"StartTime":176435.0,"Objects":[{"StartTime":176435.0,"Position":237.0},{"StartTime":176532.0,"Position":259.6251},{"StartTime":176665.0,"Position":267.121826}]},{"StartTime":176781.0,"Objects":[{"StartTime":176781.0,"Position":151.0}]},{"StartTime":176897.0,"Objects":[{"StartTime":176897.0,"Position":0.0},{"StartTime":177012.0,"Position":93.23626}]},{"StartTime":177127.0,"Objects":[{"StartTime":177127.0,"Position":164.0},{"StartTime":177242.0,"Position":70.66135}]},{"StartTime":177358.0,"Objects":[{"StartTime":177358.0,"Position":208.0}]},{"StartTime":177474.0,"Objects":[{"StartTime":177474.0,"Position":242.0}]},{"StartTime":177589.0,"Objects":[{"StartTime":177589.0,"Position":334.0}]},{"StartTime":177704.0,"Objects":[{"StartTime":177704.0,"Position":358.0}]},{"StartTime":177820.0,"Objects":[{"StartTime":177820.0,"Position":281.0}]},{"StartTime":177935.0,"Objects":[{"StartTime":177935.0,"Position":208.0}]},{"StartTime":178051.0,"Objects":[{"StartTime":178051.0,"Position":129.0}]},{"StartTime":178166.0,"Objects":[{"StartTime":178166.0,"Position":153.0}]},{"StartTime":178281.0,"Objects":[{"StartTime":178281.0,"Position":246.0},{"StartTime":178396.0,"Position":235.13266}]},{"StartTime":178512.0,"Objects":[{"StartTime":178512.0,"Position":142.0},{"StartTime":178627.0,"Position":153.100281}]},{"StartTime":178743.0,"Objects":[{"StartTime":178743.0,"Position":139.0},{"StartTime":178858.0,"Position":128.13266}]},{"StartTime":178974.0,"Objects":[{"StartTime":178974.0,"Position":35.0},{"StartTime":179089.0,"Position":44.9961433}]},{"StartTime":179204.0,"Objects":[{"StartTime":179204.0,"Position":139.0},{"StartTime":179319.0,"Position":224.03212}]},{"StartTime":179435.0,"Objects":[{"StartTime":179435.0,"Position":362.0},{"StartTime":179550.0,"Position":277.1364}]},{"StartTime":179666.0,"Objects":[{"StartTime":179666.0,"Position":392.0}]},{"StartTime":179781.0,"Objects":[{"StartTime":179781.0,"Position":464.0}]},{"StartTime":179839.0,"Objects":[{"StartTime":179839.0,"Position":464.0}]},{"StartTime":179897.0,"Objects":[{"StartTime":179897.0,"Position":464.0}]},{"StartTime":180012.0,"Objects":[{"StartTime":180012.0,"Position":378.0}]},{"StartTime":180127.0,"Objects":[{"StartTime":180127.0,"Position":450.0}]},{"StartTime":180243.0,"Objects":[{"StartTime":180243.0,"Position":362.0}]},{"StartTime":180301.0,"Objects":[{"StartTime":180301.0,"Position":362.0}]},{"StartTime":180358.0,"Objects":[{"StartTime":180358.0,"Position":362.0},{"StartTime":180473.0,"Position":269.439728}]},{"StartTime":180589.0,"Objects":[{"StartTime":180589.0,"Position":160.0}]},{"StartTime":180704.0,"Objects":[{"StartTime":180704.0,"Position":105.0}]},{"StartTime":180820.0,"Objects":[{"StartTime":180820.0,"Position":269.0}]},{"StartTime":180935.0,"Objects":[{"StartTime":180935.0,"Position":259.0}]},{"StartTime":181051.0,"Objects":[{"StartTime":181051.0,"Position":172.0},{"StartTime":181148.0,"Position":183.745956},{"StartTime":181281.0,"Position":200.939163}]},{"StartTime":181397.0,"Objects":[{"StartTime":181397.0,"Position":121.0}]},{"StartTime":181512.0,"Objects":[{"StartTime":181512.0,"Position":37.0},{"StartTime":181609.0,"Position":7.25404358},{"StartTime":181742.0,"Position":8.060843}]},{"StartTime":181858.0,"Objects":[{"StartTime":181858.0,"Position":58.0}]},{"StartTime":181974.0,"Objects":[{"StartTime":181974.0,"Position":58.0},{"StartTime":182089.0,"Position":150.126}]},{"StartTime":182204.0,"Objects":[{"StartTime":182204.0,"Position":381.0},{"StartTime":182272.0,"Position":332.8273},{"StartTime":182377.0,"Position":254.1083}]},{"StartTime":182435.0,"Objects":[{"StartTime":182435.0,"Position":214.0},{"StartTime":182550.0,"Position":222.465088}]},{"StartTime":182666.0,"Objects":[{"StartTime":182666.0,"Position":184.0}]},{"StartTime":182781.0,"Objects":[{"StartTime":182781.0,"Position":278.0},{"StartTime":182878.0,"Position":343.517975},{"StartTime":183011.0,"Position":460.104675}]},{"StartTime":183127.0,"Objects":[{"StartTime":183127.0,"Position":505.0},{"StartTime":183224.0,"Position":506.0097},{"StartTime":183357.0,"Position":474.6805}]},{"StartTime":183474.0,"Objects":[{"StartTime":183474.0,"Position":403.0},{"StartTime":183589.0,"Position":384.290771}]},{"StartTime":183704.0,"Objects":[{"StartTime":183704.0,"Position":331.0}]},{"StartTime":183820.0,"Objects":[{"StartTime":183820.0,"Position":287.0},{"StartTime":183917.0,"Position":239.7063},{"StartTime":184050.0,"Position":124.792366}]},{"StartTime":184166.0,"Objects":[{"StartTime":184166.0,"Position":90.0}]},{"StartTime":184281.0,"Objects":[{"StartTime":184281.0,"Position":29.0},{"StartTime":184396.0,"Position":36.2351723}]},{"StartTime":184512.0,"Objects":[{"StartTime":184512.0,"Position":183.0},{"StartTime":184627.0,"Position":175.764832}]},{"StartTime":184743.0,"Objects":[{"StartTime":184743.0,"Position":134.0},{"StartTime":184840.0,"Position":205.774551},{"StartTime":184973.0,"Position":308.5132}]},{"StartTime":185089.0,"Objects":[{"StartTime":185089.0,"Position":370.0}]},{"StartTime":185204.0,"Objects":[{"StartTime":185204.0,"Position":357.0},{"StartTime":185301.0,"Position":296.225433},{"StartTime":185434.0,"Position":182.486786}]},{"StartTime":185551.0,"Objects":[{"StartTime":185551.0,"Position":102.0}]},{"StartTime":185666.0,"Objects":[{"StartTime":185666.0,"Position":102.0},{"StartTime":185781.0,"Position":91.49733}]},{"StartTime":185897.0,"Objects":[{"StartTime":185897.0,"Position":103.0},{"StartTime":185965.0,"Position":54.970726},{"StartTime":186070.0,"Position":73.73589}]},{"StartTime":186127.0,"Objects":[{"StartTime":186127.0,"Position":101.0},{"StartTime":186242.0,"Position":194.129517}]},{"StartTime":186358.0,"Objects":[{"StartTime":186358.0,"Position":281.0}]},{"StartTime":186474.0,"Objects":[{"StartTime":186474.0,"Position":254.0},{"StartTime":186571.0,"Position":244.698975},{"StartTime":186704.0,"Position":233.4666}]},{"StartTime":186820.0,"Objects":[{"StartTime":186820.0,"Position":274.0},{"StartTime":186917.0,"Position":358.1199},{"StartTime":187050.0,"Position":433.080933}]},{"StartTime":187166.0,"Objects":[{"StartTime":187166.0,"Position":509.0}]},{"StartTime":187281.0,"Objects":[{"StartTime":187281.0,"Position":422.0},{"StartTime":187396.0,"Position":340.965149}]},{"StartTime":187512.0,"Objects":[{"StartTime":187512.0,"Position":268.0},{"StartTime":187609.0,"Position":213.825912},{"StartTime":187742.0,"Position":105.566551}]},{"StartTime":187858.0,"Objects":[{"StartTime":187858.0,"Position":25.0}]},{"StartTime":187974.0,"Objects":[{"StartTime":187974.0,"Position":36.0},{"StartTime":188089.0,"Position":42.7299232}]},{"StartTime":188204.0,"Objects":[{"StartTime":188204.0,"Position":95.0},{"StartTime":188319.0,"Position":88.27008}]},{"StartTime":188435.0,"Objects":[{"StartTime":188435.0,"Position":164.0},{"StartTime":188532.0,"Position":250.74646},{"StartTime":188665.0,"Position":347.91684}]},{"StartTime":188781.0,"Objects":[{"StartTime":188781.0,"Position":438.0}]},{"StartTime":188897.0,"Objects":[{"StartTime":188897.0,"Position":367.0},{"StartTime":188994.0,"Position":300.25354},{"StartTime":189127.0,"Position":183.083176}]},{"StartTime":189243.0,"Objects":[{"StartTime":189243.0,"Position":95.0}]},{"StartTime":189358.0,"Objects":[{"StartTime":189358.0,"Position":95.0},{"StartTime":189473.0,"Position":105.123306}]},{"StartTime":189589.0,"Objects":[{"StartTime":189589.0,"Position":54.0},{"StartTime":189686.0,"Position":143.350739},{"StartTime":189819.0,"Position":211.608444}]},{"StartTime":189935.0,"Objects":[{"StartTime":189935.0,"Position":285.0}]},{"StartTime":190051.0,"Objects":[{"StartTime":190051.0,"Position":370.0},{"StartTime":190166.0,"Position":456.4452}]},{"StartTime":190281.0,"Objects":[{"StartTime":190281.0,"Position":497.0},{"StartTime":190378.0,"Position":487.7584},{"StartTime":190511.0,"Position":468.630341}]},{"StartTime":190627.0,"Objects":[{"StartTime":190627.0,"Position":387.0}]},{"StartTime":190743.0,"Objects":[{"StartTime":190743.0,"Position":387.0},{"StartTime":190858.0,"Position":377.603363}]},{"StartTime":190974.0,"Objects":[{"StartTime":190974.0,"Position":294.0},{"StartTime":191089.0,"Position":303.396637}]},{"StartTime":191204.0,"Objects":[{"StartTime":191204.0,"Position":291.0},{"StartTime":191301.0,"Position":243.908234},{"StartTime":191434.0,"Position":133.226776}]},{"StartTime":191551.0,"Objects":[{"StartTime":191551.0,"Position":110.0}]},{"StartTime":191666.0,"Objects":[{"StartTime":191666.0,"Position":161.0},{"StartTime":191781.0,"Position":240.658936}]},{"StartTime":191897.0,"Objects":[{"StartTime":191897.0,"Position":133.0},{"StartTime":192012.0,"Position":45.915966}]},{"StartTime":192127.0,"Objects":[{"StartTime":192127.0,"Position":13.0},{"StartTime":192184.0,"Position":44.7075653},{"StartTime":192242.0,"Position":89.5079346},{"StartTime":192299.0,"Position":137.603119},{"StartTime":192357.0,"Position":166.4208},{"StartTime":192414.0,"Position":210.151184},{"StartTime":192472.0,"Position":238.302551},{"StartTime":192530.0,"Position":303.220978},{"StartTime":192588.0,"Position":328.981537},{"StartTime":192685.0,"Position":401.712677},{"StartTime":192819.0,"Position":492.059631}]},{"StartTime":193051.0,"Objects":[{"StartTime":193051.0,"Position":373.0}]},{"StartTime":193974.0,"Objects":[{"StartTime":193974.0,"Position":13.0},{"StartTime":194031.0,"Position":20.7075653},{"StartTime":194089.0,"Position":81.5079346},{"StartTime":194146.0,"Position":136.603119},{"StartTime":194204.0,"Position":166.4208},{"StartTime":194261.0,"Position":225.151184},{"StartTime":194319.0,"Position":245.302551},{"StartTime":194377.0,"Position":294.220978},{"StartTime":194435.0,"Position":328.981537},{"StartTime":194532.0,"Position":407.712677},{"StartTime":194666.0,"Position":492.059631}]},{"StartTime":194898.0,"Objects":[{"StartTime":194898.0,"Position":373.0}]},{"StartTime":195127.0,"Objects":[{"StartTime":195127.0,"Position":139.0}]},{"StartTime":195358.0,"Objects":[{"StartTime":195358.0,"Position":343.0}]},{"StartTime":195589.0,"Objects":[{"StartTime":195589.0,"Position":373.0},{"StartTime":195704.0,"Position":361.7968}]},{"StartTime":195820.0,"Objects":[{"StartTime":195820.0,"Position":232.0},{"StartTime":195935.0,"Position":251.556152}]},{"StartTime":196051.0,"Objects":[{"StartTime":196051.0,"Position":447.0},{"StartTime":196166.0,"Position":466.890839}]},{"StartTime":196281.0,"Objects":[{"StartTime":196281.0,"Position":327.0}]},{"StartTime":196397.0,"Objects":[{"StartTime":196397.0,"Position":512.0}]},{"StartTime":196454.0,"Objects":[{"StartTime":196454.0,"Position":496.0}]},{"StartTime":196512.0,"Objects":[{"StartTime":196512.0,"Position":483.0}]},{"StartTime":196570.0,"Objects":[{"StartTime":196570.0,"Position":472.0}]},{"StartTime":196627.0,"Objects":[{"StartTime":196627.0,"Position":463.0}]},{"StartTime":196685.0,"Objects":[{"StartTime":196685.0,"Position":456.0}]},{"StartTime":196743.0,"Objects":[{"StartTime":196743.0,"Position":452.0}]},{"StartTime":196801.0,"Objects":[{"StartTime":196801.0,"Position":426.0}]},{"StartTime":196858.0,"Objects":[{"StartTime":196858.0,"Position":390.0}]},{"StartTime":196916.0,"Objects":[{"StartTime":196916.0,"Position":347.0}]},{"StartTime":196974.0,"Objects":[{"StartTime":196974.0,"Position":303.0}]},{"StartTime":197031.0,"Objects":[{"StartTime":197031.0,"Position":269.0}]},{"StartTime":197089.0,"Objects":[{"StartTime":197089.0,"Position":240.0}]},{"StartTime":197147.0,"Objects":[{"StartTime":197147.0,"Position":199.0}]},{"StartTime":197204.0,"Objects":[{"StartTime":197204.0,"Position":151.0}]},{"StartTime":197262.0,"Objects":[{"StartTime":197262.0,"Position":112.0}]},{"StartTime":197320.0,"Objects":[{"StartTime":197320.0,"Position":104.0}]},{"StartTime":197377.0,"Objects":[{"StartTime":197377.0,"Position":127.0}]},{"StartTime":197435.0,"Objects":[{"StartTime":197435.0,"Position":172.0}]},{"StartTime":197493.0,"Objects":[{"StartTime":197493.0,"Position":226.0}]},{"StartTime":197551.0,"Objects":[{"StartTime":197551.0,"Position":267.0}]},{"StartTime":197608.0,"Objects":[{"StartTime":197608.0,"Position":319.0}]},{"StartTime":197666.0,"Objects":[{"StartTime":197666.0,"Position":364.0},{"StartTime":197763.0,"Position":374.592529},{"StartTime":197896.0,"Position":383.675659}]},{"StartTime":198012.0,"Objects":[{"StartTime":198012.0,"Position":293.0}]},{"StartTime":198127.0,"Objects":[{"StartTime":198127.0,"Position":464.0},{"StartTime":198224.0,"Position":432.4073},{"StartTime":198357.0,"Position":444.324158}]},{"StartTime":198473.0,"Objects":[{"StartTime":198473.0,"Position":364.0}]},{"StartTime":198589.0,"Objects":[{"StartTime":198589.0,"Position":249.0},{"StartTime":198704.0,"Position":157.693237}]},{"StartTime":198820.0,"Objects":[{"StartTime":198820.0,"Position":30.0}]},{"StartTime":199051.0,"Objects":[{"StartTime":199051.0,"Position":30.0},{"StartTime":199166.0,"Position":121.198547}]},{"StartTime":199281.0,"Objects":[{"StartTime":199281.0,"Position":199.0}]},{"StartTime":199396.0,"Objects":[{"StartTime":199396.0,"Position":113.0}]},{"StartTime":199512.0,"Objects":[{"StartTime":199512.0,"Position":355.0},{"StartTime":199609.0,"Position":315.0066},{"StartTime":199742.0,"Position":197.701172}]},{"StartTime":199858.0,"Objects":[{"StartTime":199858.0,"Position":113.0}]},{"StartTime":199974.0,"Objects":[{"StartTime":199974.0,"Position":180.0},{"StartTime":200089.0,"Position":192.352448}]},{"StartTime":200204.0,"Objects":[{"StartTime":200204.0,"Position":16.0},{"StartTime":200319.0,"Position":3.64754772}]},{"StartTime":200435.0,"Objects":[{"StartTime":200435.0,"Position":86.0}]},{"StartTime":200551.0,"Objects":[{"StartTime":200551.0,"Position":192.0}]},{"StartTime":200666.0,"Objects":[{"StartTime":200666.0,"Position":71.0},{"StartTime":200781.0,"Position":72.2961349}]},{"StartTime":200897.0,"Objects":[{"StartTime":200897.0,"Position":268.0},{"StartTime":201012.0,"Position":266.703857}]},{"StartTime":201127.0,"Objects":[{"StartTime":201127.0,"Position":86.0},{"StartTime":201242.0,"Position":178.4856}]},{"StartTime":201358.0,"Objects":[{"StartTime":201358.0,"Position":512.0},{"StartTime":201455.0,"Position":416.254333},{"StartTime":201588.0,"Position":351.186523}]},{"StartTime":201704.0,"Objects":[{"StartTime":201704.0,"Position":247.0}]},{"StartTime":201820.0,"Objects":[{"StartTime":201820.0,"Position":190.0},{"StartTime":201935.0,"Position":177.555588}]},{"StartTime":202051.0,"Objects":[{"StartTime":202051.0,"Position":357.0},{"StartTime":202166.0,"Position":374.613831}]},{"StartTime":202281.0,"Objects":[{"StartTime":202281.0,"Position":427.0}]},{"StartTime":202397.0,"Objects":[{"StartTime":202397.0,"Position":449.0}]},{"StartTime":202512.0,"Objects":[{"StartTime":202512.0,"Position":287.0},{"StartTime":202627.0,"Position":195.426254}]},{"StartTime":202743.0,"Objects":[{"StartTime":202743.0,"Position":10.0},{"StartTime":202840.0,"Position":94.68268},{"StartTime":202973.0,"Position":178.229935}]},{"StartTime":203089.0,"Objects":[{"StartTime":203089.0,"Position":249.0}]},{"StartTime":203204.0,"Objects":[{"StartTime":203204.0,"Position":173.0},{"StartTime":203319.0,"Position":161.9855}]},{"StartTime":203435.0,"Objects":[{"StartTime":203435.0,"Position":327.0},{"StartTime":203550.0,"Position":336.995483}]},{"StartTime":203666.0,"Objects":[{"StartTime":203666.0,"Position":78.0},{"StartTime":203763.0,"Position":142.472641},{"StartTime":203896.0,"Position":236.651749}]},{"StartTime":204012.0,"Objects":[{"StartTime":204012.0,"Position":297.0}]},{"StartTime":204127.0,"Objects":[{"StartTime":204127.0,"Position":379.0},{"StartTime":204242.0,"Position":389.872437}]},{"StartTime":204358.0,"Objects":[{"StartTime":204358.0,"Position":327.0}]},{"StartTime":204474.0,"Objects":[{"StartTime":204474.0,"Position":357.0}]},{"StartTime":204589.0,"Objects":[{"StartTime":204589.0,"Position":512.0},{"StartTime":204704.0,"Position":420.056519}]},{"StartTime":204820.0,"Objects":[{"StartTime":204820.0,"Position":268.0}]},{"StartTime":204935.0,"Objects":[{"StartTime":204935.0,"Position":385.0}]},{"StartTime":205051.0,"Objects":[{"StartTime":205051.0,"Position":357.0},{"StartTime":205148.0,"Position":275.762268},{"StartTime":205281.0,"Position":171.487839}]},{"StartTime":205397.0,"Objects":[{"StartTime":205397.0,"Position":1.0}]},{"StartTime":205512.0,"Objects":[{"StartTime":205512.0,"Position":78.0},{"StartTime":205627.0,"Position":79.69282}]},{"StartTime":205743.0,"Objects":[{"StartTime":205743.0,"Position":1.0},{"StartTime":205858.0,"Position":0.0}]},{"StartTime":205974.0,"Objects":[{"StartTime":205974.0,"Position":130.0},{"StartTime":206089.0,"Position":37.09983}]},{"StartTime":206204.0,"Objects":[{"StartTime":206204.0,"Position":183.0}]},{"StartTime":206320.0,"Objects":[{"StartTime":206320.0,"Position":234.0}]},{"StartTime":206435.0,"Objects":[{"StartTime":206435.0,"Position":286.0},{"StartTime":206532.0,"Position":370.615448},{"StartTime":206665.0,"Position":455.482452}]},{"StartTime":206781.0,"Objects":[{"StartTime":206781.0,"Position":425.0}]},{"StartTime":206897.0,"Objects":[{"StartTime":206897.0,"Position":322.0},{"StartTime":206994.0,"Position":242.488861},{"StartTime":207127.0,"Position":140.309723}]},{"StartTime":207358.0,"Objects":[{"StartTime":207358.0,"Position":140.0},{"StartTime":207473.0,"Position":153.4727}]},{"StartTime":207589.0,"Objects":[{"StartTime":207589.0,"Position":323.0},{"StartTime":207704.0,"Position":309.527283}]},{"StartTime":207820.0,"Objects":[{"StartTime":207820.0,"Position":62.0},{"StartTime":207917.0,"Position":121.713829},{"StartTime":208050.0,"Position":218.93959}]},{"StartTime":208166.0,"Objects":[{"StartTime":208166.0,"Position":243.0}]},{"StartTime":208281.0,"Objects":[{"StartTime":208281.0,"Position":309.0},{"StartTime":208396.0,"Position":401.9958}]},{"StartTime":208512.0,"Objects":[{"StartTime":208512.0,"Position":461.0},{"StartTime":208627.0,"Position":368.04953}]},{"StartTime":208743.0,"Objects":[{"StartTime":208743.0,"Position":481.0},{"StartTime":208800.0,"Position":512.0},{"StartTime":208858.0,"Position":484.034363},{"StartTime":208915.0,"Position":444.613159},{"StartTime":208973.0,"Position":415.435059},{"StartTime":209070.0,"Position":492.559479},{"StartTime":209204.0,"Position":481.0}]},{"StartTime":209320.0,"Objects":[{"StartTime":209320.0,"Position":323.0}]},{"StartTime":209435.0,"Objects":[{"StartTime":209435.0,"Position":309.0},{"StartTime":209550.0,"Position":294.111755}]},{"StartTime":209666.0,"Objects":[{"StartTime":209666.0,"Position":145.0},{"StartTime":209781.0,"Position":232.516}]},{"StartTime":209897.0,"Objects":[{"StartTime":209897.0,"Position":401.0},{"StartTime":210012.0,"Position":328.206665}]},{"StartTime":210127.0,"Objects":[{"StartTime":210127.0,"Position":206.0}]},{"StartTime":210243.0,"Objects":[{"StartTime":210243.0,"Position":263.0}]},{"StartTime":210358.0,"Objects":[{"StartTime":210358.0,"Position":380.0}]},{"StartTime":210589.0,"Objects":[{"StartTime":210589.0,"Position":380.0},{"StartTime":210704.0,"Position":288.275177}]},{"StartTime":210820.0,"Objects":[{"StartTime":210820.0,"Position":197.0}]},{"StartTime":210935.0,"Objects":[{"StartTime":210935.0,"Position":116.0}]},{"StartTime":211051.0,"Objects":[{"StartTime":211051.0,"Position":12.0},{"StartTime":211166.0,"Position":103.829834}]},{"StartTime":211281.0,"Objects":[{"StartTime":211281.0,"Position":206.0}]},{"StartTime":211397.0,"Objects":[{"StartTime":211397.0,"Position":278.0}]},{"StartTime":211512.0,"Objects":[{"StartTime":211512.0,"Position":448.0},{"StartTime":211609.0,"Position":372.996918},{"StartTime":211742.0,"Position":287.3157}]},{"StartTime":211858.0,"Objects":[{"StartTime":211858.0,"Position":197.0}]},{"StartTime":211974.0,"Objects":[{"StartTime":211974.0,"Position":206.0}]},{"StartTime":212089.0,"Objects":[{"StartTime":212089.0,"Position":353.0}]},{"StartTime":212204.0,"Objects":[{"StartTime":212204.0,"Position":234.0}]},{"StartTime":212320.0,"Objects":[{"StartTime":212320.0,"Position":116.0}]},{"StartTime":212435.0,"Objects":[{"StartTime":212435.0,"Position":320.0},{"StartTime":212532.0,"Position":411.621948},{"StartTime":212665.0,"Position":504.5984}]},{"StartTime":212781.0,"Objects":[{"StartTime":212781.0,"Position":456.0}]},{"StartTime":212897.0,"Objects":[{"StartTime":212897.0,"Position":354.0},{"StartTime":212994.0,"Position":286.378052},{"StartTime":213127.0,"Position":169.401627}]},{"StartTime":213243.0,"Objects":[{"StartTime":213243.0,"Position":65.0}]},{"StartTime":213358.0,"Objects":[{"StartTime":213358.0,"Position":129.0},{"StartTime":213473.0,"Position":144.934341}]},{"StartTime":213589.0,"Objects":[{"StartTime":213589.0,"Position":81.0}]},{"StartTime":213820.0,"Objects":[{"StartTime":213820.0,"Position":81.0},{"StartTime":213935.0,"Position":96.02034}]},{"StartTime":214051.0,"Objects":[{"StartTime":214051.0,"Position":60.0}]},{"StartTime":214166.0,"Objects":[{"StartTime":214166.0,"Position":224.0}]},{"StartTime":214281.0,"Objects":[{"StartTime":214281.0,"Position":65.0},{"StartTime":214396.0,"Position":0.0}]},{"StartTime":214512.0,"Objects":[{"StartTime":214512.0,"Position":130.0}]},{"StartTime":214628.0,"Objects":[{"StartTime":214628.0,"Position":304.0}]},{"StartTime":214743.0,"Objects":[{"StartTime":214743.0,"Position":224.0},{"StartTime":214858.0,"Position":221.139755}]},{"StartTime":214974.0,"Objects":[{"StartTime":214974.0,"Position":366.0},{"StartTime":215089.0,"Position":368.186127}]},{"StartTime":215204.0,"Objects":[{"StartTime":215204.0,"Position":204.0}]},{"StartTime":215320.0,"Objects":[{"StartTime":215320.0,"Position":361.0}]},{"StartTime":215435.0,"Objects":[{"StartTime":215435.0,"Position":294.0},{"StartTime":215550.0,"Position":287.3384}]},{"StartTime":215666.0,"Objects":[{"StartTime":215666.0,"Position":50.0},{"StartTime":215763.0,"Position":95.19159},{"StartTime":215896.0,"Position":215.9359}]},{"StartTime":216012.0,"Objects":[{"StartTime":216012.0,"Position":432.0}]},{"StartTime":216070.0,"Objects":[{"StartTime":216070.0,"Position":432.0}]},{"StartTime":216127.0,"Objects":[{"StartTime":216127.0,"Position":432.0},{"StartTime":216242.0,"Position":340.248383}]},{"StartTime":216358.0,"Objects":[{"StartTime":216358.0,"Position":393.0},{"StartTime":216473.0,"Position":461.9513}]},{"StartTime":216589.0,"Objects":[{"StartTime":216589.0,"Position":295.0},{"StartTime":216686.0,"Position":229.769424},{"StartTime":216819.0,"Position":124.90863}]},{"StartTime":216935.0,"Objects":[{"StartTime":216935.0,"Position":48.0}]},{"StartTime":217051.0,"Objects":[{"StartTime":217051.0,"Position":18.0},{"StartTime":217166.0,"Position":39.7845459}]},{"StartTime":217281.0,"Objects":[{"StartTime":217281.0,"Position":131.0},{"StartTime":217378.0,"Position":137.511353},{"StartTime":217511.0,"Position":138.325424}]},{"StartTime":217627.0,"Objects":[{"StartTime":217627.0,"Position":279.0},{"StartTime":217742.0,"Position":219.329285}]},{"StartTime":217858.0,"Objects":[{"StartTime":217858.0,"Position":131.0}]},{"StartTime":217974.0,"Objects":[{"StartTime":217974.0,"Position":194.0},{"StartTime":218089.0,"Position":224.419708}]},{"StartTime":218204.0,"Objects":[{"StartTime":218204.0,"Position":48.0},{"StartTime":218319.0,"Position":46.1122551}]},{"StartTime":218435.0,"Objects":[{"StartTime":218435.0,"Position":274.0},{"StartTime":218550.0,"Position":294.7216}]},{"StartTime":218666.0,"Objects":[{"StartTime":218666.0,"Position":2.0},{"StartTime":218781.0,"Position":22.0704327}]},{"StartTime":218897.0,"Objects":[{"StartTime":218897.0,"Position":254.0},{"StartTime":218965.0,"Position":205.449738},{"StartTime":219070.0,"Position":135.86232}]},{"StartTime":219127.0,"Objects":[{"StartTime":219127.0,"Position":195.0},{"StartTime":219195.0,"Position":242.9607},{"StartTime":219300.0,"Position":264.2744}]},{"StartTime":219358.0,"Objects":[{"StartTime":219358.0,"Position":82.0},{"StartTime":219426.0,"Position":91.4965439},{"StartTime":219531.0,"Position":120.65477}]},{"StartTime":219589.0,"Objects":[{"StartTime":219589.0,"Position":171.0},{"StartTime":219704.0,"Position":179.589081}]},{"StartTime":219820.0,"Objects":[{"StartTime":219820.0,"Position":327.0},{"StartTime":219917.0,"Position":248.647552},{"StartTime":220050.0,"Position":163.564453}]},{"StartTime":220166.0,"Objects":[{"StartTime":220166.0,"Position":0.0}]},{"StartTime":220281.0,"Objects":[{"StartTime":220281.0,"Position":71.0},{"StartTime":220396.0,"Position":75.8352661}]},{"StartTime":220512.0,"Objects":[{"StartTime":220512.0,"Position":96.0},{"StartTime":220627.0,"Position":91.1647339}]},{"StartTime":220743.0,"Objects":[{"StartTime":220743.0,"Position":121.0},{"StartTime":220858.0,"Position":28.03209}]},{"StartTime":220974.0,"Objects":[{"StartTime":220974.0,"Position":161.0}]},{"StartTime":221089.0,"Objects":[{"StartTime":221089.0,"Position":242.0}]},{"StartTime":221204.0,"Objects":[{"StartTime":221204.0,"Position":281.0},{"StartTime":221301.0,"Position":364.473175},{"StartTime":221434.0,"Position":451.501068}]},{"StartTime":221551.0,"Objects":[{"StartTime":221551.0,"Position":389.0}]},{"StartTime":221608.0,"Objects":[{"StartTime":221608.0,"Position":389.0}]},{"StartTime":221666.0,"Objects":[{"StartTime":221666.0,"Position":389.0},{"StartTime":221781.0,"Position":369.661743}]},{"StartTime":221897.0,"Objects":[{"StartTime":221897.0,"Position":427.0},{"StartTime":221994.0,"Position":360.597534},{"StartTime":222127.0,"Position":241.097244}]},{"StartTime":222243.0,"Objects":[{"StartTime":222243.0,"Position":120.0}]},{"StartTime":222358.0,"Objects":[{"StartTime":222358.0,"Position":210.0},{"StartTime":222473.0,"Position":180.168533}]},{"StartTime":222589.0,"Objects":[{"StartTime":222589.0,"Position":267.0},{"StartTime":222704.0,"Position":204.82106}]},{"StartTime":222820.0,"Objects":[{"StartTime":222820.0,"Position":0.0},{"StartTime":222935.0,"Position":91.43494}]},{"StartTime":223051.0,"Objects":[{"StartTime":223051.0,"Position":301.0},{"StartTime":223166.0,"Position":209.844879}]},{"StartTime":223281.0,"Objects":[{"StartTime":223281.0,"Position":122.0}]},{"StartTime":223397.0,"Objects":[{"StartTime":223397.0,"Position":180.0}]},{"StartTime":223512.0,"Objects":[{"StartTime":223512.0,"Position":323.0},{"StartTime":223609.0,"Position":406.38382},{"StartTime":223742.0,"Position":480.961945}]},{"StartTime":223858.0,"Objects":[{"StartTime":223858.0,"Position":425.0},{"StartTime":223955.0,"Position":336.61618},{"StartTime":224088.0,"Position":267.038055}]},{"StartTime":224204.0,"Objects":[{"StartTime":224204.0,"Position":180.0},{"StartTime":224319.0,"Position":87.12355}]},{"StartTime":224435.0,"Objects":[{"StartTime":224435.0,"Position":5.0}]},{"StartTime":224551.0,"Objects":[{"StartTime":224551.0,"Position":64.0}]},{"StartTime":224666.0,"Objects":[{"StartTime":224666.0,"Position":154.0},{"StartTime":224781.0,"Position":158.953}]},{"StartTime":224897.0,"Objects":[{"StartTime":224897.0,"Position":84.0}]},{"StartTime":225012.0,"Objects":[{"StartTime":225012.0,"Position":241.0}]},{"StartTime":225127.0,"Objects":[{"StartTime":225127.0,"Position":84.0},{"StartTime":225242.0,"Position":0.0}]},{"StartTime":225358.0,"Objects":[{"StartTime":225358.0,"Position":149.0},{"StartTime":225455.0,"Position":219.601578},{"StartTime":225588.0,"Position":329.855469}]},{"StartTime":225704.0,"Objects":[{"StartTime":225704.0,"Position":448.0},{"StartTime":225801.0,"Position":360.4895},{"StartTime":225934.0,"Position":285.0467}]},{"StartTime":226051.0,"Objects":[{"StartTime":226051.0,"Position":406.0},{"StartTime":226166.0,"Position":416.920715}]},{"StartTime":226281.0,"Objects":[{"StartTime":226281.0,"Position":380.0}]},{"StartTime":226512.0,"Objects":[{"StartTime":226512.0,"Position":380.0}]},{"StartTime":226627.0,"Objects":[{"StartTime":226627.0,"Position":502.0}]},{"StartTime":226743.0,"Objects":[{"StartTime":226743.0,"Position":480.0}]},{"StartTime":226858.0,"Objects":[{"StartTime":226858.0,"Position":396.0}]},{"StartTime":226974.0,"Objects":[{"StartTime":226974.0,"Position":485.0}]},{"StartTime":227089.0,"Objects":[{"StartTime":227089.0,"Position":393.0}]},{"StartTime":227204.0,"Objects":[{"StartTime":227204.0,"Position":439.0},{"StartTime":227261.0,"Position":418.5026},{"StartTime":227319.0,"Position":424.803467},{"StartTime":227376.0,"Position":402.30603},{"StartTime":227434.0,"Position":392.6069},{"StartTime":227492.0,"Position":362.9078},{"StartTime":227549.0,"Position":376.4104},{"StartTime":227607.0,"Position":367.711243},{"StartTime":227665.0,"Position":346.012146},{"StartTime":227762.0,"Position":339.44635},{"StartTime":227896.0,"Position":299.417358}]},{"StartTime":228588.0,"Objects":[{"StartTime":228588.0,"Position":299.0},{"StartTime":228641.0,"Position":309.5071},{"StartTime":228694.0,"Position":274.095154},{"StartTime":228747.0,"Position":263.8877},{"StartTime":228800.0,"Position":286.214081},{"StartTime":228853.0,"Position":275.9026},{"StartTime":228906.0,"Position":264.0278},{"StartTime":228959.0,"Position":268.8211},{"StartTime":229049.0,"Position":278.438263}]},{"StartTime":229280.0,"Objects":[{"StartTime":229280.0,"Position":422.0},{"StartTime":229333.0,"Position":426.731476},{"StartTime":229386.0,"Position":420.100861},{"StartTime":229439.0,"Position":428.06842},{"StartTime":229492.0,"Position":418.578857},{"StartTime":229545.0,"Position":409.477844},{"StartTime":229598.0,"Position":427.007416},{"StartTime":229651.0,"Position":414.226776},{"StartTime":229741.0,"Position":407.2133}]},{"StartTime":229973.0,"Objects":[{"StartTime":229973.0,"Position":324.0}]},{"StartTime":230204.0,"Objects":[{"StartTime":230204.0,"Position":238.0}]},{"StartTime":230434.0,"Objects":[{"StartTime":230434.0,"Position":172.0}]},{"StartTime":230665.0,"Objects":[{"StartTime":230665.0,"Position":180.0}]},{"StartTime":230896.0,"Objects":[{"StartTime":230896.0,"Position":250.0},{"StartTime":230953.0,"Position":246.538712},{"StartTime":231011.0,"Position":229.051788},{"StartTime":231068.0,"Position":248.5905},{"StartTime":231126.0,"Position":231.103561},{"StartTime":231184.0,"Position":258.616638},{"StartTime":231241.0,"Position":221.15535},{"StartTime":231299.0,"Position":257.668427},{"StartTime":231357.0,"Position":238.1815},{"StartTime":231454.0,"Position":243.694748},{"StartTime":231588.0,"Position":232.25943}]},{"StartTime":232280.0,"Objects":[{"StartTime":232280.0,"Position":232.0},{"StartTime":232333.0,"Position":240.3837},{"StartTime":232386.0,"Position":227.7674},{"StartTime":232439.0,"Position":185.1511},{"StartTime":232492.0,"Position":182.53479},{"StartTime":232545.0,"Position":183.918488},{"StartTime":232598.0,"Position":173.302185},{"StartTime":232651.0,"Position":175.685883},{"StartTime":232741.0,"Position":139.6582}]},{"StartTime":232973.0,"Objects":[{"StartTime":232973.0,"Position":289.0},{"StartTime":233026.0,"Position":317.6163},{"StartTime":233079.0,"Position":295.2326},{"StartTime":233132.0,"Position":337.8489},{"StartTime":233185.0,"Position":336.4652},{"StartTime":233238.0,"Position":324.0815},{"StartTime":233291.0,"Position":350.6978},{"StartTime":233344.0,"Position":362.314117},{"StartTime":233434.0,"Position":381.3418}]},{"StartTime":233665.0,"Objects":[{"StartTime":233665.0,"Position":212.0}]},{"StartTime":233896.0,"Objects":[{"StartTime":233896.0,"Position":356.0}]},{"StartTime":234127.0,"Objects":[{"StartTime":234127.0,"Position":304.0}]},{"StartTime":234357.0,"Objects":[{"StartTime":234357.0,"Position":231.0}]},{"StartTime":234588.0,"Objects":[{"StartTime":234588.0,"Position":73.0},{"StartTime":234645.0,"Position":92.49741},{"StartTime":234703.0,"Position":113.196541},{"StartTime":234760.0,"Position":96.6939545},{"StartTime":234818.0,"Position":118.393082},{"StartTime":234876.0,"Position":133.0922},{"StartTime":234933.0,"Position":134.58963},{"StartTime":234991.0,"Position":150.288742},{"StartTime":235049.0,"Position":165.987869},{"StartTime":235146.0,"Position":171.55365},{"StartTime":235280.0,"Position":212.582657}]},{"StartTime":235973.0,"Objects":[{"StartTime":235973.0,"Position":213.0},{"StartTime":236026.0,"Position":220.492889},{"StartTime":236079.0,"Position":209.904846},{"StartTime":236132.0,"Position":236.1123},{"StartTime":236185.0,"Position":246.7859},{"StartTime":236238.0,"Position":237.097427},{"StartTime":236291.0,"Position":234.9722},{"StartTime":236344.0,"Position":237.178925},{"StartTime":236434.0,"Position":233.561722}]},{"StartTime":236665.0,"Objects":[{"StartTime":236665.0,"Position":90.0},{"StartTime":236718.0,"Position":70.92335},{"StartTime":236771.0,"Position":96.25737},{"StartTime":236824.0,"Position":82.05987},{"StartTime":236877.0,"Position":94.6354141},{"StartTime":236930.0,"Position":102.684189},{"StartTime":236983.0,"Position":96.18482},{"StartTime":237036.0,"Position":85.30122},{"StartTime":237126.0,"Position":104.846085}]},{"StartTime":237357.0,"Objects":[{"StartTime":237357.0,"Position":209.0},{"StartTime":237454.0,"Position":185.642929},{"StartTime":237587.0,"Position":163.101791}]},{"StartTime":237819.0,"Objects":[{"StartTime":237819.0,"Position":122.0}]},{"StartTime":238050.0,"Objects":[{"StartTime":238050.0,"Position":303.0}]},{"StartTime":238280.0,"Objects":[{"StartTime":238280.0,"Position":198.0},{"StartTime":238337.0,"Position":172.143723},{"StartTime":238395.0,"Position":172.086456},{"StartTime":238452.0,"Position":166.421417},{"StartTime":238510.0,"Position":152.883118},{"StartTime":238568.0,"Position":150.797348},{"StartTime":238625.0,"Position":167.218323},{"StartTime":238683.0,"Position":151.087875},{"StartTime":238741.0,"Position":161.562042},{"StartTime":238838.0,"Position":179.682129},{"StartTime":238972.0,"Position":178.171066}]},{"StartTime":239204.0,"Objects":[{"StartTime":239204.0,"Position":340.0}]},{"StartTime":239434.0,"Objects":[{"StartTime":239434.0,"Position":402.0}]},{"StartTime":239665.0,"Objects":[{"StartTime":239665.0,"Position":470.0}]},{"StartTime":239896.0,"Objects":[{"StartTime":239896.0,"Position":427.0}]},{"StartTime":240127.0,"Objects":[{"StartTime":240127.0,"Position":497.0}]},{"StartTime":240357.0,"Objects":[{"StartTime":240357.0,"Position":362.0}]},{"StartTime":240588.0,"Objects":[{"StartTime":240588.0,"Position":417.0}]},{"StartTime":240819.0,"Objects":[{"StartTime":240819.0,"Position":429.0}]},{"StartTime":241050.0,"Objects":[{"StartTime":241050.0,"Position":256.0}]},{"StartTime":241280.0,"Objects":[{"StartTime":241280.0,"Position":219.0}]},{"StartTime":241511.0,"Objects":[{"StartTime":241511.0,"Position":184.0}]},{"StartTime":241742.0,"Objects":[{"StartTime":241742.0,"Position":162.0}]},{"StartTime":241973.0,"Objects":[{"StartTime":241973.0,"Position":110.0},{"StartTime":242026.0,"Position":93.10535},{"StartTime":242079.0,"Position":108.723236},{"StartTime":242132.0,"Position":95.0576248},{"StartTime":242185.0,"Position":55.3367538},{"StartTime":242238.0,"Position":49.816864},{"StartTime":242291.0,"Position":53.7061462},{"StartTime":242344.0,"Position":51.2607536},{"StartTime":242434.0,"Position":24.3897762}]},{"StartTime":242665.0,"Objects":[{"StartTime":242665.0,"Position":140.0},{"StartTime":242762.0,"Position":138.915024},{"StartTime":242895.0,"Position":147.002945}]},{"StartTime":243127.0,"Objects":[{"StartTime":243127.0,"Position":96.0}]},{"StartTime":243357.0,"Objects":[{"StartTime":243357.0,"Position":75.0}]},{"StartTime":243588.0,"Objects":[{"StartTime":243588.0,"Position":215.0}]},{"StartTime":243819.0,"Objects":[{"StartTime":243819.0,"Position":322.0}]},{"StartTime":244050.0,"Objects":[{"StartTime":244050.0,"Position":396.0},{"StartTime":244147.0,"Position":425.540039},{"StartTime":244280.0,"Position":442.3321}]},{"StartTime":244511.0,"Objects":[{"StartTime":244511.0,"Position":497.0},{"StartTime":244564.0,"Position":487.3125},{"StartTime":244617.0,"Position":463.625031},{"StartTime":244670.0,"Position":469.937531},{"StartTime":244723.0,"Position":439.250031},{"StartTime":244776.0,"Position":447.562561},{"StartTime":244829.0,"Position":419.875061},{"StartTime":244882.0,"Position":422.187561},{"StartTime":244972.0,"Position":404.039}]},{"StartTime":245204.0,"Objects":[{"StartTime":245204.0,"Position":335.0}]},{"StartTime":245434.0,"Objects":[{"StartTime":245434.0,"Position":363.0},{"StartTime":245491.0,"Position":366.2679},{"StartTime":245549.0,"Position":374.8136},{"StartTime":245606.0,"Position":404.997833},{"StartTime":245664.0,"Position":378.847351},{"StartTime":245722.0,"Position":412.218323},{"StartTime":245779.0,"Position":396.615265},{"StartTime":245837.0,"Position":392.35144},{"StartTime":245895.0,"Position":408.217041},{"StartTime":245992.0,"Position":411.704224},{"StartTime":246126.0,"Position":389.61557}]},{"StartTime":246357.0,"Objects":[{"StartTime":246357.0,"Position":265.0}]},{"StartTime":246588.0,"Objects":[{"StartTime":246588.0,"Position":210.0}]},{"StartTime":246819.0,"Objects":[{"StartTime":246819.0,"Position":140.0},{"StartTime":246916.0,"Position":141.036453},{"StartTime":247049.0,"Position":131.233368}]},{"StartTime":247280.0,"Objects":[{"StartTime":247280.0,"Position":91.0}]},{"StartTime":247511.0,"Objects":[{"StartTime":247511.0,"Position":166.0},{"StartTime":247608.0,"Position":161.623718},{"StartTime":247741.0,"Position":156.782181}]},{"StartTime":247973.0,"Objects":[{"StartTime":247973.0,"Position":132.0},{"StartTime":248030.0,"Position":131.465683},{"StartTime":248088.0,"Position":143.132523},{"StartTime":248145.0,"Position":158.5982},{"StartTime":248203.0,"Position":178.365616},{"StartTime":248300.0,"Position":168.9544},{"StartTime":248434.0,"Position":132.0}]},{"StartTime":248665.0,"Objects":[{"StartTime":248665.0,"Position":309.0}]},{"StartTime":248896.0,"Objects":[{"StartTime":248896.0,"Position":379.0}]},{"StartTime":249127.0,"Objects":[{"StartTime":249127.0,"Position":238.0},{"StartTime":249224.0,"Position":235.5969},{"StartTime":249357.0,"Position":227.795822}]},{"StartTime":249588.0,"Objects":[{"StartTime":249588.0,"Position":212.0}]},{"StartTime":249819.0,"Objects":[{"StartTime":249819.0,"Position":225.0}]},{"StartTime":250050.0,"Objects":[{"StartTime":250050.0,"Position":356.0},{"StartTime":250147.0,"Position":370.4031},{"StartTime":250280.0,"Position":366.204163}]},{"StartTime":250511.0,"Objects":[{"StartTime":250511.0,"Position":382.0}]},{"StartTime":250742.0,"Objects":[{"StartTime":250742.0,"Position":464.0},{"StartTime":250795.0,"Position":472.35553},{"StartTime":250848.0,"Position":432.7111},{"StartTime":250901.0,"Position":430.501251},{"StartTime":250954.0,"Position":412.1907},{"StartTime":251007.0,"Position":423.880157},{"StartTime":251060.0,"Position":424.5696},{"StartTime":251113.0,"Position":379.259033},{"StartTime":251203.0,"Position":378.75058}]},{"StartTime":251550.0,"Objects":[{"StartTime":251550.0,"Position":310.0},{"StartTime":251628.0,"Position":286.397919},{"StartTime":251706.0,"Position":265.795837},{"StartTime":251784.0,"Position":275.193756},{"StartTime":251898.0,"Position":240.3907}]},{"StartTime":252247.0,"Objects":[{"StartTime":252247.0,"Position":210.0}]},{"StartTime":252702.0,"Objects":[{"StartTime":252702.0,"Position":210.0},{"StartTime":252782.0,"Position":197.390274},{"StartTime":252862.0,"Position":165.780563},{"StartTime":252942.0,"Position":162.170837},{"StartTime":253059.0,"Position":140.341629}]},{"StartTime":253506.0,"Objects":[{"StartTime":253506.0,"Position":117.0}]},{"StartTime":254095.0,"Objects":[{"StartTime":254095.0,"Position":117.0},{"StartTime":254161.0,"Position":91.8972549},{"StartTime":254227.0,"Position":109.79451},{"StartTime":254293.0,"Position":74.6917648},{"StartTime":254360.0,"Position":79.46625},{"StartTime":254426.0,"Position":58.36351},{"StartTime":254492.0,"Position":59.2607574},{"StartTime":254558.0,"Position":52.1580162},{"StartTime":254661.0,"Position":47.512825}]},{"StartTime":255580.0,"Objects":[{"StartTime":255580.0,"Position":19.0}]},{"StartTime":256480.0,"Objects":[{"StartTime":256480.0,"Position":71.0},{"StartTime":256547.0,"Position":67.87454},{"StartTime":256614.0,"Position":95.96705},{"StartTime":256681.0,"Position":91.2217941},{"StartTime":256748.0,"Position":105.581955},{"StartTime":256815.0,"Position":93.98999},{"StartTime":256882.0,"Position":103.388008},{"StartTime":256949.0,"Position":112.718117},{"StartTime":257016.0,"Position":109.920441},{"StartTime":257083.0,"Position":136.898544},{"StartTime":257150.0,"Position":128.617935},{"StartTime":257217.0,"Position":142.026443},{"StartTime":257284.0,"Position":151.074234},{"StartTime":257351.0,"Position":176.7141},{"StartTime":257418.0,"Position":170.9018},{"StartTime":257485.0,"Position":171.59639},{"StartTime":257588.0,"Position":176.631821}]},{"StartTime":257747.0,"Objects":[{"StartTime":257747.0,"Position":211.0},{"StartTime":257804.0,"Position":217.8565},{"StartTime":257861.0,"Position":212.029175},{"StartTime":257918.0,"Position":184.542419},{"StartTime":257975.0,"Position":206.420013},{"StartTime":258032.0,"Position":202.816925},{"StartTime":258089.0,"Position":185.700745},{"StartTime":258146.0,"Position":178.034622},{"StartTime":258204.0,"Position":192.803787},{"StartTime":258261.0,"Position":165.165955},{"StartTime":258318.0,"Position":184.163956},{"StartTime":258375.0,"Position":158.664185},{"StartTime":258432.0,"Position":182.668732},{"StartTime":258489.0,"Position":171.189255},{"StartTime":258546.0,"Position":177.41777},{"StartTime":258603.0,"Position":180.135727},{"StartTime":258697.0,"Position":185.032272}]},{"StartTime":258892.0,"Objects":[{"StartTime":258892.0,"Position":474.0},{"StartTime":258958.0,"Position":477.188232},{"StartTime":259025.0,"Position":473.31955},{"StartTime":259091.0,"Position":485.2887},{"StartTime":259158.0,"Position":464.169861},{"StartTime":259224.0,"Position":445.9263},{"StartTime":259291.0,"Position":472.565826},{"StartTime":259358.0,"Position":455.0796},{"StartTime":259424.0,"Position":456.524078},{"StartTime":259491.0,"Position":453.837036},{"StartTime":259557.0,"Position":467.0627},{"StartTime":259624.0,"Position":461.183319},{"StartTime":259691.0,"Position":432.1556},{"StartTime":259757.0,"Position":435.138733},{"StartTime":259824.0,"Position":423.912659},{"StartTime":259890.0,"Position":437.712677},{"StartTime":259957.0,"Position":422.313263},{"StartTime":260024.0,"Position":424.880035},{"StartTime":260090.0,"Position":440.3811},{"StartTime":260157.0,"Position":436.7791},{"StartTime":260223.0,"Position":400.141022},{"StartTime":260290.0,"Position":430.3847},{"StartTime":260357.0,"Position":419.5619},{"StartTime":260423.0,"Position":404.7234},{"StartTime":260490.0,"Position":413.783051},{"StartTime":260556.0,"Position":393.822571},{"StartTime":260623.0,"Position":379.777222},{"StartTime":260690.0,"Position":399.648926},{"StartTime":260756.0,"Position":394.5706},{"StartTime":260823.0,"Position":386.353851},{"StartTime":260889.0,"Position":359.18924},{"StartTime":260956.0,"Position":367.906677},{"StartTime":261023.0,"Position":369.60788},{"StartTime":261084.0,"Position":374.661255},{"StartTime":261145.0,"Position":370.703857},{"StartTime":261206.0,"Position":339.722168},{"StartTime":261268.0,"Position":356.6687},{"StartTime":261329.0,"Position":336.6645},{"StartTime":261390.0,"Position":328.6578},{"StartTime":261452.0,"Position":348.578},{"StartTime":261513.0,"Position":336.564667},{"StartTime":261574.0,"Position":318.553558},{"StartTime":261636.0,"Position":346.480042},{"StartTime":261697.0,"Position":341.4845},{"StartTime":261758.0,"Position":306.49408},{"StartTime":261820.0,"Position":319.461731},{"StartTime":261881.0,"Position":314.501068},{"StartTime":261942.0,"Position":314.5745},{"StartTime":262004.0,"Position":304.591248},{"StartTime":262065.0,"Position":317.7179},{"StartTime":262126.0,"Position":289.851746},{"StartTime":262187.0,"Position":305.043823},{"StartTime":262249.0,"Position":302.180573},{"StartTime":262310.0,"Position":270.450165},{"StartTime":262371.0,"Position":287.724823},{"StartTime":262433.0,"Position":264.024},{"StartTime":262494.0,"Position":257.386749},{"StartTime":262555.0,"Position":278.846466},{"StartTime":262617.0,"Position":259.2504},{"StartTime":262678.0,"Position":266.822083},{"StartTime":262739.0,"Position":255.3938},{"StartTime":262801.0,"Position":261.0324},{"StartTime":262862.0,"Position":261.727},{"StartTime":262923.0,"Position":261.5505},{"StartTime":263021.0,"Position":246.531586}]},{"StartTime":263197.0,"Objects":[{"StartTime":263197.0,"Position":210.0},{"StartTime":263294.0,"Position":306.607269},{"StartTime":263427.0,"Position":383.317047}]},{"StartTime":263543.0,"Objects":[{"StartTime":263543.0,"Position":456.0}]},{"StartTime":263658.0,"Objects":[{"StartTime":263658.0,"Position":465.0},{"StartTime":263755.0,"Position":475.812439},{"StartTime":263888.0,"Position":510.653168}]},{"StartTime":264004.0,"Objects":[{"StartTime":264004.0,"Position":425.0}]},{"StartTime":264120.0,"Objects":[{"StartTime":264120.0,"Position":368.0},{"StartTime":264235.0,"Position":275.061646}]},{"StartTime":264350.0,"Objects":[{"StartTime":264350.0,"Position":280.0},{"StartTime":264465.0,"Position":372.9198}]},{"StartTime":264581.0,"Objects":[{"StartTime":264581.0,"Position":197.0}]},{"StartTime":264697.0,"Objects":[{"StartTime":264697.0,"Position":121.0}]},{"StartTime":264812.0,"Objects":[{"StartTime":264812.0,"Position":50.0}]},{"StartTime":264927.0,"Objects":[{"StartTime":264927.0,"Position":21.0}]},{"StartTime":265043.0,"Objects":[{"StartTime":265043.0,"Position":37.0},{"StartTime":265140.0,"Position":125.654358},{"StartTime":265273.0,"Position":222.8014}]},{"StartTime":265389.0,"Objects":[{"StartTime":265389.0,"Position":314.0}]},{"StartTime":265504.0,"Objects":[{"StartTime":265504.0,"Position":283.0},{"StartTime":265601.0,"Position":219.753021},{"StartTime":265734.0,"Position":126.098457}]},{"StartTime":265850.0,"Objects":[{"StartTime":265850.0,"Position":57.0}]},{"StartTime":265966.0,"Objects":[{"StartTime":265966.0,"Position":142.0},{"StartTime":266081.0,"Position":157.97847}]},{"StartTime":266197.0,"Objects":[{"StartTime":266197.0,"Position":52.0},{"StartTime":266312.0,"Position":36.021534}]},{"StartTime":266427.0,"Objects":[{"StartTime":266427.0,"Position":217.0}]},{"StartTime":266543.0,"Objects":[{"StartTime":266543.0,"Position":297.0}]},{"StartTime":266658.0,"Objects":[{"StartTime":266658.0,"Position":368.0}]},{"StartTime":266773.0,"Objects":[{"StartTime":266773.0,"Position":406.0}]},{"StartTime":266889.0,"Objects":[{"StartTime":266889.0,"Position":404.0},{"StartTime":266986.0,"Position":407.60556},{"StartTime":267119.0,"Position":450.385132}]},{"StartTime":267235.0,"Objects":[{"StartTime":267235.0,"Position":503.0}]},{"StartTime":267350.0,"Objects":[{"StartTime":267350.0,"Position":411.0},{"StartTime":267465.0,"Position":318.369415}]},{"StartTime":267581.0,"Objects":[{"StartTime":267581.0,"Position":237.0}]},{"StartTime":267697.0,"Objects":[{"StartTime":267697.0,"Position":169.0}]},{"StartTime":267812.0,"Objects":[{"StartTime":267812.0,"Position":148.0},{"StartTime":267927.0,"Position":160.723953}]},{"StartTime":268043.0,"Objects":[{"StartTime":268043.0,"Position":333.0},{"StartTime":268158.0,"Position":320.017151}]},{"StartTime":268273.0,"Objects":[{"StartTime":268273.0,"Position":63.0}]},{"StartTime":268389.0,"Objects":[{"StartTime":268389.0,"Position":11.0}]},{"StartTime":268504.0,"Objects":[{"StartTime":268504.0,"Position":2.0}]},{"StartTime":268620.0,"Objects":[{"StartTime":268620.0,"Position":36.0}]},{"StartTime":268735.0,"Objects":[{"StartTime":268735.0,"Position":107.0},{"StartTime":268832.0,"Position":196.266815},{"StartTime":268965.0,"Position":291.10318}]},{"StartTime":269081.0,"Objects":[{"StartTime":269081.0,"Position":370.0}]},{"StartTime":269197.0,"Objects":[{"StartTime":269197.0,"Position":333.0},{"StartTime":269312.0,"Position":344.8143}]},{"StartTime":269427.0,"Objects":[{"StartTime":269427.0,"Position":288.0}]},{"StartTime":269543.0,"Objects":[{"StartTime":269543.0,"Position":368.0}]},{"StartTime":269658.0,"Objects":[{"StartTime":269658.0,"Position":512.0},{"StartTime":269773.0,"Position":419.4197}]},{"StartTime":269889.0,"Objects":[{"StartTime":269889.0,"Position":173.0},{"StartTime":270004.0,"Position":265.5803}]},{"StartTime":270120.0,"Objects":[{"StartTime":270120.0,"Position":381.0}]},{"StartTime":270235.0,"Objects":[{"StartTime":270235.0,"Position":306.0}]},{"StartTime":270350.0,"Objects":[{"StartTime":270350.0,"Position":232.0}]},{"StartTime":270466.0,"Objects":[{"StartTime":270466.0,"Position":158.0}]},{"StartTime":270523.0,"Objects":[{"StartTime":270523.0,"Position":154.0}]},{"StartTime":270581.0,"Objects":[{"StartTime":270581.0,"Position":150.0},{"StartTime":270638.0,"Position":158.515427}]},{"StartTime":270697.0,"Objects":[{"StartTime":270697.0,"Position":136.0},{"StartTime":270754.0,"Position":171.398178}]},{"StartTime":270812.0,"Objects":[{"StartTime":270812.0,"Position":318.0},{"StartTime":270869.0,"Position":274.58493}]},{"StartTime":270927.0,"Objects":[{"StartTime":270927.0,"Position":103.0},{"StartTime":270984.0,"Position":56.7936249},{"StartTime":271042.0,"Position":103.0}]},{"StartTime":271158.0,"Objects":[{"StartTime":271158.0,"Position":407.0},{"StartTime":271215.0,"Position":360.912872}]},{"StartTime":271273.0,"Objects":[{"StartTime":271273.0,"Position":216.0}]},{"StartTime":271331.0,"Objects":[{"StartTime":271331.0,"Position":221.0}]},{"StartTime":271389.0,"Objects":[{"StartTime":271389.0,"Position":227.0}]},{"StartTime":271447.0,"Objects":[{"StartTime":271447.0,"Position":235.0}]},{"StartTime":271504.0,"Objects":[{"StartTime":271504.0,"Position":243.0},{"StartTime":271619.0,"Position":274.106384}]},{"StartTime":271735.0,"Objects":[{"StartTime":271735.0,"Position":389.0}]},{"StartTime":271793.0,"Objects":[{"StartTime":271793.0,"Position":367.0}]},{"StartTime":271850.0,"Objects":[{"StartTime":271850.0,"Position":377.0}]},{"StartTime":271908.0,"Objects":[{"StartTime":271908.0,"Position":417.0}]},{"StartTime":271966.0,"Objects":[{"StartTime":271966.0,"Position":466.0},{"StartTime":272023.0,"Position":501.0169},{"StartTime":272081.0,"Position":466.0},{"StartTime":272139.0,"Position":501.0169}]},{"StartTime":272197.0,"Objects":[{"StartTime":272197.0,"Position":439.0},{"StartTime":272312.0,"Position":420.1435}]},{"StartTime":272370.0,"Objects":[{"StartTime":272370.0,"Position":436.0}]},{"StartTime":272427.0,"Objects":[{"StartTime":272427.0,"Position":441.0}]},{"StartTime":272485.0,"Objects":[{"StartTime":272485.0,"Position":391.0}]},{"StartTime":272543.0,"Objects":[{"StartTime":272543.0,"Position":334.0}]},{"StartTime":272600.0,"Objects":[{"StartTime":272600.0,"Position":285.0}]},{"StartTime":272658.0,"Objects":[{"StartTime":272658.0,"Position":262.0}]},{"StartTime":272716.0,"Objects":[{"StartTime":272716.0,"Position":219.0}]},{"StartTime":272773.0,"Objects":[{"StartTime":272773.0,"Position":163.0},{"StartTime":272830.0,"Position":117.800331}]},{"StartTime":272889.0,"Objects":[{"StartTime":272889.0,"Position":13.0}]},{"StartTime":272947.0,"Objects":[{"StartTime":272947.0,"Position":49.0}]},{"StartTime":273004.0,"Objects":[{"StartTime":273004.0,"Position":61.0}]},{"StartTime":273062.0,"Objects":[{"StartTime":273062.0,"Position":53.0}]},{"StartTime":273120.0,"Objects":[{"StartTime":273120.0,"Position":26.0}]},{"StartTime":273177.0,"Objects":[{"StartTime":273177.0,"Position":13.0}]},{"StartTime":273235.0,"Objects":[{"StartTime":273235.0,"Position":21.0},{"StartTime":273292.0,"Position":32.800724}]},{"StartTime":273350.0,"Objects":[{"StartTime":273350.0,"Position":126.0}]},{"StartTime":273408.0,"Objects":[{"StartTime":273408.0,"Position":162.0}]},{"StartTime":273466.0,"Objects":[{"StartTime":273466.0,"Position":194.0}]},{"StartTime":273523.0,"Objects":[{"StartTime":273523.0,"Position":213.0}]},{"StartTime":273581.0,"Objects":[{"StartTime":273581.0,"Position":242.0}]},{"StartTime":273639.0,"Objects":[{"StartTime":273639.0,"Position":277.0}]},{"StartTime":273697.0,"Objects":[{"StartTime":273697.0,"Position":307.0}]},{"StartTime":273754.0,"Objects":[{"StartTime":273754.0,"Position":343.0}]},{"StartTime":273812.0,"Objects":[{"StartTime":273812.0,"Position":375.0},{"StartTime":273927.0,"Position":384.45874}]},{"StartTime":273985.0,"Objects":[{"StartTime":273985.0,"Position":380.0}]},{"StartTime":274043.0,"Objects":[{"StartTime":274043.0,"Position":370.0},{"StartTime":274158.0,"Position":462.594574}]},{"StartTime":274273.0,"Objects":[{"StartTime":274273.0,"Position":263.0},{"StartTime":274388.0,"Position":170.405426}]},{"StartTime":274447.0,"Objects":[{"StartTime":274447.0,"Position":103.0}]},{"StartTime":274504.0,"Objects":[{"StartTime":274504.0,"Position":103.0},{"StartTime":274619.0,"Position":107.0641}]},{"StartTime":274735.0,"Objects":[{"StartTime":274735.0,"Position":315.0},{"StartTime":274850.0,"Position":310.935883}]},{"StartTime":274908.0,"Objects":[{"StartTime":274908.0,"Position":248.0}]},{"StartTime":274966.0,"Objects":[{"StartTime":274966.0,"Position":248.0},{"StartTime":275081.0,"Position":155.405426}]},{"StartTime":275197.0,"Objects":[{"StartTime":275197.0,"Position":18.0}]},{"StartTime":275312.0,"Objects":[{"StartTime":275312.0,"Position":115.0}]},{"StartTime":275370.0,"Objects":[{"StartTime":275370.0,"Position":115.0}]},{"StartTime":275427.0,"Objects":[{"StartTime":275427.0,"Position":115.0},{"StartTime":275542.0,"Position":102.681671}]},{"StartTime":275658.0,"Objects":[{"StartTime":275658.0,"Position":218.0},{"StartTime":275773.0,"Position":230.318329}]},{"StartTime":275889.0,"Objects":[{"StartTime":275889.0,"Position":307.0},{"StartTime":276004.0,"Position":399.981354}]},{"StartTime":276062.0,"Objects":[{"StartTime":276062.0,"Position":471.0}]},{"StartTime":276120.0,"Objects":[{"StartTime":276120.0,"Position":471.0},{"StartTime":276177.0,"Position":475.382782},{"StartTime":276235.0,"Position":471.0},{"StartTime":276293.0,"Position":475.382782},{"StartTime":276350.0,"Position":471.0},{"StartTime":276408.0,"Position":475.382782},{"StartTime":276466.0,"Position":471.0},{"StartTime":276523.0,"Position":475.382782}]},{"StartTime":276581.0,"Objects":[{"StartTime":276581.0,"Position":372.0},{"StartTime":276638.0,"Position":367.617218},{"StartTime":276696.0,"Position":372.0},{"StartTime":276754.0,"Position":367.617218},{"StartTime":276811.0,"Position":372.0},{"StartTime":276869.0,"Position":367.617218},{"StartTime":276927.0,"Position":372.0},{"StartTime":276984.0,"Position":367.617218}]},{"StartTime":277043.0,"Objects":[{"StartTime":277043.0,"Position":446.0}]},{"StartTime":277158.0,"Objects":[{"StartTime":277158.0,"Position":234.0}]},{"StartTime":277273.0,"Objects":[{"StartTime":277273.0,"Position":307.0}]},{"StartTime":277389.0,"Objects":[{"StartTime":277389.0,"Position":495.0}]},{"StartTime":277504.0,"Objects":[{"StartTime":277504.0,"Position":327.0}]},{"StartTime":277562.0,"Objects":[{"StartTime":277562.0,"Position":321.0}]},{"StartTime":277620.0,"Objects":[{"StartTime":277620.0,"Position":303.0}]},{"StartTime":277677.0,"Objects":[{"StartTime":277677.0,"Position":271.0}]},{"StartTime":277735.0,"Objects":[{"StartTime":277735.0,"Position":231.0}]},{"StartTime":277793.0,"Objects":[{"StartTime":277793.0,"Position":188.0}]},{"StartTime":277850.0,"Objects":[{"StartTime":277850.0,"Position":147.0}]},{"StartTime":277908.0,"Objects":[{"StartTime":277908.0,"Position":108.0}]},{"StartTime":277966.0,"Objects":[{"StartTime":277966.0,"Position":80.0},{"StartTime":278063.0,"Position":28.5068283},{"StartTime":278196.0,"Position":15.99887}]},{"StartTime":278312.0,"Objects":[{"StartTime":278312.0,"Position":84.0},{"StartTime":278409.0,"Position":146.614288},{"StartTime":278542.0,"Position":265.901367}]},{"StartTime":278658.0,"Objects":[{"StartTime":278658.0,"Position":351.0},{"StartTime":278773.0,"Position":441.5425}]},{"StartTime":278889.0,"Objects":[{"StartTime":278889.0,"Position":277.0}]},{"StartTime":279004.0,"Objects":[{"StartTime":279004.0,"Position":277.0},{"StartTime":279101.0,"Position":259.472473},{"StartTime":279234.0,"Position":250.534409}]},{"StartTime":279350.0,"Objects":[{"StartTime":279350.0,"Position":321.0},{"StartTime":279465.0,"Position":347.2083}]},{"StartTime":279581.0,"Objects":[{"StartTime":279581.0,"Position":178.0},{"StartTime":279696.0,"Position":151.791687}]},{"StartTime":279812.0,"Objects":[{"StartTime":279812.0,"Position":250.0},{"StartTime":279909.0,"Position":322.037628},{"StartTime":280042.0,"Position":433.910248}]},{"StartTime":280158.0,"Objects":[{"StartTime":280158.0,"Position":452.0},{"StartTime":280255.0,"Position":378.962372},{"StartTime":280388.0,"Position":268.089752}]},{"StartTime":280504.0,"Objects":[{"StartTime":280504.0,"Position":208.0},{"StartTime":280619.0,"Position":224.649811}]},{"StartTime":280735.0,"Objects":[{"StartTime":280735.0,"Position":125.0}]},{"StartTime":280850.0,"Objects":[{"StartTime":280850.0,"Position":125.0},{"StartTime":280947.0,"Position":30.3852921},{"StartTime":281080.0,"Position":0.0}]},{"StartTime":281197.0,"Objects":[{"StartTime":281197.0,"Position":62.0},{"StartTime":281312.0,"Position":67.96667}]},{"StartTime":281427.0,"Objects":[{"StartTime":281427.0,"Position":189.0},{"StartTime":281542.0,"Position":193.9514}]},{"StartTime":281600.0,"Objects":[{"StartTime":281600.0,"Position":205.0}]},{"StartTime":281658.0,"Objects":[{"StartTime":281658.0,"Position":218.0},{"StartTime":281755.0,"Position":289.812042},{"StartTime":281888.0,"Position":402.662872}]},{"StartTime":282004.0,"Objects":[{"StartTime":282004.0,"Position":489.0},{"StartTime":282101.0,"Position":512.0},{"StartTime":282234.0,"Position":508.0971}]},{"StartTime":282350.0,"Objects":[{"StartTime":282350.0,"Position":424.0},{"StartTime":282465.0,"Position":412.63028}]},{"StartTime":282581.0,"Objects":[{"StartTime":282581.0,"Position":491.0}]},{"StartTime":282697.0,"Objects":[{"StartTime":282697.0,"Position":491.0},{"StartTime":282794.0,"Position":407.245728},{"StartTime":282927.0,"Position":314.45224}]},{"StartTime":283043.0,"Objects":[{"StartTime":283043.0,"Position":239.0},{"StartTime":283158.0,"Position":225.275238}]},{"StartTime":283273.0,"Objects":[{"StartTime":283273.0,"Position":266.0},{"StartTime":283388.0,"Position":279.724762}]},{"StartTime":283504.0,"Objects":[{"StartTime":283504.0,"Position":148.0},{"StartTime":283601.0,"Position":102.355682},{"StartTime":283734.0,"Position":0.0}]},{"StartTime":283850.0,"Objects":[{"StartTime":283850.0,"Position":162.0},{"StartTime":283947.0,"Position":226.823669},{"StartTime":284080.0,"Position":344.177246}]},{"StartTime":284197.0,"Objects":[{"StartTime":284197.0,"Position":95.0},{"StartTime":284312.0,"Position":85.31283}]},{"StartTime":284427.0,"Objects":[{"StartTime":284427.0,"Position":61.0}]},{"StartTime":284543.0,"Objects":[{"StartTime":284543.0,"Position":61.0}]},{"StartTime":284658.0,"Objects":[{"StartTime":284658.0,"Position":227.0}]},{"StartTime":284773.0,"Objects":[{"StartTime":284773.0,"Position":227.0}]},{"StartTime":284889.0,"Objects":[{"StartTime":284889.0,"Position":159.0},{"StartTime":284957.0,"Position":137.58168},{"StartTime":285062.0,"Position":140.126938}]},{"StartTime":285120.0,"Objects":[{"StartTime":285120.0,"Position":216.0},{"StartTime":285188.0,"Position":214.337952},{"StartTime":285293.0,"Position":182.363892}]},{"StartTime":285350.0,"Objects":[{"StartTime":285350.0,"Position":121.0},{"StartTime":285447.0,"Position":181.8125},{"StartTime":285580.0,"Position":305.503845}]},{"StartTime":285697.0,"Objects":[{"StartTime":285697.0,"Position":377.0},{"StartTime":285794.0,"Position":417.9641},{"StartTime":285927.0,"Position":415.3728}]},{"StartTime":286043.0,"Objects":[{"StartTime":286043.0,"Position":299.0},{"StartTime":286158.0,"Position":284.9337}]},{"StartTime":286273.0,"Objects":[{"StartTime":286273.0,"Position":248.0}]},{"StartTime":286389.0,"Objects":[{"StartTime":286389.0,"Position":248.0},{"StartTime":286486.0,"Position":187.836212},{"StartTime":286619.0,"Position":87.4779053}]},{"StartTime":286735.0,"Objects":[{"StartTime":286735.0,"Position":0.0},{"StartTime":286850.0,"Position":90.79614}]},{"StartTime":286966.0,"Objects":[{"StartTime":286966.0,"Position":285.0},{"StartTime":287081.0,"Position":208.507446}]},{"StartTime":287197.0,"Objects":[{"StartTime":287197.0,"Position":160.0},{"StartTime":287294.0,"Position":157.901031},{"StartTime":287427.0,"Position":131.3117}]},{"StartTime":287543.0,"Objects":[{"StartTime":287543.0,"Position":196.0},{"StartTime":287640.0,"Position":239.657654},{"StartTime":287773.0,"Position":360.606018}]},{"StartTime":287889.0,"Objects":[{"StartTime":287889.0,"Position":430.0},{"StartTime":288004.0,"Position":512.0}]},{"StartTime":288120.0,"Objects":[{"StartTime":288120.0,"Position":349.0}]},{"StartTime":288235.0,"Objects":[{"StartTime":288235.0,"Position":349.0},{"StartTime":288332.0,"Position":326.11142},{"StartTime":288465.0,"Position":319.776855}]},{"StartTime":288581.0,"Objects":[{"StartTime":288581.0,"Position":382.0},{"StartTime":288696.0,"Position":474.508667}]},{"StartTime":288812.0,"Objects":[{"StartTime":288812.0,"Position":245.0},{"StartTime":288927.0,"Position":152.491333}]},{"StartTime":288985.0,"Objects":[{"StartTime":288985.0,"Position":139.0}]},{"StartTime":289043.0,"Objects":[{"StartTime":289043.0,"Position":124.0},{"StartTime":289140.0,"Position":146.676285},{"StartTime":289273.0,"Position":81.78579}]},{"StartTime":289389.0,"Objects":[{"StartTime":289389.0,"Position":29.0},{"StartTime":289486.0,"Position":91.9763641},{"StartTime":289619.0,"Position":212.819092}]},{"StartTime":289735.0,"Objects":[{"StartTime":289735.0,"Position":301.0},{"StartTime":289850.0,"Position":286.956635}]},{"StartTime":289966.0,"Objects":[{"StartTime":289966.0,"Position":195.0}]},{"StartTime":290081.0,"Objects":[{"StartTime":290081.0,"Position":195.0},{"StartTime":290178.0,"Position":178.194183},{"StartTime":290311.0,"Position":205.152008}]},{"StartTime":290427.0,"Objects":[{"StartTime":290427.0,"Position":365.0},{"StartTime":290542.0,"Position":272.528137}]},{"StartTime":290658.0,"Objects":[{"StartTime":290658.0,"Position":375.0},{"StartTime":290773.0,"Position":467.471863}]},{"StartTime":290889.0,"Objects":[{"StartTime":290889.0,"Position":505.0},{"StartTime":290986.0,"Position":512.0},{"StartTime":291119.0,"Position":486.800751}]},{"StartTime":291235.0,"Objects":[{"StartTime":291235.0,"Position":408.0},{"StartTime":291332.0,"Position":343.1368},{"StartTime":291465.0,"Position":225.277878}]},{"StartTime":291581.0,"Objects":[{"StartTime":291581.0,"Position":155.0},{"StartTime":291696.0,"Position":62.8730278}]},{"StartTime":291812.0,"Objects":[{"StartTime":291812.0,"Position":245.0},{"StartTime":291909.0,"Position":290.813446},{"StartTime":292042.0,"Position":259.524231}]},{"StartTime":292158.0,"Objects":[{"StartTime":292158.0,"Position":186.0}]},{"StartTime":292273.0,"Objects":[{"StartTime":292273.0,"Position":0.0},{"StartTime":292341.0,"Position":64.8035},{"StartTime":292446.0,"Position":139.426544}]},{"StartTime":292504.0,"Objects":[{"StartTime":292504.0,"Position":179.0},{"StartTime":292619.0,"Position":86.0954742}]},{"StartTime":292735.0,"Objects":[{"StartTime":292735.0,"Position":43.0},{"StartTime":292850.0,"Position":135.777985}]},{"StartTime":292966.0,"Objects":[{"StartTime":292966.0,"Position":378.0},{"StartTime":293063.0,"Position":316.065125},{"StartTime":293196.0,"Position":218.297974}]},{"StartTime":293312.0,"Objects":[{"StartTime":293312.0,"Position":132.0}]},{"StartTime":293427.0,"Objects":[{"StartTime":293427.0,"Position":227.0},{"StartTime":293542.0,"Position":210.002319}]},{"StartTime":293658.0,"Objects":[{"StartTime":293658.0,"Position":147.0}]},{"StartTime":293773.0,"Objects":[{"StartTime":293773.0,"Position":132.0}]},{"StartTime":293889.0,"Objects":[{"StartTime":293889.0,"Position":285.0},{"StartTime":294004.0,"Position":377.143}]},{"StartTime":294120.0,"Objects":[{"StartTime":294120.0,"Position":450.0}]},{"StartTime":294235.0,"Objects":[{"StartTime":294235.0,"Position":363.0}]},{"StartTime":294350.0,"Objects":[{"StartTime":294350.0,"Position":334.0}]},{"StartTime":294466.0,"Objects":[{"StartTime":294466.0,"Position":441.0}]},{"StartTime":294581.0,"Objects":[{"StartTime":294581.0,"Position":303.0},{"StartTime":294638.0,"Position":257.591858},{"StartTime":294696.0,"Position":303.0},{"StartTime":294754.0,"Position":257.591858}]},{"StartTime":294812.0,"Objects":[{"StartTime":294812.0,"Position":204.0},{"StartTime":294869.0,"Position":158.763885},{"StartTime":294927.0,"Position":204.0},{"StartTime":294985.0,"Position":158.763885}]},{"StartTime":295043.0,"Objects":[{"StartTime":295043.0,"Position":80.0}]},{"StartTime":295100.0,"Objects":[{"StartTime":295100.0,"Position":45.0}]},{"StartTime":295158.0,"Objects":[{"StartTime":295158.0,"Position":26.0}]},{"StartTime":295216.0,"Objects":[{"StartTime":295216.0,"Position":18.0}]},{"StartTime":295273.0,"Objects":[{"StartTime":295273.0,"Position":22.0}]},{"StartTime":295331.0,"Objects":[{"StartTime":295331.0,"Position":39.0}]},{"StartTime":295389.0,"Objects":[{"StartTime":295389.0,"Position":71.0}]},{"StartTime":295447.0,"Objects":[{"StartTime":295447.0,"Position":116.0}]},{"StartTime":295504.0,"Objects":[{"StartTime":295504.0,"Position":168.0},{"StartTime":295601.0,"Position":239.686127},{"StartTime":295734.0,"Position":352.204224}]},{"StartTime":295850.0,"Objects":[{"StartTime":295850.0,"Position":444.0}]},{"StartTime":295966.0,"Objects":[{"StartTime":295966.0,"Position":338.0},{"StartTime":296063.0,"Position":245.313873},{"StartTime":296196.0,"Position":153.795792}]},{"StartTime":296312.0,"Objects":[{"StartTime":296312.0,"Position":54.0}]},{"StartTime":296427.0,"Objects":[{"StartTime":296427.0,"Position":152.0},{"StartTime":296542.0,"Position":244.270477}]},{"StartTime":296658.0,"Objects":[{"StartTime":296658.0,"Position":499.0},{"StartTime":296726.0,"Position":446.291138},{"StartTime":296831.0,"Position":375.8472}]},{"StartTime":296889.0,"Objects":[{"StartTime":296889.0,"Position":338.0},{"StartTime":297004.0,"Position":327.5102}]},{"StartTime":297120.0,"Objects":[{"StartTime":297120.0,"Position":420.0}]},{"StartTime":297235.0,"Objects":[{"StartTime":297235.0,"Position":397.0}]},{"StartTime":297350.0,"Objects":[{"StartTime":297350.0,"Position":240.0},{"StartTime":297447.0,"Position":176.986374},{"StartTime":297580.0,"Position":62.06865}]},{"StartTime":297697.0,"Objects":[{"StartTime":297697.0,"Position":143.0},{"StartTime":297794.0,"Position":218.013626},{"StartTime":297927.0,"Position":320.931335}]},{"StartTime":298043.0,"Objects":[{"StartTime":298043.0,"Position":150.0},{"StartTime":298158.0,"Position":57.6743}]},{"StartTime":298273.0,"Objects":[{"StartTime":298273.0,"Position":264.0},{"StartTime":298370.0,"Position":350.144684},{"StartTime":298503.0,"Position":443.095062}]},{"StartTime":298620.0,"Objects":[{"StartTime":298620.0,"Position":306.0},{"StartTime":298735.0,"Position":275.675659}]},{"StartTime":298850.0,"Objects":[{"StartTime":298850.0,"Position":443.0}]},{"StartTime":298966.0,"Objects":[{"StartTime":298966.0,"Position":321.0}]},{"StartTime":299081.0,"Objects":[{"StartTime":299081.0,"Position":390.0}]},{"StartTime":299197.0,"Objects":[{"StartTime":299197.0,"Position":465.0},{"StartTime":299294.0,"Position":400.31842},{"StartTime":299427.0,"Position":289.129517}]},{"StartTime":299543.0,"Objects":[{"StartTime":299543.0,"Position":75.0}]},{"StartTime":299658.0,"Objects":[{"StartTime":299658.0,"Position":75.0},{"StartTime":299755.0,"Position":132.64238},{"StartTime":299888.0,"Position":228.278809}]},{"StartTime":300004.0,"Objects":[{"StartTime":300004.0,"Position":214.0}]},{"StartTime":300120.0,"Objects":[{"StartTime":300120.0,"Position":214.0},{"StartTime":300235.0,"Position":197.563568}]},{"StartTime":300350.0,"Objects":[{"StartTime":300350.0,"Position":325.0},{"StartTime":300418.0,"Position":310.842072},{"StartTime":300523.0,"Position":306.7894}]},{"StartTime":300581.0,"Objects":[{"StartTime":300581.0,"Position":332.0},{"StartTime":300696.0,"Position":239.2482}]},{"StartTime":300812.0,"Objects":[{"StartTime":300812.0,"Position":391.0},{"StartTime":300927.0,"Position":483.7518}]},{"StartTime":301043.0,"Objects":[{"StartTime":301043.0,"Position":237.0},{"StartTime":301140.0,"Position":172.93544},{"StartTime":301273.0,"Position":51.8984833}]},{"StartTime":301389.0,"Objects":[{"StartTime":301389.0,"Position":0.0}]},{"StartTime":301504.0,"Objects":[{"StartTime":301504.0,"Position":53.0},{"StartTime":301601.0,"Position":130.06456},{"StartTime":301734.0,"Position":238.101517}]},{"StartTime":301850.0,"Objects":[{"StartTime":301850.0,"Position":290.0}]},{"StartTime":301966.0,"Objects":[{"StartTime":301966.0,"Position":237.0},{"StartTime":302081.0,"Position":144.5551}]},{"StartTime":302197.0,"Objects":[{"StartTime":302197.0,"Position":348.0},{"StartTime":302312.0,"Position":440.4449}]},{"StartTime":302427.0,"Objects":[{"StartTime":302427.0,"Position":482.0},{"StartTime":302524.0,"Position":437.840454},{"StartTime":302657.0,"Position":332.600861}]},{"StartTime":302773.0,"Objects":[{"StartTime":302773.0,"Position":212.0}]},{"StartTime":302889.0,"Objects":[{"StartTime":302889.0,"Position":296.0},{"StartTime":303004.0,"Position":307.855774}]},{"StartTime":303120.0,"Objects":[{"StartTime":303120.0,"Position":144.0},{"StartTime":303235.0,"Position":132.144226}]},{"StartTime":303350.0,"Objects":[{"StartTime":303350.0,"Position":289.0},{"StartTime":303447.0,"Position":229.60788},{"StartTime":303580.0,"Position":112.767624}]},{"StartTime":303697.0,"Objects":[{"StartTime":303697.0,"Position":42.0}]},{"StartTime":303812.0,"Objects":[{"StartTime":303812.0,"Position":132.0},{"StartTime":303909.0,"Position":162.866043},{"StartTime":304042.0,"Position":163.28009}]},{"StartTime":304158.0,"Objects":[{"StartTime":304158.0,"Position":68.0}]},{"StartTime":304273.0,"Objects":[{"StartTime":304273.0,"Position":68.0},{"StartTime":304388.0,"Position":48.7815}]},{"StartTime":304504.0,"Objects":[{"StartTime":304504.0,"Position":269.0},{"StartTime":304619.0,"Position":288.2185}]},{"StartTime":304735.0,"Objects":[{"StartTime":304735.0,"Position":163.0},{"StartTime":304832.0,"Position":158.374649},{"StartTime":304965.0,"Position":181.006531}]},{"StartTime":305081.0,"Objects":[{"StartTime":305081.0,"Position":146.0},{"StartTime":305178.0,"Position":209.810577},{"StartTime":305311.0,"Position":311.379}]},{"StartTime":305427.0,"Objects":[{"StartTime":305427.0,"Position":378.0}]},{"StartTime":305543.0,"Objects":[{"StartTime":305543.0,"Position":470.0}]},{"StartTime":305658.0,"Objects":[{"StartTime":305658.0,"Position":403.0},{"StartTime":305755.0,"Position":410.545776},{"StartTime":305888.0,"Position":420.897156}]},{"StartTime":306004.0,"Objects":[{"StartTime":306004.0,"Position":353.0}]},{"StartTime":306120.0,"Objects":[{"StartTime":306120.0,"Position":248.0},{"StartTime":306235.0,"Position":334.8469}]},{"StartTime":306350.0,"Objects":[{"StartTime":306350.0,"Position":178.0},{"StartTime":306465.0,"Position":91.48886}]},{"StartTime":306581.0,"Objects":[{"StartTime":306581.0,"Position":67.0},{"StartTime":306696.0,"Position":50.63526}]},{"StartTime":306812.0,"Objects":[{"StartTime":306812.0,"Position":101.0}]},{"StartTime":306927.0,"Objects":[{"StartTime":306927.0,"Position":196.0}]},{"StartTime":307043.0,"Objects":[{"StartTime":307043.0,"Position":148.0},{"StartTime":307140.0,"Position":193.814041},{"StartTime":307273.0,"Position":316.875061}]},{"StartTime":307389.0,"Objects":[{"StartTime":307389.0,"Position":395.0}]},{"StartTime":307504.0,"Objects":[{"StartTime":307504.0,"Position":327.0},{"StartTime":307619.0,"Position":308.544983}]},{"StartTime":307735.0,"Objects":[{"StartTime":307735.0,"Position":379.0},{"StartTime":307850.0,"Position":397.455017}]},{"StartTime":307966.0,"Objects":[{"StartTime":307966.0,"Position":511.0},{"StartTime":308081.0,"Position":488.880981}]},{"StartTime":308197.0,"Objects":[{"StartTime":308197.0,"Position":473.0},{"StartTime":308312.0,"Position":495.201874}]},{"StartTime":308427.0,"Objects":[{"StartTime":308427.0,"Position":512.0}]},{"StartTime":308543.0,"Objects":[{"StartTime":308543.0,"Position":418.0}]},{"StartTime":308658.0,"Objects":[{"StartTime":308658.0,"Position":375.0}]},{"StartTime":308889.0,"Objects":[{"StartTime":308889.0,"Position":379.0}]},{"StartTime":309004.0,"Objects":[{"StartTime":309004.0,"Position":281.0}]},{"StartTime":309062.0,"Objects":[{"StartTime":309062.0,"Position":275.0}]},{"StartTime":309120.0,"Objects":[{"StartTime":309120.0,"Position":271.0}]},{"StartTime":309177.0,"Objects":[{"StartTime":309177.0,"Position":268.0}]},{"StartTime":309235.0,"Objects":[{"StartTime":309235.0,"Position":265.0}]},{"StartTime":309293.0,"Objects":[{"StartTime":309293.0,"Position":264.0}]},{"StartTime":309350.0,"Objects":[{"StartTime":309350.0,"Position":263.0}]},{"StartTime":309408.0,"Objects":[{"StartTime":309408.0,"Position":233.0}]},{"StartTime":309466.0,"Objects":[{"StartTime":309466.0,"Position":189.0}]},{"StartTime":309523.0,"Objects":[{"StartTime":309523.0,"Position":142.0}]},{"StartTime":309581.0,"Objects":[{"StartTime":309581.0,"Position":105.0}]},{"StartTime":309639.0,"Objects":[{"StartTime":309639.0,"Position":86.0}]},{"StartTime":309697.0,"Objects":[{"StartTime":309697.0,"Position":90.0}]},{"StartTime":309754.0,"Objects":[{"StartTime":309754.0,"Position":122.0}]},{"StartTime":309812.0,"Objects":[{"StartTime":309812.0,"Position":169.0},{"StartTime":309869.0,"Position":215.4298}]},{"StartTime":309927.0,"Objects":[{"StartTime":309927.0,"Position":263.0},{"StartTime":309984.0,"Position":309.429779}]},{"StartTime":310043.0,"Objects":[{"StartTime":310043.0,"Position":361.0},{"StartTime":310100.0,"Position":407.429779}]},{"StartTime":310158.0,"Objects":[{"StartTime":310158.0,"Position":495.0}]},{"StartTime":310216.0,"Objects":[{"StartTime":310216.0,"Position":495.0}]},{"StartTime":310273.0,"Objects":[{"StartTime":310273.0,"Position":495.0},{"StartTime":310370.0,"Position":494.433838},{"StartTime":310503.0,"Position":481.801849}]},{"StartTime":310620.0,"Objects":[{"StartTime":310620.0,"Position":428.0}]},{"StartTime":310735.0,"Objects":[{"StartTime":310735.0,"Position":316.0},{"StartTime":310832.0,"Position":316.4694},{"StartTime":310965.0,"Position":328.9687}]},{"StartTime":311081.0,"Objects":[{"StartTime":311081.0,"Position":242.0}]},{"StartTime":311197.0,"Objects":[{"StartTime":311197.0,"Position":316.0},{"StartTime":311312.0,"Position":402.284546}]},{"StartTime":311427.0,"Objects":[{"StartTime":311427.0,"Position":481.0}]},{"StartTime":311658.0,"Objects":[{"StartTime":311658.0,"Position":481.0},{"StartTime":311773.0,"Position":486.955963}]},{"StartTime":311889.0,"Objects":[{"StartTime":311889.0,"Position":495.0}]},{"StartTime":312004.0,"Objects":[{"StartTime":312004.0,"Position":316.0}]},{"StartTime":312120.0,"Objects":[{"StartTime":312120.0,"Position":428.0},{"StartTime":312217.0,"Position":341.799774},{"StartTime":312350.0,"Position":247.0695}]},{"StartTime":312466.0,"Objects":[{"StartTime":312466.0,"Position":157.0}]},{"StartTime":312581.0,"Objects":[{"StartTime":312581.0,"Position":61.0},{"StartTime":312696.0,"Position":73.8031}]},{"StartTime":312812.0,"Objects":[{"StartTime":312812.0,"Position":214.0},{"StartTime":312927.0,"Position":201.1969}]},{"StartTime":313043.0,"Objects":[{"StartTime":313043.0,"Position":90.0}]},{"StartTime":313158.0,"Objects":[{"StartTime":313158.0,"Position":146.0}]},{"StartTime":313273.0,"Objects":[{"StartTime":313273.0,"Position":288.0},{"StartTime":313388.0,"Position":304.056061}]},{"StartTime":313504.0,"Objects":[{"StartTime":313504.0,"Position":129.0},{"StartTime":313619.0,"Position":145.8128}]},{"StartTime":313735.0,"Objects":[{"StartTime":313735.0,"Position":178.0},{"StartTime":313850.0,"Position":89.88275}]},{"StartTime":313966.0,"Objects":[{"StartTime":313966.0,"Position":357.0},{"StartTime":314063.0,"Position":421.669067},{"StartTime":314196.0,"Position":510.901}]},{"StartTime":314312.0,"Objects":[{"StartTime":314312.0,"Position":490.0}]},{"StartTime":314427.0,"Objects":[{"StartTime":314427.0,"Position":465.0},{"StartTime":314542.0,"Position":372.772156}]},{"StartTime":314658.0,"Objects":[{"StartTime":314658.0,"Position":264.0},{"StartTime":314773.0,"Position":356.227844}]},{"StartTime":314889.0,"Objects":[{"StartTime":314889.0,"Position":201.0},{"StartTime":314957.0,"Position":142.767838},{"StartTime":315062.0,"Position":73.42414}]},{"StartTime":315120.0,"Objects":[{"StartTime":315120.0,"Position":32.0},{"StartTime":315235.0,"Position":25.1291542}]},{"StartTime":315350.0,"Objects":[{"StartTime":315350.0,"Position":258.0},{"StartTime":315447.0,"Position":246.790787},{"StartTime":315580.0,"Position":213.486267}]},{"StartTime":315697.0,"Objects":[{"StartTime":315697.0,"Position":262.0}]},{"StartTime":315812.0,"Objects":[{"StartTime":315812.0,"Position":353.0},{"StartTime":315927.0,"Position":371.1887}]},{"StartTime":316043.0,"Objects":[{"StartTime":316043.0,"Position":262.0},{"StartTime":316158.0,"Position":243.811325}]},{"StartTime":316273.0,"Objects":[{"StartTime":316273.0,"Position":372.0},{"StartTime":316388.0,"Position":464.0676}]},{"StartTime":316504.0,"Objects":[{"StartTime":316504.0,"Position":213.0},{"StartTime":316619.0,"Position":120.9324}]},{"StartTime":316735.0,"Objects":[{"StartTime":316735.0,"Position":36.0},{"StartTime":316832.0,"Position":120.081963},{"StartTime":316965.0,"Position":103.725967}]},{"StartTime":317081.0,"Objects":[{"StartTime":317081.0,"Position":37.0}]},{"StartTime":317197.0,"Objects":[{"StartTime":317197.0,"Position":37.0},{"StartTime":317294.0,"Position":13.7582474},{"StartTime":317427.0,"Position":120.612343}]},{"StartTime":317543.0,"Objects":[{"StartTime":317543.0,"Position":334.0}]},{"StartTime":317600.0,"Objects":[{"StartTime":317600.0,"Position":334.0}]},{"StartTime":317658.0,"Objects":[{"StartTime":317658.0,"Position":334.0},{"StartTime":317755.0,"Position":264.838531},{"StartTime":317888.0,"Position":180.6072}]},{"StartTime":318004.0,"Objects":[{"StartTime":318004.0,"Position":207.0}]},{"StartTime":318120.0,"Objects":[{"StartTime":318120.0,"Position":387.0},{"StartTime":318235.0,"Position":385.330536}]},{"StartTime":318350.0,"Objects":[{"StartTime":318350.0,"Position":491.0},{"StartTime":318465.0,"Position":492.6695}]},{"StartTime":318581.0,"Objects":[{"StartTime":318581.0,"Position":222.0},{"StartTime":318678.0,"Position":308.818359},{"StartTime":318811.0,"Position":407.656677}]},{"StartTime":318927.0,"Objects":[{"StartTime":318927.0,"Position":491.0}]},{"StartTime":319043.0,"Objects":[{"StartTime":319043.0,"Position":304.0},{"StartTime":319140.0,"Position":208.180573},{"StartTime":319273.0,"Position":118.342148}]},{"StartTime":319389.0,"Objects":[{"StartTime":319389.0,"Position":35.0}]},{"StartTime":319504.0,"Objects":[{"StartTime":319504.0,"Position":197.0},{"StartTime":319601.0,"Position":255.872513},{"StartTime":319734.0,"Position":231.314728}]},{"StartTime":319966.0,"Objects":[{"StartTime":319966.0,"Position":231.0},{"StartTime":320081.0,"Position":323.294769}]},{"StartTime":320197.0,"Objects":[{"StartTime":320197.0,"Position":501.0},{"StartTime":320312.0,"Position":408.931366}]},{"StartTime":320427.0,"Objects":[{"StartTime":320427.0,"Position":152.0},{"StartTime":320524.0,"Position":100.127495},{"StartTime":320657.0,"Position":117.685287}]},{"StartTime":320773.0,"Objects":[{"StartTime":320773.0,"Position":143.0}]},{"StartTime":320889.0,"Objects":[{"StartTime":320889.0,"Position":221.0},{"StartTime":321004.0,"Position":206.995148}]},{"StartTime":321120.0,"Objects":[{"StartTime":321120.0,"Position":63.0},{"StartTime":321235.0,"Position":49.1510544}]},{"StartTime":321350.0,"Objects":[{"StartTime":321350.0,"Position":340.0},{"StartTime":321407.0,"Position":324.524963},{"StartTime":321465.0,"Position":301.092224},{"StartTime":321522.0,"Position":289.045624},{"StartTime":321580.0,"Position":230.214066},{"StartTime":321677.0,"Position":323.128571},{"StartTime":321811.0,"Position":340.0}]},{"StartTime":321927.0,"Objects":[{"StartTime":321927.0,"Position":173.0}]},{"StartTime":322043.0,"Objects":[{"StartTime":322043.0,"Position":143.0},{"StartTime":322158.0,"Position":152.3036}]},{"StartTime":322273.0,"Objects":[{"StartTime":322273.0,"Position":400.0},{"StartTime":322388.0,"Position":409.3036}]},{"StartTime":322504.0,"Objects":[{"StartTime":322504.0,"Position":257.0},{"StartTime":322619.0,"Position":332.878479}]},{"StartTime":322735.0,"Objects":[{"StartTime":322735.0,"Position":512.0},{"StartTime":322850.0,"Position":426.4768}]},{"StartTime":322966.0,"Objects":[{"StartTime":322966.0,"Position":256.0}]},{"StartTime":323081.0,"Objects":[{"StartTime":323081.0,"Position":170.0}]},{"StartTime":323197.0,"Objects":[{"StartTime":323197.0,"Position":100.0},{"StartTime":323312.0,"Position":6.62146759}]},{"StartTime":323427.0,"Objects":[{"StartTime":323427.0,"Position":152.0},{"StartTime":323542.0,"Position":245.37854}]},{"StartTime":323658.0,"Objects":[{"StartTime":323658.0,"Position":93.0},{"StartTime":323773.0,"Position":0.0}]},{"StartTime":323888.0,"Objects":[{"StartTime":323888.0,"Position":145.0},{"StartTime":324003.0,"Position":238.37854}]},{"StartTime":324120.0,"Objects":[{"StartTime":324120.0,"Position":82.0}]},{"StartTime":324177.0,"Objects":[{"StartTime":324177.0,"Position":69.0}]},{"StartTime":324235.0,"Objects":[{"StartTime":324235.0,"Position":60.0}]},{"StartTime":324293.0,"Objects":[{"StartTime":324293.0,"Position":54.0}]},{"StartTime":324350.0,"Objects":[{"StartTime":324350.0,"Position":52.0}]},{"StartTime":324408.0,"Objects":[{"StartTime":324408.0,"Position":54.0}]},{"StartTime":324466.0,"Objects":[{"StartTime":324466.0,"Position":60.0}]},{"StartTime":324523.0,"Objects":[{"StartTime":324523.0,"Position":70.0}]},{"StartTime":324581.0,"Objects":[{"StartTime":324581.0,"Position":82.0}]},{"StartTime":324638.0,"Objects":[{"StartTime":324638.0,"Position":136.0}]},{"StartTime":324696.0,"Objects":[{"StartTime":324696.0,"Position":176.0}]},{"StartTime":324754.0,"Objects":[{"StartTime":324754.0,"Position":185.0}]},{"StartTime":324811.0,"Objects":[{"StartTime":324811.0,"Position":157.0}]},{"StartTime":324870.0,"Objects":[{"StartTime":324870.0,"Position":129.0}]},{"StartTime":324927.0,"Objects":[{"StartTime":324927.0,"Position":137.0}]},{"StartTime":324985.0,"Objects":[{"StartTime":324985.0,"Position":177.0}]},{"StartTime":325043.0,"Objects":[{"StartTime":325043.0,"Position":232.0},{"StartTime":325140.0,"Position":309.819427},{"StartTime":325273.0,"Position":417.921875}]},{"StartTime":325389.0,"Objects":[{"StartTime":325389.0,"Position":485.0}]},{"StartTime":325504.0,"Objects":[{"StartTime":325504.0,"Position":267.0},{"StartTime":325601.0,"Position":191.180573},{"StartTime":325734.0,"Position":81.07812}]},{"StartTime":325850.0,"Objects":[{"StartTime":325850.0,"Position":14.0}]},{"StartTime":325966.0,"Objects":[{"StartTime":325966.0,"Position":323.0},{"StartTime":326081.0,"Position":330.8841}]},{"StartTime":326197.0,"Objects":[{"StartTime":326197.0,"Position":250.0}]},{"StartTime":326427.0,"Objects":[{"StartTime":326427.0,"Position":250.0},{"StartTime":326542.0,"Position":240.312836}]},{"StartTime":326658.0,"Objects":[{"StartTime":326658.0,"Position":426.0},{"StartTime":326773.0,"Position":434.638153}]},{"StartTime":326889.0,"Objects":[{"StartTime":326889.0,"Position":82.0},{"StartTime":326986.0,"Position":160.843857},{"StartTime":327119.0,"Position":266.5864}]},{"StartTime":327235.0,"Objects":[{"StartTime":327235.0,"Position":511.0}]},{"StartTime":327350.0,"Objects":[{"StartTime":327350.0,"Position":449.0},{"StartTime":327465.0,"Position":355.981232}]},{"StartTime":327581.0,"Objects":[{"StartTime":327581.0,"Position":332.0},{"StartTime":327696.0,"Position":425.018768}]},{"StartTime":327812.0,"Objects":[{"StartTime":327812.0,"Position":505.0}]},{"StartTime":327927.0,"Objects":[{"StartTime":327927.0,"Position":304.0}]},{"StartTime":328043.0,"Objects":[{"StartTime":328043.0,"Position":323.0},{"StartTime":328158.0,"Position":333.2415}]},{"StartTime":328273.0,"Objects":[{"StartTime":328273.0,"Position":155.0},{"StartTime":328388.0,"Position":144.758514}]},{"StartTime":328504.0,"Objects":[{"StartTime":328504.0,"Position":248.0},{"StartTime":328619.0,"Position":154.981232}]},{"StartTime":328735.0,"Objects":[{"StartTime":328735.0,"Position":242.0},{"StartTime":328832.0,"Position":333.760437},{"StartTime":328965.0,"Position":425.4981}]},{"StartTime":329081.0,"Objects":[{"StartTime":329081.0,"Position":503.0}]},{"StartTime":329197.0,"Objects":[{"StartTime":329197.0,"Position":442.0},{"StartTime":329312.0,"Position":433.993866}]},{"StartTime":329427.0,"Objects":[{"StartTime":329427.0,"Position":323.0},{"StartTime":329542.0,"Position":330.1165}]},{"StartTime":329658.0,"Objects":[{"StartTime":329658.0,"Position":155.0},{"StartTime":329726.0,"Position":175.485352},{"StartTime":329831.0,"Position":168.9554}]},{"StartTime":329889.0,"Objects":[{"StartTime":329889.0,"Position":168.0},{"StartTime":330004.0,"Position":87.631546}]},{"StartTime":330120.0,"Objects":[{"StartTime":330120.0,"Position":229.0},{"StartTime":330235.0,"Position":321.9641}]},{"StartTime":330350.0,"Objects":[{"StartTime":330350.0,"Position":137.0},{"StartTime":330465.0,"Position":44.0246429}]},{"StartTime":330581.0,"Objects":[{"StartTime":330581.0,"Position":309.0},{"StartTime":330649.0,"Position":324.6894},{"StartTime":330754.0,"Position":413.2007}]},{"StartTime":330812.0,"Objects":[{"StartTime":330812.0,"Position":415.0},{"StartTime":330927.0,"Position":421.031}]},{"StartTime":331043.0,"Objects":[{"StartTime":331043.0,"Position":512.0},{"StartTime":331158.0,"Position":502.003845}]},{"StartTime":331273.0,"Objects":[{"StartTime":331273.0,"Position":330.0},{"StartTime":331388.0,"Position":338.911377}]},{"StartTime":331504.0,"Objects":[{"StartTime":331504.0,"Position":512.0},{"StartTime":331572.0,"Position":456.185364},{"StartTime":331677.0,"Position":385.767517}]},{"StartTime":331735.0,"Objects":[{"StartTime":331735.0,"Position":385.0},{"StartTime":331850.0,"Position":292.024658}]},{"StartTime":331966.0,"Objects":[{"StartTime":331966.0,"Position":62.0}]},{"StartTime":332081.0,"Objects":[{"StartTime":332081.0,"Position":161.0}]},{"StartTime":332138.0,"Objects":[{"StartTime":332138.0,"Position":162.0}]},{"StartTime":332196.0,"Objects":[{"StartTime":332196.0,"Position":140.0}]},{"StartTime":332254.0,"Objects":[{"StartTime":332254.0,"Position":101.0}]},{"StartTime":332312.0,"Objects":[{"StartTime":332312.0,"Position":73.0}]},{"StartTime":332370.0,"Objects":[{"StartTime":332370.0,"Position":73.0}]},{"StartTime":332427.0,"Objects":[{"StartTime":332427.0,"Position":96.0},{"StartTime":332524.0,"Position":183.878708},{"StartTime":332657.0,"Position":265.196472}]},{"StartTime":332773.0,"Objects":[{"StartTime":332773.0,"Position":337.0}]},{"StartTime":332889.0,"Objects":[{"StartTime":332889.0,"Position":421.0},{"StartTime":333004.0,"Position":418.8342}]},{"StartTime":333120.0,"Objects":[{"StartTime":333120.0,"Position":215.0},{"StartTime":333235.0,"Position":216.580368}]},{"StartTime":333350.0,"Objects":[{"StartTime":333350.0,"Position":344.0},{"StartTime":333418.0,"Position":323.561249},{"StartTime":333523.0,"Position":336.286469}]},{"StartTime":333581.0,"Objects":[{"StartTime":333581.0,"Position":337.0},{"StartTime":333696.0,"Position":429.627045}]},{"StartTime":333812.0,"Objects":[{"StartTime":333812.0,"Position":498.0},{"StartTime":333927.0,"Position":420.656433}]},{"StartTime":334043.0,"Objects":[{"StartTime":334043.0,"Position":292.0},{"StartTime":334158.0,"Position":213.406525}]},{"StartTime":334273.0,"Objects":[{"StartTime":334273.0,"Position":32.0},{"StartTime":334370.0,"Position":107.732246},{"StartTime":334503.0,"Position":214.972687}]},{"StartTime":334735.0,"Objects":[{"StartTime":334735.0,"Position":214.0},{"StartTime":334850.0,"Position":199.81752}]},{"StartTime":334966.0,"Objects":[{"StartTime":334966.0,"Position":306.0},{"StartTime":335081.0,"Position":291.648315}]},{"StartTime":335197.0,"Objects":[{"StartTime":335197.0,"Position":72.0},{"StartTime":335294.0,"Position":111.130783},{"StartTime":335427.0,"Position":216.634521}]},{"StartTime":335543.0,"Objects":[{"StartTime":335543.0,"Position":291.0}]},{"StartTime":335658.0,"Objects":[{"StartTime":335658.0,"Position":498.0},{"StartTime":335755.0,"Position":417.054535},{"StartTime":335888.0,"Position":314.288574}]},{"StartTime":336004.0,"Objects":[{"StartTime":336004.0,"Position":221.0}]},{"StartTime":336120.0,"Objects":[{"StartTime":336120.0,"Position":10.0},{"StartTime":336188.0,"Position":66.7611542},{"StartTime":336293.0,"Position":143.863708}]},{"StartTime":336350.0,"Objects":[{"StartTime":336350.0,"Position":143.0},{"StartTime":336465.0,"Position":112.3037}]},{"StartTime":336581.0,"Objects":[{"StartTime":336581.0,"Position":277.0},{"StartTime":336696.0,"Position":221.2786}]},{"StartTime":336812.0,"Objects":[{"StartTime":336812.0,"Position":41.0},{"StartTime":336927.0,"Position":128.285}]},{"StartTime":337043.0,"Objects":[{"StartTime":337043.0,"Position":223.0}]},{"StartTime":337100.0,"Objects":[{"StartTime":337100.0,"Position":221.0}]},{"StartTime":337158.0,"Objects":[{"StartTime":337158.0,"Position":219.0}]},{"StartTime":337216.0,"Objects":[{"StartTime":337216.0,"Position":217.0}]},{"StartTime":337273.0,"Objects":[{"StartTime":337273.0,"Position":215.0}]},{"StartTime":337331.0,"Objects":[{"StartTime":337331.0,"Position":213.0}]},{"StartTime":337389.0,"Objects":[{"StartTime":337389.0,"Position":211.0}]},{"StartTime":337446.0,"Objects":[{"StartTime":337446.0,"Position":209.0}]},{"StartTime":337504.0,"Objects":[{"StartTime":337504.0,"Position":208.0}]},{"StartTime":337561.0,"Objects":[{"StartTime":337561.0,"Position":258.0}]},{"StartTime":337619.0,"Objects":[{"StartTime":337619.0,"Position":283.0}]},{"StartTime":337677.0,"Objects":[{"StartTime":337677.0,"Position":270.0}]},{"StartTime":337734.0,"Objects":[{"StartTime":337734.0,"Position":227.0}]},{"StartTime":337793.0,"Objects":[{"StartTime":337793.0,"Position":183.0}]},{"StartTime":337851.0,"Objects":[{"StartTime":337851.0,"Position":170.0}]},{"StartTime":337909.0,"Objects":[{"StartTime":337909.0,"Position":195.0}]},{"StartTime":337966.0,"Objects":[{"StartTime":337966.0,"Position":246.0},{"StartTime":338063.0,"Position":315.24115},{"StartTime":338196.0,"Position":430.9931}]},{"StartTime":338312.0,"Objects":[{"StartTime":338312.0,"Position":501.0}]},{"StartTime":338427.0,"Objects":[{"StartTime":338427.0,"Position":266.0},{"StartTime":338524.0,"Position":168.714218},{"StartTime":338657.0,"Position":81.00041}]},{"StartTime":338773.0,"Objects":[{"StartTime":338773.0,"Position":11.0}]},{"StartTime":338889.0,"Objects":[{"StartTime":338889.0,"Position":252.0},{"StartTime":339004.0,"Position":248.010468}]},{"StartTime":339120.0,"Objects":[{"StartTime":339120.0,"Position":425.0},{"StartTime":339235.0,"Position":428.425751}]},{"StartTime":339350.0,"Objects":[{"StartTime":339350.0,"Position":336.0}]},{"StartTime":339407.0,"Objects":[{"StartTime":339407.0,"Position":336.0}]},{"StartTime":339465.0,"Objects":[{"StartTime":339465.0,"Position":337.0}]},{"StartTime":339523.0,"Objects":[{"StartTime":339523.0,"Position":338.0}]},{"StartTime":339580.0,"Objects":[{"StartTime":339580.0,"Position":338.0}]},{"StartTime":339638.0,"Objects":[{"StartTime":339638.0,"Position":339.0}]},{"StartTime":339696.0,"Objects":[{"StartTime":339696.0,"Position":340.0}]},{"StartTime":339753.0,"Objects":[{"StartTime":339753.0,"Position":340.0}]},{"StartTime":339812.0,"Objects":[{"StartTime":339812.0,"Position":340.0},{"StartTime":339909.0,"Position":410.297577},{"StartTime":340042.0,"Position":486.874847}]},{"StartTime":340158.0,"Objects":[{"StartTime":340158.0,"Position":425.0}]},{"StartTime":340273.0,"Objects":[{"StartTime":340273.0,"Position":246.0},{"StartTime":340388.0,"Position":221.6169}]},{"StartTime":340504.0,"Objects":[{"StartTime":340504.0,"Position":56.0},{"StartTime":340619.0,"Position":80.38311}]},{"StartTime":340735.0,"Objects":[{"StartTime":340735.0,"Position":306.0},{"StartTime":340832.0,"Position":318.7602},{"StartTime":340965.0,"Position":321.624359}]},{"StartTime":341081.0,"Objects":[{"StartTime":341081.0,"Position":237.0}]},{"StartTime":341197.0,"Objects":[{"StartTime":341197.0,"Position":340.0},{"StartTime":341312.0,"Position":432.88443}]},{"StartTime":341427.0,"Objects":[{"StartTime":341427.0,"Position":246.0},{"StartTime":341542.0,"Position":153.1035}]},{"StartTime":341658.0,"Objects":[{"StartTime":341658.0,"Position":13.0},{"StartTime":341755.0,"Position":106.829514},{"StartTime":341888.0,"Position":186.088242}]},{"StartTime":342004.0,"Objects":[{"StartTime":342004.0,"Position":241.0}]},{"StartTime":342120.0,"Objects":[{"StartTime":342120.0,"Position":42.0},{"StartTime":342235.0,"Position":50.8947067}]},{"StartTime":342350.0,"Objects":[{"StartTime":342350.0,"Position":162.0},{"StartTime":342465.0,"Position":153.1053}]},{"StartTime":342581.0,"Objects":[{"StartTime":342581.0,"Position":153.0},{"StartTime":342678.0,"Position":244.94281},{"StartTime":342811.0,"Position":336.57074}]},{"StartTime":342927.0,"Objects":[{"StartTime":342927.0,"Position":417.0}]},{"StartTime":343043.0,"Objects":[{"StartTime":343043.0,"Position":306.0},{"StartTime":343140.0,"Position":332.971375},{"StartTime":343273.0,"Position":362.014862}]},{"StartTime":343389.0,"Objects":[{"StartTime":343389.0,"Position":489.0}]},{"StartTime":343447.0,"Objects":[{"StartTime":343447.0,"Position":489.0}]},{"StartTime":343504.0,"Objects":[{"StartTime":343504.0,"Position":489.0},{"StartTime":343601.0,"Position":492.676025},{"StartTime":343734.0,"Position":430.810028}]},{"StartTime":343850.0,"Objects":[{"StartTime":343850.0,"Position":248.0},{"StartTime":343947.0,"Position":231.065659},{"StartTime":344080.0,"Position":303.8333}]},{"StartTime":344197.0,"Objects":[{"StartTime":344197.0,"Position":508.0},{"StartTime":344312.0,"Position":416.056519}]},{"StartTime":344370.0,"Objects":[{"StartTime":344370.0,"Position":401.0}]},{"StartTime":344427.0,"Objects":[{"StartTime":344427.0,"Position":386.0},{"StartTime":344524.0,"Position":311.311249},{"StartTime":344657.0,"Position":199.418442}]},{"StartTime":344773.0,"Objects":[{"StartTime":344773.0,"Position":107.0}]},{"StartTime":344889.0,"Objects":[{"StartTime":344889.0,"Position":122.0},{"StartTime":345004.0,"Position":139.229675}]},{"StartTime":345120.0,"Objects":[{"StartTime":345120.0,"Position":13.0},{"StartTime":345235.0,"Position":28.3985329}]},{"StartTime":345350.0,"Objects":[{"StartTime":345350.0,"Position":200.0},{"StartTime":345465.0,"Position":292.961}]},{"StartTime":345581.0,"Objects":[{"StartTime":345581.0,"Position":396.0},{"StartTime":345696.0,"Position":303.147247}]},{"StartTime":345812.0,"Objects":[{"StartTime":345812.0,"Position":384.0},{"StartTime":345927.0,"Position":372.899719}]},{"StartTime":346043.0,"Objects":[{"StartTime":346043.0,"Position":212.0},{"StartTime":346158.0,"Position":222.0252}]},{"StartTime":346273.0,"Objects":[{"StartTime":346273.0,"Position":512.0},{"StartTime":346341.0,"Position":474.170441},{"StartTime":346446.0,"Position":372.54837}]},{"StartTime":346504.0,"Objects":[{"StartTime":346504.0,"Position":349.0},{"StartTime":346572.0,"Position":308.7748},{"StartTime":346677.0,"Position":251.56488}]},{"StartTime":346735.0,"Objects":[{"StartTime":346735.0,"Position":212.0},{"StartTime":346803.0,"Position":155.574371},{"StartTime":346908.0,"Position":86.40335}]},{"StartTime":346966.0,"Objects":[{"StartTime":346966.0,"Position":27.0},{"StartTime":347081.0,"Position":17.0992432}]},{"StartTime":347197.0,"Objects":[{"StartTime":347197.0,"Position":133.0},{"StartTime":347294.0,"Position":147.489075},{"StartTime":347427.0,"Position":122.304}]},{"StartTime":347543.0,"Objects":[{"StartTime":347543.0,"Position":251.0}]},{"StartTime":347658.0,"Objects":[{"StartTime":347658.0,"Position":311.0},{"StartTime":347773.0,"Position":321.293121}]},{"StartTime":347889.0,"Objects":[{"StartTime":347889.0,"Position":232.0},{"StartTime":348004.0,"Position":221.182831}]},{"StartTime":348120.0,"Objects":[{"StartTime":348120.0,"Position":466.0},{"StartTime":348235.0,"Position":372.7931}]},{"StartTime":348350.0,"Objects":[{"StartTime":348350.0,"Position":228.0},{"StartTime":348465.0,"Position":321.100616}]},{"StartTime":348581.0,"Objects":[{"StartTime":348581.0,"Position":489.0},{"StartTime":348696.0,"Position":395.7931}]},{"StartTime":348811.0,"Objects":[{"StartTime":348811.0,"Position":251.0},{"StartTime":348926.0,"Position":344.100616}]},{"StartTime":348985.0,"Objects":[{"StartTime":348985.0,"Position":360.0}]},{"StartTime":349043.0,"Objects":[{"StartTime":349043.0,"Position":375.0},{"StartTime":349140.0,"Position":443.792},{"StartTime":349273.0,"Position":414.0389}]},{"StartTime":349389.0,"Objects":[{"StartTime":349389.0,"Position":372.0}]},{"StartTime":349504.0,"Objects":[{"StartTime":349504.0,"Position":496.0},{"StartTime":349619.0,"Position":487.986572}]},{"StartTime":349735.0,"Objects":[{"StartTime":349735.0,"Position":328.0},{"StartTime":349850.0,"Position":320.071228}]},{"StartTime":349966.0,"Objects":[{"StartTime":349966.0,"Position":125.0},{"StartTime":350063.0,"Position":192.578873},{"StartTime":350196.0,"Position":284.148956}]},{"StartTime":350312.0,"Objects":[{"StartTime":350312.0,"Position":356.0}]},{"StartTime":350427.0,"Objects":[{"StartTime":350427.0,"Position":227.0},{"StartTime":350524.0,"Position":222.054825},{"StartTime":350657.0,"Position":225.454483}]},{"StartTime":350773.0,"Objects":[{"StartTime":350773.0,"Position":134.0}]},{"StartTime":350889.0,"Objects":[{"StartTime":350889.0,"Position":10.0},{"StartTime":350986.0,"Position":19.6490536},{"StartTime":351119.0,"Position":0.0}]},{"StartTime":351235.0,"Objects":[{"StartTime":351235.0,"Position":51.0}]},{"StartTime":351350.0,"Objects":[{"StartTime":351350.0,"Position":215.0},{"StartTime":351447.0,"Position":216.350952},{"StartTime":351580.0,"Position":225.063126}]},{"StartTime":351812.0,"Objects":[{"StartTime":351812.0,"Position":502.0},{"StartTime":351909.0,"Position":512.0},{"StartTime":352042.0,"Position":512.0}]},{"StartTime":352158.0,"Objects":[{"StartTime":352158.0,"Position":461.0}]},{"StartTime":352273.0,"Objects":[{"StartTime":352273.0,"Position":372.0},{"StartTime":352388.0,"Position":357.579346}]},{"StartTime":352504.0,"Objects":[{"StartTime":352504.0,"Position":440.0},{"StartTime":352619.0,"Position":371.599976}]},{"StartTime":352735.0,"Objects":[{"StartTime":352735.0,"Position":99.0},{"StartTime":352832.0,"Position":176.413208},{"StartTime":352965.0,"Position":284.928223}]},{"StartTime":353081.0,"Objects":[{"StartTime":353081.0,"Position":371.0}]},{"StartTime":353197.0,"Objects":[{"StartTime":353197.0,"Position":450.0},{"StartTime":353312.0,"Position":357.0359}]},{"StartTime":353427.0,"Objects":[{"StartTime":353427.0,"Position":191.0},{"StartTime":353542.0,"Position":283.9525}]},{"StartTime":353658.0,"Objects":[{"StartTime":353658.0,"Position":393.0},{"StartTime":353773.0,"Position":371.820251}]},{"StartTime":353889.0,"Objects":[{"StartTime":353889.0,"Position":489.0},{"StartTime":354004.0,"Position":509.3886}]},{"StartTime":354120.0,"Objects":[{"StartTime":354120.0,"Position":357.0},{"StartTime":354235.0,"Position":371.809753}]},{"StartTime":354350.0,"Objects":[{"StartTime":354350.0,"Position":498.0},{"StartTime":354465.0,"Position":511.787018}]},{"StartTime":354581.0,"Objects":[{"StartTime":354581.0,"Position":512.0},{"StartTime":354678.0,"Position":433.735443},{"StartTime":354811.0,"Position":332.387054}]},{"StartTime":354927.0,"Objects":[{"StartTime":354927.0,"Position":284.0}]},{"StartTime":355043.0,"Objects":[{"StartTime":355043.0,"Position":228.0},{"StartTime":355140.0,"Position":154.237228},{"StartTime":355273.0,"Position":41.2429352}]},{"StartTime":355389.0,"Objects":[{"StartTime":355389.0,"Position":5.0}]},{"StartTime":355504.0,"Objects":[{"StartTime":355504.0,"Position":199.0}]},{"StartTime":355620.0,"Objects":[{"StartTime":355620.0,"Position":110.0}]},{"StartTime":355735.0,"Objects":[{"StartTime":355735.0,"Position":208.0}]},{"StartTime":355851.0,"Objects":[{"StartTime":355851.0,"Position":124.0}]},{"StartTime":355966.0,"Objects":[{"StartTime":355966.0,"Position":211.0}]},{"StartTime":356082.0,"Objects":[{"StartTime":356082.0,"Position":139.0}]},{"StartTime":356197.0,"Objects":[{"StartTime":356197.0,"Position":210.0}]},{"StartTime":356313.0,"Objects":[{"StartTime":356313.0,"Position":153.0}]},{"StartTime":356427.0,"Objects":[{"StartTime":356427.0,"Position":90.0},{"StartTime":356524.0,"Position":164.553955},{"StartTime":356657.0,"Position":276.261963}]},{"StartTime":356773.0,"Objects":[{"StartTime":356773.0,"Position":329.0}]},{"StartTime":356889.0,"Objects":[{"StartTime":356889.0,"Position":450.0},{"StartTime":357004.0,"Position":356.8368}]},{"StartTime":357120.0,"Objects":[{"StartTime":357120.0,"Position":414.0},{"StartTime":357235.0,"Position":507.065216}]},{"StartTime":357350.0,"Objects":[{"StartTime":357350.0,"Position":304.0},{"StartTime":357447.0,"Position":257.5512},{"StartTime":357580.0,"Position":275.4751}]},{"StartTime":357697.0,"Objects":[{"StartTime":357697.0,"Position":329.0}]},{"StartTime":357812.0,"Objects":[{"StartTime":357812.0,"Position":110.0}]},{"StartTime":357927.0,"Objects":[{"StartTime":357927.0,"Position":147.0}]},{"StartTime":358043.0,"Objects":[{"StartTime":358043.0,"Position":93.0}]},{"StartTime":358158.0,"Objects":[{"StartTime":358158.0,"Position":130.0}]},{"StartTime":358273.0,"Objects":[{"StartTime":358273.0,"Position":304.0},{"StartTime":358370.0,"Position":233.446045},{"StartTime":358503.0,"Position":117.738037}]},{"StartTime":358620.0,"Objects":[{"StartTime":358620.0,"Position":30.0}]},{"StartTime":358735.0,"Objects":[{"StartTime":358735.0,"Position":0.0},{"StartTime":358850.0,"Position":93.1559753}]},{"StartTime":358966.0,"Objects":[{"StartTime":358966.0,"Position":218.0},{"StartTime":359081.0,"Position":124.925636}]},{"StartTime":359197.0,"Objects":[{"StartTime":359197.0,"Position":265.0},{"StartTime":359254.0,"Position":307.7012},{"StartTime":359312.0,"Position":353.917175},{"StartTime":359369.0,"Position":405.375458},{"StartTime":359427.0,"Position":449.595276},{"StartTime":359524.0,"Position":361.8959},{"StartTime":359658.0,"Position":265.0}]},{"StartTime":359773.0,"Objects":[{"StartTime":359773.0,"Position":202.0}]},{"StartTime":359889.0,"Objects":[{"StartTime":359889.0,"Position":280.0}]},{"StartTime":360004.0,"Objects":[{"StartTime":360004.0,"Position":218.0}]},{"StartTime":360120.0,"Objects":[{"StartTime":360120.0,"Position":407.0},{"StartTime":360217.0,"Position":394.568481},{"StartTime":360350.0,"Position":387.007721}]},{"StartTime":360466.0,"Objects":[{"StartTime":360466.0,"Position":449.0}]},{"StartTime":360581.0,"Objects":[{"StartTime":360581.0,"Position":304.0},{"StartTime":360696.0,"Position":334.297119}]},{"StartTime":360812.0,"Objects":[{"StartTime":360812.0,"Position":479.0},{"StartTime":360927.0,"Position":448.5207}]},{"StartTime":361043.0,"Objects":[{"StartTime":361043.0,"Position":280.0},{"StartTime":361158.0,"Position":274.4001}]},{"StartTime":361273.0,"Objects":[{"StartTime":361273.0,"Position":193.0},{"StartTime":361388.0,"Position":198.019638}]},{"StartTime":361504.0,"Objects":[{"StartTime":361504.0,"Position":36.0}]},{"StartTime":361620.0,"Objects":[{"StartTime":361620.0,"Position":74.0}]},{"StartTime":361735.0,"Objects":[{"StartTime":361735.0,"Position":8.0}]},{"StartTime":361851.0,"Objects":[{"StartTime":361851.0,"Position":46.0}]},{"StartTime":361966.0,"Objects":[{"StartTime":361966.0,"Position":193.0},{"StartTime":362063.0,"Position":253.493744},{"StartTime":362196.0,"Position":336.945068}]},{"StartTime":362312.0,"Objects":[{"StartTime":362312.0,"Position":280.0}]},{"StartTime":362427.0,"Objects":[{"StartTime":362427.0,"Position":136.0},{"StartTime":362542.0,"Position":136.619537}]},{"StartTime":362658.0,"Objects":[{"StartTime":362658.0,"Position":304.0},{"StartTime":362773.0,"Position":303.383759}]},{"StartTime":362831.0,"Objects":[{"StartTime":362831.0,"Position":291.0}]},{"StartTime":362889.0,"Objects":[{"StartTime":362889.0,"Position":278.0},{"StartTime":362986.0,"Position":361.856934},{"StartTime":363119.0,"Position":464.980377}]},{"StartTime":363235.0,"Objects":[{"StartTime":363235.0,"Position":202.0},{"StartTime":363332.0,"Position":115.143066},{"StartTime":363465.0,"Position":15.0196228}]},{"StartTime":363581.0,"Objects":[{"StartTime":363581.0,"Position":280.0},{"StartTime":363696.0,"Position":373.482361}]},{"StartTime":363812.0,"Objects":[{"StartTime":363812.0,"Position":202.0},{"StartTime":363869.0,"Position":204.681473},{"StartTime":363927.0,"Position":192.147888},{"StartTime":363984.0,"Position":195.312729},{"StartTime":364042.0,"Position":190.085159},{"StartTime":364139.0,"Position":207.269684},{"StartTime":364273.0,"Position":202.0}]},{"StartTime":364389.0,"Objects":[{"StartTime":364389.0,"Position":280.0}]},{"StartTime":364504.0,"Objects":[{"StartTime":364504.0,"Position":136.0},{"StartTime":364619.0,"Position":136.152527}]},{"StartTime":364735.0,"Objects":[{"StartTime":364735.0,"Position":278.0},{"StartTime":364850.0,"Position":276.9106}]},{"StartTime":364966.0,"Objects":[{"StartTime":364966.0,"Position":36.0},{"StartTime":365023.0,"Position":72.85411},{"StartTime":365081.0,"Position":80.545166},{"StartTime":365138.0,"Position":98.44209},{"StartTime":365196.0,"Position":115.732025},{"StartTime":365293.0,"Position":153.141129},{"StartTime":365427.0,"Position":191.452774}]},{"StartTime":365543.0,"Objects":[{"StartTime":365543.0,"Position":277.0}]},{"StartTime":365658.0,"Objects":[{"StartTime":365658.0,"Position":437.0},{"StartTime":365773.0,"Position":464.182739}]},{"StartTime":365889.0,"Objects":[{"StartTime":365889.0,"Position":307.0},{"StartTime":366004.0,"Position":279.817261}]},{"StartTime":366120.0,"Objects":[{"StartTime":366120.0,"Position":374.0}]},{"StartTime":366235.0,"Objects":[{"StartTime":366235.0,"Position":500.0},{"StartTime":366292.0,"Position":497.226868},{"StartTime":366350.0,"Position":512.0},{"StartTime":366465.0,"Position":500.0}]},{"StartTime":366581.0,"Objects":[{"StartTime":366581.0,"Position":374.0},{"StartTime":366696.0,"Position":386.0932}]},{"StartTime":366812.0,"Objects":[{"StartTime":366812.0,"Position":414.0},{"StartTime":366909.0,"Position":355.945374},{"StartTime":367042.0,"Position":267.744141}]},{"StartTime":367158.0,"Objects":[{"StartTime":367158.0,"Position":188.0}]},{"StartTime":367273.0,"Objects":[{"StartTime":367273.0,"Position":117.0},{"StartTime":367388.0,"Position":109.341568}]},{"StartTime":367504.0,"Objects":[{"StartTime":367504.0,"Position":15.0},{"StartTime":367561.0,"Position":67.37976},{"StartTime":367619.0,"Position":116.344025},{"StartTime":367676.0,"Position":143.455261},{"StartTime":367734.0,"Position":196.347961},{"StartTime":367831.0,"Position":272.7755},{"StartTime":367965.0,"Position":378.823}]},{"StartTime":368081.0,"Objects":[{"StartTime":368081.0,"Position":468.0}]},{"StartTime":368197.0,"Objects":[{"StartTime":368197.0,"Position":445.0},{"StartTime":368312.0,"Position":452.021454}]},{"StartTime":368427.0,"Objects":[{"StartTime":368427.0,"Position":356.0},{"StartTime":368524.0,"Position":410.356049},{"StartTime":368657.0,"Position":499.8424}]},{"StartTime":368773.0,"Objects":[{"StartTime":368773.0,"Position":284.0},{"StartTime":368870.0,"Position":222.1471},{"StartTime":369003.0,"Position":140.1095}]},{"StartTime":369120.0,"Objects":[{"StartTime":369120.0,"Position":99.0},{"StartTime":369235.0,"Position":192.2299}]},{"StartTime":369350.0,"Objects":[{"StartTime":369350.0,"Position":378.0},{"StartTime":369447.0,"Position":285.965363},{"StartTime":369580.0,"Position":197.235046}]},{"StartTime":369697.0,"Objects":[{"StartTime":369697.0,"Position":111.0}]},{"StartTime":369812.0,"Objects":[{"StartTime":369812.0,"Position":17.0},{"StartTime":369927.0,"Position":31.7866936}]},{"StartTime":370043.0,"Objects":[{"StartTime":370043.0,"Position":152.0},{"StartTime":370158.0,"Position":138.411133}]},{"StartTime":370273.0,"Objects":[{"StartTime":370273.0,"Position":5.0}]},{"StartTime":370389.0,"Objects":[{"StartTime":370389.0,"Position":58.0}]},{"StartTime":370504.0,"Objects":[{"StartTime":370504.0,"Position":130.0}]},{"StartTime":370620.0,"Objects":[{"StartTime":370620.0,"Position":183.0}]},{"StartTime":370677.0,"Objects":[{"StartTime":370677.0,"Position":187.0}]},{"StartTime":370735.0,"Objects":[{"StartTime":370735.0,"Position":191.0}]},{"StartTime":370793.0,"Objects":[{"StartTime":370793.0,"Position":196.0}]},{"StartTime":370850.0,"Objects":[{"StartTime":370850.0,"Position":200.0}]},{"StartTime":370908.0,"Objects":[{"StartTime":370908.0,"Position":205.0}]},{"StartTime":370966.0,"Objects":[{"StartTime":370966.0,"Position":209.0}]},{"StartTime":371081.0,"Objects":[{"StartTime":371081.0,"Position":111.0}]},{"StartTime":371197.0,"Objects":[{"StartTime":371197.0,"Position":197.0},{"StartTime":371294.0,"Position":257.681274},{"StartTime":371427.0,"Position":383.563843}]},{"StartTime":371658.0,"Objects":[{"StartTime":371658.0,"Position":315.0},{"StartTime":371755.0,"Position":239.318741},{"StartTime":371888.0,"Position":128.436172}]},{"StartTime":372120.0,"Objects":[{"StartTime":372120.0,"Position":457.0},{"StartTime":372217.0,"Position":459.501343},{"StartTime":372350.0,"Position":443.9619}]},{"StartTime":372581.0,"Objects":[{"StartTime":372581.0,"Position":55.0},{"StartTime":372696.0,"Position":61.0197449}]},{"StartTime":372812.0,"Objects":[{"StartTime":372812.0,"Position":68.0}]},{"StartTime":372927.0,"Objects":[{"StartTime":372927.0,"Position":152.0}]},{"StartTime":373043.0,"Objects":[{"StartTime":373043.0,"Position":186.0},{"StartTime":373140.0,"Position":125.318741},{"StartTime":373273.0,"Position":0.0}]},{"StartTime":373504.0,"Objects":[{"StartTime":373504.0,"Position":326.0},{"StartTime":373601.0,"Position":418.681274},{"StartTime":373734.0,"Position":512.0}]},{"StartTime":373850.0,"Objects":[{"StartTime":373850.0,"Position":491.0}]},{"StartTime":373966.0,"Objects":[{"StartTime":373966.0,"Position":468.0},{"StartTime":374063.0,"Position":380.326721},{"StartTime":374196.0,"Position":281.455078}]},{"StartTime":374427.0,"Objects":[{"StartTime":374427.0,"Position":203.0},{"StartTime":374542.0,"Position":296.309082}]},{"StartTime":374658.0,"Objects":[{"StartTime":374658.0,"Position":389.0}]},{"StartTime":374773.0,"Objects":[{"StartTime":374773.0,"Position":329.0}]},{"StartTime":374830.0,"Objects":[{"StartTime":374830.0,"Position":327.0}]},{"StartTime":374889.0,"Objects":[{"StartTime":374889.0,"Position":326.0},{"StartTime":374986.0,"Position":404.681274},{"StartTime":375119.0,"Position":512.0}]},{"StartTime":375350.0,"Objects":[{"StartTime":375350.0,"Position":227.0}]},{"StartTime":375466.0,"Objects":[{"StartTime":375466.0,"Position":138.0}]},{"StartTime":375581.0,"Objects":[{"StartTime":375581.0,"Position":138.0}]},{"StartTime":375697.0,"Objects":[{"StartTime":375697.0,"Position":227.0}]},{"StartTime":375812.0,"Objects":[{"StartTime":375812.0,"Position":282.0},{"StartTime":375909.0,"Position":356.673279},{"StartTime":376042.0,"Position":468.544922}]},{"StartTime":376273.0,"Objects":[{"StartTime":376273.0,"Position":230.0},{"StartTime":376370.0,"Position":131.3267},{"StartTime":376503.0,"Position":43.45508}]},{"StartTime":376620.0,"Objects":[{"StartTime":376620.0,"Position":11.0}]},{"StartTime":376735.0,"Objects":[{"StartTime":376735.0,"Position":303.0},{"StartTime":376832.0,"Position":321.498657},{"StartTime":376965.0,"Position":316.0381}]},{"StartTime":377197.0,"Objects":[{"StartTime":377197.0,"Position":43.0}]},{"StartTime":377313.0,"Objects":[{"StartTime":377313.0,"Position":72.0}]},{"StartTime":377428.0,"Objects":[{"StartTime":377428.0,"Position":166.0}]},{"StartTime":377544.0,"Objects":[{"StartTime":377544.0,"Position":195.0}]},{"StartTime":377658.0,"Objects":[{"StartTime":377658.0,"Position":119.0},{"StartTime":377755.0,"Position":114.498672},{"StartTime":377888.0,"Position":132.038086}]},{"StartTime":378120.0,"Objects":[{"StartTime":378120.0,"Position":439.0},{"StartTime":378217.0,"Position":433.501343},{"StartTime":378350.0,"Position":425.9619}]},{"StartTime":378581.0,"Objects":[{"StartTime":378581.0,"Position":348.0},{"StartTime":378638.0,"Position":359.499878},{"StartTime":378696.0,"Position":396.119171},{"StartTime":378753.0,"Position":363.5212},{"StartTime":378811.0,"Position":334.379517},{"StartTime":378868.0,"Position":293.353027},{"StartTime":378926.0,"Position":224.793365},{"StartTime":378984.0,"Position":178.386932},{"StartTime":379042.0,"Position":152.0749},{"StartTime":379139.0,"Position":103.5945},{"StartTime":379273.0,"Position":132.2942}]},{"StartTime":379504.0,"Objects":[{"StartTime":379504.0,"Position":444.0},{"StartTime":379601.0,"Position":509.967316},{"StartTime":379734.0,"Position":473.311646}]},{"StartTime":379850.0,"Objects":[{"StartTime":379850.0,"Position":348.0},{"StartTime":379947.0,"Position":288.032684},{"StartTime":380080.0,"Position":318.688354}]},{"StartTime":380197.0,"Objects":[{"StartTime":380197.0,"Position":408.0},{"StartTime":380312.0,"Position":418.982574}]},{"StartTime":380427.0,"Objects":[{"StartTime":380427.0,"Position":396.0}]},{"StartTime":380543.0,"Objects":[{"StartTime":380543.0,"Position":396.0},{"StartTime":380640.0,"Position":327.917877},{"StartTime":380773.0,"Position":255.399872}]},{"StartTime":380889.0,"Objects":[{"StartTime":380889.0,"Position":324.0},{"StartTime":381004.0,"Position":416.852753}]},{"StartTime":381120.0,"Objects":[{"StartTime":381120.0,"Position":255.0},{"StartTime":381235.0,"Position":162.147247}]},{"StartTime":381350.0,"Objects":[{"StartTime":381350.0,"Position":32.0}]},{"StartTime":381466.0,"Objects":[{"StartTime":381466.0,"Position":32.0},{"StartTime":381563.0,"Position":101.082138},{"StartTime":381696.0,"Position":172.600113}]},{"StartTime":381812.0,"Objects":[{"StartTime":381812.0,"Position":104.0},{"StartTime":381927.0,"Position":11.1472549}]},{"StartTime":382043.0,"Objects":[{"StartTime":382043.0,"Position":173.0},{"StartTime":382158.0,"Position":265.852753}]},{"StartTime":382273.0,"Objects":[{"StartTime":382273.0,"Position":490.0},{"StartTime":382330.0,"Position":444.2234},{"StartTime":382388.0,"Position":490.0},{"StartTime":382446.0,"Position":444.2234}]},{"StartTime":382504.0,"Objects":[{"StartTime":382504.0,"Position":427.0},{"StartTime":382561.0,"Position":381.2234},{"StartTime":382619.0,"Position":427.0},{"StartTime":382677.0,"Position":381.2234}]},{"StartTime":382735.0,"Objects":[{"StartTime":382735.0,"Position":349.0}]},{"StartTime":382792.0,"Objects":[{"StartTime":382792.0,"Position":364.0}]},{"StartTime":382850.0,"Objects":[{"StartTime":382850.0,"Position":365.0}]},{"StartTime":382908.0,"Objects":[{"StartTime":382908.0,"Position":351.0}]},{"StartTime":382966.0,"Objects":[{"StartTime":382966.0,"Position":325.0}]},{"StartTime":383023.0,"Objects":[{"StartTime":383023.0,"Position":293.0}]},{"StartTime":383080.0,"Objects":[{"StartTime":383080.0,"Position":267.0}]},{"StartTime":383138.0,"Objects":[{"StartTime":383138.0,"Position":253.0}]},{"StartTime":383197.0,"Objects":[{"StartTime":383197.0,"Position":254.0}]},{"StartTime":383254.0,"Objects":[{"StartTime":383254.0,"Position":290.0}]},{"StartTime":383312.0,"Objects":[{"StartTime":383312.0,"Position":303.0}]},{"StartTime":383370.0,"Objects":[{"StartTime":383370.0,"Position":288.0}]},{"StartTime":383427.0,"Objects":[{"StartTime":383427.0,"Position":250.0}]},{"StartTime":383484.0,"Objects":[{"StartTime":383484.0,"Position":204.0}]},{"StartTime":383542.0,"Objects":[{"StartTime":383542.0,"Position":171.0}]},{"StartTime":383600.0,"Objects":[{"StartTime":383600.0,"Position":163.0}]},{"StartTime":383657.0,"Objects":[{"StartTime":383657.0,"Position":182.0}]},{"StartTime":383715.0,"Objects":[{"StartTime":383715.0,"Position":184.0}]},{"StartTime":383773.0,"Objects":[{"StartTime":383773.0,"Position":144.0}]},{"StartTime":383831.0,"Objects":[{"StartTime":383831.0,"Position":82.0}]},{"StartTime":383889.0,"Objects":[{"StartTime":383889.0,"Position":35.0}]},{"StartTime":383947.0,"Objects":[{"StartTime":383947.0,"Position":30.0}]},{"StartTime":384004.0,"Objects":[{"StartTime":384004.0,"Position":58.0}]},{"StartTime":384062.0,"Objects":[{"StartTime":384062.0,"Position":57.0}]},{"StartTime":384120.0,"Objects":[{"StartTime":384120.0,"Position":18.0}]}]} \ No newline at end of file diff --git a/osu.Game.Rulesets.Catch/Resources/Testing/Beatmaps/875945.osu b/osu.Game.Rulesets.Catch/Resources/Testing/Beatmaps/875945.osu deleted file mode 100644 index a24fcea30a..0000000000 --- a/osu.Game.Rulesets.Catch/Resources/Testing/Beatmaps/875945.osu +++ /dev/null @@ -1,1824 +0,0 @@ -osu file format v14 - -[General] -AudioFilename: imagematerial.mp3 -AudioLeadIn: 0 -PreviewTime: 165589 -Countdown: 0 -SampleSet: Soft -StackLeniency: 0.7 -Mode: 0 -LetterboxInBreaks: 0 -EpilepsyWarning: 1 -WidescreenStoryboard: 1 - -[Editor] -Bookmarks: 56435,71204,88743,103512,120127,134897,149666,181051,197666,310280,356434,371204,384127 -DistanceSpacing: 0.3 -BeatDivisor: 4 -GridSize: 4 -TimelineZoom: 5.700003 - -[Metadata] -Title:IMAGE -MATERIAL- -TitleUnicode:IMAGE -MATERIAL- -Artist:Tatsh -ArtistUnicode:Tatsh -Creator:Enon -Version:Revolution -Source: -Tags:(新曲) (Shinkyoku) REFLEC BEAT limelight 福山沙織 fukuyama saori Dailycare -BeatmapID:875945 -BeatmapSetID:402837 - -[Difficulty] -HPDrainRate:6 -CircleSize:4.2 -OverallDifficulty:9 -ApproachRate:9.8 -SliderMultiplier:1.87 -SliderTickRate:1 - -[Events] -//Background and Video events -0,0,"BG.jpg",0,0 -//Break Periods -2,49251,55956 -//Storyboard Layer 0 (Background) -//Storyboard Layer 1 (Fail) -//Storyboard Layer 2 (Pass) -//Storyboard Layer 3 (Foreground) -//Storyboard Sound Samples - -[TimingPoints] -6590,461.538461538462,4,2,2,15,1,0 -6590,-200,4,2,2,15,0,0 -8320,-200,4,2,2,5,0,0 -8436,-200,4,2,2,15,0,0 -10166,-200,4,2,2,5,0,0 -10282,-200,4,2,2,15,0,0 -12013,-200,4,2,2,5,0,0 -12128,-200,4,2,2,15,0,0 -13859,-200,4,2,2,5,0,0 -13974,-200,4,2,2,15,0,0 -15705,-200,4,2,2,5,0,0 -15820,-200,4,2,2,15,0,0 -17551,-200,4,2,2,5,0,0 -17666,-200,4,2,2,15,0,0 -49051,230.769230769231,4,2,1,15,1,0 -56435,-100,4,2,1,60,0,0 -62666,-200,4,2,1,60,0,0 -63820,-100,4,2,1,60,0,0 -69358,-100,4,2,1,55,0,0 -69589,-100,4,2,1,50,0,0 -69820,-100,4,2,1,45,0,0 -70051,-100,4,2,1,40,0,0 -70281,-100,4,2,1,30,0,0 -70512,-100,4,2,1,40,0,0 -70743,-100,4,2,1,50,0,0 -70974,-100,4,2,1,60,0,0 -71204,-100,4,2,1,70,0,0 -74839,-100,4,2,1,5,0,0 -74897,-100,4,2,1,70,0,0 -78301,-100,4,2,1,5,0,0 -78358,-100,4,2,1,70,0,0 -78531,-100,4,2,1,5,0,0 -78589,-100,4,2,1,70,0,0 -82224,-100,4,2,1,5,0,0 -82281,-100,4,2,1,70,0,0 -85685,-100,4,2,1,5,0,0 -85743,-100,4,2,1,70,0,0 -88743,-100,4,2,1,85,0,1 -90070,-100,4,2,1,5,0,1 -90127,-100,4,2,1,85,0,1 -93762,-100,4,2,1,5,0,1 -93820,-100,4,2,1,85,0,1 -95377,-100,4,2,1,5,0,1 -95435,-100,4,2,1,85,0,1 -103512,-100,4,2,1,60,0,0 -106916,-100,4,2,1,5,0,0 -106974,-100,4,2,1,60,0,0 -110608,-100,4,2,1,5,0,0 -110666,-100,4,2,1,60,0,0 -114301,-100,4,2,1,5,0,0 -114358,-100,4,2,1,60,0,0 -114820,-100,4,2,3,60,0,0 -114834,-100,4,2,1,60,0,0 -116666,-100,4,2,3,60,0,0 -116680,-100,4,2,1,60,0,0 -117358,-100,4,2,1,55,0,0 -117589,-100,4,2,1,50,0,0 -117820,-100,4,2,1,45,0,0 -118051,-100,4,2,1,40,0,0 -118281,-100,4,2,1,30,0,0 -118743,-100,4,2,1,40,0,0 -119204,-100,4,2,1,50,0,0 -119666,-100,4,2,1,60,0,0 -120127,-100,4,2,1,70,0,0 -126762,-100,4,2,1,5,0,0 -126820,-100,4,2,1,70,0,0 -143377,-100,4,2,1,5,0,0 -143435,-111.111111111111,4,2,1,70,0,0 -143608,-111.111111111111,4,2,1,5,0,0 -143666,-125,4,2,1,70,0,0 -143839,-125,4,2,1,5,0,0 -143897,-142.857142857143,4,2,1,70,0,0 -144070,-142.857142857143,4,2,1,5,0,0 -144127,-100,4,2,1,70,0,0 -149666,-200,4,2,1,40,0,0 -160743,-100,4,2,1,55,0,0 -166281,-100,4,2,1,85,0,1 -167608,-100,4,2,1,5,0,1 -167666,-100,4,2,1,85,0,1 -171301,-100,4,2,1,5,0,1 -171358,-100,4,2,1,85,0,1 -172916,-100,4,2,1,5,0,1 -172974,-100,4,2,1,85,0,1 -181051,-100,4,2,1,60,0,0 -182377,-100,4,2,1,5,0,0 -182435,-100,4,2,1,60,0,0 -192358,-100,4,2,3,60,0,0 -192373,-100,4,2,1,60,0,0 -194204,-100,4,2,3,60,0,0 -194219,-100,4,2,1,60,0,0 -194897,-100,4,2,1,55,0,0 -195127,-100,4,2,1,50,0,0 -195358,-100,4,2,1,45,0,0 -195589,-100,4,2,1,40,0,0 -195820,-100,4,2,1,30,0,0 -196281,-100,4,2,1,40,0,0 -196743,-100,4,2,1,50,0,0 -197204,-100,4,2,1,60,0,0 -197666,-100,4,2,1,85,0,1 -219070,-100,4,2,1,5,0,1 -219127,-142.857142857143,4,2,1,85,0,1 -219301,-142.857142857143,4,2,1,5,0,1 -219358,-111.111111111111,4,2,1,85,0,1 -219531,-111.111111111111,4,2,1,5,0,1 -219589,-166.666666666667,4,2,1,85,0,1 -219762,-166.666666666667,4,2,1,5,0,1 -219820,-100,4,2,1,85,0,1 -227204,461.538461538462,4,2,2,25,1,0 -227204,-200,4,2,2,25,0,0 -251550,697.674418604651,4,2,2,25,1,0 -251550,-133.333333333333,4,2,2,25,0,0 -252702,714.285714285714,4,2,2,20,1,0 -252702,-133.333333333333,4,2,2,20,0,0 -253506,800,4,2,2,18,1,0 -254095,1132.07547169811,4,2,2,15,1,0 -254095,-133.333333333333,4,2,2,15,0,0 -255580,1200,4,2,2,10,1,0 -256480,1267.10000000001,4,2,2,8,1,0 -256480,-133.333333333333,4,2,2,8,0,0 -258892,2131.45714285714,4,2,2,6,1,0 -258892,-133.333333333333,4,2,2,6,0,0 -263197,230.769230769231,4,2,1,65,1,0 -277966,-100,4,2,1,70,0,0 -285062,-100,4,2,1,5,0,0 -285120,-100,4,2,1,70,0,0 -285293,-100,4,2,1,5,0,0 -285350,-100,4,2,1,70,0,0 -292447,-100,4,2,1,5,0,0 -292504,-100,4,2,1,70,0,0 -295504,-100,4,2,1,85,0,1 -296831,-100,4,2,1,5,0,1 -296889,-100,4,2,1,85,0,1 -300523,-100,4,2,1,5,0,1 -300581,-100,4,2,1,85,0,1 -308889,-100,4,2,1,85,0,0 -310273,-100,4,2,1,85,0,1 -315062,-100,4,2,1,5,0,1 -315120,-100,4,2,1,85,0,1 -329831,-100,4,2,1,5,0,1 -329889,-100,4,2,1,85,0,1 -330754,-100,4,2,1,5,0,1 -330812,-100,4,2,1,85,0,1 -331677,-100,4,2,1,5,0,1 -331735,-100,4,2,1,85,0,1 -333523,-100,4,2,1,5,0,1 -333581,-100,4,2,1,85,0,1 -336293,-100,4,2,1,5,0,1 -336350,-100,4,2,1,85,0,1 -346447,-100,4,2,1,5,0,1 -346504,-142.857142857143,4,2,1,85,0,1 -346677,-142.857142857143,4,2,1,5,0,1 -346735,-111.111111111111,4,2,1,85,0,1 -346908,-111.111111111111,4,2,1,5,0,1 -346966,-166.666666666667,4,2,1,85,0,1 -347197,-100,4,2,1,85,0,1 -356427,-100,4,2,1,60,0,0 - - -[Colours] -Combo1 : 235,221,186 -Combo2 : 165,202,233 -Combo3 : 114,145,218 -Combo4 : 58,148,190 - -[HitObjects] -88,104,6590,6,0,B|176:156|256:108|256:108|336:60|423:112,1,350.625,6|0,0:0|0:0,0:0:0:0: -396,213,8436,2,0,P|277:247|376:172,1,350.625,6|0,0:0|0:0,0:0:0:0: -472,220,10282,2,0,P|456:288|220:300,1,350.625,6|0,0:0|0:0,0:0:0:0: -277,200,12128,2,0,P|398:225|276:244,1,350.625,6|0,0:0|0:0,0:0:0:0: -224,141,13974,6,0,P|379:90|473:224,1,350.625,6|0,0:0|0:0,0:0:0:0: -496,301,15820,2,0,B|304:277|329:378|139:354,1,350.625,6|0,0:0|0:0,0:0:0:0: -76,352,17666,2,0,B|128:271|43:128|43:128|96:217|173:187,1,374,6|2,0:0|0:0,0:0:0:0: -256,192,19628,12,0,21128,0:0:0:0: -213,117,21359,6,0,L|119:122,1,93.5,6|0,0:0|0:0,0:0:0:0: -300,161,22282,2,0,L|393:155,1,93.5,2|0,0:0|0:0,0:0:0:0: -233,38,23205,2,0,L|139:43,1,93.5,6|0,0:0|0:0,0:0:0:0: -280,240,24128,2,0,L|373:234,1,93.5,2|0,0:0|0:0,0:0:0:0: -509,22,25051,6,0,B|342:1|390:161|198:113,1,327.25,6|0,0:0|0:0,0:0:0:0: -139,43,26897,2,0,P|181:132|110:300,1,280.5,2|0,0:0|0:0,0:0:0:0: -46,366,28743,6,0,L|139:371,1,93.5,6|0,0:0|0:0,0:0:0:0: -280,175,29666,2,0,L|186:169,1,93.5,2|0,0:0|0:0,0:0:0:0: -26,287,30589,2,0,L|119:292,1,93.5,6|0,0:0|0:0,0:0:0:0: -300,254,31513,2,0,L|206:248,1,93.5,2|0,0:0|0:0,0:0:0:0: -0,57,32436,6,0,B|189:33|134:214|352:176,1,374,6|2,0:0|0:0,0:0:0:0: -334,178,35205,2,0,L|315:351,1,163.625,2|0,0:0|0:0,0:0:0:0: -396,313,36128,6,0,P|430:308|456:284,1,70.125,6|0,0:0|0:0,0:0:0:0: -508,233,36590,6,0,B|205:287|288:12|1:48,1,561,2|0,0:0|0:0,0:0:0:0: -10,47,39820,6,0,L|120:37,1,93.5,6|0,0:0|0:0,0:0:0:0: -233,130,40743,2,0,L|123:140,1,93.5,2|0,0:0|0:0,0:0:0:0: -268,229,41666,2,0,L|473:210,1,187,2|2,0:0|0:0,0:0:0:0: -271,366,43051,2,0,P|254:329|255:303,1,46.75 -268,229,43513,5,6,0:0:0:0: -256,192,43628,12,0,49051,0:0:0:0: -45,136,56435,6,0,B|140:151|119:74|222:88,1,187,6|8,0:0|0:0,0:0:0:0: -214,252,56781,1,0,0:0:0:0: -214,252,56897,2,0,P|209:223|187:144,1,93.5,2|0,0:0|0:0,0:0:0:0: -336,48,57127,2,0,P|323:93|314:138,1,93.5,8|0,0:0|0:0,0:0:0:0: -319,308,57358,6,0,P|379:321|411:306,1,93.5,2|0,0:0|0:0,0:0:0:0: -214,252,57589,2,0,P|154:239|122:254,1,93.5,8|0,0:0|0:0,0:0:0:0: -58,340,57820,1,2,0:0:0:0: -165,370,57935,1,0,0:0:0:0: -263,315,58051,1,8,0:0:0:0: -370,345,58166,1,8,0:0:0:0: -370,345,58224,1,0,0:0:0:0: -370,345,58281,6,0,P|361:263|435:186,1,187,2|8,0:0|0:0,0:0:0:0: -507,110,58627,1,0,0:0:0:0: -507,110,58685,1,0,0:0:0:0: -507,110,58743,2,0,L|491:3,1,93.5,2|0,0:0|0:0,0:0:0:0: -412,96,58974,2,0,L|428:203,1,93.5,8|2,0:0|0:0,0:0:0:0: -370,344,59204,6,0,P|331:353|275:333,1,93.5,2|0,0:0|0:0,0:0:0:0: -273,211,59435,2,0,P|293:253|331:280,1,93.5,8|0,0:0|0:0,0:0:0:0: -349,206,59666,2,0,P|341:160|357:117,1,93.5,2|0,0:0|0:0,0:0:0:0: -482,107,59897,2,0,P|440:127|414:165,1,93.5,8|0,0:0|0:0,0:0:0:0: -144,273,60127,6,0,L|331:280,1,187,2|8,0:0|0:0,0:0:0:0: -349,206,60474,2,0,L|162:199,1,187,0|2,0:0|0:0,0:0:0:0: -85,115,60820,2,0,L|179:119,1,93.5,8|2,0:0|0:0,0:0:0:0: -126,347,61051,6,0,P|88:326|66:277,1,93.5,2|0,0:0|0:0,0:0:0:0: -162,199,61281,2,0,P|200:220|222:269,1,93.5,8|0,0:0|0:0,0:0:0:0: -203,375,61512,2,0,L|306:368,1,93.5,2|2,0:0|0:0,0:0:0:0: -443,285,61743,2,0,L|349:291,1,93.5,8|0,0:0|0:0,0:0:0:0: -329,279,61916,1,0,0:0:0:0: -309,266,61974,6,0,L|289:66,1,187,2|8,0:0|0:0,0:0:0:0: -203,118,62320,2,0,L|223:318,1,187,0|2,0:0|0:0,0:0:0:0: -133,342,62666,2,0,B|132:316|132:316|128:316|128:316|130:295|130:295|126:296|126:296|129:275|129:275|125:275|125:275|127:254|127:254|123:255|123:255|125:234|125:234|121:234|121:234|123:213|123:213|119:214|119:214|121:193|121:193|118:193|118:193|118:172,1,187,8|8,0:0|0:0,0:0:0:0: -285,26,63358,5,2,0:0:0:0: -352,117,63474,1,8,0:0:0:0: -265,189,63589,1,10,0:0:0:0: -332,280,63705,1,8,0:0:0:0: -474,81,63820,5,2,0:0:0:0: -456,83,63877,1,2,0:0:0:0: -437,85,63935,1,2,0:0:0:0: -419,88,63993,1,2,0:0:0:0: -400,90,64051,2,0,L|288:73,1,93.5,8|0,0:0|0:0,0:0:0:0: -217,50,64281,5,2,0:0:0:0: -219,68,64338,1,2,0:0:0:0: -221,87,64396,1,2,0:0:0:0: -224,105,64454,1,2,0:0:0:0: -226,124,64512,2,0,L|209:236,1,93.5,8|0,0:0|0:0,0:0:0:0: -186,307,64743,5,2,0:0:0:0: -204,305,64800,1,2,0:0:0:0: -223,303,64858,1,2,0:0:0:0: -241,300,64916,1,2,0:0:0:0: -260,298,64974,2,0,L|372:315,1,93.5,8|0,0:0|0:0,0:0:0:0: -443,338,65205,5,2,0:0:0:0: -441,320,65262,1,2,0:0:0:0: -439,301,65320,1,2,0:0:0:0: -436,283,65378,1,2,0:0:0:0: -434,264,65436,2,0,L|451:152,1,93.5,8|0,0:0|0:0,0:0:0:0: -474,81,65666,5,2,0:0:0:0: -456,83,65723,1,2,0:0:0:0: -437,85,65781,1,2,0:0:0:0: -419,88,65839,1,2,0:0:0:0: -400,90,65897,2,0,L|288:73,1,93.5,8|0,0:0|0:0,0:0:0:0: -226,124,66127,5,2,0:0:0:0: -208,126,66184,1,2,0:0:0:0: -189,128,66242,1,2,0:0:0:0: -171,131,66300,1,2,0:0:0:0: -152,133,66358,2,0,L|40:116,1,93.5,8|0,0:0|0:0,0:0:0:0: -14,291,66589,6,0,P|0:241|8:176,1,93.5,2|2,0:0|0:0,0:0:0:0: -136,292,66820,2,0,P|150:342|142:407,1,93.5,8|2,0:0|0:0,0:0:0:0: -80,232,67051,2,0,P|154:263|265:207,1,187,2|8,0:0|0:0,0:0:0:0: -315,159,67397,1,0,0:0:0:0: -491,182,67512,6,0,B|480:253|480:253|484:286|484:286|472:373,1,187,6|8,0:1|0:0,0:0:0:0: -410,124,67858,2,0,B|399:195|399:195|403:228|403:228|391:315,1,187,2|8,0:1|0:0,0:0:0:0: -329,66,68204,2,0,L|313:166,1,93.5,10|0,1:2|0:0,0:0:0:0: -181,294,68435,6,0,P|226:315|288:293,1,93.5,2|2,0:0|0:0,0:0:0:0: -440,252,68666,2,0,P|395:231|333:253,1,93.5,8|2,0:0|0:0,0:0:0:0: -128,371,68897,5,10,0:0:0:0: -181,294,69012,1,8,0:0:0:0: -117,225,69127,1,10,0:0:0:0: -170,148,69242,1,8,0:0:0:0: -52,88,69358,6,0,L|43:181,1,93.5,2|2,0:0|0:0,0:0:0:0: -181,294,69589,2,0,L|191:202,1,93.5,8|2,0:0|0:0,0:0:0:0: -39,101,69820,6,0,L|30:193,1,93.5,2|2,0:0|0:0,0:0:0:0: -168,307,70051,2,0,L|177:214,1,93.5,8|2,0:0|0:0,0:0:0:0: -198,30,70281,5,8,0:0:0:0: -220,46,70339,1,0,0:0:0:0: -244,58,70397,1,8,0:0:0:0: -269,65,70455,1,0,0:0:0:0: -296,68,70512,1,2,0:0:0:0: -322,66,70570,1,2,0:0:0:0: -348,60,70627,1,2,0:0:0:0: -373,49,70685,1,2,0:0:0:0: -396,36,70742,5,10,0:0:0:0: -441,30,70800,1,2,0:0:0:0: -483,49,70858,1,10,0:0:0:0: -510,87,70916,1,2,0:0:0:0: -512,133,70974,1,10,0:0:0:0: -492,175,71031,1,2,0:0:0:0: -453,199,71089,1,10,0:0:0:0: -407,200,71146,1,2,0:0:0:0: -364,184,71204,6,0,P|321:209|338:359,1,187,6|8,0:0|0:0,0:0:0:0: -419,372,71551,2,0,P|462:347|445:197,1,187,2|2,0:0|0:0,0:0:0:0: -332,104,71897,2,0,L|441:100,1,93.5,8|0,0:0|0:0,0:0:0:0: -248,179,72127,5,2,0:0:0:0: -248,179,72243,2,0,L|54:186,1,187,2|2,0:0|0:0,0:0:0:0: -144,259,72589,2,0,L|240:255,1,93.5,2|0,0:0|0:0,0:0:0:0: -164,104,72820,2,0,L|68:108,1,93.5,8|0,0:0|0:0,0:0:0:0: -111,338,73051,6,0,P|200:325|223:228,1,187,2|8,0:0|0:0,0:0:0:0: -192,136,73397,2,0,L|-1:143,1,187,2|2,0:0|0:0,0:0:0:0: -78,57,73743,2,0,L|174:53,1,93.5,8|0,0:0|0:0,0:0:0:0: -365,83,73974,5,2,0:0:0:0: -365,83,74089,2,0,B|294:83|288:84|255:135|251:135|191:135,1,187,2|2,0:0|0:0,0:0:0:0: -45,195,74435,2,0,P|87:216|103:264,1,93.5,2|0,0:0|0:0,0:0:0:0: -16,332,74666,2,0,B|63:323|63:323|109:331|109:331|160:322,1,140.25,8|0,0:0|0:0,0:0:0:0: -240,352,74897,6,0,P|224:290|298:187,1,187,2|8,0:0|0:0,0:0:0:0: -395,224,75243,2,0,P|411:286|337:389,1,187,2|2,0:0|0:0,0:0:0:0: -249,166,75589,2,0,L|239:73,1,93.5,8|0,0:0|0:0,0:0:0:0: -198,230,75820,5,2,0:0:0:0: -198,230,75935,2,0,B|249:267|296:244|318:210|318:210|294:242|318:278,1,187,2|2,0:0|0:0,0:0:0:0: -340,364,76281,2,0,L|433:357,1,93.5,2|0,0:0|0:0,0:0:0:0: -236,324,76512,2,0,L|120:332,1,93.5,8|0,0:0|0:0,0:0:0:0: -13,228,76743,6,0,B|96:223|96:223|131:234|131:234|198:229,1,187,2|8,0:0|0:0,0:0:0:0: -324,152,77089,2,0,B|257:157|257:157|222:146|222:146|139:151,1,187,2|2,0:0|0:0,0:0:0:0: -294,235,77435,2,0,L|388:228,1,93.5,8|0,0:0|0:0,0:0:0:0: -452,108,77666,5,2,0:0:0:0: -452,108,77781,1,8,0:0:0:0: -492,272,77897,1,10,0:0:0:0: -492,272,78012,1,8,0:0:0:0: -376,88,78127,2,0,P|404:44|488:40,1,140.25,8|0,0:0|0:0,0:0:0:0: -452,108,78358,2,0,L|301:120,1,140.25,2|0,0:0|0:0,0:0:0:0: -216,60,78589,6,0,P|232:132|144:216,1,187,6|8,0:0|0:0,0:0:0:0: -56,176,78935,2,0,P|40:104|128:20,1,187,2|2,0:0|0:0,0:0:0:0: -216,60,79281,2,0,L|223:153,1,93.5,8|0,0:0|0:0,0:0:0:0: -333,284,79512,5,2,0:0:0:0: -333,284,79627,2,0,L|317:82,1,187,2|2,0:0|0:0,0:0:0:0: -157,170,79974,2,0,P|175:203|256:211,1,93.5,2|0,0:0|0:0,0:0:0:0: -400,264,80204,2,0,P|382:231|301:223,1,93.5,8|0,0:0|0:0,0:0:0:0: -255,374,80435,6,0,L|447:359,1,187,2|8,0:0|0:0,0:0:0:0: -512,272,80781,2,0,L|320:287,1,187,2|2,0:0|0:0,0:0:0:0: -244,210,81127,2,0,L|337:203,1,93.5,8|0,0:0|0:0,0:0:0:0: -464,92,81358,5,2,0:0:0:0: -464,92,81474,2,0,P|484:152|420:272,1,187,2|2,0:0|0:0,0:0:0:0: -321,123,81820,2,0,L|310:23,1,93.5,2|0,0:0|0:0,0:0:0:0: -201,117,82051,2,0,L|215:256,1,140.25,8|0,0:0|0:0,0:0:0:0: -225,332,82281,6,0,P|153:348|53:272,1,187,2|8,0:0|0:0,0:0:0:0: -90,181,82627,2,0,P|162:165|262:241,1,187,2|2,0:0|0:0,0:0:0:0: -315,317,82974,2,0,L|441:307,1,93.5,8|0,0:0|0:0,0:0:0:0: -500,169,83204,5,2,0:0:0:0: -500,169,83320,2,0,L|306:184,1,187,2|2,0:0|0:0,0:0:0:0: -156,120,83666,2,0,P|140:68|152:24,1,93.5,2|0,0:0|0:0,0:0:0:0: -260,20,83897,2,0,P|276:72|264:116,1,93.5,8|0,0:0|0:0,0:0:0:0: -196,260,84127,6,0,L|10:240,1,187,2|8,0:0|0:0,0:0:0:0: -80,328,84474,2,0,L|265:347,1,187,2|2,0:0|0:0,0:0:0:0: -372,382,84820,2,0,P|386:339|425:314,1,93.5,8|0,0:0|0:0,0:0:0:0: -506,236,85051,2,0,P|461:246|420:225,1,93.5,2|0,0:0|0:0,0:0:0:0: -313,195,85281,2,0,P|344:228|346:274,1,93.5,8|0,0:0|0:0,0:0:0:0: -163,144,85512,6,0,L|14:135,1,140.25,2|0,0:0|0:0,0:0:0:0: -44,187,85743,2,0,L|171:194,1,93.5,8|0,0:0|0:0,0:0:0:0: -245,159,85974,2,0,P|232:96|199:67,1,93.5,2|0,0:0|0:0,0:0:0:0: -214,244,86204,2,0,L|404:225,1,187,8|2,0:0|0:0,0:0:0:0: -497,283,86551,1,0,0:0:0:0: -497,283,86666,2,0,P|436:302|409:354,1,93.5,8|0,0:0|0:0,0:0:0:0: -318,374,86897,6,0,L|328:163,1,187,2|8,0:0|0:0,0:0:0:0: -238,257,87243,1,0,0:0:0:0: -238,257,87358,2,0,L|248:46,1,187,2|8,0:0|0:0,0:0:0:0: -158,140,87704,1,2,0:0:0:0: -158,140,87820,6,0,L|163:34,1,93.5,2|0,0:0|0:0,0:0:0:0: -75,118,88051,2,0,L|70:223,1,93.5,8|0,0:0|0:0,0:0:0:0: -113,345,88281,5,0,0:0:0:0: -130,335,88339,1,0,0:0:0:0: -150,333,88397,1,0,0:0:0:0: -169,339,88454,1,0,0:0:0:0: -188,347,88512,5,10,0:0:0:0: -230,365,88570,1,2,0:0:0:0: -276,366,88628,1,10,0:0:0:0: -320,349,88686,1,2,0:0:0:0: -353,317,88743,6,0,L|362:113,1,187,6|8,0:0|0:0,0:0:0:0: -265,71,89089,1,0,0:0:0:0: -265,71,89204,2,0,P|216:122|257:235,1,187,2|8,0:0|0:0,0:0:0:0: -356,237,89551,1,0,0:0:0:0: -356,237,89666,6,0,L|472:227,1,93.5,2|0,0:0|0:0,0:0:0:0: -373,145,89897,2,0,L|222:158,1,140.25,8|0,0:0|0:0,0:0:0:0: -189,190,90127,2,0,L|282:181,1,93.5,2|0,0:0|0:0,0:0:0:0: -147,85,90358,2,0,L|24:95,1,93.5,8|0,0:0|0:0,0:0:0:0: -129,242,90589,6,0,P|186:269|266:193,1,187,2|8,0:0|0:0,0:0:0:0: -116,165,90935,2,0,P|64:200|89:308,1,187,2|2,0:0|0:0,0:0:0:0: -189,190,91281,2,0,P|190:140|162:101,1,93.5,8|0,0:0|0:0,0:0:0:0: -81,31,91512,2,0,L|174:23,1,93.5,2|0,0:0|0:0,0:0:0:0: -350,92,91743,2,0,L|257:100,1,93.5,8|0,0:0|0:0,0:0:0:0: -95,198,91974,2,0,L|188:190,1,93.5,2|0,0:0|0:0,0:0:0:0: -377,205,92204,1,2,0:0:0:0: -365,240,92262,1,2,0:0:0:0: -355,276,92320,1,2,0:0:0:0: -345,311,92377,1,2,0:0:0:0: -334,347,92435,6,0,P|264:294|292:211,1,187,2|8,0:0|0:0,0:0:0:0: -392,153,92781,1,0,0:0:0:0: -392,153,92897,2,0,P|420:70|350:17,1,187,2|8,0:0|0:0,0:0:0:0: -256,79,93243,1,0,0:0:0:0: -256,79,93358,6,0,L|263:195,1,93.5,2|0,0:0|0:0,0:0:0:0: -152,304,93589,2,0,L|142:141,1,140.25,8|0,0:0|0:0,0:0:0:0: -154,109,93820,2,0,P|122:142|78:155,1,93.5,2|0,0:0|0:0,0:0:0:0: -0,62,94051,2,0,P|31:28|75:15,1,93.5,8|0,0:0|0:0,0:0:0:0: -256,79,94281,6,0,L|267:265,1,187,2|8,0:0|0:0,0:0:0:0: -198,354,94627,1,0,0:0:0:0: -198,354,94743,2,0,P|286:378|361:327,1,187,2|8,0:0|0:0,0:0:0:0: -407,224,95089,1,0,0:0:0:0: -407,224,95204,6,0,L|247:211,1,140.25,2|0,0:0|0:0,0:0:0:0: -218,184,95435,2,0,L|330:193,1,93.5,8|0,0:0|0:0,0:0:0:0: -401,124,95666,2,0,P|410:77|383:30,1,93.5,2|0,0:0|0:0,0:0:0:0: -300,104,95897,2,0,P|291:149|311:191,1,93.5,8|0,0:0|0:0,0:0:0:0: -420,317,96127,6,0,P|334:293|273:358,1,187,2|8,0:0|0:0,0:0:0:0: -159,359,96474,1,0,0:0:0:0: -159,359,96589,2,0,P|73:382|12:317,1,187,2|8,0:0|0:0,0:0:0:0: -78,186,96935,1,0,0:0:0:0: -174,245,97051,6,0,L|195:51,1,187,2|8,0:0|0:0,0:0:0:0: -300,104,97397,1,0,0:0:0:0: -300,104,97512,2,0,B|309:153|309:153|287:195,1,93.5,2|0,0:0|0:0,0:0:0:0: -185,332,97743,2,0,B|164:293|164:293|173:244,1,93.5,8|0,0:0|0:0,0:0:0:0: -450,270,97974,6,0,L|259:281,1,187,2|8,0:0|0:0,0:0:0:0: -218,184,98320,1,0,0:0:0:0: -218,184,98435,2,0,L|409:173,1,187,2|8,0:0|0:0,0:0:0:0: -509,216,98781,1,0,0:0:0:0: -509,216,98897,6,0,B|477:120|541:136|509:24,1,187,2|8,0:0|0:0,0:0:0:0: -402,4,99243,1,0,0:0:0:0: -207,91,99358,2,0,L|217:183,1,93.5,2|0,0:0|0:0,0:0:0:0: -364,222,99589,2,0,L|353:129,1,93.5,8|0,0:0|0:0,0:0:0:0: -300,359,99820,5,2,0:0:0:0: -391,372,99935,1,0,0:0:0:0: -432,287,100051,1,8,0:0:0:0: -364,222,100166,1,0,0:0:0:0: -282,268,100281,1,2,0:0:0:0: -200,314,100397,1,0,0:0:0:0: -132,249,100512,1,8,0:0:0:0: -173,164,100628,1,0,0:0:0:0: -264,177,100743,6,0,L|248:73,1,93.5,2|0,0:0|0:0,0:0:0:0: -158,71,100974,2,0,L|173:164,1,93.5,8|0,0:0|0:0,0:0:0:0: -146,341,101204,2,0,L|130:237,1,93.5,2|0,0:0|0:0,0:0:0:0: -40,235,101435,2,0,L|54:327,1,93.5,8|0,0:0|0:0,0:0:0:0: -146,341,101666,6,0,P|214:349|234:329,1,93.5,2|0,0:0|0:0,0:0:0:0: -321,224,101897,2,0,P|253:216|233:236,1,93.5,8|0,0:0|0:0,0:0:0:0: -325,317,102127,1,2,0:0:0:0: -353,129,102243,1,2,0:0:0:0: -345,116,102300,1,2,0:0:0:0: -351,104,102358,1,2,0:0:0:0: -340,93,102416,1,2,0:0:0:0: -342,79,102474,1,2,0:0:0:0: -333,68,102531,1,2,0:0:0:0: -322,58,102589,5,10,0:0:0:0: -360,78,102646,1,2,0:0:0:0: -404,81,102704,1,2,0:0:0:0: -446,65,102762,1,2,0:0:0:0: -477,34,102819,1,2,0:0:0:0: -232,124,102935,2,0,L|173:109,1,46.75,2|0,0:0|0:0,0:0:0:0: -256,114,103051,5,2,0:0:0:0: -249,146,103108,1,2,0:0:0:0: -271,173,103166,1,10,0:0:0:0: -255,200,103224,1,2,0:0:0:0: -271,229,103281,1,2,0:0:0:0: -294,258,103339,1,2,0:0:0:0: -277,283,103397,1,2,0:0:0:0: -291,312,103454,1,2,0:0:0:0: -285,344,103512,6,0,P|370:322|476:316,1,187,6|8,0:0|0:0,0:0:0:0: -495,206,103858,1,0,0:0:0:0: -495,206,103974,2,0,P|456:129|349:137,1,187,2|8,0:0|0:0,0:0:0:0: -272,191,104320,1,0,0:0:0:0: -272,191,104435,6,0,L|280:61,1,93.5,2|0,0:0|0:0,0:0:0:0: -362,23,104666,2,0,P|287:75|188:64,1,187,8|2,0:0|0:0,0:0:0:0: -108,121,105012,1,0,0:0:0:0: -97,10,105127,1,8,0:0:0:0: -195,67,105243,1,8,0:0:0:0: -195,67,105301,1,8,0:0:0:0: -195,67,105358,6,0,P|211:139|111:224,1,187,2|8,0:0|0:0,0:0:0:0: -33,192,105704,1,0,0:0:0:0: -33,192,105820,2,0,L|41:292,1,93.5,2|0,0:0|0:0,0:0:0:0: -149,312,106051,2,0,L|141:218,1,93.5,8|0,0:0|0:0,0:0:0:0: -239,165,106281,6,0,P|272:198|279:244,1,93.5,2|0,0:0|0:0,0:0:0:0: -255,354,106512,2,0,L|351:344,1,93.5,8|0,0:0|0:0,0:0:0:0: -460,337,106743,2,0,P|399:276|386:191,1,140.25,2|0,0:0|0:0,0:0:0:0: -385,226,106974,2,0,L|481:216,1,93.5,8|0,0:0|0:0,0:0:0:0: -391,72,107204,6,0,L|204:91,1,187,2|8,0:0|0:0,0:0:0:0: -126,7,107551,1,0,0:0:0:0: -126,7,107666,2,0,P|95:51|127:179,1,187,2|8,0:0|0:0,0:0:0:0: -233,165,108012,1,0,0:0:0:0: -233,165,108127,6,0,L|219:270,1,93.5,2|0,0:0|0:0,0:0:0:0: -145,342,108358,2,0,P|217:288|336:317,1,187,8|2,0:0|0:0,0:0:0:0: -414,258,108704,1,0,0:0:0:0: -394,369,108820,1,8,0:0:0:0: -309,298,108935,1,0,0:0:0:0: -309,298,108993,1,0,0:0:0:0: -309,298,109051,6,0,L|301:103,1,187,2|8,0:0|0:0,0:0:0:0: -396,51,109397,1,0,0:0:0:0: -396,51,109512,2,0,P|427:108|408:160,1,93.5,2|0,0:0|0:0,0:0:0:0: -385,240,109743,2,0,L|491:230,1,93.5,8|0,0:0|0:0,0:0:0:0: -445,339,109974,6,0,L|339:349,1,93.5,2|0,0:0|0:0,0:0:0:0: -264,278,110204,2,0,P|250:233|260:188,1,93.5,8|0,0:0|0:0,0:0:0:0: -150,164,110435,2,0,P|130:227|164:322,1,140.25,2|0,0:0|0:0,0:0:0:0: -147,298,110666,2,0,P|101:287|57:301,1,93.5,8|0,0:0|0:0,0:0:0:0: -214,357,110897,6,0,L|400:339,1,187,2|8,0:0|0:0,0:0:0:0: -451,239,111243,1,0,0:0:0:0: -451,239,111358,2,0,L|264:256,1,187,2|8,0:0|0:0,0:0:0:0: -314,155,111704,1,0,0:0:0:0: -314,155,111820,6,0,L|407:146,1,93.5,2|0,0:0|0:0,0:0:0:0: -486,65,112051,2,0,P|443:147|450:238,1,187,8|2,0:0|0:0,0:0:0:0: -499,340,112397,1,0,0:0:0:0: -390,312,112512,1,8,0:0:0:0: -288,358,112627,1,0,0:0:0:0: -288,358,112685,1,0,0:0:0:0: -288,358,112743,6,0,L|100:344,1,187,2|8,0:0|0:0,0:0:0:0: -30,256,113089,1,0,0:0:0:0: -30,256,113204,2,0,L|218:270,1,187,2|8,0:0|0:0,0:0:0:0: -308,202,113551,1,0,0:0:0:0: -308,202,113666,6,0,P|322:134|256:43,1,187,2|8,0:0|0:0,0:0:0:0: -211,146,114012,1,0,0:0:0:0: -211,146,114127,2,0,L|221:312,1,140.25,2|0,0:0|0:0,0:0:0:0: -219,285,114358,2,0,P|262:271|306:285,1,93.5,8|0,0:0|0:0,0:0:0:0: -166,367,114589,6,0,B|94:317|105:208|187:178|256:192|256:192|325:205|407:176|418:67|346:17,1,561,2|8,0:0|0:0,0:0:0:0: -292,98,115512,1,2,0:0:0:0: -346,367,116435,6,0,B|418:317|407:208|325:178|256:192|256:192|187:205|105:176|94:67|166:17,1,561,2|8,0:0|0:0,0:0:0:0: -219,98,117358,1,2,0:0:0:0: -292,285,117589,1,8,0:0:0:0: -438,147,117820,1,2,0:0:0:0: -219,98,118051,2,0,L|88:91,1,93.5,8|0,0:0|0:0,0:0:0:0: -10,235,118281,6,0,P|-9:192|1:144,1,93.5,2|2,0:0|0:0,0:0:0:0: -154,279,118512,2,0,P|173:322|163:369,1,93.5,8|0,0:0|0:0,0:0:0:0: -3,339,118743,1,8,0:0:0:0: -219,215,118858,2,0,P|224:170|244:-10,1,187,8|2,0:0|0:0,0:0:0:0: -114,85,119204,5,2,0:0:0:0: -145,112,119262,1,2,0:0:0:0: -151,155,119319,1,2,0:0:0:0: -134,195,119377,1,2,0:0:0:0: -102,223,119434,1,2,0:0:0:0: -84,265,119493,1,2,0:0:0:0: -80,305,119551,1,2,0:0:0:0: -101,342,119608,1,2,0:0:0:0: -135,372,119666,5,2,0:0:0:0: -190,375,119723,1,2,0:0:0:0: -230,335,119781,1,2,0:0:0:0: -280,309,119839,1,2,0:0:0:0: -336,310,119897,1,2,0:0:0:0: -377,346,119954,1,2,0:0:0:0: -425,374,120012,1,2,0:0:0:0: -475,348,120070,1,2,0:0:0:0: -495,297,120127,6,0,P|500:240|514:98,1,187,6|8,0:0|0:0,0:0:0:0: -351,20,120474,2,0,P|345:76|332:219,1,187,2|2,0:0|0:0,0:0:0:0: -415,362,120820,2,0,B|458:378|458:378|508:361,1,93.5,8|0,0:0|0:0,0:0:0:0: -407,268,121051,5,2,0:0:0:0: -332,321,121166,2,0,L|145:308,1,187,2|2,0:0|0:0,0:0:0:0: -213,192,121512,2,0,P|219:146|197:105,1,93.5,2|0,0:0|0:0,0:0:0:0: -47,283,121743,2,0,P|41:329|63:370,1,93.5,8|0,0:0|0:0,0:0:0:0: -213,192,121974,6,0,L|27:180,1,187,2|8,0:0|0:0,0:0:0:0: -146,308,122320,2,0,L|332:321,1,187,2|2,0:0|0:0,0:0:0:0: -226,107,122666,2,0,P|203:147|214:191,1,93.5,8|0,0:0|0:0,0:0:0:0: -83,365,122897,5,2,0:0:0:0: -31,289,123012,2,0,P|24:211|14:102,1,187,2|2,0:0|0:0,0:0:0:0: -214,192,123358,2,0,P|174:214|128:208,1,93.5,2|0,0:0|0:0,0:0:0:0: -303,114,123589,2,0,P|342:91|388:97,1,93.5,8|0,0:0|0:0,0:0:0:0: -498,293,123820,6,0,L|306:281,1,187,2|8,0:0|0:0,0:0:0:0: -214,192,124166,2,0,L|406:204,1,187,2|2,0:0|0:0,0:0:0:0: -278,344,124512,2,0,P|245:309|242:263,1,93.5,8|0,0:0|0:0,0:0:0:0: -408,48,124743,5,2,0:0:0:0: -327,94,124858,2,0,L|311:281,1,187,2|2,0:0|0:0,0:0:0:0: -214,192,125204,2,0,P|154:196|114:171,1,93.5,2|0,0:0|0:0,0:0:0:0: -60,84,125435,2,0,P|120:80|160:105,1,93.5,8|0,0:0|0:0,0:0:0:0: -110,374,125666,5,10,0:0:0:0: -10,209,125781,1,8,0:0:0:0: -184,284,125897,1,8,0:0:0:0: -0,326,126012,1,8,0:0:0:0: -125,181,126127,2,0,B|202:169|224:229|319:212,1,187,2|0,1:0|0:0,0:0:0:0: -398,154,126474,1,0,0:0:0:0: -398,154,126589,6,0,P|346:110|352:43,1,140.25,2|0,0:0|0:0,0:0:0:0: -413,83,126820,2,0,B|419:162|419:162|406:195|406:195|413:267,1,187,2|2,1:0|0:0,0:0:0:0: -367,346,127166,1,0,0:0:0:0: -275,323,127281,1,8,0:0:0:0: -195,372,127397,1,0,0:0:0:0: -195,372,127454,1,0,0:0:0:0: -195,372,127512,6,0,P|190:282|262:228,1,187,6|8,0:0|0:0,0:0:0:0: -330,85,127858,2,0,P|334:174|262:228,1,187,2|2,0:0|0:0,0:0:0:0: -157,129,128204,2,0,L|251:135,1,93.5,8|0,0:0|0:0,0:0:0:0: -456,206,128435,5,2,0:0:0:0: -394,273,128551,2,0,L|188:261,1,187,2|2,0:0|0:0,0:0:0:0: -298,358,128897,2,0,P|341:372|387:364,1,93.5,2|0,0:0|0:0,0:0:0:0: -303,177,129127,2,0,P|259:162|213:170,1,93.5,8|0,0:0|0:0,0:0:0:0: -20,270,129358,6,0,L|206:262,1,187,2|8,0:0|0:0,0:0:0:0: -303,177,129704,2,0,L|117:185,1,187,2|2,0:0|0:0,0:0:0:0: -22,90,130051,2,0,P|82:85|120:118,1,93.5,8|0,0:0|0:0,0:0:0:0: -206,261,130281,5,2,0:0:0:0: -128,351,130397,2,0,P|86:271|116:185,1,187,2|2,0:0|0:0,0:0:0:0: -206,261,130743,2,0,L|225:365,1,93.5,2|0,0:0|0:0,0:0:0:0: -320,268,130974,2,0,L|300:163,1,93.5,8|0,0:0|0:0,0:0:0:0: -236,21,131204,6,0,P|189:99|223:182,1,187,2|8,0:0|0:0,0:0:0:0: -368,330,131551,2,0,P|414:252|380:169,1,187,2|2,0:0|0:0,0:0:0:0: -285,84,131897,2,8,L|302:175,1,93.5,8|0,0:0|0:0,0:0:0:0: -256,337,132127,5,2,0:0:0:0: -167,301,132243,2,0,P|234:242|320:268,1,187,2|2,0:0|0:0,0:0:0:0: -104,372,132589,2,0,P|57:369|10:367,1,93.5,2|0,0:0|0:0,0:0:0:0: -155,245,132820,2,0,P|201:242|248:240,1,93.5,8|0,0:0|0:0,0:0:0:0: -376,268,133051,5,2,0:0:0:0: -363,249,133108,1,2,0:0:0:0: -356,228,133166,1,2,0:0:0:0: -355,206,133224,1,2,0:0:0:0: -360,184,133281,1,10,0:0:0:0: -372,165,133339,1,2,0:0:0:0: -388,150,133397,1,10,0:0:0:0: -408,140,133454,1,2,0:0:0:0: -431,136,133512,1,2,1:0:0:0: -433,216,133743,1,8,0:0:0:0: -433,216,133858,1,8,0:0:0:0: -500,268,133973,5,2,0:0:0:0: -495,296,134031,1,2,0:0:0:0: -490,324,134088,1,2,0:0:0:0: -485,352,134146,1,2,0:0:0:0: -480,380,134204,2,0,B|334:389|359:290|190:308,1,280.5,2|0,1:0|0:0,0:0:0:0: -213,83,134666,2,0,P|238:121|235:167,1,93.5,8|0,0:0|0:0,0:0:0:0: -109,244,134897,6,0,L|-10:240,1,93.5,4|0,0:0|0:0,0:0:0:0: -236,167,135127,2,0,L|329:170,1,93.5,8|0,0:0|0:0,0:0:0:0: -208,383,135358,2,0,L|21:376,1,187,2|8,0:0|0:0,0:0:0:0: -297,282,135704,2,0,L|203:278,1,93.5,0|2,0:0|0:0,0:0:0:0: -147,80,135935,6,0,L|240:83,1,93.5,0|8,0:0|0:0,0:0:0:0: -397,51,136166,2,0,L|347:130,1,93.5,0|2,0:0|0:0,0:0:0:0: -297,282,136397,2,0,L|253:199,1,93.5,0|8,0:0|0:0,0:0:0:0: -397,51,136627,1,0,0:0:0:0: -502,166,136743,6,0,L|409:169,1,93.5,2|0,0:0|0:0,0:0:0:0: -297,282,136974,2,0,L|390:285,1,93.5,8|0,0:0|0:0,0:0:0:0: -296,151,137204,6,0,L|203:154,1,93.5,2|0,0:0|0:0,0:0:0:0: -89,242,137435,2,0,L|182:245,1,93.5,8|0,0:0|0:0,0:0:0:0: -220,337,137666,6,0,L|-2:329,1,187,2|8,0:0|0:0,0:0:0:0: -202,154,138012,2,0,L|424:161,1,187,2|2,0:0|0:0,0:0:0:0: -338,61,138358,2,0,L|244:57,1,93.5,8|0,0:0|0:0,0:0:0:0: -431,315,138589,6,0,B|460:189|460:189|452:223|480:258,1,187,2|8,0:0|0:0,0:0:0:0: -507,343,138935,1,0,0:0:0:0: -507,343,139051,2,0,B|416:313|411:386|300:358,1,187,2|8,0:0|0:0,0:0:0:0: -177,244,139397,1,0,0:0:0:0: -177,244,139512,6,0,B|268:214|273:287|384:259,1,187,2|8,0:0|0:0,0:0:0:0: -424,173,139858,1,0,0:0:0:0: -339,99,139974,2,0,L|328:-1,1,93.5,2|2,0:0|0:0,0:0:0:0: -177,244,140204,2,0,L|167:151,1,93.5,8|0,0:0|0:0,0:0:0:0: -248,95,140435,6,0,L|257:187,1,93.5,2|0,0:0|0:0,0:0:0:0: -96,300,140666,2,0,L|86:207,1,93.5,8|0,0:0|0:0,0:0:0:0: -167,151,140897,6,0,L|177:244,1,93.5,2|0,0:0|0:0,0:0:0:0: -355,315,141127,2,0,L|346:222,1,93.5,8|0,0:0|0:0,0:0:0:0: -263,380,141358,6,0,P|317:344|444:352,1,187,2|8,0:0|0:0,0:0:0:0: -177,244,141704,1,0,0:0:0:0: -177,244,141820,2,0,P|123:280|-4:272,1,187,2|8,0:0|0:0,0:0:0:0: -0,182,142166,1,0,0:0:0:0: -176,58,142281,6,0,L|167:151,1,93.5,2|0,0:0|0:0,0:0:0:0: -345,221,142512,2,0,L|355:129,1,93.5,8|0,0:0|0:0,0:0:0:0: -257,188,142743,6,0,L|248:281,1,93.5,2|0,0:0|0:0,0:0:0:0: -426,351,142974,2,0,L|435:258,1,93.5,8|0,0:0|0:0,0:0:0:0: -203,348,143204,6,0,P|239:361|326:297,1,140.25,2|0,0:0|0:0,0:0:0:0: -435,258,143435,6,0,P|398:267|316:196,1,126.224996147919,8|0,0:0|0:0,0:0:0:0: -257,188,143666,6,0,P|292:194|361:121,1,112.2,2|0,0:0|0:0,0:0:0:0: -419,136,143897,6,0,P|388:138|333:70,1,98.1749970039369,8|0,0:0|0:0,0:0:0:0: -257,188,144127,6,0,L|275:1,1,187,2|8,0:0|0:0,0:0:0:0: -435,258,144474,1,0,0:0:0:0: -435,258,144589,2,0,L|453:71,1,187,2|8,0:0|0:0,0:0:0:0: -149,337,144935,1,0,0:0:0:0: -149,337,145051,6,0,L|159:232,1,93.5,2|0,0:0|0:0,0:0:0:0: -353,153,145281,2,0,L|342:257,1,93.5,8|0,0:0|0:0,0:0:0:0: -169,318,145512,6,0,L|181:199,1,93.5,2|0,0:0|0:0,0:0:0:0: -332,171,145742,2,0,L|319:300,1,93.5,8|0,0:0|0:0,0:0:0:0: -95,131,145974,6,0,L|104:28,1,93.5,2|0,0:0|0:0,0:0:0:0: -247,76,146204,2,0,L|237:169,1,93.5,8|0,0:0|0:0,0:0:0:0: -166,150,146435,2,0,L|176:57,1,93.5,2|0,0:0|0:0,0:0:0:0: -318,95,146666,2,0,L|308:188,1,93.5,8|0,0:0|0:0,0:0:0:0: -475,319,146897,6,0,L|465:216,1,93.5,2|0,0:0|0:0,0:0:0:0: -322,263,147127,2,0,L|332:357,1,93.5,8|0,0:0|0:0,0:0:0:0: -403,338,147358,2,0,L|394:245,1,93.5,2|0,0:0|0:0,0:0:0:0: -252,283,147589,2,0,L|261:376,1,93.5,8|0,0:0|0:0,0:0:0:0: -38,368,147820,6,0,L|140:358,1,93.5,2|0,0:0|0:0,0:0:0:0: -93,215,148050,2,0,L|-1:224,1,93.5,8|0,0:0|0:0,0:0:0:0: -247,203,148281,1,2,0:0:0:0: -186,101,148397,1,8,0:0:0:0: -365,200,148512,1,8,0:0:0:0: -189,304,148627,1,8,0:0:0:0: -237,20,148743,5,2,0:0:0:0: -95,132,148858,1,2,0:0:0:0: -95,132,148916,1,2,0:0:0:0: -95,132,148974,1,10,0:0:0:0: -276,126,149089,1,0,0:0:0:0: -125,24,149204,5,2,0:0:0:0: -189,196,149320,1,8,0:0:0:0: -361,132,149435,1,8,0:0:0:0: -425,304,149551,1,8,0:0:0:0: -330,357,149666,6,0,P|240:297|79:327,1,280.5,6|0,0:0|0:0,0:0:0:0: -237,168,150589,2,0,P|327:108|488:138,1,280.5,2|0,0:0|0:0,0:0:0:0: -401,288,151512,2,0,L|122:257,1,280.5,2|0,0:0|0:0,0:0:0:0: -44,309,152320,1,8,0:0:0:0: -44,309,152377,1,8,0:0:0:0: -44,309,152435,5,10,0:0:0:0: -44,197,152551,1,2,0:0:0:0: -151,162,152666,1,8,0:0:0:0: -216,253,152781,1,2,0:0:0:0: -281,344,152897,1,2,0:0:0:0: -388,309,153012,1,2,0:0:0:0: -388,197,153128,1,8,0:0:0:0: -281,162,153243,1,2,0:0:0:0: -216,253,153358,6,0,L|503:229,1,280.5,6|0,0:0|0:0,0:0:0:0: -296,131,154281,2,0,L|9:155,1,280.5,2|0,0:0|0:0,0:0:0:0: -148,338,155204,2,0,L|428:315,1,280.5,2|0,0:0|0:0,0:0:0:0: -492,225,156127,5,10,0:0:0:0: -492,225,156185,1,8,0:0:0:0: -492,225,156243,1,8,0:0:0:0: -320,168,156358,1,8,0:0:0:0: -427,315,156474,1,8,0:0:0:0: -427,315,156531,1,8,0:0:0:0: -427,315,156589,1,10,0:0:0:0: -427,133,156704,1,8,0:0:0:0: -320,280,156820,1,10,0:0:0:0: -492,225,156935,1,8,0:0:0:0: -320,280,157051,6,0,B|194:258|174:358|44:320,1,280.5,6|0,0:0|0:0,0:0:0:0: -0,138,157974,2,0,P|88:81|186:211,1,280.5,2|0,0:0|0:0,0:0:0:0: -281,344,158897,2,0,L|312:65,1,280.5,2|0,0:0|0:0,0:0:0:0: -419,30,159704,1,8,0:0:0:0: -419,30,159762,1,8,0:0:0:0: -419,30,159820,5,10,0:0:0:0: -484,121,159935,1,8,0:0:0:0: -419,212,160051,1,8,0:0:0:0: -312,177,160166,1,8,0:0:0:0: -312,65,160281,1,10,0:0:0:0: -205,30,160397,1,8,0:0:0:0: -140,121,160513,1,8,0:0:0:0: -206,210,160627,1,8,0:0:0:0: -312,65,160743,6,0,L|418:48,1,93.5,6|0,0:0|0:0,0:0:0:0: -484,121,160974,2,0,L|378:138,1,93.5,8|0,0:0|0:0,0:0:0:0: -206,210,161204,6,0,L|312:193,1,93.5,2|0,0:0|0:0,0:0:0:0: -378,266,161435,2,0,L|272:283,1,93.5,8|0,0:0|0:0,0:0:0:0: -44,197,161666,6,0,L|33:289,1,93.5,2|0,0:0|0:0,0:0:0:0: -116,362,161897,2,0,L|126:269,1,93.5,8|0,0:0|0:0,0:0:0:0: -216,117,162127,6,0,L|205:209,1,93.5,2|0,0:0|0:0,0:0:0:0: -288,282,162358,2,0,L|298:189,1,93.5,8|0,0:0|0:0,0:0:0:0: -388,124,162589,6,0,P|436:122|482:167,1,93.5,2|0,0:0|0:0,0:0:0:0: -494,219,162820,2,0,P|446:221|400:176,1,93.5,8|0,0:0|0:0,0:0:0:0: -496,64,163051,2,0,P|498:110|472:148,1,93.5,2|0,0:0|0:0,0:0:0:0: -386,278,163281,2,0,P|383:232|410:194,1,93.5,8|0,0:0|0:0,0:0:0:0: -511,346,163512,6,0,L|397:359,1,93.5,2|0,0:0|0:0,0:0:0:0: -195,271,163743,2,0,L|287:281,1,93.5,8|0,0:0|0:0,0:0:0:0: -410,194,163974,6,0,L|296:207,1,93.5,2|0,0:0|0:0,0:0:0:0: -94,119,164205,2,0,L|186:129,1,93.5,8|0,0:0|0:0,0:0:0:0: -440,44,164435,6,0,P|407:76|401:122,1,93.5,2|0,0:0|0:0,0:0:0:0: -458,266,164666,2,0,P|445:221|409:193,1,93.5,8|0,0:0|0:0,0:0:0:0: -255,171,164897,2,0,P|299:182|342:164,1,93.5,2|0,0:0|0:0,0:0:0:0: -508,108,165127,1,8,0:0:0:0: -494,219,165243,1,8,0:0:0:0: -494,219,165301,1,8,0:0:0:0: -494,219,165358,6,0,L|482:321,1,93.5,2|0,0:0|0:0,0:0:0:0: -341,164,165589,1,10,0:0:0:0: -341,164,165704,1,2,0:0:0:0: -306,264,165820,5,10,0:0:0:0: -271,234,165877,1,10,0:0:0:0: -225,232,165935,1,2,0:0:0:0: -188,258,165993,1,2,0:0:0:0: -176,303,166050,1,10,0:0:0:0: -164,348,166108,1,10,0:0:0:0: -127,374,166166,1,10,0:0:0:0: -81,372,166224,1,10,0:0:0:0: -46,343,166281,6,0,P|47:239|141:235,1,187,6|8,0:0|0:0,0:0:0:0: -225,232,166627,1,0,0:0:0:0: -225,232,166743,2,0,L|257:25,1,187,2|8,0:0|0:0,0:0:0:0: -150,1,167089,1,0,0:0:0:0: -150,1,167204,6,0,P|137:59|160:95,1,93.5,2|0,0:0|0:0,0:0:0:0: -235,165,167435,2,0,L|379:150,1,140.25,8|0,0:0|0:0,0:0:0:0: -426,172,167666,2,0,L|311:183,1,93.5,2|0,0:0|0:0,0:0:0:0: -223,301,167897,2,0,L|337:289,1,93.5,8|0,0:0|0:0,0:0:0:0: -476,116,168127,6,0,P|416:98|365:216,1,187,2|8,0:0|0:0,0:0:0:0: -425,314,168474,2,0,P|470:271|393:167,1,187,2|2,0:0|0:0,0:0:0:0: -280,170,168820,2,0,P|286:218|342:259,1,93.5,8|0,0:0|0:0,0:0:0:0: -352,356,169051,6,0,L|239:341,1,93.5,2|0,0:0|0:0,0:0:0:0: -122,225,169281,2,0,L|215:238,1,93.5,8|0,0:0|0:0,0:0:0:0: -425,171,169512,2,0,L|332:158,1,93.5,2|0,0:0|0:0,0:0:0:0: -200,91,169743,1,10,0:0:0:0: -203,126,169800,1,2,0:0:0:0: -206,163,169858,1,2,0:0:0:0: -211,201,169916,1,2,0:0:0:0: -215,238,169974,6,0,P|173:305|43:277,1,187,2|8,0:0|0:0,0:0:0:0: -29,212,170320,1,0,0:0:0:0: -29,212,170435,2,0,L|57:7,1,187,2|8,0:0|0:0,0:0:0:0: -127,111,170781,1,0,0:0:0:0: -127,111,170897,6,0,P|172:147|220:138,1,93.5,2|0,0:0|0:0,0:0:0:0: -389,111,171127,2,0,P|315:119|279:171,1,140.25,8|0,0:0|0:0,0:0:0:0: -264,184,171358,2,0,P|268:220|279:296,1,93.5,2|0,0:0|0:0,0:0:0:0: -470,358,171589,2,0,P|465:321|455:246,1,93.5,8|0,0:0|0:0,0:0:0:0: -508,108,171820,6,0,B|432:101|432:101|411:107|411:107|316:99,1,187,2|8,0:0|0:0,0:0:0:0: -214,201,172166,1,0,0:0:0:0: -214,201,172281,2,0,B|289:207|289:207|310:201|310:201|405:209,1,187,2|8,0:0|0:0,0:0:0:0: -223,301,172628,1,0,0:0:0:0: -223,301,172743,2,0,L|83:288,1,140.25,2|0,0:0|0:0,0:0:0:0: -59,302,172974,2,0,L|152:310,1,93.5,8|0,0:0|0:0,0:0:0:0: -329,295,173204,2,0,P|332:355|307:389,1,93.5,2|0,0:0|0:0,0:0:0:0: -264,186,173435,2,0,P|261:126|286:92,1,93.5,8|0,0:0|0:0,0:0:0:0: -170,178,173666,6,0,B|75:177|99:249|4:249,1,187,2|8,0:0|0:0,0:0:0:0: -203,99,174012,1,0,0:0:0:0: -203,99,174127,2,0,B|297:99|273:27|368:27,1,187,2|8,0:0|0:0,0:0:0:0: -484,72,174474,1,0,0:0:0:0: -484,72,174589,6,0,P|475:133|458:257,1,187,2|8,0:0|0:0,0:0:0:0: -361,315,174935,1,0,0:0:0:0: -361,315,175051,2,0,P|355:274|348:222,1,93.5,2|0,0:0|0:0,0:0:0:0: -249,292,175281,2,0,P|254:332|262:385,1,93.5,8|0,0:0|0:0,0:0:0:0: -398,152,175512,6,0,P|312:207|229:175,1,187,2|8,0:0|0:0,0:0:0:0: -164,280,175858,1,0,0:0:0:0: -164,280,175974,2,0,P|90:226|3:249,1,187,2|8,0:0|0:0,0:0:0:0: -237,182,176320,1,0,0:0:0:0: -237,182,176435,6,0,B|229:94|283:97|266:-7,1,187,2|8,0:0|0:0,0:0:0:0: -151,40,176781,1,0,0:0:0:0: -0,156,176897,2,0,L|93:149,1,93.5,2|0,0:0|0:0,0:0:0:0: -164,280,177127,2,0,L|62:286,1,93.5,8|0,0:0|0:0,0:0:0:0: -208,145,177358,5,6,0:0:0:0: -242,59,177474,1,0,0:0:0:0: -334,63,177589,1,8,0:0:0:0: -358,154,177704,1,0,0:0:0:0: -281,204,177820,1,2,0:0:0:0: -208,145,177935,1,0,0:0:0:0: -129,196,178051,1,8,0:0:0:0: -153,286,178166,1,0,0:0:0:0: -246,290,178281,6,0,L|235:384,1,93.5,2|0,0:0|0:0,0:0:0:0: -142,378,178512,2,0,L|153:286,1,93.5,8|0,0:0|0:0,0:0:0:0: -139,103,178743,2,0,L|128:197,1,93.5,2|0,0:0|0:0,0:0:0:0: -35,191,178974,2,0,L|45:98,1,93.5,8|0,0:0|0:0,0:0:0:0: -139,103,179204,6,0,P|186:128|228:120,1,93.5,2|0,0:0|0:0,0:0:0:0: -362,179,179435,2,0,P|316:174|277:198,1,93.5,8|0,0:0|0:0,0:0:0:0: -392,365,179666,5,2,0:0:0:0: -464,306,179781,1,8,0:0:0:0: -464,306,179839,1,8,0:0:0:0: -464,306,179897,1,8,0:0:0:0: -378,270,180012,1,8,0:0:0:0: -450,211,180127,5,2,0:0:0:0: -362,179,180243,1,8,0:0:0:0: -362,179,180301,1,8,0:0:0:0: -362,179,180358,2,0,L|257:164,1,93.5,8|0,0:0|0:0,0:0:0:0: -160,37,180589,5,2,0:0:0:0: -105,123,180704,1,8,0:0:0:0: -269,165,180820,1,8,0:0:0:0: -259,62,180935,1,8,0:0:0:0: -172,203,181051,6,0,P|205:334|201:384,1,187,6|8,0:0|0:0,0:0:0:0: -121,328,181397,1,0,0:0:0:0: -37,358,181512,2,0,P|4:227|8:177,1,187,2|8,0:0|0:0,0:0:0:0: -58,98,181858,1,0,0:0:0:0: -58,98,181974,6,0,P|104:96|150:106,1,93.5,2|0,0:0|0:0,0:0:0:0: -381,158,182204,2,0,P|334:191|224:165,1,140.25,8|0,0:0|0:0,0:0:0:0: -214,161,182435,2,0,L|223:260,1,93.5,2|0,0:0|0:0,0:0:0:0: -184,337,182666,1,8,0:0:0:0: -278,329,182781,6,0,B|383:304|353:370|477:341,1,187,2|2,0:0|0:0,0:0:0:0: -505,267,183127,2,0,P|488:184|474:75,1,187,8|2,0:0|0:0,0:0:0:0: -403,21,183474,2,0,P|382:61|397:133,1,93.5,0|8,0:0|0:0,0:0:0:0: -331,198,183704,1,0,0:0:0:0: -287,106,183820,6,0,P|225:59|118:89,1,187,2|8,0:0|0:0,0:0:0:0: -90,168,184166,1,0,0:0:0:0: -29,98,184281,2,0,P|36:44|36:0,1,93.5,2|0,0:0|0:0,0:0:0:0: -183,152,184512,2,0,P|176:206|176:250,1,93.5,8|0,0:0|0:0,0:0:0:0: -134,324,184743,6,0,P|183:295|325:315,1,187,2|8,0:0|0:0,0:0:0:0: -370,231,185089,1,0,0:0:0:0: -357,132,185204,2,0,P|308:161|166:141,1,187,2|8,0:0|0:0,0:0:0:0: -102,104,185551,1,0,0:0:0:0: -102,104,185666,6,0,L|89:-11,1,93.5,2|0,0:0|0:0,0:0:0:0: -103,202,185897,2,0,P|73:251|84:354,1,140.25,8|0,0:0|0:0,0:0:0:0: -101,371,186127,2,0,L|213:361,1,93.5,2|0,0:0|0:0,0:0:0:0: -281,384,186358,1,8,0:0:0:0: -254,295,186474,6,0,P|248:229|231:92,1,187,2|2,0:0|0:0,0:0:0:0: -274,29,186820,2,0,P|327:8|437:76,1,187,8|2,0:0|0:0,0:0:0:0: -509,130,187166,1,0,0:0:0:0: -422,165,187281,2,0,P|381:187|321:225,1,93.5,8|0,0:0|0:0,0:0:0:0: -268,273,187512,6,0,P|209:225|94:253,1,187,2|8,0:0|0:0,0:0:0:0: -25,205,187858,1,0,0:0:0:0: -36,296,187974,2,0,L|43:393,1,93.5,2|0,0:0|0:0,0:0:0:0: -95,151,188204,2,0,L|88:54,1,93.5,8|0,0:0|0:0,0:0:0:0: -164,6,188435,6,0,P|233:5|369:38,1,187,2|8,0:0|0:0,0:0:0:0: -438,57,188781,1,0,0:0:0:0: -367,123,188897,2,0,P|298:124|162:91,1,187,2|8,0:0|0:0,0:0:0:0: -95,151,189243,1,0,0:0:0:0: -95,151,189358,6,0,L|106:252,1,93.5,2|0,0:0|0:0,0:0:0:0: -54,321,189589,2,0,P|109:298|219:381,1,187,8|2,0:0|0:0,0:0:0:0: -285,305,189935,1,0,0:0:0:0: -370,338,190051,2,0,P|419:338|462:310,1,93.5,8|0,0:0|0:0,0:0:0:0: -497,235,190281,6,0,P|485:171|468:44,1,187,2|8,0:0|0:0,0:0:0:0: -387,10,190627,1,0,0:0:0:0: -387,10,190743,2,0,L|377:109,1,93.5,2|0,0:0|0:0,0:0:0:0: -294,258,190974,2,0,L|304:159,1,93.5,8|0,0:0|0:0,0:0:0:0: -291,73,191204,6,0,P|239:22|128:42,1,187,2|8,0:0|0:0,0:0:0:0: -110,126,191551,1,0,0:0:0:0: -161,202,191666,2,0,P|209:193|250:142,1,93.5,2|0,0:0|0:0,0:0:0:0: -133,37,191897,2,0,P|83:37|30:77,1,93.5,8|0,0:0|0:0,0:0:0:0: -13,160,192127,6,0,B|45:242|165:276|256:192|256:192|347:108|467:142|499:224,1,561,2|8,0:0|0:0,0:0:0:0: -373,263,193051,1,2,0:0:0:0: -13,224,193974,6,0,B|45:142|165:108|256:192|256:192|347:276|467:242|499:160,1,561,2|8,0:0|0:0,0:0:0:0: -373,121,194898,1,2,0:0:0:0: -139,263,195127,1,8,0:0:0:0: -343,342,195358,1,2,0:0:0:0: -373,121,195589,2,8,L|359:5,1,93.5 -232,190,195820,6,0,P|228:235|251:275,1,93.5,2|10,0:0|0:0,0:0:0:0: -447,186,196051,2,0,P|470:147|461:88,1,93.5,10|10,0:0|0:0,0:0:0:0: -327,213,196281,1,10,0:0:0:0: -512,262,196397,5,10,0:0:0:0: -496,271,196454,1,2,0:0:0:0: -483,284,196512,1,10,0:0:0:0: -472,299,196570,1,10,0:0:0:0: -463,316,196627,1,10,0:0:0:0: -456,335,196685,1,10,0:0:0:0: -452,358,196743,5,10,0:0:0:0: -426,322,196801,1,10,0:0:0:0: -390,303,196858,1,10,0:0:0:0: -347,295,196916,1,10,0:0:0:0: -303,298,196974,1,10,0:0:0:0: -269,319,197031,1,10,0:0:0:0: -240,350,197089,1,10,0:0:0:0: -199,361,197147,1,10,0:0:0:0: -151,345,197204,5,10,0:0:0:0: -112,305,197262,1,10,0:0:0:0: -104,251,197320,1,10,0:0:0:0: -127,202,197377,1,10,0:0:0:0: -172,171,197435,1,10,0:0:0:0: -226,173,197493,1,10,0:0:0:0: -267,207,197551,1,10,0:0:0:0: -319,215,197608,1,10,0:0:0:0: -364,185,197666,6,0,P|371:142|384:-12,1,187,6|8,0:0|0:0,0:0:0:0: -293,44,198012,1,0,0:0:0:0: -464,131,198127,2,0,P|457:174|444:328,1,187,2|8,0:0|0:0,0:0:0:0: -364,185,198473,1,0,0:0:0:0: -249,278,198589,6,0,P|198:265|118:255,1,93.5,2|0,0:0|0:0,0:0:0:0: -30,99,198820,1,8,0:0:0:0: -30,99,199051,2,0,P|76:91|121:79,1,93.5,2|0,0:0|0:0,0:0:0:0: -199,27,199281,1,8,0:0:0:0: -113,175,199396,1,0,0:0:0:0: -355,186,199512,6,0,P|284:122|191:131,1,187,2|8,0:0|0:0,0:0:0:0: -113,175,199858,1,0,0:0:0:0: -180,321,199974,2,0,P|188:279|192:191,1,93.5,2|0,0:0|0:0,0:0:0:0: -16,163,200204,2,0,P|8:205|4:293,1,93.5,8|0,0:0|0:0,0:0:0:0: -86,315,200435,5,2,0:0:0:0: -192,228,200551,1,0,0:0:0:0: -71,107,200666,2,0,B|57:79|57:79|74:12,1,93.5,8|0,0:0|0:0,0:0:0:0: -268,190,200897,2,0,B|282:218|282:218|265:285,1,93.5,2|0,0:0|0:0,0:0:0:0: -86,200,201127,2,0,L|187:185,1,93.5,8|0,0:0|0:0,0:0:0:0: -512,85,201358,6,0,P|428:94|348:27,1,187,2|8,0:0|0:0,0:0:0:0: -247,2,201704,1,0,0:0:0:0: -190,93,201820,2,0,P|185:138|171:219,1,93.5,2|0,0:0|0:0,0:0:0:0: -357,153,202051,2,0,P|364:198|384:277,1,93.5,8|0,0:0|0:0,0:0:0:0: -427,341,202281,5,2,0:0:0:0: -449,182,202397,1,0,0:0:0:0: -287,258,202512,2,0,L|190:278,1,93.5,8|0,0:0|0:0,0:0:0:0: -10,123,202743,2,0,B|78:138|78:138|103:170|103:170|182:186,1,187,2|8,0:0|0:0,0:0:0:0: -249,122,203089,1,0,0:0:0:0: -173,0,203204,6,0,P|165:46|162:92,1,93.5,2|0,0:0|0:0,0:0:0:0: -327,194,203435,2,0,P|334:147|337:101,1,93.5,8|0,0:0|0:0,0:0:0:0: -78,274,203666,2,0,P|159:213|264:257,1,187,2|8,0:0|0:0,0:0:0:0: -297,307,204012,1,0,0:0:0:0: -379,366,204127,6,0,P|387:315|390:269,1,93.5,2|0,0:0|0:0,0:0:0:0: -327,194,204358,1,8,0:0:0:0: -357,100,204474,1,0,0:0:0:0: -512,159,204589,6,0,L|420:176,1,93.5,2|0,0:0|0:0,0:0:0:0: -268,121,204820,1,8,0:0:0:0: -385,12,204935,1,0,0:0:0:0: -357,100,205051,6,0,L|160:75,1,187,2|8,0:0|0:0,0:0:0:0: -1,107,205397,1,0,0:0:0:0: -78,143,205512,2,0,B|94:114|94:114|74:32,1,93.5,2|0,0:0|0:0,0:0:0:0: -1,291,205743,2,0,B|-15:320|-15:320|5:402,1,93.5,8|0,0:0|0:0,0:0:0:0: -130,229,205974,6,0,L|7:215,1,93.5,2|0,0:0|0:0,0:0:0:0: -183,327,206204,1,8,0:0:0:0: -234,177,206320,1,0,0:0:0:0: -286,277,206435,2,0,P|374:289|468:223,1,187,2|8,0:0|0:0,0:0:0:0: -425,123,206781,1,0,0:0:0:0: -322,180,206897,6,0,P|224:170|135:140,1,187,2|8,0:0|0:0,0:0:0:0: -140,142,207358,2,0,P|150:195|154:258,1,93.5,2|0,0:0|0:0,0:0:0:0: -323,370,207589,2,0,P|313:317|309:254,1,93.5,8|0,0:0|0:0,0:0:0:0: -62,268,207820,6,0,P|127:324|222:300,1,187,2|8,0:0|0:0,0:0:0:0: -243,204,208166,1,0,0:0:0:0: -309,277,208281,2,0,P|365:282|426:290,1,93.5,2|0,0:0|0:0,0:0:0:0: -461,105,208512,2,0,P|404:99|344:92,1,93.5,8|0,0:0|0:0,0:0:0:0: -481,338,208743,6,0,P|492:262|383:195,2,187,2|8|2,0:0|0:0|0:0,0:0:0:0: -323,370,209320,1,0,0:0:0:0: -309,277,209435,6,0,L|289:153,1,93.5,8|0,0:0|0:0,0:0:0:0: -145,71,209666,2,0,L|262:115,1,93.5,2|0,0:0|0:0,0:0:0:0: -401,28,209897,2,0,L|303:107,1,93.5,8|0,0:0|0:0,0:0:0:0: -206,195,210127,5,2,0:0:0:0: -263,16,210243,1,0,0:0:0:0: -380,159,210358,1,8,0:0:0:0: -380,159,210589,6,0,P|333:151|288:141,1,93.5,2|0,0:0|0:0,0:0:0:0: -197,96,210820,1,8,0:0:0:0: -116,158,210935,1,0,0:0:0:0: -12,43,211051,6,0,P|58:50|103:60,1,93.5,2|0,0:0|0:0,0:0:0:0: -206,195,211281,1,8,0:0:0:0: -278,43,211397,1,0,0:0:0:0: -448,187,211512,6,0,P|357:198|287:140,1,187,2|8,0:0|0:0,0:0:0:0: -197,96,211858,1,0,0:0:0:0: -206,195,211974,5,10,0:0:0:0: -353,85,212089,1,0,0:0:0:0: -234,360,212204,1,8,0:0:0:0: -116,158,212320,1,8,0:0:0:0: -320,269,212435,6,0,P|392:256|515:238,1,187,6|8,0:0|0:0,0:0:0:0: -456,334,212781,1,0,0:0:0:0: -354,166,212897,2,0,P|282:179|159:197,1,187,2|8,0:0|0:0,0:0:0:0: -65,238,213243,1,0,0:0:0:0: -129,370,213358,6,0,P|139:303|154:247,1,93.5,2|0,0:0|0:0,0:0:0:0: -81,67,213589,1,8,0:0:0:0: -81,67,213820,2,0,P|90:112|96:159,1,93.5,2|0,0:0|0:0,0:0:0:0: -60,324,214051,1,8,0:0:0:0: -224,263,214166,1,0,0:0:0:0: -65,238,214281,6,0,L|-38:229,1,93.5,2|0,0:0|0:0,0:0:0:0: -130,367,214512,1,8,0:0:0:0: -304,314,214628,1,0,0:0:0:0: -224,263,214743,2,0,B|206:293|206:293|221:349,1,93.5,2|0,0:0|0:0,0:0:0:0: -366,147,214974,2,0,B|384:117|384:117|368:60,1,93.5,8|0,0:0|0:0,0:0:0:0: -204,176,215204,5,2,0:0:0:0: -361,243,215320,1,0,0:0:0:0: -294,103,215435,2,0,L|287:201,1,93.5,8|0,0:0|0:0,0:0:0:0: -50,91,215666,2,0,P|102:47|225:55,1,187,2|8,0:0|0:0,0:0:0:0: -432,36,216012,5,8,0:0:0:0: -432,36,216070,1,8,0:0:0:0: -432,36,216127,2,0,P|383:29|310:9,1,93.5,2|0,0:0|0:0,0:0:0:0: -393,222,216358,2,0,P|426:189|462:159,1,93.5,8|0,0:0|0:0,0:0:0:0: -295,134,216589,2,0,P|218:137|115:203,1,187,2|8,0:0|0:0,0:0:0:0: -48,248,216935,1,0,0:0:0:0: -18,62,217051,6,0,L|41:158,1,93.5,2|0,0:0|0:0,0:0:0:0: -131,296,217281,2,0,B|143:228|143:228|125:193|125:193|141:100,1,187,8|2,0:0|0:0,0:0:0:0: -279,110,217627,2,0,L|216:186,1,93.5,0|8,0:0|0:0,0:0:0:0: -131,296,217858,1,0,0:0:0:0: -194,368,217974,6,0,P|223:323|219:266,1,93.5,2|0,0:0|0:0,0:0:0:0: -48,248,218204,2,0,P|35:292|46:337,1,93.5,8|0,0:0|0:0,0:0:0:0: -274,225,218435,6,0,L|299:115,1,93.5,2|0,0:0|0:0,0:0:0:0: -2,80,218666,2,0,L|22:171,1,93.5,8|0,0:0|0:0,0:0:0:0: -254,53,218897,6,0,P|224:17|104:42,1,140.25,2|0,0:0|0:0,0:0:0:0: -195,199,219127,6,0,P|238:181|266:111,1,98.1749970039369,8|0,0:0|0:0,0:0:0:0: -82,73,219358,6,0,P|76:119|145:189,1,126.224996147919,2|0,2:0|2:0,2:0:0:0: -171,134,219589,6,0,L|182:63,1,56.0999982879639,8|0,0:0|0:0,0:0:0:0: -327,237,219820,6,0,P|229:220|153:292,1,187,2|8,0:0|0:0,0:0:0:0: -0,315,220166,1,0,0:0:0:0: -71,260,220281,2,0,B|87:291|87:291|74:358,1,93.5,2|0,0:0|0:0,0:0:0:0: -96,99,220512,2,0,B|80:68|80:68|93:1,1,93.5,8|0,0:0|0:0,0:0:0:0: -121,182,220743,6,0,L|9:170,1,93.5,2|0,0:0|0:0,0:0:0:0: -161,53,220974,1,8,0:0:0:0: -242,151,221089,1,0,0:0:0:0: -281,9,221204,2,0,P|379:-2|471:71,1,187,2|8,0:0|0:0,0:0:0:0: -389,306,221551,5,8,0:0:0:0: -389,306,221608,1,8,0:0:0:0: -389,306,221666,2,0,P|370:262|376:195,1,93.5,2|0,0:0|0:0,0:0:0:0: -427,130,221897,2,0,L|234:151,1,187,8|2,0:0|0:0,0:0:0:0: -120,283,222243,1,0,0:0:0:0: -210,299,222358,6,0,P|200:259|163:181,1,93.5,8|0,0:0|0:0,0:0:0:0: -267,2,222589,2,0,P|237:30|188:101,1,93.5,2|0,0:0|0:0,0:0:0:0: -0,103,222820,2,0,P|39:114|125:121,1,93.5,8|0,0:0|0:0,0:0:0:0: -301,317,223051,6,0,P|261:305|175:298,1,93.5,2|0,0:0|0:0,0:0:0:0: -122,344,223281,1,8,0:0:0:0: -180,210,223397,1,0,0:0:0:0: -323,244,223512,6,0,P|384:252|484:175,1,187,2|8,0:0|0:0,0:0:0:0: -425,99,223858,2,0,P|364:91|264:168,1,187,2|2,0:0|0:0,0:0:0:0: -180,210,224204,2,0,L|68:197,1,93.5,8|0,0:0|0:0,0:0:0:0: -5,166,224435,5,2,0:0:0:0: -64,286,224551,1,0,0:0:0:0: -154,124,224666,2,0,B|171:92|171:92|154:13,1,93.5,8|0,0:0|0:0,0:0:0:0: -84,78,224897,5,2,0:0:0:0: -241,118,225012,1,0,0:0:0:0: -84,78,225127,2,0,L|-13:89,1,93.5,8|0,0:0|0:0,0:0:0:0: -149,260,225358,6,0,B|251:234|212:312|352:265,1,187,2|8,0:0|0:0,0:0:0:0: -448,184,225704,2,0,B|324:153|324:153|310:177|284:198,1,187,2|2,0:0|0:0,0:0:0:0: -406,360,226051,2,0,P|412:311|418:257,1,93.5,8|0,0:0|0:0,0:0:0:0: -380,80,226281,1,2,0:0:0:0: -380,80,226512,5,8,0:0:0:0: -502,257,226627,1,2,0:0:0:0: -480,115,226743,5,2,0:0:0:0: -396,231,226858,1,8,0:0:0:0: -485,129,226974,5,8,0:0:0:0: -393,213,227089,1,8,0:0:0:0: -439,171,227204,6,0,L|296:157,1,140.25,2|2,0:0|0:0,0:0:0:0: -299,157,228588,6,0,P|275:197|283:252,1,93.5,2|0,0:0|0:0,0:0:0:0: -422,93,229280,2,0,P|428:47|407:6,1,93.5,2|0,0:0|0:0,0:0:0:0: -324,0,229973,1,2,0:0:0:0: -238,105,230204,5,0,0:0:0:0: -172,136,230434,1,0,0:0:0:0: -180,63,230665,1,0,0:0:0:0: -250,215,230896,6,0,L|231:364,1,140.25,2|2,0:0|0:0,0:0:0:0: -232,354,232280,6,0,L|125:371,1,93.5 -289,280,232973,2,0,L|396:297,1,93.5,2|0,0:0|0:0,0:0:0:0: -212,226,233665,1,2,0:0:0:0: -356,119,233896,5,0,0:0:0:0: -304,62,234127,1,0,0:0:0:0: -231,74,234357,1,0,0:0:0:0: -73,213,234588,6,0,L|216:227,1,140.25,2|2,0:0|0:0,0:0:0:0: -213,227,235973,6,0,P|237:187|229:132,1,93.5,2|0,0:0|0:0,0:0:0:0: -90,291,236665,2,0,P|83:336|107:379,1,93.5,2|0,0:0|0:0,0:0:0:0: -209,330,237357,6,0,L|147:318,1,46.75,2|0,0:0|0:0,0:0:0:0: -122,166,237819,1,0,0:0:0:0: -303,228,238050,1,0,0:0:0:0: -198,241,238280,6,0,P|161:169|186:107,1,140.25,2|0,0:0|0:0,0:0:0:0: -340,37,239204,5,0,0:0:0:0: -402,74,239434,1,0,0:0:0:0: -470,63,239665,1,2,0:0:0:0: -427,182,239896,5,0,0:0:0:0: -497,206,240127,1,0,0:0:0:0: -362,265,240357,5,2,0:0:0:0: -417,309,240588,1,0,0:0:0:0: -429,379,240819,1,0,0:0:0:0: -256,224,241050,5,2,0:0:0:0: -219,285,241280,1,0,0:0:0:0: -184,198,241511,1,0,0:0:0:0: -162,327,241742,1,0,0:0:0:0: -110,203,241973,6,0,P|64:196|16:229,1,93.5,2|2,0:0|0:0,0:0:0:0: -140,135,242665,2,0,P|148:95|140:71,1,46.75,2|0,0:0|0:0,0:0:0:0: -96,37,243127,1,2,0:0:0:0: -75,103,243357,1,0,0:0:0:0: -215,150,243588,5,2,0:0:0:0: -322,47,243819,1,0,0:0:0:0: -396,39,244050,2,0,L|448:32,1,46.75,2|0,0:0|0:0,0:0:0:0: -497,144,244511,2,0,L|395:133,1,93.5,2|0,0:0|0:0,0:0:0:0: -335,257,245204,1,0,0:0:0:0: -363,327,245434,6,0,P|405:282|382:203,1,140.25,2|0,0:0|0:0,0:0:0:0: -265,264,246357,1,2,0:0:0:0: -210,314,246588,1,0,0:0:0:0: -140,294,246819,2,0,P|132:264|133:230,1,46.75,2|0,0:0|0:0,0:0:0:0: -91,67,247280,5,2,0:0:0:0: -166,57,247511,2,0,P|163:80|157:102,1,46.75,2|0,0:0|0:0,0:0:0:0: -132,178,247973,2,0,L|194:170,2,46.75 -309,221,248665,1,2,0:0:0:0: -379,95,248896,1,0,0:0:0:0: -238,21,249127,6,0,P|228:61|228:79,1,46.75,2|0,0:0|0:0,0:0:0:0: -212,135,249588,1,0,0:0:0:0: -225,207,249819,1,2,0:0:0:0: -356,282,250050,6,0,P|366:242|366:224,1,46.75 -382,168,250511,1,0,0:0:0:0: -464,93,250742,6,0,B|441:76|441:76|363:99,1,93.5,2|0,0:0|0:0,0:0:0:0: -310,194,251550,2,0,L|228:184,1,70.1250026750566 -210,103,252247,1,0,0:0:0:0: -210,103,252702,6,0,L|141:111,1,70.1250026750566,2|0,0:0|0:0,0:0:0:0: -117,195,253506,1,2,0:0:0:0: -117,195,254095,6,0,L|36:184,1,70.1250026750566,2|2,0:0|0:0,0:0:0:0: -19,113,255580,1,2,0:0:0:0: -71,53,256480,6,0,P|126:48|182:100,1,122.718754681349,2|0,0:0|0:0,0:0:0:0: -211,259,257747,6,0,P|179:213|190:158,1,105.187504012585,2|0,0:0|0:0,0:0:0:0: -474,66,258892,6,0,P|433:121|242:116,1,271.734385365844,2|0,0:0|0:0,0:0:0:0: -210,216,263197,6,0,P|298:232|385:279,1,187,6|8,0:0|0:0,0:0:0:0: -456,330,263543,1,0,0:0:0:0: -465,242,263658,2,0,P|478:185|512:56,1,187,2|8,0:0|0:0,0:0:0:0: -425,84,264004,1,0,0:0:0:0: -368,19,264120,6,0,P|319:14|246:5,1,93.5,2|0,0:0|0:0,0:0:0:0: -280,139,264350,2,0,P|326:143|372:149,1,93.5,8|0,0:0|0:0,0:0:0:0: -197,57,264581,5,2,0:0:0:0: -121,35,264697,1,2,0:0:0:0: -50,67,264812,1,8,0:0:0:0: -21,139,264927,1,2,0:0:0:0: -37,213,265043,6,0,P|129:220|234:235,1,187,2|8,0:0|0:0,0:0:0:0: -314,216,265389,1,0,0:0:0:0: -283,308,265504,2,0,P|223:365|112:339,1,187,2|8,0:0|0:0,0:0:0:0: -57,295,265850,1,0,0:0:0:0: -142,255,265966,6,0,P|154:195|160:137,1,93.5,2|0,0:0|0:0,0:0:0:0: -52,120,266197,2,0,P|40:180|34:238,1,93.5,8|0,0:0|0:0,0:0:0:0: -217,109,266427,5,2,0:0:0:0: -297,102,266543,1,2,0:0:0:0: -368,138,266658,1,8,0:0:0:0: -406,207,266773,1,2,0:0:0:0: -404,283,266889,6,0,P|417:225|461:68,1,187,2|8,0:0|0:0,0:0:0:0: -503,22,267235,1,0,0:0:0:0: -411,13,267350,2,0,P|364:19|310:27,1,93.5,2|0,0:0|0:0,0:0:0:0: -237,75,267581,1,8,0:0:0:0: -169,6,267697,1,0,0:0:0:0: -148,102,267812,6,0,P|154:148|162:203,1,93.5,2|0,0:0|0:0,0:0:0:0: -333,216,268043,2,0,P|326:169|319:115,1,93.5,8|0,0:0|0:0,0:0:0:0: -63,146,268273,5,2,0:0:0:0: -11,206,268389,1,2,0:0:0:0: -2,283,268504,1,8,0:0:0:0: -36,352,268620,1,2,0:0:0:0: -107,381,268735,6,0,P|191:364|304:347,1,187,2|8,0:0|0:0,0:0:0:0: -370,299,269081,1,0,0:0:0:0: -333,216,269197,2,0,P|339:159|351:93,1,93.5,2|0,0:0|0:0,0:0:0:0: -288,44,269427,1,8,0:0:0:0: -368,2,269543,1,0,0:0:0:0: -512,90,269658,6,0,L|420:77,1,93.5,2|0,0:0|0:0,0:0:0:0: -173,113,269889,2,0,L|265:126,1,93.5,8|0,0:0|0:0,0:0:0:0: -381,222,270120,5,2,0:0:0:0: -306,244,270235,1,2,0:0:0:0: -232,267,270350,1,8,0:0:0:0: -158,289,270466,1,10,0:0:0:0: -154,280,270523,1,8,0:0:0:0: -150,272,270581,6,0,P|152:245|165:215,1,46.75,2|0,0:0|0:0,0:0:0:0: -136,76,270697,2,0,P|159:91|178:117,1,46.75,2|0,0:0|0:0,0:0:0:0: -318,154,270812,2,0,P|294:166|262:170,1,46.75,8|0,0:0|0:0,0:0:0:0: -103,158,270927,6,0,L|25:170,2,46.75,2|0|2,0:0|0:0|0:0,0:0:0:0: -407,33,271158,2,0,L|360:25,1,46.75,2|0,0:0|0:0,0:0:0:0: -216,97,271273,5,10,0:0:0:0: -221,91,271331,1,2,0:0:0:0: -227,87,271389,1,2,0:0:0:0: -235,86,271447,1,2,0:0:0:0: -243,87,271504,2,0,P|274:131|263:194,1,93.5,2|0,0:0|0:0,0:0:0:0: -389,311,271735,5,10,0:0:0:0: -367,268,271793,1,2,0:0:0:0: -377,221,271850,1,2,0:0:0:0: -417,190,271908,1,2,0:0:0:0: -466,194,271966,2,0,P|494:212|507:243,3,46.75,2|0|0|0,0:0|0:0|0:0|0:0,0:0:0:0: -439,260,272197,6,0,P|427:214|418:131,1,93.5,8|2,0:0|0:0,0:0:0:0: -436,94,272370,1,2,0:0:0:0: -441,88,272427,5,2,0:0:0:0: -391,121,272485,1,0,0:0:0:0: -334,118,272543,1,2,0:0:0:0: -285,90,272600,1,0,0:0:0:0: -262,39,272658,1,8,0:0:0:0: -219,3,272716,1,0,0:0:0:0: -163,0,272773,2,0,L|110:14,1,46.75,2|0,0:0|0:0,0:0:0:0: -13,60,272889,5,10,0:0:0:0: -49,87,272947,1,8,0:0:0:0: -61,128,273004,1,8,0:0:0:0: -53,174,273062,1,8,0:0:0:0: -26,207,273120,1,8,0:0:0:0: -13,249,273177,1,0,0:0:0:0: -21,291,273235,2,0,L|33:337,1,46.75,2|0,0:0|0:0,0:0:0:0: -126,380,273350,5,2,0:0:0:0: -162,383,273408,1,2,0:0:0:0: -194,367,273466,1,2,0:0:0:0: -213,339,273523,1,2,0:0:0:0: -242,320,273581,1,10,0:0:0:0: -277,322,273639,1,2,0:0:0:0: -307,345,273697,1,2,0:0:0:0: -343,352,273754,1,2,0:0:0:0: -375,334,273812,6,0,P|383:286|383:218,1,93.5,10|2,0:0|0:0,0:0:0:0: -380,221,273985,1,2,0:0:0:0: -370,203,274043,2,0,L|477:218,1,93.5,2|2,0:0|0:0,0:0:0:0: -263,211,274273,6,0,L|156:196,1,93.5,2|0,0:0|0:0,0:0:0:0: -103,234,274447,1,0,0:0:0:0: -103,234,274504,2,0,B|92:199|92:199|114:119,1,93.5,8|0,0:0|0:0,0:0:0:0: -315,46,274735,2,0,B|326:81|326:81|304:161,1,93.5,2|0,0:0|0:0,0:0:0:0: -248,83,274908,1,0,0:0:0:0: -248,83,274966,2,0,L|141:68,1,93.5,8|0,0:0|0:0,0:0:0:0: -18,156,275197,5,2,0:0:0:0: -115,326,275312,1,0,0:0:0:0: -115,326,275370,1,0,0:0:0:0: -115,326,275427,2,0,P|111:281|101:226,1,93.5,8|0,0:0|0:0,0:0:0:0: -218,50,275658,2,0,P|222:95|232:150,1,93.5,2|0,0:0|0:0,0:0:0:0: -307,291,275889,2,0,L|411:280,1,93.5,8|0,0:0|0:0,0:0:0:0: -471,313,276062,1,0,0:0:0:0: -471,313,276120,6,0,B|478:289|478:289|474:256,7,46.75,2|0|0|0|8|0|0|0,0:0|0:0|0:0|0:0|0:0|0:0|0:0|0:0,0:0:0:0: -372,161,276581,2,0,B|365:185|365:185|369:218,7,46.75,2|0|0|0|8|0|0|0,0:0|0:0|0:0|0:0|0:0|0:0|0:0|0:0,0:0:0:0: -446,195,277043,5,10,0:0:0:0: -234,69,277158,1,8,0:0:0:0: -307,291,277273,1,8,0:0:0:0: -495,131,277389,1,8,0:0:0:0: -327,42,277504,5,2,0:0:0:0: -321,85,277562,1,0,0:0:0:0: -303,124,277620,1,8,0:0:0:0: -271,153,277677,1,8,0:0:0:0: -231,167,277735,1,8,0:0:0:0: -188,170,277793,1,8,0:0:0:0: -147,161,277850,1,8,0:0:0:0: -108,142,277908,1,8,0:0:0:0: -80,111,277966,6,0,P|26:157|22:280,1,187,6|8,0:0|0:0,0:0:0:0: -84,330,278312,2,0,B|188:306|163:368|273:346,1,187,2|2,0:0|0:0,0:0:0:0: -351,312,278658,2,0,P|405:318|475:352,1,93.5,8|0,0:0|0:0,0:0:0:0: -277,257,278889,1,2,0:0:0:0: -277,257,279004,2,0,P|257:178|251:64,1,187,2|2,0:0|0:0,0:0:0:0: -321,3,279350,2,0,P|345:47|344:104,1,93.5,2|0,0:0|0:0,0:0:0:0: -178,142,279581,2,0,P|154:98|155:41,1,93.5,8|0,0:0|0:0,0:0:0:0: -250,72,279812,6,0,P|354:88|472:115,1,187,2|8,0:0|0:0,0:0:0:0: -452,198,280158,2,0,P|348:182|230:155,1,187,2|2,0:0|0:0,0:0:0:0: -208,235,280504,2,0,P|217:284|225:329,1,93.5,8|0,0:0|0:0,0:0:0:0: -125,215,280735,1,2,0:0:0:0: -125,215,280850,2,0,P|72:224|-13:122,1,187,2|2,0:0|0:0,0:0:0:0: -62,10,281197,2,0,P|69:52|67:110,1,93.5,2|0,0:0|0:0,0:0:0:0: -189,148,281427,2,0,P|187:101|194:55,1,93.5,8|0,0:0|0:0,0:0:0:0: -205,40,281600,1,0,0:0:0:0: -218,29,281658,6,0,P|303:43|413:60,1,187,2|8,0:0|0:0,0:0:0:0: -489,32,282004,2,0,P|524:69|499:203,1,187,2|2,0:0|0:0,0:0:0:0: -424,242,282350,2,0,P|416:191|412:130,1,93.5,8|0,0:0|0:0,0:0:0:0: -491,313,282581,1,2,0:0:0:0: -491,313,282697,2,0,P|427:279|296:283,1,187,2|2,0:0|0:0,0:0:0:0: -239,360,283043,2,0,P|230:291|217:234,1,93.5,2|0,0:0|0:0,0:0:0:0: -266,106,283273,2,0,P|275:175|288:232,1,93.5,8|0,0:0|0:0,0:0:0:0: -148,315,283504,6,0,P|91:273|-20:294,1,187,2|8,0:0|0:0,0:0:0:0: -162,217,283850,2,0,P|218:204|365:170,1,187,2|2,0:0|0:0,0:0:0:0: -95,87,284197,2,0,L|85:183,1,93.5,8|0,0:0|0:0,0:0:0:0: -61,358,284427,5,2,0:0:0:0: -61,358,284543,1,8,0:0:0:0: -227,288,284658,1,8,0:0:0:0: -227,288,284773,1,2,0:0:0:0: -159,375,284889,2,0,L|137:213,1,140.25,2|0,0:0|0:0,0:0:0:0: -216,73,285120,2,0,B|200:187|200:187|183:168|163:153,1,140.25,8|0,0:0|0:0,0:0:0:0: -121,113,285350,6,0,L|327:79,1,187,6|8,0:0|0:0,0:0:0:0: -377,144,285697,2,0,P|433:102|408:-9,1,187,2|2,0:0|0:0,0:0:0:0: -299,161,286043,2,0,L|285:253,1,93.5,8|0,0:0|0:0,0:0:0:0: -248,96,286273,1,2,0:0:0:0: -248,96,286389,2,0,P|202:52|83:71,1,187,2|2,0:0|0:0,0:0:0:0: -0,199,286735,2,0,P|51:195|108:172,1,93.5,2|0,0:0|0:0,0:0:0:0: -285,253,286966,2,8,P|239:229|196:185,1,93.5 -160,122,287197,6,0,L|126:341,1,187,2|8,0:0|0:0,0:0:0:0: -196,371,287543,2,0,P|276:320|373:351,1,187,2|2,0:0|0:0,0:0:0:0: -430,284,287889,2,0,P|479:295|538:303,1,93.5,8|0,0:0|0:0,0:0:0:0: -349,246,288120,1,2,0:0:0:0: -349,246,288235,2,0,P|336:185|319:51,1,187,2|2,0:0|0:0,0:0:0:0: -382,5,288581,2,0,L|491:21,1,93.5,2|0,0:0|0:0,0:0:0:0: -245,108,288812,2,0,L|136:92,1,93.5,8|0,0:0|0:0,0:0:0:0: -139,86,288985,1,0,0:0:0:0: -124,78,289043,6,0,P|142:128|46:249,1,187,2|8,0:0|0:0,0:0:0:0: -29,315,289389,2,0,P|114:328|249:358,1,187,2|2,0:0|0:0,0:0:0:0: -301,334,289735,2,0,P|292:280|283:203,1,93.5,8|0,0:0|0:0,0:0:0:0: -195,82,289966,1,2,0:0:0:0: -195,82,290081,2,0,B|163:199|163:199|209:254,1,187,2|2,0:0|0:0,0:0:0:0: -365,164,290427,2,0,L|258:148,1,93.5,2|0,0:0|0:0,0:0:0:0: -375,307,290658,2,0,L|482:323,1,93.5,8|0,0:0|0:0,0:0:0:0: -505,239,290889,6,0,P|519:179|483:55,1,187,2|8,0:0|0:0,0:0:0:0: -408,9,291235,2,0,P|334:30|193:48,1,187,2|2,0:0|0:0,0:0:0:0: -155,110,291581,2,0,P|118:102|55:94,1,93.5,8|0,0:0|0:0,0:0:0:0: -245,138,291812,2,0,P|285:200|249:315,1,187,2|8,0:0|0:0,0:0:0:0: -186,368,292158,1,0,0:0:0:0: -0,252,292273,6,0,L|147:236,1,140.25,2|0,0:0|0:0,0:0:0:0: -179,271,292504,2,0,L|82:282,1,93.5,8|0,0:0|0:0,0:0:0:0: -43,150,292735,2,0,L|139:138,1,93.5,2|0,0:0|0:0,0:0:0:0: -378,221,292966,2,0,P|309:240|212:164,1,187,8|2,0:0|0:0,0:0:0:0: -132,54,293312,1,0,0:0:0:0: -227,0,293427,2,0,L|205:119,1,93.5,8|0,0:0|0:0,0:0:0:0: -147,222,293658,5,2,0:0:0:0: -132,54,293773,1,0,0:0:0:0: -285,131,293889,2,0,P|331:141|388:146,1,93.5,8|0,0:0|0:0,0:0:0:0: -450,101,294120,5,2,0:0:0:0: -363,231,294235,1,2,0:0:0:0: -334,58,294350,1,8,0:0:0:0: -441,199,294466,1,2,0:0:0:0: -303,296,294581,6,0,L|254:308,3,46.75,2|2|2|0,0:0|0:0|0:0|0:0,0:0:0:0: -204,367,294812,2,0,L|158:355,3,46.75,8|2|8|2,0:0|0:0|0:0|0:0,0:0:0:0: -80,363,295043,1,2,0:0:0:0: -45,330,295100,1,2,0:0:0:0: -26,288,295158,1,10,0:0:0:0: -18,242,295216,1,2,0:0:0:0: -22,195,295273,1,2,0:0:0:0: -39,149,295331,1,2,0:0:0:0: -71,111,295389,1,2,0:0:0:0: -116,93,295447,1,2,0:0:0:0: -168,92,295504,6,0,L|391:131,1,187,6|8,0:0|0:0,0:0:0:0: -444,197,295850,1,0,0:0:0:0: -338,248,295966,2,0,L|115:209,1,187,2|8,0:0|0:0,0:0:0:0: -54,275,296312,1,0,0:0:0:0: -152,341,296427,2,0,L|268:360,1,93.5,2|0,0:0|0:0,0:0:0:0: -499,283,296658,2,0,P|473:256|339:249,1,140.25,8|0,0:0|0:0,0:0:0:0: -338,248,296889,2,0,L|324:124,1,93.5,2|0,0:0|0:0,0:0:0:0: -420,129,297120,1,8,0:0:0:0: -397,335,297235,1,0,0:0:0:0: -240,266,297350,6,0,B|197:242|197:242|56:271,1,187,2|8,0:0|0:0,0:0:0:0: -143,23,297697,2,0,B|186:47|186:47|327:18,1,187,2|2,0:0|0:0,0:0:0:0: -150,163,298043,2,0,L|50:147,1,93.5,8|0,0:0|0:0,0:0:0:0: -264,129,298273,2,0,B|334:122|334:122|371:146|371:146|460:136,1,187,2|8,0:0|0:0,0:0:0:0: -306,208,298620,2,0,L|270:313,1,93.5,0|2,0:0|0:0,0:0:0:0: -443,137,298850,5,10,0:0:0:0: -321,20,298966,1,8,0:0:0:0: -390,236,299081,1,10,0:0:0:0: -465,59,299197,6,0,B|352:46|412:116|277:97,1,187,2|8,0:0|0:0,0:0:0:0: -75,82,299543,1,0,0:0:0:0: -75,82,299658,2,0,P|122:26|258:65,1,187,2|8,0:0|0:0,0:0:0:0: -214,214,300004,1,0,0:0:0:0: -214,214,300120,2,0,L|194:102,1,93.5,2|0,0:0|0:0,0:0:0:0: -325,194,300350,2,0,L|303:362,1,140.25,8|0,0:0|0:0,0:0:0:0: -332,378,300581,2,0,L|222:364,1,93.5,2|0,0:0|0:0,0:0:0:0: -391,266,300812,2,0,L|501:280,1,93.5,8|0,0:0|0:0,0:0:0:0: -237,290,301043,6,0,L|42:262,1,187,2|8,0:0|0:0,0:0:0:0: -0,154,301389,1,0,0:0:0:0: -53,47,301504,2,0,L|248:75,1,187,2|8,0:0|0:0,0:0:0:0: -290,183,301850,1,0,0:0:0:0: -237,290,301966,2,0,L|138:275,1,93.5,2|0,0:0|0:0,0:0:0:0: -348,127,302197,2,0,L|447:112,1,93.5,8|0,0:0|0:0,0:0:0:0: -482,321,302427,2,0,P|448:268|318:266,1,187,2|8,0:0|0:0,0:0:0:0: -212,183,302773,1,0,0:0:0:0: -296,62,302889,6,0,P|307:111|306:171,1,93.5,2|0,0:0|0:0,0:0:0:0: -144,275,303120,2,0,P|133:226|134:166,1,93.5,8|0,0:0|0:0,0:0:0:0: -289,328,303350,2,0,B|183:302|233:387|95:356,1,187,2|8,0:0|0:0,0:0:0:0: -42,263,303697,1,0,0:0:0:0: -132,182,303812,6,0,P|180:125|149:5,1,187,2|8,0:0|0:0,0:0:0:0: -68,39,304158,1,0,0:0:0:0: -68,39,304273,2,0,P|55:75|49:136,1,93.5,2|0,0:0|0:0,0:0:0:0: -269,175,304504,2,0,P|282:139|288:78,1,93.5,8|0,0:0|0:0,0:0:0:0: -163,20,304735,6,0,P|173:115|183:232,1,187,2|8,0:0|0:0,0:0:0:0: -146,296,305081,2,0,P|197:258|325:295,1,187,2|2,0:0|0:0,0:0:0:0: -378,353,305427,1,8,0:0:0:0: -470,323,305543,1,0,0:0:0:0: -403,252,305658,6,0,P|411:158|421:65,1,187,2|8,0:0|0:0,0:0:0:0: -353,1,306004,1,0,0:0:0:0: -248,105,306120,2,0,P|304:107|352:65,1,93.5,2|0,0:0|0:0,0:0:0:0: -178,48,306350,2,0,P|136:26|91:31,1,93.5,8|0,0:0|0:0,0:0:0:0: -67,171,306581,6,0,P|56:224|49:280,1,93.5,2|0,0:0|0:0,0:0:0:0: -101,341,306812,1,8,0:0:0:0: -196,332,306927,1,0,0:0:0:0: -148,251,307043,2,0,P|207:210|328:230,1,187,2|8,0:0|0:0,0:0:0:0: -395,165,307389,1,0,0:0:0:0: -327,32,307504,6,0,P|315:80|308:129,1,93.5,2|0,0:0|0:0,0:0:0:0: -379,356,307735,2,0,P|391:308|398:259,1,93.5,8|0,0:0|0:0,0:0:0:0: -511,90,307966,6,0,L|483:-25,1,93.5,2|0,0:0|0:0,0:0:0:0: -473,292,308197,2,0,L|495:382,1,93.5,8|0,0:0|0:0,0:0:0:0: -512,192,308427,5,2,0:0:0:0: -418,163,308543,1,0,0:0:0:0: -375,249,308658,1,8,0:0:0:0: -379,256,308889,5,2,0:0:0:0: -281,219,309004,1,10,0:0:0:0: -275,203,309062,1,2,0:0:0:0: -271,188,309120,1,10,0:0:0:0: -268,171,309177,1,10,0:0:0:0: -265,156,309235,1,10,0:0:0:0: -264,140,309293,1,10,0:0:0:0: -263,124,309350,5,2,0:0:0:0: -233,165,309408,1,2,0:0:0:0: -189,185,309466,1,2,0:0:0:0: -142,183,309523,1,2,0:0:0:0: -105,155,309581,1,10,0:0:0:0: -86,111,309639,1,2,0:0:0:0: -90,63,309697,1,10,0:0:0:0: -122,27,309754,1,2,0:0:0:0: -169,16,309812,6,0,L|237:24,1,46.75,10|2,0:0|0:0,0:0:0:0: -263,124,309927,2,0,L|331:116,1,46.75,10|2,0:0|0:0,0:0:0:0: -361,42,310043,2,0,L|429:50,1,46.75,10|2,0:0|0:0,0:0:0:0: -495,106,310158,1,10,0:0:0:0: -495,106,310216,1,10,0:0:0:0: -495,106,310273,6,0,L|480:318,1,187,6|8,0:0|0:0,0:0:0:0: -428,371,310620,1,0,0:0:0:0: -316,222,310735,2,0,L|329:35,1,187,2|8,0:0|0:0,0:0:0:0: -242,71,311081,1,0,0:0:0:0: -316,222,311197,6,0,P|382:211|413:234,1,93.5,2|0,0:0|0:0,0:0:0:0: -481,292,311427,1,8,0:0:0:0: -481,292,311658,2,0,L|487:198,1,93.5,2|0,0:0|0:0,0:0:0:0: -495,106,311889,1,8,0:0:0:0: -316,222,312004,1,0,0:0:0:0: -428,371,312120,6,0,B|342:392|328:324|229:344,1,187,2|8,0:0|0:0,0:0:0:0: -157,369,312466,1,0,0:0:0:0: -61,235,312581,2,0,P|56:281|74:324,1,93.5,2|0,0:0|0:0,0:0:0:0: -214,214,312812,2,0,P|219:168|201:125,1,93.5,8|0,0:0|0:0,0:0:0:0: -90,63,313043,5,2,0:0:0:0: -146,259,313158,1,0,0:0:0:0: -288,113,313273,2,0,B|307:4,1,93.5,8|0,0:0|0:0,0:0:0:0: -129,166,313504,2,0,B|146:259,1,93.5,2|0,0:0|0:0,0:0:0:0: -178,48,313735,2,0,P|136:67|89:62,1,93.5,8|0,0:0|0:0,0:0:0:0: -357,237,313966,6,0,P|422:175|519:198,1,187,2|8,0:0|0:0,0:0:0:0: -490,283,314312,1,0,0:0:0:0: -465,372,314427,2,0,L|357:354,1,93.5,2|0,0:0|0:0,0:0:0:0: -264,221,314658,2,0,L|372:239,1,93.5,8|0,0:0|0:0,0:0:0:0: -201,356,314889,6,0,P|118:355|52:286,1,140.25,2|0,0:0|0:0,0:0:0:0: -32,263,315120,2,0,L|25:168,1,93.5,8|0,0:0|0:0,0:0:0:0: -258,36,315350,2,0,B|266:125|200:130|215:226,1,187,2|8,0:0|0:0,0:0:0:0: -262,294,315697,1,0,0:0:0:0: -353,237,315812,6,0,B|377:197|377:197|370:141,1,93.5,2|0,0:0|0:0,0:0:0:0: -262,294,316043,2,0,B|238:334|238:334|245:390,1,93.5,8|0,0:0|0:0,0:0:0:0: -372,356,316273,2,0,B|468:339,1,93.5,2|0,0:0|0:0,0:0:0:0: -213,213,316504,2,0,B|117:230,1,93.5,8|0,0:0|0:0,0:0:0:0: -36,14,316735,6,0,P|100:46|93:164,1,187,2|8,0:0|0:0,0:0:0:0: -37,357,317081,1,0,0:0:0:0: -37,357,317197,2,0,P|32:285|138:232,1,187,2|8,0:0|0:0,0:0:0:0: -334,185,317543,1,8,0:0:0:0: -334,185,317600,1,8,0:0:0:0: -334,185,317658,6,0,P|274:224|175:159,1,187,6|8,0:0|0:0,0:0:0:0: -207,84,318004,1,0,0:0:0:0: -387,119,318120,2,0,P|373:181|403:221,1,93.5,2|0,0:0|0:0,0:0:0:0: -491,311,318350,2,0,P|505:249|475:209,1,93.5,8|0,0:0|0:0,0:0:0:0: -222,356,318581,6,0,B|309:359|309:359|334:351|334:351|422:354,1,187,2|8,0:0|0:0,0:0:0:0: -491,311,318927,1,0,0:0:0:0: -304,229,319043,2,0,B|216:232|216:232|191:224|191:224|103:227,1,187,2|8,0:0|0:0,0:0:0:0: -35,184,319389,1,0,0:0:0:0: -197,0,319504,6,0,P|257:80|212:171,1,187,2|8,0:0|0:0,0:0:0:0: -231,155,319966,2,0,P|281:145|329:141,1,93.5,2|0,0:0|0:0,0:0:0:0: -501,305,320197,2,0,P|451:294|403:290,1,93.5,8|0,0:0|0:0,0:0:0:0: -152,382,320427,6,0,P|92:302|137:211,1,187,2|8,0:0|0:0,0:0:0:0: -143,136,320773,1,0,0:0:0:0: -221,242,320889,2,0,P|211:287|207:334,1,93.5,2|0,0:0|0:0,0:0:0:0: -63,159,321120,2,0,P|58:112|49:66,1,93.5,8|0,0:0|0:0,0:0:0:0: -340,49,321350,6,0,P|317:135|231:155,2,187,2|8|2,0:0|0:0|0:0,0:0:0:0: -173,47,321927,1,0,0:0:0:0: -143,136,322043,2,0,L|154:246,1,93.5,8|0,0:0|0:0,0:0:0:0: -400,384,322273,6,0,L|411:274,1,93.5,2|0,0:0|0:0,0:0:0:0: -257,173,322504,2,0,L|332:227,1,93.5,8|0,0:0|0:0,0:0:0:0: -512,154,322735,2,0,L|426:192,1,93.5,2|0,0:0|0:0,0:0:0:0: -256,352,322966,1,8,0:0:0:0: -170,310,323081,1,0,0:0:0:0: -100,373,323197,6,0,L|2:368,1,93.5,2|0,0:0|0:0,0:0:0:0: -152,229,323427,2,0,L|250:224,1,93.5,8|0,0:0|0:0,0:0:0:0: -93,294,323658,2,0,L|-5:289,1,93.5,2|0,0:0|0:0,0:0:0:0: -145,150,323888,2,0,L|243:145,1,93.5,8|0,0:0|0:0,0:0:0:0: -82,221,324120,5,2,0:0:0:0: -69,207,324177,1,2,0:0:0:0: -60,191,324235,1,2,0:0:0:0: -54,173,324293,1,2,0:0:0:0: -52,154,324350,1,10,0:0:0:0: -54,136,324408,1,2,0:0:0:0: -60,118,324466,1,10,0:0:0:0: -70,102,324523,1,10,0:0:0:0: -82,88,324581,5,2,0:0:0:0: -136,92,324638,1,2,0:0:0:0: -176,130,324696,1,10,0:0:0:0: -185,185,324754,1,2,0:0:0:0: -157,233,324811,1,10,0:0:0:0: -129,280,324870,1,10,0:0:0:0: -137,335,324927,1,10,0:0:0:0: -177,373,324985,1,10,0:0:0:0: -232,378,325043,6,0,B|320:375|320:375|344:382|344:382|418:380,1,187,6|8,0:0|0:0,0:0:0:0: -485,314,325389,1,0,0:0:0:0: -267,218,325504,2,0,B|179:215|179:215|155:222|155:222|81:220,1,187,2|8,0:0|0:0,0:0:0:0: -14,154,325850,1,0,0:0:0:0: -323,267,325966,6,0,P|341:225|331:180,1,93.5,2|0,0:0|0:0,0:0:0:0: -250,19,326197,1,8,0:0:0:0: -250,19,326427,2,0,L|240:115,1,93.5,2|0,0:0|0:0,0:0:0:0: -426,191,326658,2,0,L|435:94,1,93.5,8|0,0:0|0:0,0:0:0:0: -82,221,326889,6,0,B|159:244|180:198|267:218,1,187,2|8,0:0|0:0,0:0:0:0: -511,288,327235,1,0,0:0:0:0: -449,357,327350,2,0,B|341:346,1,93.5,2|0,0:0|0:0,0:0:0:0: -332,181,327581,2,0,B|440:192,1,93.5,8|0,0:0|0:0,0:0:0:0: -505,141,327812,5,2,0:0:0:0: -304,46,327927,1,0,0:0:0:0: -323,268,328043,2,0,P|341:229|327:170,1,93.5,8|0,0:0|0:0,0:0:0:0: -155,62,328273,2,0,P|137:101|151:160,1,93.5,2|0,0:0|0:0,0:0:0:0: -248,372,328504,2,0,B|140:383,1,93.5,8|0,0:0|0:0,0:0:0:0: -242,206,328735,6,0,B|297:201|297:201|302:204|302:204|305:200|305:200|433:189,1,187,2|8,0:0|0:0,0:0:0:0: -503,242,329081,1,0,0:0:0:0: -442,9,329197,2,0,B|423:49|423:49|434:97,1,93.5,2|0,0:0|0:0,0:0:0:0: -323,268,329427,2,0,B|341:227|341:227|330:179,1,93.5,8|0,0:0|0:0,0:0:0:0: -155,62,329658,6,0,L|171:222,1,140.25,2|0,0:0|0:0,0:0:0:0: -168,201,329889,2,0,P|123:169|75:182,1,93.5,8|0,0:0|0:0,0:0:0:0: -229,277,330120,2,0,L|322:267,1,93.5,2|0,0:0|0:0,0:0:0:0: -137,335,330350,2,0,L|43:325,1,93.5,8|0,0:0|0:0,0:0:0:0: -309,359,330581,6,0,P|346:302|414:298,1,140.25,2|0,0:0|0:0,0:0:0:0: -415,299,330812,2,0,P|405:251|426:205,1,93.5,8|0,0:0|0:0,0:0:0:0: -512,47,331043,2,0,L|502:140,1,93.5,2|0,0:0|0:0,0:0:0:0: -330,179,331273,2,0,L|339:85,1,93.5,8|0,0:0|0:0,0:0:0:0: -512,320,331504,6,0,B|450:318|452:378|380:370,1,140.25,2|0,0:0|0:0,0:0:0:0: -385,370,331735,2,0,L|291:360,1,93.5,8|0,0:0|0:0,0:0:0:0: -62,381,331966,1,2,0:0:0:0: -161,306,332081,1,8,0:0:0:0: -162,259,332138,1,8,0:0:0:0: -140,219,332196,1,8,0:0:0:0: -101,194,332254,1,8,0:0:0:0: -73,155,332312,1,8,0:0:0:0: -73,108,332370,1,8,0:0:0:0: -96,68,332427,6,0,P|152:99|289:37,1,187,6|8,0:0|0:0,0:0:0:0: -337,9,332773,1,0,0:0:0:0: -421,210,332889,2,0,B|435:170|435:170|418:119,1,93.5,2|0,0:0|0:0,0:0:0:0: -215,213,333120,2,0,B|201:253|201:253|217:303,1,93.5,8|0,0:0|0:0,0:0:0:0: -344,145,333350,6,0,B|340:81|340:81|344:76|344:76|340:73|340:73|335:-14,1,140.25,2|0,0:0|0:0,0:0:0:0: -337,9,333581,2,0,L|446:24,1,93.5,8|0,0:0|0:0,0:0:0:0: -498,196,333812,2,0,P|456:182|421:210,1,93.5,2|0,0:0|0:0,0:0:0:0: -292,360,334043,2,0,P|256:387|214:373,1,93.5,8|0,0:0|0:0,0:0:0:0: -32,201,334273,6,0,B|119:177|135:235|215:212,1,187,2|8,0:0|0:0,0:0:0:0: -214,212,334735,2,0,P|208:181|198:97,1,93.5,2|0,0:0|0:0,0:0:0:0: -306,267,334966,2,0,P|300:297|290:381,1,93.5,8|0,0:0|0:0,0:0:0:0: -72,357,335197,6,0,P|98:307|224:307,1,187,2|8,0:0|0:0,0:0:0:0: -291,359,335543,1,0,0:0:0:0: -498,196,335658,2,0,B|426:187|426:187|392:199|392:199|301:187,1,187,2|8,0:0|0:0,0:0:0:0: -221,176,336004,1,0,0:0:0:0: -10,86,336120,6,0,P|80:77|154:44,1,140.25,2|0,0:0|0:0,0:0:0:0: -143,50,336350,2,0,P|111:107|120:155,1,93.5,8|0,0:0|0:0,0:0:0:0: -277,245,336581,2,0,P|244:188|198:171,1,93.5,2|0,0:0|0:0,0:0:0:0: -41,262,336812,2,0,P|106:262|143:230,1,93.5,8|0,0:0|0:0,0:0:0:0: -223,176,337043,5,2,0:0:0:0: -221,157,337100,1,2,0:0:0:0: -219,138,337158,1,10,0:0:0:0: -217,120,337216,1,2,0:0:0:0: -215,101,337273,1,2,0:0:0:0: -213,82,337331,1,2,0:0:0:0: -211,64,337389,1,2,0:0:0:0: -209,45,337446,1,2,0:0:0:0: -208,27,337504,5,2,0:0:0:0: -258,48,337561,1,2,0:0:0:0: -283,97,337619,1,2,0:0:0:0: -270,151,337677,1,2,0:0:0:0: -227,184,337734,1,10,0:0:0:0: -183,217,337793,1,10,0:0:0:0: -170,270,337851,1,10,0:0:0:0: -195,319,337909,1,10,0:0:0:0: -246,340,337966,6,0,B|313:336|313:336|346:346|346:346|438:337,1,187,6|8,0:0|0:0,0:0:0:0: -501,276,338312,1,0,0:0:0:0: -266,215,338427,2,0,B|198:211|198:211|165:221|165:221|73:212,1,187,2|8,0:0|0:0,0:0:0:0: -11,151,338773,1,0,0:0:0:0: -252,34,338889,6,0,B|233:78|233:78|248:121,1,93.5,2|0,0:0|0:0,0:0:0:0: -425,190,339120,2,0,B|444:146|444:146|428:102,1,93.5,8|0,0:0|0:0,0:0:0:0: -336,155,339350,5,10,0:0:0:0: -336,173,339407,1,8,0:0:0:0: -337,192,339465,1,8,0:0:0:0: -338,211,339523,1,8,0:0:0:0: -338,229,339580,1,8,0:0:0:0: -339,248,339638,1,8,0:0:0:0: -340,267,339696,1,8,0:0:0:0: -340,285,339753,1,8,0:0:0:0: -340,303,339812,6,0,P|426:327|487:262,1,187,6|8,0:0|0:0,0:0:0:0: -425,190,340158,1,0,0:0:0:0: -246,340,340273,2,0,P|249:296|209:250,1,93.5,2|0,0:0|0:0,0:0:0:0: -56,129,340504,2,0,P|53:173|93:219,1,93.5,8|0,0:0|0:0,0:0:0:0: -306,198,340735,6,0,B|310:146|310:146|315:138|315:138|311:130|311:130|323:-1,1,187,2|8,0:0|0:0,0:0:0:0: -237,53,341081,1,0,0:0:0:0: -340,267,341197,2,0,P|368:263|441:256,1,93.5,2|0,0:0|0:0,0:0:0:0: -246,340,341427,2,0,P|217:336|145:329,1,93.5,8|0,0:0|0:0,0:0:0:0: -13,157,341658,6,0,B|101:149|101:221|190:213,1,187,2|8,0:0|0:0,0:0:0:0: -241,137,342004,1,0,0:0:0:0: -42,237,342120,2,0,P|35:289|60:336,1,93.5,2|0,0:0|0:0,0:0:0:0: -162,129,342350,2,0,P|169:77|144:30,1,93.5,8|0,0:0|0:0,0:0:0:0: -153,329,342581,6,0,B|223:321|223:321|269:337|269:337|336:331,1,187,2|8,0:0|0:0,0:0:0:0: -417,379,342927,1,0,0:0:0:0: -306,198,343043,2,0,B|298:113|370:113|362:25,1,187,2|8,0:0|0:0,0:0:0:0: -489,112,343389,1,8,0:0:0:0: -489,112,343447,1,8,0:0:0:0: -489,112,343504,6,0,P|504:193|417:256,1,187,2|8,0:0|0:0,0:0:0:0: -248,341,343850,2,0,P|232:259|319:196,1,187,2|2,0:0|0:0,0:0:0:0: -508,361,344197,2,0,L|416:378,1,93.5,8|0,0:0|0:0,0:0:0:0: -401,373,344370,1,0,0:0:0:0: -386,367,344427,6,0,L|192:354,1,187,2|8,0:0|0:0,0:0:0:0: -107,375,344773,1,0,0:0:0:0: -122,199,344889,2,0,P|144:240|139:286,1,93.5,2|0,0:0|0:0,0:0:0:0: -13,157,345120,2,0,P|7:111|29:70,1,93.5,8|0,0:0|0:0,0:0:0:0: -200,35,345350,6,0,L|302:46,1,93.5,2|0,0:0|0:0,0:0:0:0: -396,207,345581,2,0,L|303:196,1,93.5,8|0,0:0|0:0,0:0:0:0: -384,23,345812,2,0,L|373:115,1,93.5,2|0,0:0|0:0,0:0:0:0: -212,219,346043,2,0,L|223:117,1,93.5,8|0,0:0|0:0,0:0:0:0: -512,279,346273,6,0,P|483:282|372:294,1,140.25,2|0,0:0|0:0,0:0:0:0: -349,363,346504,6,0,P|328:360|251:351,1,98.1749970039369,8|0,0:0|0:0,0:0:0:0: -212,293,346735,6,0,P|188:295|74:307,1,126.224996147919,2|0,0:0|0:0,0:0:0:0: -27,257,346966,6,0,P|14:222|23:192,1,56.0999982879639,8|0,0:0|0:0,0:0:0:0: -133,13,347197,6,0,L|122:205,1,187,6|8,0:0|0:0,0:0:0:0: -251,351,347543,1,0,0:0:0:0: -311,280,347658,2,0,P|331:238|316:186,1,93.5,2|0,0:0|0:0,0:0:0:0: -232,39,347889,2,0,P|212:80|221:125,1,93.5,8|0,0:0|0:0,0:0:0:0: -466,107,348120,6,0,P|403:112|340:117,1,93.5,2|0,0:0|0:0,0:0:0:0: -228,202,348350,2,0,P|290:196|353:191,1,93.5,8|0,0:0|0:0,0:0:0:0: -489,256,348581,2,0,P|426:261|363:266,1,93.5,2|0,0:0|0:0,0:0:0:0: -251,351,348811,2,0,P|313:345|376:340,1,93.5,8|0,0:0|0:0,0:0:0:0: -360,351,348985,1,0,0:0:0:0: -375,359,349043,6,0,P|426:304|407:190,1,187,2|8,0:0|0:0,0:0:0:0: -372,115,349389,1,0,0:0:0:0: -496,18,349504,2,0,L|488:111,1,93.5,2|0,0:0|0:0,0:0:0:0: -328,286,349735,2,0,L|320:192,1,93.5,8|0,0:0|0:0,0:0:0:0: -125,50,349966,6,0,P|170:97|307:65,1,187,2|8,0:0|0:0,0:0:0:0: -356,28,350312,1,0,0:0:0:0: -227,184,350427,2,0,B|262:280|198:280|230:384,1,187,2|8,0:0|0:0,0:0:0:0: -134,342,350773,1,0,0:0:0:0: -10,277,350889,6,0,P|7:223|-1:72,1,187,2|8,0:0|0:0,0:0:0:0: -51,13,351235,1,0,0:0:0:0: -215,180,351350,2,0,P|218:234|226:385,1,187,2|8,0:0|0:0,0:0:0:0: -502,277,351812,6,0,P|505:223|513:72,1,187,2|8,0:0|0:0,0:0:0:0: -461,13,352158,1,0,0:0:0:0: -372,115,352273,2,0,P|356:141|366:217,1,93.5,2|0,0:0|0:0,0:0:0:0: -440,349,352504,2,0,P|425:322|353:292,1,93.5,8|0,0:0|0:0,0:0:0:0: -99,278,352735,6,0,L|285:258,1,187,2|8,0:0|0:0,0:0:0:0: -371,292,353081,1,0,0:0:0:0: -450,211,353197,2,0,L|357:201,1,93.5,2|0,0:0|0:0,0:0:0:0: -191,152,353427,2,0,L|283:142,1,93.5,8|0,0:0|0:0,0:0:0:0: -393,31,353658,6,0,B|365:69|365:69|372:116,1,93.5,2|0,0:0|0:0,0:0:0:0: -489,256,353889,2,0,B|517:218|517:218|509:170,1,93.5,8|0,0:0|0:0,0:0:0:0: -357,201,354120,2,0,P|366:239|372:311,1,93.5,2|0,0:0|0:0,0:0:0:0: -498,96,354350,2,0,P|502:49|512:3,1,93.5,8|0,0:0|0:0,0:0:0:0: -512,333,354581,6,0,B|427:318|423:388|325:362,1,187,2|8,0:0|0:0,0:0:0:0: -284,258,354927,1,0,0:0:0:0: -228,334,355043,2,0,B|32:324,1,187,2|8,0:0|0:0,0:0:0:0: -5,239,355389,1,0,0:0:0:0: -199,79,355504,5,10,0:0:0:0: -110,108,355620,1,8,0:0:0:0: -208,112,355735,5,8,0:0:0:0: -124,116,355851,1,8,0:0:0:0: -211,141,355966,5,10,0:0:0:0: -139,124,356082,1,8,0:0:0:0: -210,164,356197,5,8,0:0:0:0: -153,133,356313,1,8,0:0:0:0: -90,211,356427,6,0,L|292:193,1,187,6|8,0:0|0:0,0:0:0:0: -329,116,356773,1,0,0:0:0:0: -450,258,356889,2,0,L|356:266,1,93.5,2|0,0:0|0:0,0:0:0:0: -414,101,357120,2,0,L|507:92,1,93.5,8|0,0:0|0:0,0:0:0:0: -304,355,357350,6,0,P|252:281|275:194,1,187,2|8,0:0|0:0,0:0:0:0: -329,116,357697,1,0,0:0:0:0: -110,47,357812,5,2,0:0:0:0: -147,134,357927,1,8,0:0:0:0: -93,210,358043,1,10,0:0:0:0: -130,297,358158,1,8,0:0:0:0: -304,355,358273,6,0,L|102:337,1,187,2|8,0:0|0:0,0:0:0:0: -30,374,358620,1,0,0:0:0:0: -0,202,358735,2,0,L|93:210,1,93.5,2|0,0:0|0:0,0:0:0:0: -218,58,358966,2,0,L|124:49,1,93.5,8|0,0:0|0:0,0:0:0:0: -265,250,359197,6,0,B|350:227|364:281|472:252,2,187,2|8|2,0:0|0:0|0:0,0:0:0:0: -202,180,359773,1,0,0:0:0:0: -280,128,359889,1,8,0:0:0:0: -218,58,360004,1,0,0:0:0:0: -407,0,360120,6,0,L|387:186,1,187,2|8,0:0|0:0,0:0:0:0: -449,257,360466,1,0,0:0:0:0: -304,355,360581,2,0,P|310:296|359:272,1,93.5,2|0,0:0|0:0,0:0:0:0: -479,178,360812,2,0,P|473:237|423:260,1,93.5,8|0,0:0|0:0,0:0:0:0: -280,128,361043,6,0,L|274:28,1,93.5,2|0,0:0|0:0,0:0:0:0: -193,261,361273,2,0,L|198:354,1,93.5,8|0,0:0|0:0,0:0:0:0: -36,373,361504,5,8,0:0:0:0: -74,286,361620,1,2,0:0:0:0: -8,219,361735,1,2,0:0:0:0: -46,134,361851,1,8,0:0:0:0: -193,261,361966,6,0,P|274:272|338:188,1,187,2|8,0:0|0:0,0:0:0:0: -280,128,362312,1,0,0:0:0:0: -136,99,362427,2,0,P|123:154|141:192,1,93.5,2|0,0:0|0:0,0:0:0:0: -304,355,362658,2,0,P|317:300|298:261,1,93.5,8|0,0:0|0:0,0:0:0:0: -291,256,362831,1,0,0:0:0:0: -278,244,362889,6,0,L|485:247,1,187,2|8,0:0|0:0,0:0:0:0: -202,180,363235,2,0,L|-5:177,1,187,2|2,0:0|0:0,0:0:0:0: -280,128,363581,2,0,L|383:126,1,93.5,8|0,0:0|0:0,0:0:0:0: -202,180,363812,6,0,B|158:268|240:272|190:359,2,187,2|8|2,0:0|0:0|0:0,0:0:0:0: -280,128,364389,1,0,0:0:0:0: -136,99,364504,2,0,P|123:44|141:5,1,93.5,8|0,0:0|0:0,0:0:0:0: -278,244,364735,6,0,P|291:299|272:337,1,93.5,2|0,0:0|0:0,0:0:0:0: -36,304,364966,2,0,B|50:297|50:297|51:307|51:307|59:297|59:297|60:306|60:306|68:296|68:296|69:305|69:305|77:295|77:295|78:305|78:305|85:294|85:294|86:304|86:304|94:294|94:294|95:303|95:303|103:293|103:293|104:302|104:302|112:292|112:292|113:302|113:302|121:291|121:291|121:301|121:301|129:290|129:290|130:300|130:300|138:290|138:290|139:299|139:299|147:289|147:289|148:299|148:299|156:288|156:288|156:298|156:298|164:287|164:287|165:297|165:297|173:287|173:287|174:296|174:296|182:286|182:286|183:295|183:295|198:289,1,374,8|0,0:0|0:0,0:0:0:0: -277,331,365543,1,0,0:0:0:0: -437,330,365658,6,0,P|467:262|450:218,1,93.5,2|0,0:0|0:0,0:0:0:0: -307,44,365889,2,0,P|277:112|294:156,1,93.5,8|0,0:0|0:0,0:0:0:0: -374,266,366120,1,2,0:0:0:0: -500,153,366235,2,0,L|516:35,2,93.5,0|8|0,0:0|0:0|0:0,0:0:0:0: -374,266,366581,6,0,L|386:358,1,93.5,2|0,0:0|0:0,0:0:0:0: -414,164,366812,2,0,P|322:168|265:263,1,187,8|2,0:0|0:0,0:0:0:0: -188,359,367158,1,0,0:0:0:0: -117,297,367273,2,0,P|115:271|108:189,1,93.5,8|0,0:0|0:0,0:0:0:0: -15,83,367504,6,0,B|192:130|204:-6|413:48,1,374,2|2,0:0|0:0,0:0:0:0: -468,13,368081,1,0,0:0:0:0: -445,104,368197,2,0,P|448:150|452:197,1,93.5,8|0,0:0|0:0,0:0:0:0: -356,295,368427,6,0,P|443:278|500:348,1,187,2|8,0:0|0:0,0:0:0:0: -284,353,368773,2,0,P|196:368|140:298,1,187,2|2,0:0|0:0,0:0:0:0: -99,213,369120,2,0,P|145:216|192:220,1,93.5,8|0,0:0|0:0,0:0:0:0: -378,41,369350,6,0,B|291:17|285:85|196:62,1,187,2|8,0:0|0:0,0:0:0:0: -111,24,369697,1,0,0:0:0:0: -17,161,369812,2,0,P|11:115|32:74,1,93.5,2|0,0:0|0:0,0:0:0:0: -152,211,370043,2,0,P|158:257|138:299,1,93.5,8|0,0:0|0:0,0:0:0:0: -5,384,370273,5,2,0:0:0:0: -58,268,370389,1,2,0:0:0:0: -130,372,370504,1,8,0:0:0:0: -183,256,370620,1,8,0:0:0:0: -187,237,370677,1,8,0:0:0:0: -191,219,370735,1,10,0:0:0:0: -196,201,370793,1,8,0:0:0:0: -200,183,370850,1,8,0:0:0:0: -205,165,370908,1,8,0:0:0:0: -209,146,370966,1,10,0:0:0:0: -111,24,371081,1,2,0:0:0:0: -197,62,371197,6,0,L|387:49,1,187,6|8,0:0|0:0,0:0:0:0: -315,322,371658,2,0,L|125:335,1,187,2|8,0:0|0:0,0:0:0:0: -457,193,372120,2,0,L|444:379,1,187,2|8,0:0|0:0,0:0:0:0: -55,191,372581,2,0,L|63:67,1,93.5,2|0,0:0|0:0,0:0:0:0: -68,4,372812,1,8,0:0:0:0: -152,46,372927,1,0,0:0:0:0: -186,263,373043,6,0,L|-4:276,1,187,6|8,0:0|0:0,0:0:0:0: -326,121,373504,2,0,L|516:108,1,187,2|8,0:0|0:0,0:0:0:0: -491,199,373850,1,0,0:0:0:0: -468,288,373966,2,0,L|282:301,1,187,2|8,0:0|0:0,0:0:0:0: -203,5,374427,2,0,L|328:-3,1,93.5,2|0,0:0|0:0,0:0:0:0: -389,13,374658,1,8,0:0:0:0: -329,84,374773,1,8,0:0:0:0: -327,102,374830,1,8,0:0:0:0: -326,121,374889,6,0,L|516:108,1,187,6|8,0:0|0:0,0:0:0:0: -227,377,375350,1,2,0:0:0:0: -138,348,375466,1,8,0:0:0:0: -138,254,375581,1,8,0:0:0:0: -227,225,375697,1,2,0:0:0:0: -282,301,375812,2,0,L|468:288,1,187,2|8,0:0|0:0,0:0:0:0: -230,83,376273,2,0,L|44:96,1,187,2|8,0:0|0:0,0:0:0:0: -11,185,376620,1,0,0:0:0:0: -303,212,376735,6,0,L|316:26,1,187,6|8,0:0|0:0,0:0:0:0: -43,96,377197,1,2,0:0:0:0: -72,7,377313,1,8,0:0:0:0: -166,7,377428,1,8,0:0:0:0: -195,96,377544,1,8,0:0:0:0: -119,151,377658,2,0,L|132:337,1,187,2|8,0:0|0:0,0:0:0:0: -439,382,378120,2,0,L|426:196,1,187,2|8,0:0|0:0,0:0:0:0: -348,10,378581,6,0,B|414:65|393:172|309:195|241:175|241:175|174:156|90:178|69:285|132:337,1,561,6|8,0:0|0:0,0:0:0:0: -444,354,379504,2,0,P|501:284|473:199,1,187,2|8,0:0|0:0,0:0:0:0: -348,10,379850,2,0,P|291:80|319:165,1,187,2|2,0:0|0:0,0:0:0:0: -408,139,380197,2,0,L|419:46,1,93.5,8|0,0:0|0:0,0:0:0:0: -396,231,380427,5,2,0:0:0:0: -396,231,380543,2,0,P|322:217|256:317,1,187,2|2,0:0|0:0,0:0:0:0: -324,358,380889,2,0,L|417:347,1,93.5,2|0,0:0|0:0,0:0:0:0: -255,294,381120,2,0,L|162:283,1,93.5,8|0,0:0|0:0,0:0:0:0: -32,66,381350,5,2,0:0:0:0: -32,66,381466,2,0,P|106:52|172:152,1,187,2|2,0:0|0:0,0:0:0:0: -104,193,381812,2,0,L|11:182,1,93.5,2|0,0:0|0:0,0:0:0:0: -173,129,382043,2,0,L|266:118,1,93.5,8|0,0:0|0:0,0:0:0:0: -490,320,382273,6,2,L|408:303,3,46.75,2|2|10|2,0:0|0:0|0:0|0:0,0:0:0:0: -427,332,382504,2,2,L|345:315,3,46.75,2|2|10|2,0:0|0:0|0:0|0:0,0:0:0:0: -349,341,382735,5,10,0:0:0:0: -364,312,382792,1,2,0:0:0:0: -365,280,382850,1,10,0:0:0:0: -351,251,382908,1,2,0:0:0:0: -325,232,382966,1,10,0:0:0:0: -293,227,383023,1,2,0:0:0:0: -267,208,383080,1,10,0:0:0:0: -253,179,383138,1,2,0:0:0:0: -254,147,383197,5,10,0:0:0:0: -290,174,383254,1,2,0:0:0:0: -303,218,383312,1,10,0:0:0:0: -288,262,383370,1,2,0:0:0:0: -250,287,383427,1,10,0:0:0:0: -204,280,383484,1,2,0:0:0:0: -171,248,383542,1,10,0:0:0:0: -163,203,383600,1,2,0:0:0:0: -182,161,383657,5,10,0:0:0:0: -184,102,383715,1,2,0:0:0:0: -144,58,383773,1,10,0:0:0:0: -82,54,383831,1,2,0:0:0:0: -35,93,383889,1,10,0:0:0:0: -30,153,383947,1,2,0:0:0:0: -58,205,384004,1,10,0:0:0:0: -57,266,384062,1,2,0:0:0:0: -18,313,384120,5,14,0:0:0:0: diff --git a/osu.Game.Rulesets.Catch/Resources/Testing/Beatmaps/basic-expected-conversion.json b/osu.Game.Rulesets.Catch/Resources/Testing/Beatmaps/basic-expected-conversion.json new file mode 100644 index 0000000000..3abd3d1ddd --- /dev/null +++ b/osu.Game.Rulesets.Catch/Resources/Testing/Beatmaps/basic-expected-conversion.json @@ -0,0 +1 @@ +{"Mappings":[{"StartTime":500.0,"Objects":[{"StartTime":500.0,"Position":96.0},{"StartTime":562.0,"Position":100.84},{"StartTime":625.0,"Position":125.0},{"StartTime":687.0,"Position":152.84},{"StartTime":750.0,"Position":191.0},{"StartTime":812.0,"Position":212.84},{"StartTime":875.0,"Position":217.0},{"StartTime":937.0,"Position":234.84},{"StartTime":1000.0,"Position":256.0},{"StartTime":1062.0,"Position":267.84},{"StartTime":1125.0,"Position":284.0},{"StartTime":1187.0,"Position":311.84},{"StartTime":1250.0,"Position":350.0},{"StartTime":1312.0,"Position":359.84},{"StartTime":1375.0,"Position":367.0},{"StartTime":1437.0,"Position":400.84},{"StartTime":1500.0,"Position":416.0},{"StartTime":1562.0,"Position":377.159973},{"StartTime":1625.0,"Position":367.0},{"StartTime":1687.0,"Position":374.159973},{"StartTime":1750.0,"Position":353.0},{"StartTime":1812.0,"Position":329.159973},{"StartTime":1875.0,"Position":288.0},{"StartTime":1937.0,"Position":259.159973},{"StartTime":2000.0,"Position":256.0},{"StartTime":2058.0,"Position":232.44},{"StartTime":2116.0,"Position":222.879974},{"StartTime":2174.0,"Position":185.319992},{"StartTime":2232.0,"Position":177.76001},{"StartTime":2290.0,"Position":162.200012},{"StartTime":2348.0,"Position":158.639984},{"StartTime":2406.0,"Position":111.079994},{"StartTime":2500.0,"Position":96.0}]},{"StartTime":3000.0,"Objects":[{"StartTime":3000.0,"Position":18.0},{"StartTime":3062.0,"Position":482.0},{"StartTime":3125.0,"Position":243.0},{"StartTime":3187.0,"Position":332.0},{"StartTime":3250.0,"Position":477.0},{"StartTime":3312.0,"Position":376.0},{"StartTime":3375.0,"Position":104.0},{"StartTime":3437.0,"Position":156.0},{"StartTime":3500.0,"Position":135.0},{"StartTime":3562.0,"Position":256.0},{"StartTime":3625.0,"Position":360.0},{"StartTime":3687.0,"Position":199.0},{"StartTime":3750.0,"Position":239.0},{"StartTime":3812.0,"Position":326.0},{"StartTime":3875.0,"Position":393.0},{"StartTime":3937.0,"Position":470.0},{"StartTime":4000.0,"Position":136.0}]},{"StartTime":4500.0,"Objects":[{"StartTime":4500.0,"Position":317.0},{"StartTime":4562.0,"Position":354.0},{"StartTime":4625.0,"Position":414.0},{"StartTime":4687.0,"Position":39.0},{"StartTime":4750.0,"Position":172.0},{"StartTime":4812.0,"Position":479.0},{"StartTime":4875.0,"Position":18.0},{"StartTime":4937.0,"Position":151.0},{"StartTime":5000.0,"Position":342.0},{"StartTime":5062.0,"Position":400.0},{"StartTime":5125.0,"Position":420.0},{"StartTime":5187.0,"Position":90.0},{"StartTime":5250.0,"Position":220.0},{"StartTime":5312.0,"Position":80.0},{"StartTime":5375.0,"Position":421.0},{"StartTime":5437.0,"Position":473.0},{"StartTime":5500.0,"Position":97.0}]},{"StartTime":6000.0,"Objects":[{"StartTime":6000.0,"Position":105.0},{"StartTime":6062.0,"Position":249.0},{"StartTime":6125.0,"Position":163.0},{"StartTime":6187.0,"Position":194.0},{"StartTime":6250.0,"Position":106.0},{"StartTime":6312.0,"Position":212.0},{"StartTime":6375.0,"Position":257.0},{"StartTime":6437.0,"Position":461.0},{"StartTime":6500.0,"Position":79.0}]},{"StartTime":7000.0,"Objects":[{"StartTime":7000.0,"Position":256.0},{"StartTime":7062.0,"Position":294.84},{"StartTime":7125.0,"Position":279.0},{"StartTime":7187.0,"Position":309.84},{"StartTime":7250.0,"Position":336.0},{"StartTime":7312.0,"Position":322.16},{"StartTime":7375.0,"Position":308.0},{"StartTime":7437.0,"Position":263.16},{"StartTime":7500.0,"Position":256.0},{"StartTime":7562.0,"Position":261.84},{"StartTime":7625.0,"Position":277.0},{"StartTime":7687.0,"Position":318.84},{"StartTime":7750.0,"Position":336.0},{"StartTime":7803.0,"Position":305.04},{"StartTime":7857.0,"Position":307.76},{"StartTime":7910.0,"Position":297.8},{"StartTime":8000.0,"Position":256.0}]},{"StartTime":8500.0,"Objects":[{"StartTime":8500.0,"Position":32.0},{"StartTime":8562.0,"Position":22.8515015},{"StartTime":8625.0,"Position":28.5659637},{"StartTime":8687.0,"Position":50.3433228},{"StartTime":8750.0,"Position":56.58974},{"StartTime":8812.0,"Position":64.23422},{"StartTime":8875.0,"Position":67.7117844},{"StartTime":8937.0,"Position":90.52607},{"StartTime":9000.0,"Position":101.81015},{"StartTime":9062.0,"Position":113.478188},{"StartTime":9125.0,"Position":159.414444},{"StartTime":9187.0,"Position":155.1861},{"StartTime":9250.0,"Position":179.600418},{"StartTime":9312.0,"Position":212.293015},{"StartTime":9375.0,"Position":197.2076},{"StartTime":9437.0,"Position":243.438324},{"StartTime":9500.0,"Position":237.2304},{"StartTime":9562.0,"Position":241.253983},{"StartTime":9625.0,"Position":258.950623},{"StartTime":9687.0,"Position":253.3786},{"StartTime":9750.0,"Position":270.8865},{"StartTime":9812.0,"Position":244.38974},{"StartTime":9875.0,"Position":242.701874},{"StartTime":9937.0,"Position":256.2331},{"StartTime":10000.0,"Position":270.339874},{"StartTime":10062.0,"Position":275.9349},{"StartTime":10125.0,"Position":297.2969},{"StartTime":10187.0,"Position":307.834137},{"StartTime":10250.0,"Position":321.6449},{"StartTime":10312.0,"Position":357.746338},{"StartTime":10375.0,"Position":358.21875},{"StartTime":10437.0,"Position":394.943},{"StartTime":10500.0,"Position":401.0588},{"StartTime":10558.0,"Position":418.21347},{"StartTime":10616.0,"Position":424.6034},{"StartTime":10674.0,"Position":455.835754},{"StartTime":10732.0,"Position":477.5042},{"StartTime":10790.0,"Position":476.290955},{"StartTime":10848.0,"Position":470.943237},{"StartTime":10906.0,"Position":503.3372},{"StartTime":10999.0,"Position":508.166229}]},{"StartTime":11500.0,"Objects":[{"StartTime":11500.0,"Position":321.0},{"StartTime":11562.0,"Position":17.0},{"StartTime":11625.0,"Position":173.0},{"StartTime":11687.0,"Position":170.0},{"StartTime":11750.0,"Position":447.0},{"StartTime":11812.0,"Position":218.0},{"StartTime":11875.0,"Position":394.0},{"StartTime":11937.0,"Position":46.0},{"StartTime":12000.0,"Position":480.0}]},{"StartTime":12500.0,"Objects":[{"StartTime":12500.0,"Position":512.0},{"StartTime":12562.0,"Position":491.3132},{"StartTime":12625.0,"Position":484.3089},{"StartTime":12687.0,"Position":454.6221},{"StartTime":12750.0,"Position":433.617767},{"StartTime":12812.0,"Position":399.930969},{"StartTime":12875.0,"Position":395.926666},{"StartTime":12937.0,"Position":361.239868},{"StartTime":13000.0,"Position":353.235535},{"StartTime":13062.0,"Position":314.548767},{"StartTime":13125.0,"Position":315.544434},{"StartTime":13187.0,"Position":288.857635},{"StartTime":13250.0,"Position":254.853333},{"StartTime":13312.0,"Position":239.166534},{"StartTime":13375.0,"Position":240.1622},{"StartTime":13437.0,"Position":212.4754},{"StartTime":13500.0,"Position":194.471069},{"StartTime":13562.0,"Position":161.784271},{"StartTime":13625.0,"Position":145.779968},{"StartTime":13687.0,"Position":129.09314},{"StartTime":13750.0,"Position":104.088837},{"StartTime":13812.0,"Position":95.40204},{"StartTime":13875.0,"Position":61.3977356},{"StartTime":13937.0,"Position":56.710907},{"StartTime":14000.0,"Position":35.7066345},{"StartTime":14062.0,"Position":5.019806},{"StartTime":14125.0,"Position":0.0},{"StartTime":14187.0,"Position":39.7696266},{"StartTime":14250.0,"Position":23.0119171},{"StartTime":14312.0,"Position":75.94882},{"StartTime":14375.0,"Position":98.19112},{"StartTime":14437.0,"Position":82.12803},{"StartTime":14500.0,"Position":118.370323},{"StartTime":14562.0,"Position":149.307236},{"StartTime":14625.0,"Position":168.549515},{"StartTime":14687.0,"Position":190.486435},{"StartTime":14750.0,"Position":186.728714},{"StartTime":14812.0,"Position":199.665634},{"StartTime":14875.0,"Position":228.907928},{"StartTime":14937.0,"Position":264.844849},{"StartTime":15000.0,"Position":271.087128},{"StartTime":15062.0,"Position":290.024017},{"StartTime":15125.0,"Position":302.266327},{"StartTime":15187.0,"Position":344.203247},{"StartTime":15250.0,"Position":356.445526},{"StartTime":15312.0,"Position":359.382446},{"StartTime":15375.0,"Position":401.624725},{"StartTime":15437.0,"Position":388.561646},{"StartTime":15500.0,"Position":423.803925},{"StartTime":15562.0,"Position":425.740845},{"StartTime":15625.0,"Position":449.983124},{"StartTime":15687.0,"Position":468.920044},{"StartTime":15750.0,"Position":492.162323},{"StartTime":15812.0,"Position":506.784332},{"StartTime":15875.0,"Position":474.226227},{"StartTime":15937.0,"Position":482.978638},{"StartTime":16000.0,"Position":446.420532},{"StartTime":16058.0,"Position":418.4146},{"StartTime":16116.0,"Position":425.408844},{"StartTime":16174.0,"Position":383.402924},{"StartTime":16232.0,"Position":363.397156},{"StartTime":16290.0,"Position":343.391235},{"StartTime":16348.0,"Position":328.385468},{"StartTime":16406.0,"Position":322.3797},{"StartTime":16500.0,"Position":291.1977}]},{"StartTime":17000.0,"Objects":[{"StartTime":17000.0,"Position":256.0},{"StartTime":17062.0,"Position":228.16},{"StartTime":17125.0,"Position":234.0},{"StartTime":17187.0,"Position":202.16},{"StartTime":17250.0,"Position":176.0},{"StartTime":17312.0,"Position":210.84},{"StartTime":17375.0,"Position":221.0},{"StartTime":17437.0,"Position":219.84},{"StartTime":17500.0,"Position":256.0},{"StartTime":17562.0,"Position":219.16},{"StartTime":17625.0,"Position":228.0},{"StartTime":17687.0,"Position":203.16},{"StartTime":17750.0,"Position":176.0},{"StartTime":17803.0,"Position":174.959991},{"StartTime":17857.0,"Position":214.23999},{"StartTime":17910.0,"Position":228.200012},{"StartTime":18000.0,"Position":256.0}]},{"StartTime":18500.0,"Objects":[{"StartTime":18500.0,"Position":362.0},{"StartTime":18559.0,"Position":249.0},{"StartTime":18618.0,"Position":357.0},{"StartTime":18678.0,"Position":167.0},{"StartTime":18737.0,"Position":477.0},{"StartTime":18796.0,"Position":411.0},{"StartTime":18856.0,"Position":254.0},{"StartTime":18915.0,"Position":308.0},{"StartTime":18975.0,"Position":399.0},{"StartTime":19034.0,"Position":176.0},{"StartTime":19093.0,"Position":14.0},{"StartTime":19153.0,"Position":258.0},{"StartTime":19212.0,"Position":221.0},{"StartTime":19271.0,"Position":481.0},{"StartTime":19331.0,"Position":92.0},{"StartTime":19390.0,"Position":211.0},{"StartTime":19450.0,"Position":135.0}]},{"StartTime":19875.0,"Objects":[{"StartTime":19875.0,"Position":216.0},{"StartTime":19937.0,"Position":215.307053},{"StartTime":20000.0,"Position":236.036865},{"StartTime":20062.0,"Position":236.312088},{"StartTime":20125.0,"Position":235.838928},{"StartTime":20187.0,"Position":269.9743},{"StartTime":20250.0,"Position":285.999146},{"StartTime":20312.0,"Position":283.669067},{"StartTime":20375.0,"Position":317.446747},{"StartTime":20437.0,"Position":330.750275},{"StartTime":20500.0,"Position":344.0156},{"StartTime":20562.0,"Position":318.472168},{"StartTime":20625.0,"Position":309.165466},{"StartTime":20687.0,"Position":317.044617},{"StartTime":20750.0,"Position":280.457367},{"StartTime":20812.0,"Position":272.220581},{"StartTime":20875.0,"Position":270.3294},{"StartTime":20937.0,"Position":262.57605},{"StartTime":21000.0,"Position":244.803329},{"StartTime":21062.0,"Position":215.958359},{"StartTime":21125.0,"Position":177.79332},{"StartTime":21187.0,"Position":190.948349},{"StartTime":21250.0,"Position":158.78334},{"StartTime":21312.0,"Position":136.93837},{"StartTime":21375.0,"Position":119.121056},{"StartTime":21437.0,"Position":132.387573},{"StartTime":21500.0,"Position":124.503014},{"StartTime":21562.0,"Position":118.749374},{"StartTime":21625.0,"Position":123.165535},{"StartTime":21687.0,"Position":96.02999},{"StartTime":21750.0,"Position":118.547928},{"StartTime":21812.0,"Position":128.856232},{"StartTime":21875.0,"Position":124.28746},{"StartTime":21937.0,"Position":150.754929},{"StartTime":22000.0,"Position":149.528732},{"StartTime":22062.0,"Position":145.1691},{"StartTime":22125.0,"Position":182.802155},{"StartTime":22187.0,"Position":178.6452},{"StartTime":22250.0,"Position":213.892181},{"StartTime":22312.0,"Position":218.713028},{"StartTime":22375.0,"Position":240.4715},{"StartTime":22437.0,"Position":239.371887},{"StartTime":22500.0,"Position":261.907257},{"StartTime":22562.0,"Position":314.353119},{"StartTime":22625.0,"Position":299.273376},{"StartTime":22687.0,"Position":356.98288},{"StartTime":22750.0,"Position":339.078552},{"StartTime":22812.0,"Position":377.8958},{"StartTime":22875.0,"Position":398.054047},{"StartTime":22937.0,"Position":398.739441},{"StartTime":23000.0,"Position":407.178467},{"StartTime":23062.0,"Position":444.8687},{"StartTime":23125.0,"Position":417.069977},{"StartTime":23187.0,"Position":454.688477},{"StartTime":23250.0,"Position":428.9612},{"StartTime":23312.0,"Position":441.92807},{"StartTime":23375.0,"Position":439.749878},{"StartTime":23433.0,"Position":455.644684},{"StartTime":23491.0,"Position":440.7359},{"StartTime":23549.0,"Position":430.0944},{"StartTime":23607.0,"Position":420.796173},{"StartTime":23665.0,"Position":435.897461},{"StartTime":23723.0,"Position":418.462555},{"StartTime":23781.0,"Position":405.53775},{"StartTime":23874.0,"Position":408.720825}]}]} \ No newline at end of file diff --git a/osu.Game.Rulesets.Catch/Resources/Testing/Beatmaps/basic.osu b/osu.Game.Rulesets.Catch/Resources/Testing/Beatmaps/basic.osu new file mode 100644 index 0000000000..d58bb28ace --- /dev/null +++ b/osu.Game.Rulesets.Catch/Resources/Testing/Beatmaps/basic.osu @@ -0,0 +1,66 @@ +osu file format v14 + +[General] +AudioFilename: virtual +AudioLeadIn: 0 +PreviewTime: -1 +Countdown: 1 +SampleSet: Soft +StackLeniency: 0.7 +Mode: 0 +LetterboxInBreaks: 0 +WidescreenStoryboard: 1 + +[Editor] +DistanceSpacing: 1.5 +BeatDivisor: 4 +GridSize: 32 +TimelineZoom: 1 + +[Metadata] +Title:Basic +TitleUnicode:Test Suite +Artist:peppy +ArtistUnicode:peppy +Creator:peppy +Version:[Basic] +Source: +Tags: +BeatmapID:826308 +BeatmapSetID:-1 + +[Difficulty] +HPDrainRate:6 +CircleSize:4 +OverallDifficulty:7 +ApproachRate:8.3 +SliderMultiplier:1.6 +SliderTickRate:1 + +[Events] +//Background and Video events +//Break Periods +//Storyboard Layer 0 (Background) +//Storyboard Layer 1 (Fail) +//Storyboard Layer 2 (Pass) +//Storyboard Layer 3 (Foreground) +//Storyboard Sound Samples + +[TimingPoints] +500,500,4,2,1,50,1,0 +13426,-100,4,3,1,45,0,0 +14884,-100,4,2,1,50,0,0 + + +[HitObjects] +96,192,500,6,0,L|416:192,2,320 +256,192,3000,12,0,4000,0:0:0:0: +256,192,4500,12,0,5500,0:0:0:0: +256,192,6000,12,0,6500,0:0:0:0: +256,128,7000,6,0,L|352:128,4,80 +32,192,8500,6,0,B|32:384|256:384|256:192|256:192|256:0|512:0|512:192,1,800 +256,192,11500,12,0,12000,0:0:0:0: +512,320,12500,6,0,B|0:256|0:256|512:96|512:96|256:32,1,1280 +256,256,17000,6,0,L|160:256,4,80 +256,192,18500,12,0,19450,0:0:0:0: +216,231,19875,6,0,B|216:135|280:135|344:135|344:199|344:263|248:327|248:327|120:327|120:327|56:39|408:39|408:39|472:150|408:342,1,1280 diff --git a/osu.Game.Rulesets.Catch/Tests/CatchBeatmapConversionTest.cs b/osu.Game.Rulesets.Catch/Tests/CatchBeatmapConversionTest.cs index a771cbb414..fbcb778268 100644 --- a/osu.Game.Rulesets.Catch/Tests/CatchBeatmapConversionTest.cs +++ b/osu.Game.Rulesets.Catch/Tests/CatchBeatmapConversionTest.cs @@ -18,10 +18,10 @@ namespace osu.Game.Rulesets.Catch.Tests { protected override string ResourceAssembly => "osu.Game.Rulesets.Catch"; - [TestCase(875945), Ignore("See: https://github.com/ppy/osu/issues/2149")] - public new void Test(int beatmapId) + [TestCase("basic"), Ignore("See: https://github.com/ppy/osu/issues/2149")] + public new void Test(string name) { - base.Test(beatmapId); + base.Test(name); } protected override IEnumerable CreateConvertValue(HitObject hitObject) diff --git a/osu.Game.Rulesets.Catch/osu.Game.Rulesets.Catch.csproj b/osu.Game.Rulesets.Catch/osu.Game.Rulesets.Catch.csproj index a1d1743c7a..4e2cdd24c3 100644 --- a/osu.Game.Rulesets.Catch/osu.Game.Rulesets.Catch.csproj +++ b/osu.Game.Rulesets.Catch/osu.Game.Rulesets.Catch.csproj @@ -130,8 +130,8 @@ - - + + diff --git a/osu.Game.Rulesets.Mania/Resources/Testing/Beatmaps/875945-expected-conversion.json b/osu.Game.Rulesets.Mania/Resources/Testing/Beatmaps/875945-expected-conversion.json deleted file mode 100644 index 935009aac6..0000000000 --- a/osu.Game.Rulesets.Mania/Resources/Testing/Beatmaps/875945-expected-conversion.json +++ /dev/null @@ -1 +0,0 @@ -{"Mappings":[{"StartTime":6590.0,"Objects":[{"StartTime":6590.0,"EndTime":8320.0,"Column":1}]},{"StartTime":8436.0,"Objects":[{"StartTime":8436.0,"EndTime":10166.0,"Column":6}]},{"StartTime":10282.0,"Objects":[{"StartTime":10282.0,"EndTime":12012.0,"Column":3}]},{"StartTime":12128.0,"Objects":[{"StartTime":12128.0,"EndTime":13858.0,"Column":1},{"StartTime":12128.0,"EndTime":13858.0,"Column":2}]},{"StartTime":13974.0,"Objects":[{"StartTime":13974.0,"EndTime":15704.0,"Column":5},{"StartTime":13974.0,"EndTime":15704.0,"Column":6}]},{"StartTime":15820.0,"Objects":[{"StartTime":15820.0,"EndTime":17550.0,"Column":1}]},{"StartTime":17666.0,"Objects":[{"StartTime":17666.0,"EndTime":19512.0,"Column":4}]},{"StartTime":19628.0,"Objects":[{"StartTime":19628.0,"EndTime":21128.0,"Column":0}]},{"StartTime":21359.0,"Objects":[{"StartTime":21359.0,"EndTime":21820.0,"Column":1},{"StartTime":21359.0,"EndTime":21820.0,"Column":3}]},{"StartTime":22282.0,"Objects":[{"StartTime":22282.0,"EndTime":22743.0,"Column":6}]},{"StartTime":23205.0,"Objects":[{"StartTime":23205.0,"EndTime":23666.0,"Column":3},{"StartTime":23205.0,"EndTime":23666.0,"Column":0}]},{"StartTime":24128.0,"Objects":[{"StartTime":24128.0,"EndTime":24589.0,"Column":6}]},{"StartTime":25051.0,"Objects":[{"StartTime":25051.0,"EndTime":26666.0,"Column":4}]},{"StartTime":26897.0,"Objects":[{"StartTime":26897.0,"EndTime":28281.0,"Column":6}]},{"StartTime":28743.0,"Objects":[{"StartTime":28743.0,"EndTime":29204.0,"Column":3}]},{"StartTime":29666.0,"Objects":[{"StartTime":29666.0,"EndTime":30127.0,"Column":1},{"StartTime":29666.0,"EndTime":30127.0,"Column":5},{"StartTime":29666.0,"EndTime":30127.0,"Column":0}]},{"StartTime":30589.0,"Objects":[{"StartTime":30589.0,"EndTime":31050.0,"Column":2}]},{"StartTime":31513.0,"Objects":[{"StartTime":31513.0,"EndTime":31974.0,"Column":1}]},{"StartTime":32436.0,"Objects":[{"StartTime":32436.0,"EndTime":34282.0,"Column":0},{"StartTime":32436.0,"EndTime":34282.0,"Column":5}]},{"StartTime":35205.0,"Objects":[{"StartTime":35205.0,"EndTime":36012.0,"Column":3}]},{"StartTime":36128.0,"Objects":[{"StartTime":36128.0,"EndTime":36474.0,"Column":1}]},{"StartTime":36590.0,"Objects":[{"StartTime":36590.0,"EndTime":39359.0,"Column":0},{"StartTime":36590.0,"EndTime":39359.0,"Column":3}]},{"StartTime":39820.0,"Objects":[{"StartTime":39820.0,"EndTime":40281.0,"Column":2},{"StartTime":39820.0,"EndTime":40281.0,"Column":5},{"StartTime":39820.0,"EndTime":40281.0,"Column":1}]},{"StartTime":40743.0,"Objects":[{"StartTime":40743.0,"EndTime":41204.0,"Column":4}]},{"StartTime":41666.0,"Objects":[{"StartTime":41666.0,"EndTime":42589.0,"Column":1}]},{"StartTime":43051.0,"Objects":[{"StartTime":43051.0,"EndTime":43281.0,"Column":3}]},{"StartTime":43513.0,"Objects":[{"StartTime":43513.0,"EndTime":43513.0,"Column":0},{"StartTime":43513.0,"EndTime":43513.0,"Column":6}]},{"StartTime":43628.0,"Objects":[{"StartTime":43628.0,"EndTime":49051.0,"Column":4}]},{"StartTime":56435.0,"Objects":[{"StartTime":56435.0,"EndTime":56665.0,"Column":2}]},{"StartTime":56781.0,"Objects":[{"StartTime":56781.0,"EndTime":56781.0,"Column":3}]},{"StartTime":56897.0,"Objects":[{"StartTime":56897.0,"EndTime":57012.0,"Column":1}]},{"StartTime":57127.0,"Objects":[{"StartTime":57127.0,"EndTime":57242.0,"Column":5},{"StartTime":57127.0,"EndTime":57242.0,"Column":6}]},{"StartTime":57358.0,"Objects":[{"StartTime":57358.0,"EndTime":57473.0,"Column":2},{"StartTime":57358.0,"EndTime":57473.0,"Column":1}]},{"StartTime":57589.0,"Objects":[{"StartTime":57589.0,"EndTime":57704.0,"Column":4}]},{"StartTime":57820.0,"Objects":[{"StartTime":57820.0,"EndTime":57820.0,"Column":0}]},{"StartTime":57935.0,"Objects":[{"StartTime":57935.0,"EndTime":57935.0,"Column":2}]},{"StartTime":58051.0,"Objects":[{"StartTime":58051.0,"EndTime":58051.0,"Column":3},{"StartTime":58051.0,"EndTime":58051.0,"Column":4},{"StartTime":58051.0,"EndTime":58051.0,"Column":5}]},{"StartTime":58166.0,"Objects":[{"StartTime":58166.0,"EndTime":58166.0,"Column":6},{"StartTime":58166.0,"EndTime":58166.0,"Column":0}]},{"StartTime":58224.0,"Objects":[{"StartTime":58224.0,"EndTime":58224.0,"Column":5}]},{"StartTime":58281.0,"Objects":[{"StartTime":58281.0,"EndTime":58511.0,"Column":3},{"StartTime":58281.0,"EndTime":58511.0,"Column":1}]},{"StartTime":58627.0,"Objects":[{"StartTime":58627.0,"EndTime":58627.0,"Column":6}]},{"StartTime":58685.0,"Objects":[{"StartTime":58685.0,"EndTime":58685.0,"Column":1}]},{"StartTime":58743.0,"Objects":[{"StartTime":58743.0,"EndTime":58858.0,"Column":6}]},{"StartTime":58974.0,"Objects":[{"StartTime":58974.0,"EndTime":59089.0,"Column":0}]},{"StartTime":59204.0,"Objects":[{"StartTime":59204.0,"EndTime":59319.0,"Column":2}]},{"StartTime":59435.0,"Objects":[{"StartTime":59435.0,"EndTime":59550.0,"Column":0},{"StartTime":59435.0,"EndTime":59550.0,"Column":3}]},{"StartTime":59666.0,"Objects":[{"StartTime":59666.0,"EndTime":59781.0,"Column":4},{"StartTime":59666.0,"EndTime":59781.0,"Column":2}]},{"StartTime":59897.0,"Objects":[{"StartTime":59897.0,"EndTime":60012.0,"Column":1}]},{"StartTime":60127.0,"Objects":[{"StartTime":60127.0,"EndTime":60357.0,"Column":5},{"StartTime":60127.0,"EndTime":60357.0,"Column":6}]},{"StartTime":60474.0,"Objects":[{"StartTime":60474.0,"EndTime":60704.0,"Column":1}]},{"StartTime":60820.0,"Objects":[{"StartTime":60820.0,"EndTime":60935.0,"Column":0},{"StartTime":60820.0,"EndTime":60935.0,"Column":5}]},{"StartTime":61051.0,"Objects":[{"StartTime":61051.0,"EndTime":61166.0,"Column":3}]},{"StartTime":61281.0,"Objects":[{"StartTime":61281.0,"EndTime":61396.0,"Column":2}]},{"StartTime":61512.0,"Objects":[{"StartTime":61512.0,"EndTime":61627.0,"Column":5}]},{"StartTime":61743.0,"Objects":[{"StartTime":61743.0,"EndTime":61858.0,"Column":4},{"StartTime":61743.0,"EndTime":61858.0,"Column":3},{"StartTime":61743.0,"EndTime":61858.0,"Column":6}]},{"StartTime":61916.0,"Objects":[{"StartTime":61916.0,"EndTime":61916.0,"Column":5}]},{"StartTime":61974.0,"Objects":[{"StartTime":61974.0,"EndTime":62204.0,"Column":1}]},{"StartTime":62320.0,"Objects":[{"StartTime":62320.0,"EndTime":62550.0,"Column":4}]},{"StartTime":62666.0,"Objects":[{"StartTime":62666.0,"EndTime":63127.0,"Column":2}]},{"StartTime":63358.0,"Objects":[{"StartTime":63358.0,"EndTime":63358.0,"Column":3}]},{"StartTime":63474.0,"Objects":[{"StartTime":63474.0,"EndTime":63474.0,"Column":4},{"StartTime":63474.0,"EndTime":63474.0,"Column":5}]},{"StartTime":63589.0,"Objects":[{"StartTime":63589.0,"EndTime":63589.0,"Column":3},{"StartTime":63589.0,"EndTime":63589.0,"Column":6},{"StartTime":63589.0,"EndTime":63589.0,"Column":0}]},{"StartTime":63705.0,"Objects":[{"StartTime":63705.0,"EndTime":63705.0,"Column":4},{"StartTime":63705.0,"EndTime":63705.0,"Column":5}]},{"StartTime":63820.0,"Objects":[{"StartTime":63820.0,"EndTime":63820.0,"Column":6}]},{"StartTime":63877.0,"Objects":[{"StartTime":63877.0,"EndTime":63877.0,"Column":5}]},{"StartTime":63935.0,"Objects":[{"StartTime":63935.0,"EndTime":63935.0,"Column":4}]},{"StartTime":63993.0,"Objects":[{"StartTime":63993.0,"EndTime":63993.0,"Column":5}]},{"StartTime":64051.0,"Objects":[{"StartTime":64051.0,"EndTime":64166.0,"Column":3},{"StartTime":64051.0,"EndTime":64166.0,"Column":0},{"StartTime":64051.0,"EndTime":64166.0,"Column":4}]},{"StartTime":64281.0,"Objects":[{"StartTime":64281.0,"EndTime":64281.0,"Column":2},{"StartTime":64281.0,"EndTime":64281.0,"Column":1}]},{"StartTime":64338.0,"Objects":[{"StartTime":64338.0,"EndTime":64338.0,"Column":5}]},{"StartTime":64396.0,"Objects":[{"StartTime":64396.0,"EndTime":64396.0,"Column":3}]},{"StartTime":64454.0,"Objects":[{"StartTime":64454.0,"EndTime":64454.0,"Column":0}]},{"StartTime":64512.0,"Objects":[{"StartTime":64512.0,"EndTime":64627.0,"Column":5}]},{"StartTime":64743.0,"Objects":[{"StartTime":64743.0,"EndTime":64743.0,"Column":2}]},{"StartTime":64800.0,"Objects":[{"StartTime":64800.0,"EndTime":64800.0,"Column":5}]},{"StartTime":64858.0,"Objects":[{"StartTime":64858.0,"EndTime":64858.0,"Column":3}]},{"StartTime":64916.0,"Objects":[{"StartTime":64916.0,"EndTime":64916.0,"Column":1}]},{"StartTime":64974.0,"Objects":[{"StartTime":64974.0,"EndTime":65089.0,"Column":3}]},{"StartTime":65205.0,"Objects":[{"StartTime":65205.0,"EndTime":65205.0,"Column":6},{"StartTime":65205.0,"EndTime":65205.0,"Column":2}]},{"StartTime":65262.0,"Objects":[{"StartTime":65262.0,"EndTime":65262.0,"Column":0}]},{"StartTime":65320.0,"Objects":[{"StartTime":65320.0,"EndTime":65320.0,"Column":6}]},{"StartTime":65378.0,"Objects":[{"StartTime":65378.0,"EndTime":65378.0,"Column":5}]},{"StartTime":65436.0,"Objects":[{"StartTime":65436.0,"EndTime":65551.0,"Column":3}]},{"StartTime":65666.0,"Objects":[{"StartTime":65666.0,"EndTime":65666.0,"Column":6}]},{"StartTime":65723.0,"Objects":[{"StartTime":65723.0,"EndTime":65723.0,"Column":1}]},{"StartTime":65781.0,"Objects":[{"StartTime":65781.0,"EndTime":65781.0,"Column":5}]},{"StartTime":65839.0,"Objects":[{"StartTime":65839.0,"EndTime":65839.0,"Column":1}]},{"StartTime":65897.0,"Objects":[{"StartTime":65897.0,"EndTime":66012.0,"Column":5},{"StartTime":65897.0,"EndTime":66012.0,"Column":3}]},{"StartTime":66127.0,"Objects":[{"StartTime":66127.0,"EndTime":66127.0,"Column":1},{"StartTime":66127.0,"EndTime":66127.0,"Column":0}]},{"StartTime":66184.0,"Objects":[{"StartTime":66184.0,"EndTime":66184.0,"Column":2}]},{"StartTime":66242.0,"Objects":[{"StartTime":66242.0,"EndTime":66242.0,"Column":1}]},{"StartTime":66300.0,"Objects":[{"StartTime":66300.0,"EndTime":66300.0,"Column":2}]},{"StartTime":66358.0,"Objects":[{"StartTime":66358.0,"EndTime":66473.0,"Column":0}]},{"StartTime":66589.0,"Objects":[{"StartTime":66589.0,"EndTime":66704.0,"Column":2},{"StartTime":66589.0,"EndTime":66704.0,"Column":6}]},{"StartTime":66820.0,"Objects":[{"StartTime":66820.0,"EndTime":66935.0,"Column":4},{"StartTime":66820.0,"EndTime":66935.0,"Column":1}]},{"StartTime":67051.0,"Objects":[{"StartTime":67051.0,"EndTime":67281.0,"Column":2}]},{"StartTime":67397.0,"Objects":[{"StartTime":67397.0,"EndTime":67397.0,"Column":4},{"StartTime":67397.0,"EndTime":67397.0,"Column":6}]},{"StartTime":67512.0,"Objects":[{"StartTime":67512.0,"EndTime":67742.0,"Column":5},{"StartTime":67512.0,"EndTime":67742.0,"Column":3}]},{"StartTime":67858.0,"Objects":[{"StartTime":67858.0,"EndTime":68088.0,"Column":1}]},{"StartTime":68204.0,"Objects":[{"StartTime":68204.0,"EndTime":68319.0,"Column":2}]},{"StartTime":68435.0,"Objects":[{"StartTime":68435.0,"EndTime":68550.0,"Column":1}]},{"StartTime":68666.0,"Objects":[{"StartTime":68666.0,"EndTime":68781.0,"Column":6},{"StartTime":68666.0,"EndTime":68781.0,"Column":2}]},{"StartTime":68897.0,"Objects":[{"StartTime":68897.0,"EndTime":68897.0,"Column":1},{"StartTime":68897.0,"EndTime":68897.0,"Column":3}]},{"StartTime":69012.0,"Objects":[{"StartTime":69012.0,"EndTime":69012.0,"Column":2},{"StartTime":69012.0,"EndTime":69012.0,"Column":4}]},{"StartTime":69127.0,"Objects":[{"StartTime":69127.0,"EndTime":69127.0,"Column":1},{"StartTime":69127.0,"EndTime":69127.0,"Column":3},{"StartTime":69127.0,"EndTime":69127.0,"Column":5}]},{"StartTime":69242.0,"Objects":[{"StartTime":69242.0,"EndTime":69242.0,"Column":2},{"StartTime":69242.0,"EndTime":69242.0,"Column":4}]},{"StartTime":69358.0,"Objects":[{"StartTime":69358.0,"EndTime":69473.0,"Column":3},{"StartTime":69358.0,"EndTime":69473.0,"Column":6}]},{"StartTime":69589.0,"Objects":[{"StartTime":69589.0,"EndTime":69704.0,"Column":5}]},{"StartTime":69820.0,"Objects":[{"StartTime":69820.0,"EndTime":69935.0,"Column":4}]},{"StartTime":70051.0,"Objects":[{"StartTime":70051.0,"EndTime":70166.0,"Column":5},{"StartTime":70051.0,"EndTime":70166.0,"Column":1},{"StartTime":70051.0,"EndTime":70166.0,"Column":6}]},{"StartTime":70281.0,"Objects":[{"StartTime":70281.0,"EndTime":70281.0,"Column":2},{"StartTime":70281.0,"EndTime":70281.0,"Column":3}]},{"StartTime":70339.0,"Objects":[{"StartTime":70339.0,"EndTime":70339.0,"Column":1}]},{"StartTime":70397.0,"Objects":[{"StartTime":70397.0,"EndTime":70397.0,"Column":3}]},{"StartTime":70455.0,"Objects":[{"StartTime":70455.0,"EndTime":70455.0,"Column":6}]},{"StartTime":70512.0,"Objects":[{"StartTime":70512.0,"EndTime":70512.0,"Column":4}]},{"StartTime":70570.0,"Objects":[{"StartTime":70570.0,"EndTime":70570.0,"Column":0}]},{"StartTime":70627.0,"Objects":[{"StartTime":70627.0,"EndTime":70627.0,"Column":4}]},{"StartTime":70685.0,"Objects":[{"StartTime":70685.0,"EndTime":70685.0,"Column":5}]},{"StartTime":70742.0,"Objects":[{"StartTime":70742.0,"EndTime":70742.0,"Column":0}]},{"StartTime":70800.0,"Objects":[{"StartTime":70800.0,"EndTime":70800.0,"Column":6}]},{"StartTime":70858.0,"Objects":[{"StartTime":70858.0,"EndTime":70858.0,"Column":1}]},{"StartTime":70916.0,"Objects":[{"StartTime":70916.0,"EndTime":70916.0,"Column":6}]},{"StartTime":70974.0,"Objects":[{"StartTime":70974.0,"EndTime":70974.0,"Column":1}]},{"StartTime":71031.0,"Objects":[{"StartTime":71031.0,"EndTime":71031.0,"Column":6}]},{"StartTime":71089.0,"Objects":[{"StartTime":71089.0,"EndTime":71089.0,"Column":0}]},{"StartTime":71146.0,"Objects":[{"StartTime":71146.0,"EndTime":71146.0,"Column":5}]},{"StartTime":71204.0,"Objects":[{"StartTime":71204.0,"EndTime":71434.0,"Column":0},{"StartTime":71204.0,"EndTime":71434.0,"Column":3}]},{"StartTime":71551.0,"Objects":[{"StartTime":71551.0,"EndTime":71781.0,"Column":1},{"StartTime":71551.0,"EndTime":71781.0,"Column":2}]},{"StartTime":71897.0,"Objects":[{"StartTime":71897.0,"EndTime":72012.0,"Column":0},{"StartTime":71897.0,"EndTime":72012.0,"Column":5}]},{"StartTime":72127.0,"Objects":[{"StartTime":72127.0,"EndTime":72127.0,"Column":3}]},{"StartTime":72243.0,"Objects":[{"StartTime":72243.0,"EndTime":72473.0,"Column":6}]},{"StartTime":72589.0,"Objects":[{"StartTime":72589.0,"EndTime":72704.0,"Column":3},{"StartTime":72589.0,"EndTime":72704.0,"Column":0},{"StartTime":72589.0,"EndTime":72704.0,"Column":1}]},{"StartTime":72820.0,"Objects":[{"StartTime":72820.0,"EndTime":72935.0,"Column":4}]},{"StartTime":73051.0,"Objects":[{"StartTime":73051.0,"EndTime":73281.0,"Column":0}]},{"StartTime":73397.0,"Objects":[{"StartTime":73397.0,"EndTime":73627.0,"Column":1}]},{"StartTime":73743.0,"Objects":[{"StartTime":73743.0,"EndTime":73858.0,"Column":2}]},{"StartTime":73974.0,"Objects":[{"StartTime":73974.0,"EndTime":73974.0,"Column":4},{"StartTime":73974.0,"EndTime":73974.0,"Column":0}]},{"StartTime":74089.0,"Objects":[{"StartTime":74089.0,"EndTime":74319.0,"Column":2},{"StartTime":74089.0,"EndTime":74319.0,"Column":1}]},{"StartTime":74435.0,"Objects":[{"StartTime":74435.0,"EndTime":74550.0,"Column":0},{"StartTime":74435.0,"EndTime":74550.0,"Column":3}]},{"StartTime":74666.0,"Objects":[{"StartTime":74666.0,"EndTime":74839.0,"Column":6}]},{"StartTime":74897.0,"Objects":[{"StartTime":74897.0,"EndTime":75127.0,"Column":0},{"StartTime":74897.0,"EndTime":75127.0,"Column":2},{"StartTime":74897.0,"EndTime":75127.0,"Column":1}]},{"StartTime":75243.0,"Objects":[{"StartTime":75243.0,"EndTime":75473.0,"Column":5}]},{"StartTime":75589.0,"Objects":[{"StartTime":75589.0,"EndTime":75704.0,"Column":6},{"StartTime":75589.0,"EndTime":75704.0,"Column":3}]},{"StartTime":75820.0,"Objects":[{"StartTime":75820.0,"EndTime":75820.0,"Column":2}]},{"StartTime":75935.0,"Objects":[{"StartTime":75935.0,"EndTime":76165.0,"Column":0},{"StartTime":75935.0,"EndTime":76165.0,"Column":6}]},{"StartTime":76281.0,"Objects":[{"StartTime":76281.0,"EndTime":76396.0,"Column":1}]},{"StartTime":76512.0,"Objects":[{"StartTime":76512.0,"EndTime":76627.0,"Column":0},{"StartTime":76512.0,"EndTime":76627.0,"Column":3}]},{"StartTime":76743.0,"Objects":[{"StartTime":76743.0,"EndTime":76973.0,"Column":1},{"StartTime":76743.0,"EndTime":76973.0,"Column":6}]},{"StartTime":77089.0,"Objects":[{"StartTime":77089.0,"EndTime":77319.0,"Column":4},{"StartTime":77089.0,"EndTime":77319.0,"Column":2}]},{"StartTime":77435.0,"Objects":[{"StartTime":77435.0,"EndTime":77550.0,"Column":5},{"StartTime":77435.0,"EndTime":77550.0,"Column":3}]},{"StartTime":77666.0,"Objects":[{"StartTime":77666.0,"EndTime":77666.0,"Column":6}]},{"StartTime":77781.0,"Objects":[{"StartTime":77781.0,"EndTime":77781.0,"Column":0},{"StartTime":77781.0,"EndTime":77781.0,"Column":1},{"StartTime":77781.0,"EndTime":77781.0,"Column":2}]},{"StartTime":77897.0,"Objects":[{"StartTime":77897.0,"EndTime":77897.0,"Column":6},{"StartTime":77897.0,"EndTime":77897.0,"Column":3},{"StartTime":77897.0,"EndTime":77897.0,"Column":4}]},{"StartTime":78012.0,"Objects":[{"StartTime":78012.0,"EndTime":78012.0,"Column":0},{"StartTime":78012.0,"EndTime":78012.0,"Column":1}]},{"StartTime":78127.0,"Objects":[{"StartTime":78127.0,"EndTime":78300.0,"Column":6}]},{"StartTime":78358.0,"Objects":[{"StartTime":78358.0,"EndTime":78531.0,"Column":3},{"StartTime":78358.0,"EndTime":78531.0,"Column":0}]},{"StartTime":78589.0,"Objects":[{"StartTime":78589.0,"EndTime":78819.0,"Column":5},{"StartTime":78589.0,"EndTime":78819.0,"Column":4}]},{"StartTime":78935.0,"Objects":[{"StartTime":78935.0,"EndTime":79165.0,"Column":1},{"StartTime":78935.0,"EndTime":79165.0,"Column":3}]},{"StartTime":79281.0,"Objects":[{"StartTime":79281.0,"EndTime":79396.0,"Column":4}]},{"StartTime":79512.0,"Objects":[{"StartTime":79512.0,"EndTime":79512.0,"Column":6},{"StartTime":79512.0,"EndTime":79512.0,"Column":3}]},{"StartTime":79627.0,"Objects":[{"StartTime":79627.0,"EndTime":79857.0,"Column":0}]},{"StartTime":79974.0,"Objects":[{"StartTime":79974.0,"EndTime":80089.0,"Column":5}]},{"StartTime":80204.0,"Objects":[{"StartTime":80204.0,"EndTime":80319.0,"Column":1}]},{"StartTime":80435.0,"Objects":[{"StartTime":80435.0,"EndTime":80665.0,"Column":0}]},{"StartTime":80781.0,"Objects":[{"StartTime":80781.0,"EndTime":81011.0,"Column":5}]},{"StartTime":81127.0,"Objects":[{"StartTime":81127.0,"EndTime":81242.0,"Column":2}]},{"StartTime":81358.0,"Objects":[{"StartTime":81358.0,"EndTime":81358.0,"Column":6}]},{"StartTime":81474.0,"Objects":[{"StartTime":81474.0,"EndTime":81704.0,"Column":2}]},{"StartTime":81820.0,"Objects":[{"StartTime":81820.0,"EndTime":81935.0,"Column":6},{"StartTime":81820.0,"EndTime":81935.0,"Column":1}]},{"StartTime":82051.0,"Objects":[{"StartTime":82051.0,"EndTime":82224.0,"Column":4}]},{"StartTime":82281.0,"Objects":[{"StartTime":82281.0,"EndTime":82511.0,"Column":0}]},{"StartTime":82627.0,"Objects":[{"StartTime":82627.0,"EndTime":82857.0,"Column":2}]},{"StartTime":82974.0,"Objects":[{"StartTime":82974.0,"EndTime":83089.0,"Column":4}]},{"StartTime":83204.0,"Objects":[{"StartTime":83204.0,"EndTime":83204.0,"Column":6}]},{"StartTime":83320.0,"Objects":[{"StartTime":83320.0,"EndTime":83550.0,"Column":3},{"StartTime":83320.0,"EndTime":83550.0,"Column":2}]},{"StartTime":83666.0,"Objects":[{"StartTime":83666.0,"EndTime":83781.0,"Column":1},{"StartTime":83666.0,"EndTime":83781.0,"Column":4}]},{"StartTime":83897.0,"Objects":[{"StartTime":83897.0,"EndTime":84012.0,"Column":5}]},{"StartTime":84127.0,"Objects":[{"StartTime":84127.0,"EndTime":84357.0,"Column":4},{"StartTime":84127.0,"EndTime":84357.0,"Column":3}]},{"StartTime":84474.0,"Objects":[{"StartTime":84474.0,"EndTime":84704.0,"Column":0},{"StartTime":84474.0,"EndTime":84704.0,"Column":6}]},{"StartTime":84820.0,"Objects":[{"StartTime":84820.0,"EndTime":84935.0,"Column":4}]},{"StartTime":85051.0,"Objects":[{"StartTime":85051.0,"EndTime":85166.0,"Column":5},{"StartTime":85051.0,"EndTime":85166.0,"Column":6}]},{"StartTime":85281.0,"Objects":[{"StartTime":85281.0,"EndTime":85396.0,"Column":2},{"StartTime":85281.0,"EndTime":85396.0,"Column":3}]},{"StartTime":85512.0,"Objects":[{"StartTime":85512.0,"EndTime":85685.0,"Column":4},{"StartTime":85512.0,"EndTime":85685.0,"Column":0}]},{"StartTime":85743.0,"Objects":[{"StartTime":85743.0,"EndTime":85858.0,"Column":6},{"StartTime":85743.0,"EndTime":85858.0,"Column":1}]},{"StartTime":85974.0,"Objects":[{"StartTime":85974.0,"EndTime":86089.0,"Column":5}]},{"StartTime":86204.0,"Objects":[{"StartTime":86204.0,"EndTime":86434.0,"Column":0}]},{"StartTime":86551.0,"Objects":[{"StartTime":86551.0,"EndTime":86551.0,"Column":6},{"StartTime":86551.0,"EndTime":86551.0,"Column":2}]},{"StartTime":86666.0,"Objects":[{"StartTime":86666.0,"EndTime":86781.0,"Column":3},{"StartTime":86666.0,"EndTime":86781.0,"Column":4}]},{"StartTime":86897.0,"Objects":[{"StartTime":86897.0,"EndTime":87127.0,"Column":0},{"StartTime":86897.0,"EndTime":87127.0,"Column":5}]},{"StartTime":87243.0,"Objects":[{"StartTime":87243.0,"EndTime":87243.0,"Column":3}]},{"StartTime":87358.0,"Objects":[{"StartTime":87358.0,"EndTime":87588.0,"Column":1}]},{"StartTime":87704.0,"Objects":[{"StartTime":87704.0,"EndTime":87704.0,"Column":2}]},{"StartTime":87820.0,"Objects":[{"StartTime":87820.0,"EndTime":87935.0,"Column":6}]},{"StartTime":88051.0,"Objects":[{"StartTime":88051.0,"EndTime":88166.0,"Column":2}]},{"StartTime":88281.0,"Objects":[{"StartTime":88281.0,"EndTime":88281.0,"Column":1},{"StartTime":88281.0,"EndTime":88281.0,"Column":3}]},{"StartTime":88339.0,"Objects":[{"StartTime":88339.0,"EndTime":88339.0,"Column":6}]},{"StartTime":88397.0,"Objects":[{"StartTime":88397.0,"EndTime":88397.0,"Column":2}]},{"StartTime":88454.0,"Objects":[{"StartTime":88454.0,"EndTime":88454.0,"Column":6}]},{"StartTime":88512.0,"Objects":[{"StartTime":88512.0,"EndTime":88512.0,"Column":2}]},{"StartTime":88570.0,"Objects":[{"StartTime":88570.0,"EndTime":88570.0,"Column":3}]},{"StartTime":88628.0,"Objects":[{"StartTime":88628.0,"EndTime":88628.0,"Column":4}]},{"StartTime":88686.0,"Objects":[{"StartTime":88686.0,"EndTime":88686.0,"Column":0}]},{"StartTime":88743.0,"Objects":[{"StartTime":88743.0,"EndTime":88973.0,"Column":4},{"StartTime":88743.0,"EndTime":88973.0,"Column":5}]},{"StartTime":89089.0,"Objects":[{"StartTime":89089.0,"EndTime":89089.0,"Column":3},{"StartTime":89089.0,"EndTime":89089.0,"Column":0}]},{"StartTime":89204.0,"Objects":[{"StartTime":89204.0,"EndTime":89434.0,"Column":6}]},{"StartTime":89551.0,"Objects":[{"StartTime":89551.0,"EndTime":89551.0,"Column":4},{"StartTime":89551.0,"EndTime":89551.0,"Column":2}]},{"StartTime":89666.0,"Objects":[{"StartTime":89666.0,"EndTime":89781.0,"Column":3}]},{"StartTime":89897.0,"Objects":[{"StartTime":89897.0,"EndTime":90070.0,"Column":5},{"StartTime":89897.0,"EndTime":90070.0,"Column":1}]},{"StartTime":90127.0,"Objects":[{"StartTime":90127.0,"EndTime":90242.0,"Column":2},{"StartTime":90127.0,"EndTime":90242.0,"Column":3},{"StartTime":90127.0,"EndTime":90242.0,"Column":6}]},{"StartTime":90358.0,"Objects":[{"StartTime":90358.0,"EndTime":90473.0,"Column":4},{"StartTime":90358.0,"EndTime":90473.0,"Column":1}]},{"StartTime":90589.0,"Objects":[{"StartTime":90589.0,"EndTime":90819.0,"Column":3}]},{"StartTime":90935.0,"Objects":[{"StartTime":90935.0,"EndTime":91165.0,"Column":6},{"StartTime":90935.0,"EndTime":91165.0,"Column":4},{"StartTime":90935.0,"EndTime":91165.0,"Column":5}]},{"StartTime":91281.0,"Objects":[{"StartTime":91281.0,"EndTime":91396.0,"Column":2},{"StartTime":91281.0,"EndTime":91396.0,"Column":1}]},{"StartTime":91512.0,"Objects":[{"StartTime":91512.0,"EndTime":91627.0,"Column":3}]},{"StartTime":91743.0,"Objects":[{"StartTime":91743.0,"EndTime":91858.0,"Column":6},{"StartTime":91743.0,"EndTime":91858.0,"Column":5}]},{"StartTime":91974.0,"Objects":[{"StartTime":91974.0,"EndTime":92089.0,"Column":4},{"StartTime":91974.0,"EndTime":92089.0,"Column":1},{"StartTime":91974.0,"EndTime":92089.0,"Column":2}]},{"StartTime":92204.0,"Objects":[{"StartTime":92204.0,"EndTime":92204.0,"Column":5}]},{"StartTime":92262.0,"Objects":[{"StartTime":92262.0,"EndTime":92262.0,"Column":4}]},{"StartTime":92320.0,"Objects":[{"StartTime":92320.0,"EndTime":92320.0,"Column":2}]},{"StartTime":92377.0,"Objects":[{"StartTime":92377.0,"EndTime":92377.0,"Column":4}]},{"StartTime":92435.0,"Objects":[{"StartTime":92435.0,"EndTime":92665.0,"Column":2}]},{"StartTime":92781.0,"Objects":[{"StartTime":92781.0,"EndTime":92781.0,"Column":5}]},{"StartTime":92897.0,"Objects":[{"StartTime":92897.0,"EndTime":93127.0,"Column":6},{"StartTime":92897.0,"EndTime":93127.0,"Column":2}]},{"StartTime":93243.0,"Objects":[{"StartTime":93243.0,"EndTime":93243.0,"Column":3}]},{"StartTime":93358.0,"Objects":[{"StartTime":93358.0,"EndTime":93473.0,"Column":0}]},{"StartTime":93589.0,"Objects":[{"StartTime":93589.0,"EndTime":93762.0,"Column":3},{"StartTime":93589.0,"EndTime":93762.0,"Column":6}]},{"StartTime":93820.0,"Objects":[{"StartTime":93820.0,"EndTime":93935.0,"Column":0}]},{"StartTime":94051.0,"Objects":[{"StartTime":94051.0,"EndTime":94166.0,"Column":1},{"StartTime":94051.0,"EndTime":94166.0,"Column":2}]},{"StartTime":94281.0,"Objects":[{"StartTime":94281.0,"EndTime":94511.0,"Column":6},{"StartTime":94281.0,"EndTime":94511.0,"Column":0}]},{"StartTime":94627.0,"Objects":[{"StartTime":94627.0,"EndTime":94627.0,"Column":2},{"StartTime":94627.0,"EndTime":94627.0,"Column":5}]},{"StartTime":94743.0,"Objects":[{"StartTime":94743.0,"EndTime":94973.0,"Column":6}]},{"StartTime":95089.0,"Objects":[{"StartTime":95089.0,"EndTime":95089.0,"Column":5}]},{"StartTime":95204.0,"Objects":[{"StartTime":95204.0,"EndTime":95377.0,"Column":2}]},{"StartTime":95435.0,"Objects":[{"StartTime":95435.0,"EndTime":95550.0,"Column":6},{"StartTime":95435.0,"EndTime":95550.0,"Column":5}]},{"StartTime":95666.0,"Objects":[{"StartTime":95666.0,"EndTime":95781.0,"Column":4},{"StartTime":95666.0,"EndTime":95781.0,"Column":2}]},{"StartTime":95897.0,"Objects":[{"StartTime":95897.0,"EndTime":96012.0,"Column":6},{"StartTime":95897.0,"EndTime":96012.0,"Column":1}]},{"StartTime":96127.0,"Objects":[{"StartTime":96127.0,"EndTime":96357.0,"Column":5},{"StartTime":96127.0,"EndTime":96357.0,"Column":4}]},{"StartTime":96474.0,"Objects":[{"StartTime":96474.0,"EndTime":96474.0,"Column":2},{"StartTime":96474.0,"EndTime":96474.0,"Column":6}]},{"StartTime":96589.0,"Objects":[{"StartTime":96589.0,"EndTime":96819.0,"Column":4},{"StartTime":96589.0,"EndTime":96819.0,"Column":3}]},{"StartTime":96935.0,"Objects":[{"StartTime":96935.0,"EndTime":96935.0,"Column":1},{"StartTime":96935.0,"EndTime":96935.0,"Column":6},{"StartTime":96935.0,"EndTime":96935.0,"Column":2}]},{"StartTime":97051.0,"Objects":[{"StartTime":97051.0,"EndTime":97281.0,"Column":4}]},{"StartTime":97397.0,"Objects":[{"StartTime":97397.0,"EndTime":97397.0,"Column":5},{"StartTime":97397.0,"EndTime":97397.0,"Column":0}]},{"StartTime":97512.0,"Objects":[{"StartTime":97512.0,"EndTime":97627.0,"Column":1}]},{"StartTime":97743.0,"Objects":[{"StartTime":97743.0,"EndTime":97858.0,"Column":3},{"StartTime":97743.0,"EndTime":97858.0,"Column":5}]},{"StartTime":97974.0,"Objects":[{"StartTime":97974.0,"EndTime":98204.0,"Column":6},{"StartTime":97974.0,"EndTime":98204.0,"Column":0}]},{"StartTime":98320.0,"Objects":[{"StartTime":98320.0,"EndTime":98320.0,"Column":2},{"StartTime":98320.0,"EndTime":98320.0,"Column":3}]},{"StartTime":98435.0,"Objects":[{"StartTime":98435.0,"EndTime":98665.0,"Column":0}]},{"StartTime":98781.0,"Objects":[{"StartTime":98781.0,"EndTime":98781.0,"Column":6},{"StartTime":98781.0,"EndTime":98781.0,"Column":4}]},{"StartTime":98897.0,"Objects":[{"StartTime":98897.0,"EndTime":99127.0,"Column":2},{"StartTime":98897.0,"EndTime":99127.0,"Column":0}]},{"StartTime":99243.0,"Objects":[{"StartTime":99243.0,"EndTime":99243.0,"Column":5}]},{"StartTime":99358.0,"Objects":[{"StartTime":99358.0,"EndTime":99473.0,"Column":3},{"StartTime":99358.0,"EndTime":99473.0,"Column":1},{"StartTime":99358.0,"EndTime":99473.0,"Column":6}]},{"StartTime":99589.0,"Objects":[{"StartTime":99589.0,"EndTime":99704.0,"Column":2},{"StartTime":99589.0,"EndTime":99704.0,"Column":5},{"StartTime":99589.0,"EndTime":99704.0,"Column":0}]},{"StartTime":99820.0,"Objects":[{"StartTime":99820.0,"EndTime":99820.0,"Column":4}]},{"StartTime":99935.0,"Objects":[{"StartTime":99935.0,"EndTime":99935.0,"Column":5}]},{"StartTime":100051.0,"Objects":[{"StartTime":100051.0,"EndTime":100051.0,"Column":6},{"StartTime":100051.0,"EndTime":100051.0,"Column":0}]},{"StartTime":100166.0,"Objects":[{"StartTime":100166.0,"EndTime":100166.0,"Column":4}]},{"StartTime":100281.0,"Objects":[{"StartTime":100281.0,"EndTime":100281.0,"Column":3}]},{"StartTime":100397.0,"Objects":[{"StartTime":100397.0,"EndTime":100397.0,"Column":2}]},{"StartTime":100512.0,"Objects":[{"StartTime":100512.0,"EndTime":100512.0,"Column":1},{"StartTime":100512.0,"EndTime":100512.0,"Column":3}]},{"StartTime":100628.0,"Objects":[{"StartTime":100628.0,"EndTime":100628.0,"Column":2}]},{"StartTime":100743.0,"Objects":[{"StartTime":100743.0,"EndTime":100858.0,"Column":5},{"StartTime":100743.0,"EndTime":100858.0,"Column":1}]},{"StartTime":100974.0,"Objects":[{"StartTime":100974.0,"EndTime":101089.0,"Column":6},{"StartTime":100974.0,"EndTime":101089.0,"Column":0}]},{"StartTime":101204.0,"Objects":[{"StartTime":101204.0,"EndTime":101319.0,"Column":4}]},{"StartTime":101435.0,"Objects":[{"StartTime":101435.0,"EndTime":101550.0,"Column":2},{"StartTime":101435.0,"EndTime":101550.0,"Column":3}]},{"StartTime":101666.0,"Objects":[{"StartTime":101666.0,"EndTime":101781.0,"Column":4},{"StartTime":101666.0,"EndTime":101781.0,"Column":1}]},{"StartTime":101897.0,"Objects":[{"StartTime":101897.0,"EndTime":102012.0,"Column":3},{"StartTime":101897.0,"EndTime":102012.0,"Column":2}]},{"StartTime":102127.0,"Objects":[{"StartTime":102127.0,"EndTime":102127.0,"Column":4},{"StartTime":102127.0,"EndTime":102127.0,"Column":6}]},{"StartTime":102243.0,"Objects":[{"StartTime":102243.0,"EndTime":102243.0,"Column":2}]},{"StartTime":102300.0,"Objects":[{"StartTime":102300.0,"EndTime":102300.0,"Column":4}]},{"StartTime":102358.0,"Objects":[{"StartTime":102358.0,"EndTime":102358.0,"Column":6}]},{"StartTime":102416.0,"Objects":[{"StartTime":102416.0,"EndTime":102416.0,"Column":4}]},{"StartTime":102474.0,"Objects":[{"StartTime":102474.0,"EndTime":102474.0,"Column":6}]},{"StartTime":102531.0,"Objects":[{"StartTime":102531.0,"EndTime":102531.0,"Column":4}]},{"StartTime":102589.0,"Objects":[{"StartTime":102589.0,"EndTime":102589.0,"Column":0}]},{"StartTime":102646.0,"Objects":[{"StartTime":102646.0,"EndTime":102646.0,"Column":4}]},{"StartTime":102704.0,"Objects":[{"StartTime":102704.0,"EndTime":102704.0,"Column":5}]},{"StartTime":102762.0,"Objects":[{"StartTime":102762.0,"EndTime":102762.0,"Column":6}]},{"StartTime":102819.0,"Objects":[{"StartTime":102819.0,"EndTime":102819.0,"Column":1}]},{"StartTime":102935.0,"Objects":[{"StartTime":102935.0,"EndTime":102935.0,"Column":3}]},{"StartTime":103051.0,"Objects":[{"StartTime":103051.0,"EndTime":103051.0,"Column":5}]},{"StartTime":103108.0,"Objects":[{"StartTime":103108.0,"EndTime":103108.0,"Column":3}]},{"StartTime":103166.0,"Objects":[{"StartTime":103166.0,"EndTime":103166.0,"Column":6}]},{"StartTime":103224.0,"Objects":[{"StartTime":103224.0,"EndTime":103224.0,"Column":3}]},{"StartTime":103281.0,"Objects":[{"StartTime":103281.0,"EndTime":103281.0,"Column":0}]},{"StartTime":103339.0,"Objects":[{"StartTime":103339.0,"EndTime":103339.0,"Column":4}]},{"StartTime":103397.0,"Objects":[{"StartTime":103397.0,"EndTime":103397.0,"Column":3}]},{"StartTime":103454.0,"Objects":[{"StartTime":103454.0,"EndTime":103454.0,"Column":5}]},{"StartTime":103512.0,"Objects":[{"StartTime":103512.0,"EndTime":103742.0,"Column":1},{"StartTime":103512.0,"EndTime":103742.0,"Column":2}]},{"StartTime":103858.0,"Objects":[{"StartTime":103858.0,"EndTime":103858.0,"Column":6}]},{"StartTime":103974.0,"Objects":[{"StartTime":103974.0,"EndTime":104204.0,"Column":0},{"StartTime":103974.0,"EndTime":104204.0,"Column":2},{"StartTime":103974.0,"EndTime":104204.0,"Column":5}]},{"StartTime":104320.0,"Objects":[{"StartTime":104320.0,"EndTime":104320.0,"Column":3},{"StartTime":104320.0,"EndTime":104320.0,"Column":1},{"StartTime":104320.0,"EndTime":104320.0,"Column":4}]},{"StartTime":104435.0,"Objects":[{"StartTime":104435.0,"EndTime":104550.0,"Column":0}]},{"StartTime":104666.0,"Objects":[{"StartTime":104666.0,"EndTime":104896.0,"Column":5}]},{"StartTime":105012.0,"Objects":[{"StartTime":105012.0,"EndTime":105012.0,"Column":1},{"StartTime":105012.0,"EndTime":105012.0,"Column":4}]},{"StartTime":105127.0,"Objects":[{"StartTime":105127.0,"EndTime":105127.0,"Column":2},{"StartTime":105127.0,"EndTime":105127.0,"Column":3}]},{"StartTime":105243.0,"Objects":[{"StartTime":105243.0,"EndTime":105243.0,"Column":4},{"StartTime":105243.0,"EndTime":105243.0,"Column":5}]},{"StartTime":105301.0,"Objects":[{"StartTime":105301.0,"EndTime":105301.0,"Column":2}]},{"StartTime":105358.0,"Objects":[{"StartTime":105358.0,"EndTime":105588.0,"Column":5}]},{"StartTime":105704.0,"Objects":[{"StartTime":105704.0,"EndTime":105704.0,"Column":0}]},{"StartTime":105820.0,"Objects":[{"StartTime":105820.0,"EndTime":105935.0,"Column":2},{"StartTime":105820.0,"EndTime":105935.0,"Column":6}]},{"StartTime":106051.0,"Objects":[{"StartTime":106051.0,"EndTime":106166.0,"Column":0},{"StartTime":106051.0,"EndTime":106166.0,"Column":1},{"StartTime":106051.0,"EndTime":106166.0,"Column":5}]},{"StartTime":106281.0,"Objects":[{"StartTime":106281.0,"EndTime":106396.0,"Column":6},{"StartTime":106281.0,"EndTime":106396.0,"Column":3}]},{"StartTime":106512.0,"Objects":[{"StartTime":106512.0,"EndTime":106627.0,"Column":4}]},{"StartTime":106743.0,"Objects":[{"StartTime":106743.0,"EndTime":106916.0,"Column":6}]},{"StartTime":106974.0,"Objects":[{"StartTime":106974.0,"EndTime":107089.0,"Column":2},{"StartTime":106974.0,"EndTime":107089.0,"Column":3}]},{"StartTime":107204.0,"Objects":[{"StartTime":107204.0,"EndTime":107434.0,"Column":0},{"StartTime":107204.0,"EndTime":107434.0,"Column":1}]},{"StartTime":107551.0,"Objects":[{"StartTime":107551.0,"EndTime":107551.0,"Column":2}]},{"StartTime":107666.0,"Objects":[{"StartTime":107666.0,"EndTime":107896.0,"Column":3}]},{"StartTime":108012.0,"Objects":[{"StartTime":108012.0,"EndTime":108012.0,"Column":4},{"StartTime":108012.0,"EndTime":108012.0,"Column":0}]},{"StartTime":108127.0,"Objects":[{"StartTime":108127.0,"EndTime":108242.0,"Column":6},{"StartTime":108127.0,"EndTime":108242.0,"Column":5}]},{"StartTime":108358.0,"Objects":[{"StartTime":108358.0,"EndTime":108588.0,"Column":2}]},{"StartTime":108704.0,"Objects":[{"StartTime":108704.0,"EndTime":108704.0,"Column":5},{"StartTime":108704.0,"EndTime":108704.0,"Column":0}]},{"StartTime":108820.0,"Objects":[{"StartTime":108820.0,"EndTime":108820.0,"Column":6},{"StartTime":108820.0,"EndTime":108820.0,"Column":1}]},{"StartTime":108935.0,"Objects":[{"StartTime":108935.0,"EndTime":108935.0,"Column":4},{"StartTime":108935.0,"EndTime":108935.0,"Column":0}]},{"StartTime":108993.0,"Objects":[{"StartTime":108993.0,"EndTime":108993.0,"Column":2}]},{"StartTime":109051.0,"Objects":[{"StartTime":109051.0,"EndTime":109281.0,"Column":6}]},{"StartTime":109397.0,"Objects":[{"StartTime":109397.0,"EndTime":109397.0,"Column":5},{"StartTime":109397.0,"EndTime":109397.0,"Column":4}]},{"StartTime":109512.0,"Objects":[{"StartTime":109512.0,"EndTime":109627.0,"Column":2}]},{"StartTime":109743.0,"Objects":[{"StartTime":109743.0,"EndTime":109858.0,"Column":3}]},{"StartTime":109974.0,"Objects":[{"StartTime":109974.0,"EndTime":110089.0,"Column":4},{"StartTime":109974.0,"EndTime":110089.0,"Column":5}]},{"StartTime":110204.0,"Objects":[{"StartTime":110204.0,"EndTime":110319.0,"Column":6},{"StartTime":110204.0,"EndTime":110319.0,"Column":0}]},{"StartTime":110435.0,"Objects":[{"StartTime":110435.0,"EndTime":110608.0,"Column":1},{"StartTime":110435.0,"EndTime":110608.0,"Column":2}]},{"StartTime":110666.0,"Objects":[{"StartTime":110666.0,"EndTime":110781.0,"Column":4}]},{"StartTime":110897.0,"Objects":[{"StartTime":110897.0,"EndTime":111127.0,"Column":2}]},{"StartTime":111243.0,"Objects":[{"StartTime":111243.0,"EndTime":111243.0,"Column":6},{"StartTime":111243.0,"EndTime":111243.0,"Column":3}]},{"StartTime":111358.0,"Objects":[{"StartTime":111358.0,"EndTime":111588.0,"Column":4}]},{"StartTime":111704.0,"Objects":[{"StartTime":111704.0,"EndTime":111704.0,"Column":1},{"StartTime":111704.0,"EndTime":111704.0,"Column":2},{"StartTime":111704.0,"EndTime":111704.0,"Column":5}]},{"StartTime":111820.0,"Objects":[{"StartTime":111820.0,"EndTime":111935.0,"Column":0}]},{"StartTime":112051.0,"Objects":[{"StartTime":112051.0,"EndTime":112281.0,"Column":5},{"StartTime":112051.0,"EndTime":112281.0,"Column":1}]},{"StartTime":112397.0,"Objects":[{"StartTime":112397.0,"EndTime":112397.0,"Column":6}]},{"StartTime":112512.0,"Objects":[{"StartTime":112512.0,"EndTime":112512.0,"Column":5},{"StartTime":112512.0,"EndTime":112512.0,"Column":0}]},{"StartTime":112627.0,"Objects":[{"StartTime":112627.0,"EndTime":112627.0,"Column":3},{"StartTime":112627.0,"EndTime":112627.0,"Column":6},{"StartTime":112627.0,"EndTime":112627.0,"Column":1}]},{"StartTime":112685.0,"Objects":[{"StartTime":112685.0,"EndTime":112685.0,"Column":2}]},{"StartTime":112743.0,"Objects":[{"StartTime":112743.0,"EndTime":112973.0,"Column":0}]},{"StartTime":113089.0,"Objects":[{"StartTime":113089.0,"EndTime":113089.0,"Column":4}]},{"StartTime":113204.0,"Objects":[{"StartTime":113204.0,"EndTime":113434.0,"Column":5}]},{"StartTime":113551.0,"Objects":[{"StartTime":113551.0,"EndTime":113551.0,"Column":4}]},{"StartTime":113666.0,"Objects":[{"StartTime":113666.0,"EndTime":113896.0,"Column":1},{"StartTime":113666.0,"EndTime":113896.0,"Column":0}]},{"StartTime":114012.0,"Objects":[{"StartTime":114012.0,"EndTime":114012.0,"Column":2},{"StartTime":114012.0,"EndTime":114012.0,"Column":6},{"StartTime":114012.0,"EndTime":114012.0,"Column":5}]},{"StartTime":114127.0,"Objects":[{"StartTime":114127.0,"EndTime":114300.0,"Column":3},{"StartTime":114127.0,"EndTime":114300.0,"Column":0}]},{"StartTime":114358.0,"Objects":[{"StartTime":114358.0,"EndTime":114473.0,"Column":2},{"StartTime":114358.0,"EndTime":114473.0,"Column":1},{"StartTime":114358.0,"EndTime":114473.0,"Column":4}]},{"StartTime":114589.0,"Objects":[{"StartTime":114589.0,"EndTime":115281.0,"Column":6}]},{"StartTime":115512.0,"Objects":[{"StartTime":115512.0,"EndTime":115512.0,"Column":3},{"StartTime":115512.0,"EndTime":115512.0,"Column":6}]},{"StartTime":116435.0,"Objects":[{"StartTime":116435.0,"EndTime":117127.0,"Column":2}]},{"StartTime":117358.0,"Objects":[{"StartTime":117358.0,"EndTime":117358.0,"Column":2}]},{"StartTime":117589.0,"Objects":[{"StartTime":117589.0,"EndTime":117589.0,"Column":3},{"StartTime":117589.0,"EndTime":117589.0,"Column":4}]},{"StartTime":117820.0,"Objects":[{"StartTime":117820.0,"EndTime":117820.0,"Column":5}]},{"StartTime":118051.0,"Objects":[{"StartTime":118051.0,"EndTime":118166.0,"Column":0}]},{"StartTime":118281.0,"Objects":[{"StartTime":118281.0,"EndTime":118396.0,"Column":3}]},{"StartTime":118512.0,"Objects":[{"StartTime":118512.0,"EndTime":118627.0,"Column":0}]},{"StartTime":118743.0,"Objects":[{"StartTime":118743.0,"EndTime":118743.0,"Column":1},{"StartTime":118743.0,"EndTime":118743.0,"Column":2}]},{"StartTime":118858.0,"Objects":[{"StartTime":118858.0,"EndTime":119088.0,"Column":4},{"StartTime":118858.0,"EndTime":119088.0,"Column":0}]},{"StartTime":119204.0,"Objects":[{"StartTime":119204.0,"EndTime":119204.0,"Column":1}]},{"StartTime":119262.0,"Objects":[{"StartTime":119262.0,"EndTime":119262.0,"Column":6}]},{"StartTime":119319.0,"Objects":[{"StartTime":119319.0,"EndTime":119319.0,"Column":2}]},{"StartTime":119377.0,"Objects":[{"StartTime":119377.0,"EndTime":119377.0,"Column":1}]},{"StartTime":119434.0,"Objects":[{"StartTime":119434.0,"EndTime":119434.0,"Column":2}]},{"StartTime":119493.0,"Objects":[{"StartTime":119493.0,"EndTime":119493.0,"Column":1}]},{"StartTime":119551.0,"Objects":[{"StartTime":119551.0,"EndTime":119551.0,"Column":3}]},{"StartTime":119608.0,"Objects":[{"StartTime":119608.0,"EndTime":119608.0,"Column":1}]},{"StartTime":119666.0,"Objects":[{"StartTime":119666.0,"EndTime":119666.0,"Column":0}]},{"StartTime":119723.0,"Objects":[{"StartTime":119723.0,"EndTime":119723.0,"Column":2}]},{"StartTime":119781.0,"Objects":[{"StartTime":119781.0,"EndTime":119781.0,"Column":3}]},{"StartTime":119839.0,"Objects":[{"StartTime":119839.0,"EndTime":119839.0,"Column":4}]},{"StartTime":119897.0,"Objects":[{"StartTime":119897.0,"EndTime":119897.0,"Column":5}]},{"StartTime":119954.0,"Objects":[{"StartTime":119954.0,"EndTime":119954.0,"Column":4}]},{"StartTime":120012.0,"Objects":[{"StartTime":120012.0,"EndTime":120012.0,"Column":5}]},{"StartTime":120070.0,"Objects":[{"StartTime":120070.0,"EndTime":120070.0,"Column":6}]},{"StartTime":120127.0,"Objects":[{"StartTime":120127.0,"EndTime":120357.0,"Column":0}]},{"StartTime":120474.0,"Objects":[{"StartTime":120474.0,"EndTime":120704.0,"Column":4}]},{"StartTime":120820.0,"Objects":[{"StartTime":120820.0,"EndTime":120935.0,"Column":5},{"StartTime":120820.0,"EndTime":120935.0,"Column":2},{"StartTime":120820.0,"EndTime":120935.0,"Column":3}]},{"StartTime":121051.0,"Objects":[{"StartTime":121051.0,"EndTime":121051.0,"Column":1}]},{"StartTime":121166.0,"Objects":[{"StartTime":121166.0,"EndTime":121396.0,"Column":3}]},{"StartTime":121512.0,"Objects":[{"StartTime":121512.0,"EndTime":121627.0,"Column":0},{"StartTime":121512.0,"EndTime":121627.0,"Column":2},{"StartTime":121512.0,"EndTime":121627.0,"Column":1}]},{"StartTime":121743.0,"Objects":[{"StartTime":121743.0,"EndTime":121858.0,"Column":6}]},{"StartTime":121974.0,"Objects":[{"StartTime":121974.0,"EndTime":122204.0,"Column":2}]},{"StartTime":122320.0,"Objects":[{"StartTime":122320.0,"EndTime":122550.0,"Column":0}]},{"StartTime":122666.0,"Objects":[{"StartTime":122666.0,"EndTime":122781.0,"Column":4},{"StartTime":122666.0,"EndTime":122781.0,"Column":5}]},{"StartTime":122897.0,"Objects":[{"StartTime":122897.0,"EndTime":122897.0,"Column":1}]},{"StartTime":123012.0,"Objects":[{"StartTime":123012.0,"EndTime":123242.0,"Column":3}]},{"StartTime":123358.0,"Objects":[{"StartTime":123358.0,"EndTime":123473.0,"Column":6},{"StartTime":123358.0,"EndTime":123473.0,"Column":4}]},{"StartTime":123589.0,"Objects":[{"StartTime":123589.0,"EndTime":123704.0,"Column":3},{"StartTime":123589.0,"EndTime":123704.0,"Column":5}]},{"StartTime":123820.0,"Objects":[{"StartTime":123820.0,"EndTime":124050.0,"Column":4},{"StartTime":123820.0,"EndTime":124050.0,"Column":0}]},{"StartTime":124166.0,"Objects":[{"StartTime":124166.0,"EndTime":124396.0,"Column":3}]},{"StartTime":124512.0,"Objects":[{"StartTime":124512.0,"EndTime":124627.0,"Column":0},{"StartTime":124512.0,"EndTime":124627.0,"Column":6},{"StartTime":124512.0,"EndTime":124627.0,"Column":5}]},{"StartTime":124743.0,"Objects":[{"StartTime":124743.0,"EndTime":124743.0,"Column":2},{"StartTime":124743.0,"EndTime":124743.0,"Column":4}]},{"StartTime":124858.0,"Objects":[{"StartTime":124858.0,"EndTime":125088.0,"Column":1}]},{"StartTime":125204.0,"Objects":[{"StartTime":125204.0,"EndTime":125319.0,"Column":5}]},{"StartTime":125435.0,"Objects":[{"StartTime":125435.0,"EndTime":125550.0,"Column":2},{"StartTime":125435.0,"EndTime":125550.0,"Column":0},{"StartTime":125435.0,"EndTime":125550.0,"Column":6}]},{"StartTime":125666.0,"Objects":[{"StartTime":125666.0,"EndTime":125666.0,"Column":1},{"StartTime":125666.0,"EndTime":125666.0,"Column":3}]},{"StartTime":125781.0,"Objects":[{"StartTime":125781.0,"EndTime":125781.0,"Column":0},{"StartTime":125781.0,"EndTime":125781.0,"Column":2}]},{"StartTime":125897.0,"Objects":[{"StartTime":125897.0,"EndTime":125897.0,"Column":3},{"StartTime":125897.0,"EndTime":125897.0,"Column":4},{"StartTime":125897.0,"EndTime":125897.0,"Column":5}]},{"StartTime":126012.0,"Objects":[{"StartTime":126012.0,"EndTime":126012.0,"Column":0},{"StartTime":126012.0,"EndTime":126012.0,"Column":1}]},{"StartTime":126127.0,"Objects":[{"StartTime":126127.0,"EndTime":126357.0,"Column":4}]},{"StartTime":126474.0,"Objects":[{"StartTime":126474.0,"EndTime":126474.0,"Column":5},{"StartTime":126474.0,"EndTime":126474.0,"Column":3}]},{"StartTime":126589.0,"Objects":[{"StartTime":126589.0,"EndTime":126762.0,"Column":2},{"StartTime":126589.0,"EndTime":126762.0,"Column":0}]},{"StartTime":126820.0,"Objects":[{"StartTime":126820.0,"EndTime":127050.0,"Column":6}]},{"StartTime":127166.0,"Objects":[{"StartTime":127166.0,"EndTime":127166.0,"Column":5},{"StartTime":127166.0,"EndTime":127166.0,"Column":4},{"StartTime":127166.0,"EndTime":127166.0,"Column":1}]},{"StartTime":127281.0,"Objects":[{"StartTime":127281.0,"EndTime":127281.0,"Column":3},{"StartTime":127281.0,"EndTime":127281.0,"Column":6},{"StartTime":127281.0,"EndTime":127281.0,"Column":0}]},{"StartTime":127397.0,"Objects":[{"StartTime":127397.0,"EndTime":127397.0,"Column":2},{"StartTime":127397.0,"EndTime":127397.0,"Column":4}]},{"StartTime":127454.0,"Objects":[{"StartTime":127454.0,"EndTime":127454.0,"Column":3}]},{"StartTime":127512.0,"Objects":[{"StartTime":127512.0,"EndTime":127742.0,"Column":6},{"StartTime":127512.0,"EndTime":127742.0,"Column":0}]},{"StartTime":127858.0,"Objects":[{"StartTime":127858.0,"EndTime":128088.0,"Column":2},{"StartTime":127858.0,"EndTime":128088.0,"Column":5},{"StartTime":127858.0,"EndTime":128088.0,"Column":4}]},{"StartTime":128204.0,"Objects":[{"StartTime":128204.0,"EndTime":128319.0,"Column":1},{"StartTime":128204.0,"EndTime":128319.0,"Column":0}]},{"StartTime":128435.0,"Objects":[{"StartTime":128435.0,"EndTime":128435.0,"Column":6},{"StartTime":128435.0,"EndTime":128435.0,"Column":2},{"StartTime":128435.0,"EndTime":128435.0,"Column":5}]},{"StartTime":128551.0,"Objects":[{"StartTime":128551.0,"EndTime":128781.0,"Column":3}]},{"StartTime":128897.0,"Objects":[{"StartTime":128897.0,"EndTime":129012.0,"Column":0}]},{"StartTime":129127.0,"Objects":[{"StartTime":129127.0,"EndTime":129242.0,"Column":1},{"StartTime":129127.0,"EndTime":129242.0,"Column":6}]},{"StartTime":129358.0,"Objects":[{"StartTime":129358.0,"EndTime":129588.0,"Column":5},{"StartTime":129358.0,"EndTime":129588.0,"Column":4}]},{"StartTime":129704.0,"Objects":[{"StartTime":129704.0,"EndTime":129934.0,"Column":0}]},{"StartTime":130051.0,"Objects":[{"StartTime":130051.0,"EndTime":130166.0,"Column":3},{"StartTime":130051.0,"EndTime":130166.0,"Column":4}]},{"StartTime":130281.0,"Objects":[{"StartTime":130281.0,"EndTime":130281.0,"Column":2},{"StartTime":130281.0,"EndTime":130281.0,"Column":6},{"StartTime":130281.0,"EndTime":130281.0,"Column":0}]},{"StartTime":130397.0,"Objects":[{"StartTime":130397.0,"EndTime":130627.0,"Column":1}]},{"StartTime":130743.0,"Objects":[{"StartTime":130743.0,"EndTime":130858.0,"Column":4}]},{"StartTime":130974.0,"Objects":[{"StartTime":130974.0,"EndTime":131089.0,"Column":0},{"StartTime":130974.0,"EndTime":131089.0,"Column":2},{"StartTime":130974.0,"EndTime":131089.0,"Column":6}]},{"StartTime":131204.0,"Objects":[{"StartTime":131204.0,"EndTime":131434.0,"Column":4},{"StartTime":131204.0,"EndTime":131434.0,"Column":5}]},{"StartTime":131551.0,"Objects":[{"StartTime":131551.0,"EndTime":131781.0,"Column":3},{"StartTime":131551.0,"EndTime":131781.0,"Column":1}]},{"StartTime":131897.0,"Objects":[{"StartTime":131897.0,"EndTime":132012.0,"Column":0}]},{"StartTime":132127.0,"Objects":[{"StartTime":132127.0,"EndTime":132127.0,"Column":3}]},{"StartTime":132243.0,"Objects":[{"StartTime":132243.0,"EndTime":132473.0,"Column":5}]},{"StartTime":132589.0,"Objects":[{"StartTime":132589.0,"EndTime":132704.0,"Column":1}]},{"StartTime":132820.0,"Objects":[{"StartTime":132820.0,"EndTime":132935.0,"Column":5},{"StartTime":132820.0,"EndTime":132935.0,"Column":4}]},{"StartTime":133051.0,"Objects":[{"StartTime":133051.0,"EndTime":133051.0,"Column":6}]},{"StartTime":133108.0,"Objects":[{"StartTime":133108.0,"EndTime":133108.0,"Column":4}]},{"StartTime":133166.0,"Objects":[{"StartTime":133166.0,"EndTime":133166.0,"Column":5}]},{"StartTime":133224.0,"Objects":[{"StartTime":133224.0,"EndTime":133224.0,"Column":4}]},{"StartTime":133281.0,"Objects":[{"StartTime":133281.0,"EndTime":133281.0,"Column":3}]},{"StartTime":133339.0,"Objects":[{"StartTime":133339.0,"EndTime":133339.0,"Column":5}]},{"StartTime":133397.0,"Objects":[{"StartTime":133397.0,"EndTime":133397.0,"Column":2}]},{"StartTime":133454.0,"Objects":[{"StartTime":133454.0,"EndTime":133454.0,"Column":5}]},{"StartTime":133512.0,"Objects":[{"StartTime":133512.0,"EndTime":133512.0,"Column":3}]},{"StartTime":133743.0,"Objects":[{"StartTime":133743.0,"EndTime":133743.0,"Column":5},{"StartTime":133743.0,"EndTime":133743.0,"Column":6},{"StartTime":133743.0,"EndTime":133743.0,"Column":0}]},{"StartTime":133858.0,"Objects":[{"StartTime":133858.0,"EndTime":133858.0,"Column":1},{"StartTime":133858.0,"EndTime":133858.0,"Column":2}]},{"StartTime":133973.0,"Objects":[{"StartTime":133973.0,"EndTime":133973.0,"Column":6},{"StartTime":133973.0,"EndTime":133973.0,"Column":3},{"StartTime":133973.0,"EndTime":133973.0,"Column":5}]},{"StartTime":134031.0,"Objects":[{"StartTime":134031.0,"EndTime":134031.0,"Column":2}]},{"StartTime":134088.0,"Objects":[{"StartTime":134088.0,"EndTime":134088.0,"Column":6}]},{"StartTime":134146.0,"Objects":[{"StartTime":134146.0,"EndTime":134146.0,"Column":2}]},{"StartTime":134204.0,"Objects":[{"StartTime":134204.0,"EndTime":134550.0,"Column":4}]},{"StartTime":134666.0,"Objects":[{"StartTime":134666.0,"EndTime":134781.0,"Column":3}]},{"StartTime":134897.0,"Objects":[{"StartTime":134897.0,"EndTime":135012.0,"Column":5}]},{"StartTime":135127.0,"Objects":[{"StartTime":135127.0,"EndTime":135242.0,"Column":1}]},{"StartTime":135358.0,"Objects":[{"StartTime":135358.0,"EndTime":135588.0,"Column":5},{"StartTime":135358.0,"EndTime":135588.0,"Column":2}]},{"StartTime":135704.0,"Objects":[{"StartTime":135704.0,"EndTime":135819.0,"Column":3}]},{"StartTime":135935.0,"Objects":[{"StartTime":135935.0,"EndTime":136050.0,"Column":2}]},{"StartTime":136166.0,"Objects":[{"StartTime":136166.0,"EndTime":136281.0,"Column":6},{"StartTime":136166.0,"EndTime":136281.0,"Column":1}]},{"StartTime":136397.0,"Objects":[{"StartTime":136397.0,"EndTime":136512.0,"Column":2}]},{"StartTime":136627.0,"Objects":[{"StartTime":136627.0,"EndTime":136627.0,"Column":5}]},{"StartTime":136743.0,"Objects":[{"StartTime":136743.0,"EndTime":136858.0,"Column":1}]},{"StartTime":136974.0,"Objects":[{"StartTime":136974.0,"EndTime":137089.0,"Column":4},{"StartTime":136974.0,"EndTime":137089.0,"Column":6}]},{"StartTime":137204.0,"Objects":[{"StartTime":137204.0,"EndTime":137319.0,"Column":5}]},{"StartTime":137435.0,"Objects":[{"StartTime":137435.0,"EndTime":137550.0,"Column":2}]},{"StartTime":137666.0,"Objects":[{"StartTime":137666.0,"EndTime":137896.0,"Column":3},{"StartTime":137666.0,"EndTime":137896.0,"Column":6}]},{"StartTime":138012.0,"Objects":[{"StartTime":138012.0,"EndTime":138242.0,"Column":5},{"StartTime":138012.0,"EndTime":138242.0,"Column":1}]},{"StartTime":138358.0,"Objects":[{"StartTime":138358.0,"EndTime":138473.0,"Column":6}]},{"StartTime":138589.0,"Objects":[{"StartTime":138589.0,"EndTime":138819.0,"Column":0},{"StartTime":138589.0,"EndTime":138819.0,"Column":4}]},{"StartTime":138935.0,"Objects":[{"StartTime":138935.0,"EndTime":138935.0,"Column":6},{"StartTime":138935.0,"EndTime":138935.0,"Column":5}]},{"StartTime":139051.0,"Objects":[{"StartTime":139051.0,"EndTime":139281.0,"Column":1}]},{"StartTime":139397.0,"Objects":[{"StartTime":139397.0,"EndTime":139397.0,"Column":2},{"StartTime":139397.0,"EndTime":139397.0,"Column":3}]},{"StartTime":139512.0,"Objects":[{"StartTime":139512.0,"EndTime":139742.0,"Column":6}]},{"StartTime":139858.0,"Objects":[{"StartTime":139858.0,"EndTime":139858.0,"Column":5}]},{"StartTime":139974.0,"Objects":[{"StartTime":139974.0,"EndTime":140089.0,"Column":1}]},{"StartTime":140204.0,"Objects":[{"StartTime":140204.0,"EndTime":140319.0,"Column":3},{"StartTime":140204.0,"EndTime":140319.0,"Column":2}]},{"StartTime":140435.0,"Objects":[{"StartTime":140435.0,"EndTime":140550.0,"Column":6},{"StartTime":140435.0,"EndTime":140550.0,"Column":4}]},{"StartTime":140666.0,"Objects":[{"StartTime":140666.0,"EndTime":140781.0,"Column":2},{"StartTime":140666.0,"EndTime":140781.0,"Column":1}]},{"StartTime":140897.0,"Objects":[{"StartTime":140897.0,"EndTime":141012.0,"Column":6}]},{"StartTime":141127.0,"Objects":[{"StartTime":141127.0,"EndTime":141242.0,"Column":3}]},{"StartTime":141358.0,"Objects":[{"StartTime":141358.0,"EndTime":141588.0,"Column":6}]},{"StartTime":141704.0,"Objects":[{"StartTime":141704.0,"EndTime":141704.0,"Column":2},{"StartTime":141704.0,"EndTime":141704.0,"Column":3},{"StartTime":141704.0,"EndTime":141704.0,"Column":0}]},{"StartTime":141820.0,"Objects":[{"StartTime":141820.0,"EndTime":142050.0,"Column":6},{"StartTime":141820.0,"EndTime":142050.0,"Column":5}]},{"StartTime":142166.0,"Objects":[{"StartTime":142166.0,"EndTime":142166.0,"Column":0},{"StartTime":142166.0,"EndTime":142166.0,"Column":4}]},{"StartTime":142281.0,"Objects":[{"StartTime":142281.0,"EndTime":142396.0,"Column":5},{"StartTime":142281.0,"EndTime":142396.0,"Column":1}]},{"StartTime":142512.0,"Objects":[{"StartTime":142512.0,"EndTime":142627.0,"Column":4}]},{"StartTime":142743.0,"Objects":[{"StartTime":142743.0,"EndTime":142858.0,"Column":5},{"StartTime":142743.0,"EndTime":142858.0,"Column":6}]},{"StartTime":142974.0,"Objects":[{"StartTime":142974.0,"EndTime":143089.0,"Column":4}]},{"StartTime":143204.0,"Objects":[{"StartTime":143204.0,"EndTime":143377.0,"Column":2},{"StartTime":143204.0,"EndTime":143377.0,"Column":1},{"StartTime":143204.0,"EndTime":143377.0,"Column":0}]},{"StartTime":143435.0,"Objects":[{"StartTime":143435.0,"EndTime":143608.0,"Column":5}]},{"StartTime":143666.0,"Objects":[{"StartTime":143666.0,"EndTime":143839.0,"Column":6},{"StartTime":143666.0,"EndTime":143839.0,"Column":0}]},{"StartTime":143897.0,"Objects":[{"StartTime":143897.0,"EndTime":144070.0,"Column":2}]},{"StartTime":144127.0,"Objects":[{"StartTime":144127.0,"EndTime":144357.0,"Column":0}]},{"StartTime":144474.0,"Objects":[{"StartTime":144474.0,"EndTime":144474.0,"Column":5},{"StartTime":144474.0,"EndTime":144474.0,"Column":1}]},{"StartTime":144589.0,"Objects":[{"StartTime":144589.0,"EndTime":144819.0,"Column":4}]},{"StartTime":144935.0,"Objects":[{"StartTime":144935.0,"EndTime":144935.0,"Column":2}]},{"StartTime":145051.0,"Objects":[{"StartTime":145051.0,"EndTime":145166.0,"Column":5},{"StartTime":145051.0,"EndTime":145166.0,"Column":0},{"StartTime":145051.0,"EndTime":145166.0,"Column":4}]},{"StartTime":145281.0,"Objects":[{"StartTime":145281.0,"EndTime":145396.0,"Column":3},{"StartTime":145281.0,"EndTime":145396.0,"Column":1}]},{"StartTime":145512.0,"Objects":[{"StartTime":145512.0,"EndTime":145627.0,"Column":2}]},{"StartTime":145742.0,"Objects":[{"StartTime":145742.0,"EndTime":145857.0,"Column":1}]},{"StartTime":145974.0,"Objects":[{"StartTime":145974.0,"EndTime":146089.0,"Column":5}]},{"StartTime":146204.0,"Objects":[{"StartTime":146204.0,"EndTime":146319.0,"Column":2},{"StartTime":146204.0,"EndTime":146319.0,"Column":0}]},{"StartTime":146435.0,"Objects":[{"StartTime":146435.0,"EndTime":146550.0,"Column":4},{"StartTime":146435.0,"EndTime":146550.0,"Column":5}]},{"StartTime":146666.0,"Objects":[{"StartTime":146666.0,"EndTime":146781.0,"Column":6}]},{"StartTime":146897.0,"Objects":[{"StartTime":146897.0,"EndTime":147012.0,"Column":4},{"StartTime":146897.0,"EndTime":147012.0,"Column":5},{"StartTime":146897.0,"EndTime":147012.0,"Column":0}]},{"StartTime":147127.0,"Objects":[{"StartTime":147127.0,"EndTime":147242.0,"Column":6},{"StartTime":147127.0,"EndTime":147242.0,"Column":3}]},{"StartTime":147358.0,"Objects":[{"StartTime":147358.0,"EndTime":147473.0,"Column":1}]},{"StartTime":147589.0,"Objects":[{"StartTime":147589.0,"EndTime":147704.0,"Column":5}]},{"StartTime":147820.0,"Objects":[{"StartTime":147820.0,"EndTime":147935.0,"Column":3}]},{"StartTime":148050.0,"Objects":[{"StartTime":148050.0,"EndTime":148165.0,"Column":4}]},{"StartTime":148281.0,"Objects":[{"StartTime":148281.0,"EndTime":148281.0,"Column":3},{"StartTime":148281.0,"EndTime":148281.0,"Column":0}]},{"StartTime":148397.0,"Objects":[{"StartTime":148397.0,"EndTime":148397.0,"Column":2},{"StartTime":148397.0,"EndTime":148397.0,"Column":4}]},{"StartTime":148512.0,"Objects":[{"StartTime":148512.0,"EndTime":148512.0,"Column":5},{"StartTime":148512.0,"EndTime":148512.0,"Column":6}]},{"StartTime":148627.0,"Objects":[{"StartTime":148627.0,"EndTime":148627.0,"Column":2},{"StartTime":148627.0,"EndTime":148627.0,"Column":3}]},{"StartTime":148743.0,"Objects":[{"StartTime":148743.0,"EndTime":148743.0,"Column":0}]},{"StartTime":148858.0,"Objects":[{"StartTime":148858.0,"EndTime":148858.0,"Column":1},{"StartTime":148858.0,"EndTime":148858.0,"Column":5},{"StartTime":148858.0,"EndTime":148858.0,"Column":4}]},{"StartTime":148916.0,"Objects":[{"StartTime":148916.0,"EndTime":148916.0,"Column":3}]},{"StartTime":148974.0,"Objects":[{"StartTime":148974.0,"EndTime":148974.0,"Column":1}]},{"StartTime":149089.0,"Objects":[{"StartTime":149089.0,"EndTime":149089.0,"Column":3},{"StartTime":149089.0,"EndTime":149089.0,"Column":6}]},{"StartTime":149204.0,"Objects":[{"StartTime":149204.0,"EndTime":149204.0,"Column":1}]},{"StartTime":149320.0,"Objects":[{"StartTime":149320.0,"EndTime":149320.0,"Column":2},{"StartTime":149320.0,"EndTime":149320.0,"Column":3}]},{"StartTime":149435.0,"Objects":[{"StartTime":149435.0,"EndTime":149435.0,"Column":4},{"StartTime":149435.0,"EndTime":149435.0,"Column":5}]},{"StartTime":149551.0,"Objects":[{"StartTime":149551.0,"EndTime":149551.0,"Column":6},{"StartTime":149551.0,"EndTime":149551.0,"Column":0}]},{"StartTime":149666.0,"Objects":[{"StartTime":149666.0,"EndTime":150358.0,"Column":2}]},{"StartTime":150589.0,"Objects":[{"StartTime":150589.0,"EndTime":151281.0,"Column":3},{"StartTime":150589.0,"EndTime":151281.0,"Column":6}]},{"StartTime":151512.0,"Objects":[{"StartTime":151512.0,"EndTime":152204.0,"Column":1},{"StartTime":151512.0,"EndTime":152204.0,"Column":4}]},{"StartTime":152320.0,"Objects":[{"StartTime":152320.0,"EndTime":152320.0,"Column":0},{"StartTime":152320.0,"EndTime":152320.0,"Column":2}]},{"StartTime":152377.0,"Objects":[{"StartTime":152377.0,"EndTime":152377.0,"Column":4}]},{"StartTime":152435.0,"Objects":[{"StartTime":152435.0,"EndTime":152435.0,"Column":0}]},{"StartTime":152551.0,"Objects":[{"StartTime":152551.0,"EndTime":152551.0,"Column":2},{"StartTime":152551.0,"EndTime":152551.0,"Column":3},{"StartTime":152551.0,"EndTime":152551.0,"Column":5}]},{"StartTime":152666.0,"Objects":[{"StartTime":152666.0,"EndTime":152666.0,"Column":4},{"StartTime":152666.0,"EndTime":152666.0,"Column":6}]},{"StartTime":152781.0,"Objects":[{"StartTime":152781.0,"EndTime":152781.0,"Column":2}]},{"StartTime":152897.0,"Objects":[{"StartTime":152897.0,"EndTime":152897.0,"Column":3}]},{"StartTime":153012.0,"Objects":[{"StartTime":153012.0,"EndTime":153012.0,"Column":5},{"StartTime":153012.0,"EndTime":153012.0,"Column":4},{"StartTime":153012.0,"EndTime":153012.0,"Column":1}]},{"StartTime":153128.0,"Objects":[{"StartTime":153128.0,"EndTime":153128.0,"Column":6},{"StartTime":153128.0,"EndTime":153128.0,"Column":0}]},{"StartTime":153243.0,"Objects":[{"StartTime":153243.0,"EndTime":153243.0,"Column":3}]},{"StartTime":153358.0,"Objects":[{"StartTime":153358.0,"EndTime":154050.0,"Column":1},{"StartTime":153358.0,"EndTime":154050.0,"Column":6}]},{"StartTime":154281.0,"Objects":[{"StartTime":154281.0,"EndTime":154973.0,"Column":5}]},{"StartTime":155204.0,"Objects":[{"StartTime":155204.0,"EndTime":155896.0,"Column":2}]},{"StartTime":156127.0,"Objects":[{"StartTime":156127.0,"EndTime":156127.0,"Column":6},{"StartTime":156127.0,"EndTime":156127.0,"Column":0}]},{"StartTime":156185.0,"Objects":[{"StartTime":156185.0,"EndTime":156185.0,"Column":3}]},{"StartTime":156243.0,"Objects":[{"StartTime":156243.0,"EndTime":156243.0,"Column":6}]},{"StartTime":156358.0,"Objects":[{"StartTime":156358.0,"EndTime":156358.0,"Column":4},{"StartTime":156358.0,"EndTime":156358.0,"Column":5}]},{"StartTime":156474.0,"Objects":[{"StartTime":156474.0,"EndTime":156474.0,"Column":6},{"StartTime":156474.0,"EndTime":156474.0,"Column":0}]},{"StartTime":156531.0,"Objects":[{"StartTime":156531.0,"EndTime":156531.0,"Column":5}]},{"StartTime":156589.0,"Objects":[{"StartTime":156589.0,"EndTime":156589.0,"Column":3}]},{"StartTime":156704.0,"Objects":[{"StartTime":156704.0,"EndTime":156704.0,"Column":5},{"StartTime":156704.0,"EndTime":156704.0,"Column":6},{"StartTime":156704.0,"EndTime":156704.0,"Column":0}]},{"StartTime":156820.0,"Objects":[{"StartTime":156820.0,"EndTime":156820.0,"Column":4},{"StartTime":156820.0,"EndTime":156820.0,"Column":1}]},{"StartTime":156935.0,"Objects":[{"StartTime":156935.0,"EndTime":156935.0,"Column":6},{"StartTime":156935.0,"EndTime":156935.0,"Column":0}]},{"StartTime":157051.0,"Objects":[{"StartTime":157051.0,"EndTime":157743.0,"Column":3},{"StartTime":157051.0,"EndTime":157743.0,"Column":4},{"StartTime":157051.0,"EndTime":157743.0,"Column":5}]},{"StartTime":157974.0,"Objects":[{"StartTime":157974.0,"EndTime":158666.0,"Column":1},{"StartTime":157974.0,"EndTime":158666.0,"Column":6}]},{"StartTime":158897.0,"Objects":[{"StartTime":158897.0,"EndTime":159589.0,"Column":2}]},{"StartTime":159704.0,"Objects":[{"StartTime":159704.0,"EndTime":159704.0,"Column":5},{"StartTime":159704.0,"EndTime":159704.0,"Column":6},{"StartTime":159704.0,"EndTime":159704.0,"Column":0}]},{"StartTime":159762.0,"Objects":[{"StartTime":159762.0,"EndTime":159762.0,"Column":4}]},{"StartTime":159820.0,"Objects":[{"StartTime":159820.0,"EndTime":159820.0,"Column":5}]},{"StartTime":159935.0,"Objects":[{"StartTime":159935.0,"EndTime":159935.0,"Column":6},{"StartTime":159935.0,"EndTime":159935.0,"Column":0}]},{"StartTime":160051.0,"Objects":[{"StartTime":160051.0,"EndTime":160051.0,"Column":5},{"StartTime":160051.0,"EndTime":160051.0,"Column":1}]},{"StartTime":160166.0,"Objects":[{"StartTime":160166.0,"EndTime":160166.0,"Column":4},{"StartTime":160166.0,"EndTime":160166.0,"Column":6}]},{"StartTime":160281.0,"Objects":[{"StartTime":160281.0,"EndTime":160281.0,"Column":5},{"StartTime":160281.0,"EndTime":160281.0,"Column":0}]},{"StartTime":160397.0,"Objects":[{"StartTime":160397.0,"EndTime":160397.0,"Column":2},{"StartTime":160397.0,"EndTime":160397.0,"Column":3}]},{"StartTime":160513.0,"Objects":[{"StartTime":160513.0,"EndTime":160513.0,"Column":1},{"StartTime":160513.0,"EndTime":160513.0,"Column":4}]},{"StartTime":160627.0,"Objects":[{"StartTime":160627.0,"EndTime":160627.0,"Column":2},{"StartTime":160627.0,"EndTime":160627.0,"Column":3}]},{"StartTime":160743.0,"Objects":[{"StartTime":160743.0,"EndTime":160858.0,"Column":4},{"StartTime":160743.0,"EndTime":160858.0,"Column":0}]},{"StartTime":160974.0,"Objects":[{"StartTime":160974.0,"EndTime":161089.0,"Column":2}]},{"StartTime":161204.0,"Objects":[{"StartTime":161204.0,"EndTime":161319.0,"Column":4}]},{"StartTime":161435.0,"Objects":[{"StartTime":161435.0,"EndTime":161550.0,"Column":3}]},{"StartTime":161666.0,"Objects":[{"StartTime":161666.0,"EndTime":161781.0,"Column":4}]},{"StartTime":161897.0,"Objects":[{"StartTime":161897.0,"EndTime":162012.0,"Column":5},{"StartTime":161897.0,"EndTime":162012.0,"Column":1},{"StartTime":161897.0,"EndTime":162012.0,"Column":3}]},{"StartTime":162127.0,"Objects":[{"StartTime":162127.0,"EndTime":162242.0,"Column":4},{"StartTime":162127.0,"EndTime":162242.0,"Column":6}]},{"StartTime":162358.0,"Objects":[{"StartTime":162358.0,"EndTime":162473.0,"Column":5},{"StartTime":162358.0,"EndTime":162473.0,"Column":2}]},{"StartTime":162589.0,"Objects":[{"StartTime":162589.0,"EndTime":162704.0,"Column":4}]},{"StartTime":162820.0,"Objects":[{"StartTime":162820.0,"EndTime":162935.0,"Column":0}]},{"StartTime":163051.0,"Objects":[{"StartTime":163051.0,"EndTime":163166.0,"Column":2},{"StartTime":163051.0,"EndTime":163166.0,"Column":6}]},{"StartTime":163281.0,"Objects":[{"StartTime":163281.0,"EndTime":163396.0,"Column":4}]},{"StartTime":163512.0,"Objects":[{"StartTime":163512.0,"EndTime":163627.0,"Column":5}]},{"StartTime":163743.0,"Objects":[{"StartTime":163743.0,"EndTime":163858.0,"Column":1},{"StartTime":163743.0,"EndTime":163858.0,"Column":4}]},{"StartTime":163974.0,"Objects":[{"StartTime":163974.0,"EndTime":164089.0,"Column":3}]},{"StartTime":164205.0,"Objects":[{"StartTime":164205.0,"EndTime":164320.0,"Column":6}]},{"StartTime":164435.0,"Objects":[{"StartTime":164435.0,"EndTime":164550.0,"Column":5}]},{"StartTime":164666.0,"Objects":[{"StartTime":164666.0,"EndTime":164781.0,"Column":1}]},{"StartTime":164897.0,"Objects":[{"StartTime":164897.0,"EndTime":165012.0,"Column":2},{"StartTime":164897.0,"EndTime":165012.0,"Column":6}]},{"StartTime":165127.0,"Objects":[{"StartTime":165127.0,"EndTime":165127.0,"Column":0},{"StartTime":165127.0,"EndTime":165127.0,"Column":1}]},{"StartTime":165243.0,"Objects":[{"StartTime":165243.0,"EndTime":165243.0,"Column":6},{"StartTime":165243.0,"EndTime":165243.0,"Column":2}]},{"StartTime":165301.0,"Objects":[{"StartTime":165301.0,"EndTime":165301.0,"Column":4}]},{"StartTime":165358.0,"Objects":[{"StartTime":165358.0,"EndTime":165473.0,"Column":6}]},{"StartTime":165589.0,"Objects":[{"StartTime":165589.0,"EndTime":165589.0,"Column":4},{"StartTime":165589.0,"EndTime":165589.0,"Column":5},{"StartTime":165589.0,"EndTime":165589.0,"Column":0}]},{"StartTime":165704.0,"Objects":[{"StartTime":165704.0,"EndTime":165704.0,"Column":6},{"StartTime":165704.0,"EndTime":165704.0,"Column":1}]},{"StartTime":165820.0,"Objects":[{"StartTime":165820.0,"EndTime":165820.0,"Column":4},{"StartTime":165820.0,"EndTime":165820.0,"Column":5}]},{"StartTime":165877.0,"Objects":[{"StartTime":165877.0,"EndTime":165877.0,"Column":3}]},{"StartTime":165935.0,"Objects":[{"StartTime":165935.0,"EndTime":165935.0,"Column":6}]},{"StartTime":165993.0,"Objects":[{"StartTime":165993.0,"EndTime":165993.0,"Column":2}]},{"StartTime":166050.0,"Objects":[{"StartTime":166050.0,"EndTime":166050.0,"Column":0}]},{"StartTime":166108.0,"Objects":[{"StartTime":166108.0,"EndTime":166108.0,"Column":2}]},{"StartTime":166166.0,"Objects":[{"StartTime":166166.0,"EndTime":166166.0,"Column":1}]},{"StartTime":166224.0,"Objects":[{"StartTime":166224.0,"EndTime":166224.0,"Column":4}]},{"StartTime":166281.0,"Objects":[{"StartTime":166281.0,"EndTime":166511.0,"Column":2},{"StartTime":166281.0,"EndTime":166511.0,"Column":1}]},{"StartTime":166627.0,"Objects":[{"StartTime":166627.0,"EndTime":166627.0,"Column":3},{"StartTime":166627.0,"EndTime":166627.0,"Column":6}]},{"StartTime":166743.0,"Objects":[{"StartTime":166743.0,"EndTime":166973.0,"Column":5},{"StartTime":166743.0,"EndTime":166973.0,"Column":1}]},{"StartTime":167089.0,"Objects":[{"StartTime":167089.0,"EndTime":167089.0,"Column":2},{"StartTime":167089.0,"EndTime":167089.0,"Column":0}]},{"StartTime":167204.0,"Objects":[{"StartTime":167204.0,"EndTime":167319.0,"Column":3},{"StartTime":167204.0,"EndTime":167319.0,"Column":1}]},{"StartTime":167435.0,"Objects":[{"StartTime":167435.0,"EndTime":167608.0,"Column":2},{"StartTime":167435.0,"EndTime":167608.0,"Column":5}]},{"StartTime":167666.0,"Objects":[{"StartTime":167666.0,"EndTime":167781.0,"Column":1},{"StartTime":167666.0,"EndTime":167781.0,"Column":6}]},{"StartTime":167897.0,"Objects":[{"StartTime":167897.0,"EndTime":168012.0,"Column":4},{"StartTime":167897.0,"EndTime":168012.0,"Column":2}]},{"StartTime":168127.0,"Objects":[{"StartTime":168127.0,"EndTime":168357.0,"Column":5},{"StartTime":168127.0,"EndTime":168357.0,"Column":1}]},{"StartTime":168474.0,"Objects":[{"StartTime":168474.0,"EndTime":168704.0,"Column":3}]},{"StartTime":168820.0,"Objects":[{"StartTime":168820.0,"EndTime":168935.0,"Column":0},{"StartTime":168820.0,"EndTime":168935.0,"Column":2}]},{"StartTime":169051.0,"Objects":[{"StartTime":169051.0,"EndTime":169166.0,"Column":1}]},{"StartTime":169281.0,"Objects":[{"StartTime":169281.0,"EndTime":169396.0,"Column":3},{"StartTime":169281.0,"EndTime":169396.0,"Column":6},{"StartTime":169281.0,"EndTime":169396.0,"Column":0}]},{"StartTime":169512.0,"Objects":[{"StartTime":169512.0,"EndTime":169627.0,"Column":5}]},{"StartTime":169743.0,"Objects":[{"StartTime":169743.0,"EndTime":169743.0,"Column":2},{"StartTime":169743.0,"EndTime":169743.0,"Column":3},{"StartTime":169743.0,"EndTime":169743.0,"Column":4}]},{"StartTime":169800.0,"Objects":[{"StartTime":169800.0,"EndTime":169800.0,"Column":5}]},{"StartTime":169858.0,"Objects":[{"StartTime":169858.0,"EndTime":169858.0,"Column":2}]},{"StartTime":169916.0,"Objects":[{"StartTime":169916.0,"EndTime":169916.0,"Column":3}]},{"StartTime":169974.0,"Objects":[{"StartTime":169974.0,"EndTime":170204.0,"Column":2},{"StartTime":169974.0,"EndTime":170204.0,"Column":6}]},{"StartTime":170320.0,"Objects":[{"StartTime":170320.0,"EndTime":170320.0,"Column":0}]},{"StartTime":170435.0,"Objects":[{"StartTime":170435.0,"EndTime":170665.0,"Column":5}]},{"StartTime":170781.0,"Objects":[{"StartTime":170781.0,"EndTime":170781.0,"Column":1}]},{"StartTime":170897.0,"Objects":[{"StartTime":170897.0,"EndTime":171012.0,"Column":5}]},{"StartTime":171127.0,"Objects":[{"StartTime":171127.0,"EndTime":171300.0,"Column":6},{"StartTime":171127.0,"EndTime":171300.0,"Column":1},{"StartTime":171127.0,"EndTime":171300.0,"Column":2}]},{"StartTime":171358.0,"Objects":[{"StartTime":171358.0,"EndTime":171473.0,"Column":4},{"StartTime":171358.0,"EndTime":171473.0,"Column":3}]},{"StartTime":171589.0,"Objects":[{"StartTime":171589.0,"EndTime":171704.0,"Column":0},{"StartTime":171589.0,"EndTime":171704.0,"Column":2}]},{"StartTime":171820.0,"Objects":[{"StartTime":171820.0,"EndTime":172050.0,"Column":3},{"StartTime":171820.0,"EndTime":172050.0,"Column":4}]},{"StartTime":172166.0,"Objects":[{"StartTime":172166.0,"EndTime":172166.0,"Column":2},{"StartTime":172166.0,"EndTime":172166.0,"Column":6}]},{"StartTime":172281.0,"Objects":[{"StartTime":172281.0,"EndTime":172511.0,"Column":1},{"StartTime":172281.0,"EndTime":172511.0,"Column":0},{"StartTime":172281.0,"EndTime":172511.0,"Column":4}]},{"StartTime":172628.0,"Objects":[{"StartTime":172628.0,"EndTime":172628.0,"Column":3},{"StartTime":172628.0,"EndTime":172628.0,"Column":5}]},{"StartTime":172743.0,"Objects":[{"StartTime":172743.0,"EndTime":172916.0,"Column":0}]},{"StartTime":172974.0,"Objects":[{"StartTime":172974.0,"EndTime":173089.0,"Column":1},{"StartTime":172974.0,"EndTime":173089.0,"Column":3}]},{"StartTime":173204.0,"Objects":[{"StartTime":173204.0,"EndTime":173319.0,"Column":2},{"StartTime":173204.0,"EndTime":173319.0,"Column":4}]},{"StartTime":173435.0,"Objects":[{"StartTime":173435.0,"EndTime":173550.0,"Column":5},{"StartTime":173435.0,"EndTime":173550.0,"Column":1},{"StartTime":173435.0,"EndTime":173550.0,"Column":6}]},{"StartTime":173666.0,"Objects":[{"StartTime":173666.0,"EndTime":173896.0,"Column":4},{"StartTime":173666.0,"EndTime":173896.0,"Column":0}]},{"StartTime":174012.0,"Objects":[{"StartTime":174012.0,"EndTime":174012.0,"Column":2}]},{"StartTime":174127.0,"Objects":[{"StartTime":174127.0,"EndTime":174357.0,"Column":4},{"StartTime":174127.0,"EndTime":174357.0,"Column":5}]},{"StartTime":174474.0,"Objects":[{"StartTime":174474.0,"EndTime":174474.0,"Column":6},{"StartTime":174474.0,"EndTime":174474.0,"Column":2}]},{"StartTime":174589.0,"Objects":[{"StartTime":174589.0,"EndTime":174819.0,"Column":5},{"StartTime":174589.0,"EndTime":174819.0,"Column":1},{"StartTime":174589.0,"EndTime":174819.0,"Column":3}]},{"StartTime":174935.0,"Objects":[{"StartTime":174935.0,"EndTime":174935.0,"Column":4}]},{"StartTime":175051.0,"Objects":[{"StartTime":175051.0,"EndTime":175166.0,"Column":3},{"StartTime":175051.0,"EndTime":175166.0,"Column":2},{"StartTime":175051.0,"EndTime":175166.0,"Column":1}]},{"StartTime":175281.0,"Objects":[{"StartTime":175281.0,"EndTime":175396.0,"Column":5},{"StartTime":175281.0,"EndTime":175396.0,"Column":6}]},{"StartTime":175512.0,"Objects":[{"StartTime":175512.0,"EndTime":175742.0,"Column":4}]},{"StartTime":175858.0,"Objects":[{"StartTime":175858.0,"EndTime":175858.0,"Column":2}]},{"StartTime":175974.0,"Objects":[{"StartTime":175974.0,"EndTime":176204.0,"Column":4},{"StartTime":175974.0,"EndTime":176204.0,"Column":5}]},{"StartTime":176320.0,"Objects":[{"StartTime":176320.0,"EndTime":176320.0,"Column":3},{"StartTime":176320.0,"EndTime":176320.0,"Column":1},{"StartTime":176320.0,"EndTime":176320.0,"Column":6}]},{"StartTime":176435.0,"Objects":[{"StartTime":176435.0,"EndTime":176665.0,"Column":0},{"StartTime":176435.0,"EndTime":176665.0,"Column":5},{"StartTime":176435.0,"EndTime":176665.0,"Column":4}]},{"StartTime":176781.0,"Objects":[{"StartTime":176781.0,"EndTime":176781.0,"Column":2}]},{"StartTime":176897.0,"Objects":[{"StartTime":176897.0,"EndTime":177012.0,"Column":5}]},{"StartTime":177127.0,"Objects":[{"StartTime":177127.0,"EndTime":177242.0,"Column":4},{"StartTime":177127.0,"EndTime":177242.0,"Column":3}]},{"StartTime":177358.0,"Objects":[{"StartTime":177358.0,"EndTime":177358.0,"Column":2},{"StartTime":177358.0,"EndTime":177358.0,"Column":5},{"StartTime":177358.0,"EndTime":177358.0,"Column":1},{"StartTime":177358.0,"EndTime":177358.0,"Column":6}]},{"StartTime":177474.0,"Objects":[{"StartTime":177474.0,"EndTime":177474.0,"Column":3},{"StartTime":177474.0,"EndTime":177474.0,"Column":4}]},{"StartTime":177589.0,"Objects":[{"StartTime":177589.0,"EndTime":177589.0,"Column":5},{"StartTime":177589.0,"EndTime":177589.0,"Column":6}]},{"StartTime":177704.0,"Objects":[{"StartTime":177704.0,"EndTime":177704.0,"Column":4}]},{"StartTime":177820.0,"Objects":[{"StartTime":177820.0,"EndTime":177820.0,"Column":3},{"StartTime":177820.0,"EndTime":177820.0,"Column":0}]},{"StartTime":177935.0,"Objects":[{"StartTime":177935.0,"EndTime":177935.0,"Column":2}]},{"StartTime":178051.0,"Objects":[{"StartTime":178051.0,"EndTime":178051.0,"Column":1},{"StartTime":178051.0,"EndTime":178051.0,"Column":3},{"StartTime":178051.0,"EndTime":178051.0,"Column":4}]},{"StartTime":178166.0,"Objects":[{"StartTime":178166.0,"EndTime":178166.0,"Column":2},{"StartTime":178166.0,"EndTime":178166.0,"Column":0},{"StartTime":178166.0,"EndTime":178166.0,"Column":6}]},{"StartTime":178281.0,"Objects":[{"StartTime":178281.0,"EndTime":178396.0,"Column":3}]},{"StartTime":178512.0,"Objects":[{"StartTime":178512.0,"EndTime":178627.0,"Column":4},{"StartTime":178512.0,"EndTime":178627.0,"Column":0}]},{"StartTime":178743.0,"Objects":[{"StartTime":178743.0,"EndTime":178858.0,"Column":5}]},{"StartTime":178974.0,"Objects":[{"StartTime":178974.0,"EndTime":179089.0,"Column":1},{"StartTime":178974.0,"EndTime":179089.0,"Column":6}]},{"StartTime":179204.0,"Objects":[{"StartTime":179204.0,"EndTime":179319.0,"Column":5}]},{"StartTime":179435.0,"Objects":[{"StartTime":179435.0,"EndTime":179550.0,"Column":4},{"StartTime":179435.0,"EndTime":179550.0,"Column":1},{"StartTime":179435.0,"EndTime":179550.0,"Column":6}]},{"StartTime":179666.0,"Objects":[{"StartTime":179666.0,"EndTime":179666.0,"Column":5},{"StartTime":179666.0,"EndTime":179666.0,"Column":0},{"StartTime":179666.0,"EndTime":179666.0,"Column":2}]},{"StartTime":179781.0,"Objects":[{"StartTime":179781.0,"EndTime":179781.0,"Column":6},{"StartTime":179781.0,"EndTime":179781.0,"Column":1},{"StartTime":179781.0,"EndTime":179781.0,"Column":3}]},{"StartTime":179839.0,"Objects":[{"StartTime":179839.0,"EndTime":179839.0,"Column":4}]},{"StartTime":179897.0,"Objects":[{"StartTime":179897.0,"EndTime":179897.0,"Column":6}]},{"StartTime":180012.0,"Objects":[{"StartTime":180012.0,"EndTime":180012.0,"Column":5},{"StartTime":180012.0,"EndTime":180012.0,"Column":0}]},{"StartTime":180127.0,"Objects":[{"StartTime":180127.0,"EndTime":180127.0,"Column":6}]},{"StartTime":180243.0,"Objects":[{"StartTime":180243.0,"EndTime":180243.0,"Column":4},{"StartTime":180243.0,"EndTime":180243.0,"Column":5}]},{"StartTime":180301.0,"Objects":[{"StartTime":180301.0,"EndTime":180301.0,"Column":3}]},{"StartTime":180358.0,"Objects":[{"StartTime":180358.0,"EndTime":180473.0,"Column":5},{"StartTime":180358.0,"EndTime":180473.0,"Column":6}]},{"StartTime":180589.0,"Objects":[{"StartTime":180589.0,"EndTime":180589.0,"Column":2}]},{"StartTime":180704.0,"Objects":[{"StartTime":180704.0,"EndTime":180704.0,"Column":1},{"StartTime":180704.0,"EndTime":180704.0,"Column":3}]},{"StartTime":180820.0,"Objects":[{"StartTime":180820.0,"EndTime":180820.0,"Column":4},{"StartTime":180820.0,"EndTime":180820.0,"Column":5}]},{"StartTime":180935.0,"Objects":[{"StartTime":180935.0,"EndTime":180935.0,"Column":3},{"StartTime":180935.0,"EndTime":180935.0,"Column":6}]},{"StartTime":181051.0,"Objects":[{"StartTime":181051.0,"EndTime":181281.0,"Column":5}]},{"StartTime":181397.0,"Objects":[{"StartTime":181397.0,"EndTime":181397.0,"Column":1}]},{"StartTime":181512.0,"Objects":[{"StartTime":181512.0,"EndTime":181742.0,"Column":6}]},{"StartTime":181858.0,"Objects":[{"StartTime":181858.0,"EndTime":181858.0,"Column":0}]},{"StartTime":181974.0,"Objects":[{"StartTime":181974.0,"EndTime":182089.0,"Column":6}]},{"StartTime":182204.0,"Objects":[{"StartTime":182204.0,"EndTime":182377.0,"Column":0}]},{"StartTime":182435.0,"Objects":[{"StartTime":182435.0,"EndTime":182550.0,"Column":6}]},{"StartTime":182666.0,"Objects":[{"StartTime":182666.0,"EndTime":182666.0,"Column":2},{"StartTime":182666.0,"EndTime":182666.0,"Column":3}]},{"StartTime":182781.0,"Objects":[{"StartTime":182781.0,"EndTime":183011.0,"Column":1}]},{"StartTime":183127.0,"Objects":[{"StartTime":183127.0,"EndTime":183357.0,"Column":0}]},{"StartTime":183474.0,"Objects":[{"StartTime":183474.0,"EndTime":183589.0,"Column":5}]},{"StartTime":183704.0,"Objects":[{"StartTime":183704.0,"EndTime":183704.0,"Column":4}]},{"StartTime":183820.0,"Objects":[{"StartTime":183820.0,"EndTime":184050.0,"Column":0},{"StartTime":183820.0,"EndTime":184050.0,"Column":5}]},{"StartTime":184166.0,"Objects":[{"StartTime":184166.0,"EndTime":184166.0,"Column":1},{"StartTime":184166.0,"EndTime":184166.0,"Column":3}]},{"StartTime":184281.0,"Objects":[{"StartTime":184281.0,"EndTime":184396.0,"Column":4}]},{"StartTime":184512.0,"Objects":[{"StartTime":184512.0,"EndTime":184627.0,"Column":2}]},{"StartTime":184743.0,"Objects":[{"StartTime":184743.0,"EndTime":184973.0,"Column":1}]},{"StartTime":185089.0,"Objects":[{"StartTime":185089.0,"EndTime":185089.0,"Column":5}]},{"StartTime":185204.0,"Objects":[{"StartTime":185204.0,"EndTime":185434.0,"Column":3}]},{"StartTime":185551.0,"Objects":[{"StartTime":185551.0,"EndTime":185551.0,"Column":1}]},{"StartTime":185666.0,"Objects":[{"StartTime":185666.0,"EndTime":185781.0,"Column":2}]},{"StartTime":185897.0,"Objects":[{"StartTime":185897.0,"EndTime":186070.0,"Column":4}]},{"StartTime":186127.0,"Objects":[{"StartTime":186127.0,"EndTime":186242.0,"Column":6},{"StartTime":186127.0,"EndTime":186242.0,"Column":1}]},{"StartTime":186358.0,"Objects":[{"StartTime":186358.0,"EndTime":186358.0,"Column":3},{"StartTime":186358.0,"EndTime":186358.0,"Column":4},{"StartTime":186358.0,"EndTime":186358.0,"Column":5}]},{"StartTime":186474.0,"Objects":[{"StartTime":186474.0,"EndTime":186704.0,"Column":0}]},{"StartTime":186820.0,"Objects":[{"StartTime":186820.0,"EndTime":187050.0,"Column":4},{"StartTime":186820.0,"EndTime":187050.0,"Column":5}]},{"StartTime":187166.0,"Objects":[{"StartTime":187166.0,"EndTime":187166.0,"Column":6},{"StartTime":187166.0,"EndTime":187166.0,"Column":1}]},{"StartTime":187281.0,"Objects":[{"StartTime":187281.0,"EndTime":187396.0,"Column":0}]},{"StartTime":187512.0,"Objects":[{"StartTime":187512.0,"EndTime":187742.0,"Column":6}]},{"StartTime":187858.0,"Objects":[{"StartTime":187858.0,"EndTime":187858.0,"Column":0}]},{"StartTime":187974.0,"Objects":[{"StartTime":187974.0,"EndTime":188089.0,"Column":3}]},{"StartTime":188204.0,"Objects":[{"StartTime":188204.0,"EndTime":188319.0,"Column":4}]},{"StartTime":188435.0,"Objects":[{"StartTime":188435.0,"EndTime":188665.0,"Column":6}]},{"StartTime":188781.0,"Objects":[{"StartTime":188781.0,"EndTime":188781.0,"Column":5},{"StartTime":188781.0,"EndTime":188781.0,"Column":1},{"StartTime":188781.0,"EndTime":188781.0,"Column":2}]},{"StartTime":188897.0,"Objects":[{"StartTime":188897.0,"EndTime":189127.0,"Column":0},{"StartTime":188897.0,"EndTime":189127.0,"Column":3},{"StartTime":188897.0,"EndTime":189127.0,"Column":4}]},{"StartTime":189243.0,"Objects":[{"StartTime":189243.0,"EndTime":189243.0,"Column":1},{"StartTime":189243.0,"EndTime":189243.0,"Column":6}]},{"StartTime":189358.0,"Objects":[{"StartTime":189358.0,"EndTime":189473.0,"Column":0}]},{"StartTime":189589.0,"Objects":[{"StartTime":189589.0,"EndTime":189819.0,"Column":6},{"StartTime":189589.0,"EndTime":189819.0,"Column":4}]},{"StartTime":189935.0,"Objects":[{"StartTime":189935.0,"EndTime":189935.0,"Column":3}]},{"StartTime":190051.0,"Objects":[{"StartTime":190051.0,"EndTime":190166.0,"Column":2},{"StartTime":190051.0,"EndTime":190166.0,"Column":5}]},{"StartTime":190281.0,"Objects":[{"StartTime":190281.0,"EndTime":190511.0,"Column":6}]},{"StartTime":190627.0,"Objects":[{"StartTime":190627.0,"EndTime":190627.0,"Column":5}]},{"StartTime":190743.0,"Objects":[{"StartTime":190743.0,"EndTime":190858.0,"Column":2},{"StartTime":190743.0,"EndTime":190858.0,"Column":3}]},{"StartTime":190974.0,"Objects":[{"StartTime":190974.0,"EndTime":191089.0,"Column":6},{"StartTime":190974.0,"EndTime":191089.0,"Column":1}]},{"StartTime":191204.0,"Objects":[{"StartTime":191204.0,"EndTime":191434.0,"Column":2},{"StartTime":191204.0,"EndTime":191434.0,"Column":5}]},{"StartTime":191551.0,"Objects":[{"StartTime":191551.0,"EndTime":191551.0,"Column":1}]},{"StartTime":191666.0,"Objects":[{"StartTime":191666.0,"EndTime":191781.0,"Column":4},{"StartTime":191666.0,"EndTime":191781.0,"Column":2}]},{"StartTime":191897.0,"Objects":[{"StartTime":191897.0,"EndTime":192012.0,"Column":3}]},{"StartTime":192127.0,"Objects":[{"StartTime":192127.0,"EndTime":192819.0,"Column":5},{"StartTime":192127.0,"EndTime":192819.0,"Column":6}]},{"StartTime":193051.0,"Objects":[{"StartTime":193051.0,"EndTime":193051.0,"Column":5}]},{"StartTime":193974.0,"Objects":[{"StartTime":193974.0,"EndTime":194666.0,"Column":0}]},{"StartTime":194898.0,"Objects":[{"StartTime":194898.0,"EndTime":194898.0,"Column":5},{"StartTime":194898.0,"EndTime":194898.0,"Column":1}]},{"StartTime":195127.0,"Objects":[{"StartTime":195127.0,"EndTime":195127.0,"Column":1},{"StartTime":195127.0,"EndTime":195127.0,"Column":2}]},{"StartTime":195358.0,"Objects":[{"StartTime":195358.0,"EndTime":195358.0,"Column":4},{"StartTime":195358.0,"EndTime":195358.0,"Column":3}]},{"StartTime":195589.0,"Objects":[{"StartTime":195589.0,"EndTime":195704.0,"Column":5}]},{"StartTime":195820.0,"Objects":[{"StartTime":195820.0,"EndTime":195935.0,"Column":2},{"StartTime":195820.0,"EndTime":195935.0,"Column":4},{"StartTime":195820.0,"EndTime":195935.0,"Column":3}]},{"StartTime":196051.0,"Objects":[{"StartTime":196051.0,"EndTime":196166.0,"Column":6}]},{"StartTime":196281.0,"Objects":[{"StartTime":196281.0,"EndTime":196281.0,"Column":4},{"StartTime":196281.0,"EndTime":196281.0,"Column":5}]},{"StartTime":196397.0,"Objects":[{"StartTime":196397.0,"EndTime":196397.0,"Column":6},{"StartTime":196397.0,"EndTime":196397.0,"Column":0}]},{"StartTime":196454.0,"Objects":[{"StartTime":196454.0,"EndTime":196454.0,"Column":4}]},{"StartTime":196512.0,"Objects":[{"StartTime":196512.0,"EndTime":196512.0,"Column":6}]},{"StartTime":196570.0,"Objects":[{"StartTime":196570.0,"EndTime":196570.0,"Column":5}]},{"StartTime":196627.0,"Objects":[{"StartTime":196627.0,"EndTime":196627.0,"Column":6}]},{"StartTime":196685.0,"Objects":[{"StartTime":196685.0,"EndTime":196685.0,"Column":4}]},{"StartTime":196743.0,"Objects":[{"StartTime":196743.0,"EndTime":196743.0,"Column":6}]},{"StartTime":196801.0,"Objects":[{"StartTime":196801.0,"EndTime":196801.0,"Column":5}]},{"StartTime":196858.0,"Objects":[{"StartTime":196858.0,"EndTime":196858.0,"Column":1}]},{"StartTime":196916.0,"Objects":[{"StartTime":196916.0,"EndTime":196916.0,"Column":4}]},{"StartTime":196974.0,"Objects":[{"StartTime":196974.0,"EndTime":196974.0,"Column":1}]},{"StartTime":197031.0,"Objects":[{"StartTime":197031.0,"EndTime":197031.0,"Column":3}]},{"StartTime":197089.0,"Objects":[{"StartTime":197089.0,"EndTime":197089.0,"Column":1}]},{"StartTime":197147.0,"Objects":[{"StartTime":197147.0,"EndTime":197147.0,"Column":2}]},{"StartTime":197204.0,"Objects":[{"StartTime":197204.0,"EndTime":197204.0,"Column":5}]},{"StartTime":197262.0,"Objects":[{"StartTime":197262.0,"EndTime":197262.0,"Column":1}]},{"StartTime":197320.0,"Objects":[{"StartTime":197320.0,"EndTime":197320.0,"Column":4}]},{"StartTime":197377.0,"Objects":[{"StartTime":197377.0,"EndTime":197377.0,"Column":1}]},{"StartTime":197435.0,"Objects":[{"StartTime":197435.0,"EndTime":197435.0,"Column":2}]},{"StartTime":197493.0,"Objects":[{"StartTime":197493.0,"EndTime":197493.0,"Column":3}]},{"StartTime":197551.0,"Objects":[{"StartTime":197551.0,"EndTime":197551.0,"Column":5}]},{"StartTime":197608.0,"Objects":[{"StartTime":197608.0,"EndTime":197608.0,"Column":4}]},{"StartTime":197666.0,"Objects":[{"StartTime":197666.0,"EndTime":197896.0,"Column":3},{"StartTime":197666.0,"EndTime":197896.0,"Column":2}]},{"StartTime":198012.0,"Objects":[{"StartTime":198012.0,"EndTime":198012.0,"Column":4}]},{"StartTime":198127.0,"Objects":[{"StartTime":198127.0,"EndTime":198357.0,"Column":2}]},{"StartTime":198473.0,"Objects":[{"StartTime":198473.0,"EndTime":198473.0,"Column":4},{"StartTime":198473.0,"EndTime":198473.0,"Column":5}]},{"StartTime":198589.0,"Objects":[{"StartTime":198589.0,"EndTime":198704.0,"Column":2}]},{"StartTime":198820.0,"Objects":[{"StartTime":198820.0,"EndTime":198820.0,"Column":0},{"StartTime":198820.0,"EndTime":198820.0,"Column":1},{"StartTime":198820.0,"EndTime":198820.0,"Column":3}]},{"StartTime":199051.0,"Objects":[{"StartTime":199051.0,"EndTime":199166.0,"Column":6}]},{"StartTime":199281.0,"Objects":[{"StartTime":199281.0,"EndTime":199281.0,"Column":2},{"StartTime":199281.0,"EndTime":199281.0,"Column":3}]},{"StartTime":199396.0,"Objects":[{"StartTime":199396.0,"EndTime":199396.0,"Column":1}]},{"StartTime":199512.0,"Objects":[{"StartTime":199512.0,"EndTime":199742.0,"Column":2},{"StartTime":199512.0,"EndTime":199742.0,"Column":5}]},{"StartTime":199858.0,"Objects":[{"StartTime":199858.0,"EndTime":199858.0,"Column":1},{"StartTime":199858.0,"EndTime":199858.0,"Column":4}]},{"StartTime":199974.0,"Objects":[{"StartTime":199974.0,"EndTime":200089.0,"Column":6}]},{"StartTime":200204.0,"Objects":[{"StartTime":200204.0,"EndTime":200319.0,"Column":3},{"StartTime":200204.0,"EndTime":200319.0,"Column":4}]},{"StartTime":200435.0,"Objects":[{"StartTime":200435.0,"EndTime":200435.0,"Column":1}]},{"StartTime":200551.0,"Objects":[{"StartTime":200551.0,"EndTime":200551.0,"Column":2}]},{"StartTime":200666.0,"Objects":[{"StartTime":200666.0,"EndTime":200781.0,"Column":4},{"StartTime":200666.0,"EndTime":200781.0,"Column":1}]},{"StartTime":200897.0,"Objects":[{"StartTime":200897.0,"EndTime":201012.0,"Column":6},{"StartTime":200897.0,"EndTime":201012.0,"Column":3}]},{"StartTime":201127.0,"Objects":[{"StartTime":201127.0,"EndTime":201242.0,"Column":0},{"StartTime":201127.0,"EndTime":201242.0,"Column":5},{"StartTime":201127.0,"EndTime":201242.0,"Column":2}]},{"StartTime":201358.0,"Objects":[{"StartTime":201358.0,"EndTime":201588.0,"Column":6}]},{"StartTime":201704.0,"Objects":[{"StartTime":201704.0,"EndTime":201704.0,"Column":3},{"StartTime":201704.0,"EndTime":201704.0,"Column":1}]},{"StartTime":201820.0,"Objects":[{"StartTime":201820.0,"EndTime":201935.0,"Column":6},{"StartTime":201820.0,"EndTime":201935.0,"Column":5}]},{"StartTime":202051.0,"Objects":[{"StartTime":202051.0,"EndTime":202166.0,"Column":2},{"StartTime":202051.0,"EndTime":202166.0,"Column":4}]},{"StartTime":202281.0,"Objects":[{"StartTime":202281.0,"EndTime":202281.0,"Column":5}]},{"StartTime":202397.0,"Objects":[{"StartTime":202397.0,"EndTime":202397.0,"Column":6},{"StartTime":202397.0,"EndTime":202397.0,"Column":3}]},{"StartTime":202512.0,"Objects":[{"StartTime":202512.0,"EndTime":202627.0,"Column":0},{"StartTime":202512.0,"EndTime":202627.0,"Column":2}]},{"StartTime":202743.0,"Objects":[{"StartTime":202743.0,"EndTime":202973.0,"Column":6},{"StartTime":202743.0,"EndTime":202973.0,"Column":4}]},{"StartTime":203089.0,"Objects":[{"StartTime":203089.0,"EndTime":203089.0,"Column":3},{"StartTime":203089.0,"EndTime":203089.0,"Column":2}]},{"StartTime":203204.0,"Objects":[{"StartTime":203204.0,"EndTime":203319.0,"Column":5}]},{"StartTime":203435.0,"Objects":[{"StartTime":203435.0,"EndTime":203550.0,"Column":6},{"StartTime":203435.0,"EndTime":203550.0,"Column":0},{"StartTime":203435.0,"EndTime":203550.0,"Column":1}]},{"StartTime":203666.0,"Objects":[{"StartTime":203666.0,"EndTime":203896.0,"Column":4},{"StartTime":203666.0,"EndTime":203896.0,"Column":2}]},{"StartTime":204012.0,"Objects":[{"StartTime":204012.0,"EndTime":204012.0,"Column":1}]},{"StartTime":204127.0,"Objects":[{"StartTime":204127.0,"EndTime":204242.0,"Column":6},{"StartTime":204127.0,"EndTime":204242.0,"Column":3},{"StartTime":204127.0,"EndTime":204242.0,"Column":0}]},{"StartTime":204358.0,"Objects":[{"StartTime":204358.0,"EndTime":204358.0,"Column":4},{"StartTime":204358.0,"EndTime":204358.0,"Column":5}]},{"StartTime":204474.0,"Objects":[{"StartTime":204474.0,"EndTime":204474.0,"Column":2}]},{"StartTime":204589.0,"Objects":[{"StartTime":204589.0,"EndTime":204704.0,"Column":1}]},{"StartTime":204820.0,"Objects":[{"StartTime":204820.0,"EndTime":204820.0,"Column":3},{"StartTime":204820.0,"EndTime":204820.0,"Column":4}]},{"StartTime":204935.0,"Objects":[{"StartTime":204935.0,"EndTime":204935.0,"Column":5},{"StartTime":204935.0,"EndTime":204935.0,"Column":6},{"StartTime":204935.0,"EndTime":204935.0,"Column":2}]},{"StartTime":205051.0,"Objects":[{"StartTime":205051.0,"EndTime":205281.0,"Column":0},{"StartTime":205051.0,"EndTime":205281.0,"Column":3}]},{"StartTime":205397.0,"Objects":[{"StartTime":205397.0,"EndTime":205397.0,"Column":4},{"StartTime":205397.0,"EndTime":205397.0,"Column":6}]},{"StartTime":205512.0,"Objects":[{"StartTime":205512.0,"EndTime":205627.0,"Column":3},{"StartTime":205512.0,"EndTime":205627.0,"Column":1}]},{"StartTime":205743.0,"Objects":[{"StartTime":205743.0,"EndTime":205858.0,"Column":2},{"StartTime":205743.0,"EndTime":205858.0,"Column":5}]},{"StartTime":205974.0,"Objects":[{"StartTime":205974.0,"EndTime":206089.0,"Column":0},{"StartTime":205974.0,"EndTime":206089.0,"Column":3}]},{"StartTime":206204.0,"Objects":[{"StartTime":206204.0,"EndTime":206204.0,"Column":2},{"StartTime":206204.0,"EndTime":206204.0,"Column":4}]},{"StartTime":206320.0,"Objects":[{"StartTime":206320.0,"EndTime":206320.0,"Column":3},{"StartTime":206320.0,"EndTime":206320.0,"Column":0}]},{"StartTime":206435.0,"Objects":[{"StartTime":206435.0,"EndTime":206665.0,"Column":4}]},{"StartTime":206781.0,"Objects":[{"StartTime":206781.0,"EndTime":206781.0,"Column":5},{"StartTime":206781.0,"EndTime":206781.0,"Column":0}]},{"StartTime":206897.0,"Objects":[{"StartTime":206897.0,"EndTime":207127.0,"Column":1}]},{"StartTime":207358.0,"Objects":[{"StartTime":207358.0,"EndTime":207473.0,"Column":6}]},{"StartTime":207589.0,"Objects":[{"StartTime":207589.0,"EndTime":207704.0,"Column":2},{"StartTime":207589.0,"EndTime":207704.0,"Column":3}]},{"StartTime":207820.0,"Objects":[{"StartTime":207820.0,"EndTime":208050.0,"Column":1},{"StartTime":207820.0,"EndTime":208050.0,"Column":0}]},{"StartTime":208166.0,"Objects":[{"StartTime":208166.0,"EndTime":208166.0,"Column":3},{"StartTime":208166.0,"EndTime":208166.0,"Column":4}]},{"StartTime":208281.0,"Objects":[{"StartTime":208281.0,"EndTime":208396.0,"Column":0},{"StartTime":208281.0,"EndTime":208396.0,"Column":6}]},{"StartTime":208512.0,"Objects":[{"StartTime":208512.0,"EndTime":208627.0,"Column":1},{"StartTime":208512.0,"EndTime":208627.0,"Column":2}]},{"StartTime":208743.0,"Objects":[{"StartTime":208743.0,"EndTime":209204.0,"Column":6},{"StartTime":208743.0,"EndTime":208743.0,"Column":0},{"StartTime":208973.0,"EndTime":208973.0,"Column":0},{"StartTime":209203.0,"EndTime":209203.0,"Column":0}]},{"StartTime":209320.0,"Objects":[{"StartTime":209320.0,"EndTime":209320.0,"Column":4},{"StartTime":209320.0,"EndTime":209320.0,"Column":1},{"StartTime":209320.0,"EndTime":209320.0,"Column":5}]},{"StartTime":209435.0,"Objects":[{"StartTime":209435.0,"EndTime":209550.0,"Column":2},{"StartTime":209435.0,"EndTime":209550.0,"Column":3}]},{"StartTime":209666.0,"Objects":[{"StartTime":209666.0,"EndTime":209781.0,"Column":4},{"StartTime":209666.0,"EndTime":209781.0,"Column":1}]},{"StartTime":209897.0,"Objects":[{"StartTime":209897.0,"EndTime":210012.0,"Column":5},{"StartTime":209897.0,"EndTime":210012.0,"Column":6}]},{"StartTime":210127.0,"Objects":[{"StartTime":210127.0,"EndTime":210127.0,"Column":2},{"StartTime":210127.0,"EndTime":210127.0,"Column":0},{"StartTime":210127.0,"EndTime":210127.0,"Column":3}]},{"StartTime":210243.0,"Objects":[{"StartTime":210243.0,"EndTime":210243.0,"Column":6}]},{"StartTime":210358.0,"Objects":[{"StartTime":210358.0,"EndTime":210358.0,"Column":5},{"StartTime":210358.0,"EndTime":210358.0,"Column":0},{"StartTime":210358.0,"EndTime":210358.0,"Column":1}]},{"StartTime":210589.0,"Objects":[{"StartTime":210589.0,"EndTime":210704.0,"Column":2}]},{"StartTime":210820.0,"Objects":[{"StartTime":210820.0,"EndTime":210820.0,"Column":3},{"StartTime":210820.0,"EndTime":210820.0,"Column":4}]},{"StartTime":210935.0,"Objects":[{"StartTime":210935.0,"EndTime":210935.0,"Column":1},{"StartTime":210935.0,"EndTime":210935.0,"Column":6}]},{"StartTime":211051.0,"Objects":[{"StartTime":211051.0,"EndTime":211166.0,"Column":4},{"StartTime":211051.0,"EndTime":211166.0,"Column":0}]},{"StartTime":211281.0,"Objects":[{"StartTime":211281.0,"EndTime":211281.0,"Column":2},{"StartTime":211281.0,"EndTime":211281.0,"Column":3}]},{"StartTime":211397.0,"Objects":[{"StartTime":211397.0,"EndTime":211397.0,"Column":4},{"StartTime":211397.0,"EndTime":211397.0,"Column":1}]},{"StartTime":211512.0,"Objects":[{"StartTime":211512.0,"EndTime":211742.0,"Column":3},{"StartTime":211512.0,"EndTime":211742.0,"Column":5}]},{"StartTime":211858.0,"Objects":[{"StartTime":211858.0,"EndTime":211858.0,"Column":2},{"StartTime":211858.0,"EndTime":211858.0,"Column":6}]},{"StartTime":211974.0,"Objects":[{"StartTime":211974.0,"EndTime":211974.0,"Column":3},{"StartTime":211974.0,"EndTime":211974.0,"Column":4}]},{"StartTime":212089.0,"Objects":[{"StartTime":212089.0,"EndTime":212089.0,"Column":6}]},{"StartTime":212204.0,"Objects":[{"StartTime":212204.0,"EndTime":212204.0,"Column":3},{"StartTime":212204.0,"EndTime":212204.0,"Column":4},{"StartTime":212204.0,"EndTime":212204.0,"Column":5}]},{"StartTime":212320.0,"Objects":[{"StartTime":212320.0,"EndTime":212320.0,"Column":1},{"StartTime":212320.0,"EndTime":212320.0,"Column":2}]},{"StartTime":212435.0,"Objects":[{"StartTime":212435.0,"EndTime":212665.0,"Column":6},{"StartTime":212435.0,"EndTime":212665.0,"Column":0}]},{"StartTime":212781.0,"Objects":[{"StartTime":212781.0,"EndTime":212781.0,"Column":1}]},{"StartTime":212897.0,"Objects":[{"StartTime":212897.0,"EndTime":213127.0,"Column":2}]},{"StartTime":213243.0,"Objects":[{"StartTime":213243.0,"EndTime":213243.0,"Column":0},{"StartTime":213243.0,"EndTime":213243.0,"Column":1},{"StartTime":213243.0,"EndTime":213243.0,"Column":3}]},{"StartTime":213358.0,"Objects":[{"StartTime":213358.0,"EndTime":213473.0,"Column":6},{"StartTime":213358.0,"EndTime":213473.0,"Column":4}]},{"StartTime":213589.0,"Objects":[{"StartTime":213589.0,"EndTime":213589.0,"Column":1},{"StartTime":213589.0,"EndTime":213589.0,"Column":2}]},{"StartTime":213820.0,"Objects":[{"StartTime":213820.0,"EndTime":213935.0,"Column":4},{"StartTime":213820.0,"EndTime":213935.0,"Column":6}]},{"StartTime":214051.0,"Objects":[{"StartTime":214051.0,"EndTime":214051.0,"Column":0},{"StartTime":214051.0,"EndTime":214051.0,"Column":1}]},{"StartTime":214166.0,"Objects":[{"StartTime":214166.0,"EndTime":214166.0,"Column":3},{"StartTime":214166.0,"EndTime":214166.0,"Column":5}]},{"StartTime":214281.0,"Objects":[{"StartTime":214281.0,"EndTime":214396.0,"Column":2},{"StartTime":214281.0,"EndTime":214396.0,"Column":0}]},{"StartTime":214512.0,"Objects":[{"StartTime":214512.0,"EndTime":214512.0,"Column":1},{"StartTime":214512.0,"EndTime":214512.0,"Column":3}]},{"StartTime":214628.0,"Objects":[{"StartTime":214628.0,"EndTime":214628.0,"Column":4},{"StartTime":214628.0,"EndTime":214628.0,"Column":6}]},{"StartTime":214743.0,"Objects":[{"StartTime":214743.0,"EndTime":214858.0,"Column":5}]},{"StartTime":214974.0,"Objects":[{"StartTime":214974.0,"EndTime":215089.0,"Column":6},{"StartTime":214974.0,"EndTime":215089.0,"Column":3}]},{"StartTime":215204.0,"Objects":[{"StartTime":215204.0,"EndTime":215204.0,"Column":2},{"StartTime":215204.0,"EndTime":215204.0,"Column":5},{"StartTime":215204.0,"EndTime":215204.0,"Column":0}]},{"StartTime":215320.0,"Objects":[{"StartTime":215320.0,"EndTime":215320.0,"Column":4},{"StartTime":215320.0,"EndTime":215320.0,"Column":1}]},{"StartTime":215435.0,"Objects":[{"StartTime":215435.0,"EndTime":215550.0,"Column":0},{"StartTime":215435.0,"EndTime":215550.0,"Column":3}]},{"StartTime":215666.0,"Objects":[{"StartTime":215666.0,"EndTime":215896.0,"Column":1},{"StartTime":215666.0,"EndTime":215896.0,"Column":5},{"StartTime":215666.0,"EndTime":215896.0,"Column":6}]},{"StartTime":216012.0,"Objects":[{"StartTime":216012.0,"EndTime":216012.0,"Column":0},{"StartTime":216012.0,"EndTime":216012.0,"Column":2}]},{"StartTime":216070.0,"Objects":[{"StartTime":216070.0,"EndTime":216070.0,"Column":5}]},{"StartTime":216127.0,"Objects":[{"StartTime":216127.0,"EndTime":216242.0,"Column":0}]},{"StartTime":216358.0,"Objects":[{"StartTime":216358.0,"EndTime":216473.0,"Column":4},{"StartTime":216358.0,"EndTime":216473.0,"Column":5}]},{"StartTime":216589.0,"Objects":[{"StartTime":216589.0,"EndTime":216819.0,"Column":3}]},{"StartTime":216935.0,"Objects":[{"StartTime":216935.0,"EndTime":216935.0,"Column":0}]},{"StartTime":217051.0,"Objects":[{"StartTime":217051.0,"EndTime":217166.0,"Column":2}]},{"StartTime":217281.0,"Objects":[{"StartTime":217281.0,"EndTime":217511.0,"Column":3},{"StartTime":217281.0,"EndTime":217511.0,"Column":5}]},{"StartTime":217627.0,"Objects":[{"StartTime":217627.0,"EndTime":217742.0,"Column":0},{"StartTime":217627.0,"EndTime":217742.0,"Column":4},{"StartTime":217627.0,"EndTime":217742.0,"Column":6}]},{"StartTime":217858.0,"Objects":[{"StartTime":217858.0,"EndTime":217858.0,"Column":1},{"StartTime":217858.0,"EndTime":217858.0,"Column":2}]},{"StartTime":217974.0,"Objects":[{"StartTime":217974.0,"EndTime":218089.0,"Column":0},{"StartTime":217974.0,"EndTime":218089.0,"Column":6}]},{"StartTime":218204.0,"Objects":[{"StartTime":218204.0,"EndTime":218319.0,"Column":5},{"StartTime":218204.0,"EndTime":218319.0,"Column":4}]},{"StartTime":218435.0,"Objects":[{"StartTime":218435.0,"EndTime":218550.0,"Column":1},{"StartTime":218435.0,"EndTime":218550.0,"Column":2},{"StartTime":218435.0,"EndTime":218550.0,"Column":6}]},{"StartTime":218666.0,"Objects":[{"StartTime":218666.0,"EndTime":218781.0,"Column":4},{"StartTime":218666.0,"EndTime":218781.0,"Column":3},{"StartTime":218666.0,"EndTime":218781.0,"Column":5}]},{"StartTime":218897.0,"Objects":[{"StartTime":218897.0,"EndTime":219070.0,"Column":6},{"StartTime":218897.0,"EndTime":219070.0,"Column":0},{"StartTime":218897.0,"EndTime":219070.0,"Column":2}]},{"StartTime":219127.0,"Objects":[{"StartTime":219127.0,"EndTime":219300.0,"Column":1},{"StartTime":219127.0,"EndTime":219300.0,"Column":3}]},{"StartTime":219358.0,"Objects":[{"StartTime":219358.0,"EndTime":219531.0,"Column":0}]},{"StartTime":219589.0,"Objects":[{"StartTime":219589.0,"EndTime":219704.0,"Column":6},{"StartTime":219589.0,"EndTime":219704.0,"Column":3}]},{"StartTime":219820.0,"Objects":[{"StartTime":219820.0,"EndTime":220050.0,"Column":5}]},{"StartTime":220166.0,"Objects":[{"StartTime":220166.0,"EndTime":220166.0,"Column":0},{"StartTime":220166.0,"EndTime":220166.0,"Column":6}]},{"StartTime":220281.0,"Objects":[{"StartTime":220281.0,"EndTime":220396.0,"Column":2},{"StartTime":220281.0,"EndTime":220396.0,"Column":1},{"StartTime":220281.0,"EndTime":220396.0,"Column":4}]},{"StartTime":220512.0,"Objects":[{"StartTime":220512.0,"EndTime":220627.0,"Column":0},{"StartTime":220512.0,"EndTime":220627.0,"Column":5}]},{"StartTime":220743.0,"Objects":[{"StartTime":220743.0,"EndTime":220858.0,"Column":6},{"StartTime":220743.0,"EndTime":220858.0,"Column":2}]},{"StartTime":220974.0,"Objects":[{"StartTime":220974.0,"EndTime":220974.0,"Column":3},{"StartTime":220974.0,"EndTime":220974.0,"Column":4}]},{"StartTime":221089.0,"Objects":[{"StartTime":221089.0,"EndTime":221089.0,"Column":1},{"StartTime":221089.0,"EndTime":221089.0,"Column":6}]},{"StartTime":221204.0,"Objects":[{"StartTime":221204.0,"EndTime":221434.0,"Column":4}]},{"StartTime":221551.0,"Objects":[{"StartTime":221551.0,"EndTime":221551.0,"Column":5},{"StartTime":221551.0,"EndTime":221551.0,"Column":6}]},{"StartTime":221608.0,"Objects":[{"StartTime":221608.0,"EndTime":221608.0,"Column":1}]},{"StartTime":221666.0,"Objects":[{"StartTime":221666.0,"EndTime":221781.0,"Column":4}]},{"StartTime":221897.0,"Objects":[{"StartTime":221897.0,"EndTime":222127.0,"Column":5},{"StartTime":221897.0,"EndTime":222127.0,"Column":2}]},{"StartTime":222243.0,"Objects":[{"StartTime":222243.0,"EndTime":222243.0,"Column":1},{"StartTime":222243.0,"EndTime":222243.0,"Column":3}]},{"StartTime":222358.0,"Objects":[{"StartTime":222358.0,"EndTime":222473.0,"Column":2},{"StartTime":222358.0,"EndTime":222473.0,"Column":4}]},{"StartTime":222589.0,"Objects":[{"StartTime":222589.0,"EndTime":222704.0,"Column":5},{"StartTime":222589.0,"EndTime":222704.0,"Column":6},{"StartTime":222589.0,"EndTime":222704.0,"Column":1}]},{"StartTime":222820.0,"Objects":[{"StartTime":222820.0,"EndTime":222935.0,"Column":2},{"StartTime":222820.0,"EndTime":222935.0,"Column":0}]},{"StartTime":223051.0,"Objects":[{"StartTime":223051.0,"EndTime":223166.0,"Column":4},{"StartTime":223051.0,"EndTime":223166.0,"Column":3}]},{"StartTime":223281.0,"Objects":[{"StartTime":223281.0,"EndTime":223281.0,"Column":1},{"StartTime":223281.0,"EndTime":223281.0,"Column":2}]},{"StartTime":223397.0,"Objects":[{"StartTime":223397.0,"EndTime":223397.0,"Column":4},{"StartTime":223397.0,"EndTime":223397.0,"Column":5}]},{"StartTime":223512.0,"Objects":[{"StartTime":223512.0,"EndTime":223742.0,"Column":2},{"StartTime":223512.0,"EndTime":223742.0,"Column":6},{"StartTime":223512.0,"EndTime":223742.0,"Column":3}]},{"StartTime":223858.0,"Objects":[{"StartTime":223858.0,"EndTime":224088.0,"Column":4},{"StartTime":223858.0,"EndTime":224088.0,"Column":0},{"StartTime":223858.0,"EndTime":224088.0,"Column":5}]},{"StartTime":224204.0,"Objects":[{"StartTime":224204.0,"EndTime":224319.0,"Column":6},{"StartTime":224204.0,"EndTime":224319.0,"Column":1},{"StartTime":224204.0,"EndTime":224319.0,"Column":3}]},{"StartTime":224435.0,"Objects":[{"StartTime":224435.0,"EndTime":224435.0,"Column":0},{"StartTime":224435.0,"EndTime":224435.0,"Column":2}]},{"StartTime":224551.0,"Objects":[{"StartTime":224551.0,"EndTime":224551.0,"Column":4}]},{"StartTime":224666.0,"Objects":[{"StartTime":224666.0,"EndTime":224781.0,"Column":1},{"StartTime":224666.0,"EndTime":224781.0,"Column":2}]},{"StartTime":224897.0,"Objects":[{"StartTime":224897.0,"EndTime":224897.0,"Column":5}]},{"StartTime":225012.0,"Objects":[{"StartTime":225012.0,"EndTime":225012.0,"Column":3}]},{"StartTime":225127.0,"Objects":[{"StartTime":225127.0,"EndTime":225242.0,"Column":5},{"StartTime":225127.0,"EndTime":225242.0,"Column":6}]},{"StartTime":225358.0,"Objects":[{"StartTime":225358.0,"EndTime":225588.0,"Column":1}]},{"StartTime":225704.0,"Objects":[{"StartTime":225704.0,"EndTime":225934.0,"Column":0},{"StartTime":225704.0,"EndTime":225934.0,"Column":5}]},{"StartTime":226051.0,"Objects":[{"StartTime":226051.0,"EndTime":226166.0,"Column":3},{"StartTime":226051.0,"EndTime":226166.0,"Column":4}]},{"StartTime":226281.0,"Objects":[{"StartTime":226281.0,"EndTime":226281.0,"Column":5},{"StartTime":226281.0,"EndTime":226281.0,"Column":2}]},{"StartTime":226512.0,"Objects":[{"StartTime":226512.0,"EndTime":226512.0,"Column":4},{"StartTime":226512.0,"EndTime":226512.0,"Column":1}]},{"StartTime":226627.0,"Objects":[{"StartTime":226627.0,"EndTime":226627.0,"Column":6}]},{"StartTime":226743.0,"Objects":[{"StartTime":226743.0,"EndTime":226743.0,"Column":3}]},{"StartTime":226858.0,"Objects":[{"StartTime":226858.0,"EndTime":226858.0,"Column":5},{"StartTime":226858.0,"EndTime":226858.0,"Column":6}]},{"StartTime":226974.0,"Objects":[{"StartTime":226974.0,"EndTime":226974.0,"Column":0},{"StartTime":226974.0,"EndTime":226974.0,"Column":1}]},{"StartTime":227089.0,"Objects":[{"StartTime":227089.0,"EndTime":227089.0,"Column":5},{"StartTime":227089.0,"EndTime":227089.0,"Column":6}]},{"StartTime":227204.0,"Objects":[{"StartTime":227204.0,"EndTime":227896.0,"Column":3},{"StartTime":227204.0,"EndTime":227896.0,"Column":2}]},{"StartTime":228588.0,"Objects":[{"StartTime":228588.0,"EndTime":229049.0,"Column":5}]},{"StartTime":229280.0,"Objects":[{"StartTime":229280.0,"EndTime":229741.0,"Column":4}]},{"StartTime":229973.0,"Objects":[{"StartTime":229973.0,"EndTime":229973.0,"Column":4},{"StartTime":229973.0,"EndTime":229973.0,"Column":1}]},{"StartTime":230204.0,"Objects":[{"StartTime":230204.0,"EndTime":230204.0,"Column":3}]},{"StartTime":230434.0,"Objects":[{"StartTime":230434.0,"EndTime":230434.0,"Column":2}]},{"StartTime":230665.0,"Objects":[{"StartTime":230665.0,"EndTime":230665.0,"Column":2},{"StartTime":230665.0,"EndTime":230665.0,"Column":6}]},{"StartTime":230896.0,"Objects":[{"StartTime":230896.0,"EndTime":231588.0,"Column":5}]},{"StartTime":232280.0,"Objects":[{"StartTime":232280.0,"EndTime":232741.0,"Column":3}]},{"StartTime":232973.0,"Objects":[{"StartTime":232973.0,"EndTime":233434.0,"Column":4},{"StartTime":232973.0,"EndTime":233434.0,"Column":5}]},{"StartTime":233665.0,"Objects":[{"StartTime":233665.0,"EndTime":233665.0,"Column":2}]},{"StartTime":233896.0,"Objects":[{"StartTime":233896.0,"EndTime":233896.0,"Column":4}]},{"StartTime":234127.0,"Objects":[{"StartTime":234127.0,"EndTime":234127.0,"Column":4},{"StartTime":234127.0,"EndTime":234127.0,"Column":3}]},{"StartTime":234357.0,"Objects":[{"StartTime":234357.0,"EndTime":234357.0,"Column":3}]},{"StartTime":234588.0,"Objects":[{"StartTime":234588.0,"EndTime":235280.0,"Column":4},{"StartTime":234588.0,"EndTime":235280.0,"Column":1},{"StartTime":234588.0,"EndTime":235280.0,"Column":2}]},{"StartTime":235973.0,"Objects":[{"StartTime":235973.0,"EndTime":236434.0,"Column":3},{"StartTime":235973.0,"EndTime":236434.0,"Column":6},{"StartTime":235973.0,"EndTime":236434.0,"Column":5}]},{"StartTime":236665.0,"Objects":[{"StartTime":236665.0,"EndTime":237126.0,"Column":0},{"StartTime":236665.0,"EndTime":237126.0,"Column":2}]},{"StartTime":237357.0,"Objects":[{"StartTime":237357.0,"EndTime":237587.0,"Column":3}]},{"StartTime":237819.0,"Objects":[{"StartTime":237819.0,"EndTime":237819.0,"Column":1}]},{"StartTime":238050.0,"Objects":[{"StartTime":238050.0,"EndTime":238050.0,"Column":4}]},{"StartTime":238280.0,"Objects":[{"StartTime":238280.0,"EndTime":238972.0,"Column":1}]},{"StartTime":239204.0,"Objects":[{"StartTime":239204.0,"EndTime":239204.0,"Column":4},{"StartTime":239204.0,"EndTime":239204.0,"Column":1},{"StartTime":239204.0,"EndTime":239204.0,"Column":6}]},{"StartTime":239434.0,"Objects":[{"StartTime":239434.0,"EndTime":239434.0,"Column":5}]},{"StartTime":239665.0,"Objects":[{"StartTime":239665.0,"EndTime":239665.0,"Column":6},{"StartTime":239665.0,"EndTime":239665.0,"Column":3}]},{"StartTime":239896.0,"Objects":[{"StartTime":239896.0,"EndTime":239896.0,"Column":5},{"StartTime":239896.0,"EndTime":239896.0,"Column":0},{"StartTime":239896.0,"EndTime":239896.0,"Column":6}]},{"StartTime":240127.0,"Objects":[{"StartTime":240127.0,"EndTime":240127.0,"Column":6},{"StartTime":240127.0,"EndTime":240127.0,"Column":3}]},{"StartTime":240357.0,"Objects":[{"StartTime":240357.0,"EndTime":240357.0,"Column":4}]},{"StartTime":240588.0,"Objects":[{"StartTime":240588.0,"EndTime":240588.0,"Column":5}]},{"StartTime":240819.0,"Objects":[{"StartTime":240819.0,"EndTime":240819.0,"Column":5},{"StartTime":240819.0,"EndTime":240819.0,"Column":3},{"StartTime":240819.0,"EndTime":240819.0,"Column":2}]},{"StartTime":241050.0,"Objects":[{"StartTime":241050.0,"EndTime":241050.0,"Column":3}]},{"StartTime":241280.0,"Objects":[{"StartTime":241280.0,"EndTime":241280.0,"Column":2}]},{"StartTime":241511.0,"Objects":[{"StartTime":241511.0,"EndTime":241511.0,"Column":2}]},{"StartTime":241742.0,"Objects":[{"StartTime":241742.0,"EndTime":241742.0,"Column":2},{"StartTime":241742.0,"EndTime":241742.0,"Column":0}]},{"StartTime":241973.0,"Objects":[{"StartTime":241973.0,"EndTime":242434.0,"Column":1},{"StartTime":241973.0,"EndTime":242434.0,"Column":6}]},{"StartTime":242665.0,"Objects":[{"StartTime":242665.0,"EndTime":242895.0,"Column":4}]},{"StartTime":243127.0,"Objects":[{"StartTime":243127.0,"EndTime":243127.0,"Column":1},{"StartTime":243127.0,"EndTime":243127.0,"Column":2}]},{"StartTime":243357.0,"Objects":[{"StartTime":243357.0,"EndTime":243357.0,"Column":1}]},{"StartTime":243588.0,"Objects":[{"StartTime":243588.0,"EndTime":243588.0,"Column":2},{"StartTime":243588.0,"EndTime":243588.0,"Column":3}]},{"StartTime":243819.0,"Objects":[{"StartTime":243819.0,"EndTime":243819.0,"Column":4}]},{"StartTime":244050.0,"Objects":[{"StartTime":244050.0,"EndTime":244280.0,"Column":1}]},{"StartTime":244511.0,"Objects":[{"StartTime":244511.0,"EndTime":244972.0,"Column":5}]},{"StartTime":245204.0,"Objects":[{"StartTime":245204.0,"EndTime":245204.0,"Column":4}]},{"StartTime":245434.0,"Objects":[{"StartTime":245434.0,"EndTime":246126.0,"Column":3},{"StartTime":245434.0,"EndTime":246126.0,"Column":6}]},{"StartTime":246357.0,"Objects":[{"StartTime":246357.0,"EndTime":246357.0,"Column":3},{"StartTime":246357.0,"EndTime":246357.0,"Column":0}]},{"StartTime":246588.0,"Objects":[{"StartTime":246588.0,"EndTime":246588.0,"Column":2},{"StartTime":246588.0,"EndTime":246588.0,"Column":6}]},{"StartTime":246819.0,"Objects":[{"StartTime":246819.0,"EndTime":247049.0,"Column":1},{"StartTime":246819.0,"EndTime":247049.0,"Column":4}]},{"StartTime":247280.0,"Objects":[{"StartTime":247280.0,"EndTime":247280.0,"Column":1}]},{"StartTime":247511.0,"Objects":[{"StartTime":247511.0,"EndTime":247741.0,"Column":4}]},{"StartTime":247973.0,"Objects":[{"StartTime":247973.0,"EndTime":248434.0,"Column":1},{"StartTime":248203.0,"EndTime":248203.0,"Column":3},{"StartTime":248433.0,"EndTime":248433.0,"Column":3}]},{"StartTime":248665.0,"Objects":[{"StartTime":248665.0,"EndTime":248665.0,"Column":4}]},{"StartTime":248896.0,"Objects":[{"StartTime":248896.0,"EndTime":248896.0,"Column":5},{"StartTime":248896.0,"EndTime":248896.0,"Column":4}]},{"StartTime":249127.0,"Objects":[{"StartTime":249127.0,"EndTime":249357.0,"Column":3}]},{"StartTime":249588.0,"Objects":[{"StartTime":249588.0,"EndTime":249588.0,"Column":2}]},{"StartTime":249819.0,"Objects":[{"StartTime":249819.0,"EndTime":249819.0,"Column":3}]},{"StartTime":250050.0,"Objects":[{"StartTime":250050.0,"EndTime":250280.0,"Column":1},{"StartTime":250050.0,"EndTime":250280.0,"Column":0}]},{"StartTime":250511.0,"Objects":[{"StartTime":250511.0,"EndTime":250511.0,"Column":5}]},{"StartTime":250742.0,"Objects":[{"StartTime":250742.0,"EndTime":251203.0,"Column":2},{"StartTime":250742.0,"EndTime":251203.0,"Column":4}]},{"StartTime":251550.0,"Objects":[{"StartTime":251550.0,"EndTime":251898.0,"Column":0}]},{"StartTime":252247.0,"Objects":[{"StartTime":252247.0,"EndTime":252247.0,"Column":2}]},{"StartTime":252702.0,"Objects":[{"StartTime":252702.0,"EndTime":253059.0,"Column":4},{"StartTime":252702.0,"EndTime":253059.0,"Column":6}]},{"StartTime":253506.0,"Objects":[{"StartTime":253506.0,"EndTime":253506.0,"Column":1}]},{"StartTime":254095.0,"Objects":[{"StartTime":254095.0,"EndTime":254661.0,"Column":4},{"StartTime":254095.0,"EndTime":254661.0,"Column":5}]},{"StartTime":255580.0,"Objects":[{"StartTime":255580.0,"EndTime":255580.0,"Column":0},{"StartTime":255580.0,"EndTime":255580.0,"Column":3},{"StartTime":255580.0,"EndTime":255580.0,"Column":5}]},{"StartTime":256480.0,"Objects":[{"StartTime":256480.0,"EndTime":257588.0,"Column":2}]},{"StartTime":257747.0,"Objects":[{"StartTime":257747.0,"EndTime":258697.0,"Column":1}]},{"StartTime":258892.0,"Objects":[{"StartTime":258892.0,"EndTime":263021.0,"Column":0}]},{"StartTime":263197.0,"Objects":[{"StartTime":263197.0,"EndTime":263427.0,"Column":3}]},{"StartTime":263543.0,"Objects":[{"StartTime":263543.0,"EndTime":263543.0,"Column":6},{"StartTime":263543.0,"EndTime":263543.0,"Column":0}]},{"StartTime":263658.0,"Objects":[{"StartTime":263658.0,"EndTime":263888.0,"Column":3}]},{"StartTime":264004.0,"Objects":[{"StartTime":264004.0,"EndTime":264004.0,"Column":5},{"StartTime":264004.0,"EndTime":264004.0,"Column":4}]},{"StartTime":264120.0,"Objects":[{"StartTime":264120.0,"EndTime":264235.0,"Column":0},{"StartTime":264120.0,"EndTime":264235.0,"Column":2}]},{"StartTime":264350.0,"Objects":[{"StartTime":264350.0,"EndTime":264465.0,"Column":5}]},{"StartTime":264581.0,"Objects":[{"StartTime":264581.0,"EndTime":264581.0,"Column":2}]},{"StartTime":264697.0,"Objects":[{"StartTime":264697.0,"EndTime":264697.0,"Column":1},{"StartTime":264697.0,"EndTime":264697.0,"Column":4}]},{"StartTime":264812.0,"Objects":[{"StartTime":264812.0,"EndTime":264812.0,"Column":0},{"StartTime":264812.0,"EndTime":264812.0,"Column":2}]},{"StartTime":264927.0,"Objects":[{"StartTime":264927.0,"EndTime":264927.0,"Column":5},{"StartTime":264927.0,"EndTime":264927.0,"Column":3}]},{"StartTime":265043.0,"Objects":[{"StartTime":265043.0,"EndTime":265273.0,"Column":2}]},{"StartTime":265389.0,"Objects":[{"StartTime":265389.0,"EndTime":265389.0,"Column":4}]},{"StartTime":265504.0,"Objects":[{"StartTime":265504.0,"EndTime":265734.0,"Column":5}]},{"StartTime":265850.0,"Objects":[{"StartTime":265850.0,"EndTime":265850.0,"Column":0}]},{"StartTime":265966.0,"Objects":[{"StartTime":265966.0,"EndTime":266081.0,"Column":4},{"StartTime":265966.0,"EndTime":266081.0,"Column":1}]},{"StartTime":266197.0,"Objects":[{"StartTime":266197.0,"EndTime":266312.0,"Column":5}]},{"StartTime":266427.0,"Objects":[{"StartTime":266427.0,"EndTime":266427.0,"Column":2},{"StartTime":266427.0,"EndTime":266427.0,"Column":1},{"StartTime":266427.0,"EndTime":266427.0,"Column":4}]},{"StartTime":266543.0,"Objects":[{"StartTime":266543.0,"EndTime":266543.0,"Column":0},{"StartTime":266543.0,"EndTime":266543.0,"Column":5}]},{"StartTime":266658.0,"Objects":[{"StartTime":266658.0,"EndTime":266658.0,"Column":6},{"StartTime":266658.0,"EndTime":266658.0,"Column":1}]},{"StartTime":266773.0,"Objects":[{"StartTime":266773.0,"EndTime":266773.0,"Column":5}]},{"StartTime":266889.0,"Objects":[{"StartTime":266889.0,"EndTime":267119.0,"Column":1},{"StartTime":266889.0,"EndTime":267119.0,"Column":2}]},{"StartTime":267235.0,"Objects":[{"StartTime":267235.0,"EndTime":267235.0,"Column":6}]},{"StartTime":267350.0,"Objects":[{"StartTime":267350.0,"EndTime":267465.0,"Column":5}]},{"StartTime":267581.0,"Objects":[{"StartTime":267581.0,"EndTime":267581.0,"Column":3},{"StartTime":267581.0,"EndTime":267581.0,"Column":4}]},{"StartTime":267697.0,"Objects":[{"StartTime":267697.0,"EndTime":267697.0,"Column":2},{"StartTime":267697.0,"EndTime":267697.0,"Column":1}]},{"StartTime":267812.0,"Objects":[{"StartTime":267812.0,"EndTime":267927.0,"Column":0},{"StartTime":267812.0,"EndTime":267927.0,"Column":4},{"StartTime":267812.0,"EndTime":267927.0,"Column":6}]},{"StartTime":268043.0,"Objects":[{"StartTime":268043.0,"EndTime":268158.0,"Column":1}]},{"StartTime":268273.0,"Objects":[{"StartTime":268273.0,"EndTime":268273.0,"Column":0}]},{"StartTime":268389.0,"Objects":[{"StartTime":268389.0,"EndTime":268389.0,"Column":6},{"StartTime":268389.0,"EndTime":268389.0,"Column":4}]},{"StartTime":268504.0,"Objects":[{"StartTime":268504.0,"EndTime":268504.0,"Column":0},{"StartTime":268504.0,"EndTime":268504.0,"Column":1}]},{"StartTime":268620.0,"Objects":[{"StartTime":268620.0,"EndTime":268620.0,"Column":2}]},{"StartTime":268735.0,"Objects":[{"StartTime":268735.0,"EndTime":268965.0,"Column":1},{"StartTime":268735.0,"EndTime":268965.0,"Column":4}]},{"StartTime":269081.0,"Objects":[{"StartTime":269081.0,"EndTime":269081.0,"Column":5}]},{"StartTime":269197.0,"Objects":[{"StartTime":269197.0,"EndTime":269312.0,"Column":6},{"StartTime":269197.0,"EndTime":269312.0,"Column":1}]},{"StartTime":269427.0,"Objects":[{"StartTime":269427.0,"EndTime":269427.0,"Column":3},{"StartTime":269427.0,"EndTime":269427.0,"Column":4}]},{"StartTime":269543.0,"Objects":[{"StartTime":269543.0,"EndTime":269543.0,"Column":5}]},{"StartTime":269658.0,"Objects":[{"StartTime":269658.0,"EndTime":269773.0,"Column":3},{"StartTime":269658.0,"EndTime":269773.0,"Column":0},{"StartTime":269658.0,"EndTime":269773.0,"Column":4}]},{"StartTime":269889.0,"Objects":[{"StartTime":269889.0,"EndTime":270004.0,"Column":1}]},{"StartTime":270120.0,"Objects":[{"StartTime":270120.0,"EndTime":270120.0,"Column":5}]},{"StartTime":270235.0,"Objects":[{"StartTime":270235.0,"EndTime":270235.0,"Column":4},{"StartTime":270235.0,"EndTime":270235.0,"Column":6}]},{"StartTime":270350.0,"Objects":[{"StartTime":270350.0,"EndTime":270350.0,"Column":3},{"StartTime":270350.0,"EndTime":270350.0,"Column":5}]},{"StartTime":270466.0,"Objects":[{"StartTime":270466.0,"EndTime":270466.0,"Column":2},{"StartTime":270466.0,"EndTime":270466.0,"Column":4}]},{"StartTime":270523.0,"Objects":[{"StartTime":270523.0,"EndTime":270523.0,"Column":5}]},{"StartTime":270581.0,"Objects":[{"StartTime":270581.0,"EndTime":270581.0,"Column":2}]},{"StartTime":270697.0,"Objects":[{"StartTime":270697.0,"EndTime":270697.0,"Column":1}]},{"StartTime":270812.0,"Objects":[{"StartTime":270812.0,"EndTime":270812.0,"Column":4}]},{"StartTime":270927.0,"Objects":[{"StartTime":270927.0,"EndTime":271042.0,"Column":6}]},{"StartTime":271158.0,"Objects":[{"StartTime":271158.0,"EndTime":271158.0,"Column":5}]},{"StartTime":271273.0,"Objects":[{"StartTime":271273.0,"EndTime":271273.0,"Column":2}]},{"StartTime":271331.0,"Objects":[{"StartTime":271331.0,"EndTime":271331.0,"Column":3}]},{"StartTime":271389.0,"Objects":[{"StartTime":271389.0,"EndTime":271389.0,"Column":1}]},{"StartTime":271447.0,"Objects":[{"StartTime":271447.0,"EndTime":271447.0,"Column":3}]},{"StartTime":271504.0,"Objects":[{"StartTime":271504.0,"EndTime":271619.0,"Column":1},{"StartTime":271504.0,"EndTime":271619.0,"Column":2},{"StartTime":271504.0,"EndTime":271619.0,"Column":5}]},{"StartTime":271735.0,"Objects":[{"StartTime":271735.0,"EndTime":271735.0,"Column":6},{"StartTime":271735.0,"EndTime":271735.0,"Column":0}]},{"StartTime":271793.0,"Objects":[{"StartTime":271793.0,"EndTime":271793.0,"Column":5}]},{"StartTime":271850.0,"Objects":[{"StartTime":271850.0,"EndTime":271850.0,"Column":4}]},{"StartTime":271908.0,"Objects":[{"StartTime":271908.0,"EndTime":271908.0,"Column":5}]},{"StartTime":271966.0,"Objects":[{"StartTime":271966.0,"EndTime":272139.0,"Column":6}]},{"StartTime":272197.0,"Objects":[{"StartTime":272197.0,"EndTime":272312.0,"Column":5},{"StartTime":272197.0,"EndTime":272312.0,"Column":2},{"StartTime":272197.0,"EndTime":272312.0,"Column":1}]},{"StartTime":272370.0,"Objects":[{"StartTime":272370.0,"EndTime":272370.0,"Column":3}]},{"StartTime":272427.0,"Objects":[{"StartTime":272427.0,"EndTime":272427.0,"Column":6}]},{"StartTime":272485.0,"Objects":[{"StartTime":272485.0,"EndTime":272485.0,"Column":5}]},{"StartTime":272543.0,"Objects":[{"StartTime":272543.0,"EndTime":272543.0,"Column":4}]},{"StartTime":272600.0,"Objects":[{"StartTime":272600.0,"EndTime":272600.0,"Column":3}]},{"StartTime":272658.0,"Objects":[{"StartTime":272658.0,"EndTime":272658.0,"Column":5}]},{"StartTime":272716.0,"Objects":[{"StartTime":272716.0,"EndTime":272716.0,"Column":2}]},{"StartTime":272773.0,"Objects":[{"StartTime":272773.0,"EndTime":272773.0,"Column":3}]},{"StartTime":272889.0,"Objects":[{"StartTime":272889.0,"EndTime":272889.0,"Column":0}]},{"StartTime":272947.0,"Objects":[{"StartTime":272947.0,"EndTime":272947.0,"Column":5}]},{"StartTime":273004.0,"Objects":[{"StartTime":273004.0,"EndTime":273004.0,"Column":0}]},{"StartTime":273062.0,"Objects":[{"StartTime":273062.0,"EndTime":273062.0,"Column":5}]},{"StartTime":273120.0,"Objects":[{"StartTime":273120.0,"EndTime":273120.0,"Column":0}]},{"StartTime":273177.0,"Objects":[{"StartTime":273177.0,"EndTime":273177.0,"Column":1}]},{"StartTime":273235.0,"Objects":[{"StartTime":273235.0,"EndTime":273235.0,"Column":0}]},{"StartTime":273350.0,"Objects":[{"StartTime":273350.0,"EndTime":273350.0,"Column":1}]},{"StartTime":273408.0,"Objects":[{"StartTime":273408.0,"EndTime":273408.0,"Column":2}]},{"StartTime":273466.0,"Objects":[{"StartTime":273466.0,"EndTime":273466.0,"Column":6}]},{"StartTime":273523.0,"Objects":[{"StartTime":273523.0,"EndTime":273523.0,"Column":2}]},{"StartTime":273581.0,"Objects":[{"StartTime":273581.0,"EndTime":273581.0,"Column":3}]},{"StartTime":273639.0,"Objects":[{"StartTime":273639.0,"EndTime":273639.0,"Column":5}]},{"StartTime":273697.0,"Objects":[{"StartTime":273697.0,"EndTime":273697.0,"Column":4}]},{"StartTime":273754.0,"Objects":[{"StartTime":273754.0,"EndTime":273754.0,"Column":5}]},{"StartTime":273812.0,"Objects":[{"StartTime":273812.0,"EndTime":273927.0,"Column":2}]},{"StartTime":273985.0,"Objects":[{"StartTime":273985.0,"EndTime":273985.0,"Column":5}]},{"StartTime":274043.0,"Objects":[{"StartTime":274043.0,"EndTime":274158.0,"Column":6}]},{"StartTime":274273.0,"Objects":[{"StartTime":274273.0,"EndTime":274388.0,"Column":3}]},{"StartTime":274447.0,"Objects":[{"StartTime":274447.0,"EndTime":274447.0,"Column":1}]},{"StartTime":274504.0,"Objects":[{"StartTime":274504.0,"EndTime":274619.0,"Column":3}]},{"StartTime":274735.0,"Objects":[{"StartTime":274735.0,"EndTime":274850.0,"Column":4}]},{"StartTime":274908.0,"Objects":[{"StartTime":274908.0,"EndTime":274908.0,"Column":3}]},{"StartTime":274966.0,"Objects":[{"StartTime":274966.0,"EndTime":275081.0,"Column":2}]},{"StartTime":275197.0,"Objects":[{"StartTime":275197.0,"EndTime":275197.0,"Column":0},{"StartTime":275197.0,"EndTime":275197.0,"Column":4}]},{"StartTime":275312.0,"Objects":[{"StartTime":275312.0,"EndTime":275312.0,"Column":1}]},{"StartTime":275370.0,"Objects":[{"StartTime":275370.0,"EndTime":275370.0,"Column":6}]},{"StartTime":275427.0,"Objects":[{"StartTime":275427.0,"EndTime":275542.0,"Column":1}]},{"StartTime":275658.0,"Objects":[{"StartTime":275658.0,"EndTime":275773.0,"Column":3},{"StartTime":275658.0,"EndTime":275773.0,"Column":4}]},{"StartTime":275889.0,"Objects":[{"StartTime":275889.0,"EndTime":276004.0,"Column":6}]},{"StartTime":276062.0,"Objects":[{"StartTime":276062.0,"EndTime":276062.0,"Column":4}]},{"StartTime":276120.0,"Objects":[{"StartTime":276120.0,"EndTime":276523.0,"Column":5}]},{"StartTime":276581.0,"Objects":[{"StartTime":276581.0,"EndTime":276984.0,"Column":4}]},{"StartTime":277043.0,"Objects":[{"StartTime":277043.0,"EndTime":277043.0,"Column":6}]},{"StartTime":277158.0,"Objects":[{"StartTime":277158.0,"EndTime":277158.0,"Column":3},{"StartTime":277158.0,"EndTime":277158.0,"Column":4}]},{"StartTime":277273.0,"Objects":[{"StartTime":277273.0,"EndTime":277273.0,"Column":5},{"StartTime":277273.0,"EndTime":277273.0,"Column":6}]},{"StartTime":277389.0,"Objects":[{"StartTime":277389.0,"EndTime":277389.0,"Column":0},{"StartTime":277389.0,"EndTime":277389.0,"Column":1}]},{"StartTime":277504.0,"Objects":[{"StartTime":277504.0,"EndTime":277504.0,"Column":4},{"StartTime":277504.0,"EndTime":277504.0,"Column":2}]},{"StartTime":277562.0,"Objects":[{"StartTime":277562.0,"EndTime":277562.0,"Column":0}]},{"StartTime":277620.0,"Objects":[{"StartTime":277620.0,"EndTime":277620.0,"Column":4}]},{"StartTime":277677.0,"Objects":[{"StartTime":277677.0,"EndTime":277677.0,"Column":3}]},{"StartTime":277735.0,"Objects":[{"StartTime":277735.0,"EndTime":277735.0,"Column":4}]},{"StartTime":277793.0,"Objects":[{"StartTime":277793.0,"EndTime":277793.0,"Column":2}]},{"StartTime":277850.0,"Objects":[{"StartTime":277850.0,"EndTime":277850.0,"Column":3}]},{"StartTime":277908.0,"Objects":[{"StartTime":277908.0,"EndTime":277908.0,"Column":1}]},{"StartTime":277966.0,"Objects":[{"StartTime":277966.0,"EndTime":278196.0,"Column":2},{"StartTime":277966.0,"EndTime":278196.0,"Column":4}]},{"StartTime":278312.0,"Objects":[{"StartTime":278312.0,"EndTime":278542.0,"Column":3}]},{"StartTime":278658.0,"Objects":[{"StartTime":278658.0,"EndTime":278773.0,"Column":4}]},{"StartTime":278889.0,"Objects":[{"StartTime":278889.0,"EndTime":278889.0,"Column":3}]},{"StartTime":279004.0,"Objects":[{"StartTime":279004.0,"EndTime":279234.0,"Column":4},{"StartTime":279004.0,"EndTime":279234.0,"Column":2}]},{"StartTime":279350.0,"Objects":[{"StartTime":279350.0,"EndTime":279465.0,"Column":1}]},{"StartTime":279581.0,"Objects":[{"StartTime":279581.0,"EndTime":279696.0,"Column":0},{"StartTime":279581.0,"EndTime":279696.0,"Column":3}]},{"StartTime":279812.0,"Objects":[{"StartTime":279812.0,"EndTime":280042.0,"Column":4}]},{"StartTime":280158.0,"Objects":[{"StartTime":280158.0,"EndTime":280388.0,"Column":3},{"StartTime":280158.0,"EndTime":280388.0,"Column":5}]},{"StartTime":280504.0,"Objects":[{"StartTime":280504.0,"EndTime":280619.0,"Column":4}]},{"StartTime":280735.0,"Objects":[{"StartTime":280735.0,"EndTime":280735.0,"Column":1}]},{"StartTime":280850.0,"Objects":[{"StartTime":280850.0,"EndTime":281080.0,"Column":4},{"StartTime":280850.0,"EndTime":281080.0,"Column":3}]},{"StartTime":281197.0,"Objects":[{"StartTime":281197.0,"EndTime":281312.0,"Column":5},{"StartTime":281197.0,"EndTime":281312.0,"Column":2}]},{"StartTime":281427.0,"Objects":[{"StartTime":281427.0,"EndTime":281542.0,"Column":0}]},{"StartTime":281600.0,"Objects":[{"StartTime":281600.0,"EndTime":281600.0,"Column":2}]},{"StartTime":281658.0,"Objects":[{"StartTime":281658.0,"EndTime":281888.0,"Column":4}]},{"StartTime":282004.0,"Objects":[{"StartTime":282004.0,"EndTime":282234.0,"Column":6},{"StartTime":282004.0,"EndTime":282234.0,"Column":2}]},{"StartTime":282350.0,"Objects":[{"StartTime":282350.0,"EndTime":282465.0,"Column":0}]},{"StartTime":282581.0,"Objects":[{"StartTime":282581.0,"EndTime":282581.0,"Column":6}]},{"StartTime":282697.0,"Objects":[{"StartTime":282697.0,"EndTime":282927.0,"Column":3},{"StartTime":282697.0,"EndTime":282927.0,"Column":5}]},{"StartTime":283043.0,"Objects":[{"StartTime":283043.0,"EndTime":283158.0,"Column":2}]},{"StartTime":283273.0,"Objects":[{"StartTime":283273.0,"EndTime":283388.0,"Column":3}]},{"StartTime":283504.0,"Objects":[{"StartTime":283504.0,"EndTime":283734.0,"Column":5}]},{"StartTime":283850.0,"Objects":[{"StartTime":283850.0,"EndTime":284080.0,"Column":6}]},{"StartTime":284197.0,"Objects":[{"StartTime":284197.0,"EndTime":284312.0,"Column":3}]},{"StartTime":284427.0,"Objects":[{"StartTime":284427.0,"EndTime":284427.0,"Column":0}]},{"StartTime":284543.0,"Objects":[{"StartTime":284543.0,"EndTime":284543.0,"Column":1},{"StartTime":284543.0,"EndTime":284543.0,"Column":2}]},{"StartTime":284658.0,"Objects":[{"StartTime":284658.0,"EndTime":284658.0,"Column":3},{"StartTime":284658.0,"EndTime":284658.0,"Column":4},{"StartTime":284658.0,"EndTime":284658.0,"Column":5}]},{"StartTime":284773.0,"Objects":[{"StartTime":284773.0,"EndTime":284773.0,"Column":2}]},{"StartTime":284889.0,"Objects":[{"StartTime":284889.0,"EndTime":285062.0,"Column":6},{"StartTime":284889.0,"EndTime":285062.0,"Column":1}]},{"StartTime":285120.0,"Objects":[{"StartTime":285120.0,"EndTime":285293.0,"Column":4},{"StartTime":285120.0,"EndTime":285293.0,"Column":5}]},{"StartTime":285350.0,"Objects":[{"StartTime":285350.0,"EndTime":285580.0,"Column":6},{"StartTime":285350.0,"EndTime":285580.0,"Column":0}]},{"StartTime":285697.0,"Objects":[{"StartTime":285697.0,"EndTime":285927.0,"Column":2}]},{"StartTime":286043.0,"Objects":[{"StartTime":286043.0,"EndTime":286158.0,"Column":3},{"StartTime":286043.0,"EndTime":286158.0,"Column":4},{"StartTime":286043.0,"EndTime":286158.0,"Column":5}]},{"StartTime":286273.0,"Objects":[{"StartTime":286273.0,"EndTime":286273.0,"Column":0},{"StartTime":286273.0,"EndTime":286273.0,"Column":2}]},{"StartTime":286389.0,"Objects":[{"StartTime":286389.0,"EndTime":286619.0,"Column":6},{"StartTime":286389.0,"EndTime":286619.0,"Column":3}]},{"StartTime":286735.0,"Objects":[{"StartTime":286735.0,"EndTime":286850.0,"Column":4}]},{"StartTime":286966.0,"Objects":[{"StartTime":286966.0,"EndTime":287081.0,"Column":0}]},{"StartTime":287197.0,"Objects":[{"StartTime":287197.0,"EndTime":287427.0,"Column":6}]},{"StartTime":287543.0,"Objects":[{"StartTime":287543.0,"EndTime":287773.0,"Column":4}]},{"StartTime":287889.0,"Objects":[{"StartTime":287889.0,"EndTime":288004.0,"Column":1},{"StartTime":287889.0,"EndTime":288004.0,"Column":2}]},{"StartTime":288120.0,"Objects":[{"StartTime":288120.0,"EndTime":288120.0,"Column":4},{"StartTime":288120.0,"EndTime":288120.0,"Column":3},{"StartTime":288120.0,"EndTime":288120.0,"Column":5}]},{"StartTime":288235.0,"Objects":[{"StartTime":288235.0,"EndTime":288465.0,"Column":1},{"StartTime":288235.0,"EndTime":288465.0,"Column":6}]},{"StartTime":288581.0,"Objects":[{"StartTime":288581.0,"EndTime":288696.0,"Column":5}]},{"StartTime":288812.0,"Objects":[{"StartTime":288812.0,"EndTime":288927.0,"Column":4},{"StartTime":288812.0,"EndTime":288927.0,"Column":2},{"StartTime":288812.0,"EndTime":288927.0,"Column":1}]},{"StartTime":288985.0,"Objects":[{"StartTime":288985.0,"EndTime":288985.0,"Column":0}]},{"StartTime":289043.0,"Objects":[{"StartTime":289043.0,"EndTime":289273.0,"Column":2},{"StartTime":289043.0,"EndTime":289273.0,"Column":4}]},{"StartTime":289389.0,"Objects":[{"StartTime":289389.0,"EndTime":289619.0,"Column":0}]},{"StartTime":289735.0,"Objects":[{"StartTime":289735.0,"EndTime":289850.0,"Column":2},{"StartTime":289735.0,"EndTime":289850.0,"Column":6},{"StartTime":289735.0,"EndTime":289850.0,"Column":4}]},{"StartTime":289966.0,"Objects":[{"StartTime":289966.0,"EndTime":289966.0,"Column":0},{"StartTime":289966.0,"EndTime":289966.0,"Column":5}]},{"StartTime":290081.0,"Objects":[{"StartTime":290081.0,"EndTime":290311.0,"Column":2},{"StartTime":290081.0,"EndTime":290311.0,"Column":6},{"StartTime":290081.0,"EndTime":290311.0,"Column":3}]},{"StartTime":290427.0,"Objects":[{"StartTime":290427.0,"EndTime":290542.0,"Column":5},{"StartTime":290427.0,"EndTime":290542.0,"Column":4}]},{"StartTime":290658.0,"Objects":[{"StartTime":290658.0,"EndTime":290773.0,"Column":3},{"StartTime":290658.0,"EndTime":290773.0,"Column":2},{"StartTime":290658.0,"EndTime":290773.0,"Column":1}]},{"StartTime":290889.0,"Objects":[{"StartTime":290889.0,"EndTime":291119.0,"Column":5},{"StartTime":290889.0,"EndTime":291119.0,"Column":4},{"StartTime":290889.0,"EndTime":291119.0,"Column":0}]},{"StartTime":291235.0,"Objects":[{"StartTime":291235.0,"EndTime":291465.0,"Column":3}]},{"StartTime":291581.0,"Objects":[{"StartTime":291581.0,"EndTime":291696.0,"Column":6}]},{"StartTime":291812.0,"Objects":[{"StartTime":291812.0,"EndTime":292042.0,"Column":0},{"StartTime":291812.0,"EndTime":292042.0,"Column":2}]},{"StartTime":292158.0,"Objects":[{"StartTime":292158.0,"EndTime":292158.0,"Column":4},{"StartTime":292158.0,"EndTime":292158.0,"Column":5}]},{"StartTime":292273.0,"Objects":[{"StartTime":292273.0,"EndTime":292446.0,"Column":2}]},{"StartTime":292504.0,"Objects":[{"StartTime":292504.0,"EndTime":292619.0,"Column":0}]},{"StartTime":292735.0,"Objects":[{"StartTime":292735.0,"EndTime":292850.0,"Column":5},{"StartTime":292735.0,"EndTime":292850.0,"Column":6}]},{"StartTime":292966.0,"Objects":[{"StartTime":292966.0,"EndTime":293196.0,"Column":0}]},{"StartTime":293312.0,"Objects":[{"StartTime":293312.0,"EndTime":293312.0,"Column":1},{"StartTime":293312.0,"EndTime":293312.0,"Column":4},{"StartTime":293312.0,"EndTime":293312.0,"Column":3}]},{"StartTime":293427.0,"Objects":[{"StartTime":293427.0,"EndTime":293542.0,"Column":0}]},{"StartTime":293658.0,"Objects":[{"StartTime":293658.0,"EndTime":293658.0,"Column":2}]},{"StartTime":293773.0,"Objects":[{"StartTime":293773.0,"EndTime":293773.0,"Column":1}]},{"StartTime":293889.0,"Objects":[{"StartTime":293889.0,"EndTime":294004.0,"Column":5}]},{"StartTime":294120.0,"Objects":[{"StartTime":294120.0,"EndTime":294120.0,"Column":6}]},{"StartTime":294235.0,"Objects":[{"StartTime":294235.0,"EndTime":294235.0,"Column":4}]},{"StartTime":294350.0,"Objects":[{"StartTime":294350.0,"EndTime":294350.0,"Column":5},{"StartTime":294350.0,"EndTime":294350.0,"Column":6}]},{"StartTime":294466.0,"Objects":[{"StartTime":294466.0,"EndTime":294466.0,"Column":3}]},{"StartTime":294581.0,"Objects":[{"StartTime":294581.0,"EndTime":294754.0,"Column":1}]},{"StartTime":294812.0,"Objects":[{"StartTime":294812.0,"EndTime":294985.0,"Column":5}]},{"StartTime":295043.0,"Objects":[{"StartTime":295043.0,"EndTime":295043.0,"Column":1}]},{"StartTime":295100.0,"Objects":[{"StartTime":295100.0,"EndTime":295100.0,"Column":0}]},{"StartTime":295158.0,"Objects":[{"StartTime":295158.0,"EndTime":295158.0,"Column":3}]},{"StartTime":295216.0,"Objects":[{"StartTime":295216.0,"EndTime":295216.0,"Column":0}]},{"StartTime":295273.0,"Objects":[{"StartTime":295273.0,"EndTime":295273.0,"Column":4}]},{"StartTime":295331.0,"Objects":[{"StartTime":295331.0,"EndTime":295331.0,"Column":0}]},{"StartTime":295389.0,"Objects":[{"StartTime":295389.0,"EndTime":295389.0,"Column":3}]},{"StartTime":295447.0,"Objects":[{"StartTime":295447.0,"EndTime":295447.0,"Column":1}]},{"StartTime":295504.0,"Objects":[{"StartTime":295504.0,"EndTime":295734.0,"Column":5},{"StartTime":295504.0,"EndTime":295734.0,"Column":0}]},{"StartTime":295850.0,"Objects":[{"StartTime":295850.0,"EndTime":295850.0,"Column":6}]},{"StartTime":295966.0,"Objects":[{"StartTime":295966.0,"EndTime":296196.0,"Column":0},{"StartTime":295966.0,"EndTime":296196.0,"Column":4},{"StartTime":295966.0,"EndTime":296196.0,"Column":2}]},{"StartTime":296312.0,"Objects":[{"StartTime":296312.0,"EndTime":296312.0,"Column":6}]},{"StartTime":296427.0,"Objects":[{"StartTime":296427.0,"EndTime":296542.0,"Column":1}]},{"StartTime":296658.0,"Objects":[{"StartTime":296658.0,"EndTime":296831.0,"Column":3},{"StartTime":296658.0,"EndTime":296831.0,"Column":6}]},{"StartTime":296889.0,"Objects":[{"StartTime":296889.0,"EndTime":297004.0,"Column":0}]},{"StartTime":297120.0,"Objects":[{"StartTime":297120.0,"EndTime":297120.0,"Column":5},{"StartTime":297120.0,"EndTime":297120.0,"Column":6}]},{"StartTime":297235.0,"Objects":[{"StartTime":297235.0,"EndTime":297235.0,"Column":1},{"StartTime":297235.0,"EndTime":297235.0,"Column":2}]},{"StartTime":297350.0,"Objects":[{"StartTime":297350.0,"EndTime":297580.0,"Column":0},{"StartTime":297350.0,"EndTime":297580.0,"Column":4},{"StartTime":297350.0,"EndTime":297580.0,"Column":6}]},{"StartTime":297697.0,"Objects":[{"StartTime":297697.0,"EndTime":297927.0,"Column":5},{"StartTime":297697.0,"EndTime":297927.0,"Column":2},{"StartTime":297697.0,"EndTime":297927.0,"Column":1}]},{"StartTime":298043.0,"Objects":[{"StartTime":298043.0,"EndTime":298158.0,"Column":6},{"StartTime":298043.0,"EndTime":298158.0,"Column":4}]},{"StartTime":298273.0,"Objects":[{"StartTime":298273.0,"EndTime":298503.0,"Column":2},{"StartTime":298273.0,"EndTime":298503.0,"Column":3},{"StartTime":298273.0,"EndTime":298503.0,"Column":5}]},{"StartTime":298620.0,"Objects":[{"StartTime":298620.0,"EndTime":298735.0,"Column":6}]},{"StartTime":298850.0,"Objects":[{"StartTime":298850.0,"EndTime":298850.0,"Column":0},{"StartTime":298850.0,"EndTime":298850.0,"Column":1}]},{"StartTime":298966.0,"Objects":[{"StartTime":298966.0,"EndTime":298966.0,"Column":4},{"StartTime":298966.0,"EndTime":298966.0,"Column":5}]},{"StartTime":299081.0,"Objects":[{"StartTime":299081.0,"EndTime":299081.0,"Column":6},{"StartTime":299081.0,"EndTime":299081.0,"Column":0},{"StartTime":299081.0,"EndTime":299081.0,"Column":1}]},{"StartTime":299197.0,"Objects":[{"StartTime":299197.0,"EndTime":299427.0,"Column":5}]},{"StartTime":299543.0,"Objects":[{"StartTime":299543.0,"EndTime":299543.0,"Column":1},{"StartTime":299543.0,"EndTime":299543.0,"Column":6}]},{"StartTime":299658.0,"Objects":[{"StartTime":299658.0,"EndTime":299888.0,"Column":3},{"StartTime":299658.0,"EndTime":299888.0,"Column":4}]},{"StartTime":300004.0,"Objects":[{"StartTime":300004.0,"EndTime":300004.0,"Column":2},{"StartTime":300004.0,"EndTime":300004.0,"Column":1}]},{"StartTime":300120.0,"Objects":[{"StartTime":300120.0,"EndTime":300235.0,"Column":6}]},{"StartTime":300350.0,"Objects":[{"StartTime":300350.0,"EndTime":300523.0,"Column":0},{"StartTime":300350.0,"EndTime":300523.0,"Column":4}]},{"StartTime":300581.0,"Objects":[{"StartTime":300581.0,"EndTime":300696.0,"Column":6},{"StartTime":300581.0,"EndTime":300696.0,"Column":3},{"StartTime":300581.0,"EndTime":300696.0,"Column":1}]},{"StartTime":300812.0,"Objects":[{"StartTime":300812.0,"EndTime":300927.0,"Column":2},{"StartTime":300812.0,"EndTime":300927.0,"Column":4}]},{"StartTime":301043.0,"Objects":[{"StartTime":301043.0,"EndTime":301273.0,"Column":3},{"StartTime":301043.0,"EndTime":301273.0,"Column":1}]},{"StartTime":301389.0,"Objects":[{"StartTime":301389.0,"EndTime":301389.0,"Column":0},{"StartTime":301389.0,"EndTime":301389.0,"Column":6},{"StartTime":301389.0,"EndTime":301389.0,"Column":4}]},{"StartTime":301504.0,"Objects":[{"StartTime":301504.0,"EndTime":301734.0,"Column":1}]},{"StartTime":301850.0,"Objects":[{"StartTime":301850.0,"EndTime":301850.0,"Column":3},{"StartTime":301850.0,"EndTime":301850.0,"Column":2}]},{"StartTime":301966.0,"Objects":[{"StartTime":301966.0,"EndTime":302081.0,"Column":0}]},{"StartTime":302197.0,"Objects":[{"StartTime":302197.0,"EndTime":302312.0,"Column":5},{"StartTime":302197.0,"EndTime":302312.0,"Column":6},{"StartTime":302197.0,"EndTime":302312.0,"Column":3}]},{"StartTime":302427.0,"Objects":[{"StartTime":302427.0,"EndTime":302657.0,"Column":1}]},{"StartTime":302773.0,"Objects":[{"StartTime":302773.0,"EndTime":302773.0,"Column":2},{"StartTime":302773.0,"EndTime":302773.0,"Column":3}]},{"StartTime":302889.0,"Objects":[{"StartTime":302889.0,"EndTime":303004.0,"Column":4},{"StartTime":302889.0,"EndTime":303004.0,"Column":6}]},{"StartTime":303120.0,"Objects":[{"StartTime":303120.0,"EndTime":303235.0,"Column":3},{"StartTime":303120.0,"EndTime":303235.0,"Column":0},{"StartTime":303120.0,"EndTime":303235.0,"Column":2}]},{"StartTime":303350.0,"Objects":[{"StartTime":303350.0,"EndTime":303580.0,"Column":1}]},{"StartTime":303697.0,"Objects":[{"StartTime":303697.0,"EndTime":303697.0,"Column":0},{"StartTime":303697.0,"EndTime":303697.0,"Column":5}]},{"StartTime":303812.0,"Objects":[{"StartTime":303812.0,"EndTime":304042.0,"Column":2}]},{"StartTime":304158.0,"Objects":[{"StartTime":304158.0,"EndTime":304158.0,"Column":0},{"StartTime":304158.0,"EndTime":304158.0,"Column":1}]},{"StartTime":304273.0,"Objects":[{"StartTime":304273.0,"EndTime":304388.0,"Column":5},{"StartTime":304273.0,"EndTime":304388.0,"Column":6}]},{"StartTime":304504.0,"Objects":[{"StartTime":304504.0,"EndTime":304619.0,"Column":0},{"StartTime":304504.0,"EndTime":304619.0,"Column":4}]},{"StartTime":304735.0,"Objects":[{"StartTime":304735.0,"EndTime":304965.0,"Column":3},{"StartTime":304735.0,"EndTime":304965.0,"Column":6}]},{"StartTime":305081.0,"Objects":[{"StartTime":305081.0,"EndTime":305311.0,"Column":1},{"StartTime":305081.0,"EndTime":305311.0,"Column":4},{"StartTime":305081.0,"EndTime":305311.0,"Column":2}]},{"StartTime":305427.0,"Objects":[{"StartTime":305427.0,"EndTime":305427.0,"Column":5},{"StartTime":305427.0,"EndTime":305427.0,"Column":6}]},{"StartTime":305543.0,"Objects":[{"StartTime":305543.0,"EndTime":305543.0,"Column":0},{"StartTime":305543.0,"EndTime":305543.0,"Column":2}]},{"StartTime":305658.0,"Objects":[{"StartTime":305658.0,"EndTime":305888.0,"Column":5}]},{"StartTime":306004.0,"Objects":[{"StartTime":306004.0,"EndTime":306004.0,"Column":4}]},{"StartTime":306120.0,"Objects":[{"StartTime":306120.0,"EndTime":306235.0,"Column":3},{"StartTime":306120.0,"EndTime":306235.0,"Column":2}]},{"StartTime":306350.0,"Objects":[{"StartTime":306350.0,"EndTime":306465.0,"Column":4},{"StartTime":306350.0,"EndTime":306465.0,"Column":5},{"StartTime":306350.0,"EndTime":306465.0,"Column":1}]},{"StartTime":306581.0,"Objects":[{"StartTime":306581.0,"EndTime":306696.0,"Column":2},{"StartTime":306581.0,"EndTime":306696.0,"Column":6}]},{"StartTime":306812.0,"Objects":[{"StartTime":306812.0,"EndTime":306812.0,"Column":1},{"StartTime":306812.0,"EndTime":306812.0,"Column":3},{"StartTime":306812.0,"EndTime":306812.0,"Column":4}]},{"StartTime":306927.0,"Objects":[{"StartTime":306927.0,"EndTime":306927.0,"Column":2}]},{"StartTime":307043.0,"Objects":[{"StartTime":307043.0,"EndTime":307273.0,"Column":4},{"StartTime":307043.0,"EndTime":307273.0,"Column":6}]},{"StartTime":307389.0,"Objects":[{"StartTime":307389.0,"EndTime":307389.0,"Column":5},{"StartTime":307389.0,"EndTime":307389.0,"Column":1}]},{"StartTime":307504.0,"Objects":[{"StartTime":307504.0,"EndTime":307619.0,"Column":0},{"StartTime":307504.0,"EndTime":307619.0,"Column":2}]},{"StartTime":307735.0,"Objects":[{"StartTime":307735.0,"EndTime":307850.0,"Column":5},{"StartTime":307735.0,"EndTime":307850.0,"Column":4}]},{"StartTime":307966.0,"Objects":[{"StartTime":307966.0,"EndTime":308081.0,"Column":1},{"StartTime":307966.0,"EndTime":308081.0,"Column":3}]},{"StartTime":308197.0,"Objects":[{"StartTime":308197.0,"EndTime":308312.0,"Column":0},{"StartTime":308197.0,"EndTime":308312.0,"Column":2}]},{"StartTime":308427.0,"Objects":[{"StartTime":308427.0,"EndTime":308427.0,"Column":6},{"StartTime":308427.0,"EndTime":308427.0,"Column":5}]},{"StartTime":308543.0,"Objects":[{"StartTime":308543.0,"EndTime":308543.0,"Column":0}]},{"StartTime":308658.0,"Objects":[{"StartTime":308658.0,"EndTime":308658.0,"Column":5},{"StartTime":308658.0,"EndTime":308658.0,"Column":6}]},{"StartTime":308889.0,"Objects":[{"StartTime":308889.0,"EndTime":308889.0,"Column":1},{"StartTime":308889.0,"EndTime":308889.0,"Column":0}]},{"StartTime":309004.0,"Objects":[{"StartTime":309004.0,"EndTime":309004.0,"Column":3},{"StartTime":309004.0,"EndTime":309004.0,"Column":4}]},{"StartTime":309062.0,"Objects":[{"StartTime":309062.0,"EndTime":309062.0,"Column":2}]},{"StartTime":309120.0,"Objects":[{"StartTime":309120.0,"EndTime":309120.0,"Column":3}]},{"StartTime":309177.0,"Objects":[{"StartTime":309177.0,"EndTime":309177.0,"Column":0}]},{"StartTime":309235.0,"Objects":[{"StartTime":309235.0,"EndTime":309235.0,"Column":3}]},{"StartTime":309293.0,"Objects":[{"StartTime":309293.0,"EndTime":309293.0,"Column":1}]},{"StartTime":309350.0,"Objects":[{"StartTime":309350.0,"EndTime":309350.0,"Column":3}]},{"StartTime":309408.0,"Objects":[{"StartTime":309408.0,"EndTime":309408.0,"Column":0}]},{"StartTime":309466.0,"Objects":[{"StartTime":309466.0,"EndTime":309466.0,"Column":2}]},{"StartTime":309523.0,"Objects":[{"StartTime":309523.0,"EndTime":309523.0,"Column":1}]},{"StartTime":309581.0,"Objects":[{"StartTime":309581.0,"EndTime":309581.0,"Column":4}]},{"StartTime":309639.0,"Objects":[{"StartTime":309639.0,"EndTime":309639.0,"Column":1}]},{"StartTime":309697.0,"Objects":[{"StartTime":309697.0,"EndTime":309697.0,"Column":3}]},{"StartTime":309754.0,"Objects":[{"StartTime":309754.0,"EndTime":309754.0,"Column":1}]},{"StartTime":309812.0,"Objects":[{"StartTime":309812.0,"EndTime":309812.0,"Column":2}]},{"StartTime":309927.0,"Objects":[{"StartTime":309927.0,"EndTime":309927.0,"Column":3}]},{"StartTime":310043.0,"Objects":[{"StartTime":310043.0,"EndTime":310043.0,"Column":4}]},{"StartTime":310158.0,"Objects":[{"StartTime":310158.0,"EndTime":310158.0,"Column":6}]},{"StartTime":310216.0,"Objects":[{"StartTime":310216.0,"EndTime":310216.0,"Column":5}]},{"StartTime":310273.0,"Objects":[{"StartTime":310273.0,"EndTime":310503.0,"Column":0},{"StartTime":310273.0,"EndTime":310503.0,"Column":1}]},{"StartTime":310620.0,"Objects":[{"StartTime":310620.0,"EndTime":310620.0,"Column":5}]},{"StartTime":310735.0,"Objects":[{"StartTime":310735.0,"EndTime":310965.0,"Column":0}]},{"StartTime":311081.0,"Objects":[{"StartTime":311081.0,"EndTime":311081.0,"Column":3}]},{"StartTime":311197.0,"Objects":[{"StartTime":311197.0,"EndTime":311312.0,"Column":1},{"StartTime":311197.0,"EndTime":311312.0,"Column":5}]},{"StartTime":311427.0,"Objects":[{"StartTime":311427.0,"EndTime":311427.0,"Column":6},{"StartTime":311427.0,"EndTime":311427.0,"Column":0}]},{"StartTime":311658.0,"Objects":[{"StartTime":311658.0,"EndTime":311773.0,"Column":5},{"StartTime":311658.0,"EndTime":311773.0,"Column":3},{"StartTime":311658.0,"EndTime":311773.0,"Column":1}]},{"StartTime":311889.0,"Objects":[{"StartTime":311889.0,"EndTime":311889.0,"Column":6},{"StartTime":311889.0,"EndTime":311889.0,"Column":0}]},{"StartTime":312004.0,"Objects":[{"StartTime":312004.0,"EndTime":312004.0,"Column":4},{"StartTime":312004.0,"EndTime":312004.0,"Column":2}]},{"StartTime":312120.0,"Objects":[{"StartTime":312120.0,"EndTime":312350.0,"Column":0},{"StartTime":312120.0,"EndTime":312350.0,"Column":3},{"StartTime":312120.0,"EndTime":312350.0,"Column":6}]},{"StartTime":312466.0,"Objects":[{"StartTime":312466.0,"EndTime":312466.0,"Column":2},{"StartTime":312466.0,"EndTime":312466.0,"Column":1},{"StartTime":312466.0,"EndTime":312466.0,"Column":4}]},{"StartTime":312581.0,"Objects":[{"StartTime":312581.0,"EndTime":312696.0,"Column":0},{"StartTime":312581.0,"EndTime":312696.0,"Column":6}]},{"StartTime":312812.0,"Objects":[{"StartTime":312812.0,"EndTime":312927.0,"Column":5},{"StartTime":312812.0,"EndTime":312927.0,"Column":3}]},{"StartTime":313043.0,"Objects":[{"StartTime":313043.0,"EndTime":313043.0,"Column":1},{"StartTime":313043.0,"EndTime":313043.0,"Column":4}]},{"StartTime":313158.0,"Objects":[{"StartTime":313158.0,"EndTime":313158.0,"Column":0}]},{"StartTime":313273.0,"Objects":[{"StartTime":313273.0,"EndTime":313388.0,"Column":6},{"StartTime":313273.0,"EndTime":313388.0,"Column":5}]},{"StartTime":313504.0,"Objects":[{"StartTime":313504.0,"EndTime":313619.0,"Column":3},{"StartTime":313504.0,"EndTime":313619.0,"Column":0},{"StartTime":313504.0,"EndTime":313619.0,"Column":1}]},{"StartTime":313735.0,"Objects":[{"StartTime":313735.0,"EndTime":313850.0,"Column":6},{"StartTime":313735.0,"EndTime":313850.0,"Column":2}]},{"StartTime":313966.0,"Objects":[{"StartTime":313966.0,"EndTime":314196.0,"Column":3},{"StartTime":313966.0,"EndTime":314196.0,"Column":5},{"StartTime":313966.0,"EndTime":314196.0,"Column":4}]},{"StartTime":314312.0,"Objects":[{"StartTime":314312.0,"EndTime":314312.0,"Column":6},{"StartTime":314312.0,"EndTime":314312.0,"Column":0}]},{"StartTime":314427.0,"Objects":[{"StartTime":314427.0,"EndTime":314542.0,"Column":3}]},{"StartTime":314658.0,"Objects":[{"StartTime":314658.0,"EndTime":314773.0,"Column":6},{"StartTime":314658.0,"EndTime":314773.0,"Column":4},{"StartTime":314658.0,"EndTime":314773.0,"Column":2}]},{"StartTime":314889.0,"Objects":[{"StartTime":314889.0,"EndTime":315062.0,"Column":1}]},{"StartTime":315120.0,"Objects":[{"StartTime":315120.0,"EndTime":315235.0,"Column":4},{"StartTime":315120.0,"EndTime":315235.0,"Column":3}]},{"StartTime":315350.0,"Objects":[{"StartTime":315350.0,"EndTime":315580.0,"Column":1},{"StartTime":315350.0,"EndTime":315580.0,"Column":6},{"StartTime":315350.0,"EndTime":315580.0,"Column":5}]},{"StartTime":315697.0,"Objects":[{"StartTime":315697.0,"EndTime":315697.0,"Column":3},{"StartTime":315697.0,"EndTime":315697.0,"Column":2}]},{"StartTime":315812.0,"Objects":[{"StartTime":315812.0,"EndTime":315927.0,"Column":4},{"StartTime":315812.0,"EndTime":315927.0,"Column":6},{"StartTime":315812.0,"EndTime":315927.0,"Column":1}]},{"StartTime":316043.0,"Objects":[{"StartTime":316043.0,"EndTime":316158.0,"Column":0},{"StartTime":316043.0,"EndTime":316158.0,"Column":3},{"StartTime":316043.0,"EndTime":316158.0,"Column":2}]},{"StartTime":316273.0,"Objects":[{"StartTime":316273.0,"EndTime":316388.0,"Column":6},{"StartTime":316273.0,"EndTime":316388.0,"Column":1},{"StartTime":316273.0,"EndTime":316388.0,"Column":4}]},{"StartTime":316504.0,"Objects":[{"StartTime":316504.0,"EndTime":316619.0,"Column":2},{"StartTime":316504.0,"EndTime":316619.0,"Column":5},{"StartTime":316504.0,"EndTime":316619.0,"Column":0}]},{"StartTime":316735.0,"Objects":[{"StartTime":316735.0,"EndTime":316965.0,"Column":1},{"StartTime":316735.0,"EndTime":316965.0,"Column":4}]},{"StartTime":317081.0,"Objects":[{"StartTime":317081.0,"EndTime":317081.0,"Column":0},{"StartTime":317081.0,"EndTime":317081.0,"Column":3},{"StartTime":317081.0,"EndTime":317081.0,"Column":5}]},{"StartTime":317197.0,"Objects":[{"StartTime":317197.0,"EndTime":317427.0,"Column":6},{"StartTime":317197.0,"EndTime":317427.0,"Column":2}]},{"StartTime":317543.0,"Objects":[{"StartTime":317543.0,"EndTime":317543.0,"Column":4},{"StartTime":317543.0,"EndTime":317543.0,"Column":5}]},{"StartTime":317600.0,"Objects":[{"StartTime":317600.0,"EndTime":317600.0,"Column":6}]},{"StartTime":317658.0,"Objects":[{"StartTime":317658.0,"EndTime":317888.0,"Column":1},{"StartTime":317658.0,"EndTime":317888.0,"Column":3}]},{"StartTime":318004.0,"Objects":[{"StartTime":318004.0,"EndTime":318004.0,"Column":2}]},{"StartTime":318120.0,"Objects":[{"StartTime":318120.0,"EndTime":318235.0,"Column":0}]},{"StartTime":318350.0,"Objects":[{"StartTime":318350.0,"EndTime":318465.0,"Column":3},{"StartTime":318350.0,"EndTime":318465.0,"Column":1}]},{"StartTime":318581.0,"Objects":[{"StartTime":318581.0,"EndTime":318811.0,"Column":4},{"StartTime":318581.0,"EndTime":318811.0,"Column":5}]},{"StartTime":318927.0,"Objects":[{"StartTime":318927.0,"EndTime":318927.0,"Column":6},{"StartTime":318927.0,"EndTime":318927.0,"Column":1}]},{"StartTime":319043.0,"Objects":[{"StartTime":319043.0,"EndTime":319273.0,"Column":4},{"StartTime":319043.0,"EndTime":319273.0,"Column":0}]},{"StartTime":319389.0,"Objects":[{"StartTime":319389.0,"EndTime":319389.0,"Column":5}]},{"StartTime":319504.0,"Objects":[{"StartTime":319504.0,"EndTime":319734.0,"Column":1},{"StartTime":319504.0,"EndTime":319734.0,"Column":2}]},{"StartTime":319966.0,"Objects":[{"StartTime":319966.0,"EndTime":320081.0,"Column":3},{"StartTime":319966.0,"EndTime":320081.0,"Column":6}]},{"StartTime":320197.0,"Objects":[{"StartTime":320197.0,"EndTime":320312.0,"Column":4},{"StartTime":320197.0,"EndTime":320312.0,"Column":1}]},{"StartTime":320427.0,"Objects":[{"StartTime":320427.0,"EndTime":320657.0,"Column":0},{"StartTime":320427.0,"EndTime":320657.0,"Column":6},{"StartTime":320427.0,"EndTime":320657.0,"Column":3}]},{"StartTime":320773.0,"Objects":[{"StartTime":320773.0,"EndTime":320773.0,"Column":1}]},{"StartTime":320889.0,"Objects":[{"StartTime":320889.0,"EndTime":321004.0,"Column":4},{"StartTime":320889.0,"EndTime":321004.0,"Column":6}]},{"StartTime":321120.0,"Objects":[{"StartTime":321120.0,"EndTime":321235.0,"Column":0},{"StartTime":321120.0,"EndTime":321235.0,"Column":2}]},{"StartTime":321350.0,"Objects":[{"StartTime":321350.0,"EndTime":321811.0,"Column":4},{"StartTime":321350.0,"EndTime":321350.0,"Column":0},{"StartTime":321350.0,"EndTime":321350.0,"Column":6},{"StartTime":321580.0,"EndTime":321580.0,"Column":6},{"StartTime":321580.0,"EndTime":321580.0,"Column":0},{"StartTime":321810.0,"EndTime":321810.0,"Column":0},{"StartTime":321810.0,"EndTime":321810.0,"Column":2}]},{"StartTime":321927.0,"Objects":[{"StartTime":321927.0,"EndTime":321927.0,"Column":2}]},{"StartTime":322043.0,"Objects":[{"StartTime":322043.0,"EndTime":322158.0,"Column":3},{"StartTime":322043.0,"EndTime":322158.0,"Column":1}]},{"StartTime":322273.0,"Objects":[{"StartTime":322273.0,"EndTime":322388.0,"Column":4},{"StartTime":322273.0,"EndTime":322388.0,"Column":6}]},{"StartTime":322504.0,"Objects":[{"StartTime":322504.0,"EndTime":322619.0,"Column":3},{"StartTime":322504.0,"EndTime":322619.0,"Column":5}]},{"StartTime":322735.0,"Objects":[{"StartTime":322735.0,"EndTime":322850.0,"Column":0},{"StartTime":322735.0,"EndTime":322850.0,"Column":1}]},{"StartTime":322966.0,"Objects":[{"StartTime":322966.0,"EndTime":322966.0,"Column":3},{"StartTime":322966.0,"EndTime":322966.0,"Column":4},{"StartTime":322966.0,"EndTime":322966.0,"Column":5}]},{"StartTime":323081.0,"Objects":[{"StartTime":323081.0,"EndTime":323081.0,"Column":2},{"StartTime":323081.0,"EndTime":323081.0,"Column":6}]},{"StartTime":323197.0,"Objects":[{"StartTime":323197.0,"EndTime":323312.0,"Column":0}]},{"StartTime":323427.0,"Objects":[{"StartTime":323427.0,"EndTime":323542.0,"Column":6},{"StartTime":323427.0,"EndTime":323542.0,"Column":5}]},{"StartTime":323658.0,"Objects":[{"StartTime":323658.0,"EndTime":323773.0,"Column":4},{"StartTime":323658.0,"EndTime":323773.0,"Column":1},{"StartTime":323658.0,"EndTime":323773.0,"Column":0}]},{"StartTime":323888.0,"Objects":[{"StartTime":323888.0,"EndTime":324003.0,"Column":5},{"StartTime":323888.0,"EndTime":324003.0,"Column":3}]},{"StartTime":324120.0,"Objects":[{"StartTime":324120.0,"EndTime":324120.0,"Column":1}]},{"StartTime":324177.0,"Objects":[{"StartTime":324177.0,"EndTime":324177.0,"Column":0}]},{"StartTime":324235.0,"Objects":[{"StartTime":324235.0,"EndTime":324235.0,"Column":3}]},{"StartTime":324293.0,"Objects":[{"StartTime":324293.0,"EndTime":324293.0,"Column":0}]},{"StartTime":324350.0,"Objects":[{"StartTime":324350.0,"EndTime":324350.0,"Column":2}]},{"StartTime":324408.0,"Objects":[{"StartTime":324408.0,"EndTime":324408.0,"Column":0}]},{"StartTime":324466.0,"Objects":[{"StartTime":324466.0,"EndTime":324466.0,"Column":5}]},{"StartTime":324523.0,"Objects":[{"StartTime":324523.0,"EndTime":324523.0,"Column":0}]},{"StartTime":324581.0,"Objects":[{"StartTime":324581.0,"EndTime":324581.0,"Column":1}]},{"StartTime":324638.0,"Objects":[{"StartTime":324638.0,"EndTime":324638.0,"Column":2}]},{"StartTime":324696.0,"Objects":[{"StartTime":324696.0,"EndTime":324696.0,"Column":0}]},{"StartTime":324754.0,"Objects":[{"StartTime":324754.0,"EndTime":324754.0,"Column":2}]},{"StartTime":324811.0,"Objects":[{"StartTime":324811.0,"EndTime":324811.0,"Column":3}]},{"StartTime":324870.0,"Objects":[{"StartTime":324870.0,"EndTime":324870.0,"Column":1}]},{"StartTime":324927.0,"Objects":[{"StartTime":324927.0,"EndTime":324927.0,"Column":5}]},{"StartTime":324985.0,"Objects":[{"StartTime":324985.0,"EndTime":324985.0,"Column":2}]},{"StartTime":325043.0,"Objects":[{"StartTime":325043.0,"EndTime":325273.0,"Column":3},{"StartTime":325043.0,"EndTime":325273.0,"Column":4}]},{"StartTime":325389.0,"Objects":[{"StartTime":325389.0,"EndTime":325389.0,"Column":6},{"StartTime":325389.0,"EndTime":325389.0,"Column":1},{"StartTime":325389.0,"EndTime":325389.0,"Column":5}]},{"StartTime":325504.0,"Objects":[{"StartTime":325504.0,"EndTime":325734.0,"Column":3},{"StartTime":325504.0,"EndTime":325734.0,"Column":4}]},{"StartTime":325850.0,"Objects":[{"StartTime":325850.0,"EndTime":325850.0,"Column":0}]},{"StartTime":325966.0,"Objects":[{"StartTime":325966.0,"EndTime":326081.0,"Column":4},{"StartTime":325966.0,"EndTime":326081.0,"Column":1}]},{"StartTime":326197.0,"Objects":[{"StartTime":326197.0,"EndTime":326197.0,"Column":3},{"StartTime":326197.0,"EndTime":326197.0,"Column":5}]},{"StartTime":326427.0,"Objects":[{"StartTime":326427.0,"EndTime":326542.0,"Column":1},{"StartTime":326427.0,"EndTime":326542.0,"Column":6},{"StartTime":326427.0,"EndTime":326542.0,"Column":2}]},{"StartTime":326658.0,"Objects":[{"StartTime":326658.0,"EndTime":326773.0,"Column":0},{"StartTime":326658.0,"EndTime":326773.0,"Column":3}]},{"StartTime":326889.0,"Objects":[{"StartTime":326889.0,"EndTime":327119.0,"Column":1}]},{"StartTime":327235.0,"Objects":[{"StartTime":327235.0,"EndTime":327235.0,"Column":6},{"StartTime":327235.0,"EndTime":327235.0,"Column":0}]},{"StartTime":327350.0,"Objects":[{"StartTime":327350.0,"EndTime":327465.0,"Column":2},{"StartTime":327350.0,"EndTime":327465.0,"Column":5}]},{"StartTime":327581.0,"Objects":[{"StartTime":327581.0,"EndTime":327696.0,"Column":4},{"StartTime":327581.0,"EndTime":327696.0,"Column":0}]},{"StartTime":327812.0,"Objects":[{"StartTime":327812.0,"EndTime":327812.0,"Column":6},{"StartTime":327812.0,"EndTime":327812.0,"Column":2}]},{"StartTime":327927.0,"Objects":[{"StartTime":327927.0,"EndTime":327927.0,"Column":4},{"StartTime":327927.0,"EndTime":327927.0,"Column":5}]},{"StartTime":328043.0,"Objects":[{"StartTime":328043.0,"EndTime":328158.0,"Column":2},{"StartTime":328043.0,"EndTime":328158.0,"Column":0}]},{"StartTime":328273.0,"Objects":[{"StartTime":328273.0,"EndTime":328388.0,"Column":4}]},{"StartTime":328504.0,"Objects":[{"StartTime":328504.0,"EndTime":328619.0,"Column":5},{"StartTime":328504.0,"EndTime":328619.0,"Column":0}]},{"StartTime":328735.0,"Objects":[{"StartTime":328735.0,"EndTime":328965.0,"Column":4},{"StartTime":328735.0,"EndTime":328965.0,"Column":6},{"StartTime":328735.0,"EndTime":328965.0,"Column":1}]},{"StartTime":329081.0,"Objects":[{"StartTime":329081.0,"EndTime":329081.0,"Column":2}]},{"StartTime":329197.0,"Objects":[{"StartTime":329197.0,"EndTime":329312.0,"Column":6},{"StartTime":329197.0,"EndTime":329312.0,"Column":0}]},{"StartTime":329427.0,"Objects":[{"StartTime":329427.0,"EndTime":329542.0,"Column":2},{"StartTime":329427.0,"EndTime":329542.0,"Column":3}]},{"StartTime":329658.0,"Objects":[{"StartTime":329658.0,"EndTime":329831.0,"Column":1},{"StartTime":329658.0,"EndTime":329831.0,"Column":4}]},{"StartTime":329889.0,"Objects":[{"StartTime":329889.0,"EndTime":330004.0,"Column":3},{"StartTime":329889.0,"EndTime":330004.0,"Column":6}]},{"StartTime":330120.0,"Objects":[{"StartTime":330120.0,"EndTime":330235.0,"Column":1},{"StartTime":330120.0,"EndTime":330235.0,"Column":4}]},{"StartTime":330350.0,"Objects":[{"StartTime":330350.0,"EndTime":330465.0,"Column":2},{"StartTime":330350.0,"EndTime":330465.0,"Column":5}]},{"StartTime":330581.0,"Objects":[{"StartTime":330581.0,"EndTime":330754.0,"Column":3}]},{"StartTime":330812.0,"Objects":[{"StartTime":330812.0,"EndTime":330927.0,"Column":6},{"StartTime":330812.0,"EndTime":330927.0,"Column":1}]},{"StartTime":331043.0,"Objects":[{"StartTime":331043.0,"EndTime":331158.0,"Column":2},{"StartTime":331043.0,"EndTime":331158.0,"Column":4}]},{"StartTime":331273.0,"Objects":[{"StartTime":331273.0,"EndTime":331388.0,"Column":6},{"StartTime":331273.0,"EndTime":331388.0,"Column":3}]},{"StartTime":331504.0,"Objects":[{"StartTime":331504.0,"EndTime":331677.0,"Column":4}]},{"StartTime":331735.0,"Objects":[{"StartTime":331735.0,"EndTime":331850.0,"Column":1},{"StartTime":331735.0,"EndTime":331850.0,"Column":2}]},{"StartTime":331966.0,"Objects":[{"StartTime":331966.0,"EndTime":331966.0,"Column":0},{"StartTime":331966.0,"EndTime":331966.0,"Column":4},{"StartTime":331966.0,"EndTime":331966.0,"Column":3}]},{"StartTime":332081.0,"Objects":[{"StartTime":332081.0,"EndTime":332081.0,"Column":2},{"StartTime":332081.0,"EndTime":332081.0,"Column":5}]},{"StartTime":332138.0,"Objects":[{"StartTime":332138.0,"EndTime":332138.0,"Column":0}]},{"StartTime":332196.0,"Objects":[{"StartTime":332196.0,"EndTime":332196.0,"Column":1}]},{"StartTime":332254.0,"Objects":[{"StartTime":332254.0,"EndTime":332254.0,"Column":5}]},{"StartTime":332312.0,"Objects":[{"StartTime":332312.0,"EndTime":332312.0,"Column":0}]},{"StartTime":332370.0,"Objects":[{"StartTime":332370.0,"EndTime":332370.0,"Column":2}]},{"StartTime":332427.0,"Objects":[{"StartTime":332427.0,"EndTime":332657.0,"Column":1},{"StartTime":332427.0,"EndTime":332657.0,"Column":4}]},{"StartTime":332773.0,"Objects":[{"StartTime":332773.0,"EndTime":332773.0,"Column":3}]},{"StartTime":332889.0,"Objects":[{"StartTime":332889.0,"EndTime":333004.0,"Column":5},{"StartTime":332889.0,"EndTime":333004.0,"Column":2}]},{"StartTime":333120.0,"Objects":[{"StartTime":333120.0,"EndTime":333235.0,"Column":6},{"StartTime":333120.0,"EndTime":333235.0,"Column":0}]},{"StartTime":333350.0,"Objects":[{"StartTime":333350.0,"EndTime":333523.0,"Column":1},{"StartTime":333350.0,"EndTime":333523.0,"Column":5}]},{"StartTime":333581.0,"Objects":[{"StartTime":333581.0,"EndTime":333696.0,"Column":3},{"StartTime":333581.0,"EndTime":333696.0,"Column":2}]},{"StartTime":333812.0,"Objects":[{"StartTime":333812.0,"EndTime":333927.0,"Column":1},{"StartTime":333812.0,"EndTime":333927.0,"Column":5}]},{"StartTime":334043.0,"Objects":[{"StartTime":334043.0,"EndTime":334158.0,"Column":0},{"StartTime":334043.0,"EndTime":334158.0,"Column":6}]},{"StartTime":334273.0,"Objects":[{"StartTime":334273.0,"EndTime":334503.0,"Column":3},{"StartTime":334273.0,"EndTime":334503.0,"Column":4},{"StartTime":334273.0,"EndTime":334503.0,"Column":5}]},{"StartTime":334735.0,"Objects":[{"StartTime":334735.0,"EndTime":334850.0,"Column":1},{"StartTime":334735.0,"EndTime":334850.0,"Column":0}]},{"StartTime":334966.0,"Objects":[{"StartTime":334966.0,"EndTime":335081.0,"Column":6},{"StartTime":334966.0,"EndTime":335081.0,"Column":4}]},{"StartTime":335197.0,"Objects":[{"StartTime":335197.0,"EndTime":335427.0,"Column":3}]},{"StartTime":335543.0,"Objects":[{"StartTime":335543.0,"EndTime":335543.0,"Column":5}]},{"StartTime":335658.0,"Objects":[{"StartTime":335658.0,"EndTime":335888.0,"Column":1},{"StartTime":335658.0,"EndTime":335888.0,"Column":4}]},{"StartTime":336004.0,"Objects":[{"StartTime":336004.0,"EndTime":336004.0,"Column":3},{"StartTime":336004.0,"EndTime":336004.0,"Column":5}]},{"StartTime":336120.0,"Objects":[{"StartTime":336120.0,"EndTime":336293.0,"Column":1}]},{"StartTime":336350.0,"Objects":[{"StartTime":336350.0,"EndTime":336465.0,"Column":5},{"StartTime":336350.0,"EndTime":336465.0,"Column":2}]},{"StartTime":336581.0,"Objects":[{"StartTime":336581.0,"EndTime":336696.0,"Column":1}]},{"StartTime":336812.0,"Objects":[{"StartTime":336812.0,"EndTime":336927.0,"Column":0},{"StartTime":336812.0,"EndTime":336927.0,"Column":5},{"StartTime":336812.0,"EndTime":336927.0,"Column":2}]},{"StartTime":337043.0,"Objects":[{"StartTime":337043.0,"EndTime":337043.0,"Column":3}]},{"StartTime":337100.0,"Objects":[{"StartTime":337100.0,"EndTime":337100.0,"Column":5}]},{"StartTime":337158.0,"Objects":[{"StartTime":337158.0,"EndTime":337158.0,"Column":2}]},{"StartTime":337216.0,"Objects":[{"StartTime":337216.0,"EndTime":337216.0,"Column":1}]},{"StartTime":337273.0,"Objects":[{"StartTime":337273.0,"EndTime":337273.0,"Column":2}]},{"StartTime":337331.0,"Objects":[{"StartTime":337331.0,"EndTime":337331.0,"Column":4}]},{"StartTime":337389.0,"Objects":[{"StartTime":337389.0,"EndTime":337389.0,"Column":2}]},{"StartTime":337446.0,"Objects":[{"StartTime":337446.0,"EndTime":337446.0,"Column":6}]},{"StartTime":337504.0,"Objects":[{"StartTime":337504.0,"EndTime":337504.0,"Column":2}]},{"StartTime":337561.0,"Objects":[{"StartTime":337561.0,"EndTime":337561.0,"Column":3}]},{"StartTime":337619.0,"Objects":[{"StartTime":337619.0,"EndTime":337619.0,"Column":2}]},{"StartTime":337677.0,"Objects":[{"StartTime":337677.0,"EndTime":337677.0,"Column":3}]},{"StartTime":337734.0,"Objects":[{"StartTime":337734.0,"EndTime":337734.0,"Column":5}]},{"StartTime":337793.0,"Objects":[{"StartTime":337793.0,"EndTime":337793.0,"Column":2}]},{"StartTime":337851.0,"Objects":[{"StartTime":337851.0,"EndTime":337851.0,"Column":0}]},{"StartTime":337909.0,"Objects":[{"StartTime":337909.0,"EndTime":337909.0,"Column":2}]},{"StartTime":337966.0,"Objects":[{"StartTime":337966.0,"EndTime":338196.0,"Column":5},{"StartTime":337966.0,"EndTime":338196.0,"Column":4}]},{"StartTime":338312.0,"Objects":[{"StartTime":338312.0,"EndTime":338312.0,"Column":6},{"StartTime":338312.0,"EndTime":338312.0,"Column":1}]},{"StartTime":338427.0,"Objects":[{"StartTime":338427.0,"EndTime":338657.0,"Column":3},{"StartTime":338427.0,"EndTime":338657.0,"Column":0}]},{"StartTime":338773.0,"Objects":[{"StartTime":338773.0,"EndTime":338773.0,"Column":6},{"StartTime":338773.0,"EndTime":338773.0,"Column":2}]},{"StartTime":338889.0,"Objects":[{"StartTime":338889.0,"EndTime":339004.0,"Column":1},{"StartTime":338889.0,"EndTime":339004.0,"Column":0},{"StartTime":338889.0,"EndTime":339004.0,"Column":5}]},{"StartTime":339120.0,"Objects":[{"StartTime":339120.0,"EndTime":339235.0,"Column":6},{"StartTime":339120.0,"EndTime":339235.0,"Column":3}]},{"StartTime":339350.0,"Objects":[{"StartTime":339350.0,"EndTime":339350.0,"Column":4},{"StartTime":339350.0,"EndTime":339350.0,"Column":5}]},{"StartTime":339407.0,"Objects":[{"StartTime":339407.0,"EndTime":339407.0,"Column":2}]},{"StartTime":339465.0,"Objects":[{"StartTime":339465.0,"EndTime":339465.0,"Column":4}]},{"StartTime":339523.0,"Objects":[{"StartTime":339523.0,"EndTime":339523.0,"Column":3}]},{"StartTime":339580.0,"Objects":[{"StartTime":339580.0,"EndTime":339580.0,"Column":4}]},{"StartTime":339638.0,"Objects":[{"StartTime":339638.0,"EndTime":339638.0,"Column":2}]},{"StartTime":339696.0,"Objects":[{"StartTime":339696.0,"EndTime":339696.0,"Column":4}]},{"StartTime":339753.0,"Objects":[{"StartTime":339753.0,"EndTime":339753.0,"Column":0}]},{"StartTime":339812.0,"Objects":[{"StartTime":339812.0,"EndTime":340042.0,"Column":6},{"StartTime":339812.0,"EndTime":340042.0,"Column":4},{"StartTime":339812.0,"EndTime":340042.0,"Column":1}]},{"StartTime":340158.0,"Objects":[{"StartTime":340158.0,"EndTime":340158.0,"Column":5},{"StartTime":340158.0,"EndTime":340158.0,"Column":3},{"StartTime":340158.0,"EndTime":340158.0,"Column":0}]},{"StartTime":340273.0,"Objects":[{"StartTime":340273.0,"EndTime":340388.0,"Column":6},{"StartTime":340273.0,"EndTime":340388.0,"Column":2}]},{"StartTime":340504.0,"Objects":[{"StartTime":340504.0,"EndTime":340619.0,"Column":3},{"StartTime":340504.0,"EndTime":340619.0,"Column":4}]},{"StartTime":340735.0,"Objects":[{"StartTime":340735.0,"EndTime":340965.0,"Column":5},{"StartTime":340735.0,"EndTime":340965.0,"Column":6}]},{"StartTime":341081.0,"Objects":[{"StartTime":341081.0,"EndTime":341081.0,"Column":3}]},{"StartTime":341197.0,"Objects":[{"StartTime":341197.0,"EndTime":341312.0,"Column":1},{"StartTime":341197.0,"EndTime":341312.0,"Column":2},{"StartTime":341197.0,"EndTime":341312.0,"Column":5}]},{"StartTime":341427.0,"Objects":[{"StartTime":341427.0,"EndTime":341542.0,"Column":6},{"StartTime":341427.0,"EndTime":341542.0,"Column":0},{"StartTime":341427.0,"EndTime":341542.0,"Column":4}]},{"StartTime":341658.0,"Objects":[{"StartTime":341658.0,"EndTime":341888.0,"Column":3},{"StartTime":341658.0,"EndTime":341888.0,"Column":2},{"StartTime":341658.0,"EndTime":341888.0,"Column":5}]},{"StartTime":342004.0,"Objects":[{"StartTime":342004.0,"EndTime":342004.0,"Column":1},{"StartTime":342004.0,"EndTime":342004.0,"Column":4},{"StartTime":342004.0,"EndTime":342004.0,"Column":0}]},{"StartTime":342120.0,"Objects":[{"StartTime":342120.0,"EndTime":342235.0,"Column":3}]},{"StartTime":342350.0,"Objects":[{"StartTime":342350.0,"EndTime":342465.0,"Column":4},{"StartTime":342350.0,"EndTime":342465.0,"Column":6}]},{"StartTime":342581.0,"Objects":[{"StartTime":342581.0,"EndTime":342811.0,"Column":3},{"StartTime":342581.0,"EndTime":342811.0,"Column":5}]},{"StartTime":342927.0,"Objects":[{"StartTime":342927.0,"EndTime":342927.0,"Column":0},{"StartTime":342927.0,"EndTime":342927.0,"Column":4},{"StartTime":342927.0,"EndTime":342927.0,"Column":1}]},{"StartTime":343043.0,"Objects":[{"StartTime":343043.0,"EndTime":343273.0,"Column":3}]},{"StartTime":343389.0,"Objects":[{"StartTime":343389.0,"EndTime":343389.0,"Column":6},{"StartTime":343389.0,"EndTime":343389.0,"Column":0}]},{"StartTime":343447.0,"Objects":[{"StartTime":343447.0,"EndTime":343447.0,"Column":5}]},{"StartTime":343504.0,"Objects":[{"StartTime":343504.0,"EndTime":343734.0,"Column":1},{"StartTime":343504.0,"EndTime":343734.0,"Column":0}]},{"StartTime":343850.0,"Objects":[{"StartTime":343850.0,"EndTime":344080.0,"Column":6},{"StartTime":343850.0,"EndTime":344080.0,"Column":2}]},{"StartTime":344197.0,"Objects":[{"StartTime":344197.0,"EndTime":344312.0,"Column":3},{"StartTime":344197.0,"EndTime":344312.0,"Column":0}]},{"StartTime":344370.0,"Objects":[{"StartTime":344370.0,"EndTime":344370.0,"Column":5}]},{"StartTime":344427.0,"Objects":[{"StartTime":344427.0,"EndTime":344657.0,"Column":2},{"StartTime":344427.0,"EndTime":344657.0,"Column":3}]},{"StartTime":344773.0,"Objects":[{"StartTime":344773.0,"EndTime":344773.0,"Column":1},{"StartTime":344773.0,"EndTime":344773.0,"Column":6}]},{"StartTime":344889.0,"Objects":[{"StartTime":344889.0,"EndTime":345004.0,"Column":3},{"StartTime":344889.0,"EndTime":345004.0,"Column":4}]},{"StartTime":345120.0,"Objects":[{"StartTime":345120.0,"EndTime":345235.0,"Column":0},{"StartTime":345120.0,"EndTime":345235.0,"Column":6}]},{"StartTime":345350.0,"Objects":[{"StartTime":345350.0,"EndTime":345465.0,"Column":1},{"StartTime":345350.0,"EndTime":345465.0,"Column":3},{"StartTime":345350.0,"EndTime":345465.0,"Column":5}]},{"StartTime":345581.0,"Objects":[{"StartTime":345581.0,"EndTime":345696.0,"Column":0},{"StartTime":345581.0,"EndTime":345696.0,"Column":4}]},{"StartTime":345812.0,"Objects":[{"StartTime":345812.0,"EndTime":345927.0,"Column":1},{"StartTime":345812.0,"EndTime":345927.0,"Column":5}]},{"StartTime":346043.0,"Objects":[{"StartTime":346043.0,"EndTime":346158.0,"Column":4},{"StartTime":346043.0,"EndTime":346158.0,"Column":3}]},{"StartTime":346273.0,"Objects":[{"StartTime":346273.0,"EndTime":346446.0,"Column":1},{"StartTime":346273.0,"EndTime":346446.0,"Column":0}]},{"StartTime":346504.0,"Objects":[{"StartTime":346504.0,"EndTime":346677.0,"Column":4},{"StartTime":346504.0,"EndTime":346677.0,"Column":6}]},{"StartTime":346735.0,"Objects":[{"StartTime":346735.0,"EndTime":346908.0,"Column":1},{"StartTime":346735.0,"EndTime":346908.0,"Column":0},{"StartTime":346735.0,"EndTime":346908.0,"Column":3}]},{"StartTime":346966.0,"Objects":[{"StartTime":346966.0,"EndTime":347081.0,"Column":4},{"StartTime":346966.0,"EndTime":347081.0,"Column":2}]},{"StartTime":347197.0,"Objects":[{"StartTime":347197.0,"EndTime":347427.0,"Column":3},{"StartTime":347197.0,"EndTime":347427.0,"Column":5}]},{"StartTime":347543.0,"Objects":[{"StartTime":347543.0,"EndTime":347543.0,"Column":0},{"StartTime":347543.0,"EndTime":347543.0,"Column":1}]},{"StartTime":347658.0,"Objects":[{"StartTime":347658.0,"EndTime":347773.0,"Column":5}]},{"StartTime":347889.0,"Objects":[{"StartTime":347889.0,"EndTime":348004.0,"Column":2},{"StartTime":347889.0,"EndTime":348004.0,"Column":1}]},{"StartTime":348120.0,"Objects":[{"StartTime":348120.0,"EndTime":348235.0,"Column":6}]},{"StartTime":348350.0,"Objects":[{"StartTime":348350.0,"EndTime":348465.0,"Column":2},{"StartTime":348350.0,"EndTime":348465.0,"Column":4}]},{"StartTime":348581.0,"Objects":[{"StartTime":348581.0,"EndTime":348696.0,"Column":6},{"StartTime":348581.0,"EndTime":348696.0,"Column":5},{"StartTime":348581.0,"EndTime":348696.0,"Column":3}]},{"StartTime":348811.0,"Objects":[{"StartTime":348811.0,"EndTime":348926.0,"Column":1},{"StartTime":348811.0,"EndTime":348926.0,"Column":2}]},{"StartTime":348985.0,"Objects":[{"StartTime":348985.0,"EndTime":348985.0,"Column":4}]},{"StartTime":349043.0,"Objects":[{"StartTime":349043.0,"EndTime":349273.0,"Column":3},{"StartTime":349043.0,"EndTime":349273.0,"Column":0},{"StartTime":349043.0,"EndTime":349273.0,"Column":1}]},{"StartTime":349389.0,"Objects":[{"StartTime":349389.0,"EndTime":349389.0,"Column":5},{"StartTime":349389.0,"EndTime":349389.0,"Column":6},{"StartTime":349389.0,"EndTime":349389.0,"Column":4}]},{"StartTime":349504.0,"Objects":[{"StartTime":349504.0,"EndTime":349619.0,"Column":1}]},{"StartTime":349735.0,"Objects":[{"StartTime":349735.0,"EndTime":349850.0,"Column":2},{"StartTime":349735.0,"EndTime":349850.0,"Column":0}]},{"StartTime":349966.0,"Objects":[{"StartTime":349966.0,"EndTime":350196.0,"Column":3}]},{"StartTime":350312.0,"Objects":[{"StartTime":350312.0,"EndTime":350312.0,"Column":4}]},{"StartTime":350427.0,"Objects":[{"StartTime":350427.0,"EndTime":350657.0,"Column":0}]},{"StartTime":350773.0,"Objects":[{"StartTime":350773.0,"EndTime":350773.0,"Column":1}]},{"StartTime":350889.0,"Objects":[{"StartTime":350889.0,"EndTime":351119.0,"Column":3}]},{"StartTime":351235.0,"Objects":[{"StartTime":351235.0,"EndTime":351235.0,"Column":0},{"StartTime":351235.0,"EndTime":351235.0,"Column":2}]},{"StartTime":351350.0,"Objects":[{"StartTime":351350.0,"EndTime":351580.0,"Column":4},{"StartTime":351350.0,"EndTime":351580.0,"Column":6},{"StartTime":351350.0,"EndTime":351580.0,"Column":5}]},{"StartTime":351812.0,"Objects":[{"StartTime":351812.0,"EndTime":352042.0,"Column":0}]},{"StartTime":352158.0,"Objects":[{"StartTime":352158.0,"EndTime":352158.0,"Column":6},{"StartTime":352158.0,"EndTime":352158.0,"Column":3}]},{"StartTime":352273.0,"Objects":[{"StartTime":352273.0,"EndTime":352388.0,"Column":4}]},{"StartTime":352504.0,"Objects":[{"StartTime":352504.0,"EndTime":352619.0,"Column":2},{"StartTime":352504.0,"EndTime":352619.0,"Column":0}]},{"StartTime":352735.0,"Objects":[{"StartTime":352735.0,"EndTime":352965.0,"Column":3}]},{"StartTime":353081.0,"Objects":[{"StartTime":353081.0,"EndTime":353081.0,"Column":5}]},{"StartTime":353197.0,"Objects":[{"StartTime":353197.0,"EndTime":353312.0,"Column":4},{"StartTime":353197.0,"EndTime":353312.0,"Column":1}]},{"StartTime":353427.0,"Objects":[{"StartTime":353427.0,"EndTime":353542.0,"Column":5},{"StartTime":353427.0,"EndTime":353542.0,"Column":0}]},{"StartTime":353658.0,"Objects":[{"StartTime":353658.0,"EndTime":353773.0,"Column":4},{"StartTime":353658.0,"EndTime":353773.0,"Column":3}]},{"StartTime":353889.0,"Objects":[{"StartTime":353889.0,"EndTime":354004.0,"Column":1},{"StartTime":353889.0,"EndTime":354004.0,"Column":6}]},{"StartTime":354120.0,"Objects":[{"StartTime":354120.0,"EndTime":354235.0,"Column":3},{"StartTime":354120.0,"EndTime":354235.0,"Column":5}]},{"StartTime":354350.0,"Objects":[{"StartTime":354350.0,"EndTime":354465.0,"Column":2},{"StartTime":354350.0,"EndTime":354465.0,"Column":6}]},{"StartTime":354581.0,"Objects":[{"StartTime":354581.0,"EndTime":354811.0,"Column":5}]},{"StartTime":354927.0,"Objects":[{"StartTime":354927.0,"EndTime":354927.0,"Column":3},{"StartTime":354927.0,"EndTime":354927.0,"Column":6},{"StartTime":354927.0,"EndTime":354927.0,"Column":4}]},{"StartTime":355043.0,"Objects":[{"StartTime":355043.0,"EndTime":355273.0,"Column":5}]},{"StartTime":355389.0,"Objects":[{"StartTime":355389.0,"EndTime":355389.0,"Column":0},{"StartTime":355389.0,"EndTime":355389.0,"Column":6}]},{"StartTime":355504.0,"Objects":[{"StartTime":355504.0,"EndTime":355504.0,"Column":2},{"StartTime":355504.0,"EndTime":355504.0,"Column":3}]},{"StartTime":355620.0,"Objects":[{"StartTime":355620.0,"EndTime":355620.0,"Column":1},{"StartTime":355620.0,"EndTime":355620.0,"Column":4}]},{"StartTime":355735.0,"Objects":[{"StartTime":355735.0,"EndTime":355735.0,"Column":2},{"StartTime":355735.0,"EndTime":355735.0,"Column":3},{"StartTime":355735.0,"EndTime":355735.0,"Column":5}]},{"StartTime":355851.0,"Objects":[{"StartTime":355851.0,"EndTime":355851.0,"Column":1},{"StartTime":355851.0,"EndTime":355851.0,"Column":4},{"StartTime":355851.0,"EndTime":355851.0,"Column":6}]},{"StartTime":355966.0,"Objects":[{"StartTime":355966.0,"EndTime":355966.0,"Column":2},{"StartTime":355966.0,"EndTime":355966.0,"Column":3}]},{"StartTime":356082.0,"Objects":[{"StartTime":356082.0,"EndTime":356082.0,"Column":1},{"StartTime":356082.0,"EndTime":356082.0,"Column":4},{"StartTime":356082.0,"EndTime":356082.0,"Column":5}]},{"StartTime":356197.0,"Objects":[{"StartTime":356197.0,"EndTime":356197.0,"Column":2},{"StartTime":356197.0,"EndTime":356197.0,"Column":3}]},{"StartTime":356313.0,"Objects":[{"StartTime":356313.0,"EndTime":356313.0,"Column":4},{"StartTime":356313.0,"EndTime":356313.0,"Column":5}]},{"StartTime":356427.0,"Objects":[{"StartTime":356427.0,"EndTime":356657.0,"Column":6},{"StartTime":356427.0,"EndTime":356657.0,"Column":1}]},{"StartTime":356773.0,"Objects":[{"StartTime":356773.0,"EndTime":356773.0,"Column":4},{"StartTime":356773.0,"EndTime":356773.0,"Column":2}]},{"StartTime":356889.0,"Objects":[{"StartTime":356889.0,"EndTime":357004.0,"Column":1}]},{"StartTime":357120.0,"Objects":[{"StartTime":357120.0,"EndTime":357235.0,"Column":2}]},{"StartTime":357350.0,"Objects":[{"StartTime":357350.0,"EndTime":357580.0,"Column":4},{"StartTime":357350.0,"EndTime":357580.0,"Column":5}]},{"StartTime":357697.0,"Objects":[{"StartTime":357697.0,"EndTime":357697.0,"Column":6},{"StartTime":357697.0,"EndTime":357697.0,"Column":3}]},{"StartTime":357812.0,"Objects":[{"StartTime":357812.0,"EndTime":357812.0,"Column":1},{"StartTime":357812.0,"EndTime":357812.0,"Column":0}]},{"StartTime":357927.0,"Objects":[{"StartTime":357927.0,"EndTime":357927.0,"Column":2},{"StartTime":357927.0,"EndTime":357927.0,"Column":3}]},{"StartTime":358043.0,"Objects":[{"StartTime":358043.0,"EndTime":358043.0,"Column":1},{"StartTime":358043.0,"EndTime":358043.0,"Column":4}]},{"StartTime":358158.0,"Objects":[{"StartTime":358158.0,"EndTime":358158.0,"Column":2},{"StartTime":358158.0,"EndTime":358158.0,"Column":3}]},{"StartTime":358273.0,"Objects":[{"StartTime":358273.0,"EndTime":358503.0,"Column":4}]},{"StartTime":358620.0,"Objects":[{"StartTime":358620.0,"EndTime":358620.0,"Column":0},{"StartTime":358620.0,"EndTime":358620.0,"Column":2}]},{"StartTime":358735.0,"Objects":[{"StartTime":358735.0,"EndTime":358850.0,"Column":3},{"StartTime":358735.0,"EndTime":358850.0,"Column":4}]},{"StartTime":358966.0,"Objects":[{"StartTime":358966.0,"EndTime":359081.0,"Column":5}]},{"StartTime":359197.0,"Objects":[{"StartTime":359197.0,"EndTime":359658.0,"Column":3},{"StartTime":359197.0,"EndTime":359197.0,"Column":6},{"StartTime":359427.0,"EndTime":359427.0,"Column":6},{"StartTime":359657.0,"EndTime":359657.0,"Column":6}]},{"StartTime":359773.0,"Objects":[{"StartTime":359773.0,"EndTime":359773.0,"Column":2},{"StartTime":359773.0,"EndTime":359773.0,"Column":0}]},{"StartTime":359889.0,"Objects":[{"StartTime":359889.0,"EndTime":359889.0,"Column":3},{"StartTime":359889.0,"EndTime":359889.0,"Column":4}]},{"StartTime":360004.0,"Objects":[{"StartTime":360004.0,"EndTime":360004.0,"Column":2}]},{"StartTime":360120.0,"Objects":[{"StartTime":360120.0,"EndTime":360350.0,"Column":5},{"StartTime":360120.0,"EndTime":360350.0,"Column":1},{"StartTime":360120.0,"EndTime":360350.0,"Column":4}]},{"StartTime":360466.0,"Objects":[{"StartTime":360466.0,"EndTime":360466.0,"Column":6}]},{"StartTime":360581.0,"Objects":[{"StartTime":360581.0,"EndTime":360696.0,"Column":0}]},{"StartTime":360812.0,"Objects":[{"StartTime":360812.0,"EndTime":360927.0,"Column":6}]},{"StartTime":361043.0,"Objects":[{"StartTime":361043.0,"EndTime":361158.0,"Column":2}]},{"StartTime":361273.0,"Objects":[{"StartTime":361273.0,"EndTime":361388.0,"Column":3},{"StartTime":361273.0,"EndTime":361388.0,"Column":4}]},{"StartTime":361504.0,"Objects":[{"StartTime":361504.0,"EndTime":361504.0,"Column":0},{"StartTime":361504.0,"EndTime":361504.0,"Column":1}]},{"StartTime":361620.0,"Objects":[{"StartTime":361620.0,"EndTime":361620.0,"Column":2}]},{"StartTime":361735.0,"Objects":[{"StartTime":361735.0,"EndTime":361735.0,"Column":0},{"StartTime":361735.0,"EndTime":361735.0,"Column":1},{"StartTime":361735.0,"EndTime":361735.0,"Column":6}]},{"StartTime":361851.0,"Objects":[{"StartTime":361851.0,"EndTime":361851.0,"Column":2},{"StartTime":361851.0,"EndTime":361851.0,"Column":3}]},{"StartTime":361966.0,"Objects":[{"StartTime":361966.0,"EndTime":362196.0,"Column":0}]},{"StartTime":362312.0,"Objects":[{"StartTime":362312.0,"EndTime":362312.0,"Column":3},{"StartTime":362312.0,"EndTime":362312.0,"Column":5}]},{"StartTime":362427.0,"Objects":[{"StartTime":362427.0,"EndTime":362542.0,"Column":2}]},{"StartTime":362658.0,"Objects":[{"StartTime":362658.0,"EndTime":362773.0,"Column":1},{"StartTime":362658.0,"EndTime":362773.0,"Column":0}]},{"StartTime":362831.0,"Objects":[{"StartTime":362831.0,"EndTime":362831.0,"Column":3}]},{"StartTime":362889.0,"Objects":[{"StartTime":362889.0,"EndTime":363119.0,"Column":6},{"StartTime":362889.0,"EndTime":363119.0,"Column":5}]},{"StartTime":363235.0,"Objects":[{"StartTime":363235.0,"EndTime":363465.0,"Column":1},{"StartTime":363235.0,"EndTime":363465.0,"Column":0}]},{"StartTime":363581.0,"Objects":[{"StartTime":363581.0,"EndTime":363696.0,"Column":2},{"StartTime":363581.0,"EndTime":363696.0,"Column":3}]},{"StartTime":363812.0,"Objects":[{"StartTime":363812.0,"EndTime":364273.0,"Column":2},{"StartTime":363812.0,"EndTime":363812.0,"Column":3},{"StartTime":363812.0,"EndTime":363812.0,"Column":6},{"StartTime":364042.0,"EndTime":364042.0,"Column":6},{"StartTime":364042.0,"EndTime":364042.0,"Column":0},{"StartTime":364272.0,"EndTime":364272.0,"Column":0},{"StartTime":364272.0,"EndTime":364272.0,"Column":3}]},{"StartTime":364389.0,"Objects":[{"StartTime":364389.0,"EndTime":364389.0,"Column":3},{"StartTime":364389.0,"EndTime":364389.0,"Column":1}]},{"StartTime":364504.0,"Objects":[{"StartTime":364504.0,"EndTime":364619.0,"Column":2},{"StartTime":364504.0,"EndTime":364619.0,"Column":6}]},{"StartTime":364735.0,"Objects":[{"StartTime":364735.0,"EndTime":364850.0,"Column":3},{"StartTime":364735.0,"EndTime":364850.0,"Column":1}]},{"StartTime":364966.0,"Objects":[{"StartTime":364966.0,"EndTime":365427.0,"Column":6}]},{"StartTime":365543.0,"Objects":[{"StartTime":365543.0,"EndTime":365543.0,"Column":3},{"StartTime":365543.0,"EndTime":365543.0,"Column":5},{"StartTime":365543.0,"EndTime":365543.0,"Column":0}]},{"StartTime":365658.0,"Objects":[{"StartTime":365658.0,"EndTime":365773.0,"Column":2}]},{"StartTime":365889.0,"Objects":[{"StartTime":365889.0,"EndTime":366004.0,"Column":4},{"StartTime":365889.0,"EndTime":366004.0,"Column":6}]},{"StartTime":366120.0,"Objects":[{"StartTime":366120.0,"EndTime":366120.0,"Column":5}]},{"StartTime":366235.0,"Objects":[{"StartTime":366235.0,"EndTime":366235.0,"Column":6},{"StartTime":366350.0,"EndTime":366350.0,"Column":2},{"StartTime":366465.0,"EndTime":366465.0,"Column":1}]},{"StartTime":366581.0,"Objects":[{"StartTime":366581.0,"EndTime":366696.0,"Column":5},{"StartTime":366581.0,"EndTime":366696.0,"Column":4}]},{"StartTime":366812.0,"Objects":[{"StartTime":366812.0,"EndTime":367042.0,"Column":6}]},{"StartTime":367158.0,"Objects":[{"StartTime":367158.0,"EndTime":367158.0,"Column":2}]},{"StartTime":367273.0,"Objects":[{"StartTime":367273.0,"EndTime":367388.0,"Column":6}]},{"StartTime":367504.0,"Objects":[{"StartTime":367504.0,"EndTime":367965.0,"Column":0}]},{"StartTime":368081.0,"Objects":[{"StartTime":368081.0,"EndTime":368081.0,"Column":6}]},{"StartTime":368197.0,"Objects":[{"StartTime":368197.0,"EndTime":368312.0,"Column":3}]},{"StartTime":368427.0,"Objects":[{"StartTime":368427.0,"EndTime":368657.0,"Column":1}]},{"StartTime":368773.0,"Objects":[{"StartTime":368773.0,"EndTime":369003.0,"Column":4}]},{"StartTime":369120.0,"Objects":[{"StartTime":369120.0,"EndTime":369235.0,"Column":6},{"StartTime":369120.0,"EndTime":369235.0,"Column":3}]},{"StartTime":369350.0,"Objects":[{"StartTime":369350.0,"EndTime":369580.0,"Column":2}]},{"StartTime":369697.0,"Objects":[{"StartTime":369697.0,"EndTime":369697.0,"Column":1}]},{"StartTime":369812.0,"Objects":[{"StartTime":369812.0,"EndTime":369927.0,"Column":6}]},{"StartTime":370043.0,"Objects":[{"StartTime":370043.0,"EndTime":370158.0,"Column":3},{"StartTime":370043.0,"EndTime":370158.0,"Column":0}]},{"StartTime":370273.0,"Objects":[{"StartTime":370273.0,"EndTime":370273.0,"Column":4}]},{"StartTime":370389.0,"Objects":[{"StartTime":370389.0,"EndTime":370389.0,"Column":0}]},{"StartTime":370504.0,"Objects":[{"StartTime":370504.0,"EndTime":370504.0,"Column":1},{"StartTime":370504.0,"EndTime":370504.0,"Column":2}]},{"StartTime":370620.0,"Objects":[{"StartTime":370620.0,"EndTime":370620.0,"Column":3},{"StartTime":370620.0,"EndTime":370620.0,"Column":4}]},{"StartTime":370677.0,"Objects":[{"StartTime":370677.0,"EndTime":370677.0,"Column":2}]},{"StartTime":370735.0,"Objects":[{"StartTime":370735.0,"EndTime":370735.0,"Column":3}]},{"StartTime":370793.0,"Objects":[{"StartTime":370793.0,"EndTime":370793.0,"Column":2}]},{"StartTime":370850.0,"Objects":[{"StartTime":370850.0,"EndTime":370850.0,"Column":4}]},{"StartTime":370908.0,"Objects":[{"StartTime":370908.0,"EndTime":370908.0,"Column":2}]},{"StartTime":370966.0,"Objects":[{"StartTime":370966.0,"EndTime":370966.0,"Column":6}]},{"StartTime":371081.0,"Objects":[{"StartTime":371081.0,"EndTime":371081.0,"Column":1},{"StartTime":371081.0,"EndTime":371081.0,"Column":0},{"StartTime":371081.0,"EndTime":371081.0,"Column":4}]},{"StartTime":371197.0,"Objects":[{"StartTime":371197.0,"EndTime":371427.0,"Column":3},{"StartTime":371197.0,"EndTime":371427.0,"Column":2}]},{"StartTime":371658.0,"Objects":[{"StartTime":371658.0,"EndTime":371888.0,"Column":6}]},{"StartTime":372120.0,"Objects":[{"StartTime":372120.0,"EndTime":372350.0,"Column":2}]},{"StartTime":372581.0,"Objects":[{"StartTime":372581.0,"EndTime":372696.0,"Column":1},{"StartTime":372581.0,"EndTime":372696.0,"Column":5}]},{"StartTime":372812.0,"Objects":[{"StartTime":372812.0,"EndTime":372812.0,"Column":0},{"StartTime":372812.0,"EndTime":372812.0,"Column":2}]},{"StartTime":372927.0,"Objects":[{"StartTime":372927.0,"EndTime":372927.0,"Column":1},{"StartTime":372927.0,"EndTime":372927.0,"Column":4},{"StartTime":372927.0,"EndTime":372927.0,"Column":3}]},{"StartTime":373043.0,"Objects":[{"StartTime":373043.0,"EndTime":373273.0,"Column":2},{"StartTime":373043.0,"EndTime":373273.0,"Column":0}]},{"StartTime":373504.0,"Objects":[{"StartTime":373504.0,"EndTime":373734.0,"Column":5}]},{"StartTime":373850.0,"Objects":[{"StartTime":373850.0,"EndTime":373850.0,"Column":6}]},{"StartTime":373966.0,"Objects":[{"StartTime":373966.0,"EndTime":374196.0,"Column":1},{"StartTime":373966.0,"EndTime":374196.0,"Column":2}]},{"StartTime":374427.0,"Objects":[{"StartTime":374427.0,"EndTime":374542.0,"Column":6}]},{"StartTime":374658.0,"Objects":[{"StartTime":374658.0,"EndTime":374658.0,"Column":5},{"StartTime":374658.0,"EndTime":374658.0,"Column":0}]},{"StartTime":374773.0,"Objects":[{"StartTime":374773.0,"EndTime":374773.0,"Column":4},{"StartTime":374773.0,"EndTime":374773.0,"Column":6}]},{"StartTime":374830.0,"Objects":[{"StartTime":374830.0,"EndTime":374830.0,"Column":0}]},{"StartTime":374889.0,"Objects":[{"StartTime":374889.0,"EndTime":375119.0,"Column":1}]},{"StartTime":375350.0,"Objects":[{"StartTime":375350.0,"EndTime":375350.0,"Column":3}]},{"StartTime":375466.0,"Objects":[{"StartTime":375466.0,"EndTime":375466.0,"Column":1},{"StartTime":375466.0,"EndTime":375466.0,"Column":2}]},{"StartTime":375581.0,"Objects":[{"StartTime":375581.0,"EndTime":375581.0,"Column":3},{"StartTime":375581.0,"EndTime":375581.0,"Column":4}]},{"StartTime":375697.0,"Objects":[{"StartTime":375697.0,"EndTime":375697.0,"Column":5}]},{"StartTime":375812.0,"Objects":[{"StartTime":375812.0,"EndTime":376042.0,"Column":3},{"StartTime":375812.0,"EndTime":376042.0,"Column":2},{"StartTime":375812.0,"EndTime":376042.0,"Column":6}]},{"StartTime":376273.0,"Objects":[{"StartTime":376273.0,"EndTime":376503.0,"Column":4}]},{"StartTime":376620.0,"Objects":[{"StartTime":376620.0,"EndTime":376620.0,"Column":0}]},{"StartTime":376735.0,"Objects":[{"StartTime":376735.0,"EndTime":376965.0,"Column":5}]},{"StartTime":377197.0,"Objects":[{"StartTime":377197.0,"EndTime":377197.0,"Column":0},{"StartTime":377197.0,"EndTime":377197.0,"Column":6}]},{"StartTime":377313.0,"Objects":[{"StartTime":377313.0,"EndTime":377313.0,"Column":1},{"StartTime":377313.0,"EndTime":377313.0,"Column":2}]},{"StartTime":377428.0,"Objects":[{"StartTime":377428.0,"EndTime":377428.0,"Column":3},{"StartTime":377428.0,"EndTime":377428.0,"Column":4}]},{"StartTime":377544.0,"Objects":[{"StartTime":377544.0,"EndTime":377544.0,"Column":2},{"StartTime":377544.0,"EndTime":377544.0,"Column":5}]},{"StartTime":377658.0,"Objects":[{"StartTime":377658.0,"EndTime":377888.0,"Column":4}]},{"StartTime":378120.0,"Objects":[{"StartTime":378120.0,"EndTime":378350.0,"Column":0},{"StartTime":378120.0,"EndTime":378350.0,"Column":1}]},{"StartTime":378581.0,"Objects":[{"StartTime":378581.0,"EndTime":379273.0,"Column":6}]},{"StartTime":379504.0,"Objects":[{"StartTime":379504.0,"EndTime":379734.0,"Column":3}]},{"StartTime":379850.0,"Objects":[{"StartTime":379850.0,"EndTime":380080.0,"Column":0},{"StartTime":379850.0,"EndTime":380080.0,"Column":6}]},{"StartTime":380197.0,"Objects":[{"StartTime":380197.0,"EndTime":380312.0,"Column":3}]},{"StartTime":380427.0,"Objects":[{"StartTime":380427.0,"EndTime":380427.0,"Column":5},{"StartTime":380427.0,"EndTime":380427.0,"Column":1},{"StartTime":380427.0,"EndTime":380427.0,"Column":6}]},{"StartTime":380543.0,"Objects":[{"StartTime":380543.0,"EndTime":380773.0,"Column":3}]},{"StartTime":380889.0,"Objects":[{"StartTime":380889.0,"EndTime":381004.0,"Column":0}]},{"StartTime":381120.0,"Objects":[{"StartTime":381120.0,"EndTime":381235.0,"Column":6}]},{"StartTime":381350.0,"Objects":[{"StartTime":381350.0,"EndTime":381350.0,"Column":0}]},{"StartTime":381466.0,"Objects":[{"StartTime":381466.0,"EndTime":381696.0,"Column":4}]},{"StartTime":381812.0,"Objects":[{"StartTime":381812.0,"EndTime":381927.0,"Column":2}]},{"StartTime":382043.0,"Objects":[{"StartTime":382043.0,"EndTime":382158.0,"Column":4}]},{"StartTime":382273.0,"Objects":[{"StartTime":382273.0,"EndTime":382446.0,"Column":1}]},{"StartTime":382504.0,"Objects":[{"StartTime":382504.0,"EndTime":382677.0,"Column":0}]},{"StartTime":382735.0,"Objects":[{"StartTime":382735.0,"EndTime":382735.0,"Column":4}]},{"StartTime":382792.0,"Objects":[{"StartTime":382792.0,"EndTime":382792.0,"Column":5}]},{"StartTime":382850.0,"Objects":[{"StartTime":382850.0,"EndTime":382850.0,"Column":4}]},{"StartTime":382908.0,"Objects":[{"StartTime":382908.0,"EndTime":382908.0,"Column":1}]},{"StartTime":382966.0,"Objects":[{"StartTime":382966.0,"EndTime":382966.0,"Column":4}]},{"StartTime":383023.0,"Objects":[{"StartTime":383023.0,"EndTime":383023.0,"Column":6}]},{"StartTime":383080.0,"Objects":[{"StartTime":383080.0,"EndTime":383080.0,"Column":3}]},{"StartTime":383138.0,"Objects":[{"StartTime":383138.0,"EndTime":383138.0,"Column":2}]},{"StartTime":383197.0,"Objects":[{"StartTime":383197.0,"EndTime":383197.0,"Column":3}]},{"StartTime":383254.0,"Objects":[{"StartTime":383254.0,"EndTime":383254.0,"Column":6}]},{"StartTime":383312.0,"Objects":[{"StartTime":383312.0,"EndTime":383312.0,"Column":4}]},{"StartTime":383370.0,"Objects":[{"StartTime":383370.0,"EndTime":383370.0,"Column":3}]},{"StartTime":383427.0,"Objects":[{"StartTime":383427.0,"EndTime":383427.0,"Column":5}]},{"StartTime":383484.0,"Objects":[{"StartTime":383484.0,"EndTime":383484.0,"Column":2}]},{"StartTime":383542.0,"Objects":[{"StartTime":383542.0,"EndTime":383542.0,"Column":3}]},{"StartTime":383600.0,"Objects":[{"StartTime":383600.0,"EndTime":383600.0,"Column":2}]},{"StartTime":383657.0,"Objects":[{"StartTime":383657.0,"EndTime":383657.0,"Column":1}]},{"StartTime":383715.0,"Objects":[{"StartTime":383715.0,"EndTime":383715.0,"Column":2}]},{"StartTime":383773.0,"Objects":[{"StartTime":383773.0,"EndTime":383773.0,"Column":1}]},{"StartTime":383831.0,"Objects":[{"StartTime":383831.0,"EndTime":383831.0,"Column":0}]},{"StartTime":383889.0,"Objects":[{"StartTime":383889.0,"EndTime":383889.0,"Column":5}]},{"StartTime":383947.0,"Objects":[{"StartTime":383947.0,"EndTime":383947.0,"Column":0}]},{"StartTime":384004.0,"Objects":[{"StartTime":384004.0,"EndTime":384004.0,"Column":5}]},{"StartTime":384062.0,"Objects":[{"StartTime":384062.0,"EndTime":384062.0,"Column":0}]},{"StartTime":384120.0,"Objects":[{"StartTime":384120.0,"EndTime":384120.0,"Column":3}]}]} \ No newline at end of file diff --git a/osu.Game.Rulesets.Mania/Resources/Testing/Beatmaps/875945.osu b/osu.Game.Rulesets.Mania/Resources/Testing/Beatmaps/875945.osu deleted file mode 100644 index a24fcea30a..0000000000 --- a/osu.Game.Rulesets.Mania/Resources/Testing/Beatmaps/875945.osu +++ /dev/null @@ -1,1824 +0,0 @@ -osu file format v14 - -[General] -AudioFilename: imagematerial.mp3 -AudioLeadIn: 0 -PreviewTime: 165589 -Countdown: 0 -SampleSet: Soft -StackLeniency: 0.7 -Mode: 0 -LetterboxInBreaks: 0 -EpilepsyWarning: 1 -WidescreenStoryboard: 1 - -[Editor] -Bookmarks: 56435,71204,88743,103512,120127,134897,149666,181051,197666,310280,356434,371204,384127 -DistanceSpacing: 0.3 -BeatDivisor: 4 -GridSize: 4 -TimelineZoom: 5.700003 - -[Metadata] -Title:IMAGE -MATERIAL- -TitleUnicode:IMAGE -MATERIAL- -Artist:Tatsh -ArtistUnicode:Tatsh -Creator:Enon -Version:Revolution -Source: -Tags:(新曲) (Shinkyoku) REFLEC BEAT limelight 福山沙織 fukuyama saori Dailycare -BeatmapID:875945 -BeatmapSetID:402837 - -[Difficulty] -HPDrainRate:6 -CircleSize:4.2 -OverallDifficulty:9 -ApproachRate:9.8 -SliderMultiplier:1.87 -SliderTickRate:1 - -[Events] -//Background and Video events -0,0,"BG.jpg",0,0 -//Break Periods -2,49251,55956 -//Storyboard Layer 0 (Background) -//Storyboard Layer 1 (Fail) -//Storyboard Layer 2 (Pass) -//Storyboard Layer 3 (Foreground) -//Storyboard Sound Samples - -[TimingPoints] -6590,461.538461538462,4,2,2,15,1,0 -6590,-200,4,2,2,15,0,0 -8320,-200,4,2,2,5,0,0 -8436,-200,4,2,2,15,0,0 -10166,-200,4,2,2,5,0,0 -10282,-200,4,2,2,15,0,0 -12013,-200,4,2,2,5,0,0 -12128,-200,4,2,2,15,0,0 -13859,-200,4,2,2,5,0,0 -13974,-200,4,2,2,15,0,0 -15705,-200,4,2,2,5,0,0 -15820,-200,4,2,2,15,0,0 -17551,-200,4,2,2,5,0,0 -17666,-200,4,2,2,15,0,0 -49051,230.769230769231,4,2,1,15,1,0 -56435,-100,4,2,1,60,0,0 -62666,-200,4,2,1,60,0,0 -63820,-100,4,2,1,60,0,0 -69358,-100,4,2,1,55,0,0 -69589,-100,4,2,1,50,0,0 -69820,-100,4,2,1,45,0,0 -70051,-100,4,2,1,40,0,0 -70281,-100,4,2,1,30,0,0 -70512,-100,4,2,1,40,0,0 -70743,-100,4,2,1,50,0,0 -70974,-100,4,2,1,60,0,0 -71204,-100,4,2,1,70,0,0 -74839,-100,4,2,1,5,0,0 -74897,-100,4,2,1,70,0,0 -78301,-100,4,2,1,5,0,0 -78358,-100,4,2,1,70,0,0 -78531,-100,4,2,1,5,0,0 -78589,-100,4,2,1,70,0,0 -82224,-100,4,2,1,5,0,0 -82281,-100,4,2,1,70,0,0 -85685,-100,4,2,1,5,0,0 -85743,-100,4,2,1,70,0,0 -88743,-100,4,2,1,85,0,1 -90070,-100,4,2,1,5,0,1 -90127,-100,4,2,1,85,0,1 -93762,-100,4,2,1,5,0,1 -93820,-100,4,2,1,85,0,1 -95377,-100,4,2,1,5,0,1 -95435,-100,4,2,1,85,0,1 -103512,-100,4,2,1,60,0,0 -106916,-100,4,2,1,5,0,0 -106974,-100,4,2,1,60,0,0 -110608,-100,4,2,1,5,0,0 -110666,-100,4,2,1,60,0,0 -114301,-100,4,2,1,5,0,0 -114358,-100,4,2,1,60,0,0 -114820,-100,4,2,3,60,0,0 -114834,-100,4,2,1,60,0,0 -116666,-100,4,2,3,60,0,0 -116680,-100,4,2,1,60,0,0 -117358,-100,4,2,1,55,0,0 -117589,-100,4,2,1,50,0,0 -117820,-100,4,2,1,45,0,0 -118051,-100,4,2,1,40,0,0 -118281,-100,4,2,1,30,0,0 -118743,-100,4,2,1,40,0,0 -119204,-100,4,2,1,50,0,0 -119666,-100,4,2,1,60,0,0 -120127,-100,4,2,1,70,0,0 -126762,-100,4,2,1,5,0,0 -126820,-100,4,2,1,70,0,0 -143377,-100,4,2,1,5,0,0 -143435,-111.111111111111,4,2,1,70,0,0 -143608,-111.111111111111,4,2,1,5,0,0 -143666,-125,4,2,1,70,0,0 -143839,-125,4,2,1,5,0,0 -143897,-142.857142857143,4,2,1,70,0,0 -144070,-142.857142857143,4,2,1,5,0,0 -144127,-100,4,2,1,70,0,0 -149666,-200,4,2,1,40,0,0 -160743,-100,4,2,1,55,0,0 -166281,-100,4,2,1,85,0,1 -167608,-100,4,2,1,5,0,1 -167666,-100,4,2,1,85,0,1 -171301,-100,4,2,1,5,0,1 -171358,-100,4,2,1,85,0,1 -172916,-100,4,2,1,5,0,1 -172974,-100,4,2,1,85,0,1 -181051,-100,4,2,1,60,0,0 -182377,-100,4,2,1,5,0,0 -182435,-100,4,2,1,60,0,0 -192358,-100,4,2,3,60,0,0 -192373,-100,4,2,1,60,0,0 -194204,-100,4,2,3,60,0,0 -194219,-100,4,2,1,60,0,0 -194897,-100,4,2,1,55,0,0 -195127,-100,4,2,1,50,0,0 -195358,-100,4,2,1,45,0,0 -195589,-100,4,2,1,40,0,0 -195820,-100,4,2,1,30,0,0 -196281,-100,4,2,1,40,0,0 -196743,-100,4,2,1,50,0,0 -197204,-100,4,2,1,60,0,0 -197666,-100,4,2,1,85,0,1 -219070,-100,4,2,1,5,0,1 -219127,-142.857142857143,4,2,1,85,0,1 -219301,-142.857142857143,4,2,1,5,0,1 -219358,-111.111111111111,4,2,1,85,0,1 -219531,-111.111111111111,4,2,1,5,0,1 -219589,-166.666666666667,4,2,1,85,0,1 -219762,-166.666666666667,4,2,1,5,0,1 -219820,-100,4,2,1,85,0,1 -227204,461.538461538462,4,2,2,25,1,0 -227204,-200,4,2,2,25,0,0 -251550,697.674418604651,4,2,2,25,1,0 -251550,-133.333333333333,4,2,2,25,0,0 -252702,714.285714285714,4,2,2,20,1,0 -252702,-133.333333333333,4,2,2,20,0,0 -253506,800,4,2,2,18,1,0 -254095,1132.07547169811,4,2,2,15,1,0 -254095,-133.333333333333,4,2,2,15,0,0 -255580,1200,4,2,2,10,1,0 -256480,1267.10000000001,4,2,2,8,1,0 -256480,-133.333333333333,4,2,2,8,0,0 -258892,2131.45714285714,4,2,2,6,1,0 -258892,-133.333333333333,4,2,2,6,0,0 -263197,230.769230769231,4,2,1,65,1,0 -277966,-100,4,2,1,70,0,0 -285062,-100,4,2,1,5,0,0 -285120,-100,4,2,1,70,0,0 -285293,-100,4,2,1,5,0,0 -285350,-100,4,2,1,70,0,0 -292447,-100,4,2,1,5,0,0 -292504,-100,4,2,1,70,0,0 -295504,-100,4,2,1,85,0,1 -296831,-100,4,2,1,5,0,1 -296889,-100,4,2,1,85,0,1 -300523,-100,4,2,1,5,0,1 -300581,-100,4,2,1,85,0,1 -308889,-100,4,2,1,85,0,0 -310273,-100,4,2,1,85,0,1 -315062,-100,4,2,1,5,0,1 -315120,-100,4,2,1,85,0,1 -329831,-100,4,2,1,5,0,1 -329889,-100,4,2,1,85,0,1 -330754,-100,4,2,1,5,0,1 -330812,-100,4,2,1,85,0,1 -331677,-100,4,2,1,5,0,1 -331735,-100,4,2,1,85,0,1 -333523,-100,4,2,1,5,0,1 -333581,-100,4,2,1,85,0,1 -336293,-100,4,2,1,5,0,1 -336350,-100,4,2,1,85,0,1 -346447,-100,4,2,1,5,0,1 -346504,-142.857142857143,4,2,1,85,0,1 -346677,-142.857142857143,4,2,1,5,0,1 -346735,-111.111111111111,4,2,1,85,0,1 -346908,-111.111111111111,4,2,1,5,0,1 -346966,-166.666666666667,4,2,1,85,0,1 -347197,-100,4,2,1,85,0,1 -356427,-100,4,2,1,60,0,0 - - -[Colours] -Combo1 : 235,221,186 -Combo2 : 165,202,233 -Combo3 : 114,145,218 -Combo4 : 58,148,190 - -[HitObjects] -88,104,6590,6,0,B|176:156|256:108|256:108|336:60|423:112,1,350.625,6|0,0:0|0:0,0:0:0:0: -396,213,8436,2,0,P|277:247|376:172,1,350.625,6|0,0:0|0:0,0:0:0:0: -472,220,10282,2,0,P|456:288|220:300,1,350.625,6|0,0:0|0:0,0:0:0:0: -277,200,12128,2,0,P|398:225|276:244,1,350.625,6|0,0:0|0:0,0:0:0:0: -224,141,13974,6,0,P|379:90|473:224,1,350.625,6|0,0:0|0:0,0:0:0:0: -496,301,15820,2,0,B|304:277|329:378|139:354,1,350.625,6|0,0:0|0:0,0:0:0:0: -76,352,17666,2,0,B|128:271|43:128|43:128|96:217|173:187,1,374,6|2,0:0|0:0,0:0:0:0: -256,192,19628,12,0,21128,0:0:0:0: -213,117,21359,6,0,L|119:122,1,93.5,6|0,0:0|0:0,0:0:0:0: -300,161,22282,2,0,L|393:155,1,93.5,2|0,0:0|0:0,0:0:0:0: -233,38,23205,2,0,L|139:43,1,93.5,6|0,0:0|0:0,0:0:0:0: -280,240,24128,2,0,L|373:234,1,93.5,2|0,0:0|0:0,0:0:0:0: -509,22,25051,6,0,B|342:1|390:161|198:113,1,327.25,6|0,0:0|0:0,0:0:0:0: -139,43,26897,2,0,P|181:132|110:300,1,280.5,2|0,0:0|0:0,0:0:0:0: -46,366,28743,6,0,L|139:371,1,93.5,6|0,0:0|0:0,0:0:0:0: -280,175,29666,2,0,L|186:169,1,93.5,2|0,0:0|0:0,0:0:0:0: -26,287,30589,2,0,L|119:292,1,93.5,6|0,0:0|0:0,0:0:0:0: -300,254,31513,2,0,L|206:248,1,93.5,2|0,0:0|0:0,0:0:0:0: -0,57,32436,6,0,B|189:33|134:214|352:176,1,374,6|2,0:0|0:0,0:0:0:0: -334,178,35205,2,0,L|315:351,1,163.625,2|0,0:0|0:0,0:0:0:0: -396,313,36128,6,0,P|430:308|456:284,1,70.125,6|0,0:0|0:0,0:0:0:0: -508,233,36590,6,0,B|205:287|288:12|1:48,1,561,2|0,0:0|0:0,0:0:0:0: -10,47,39820,6,0,L|120:37,1,93.5,6|0,0:0|0:0,0:0:0:0: -233,130,40743,2,0,L|123:140,1,93.5,2|0,0:0|0:0,0:0:0:0: -268,229,41666,2,0,L|473:210,1,187,2|2,0:0|0:0,0:0:0:0: -271,366,43051,2,0,P|254:329|255:303,1,46.75 -268,229,43513,5,6,0:0:0:0: -256,192,43628,12,0,49051,0:0:0:0: -45,136,56435,6,0,B|140:151|119:74|222:88,1,187,6|8,0:0|0:0,0:0:0:0: -214,252,56781,1,0,0:0:0:0: -214,252,56897,2,0,P|209:223|187:144,1,93.5,2|0,0:0|0:0,0:0:0:0: -336,48,57127,2,0,P|323:93|314:138,1,93.5,8|0,0:0|0:0,0:0:0:0: -319,308,57358,6,0,P|379:321|411:306,1,93.5,2|0,0:0|0:0,0:0:0:0: -214,252,57589,2,0,P|154:239|122:254,1,93.5,8|0,0:0|0:0,0:0:0:0: -58,340,57820,1,2,0:0:0:0: -165,370,57935,1,0,0:0:0:0: -263,315,58051,1,8,0:0:0:0: -370,345,58166,1,8,0:0:0:0: -370,345,58224,1,0,0:0:0:0: -370,345,58281,6,0,P|361:263|435:186,1,187,2|8,0:0|0:0,0:0:0:0: -507,110,58627,1,0,0:0:0:0: -507,110,58685,1,0,0:0:0:0: -507,110,58743,2,0,L|491:3,1,93.5,2|0,0:0|0:0,0:0:0:0: -412,96,58974,2,0,L|428:203,1,93.5,8|2,0:0|0:0,0:0:0:0: -370,344,59204,6,0,P|331:353|275:333,1,93.5,2|0,0:0|0:0,0:0:0:0: -273,211,59435,2,0,P|293:253|331:280,1,93.5,8|0,0:0|0:0,0:0:0:0: -349,206,59666,2,0,P|341:160|357:117,1,93.5,2|0,0:0|0:0,0:0:0:0: -482,107,59897,2,0,P|440:127|414:165,1,93.5,8|0,0:0|0:0,0:0:0:0: -144,273,60127,6,0,L|331:280,1,187,2|8,0:0|0:0,0:0:0:0: -349,206,60474,2,0,L|162:199,1,187,0|2,0:0|0:0,0:0:0:0: -85,115,60820,2,0,L|179:119,1,93.5,8|2,0:0|0:0,0:0:0:0: -126,347,61051,6,0,P|88:326|66:277,1,93.5,2|0,0:0|0:0,0:0:0:0: -162,199,61281,2,0,P|200:220|222:269,1,93.5,8|0,0:0|0:0,0:0:0:0: -203,375,61512,2,0,L|306:368,1,93.5,2|2,0:0|0:0,0:0:0:0: -443,285,61743,2,0,L|349:291,1,93.5,8|0,0:0|0:0,0:0:0:0: -329,279,61916,1,0,0:0:0:0: -309,266,61974,6,0,L|289:66,1,187,2|8,0:0|0:0,0:0:0:0: -203,118,62320,2,0,L|223:318,1,187,0|2,0:0|0:0,0:0:0:0: -133,342,62666,2,0,B|132:316|132:316|128:316|128:316|130:295|130:295|126:296|126:296|129:275|129:275|125:275|125:275|127:254|127:254|123:255|123:255|125:234|125:234|121:234|121:234|123:213|123:213|119:214|119:214|121:193|121:193|118:193|118:193|118:172,1,187,8|8,0:0|0:0,0:0:0:0: -285,26,63358,5,2,0:0:0:0: -352,117,63474,1,8,0:0:0:0: -265,189,63589,1,10,0:0:0:0: -332,280,63705,1,8,0:0:0:0: -474,81,63820,5,2,0:0:0:0: -456,83,63877,1,2,0:0:0:0: -437,85,63935,1,2,0:0:0:0: -419,88,63993,1,2,0:0:0:0: -400,90,64051,2,0,L|288:73,1,93.5,8|0,0:0|0:0,0:0:0:0: -217,50,64281,5,2,0:0:0:0: -219,68,64338,1,2,0:0:0:0: -221,87,64396,1,2,0:0:0:0: -224,105,64454,1,2,0:0:0:0: -226,124,64512,2,0,L|209:236,1,93.5,8|0,0:0|0:0,0:0:0:0: -186,307,64743,5,2,0:0:0:0: -204,305,64800,1,2,0:0:0:0: -223,303,64858,1,2,0:0:0:0: -241,300,64916,1,2,0:0:0:0: -260,298,64974,2,0,L|372:315,1,93.5,8|0,0:0|0:0,0:0:0:0: -443,338,65205,5,2,0:0:0:0: -441,320,65262,1,2,0:0:0:0: -439,301,65320,1,2,0:0:0:0: -436,283,65378,1,2,0:0:0:0: -434,264,65436,2,0,L|451:152,1,93.5,8|0,0:0|0:0,0:0:0:0: -474,81,65666,5,2,0:0:0:0: -456,83,65723,1,2,0:0:0:0: -437,85,65781,1,2,0:0:0:0: -419,88,65839,1,2,0:0:0:0: -400,90,65897,2,0,L|288:73,1,93.5,8|0,0:0|0:0,0:0:0:0: -226,124,66127,5,2,0:0:0:0: -208,126,66184,1,2,0:0:0:0: -189,128,66242,1,2,0:0:0:0: -171,131,66300,1,2,0:0:0:0: -152,133,66358,2,0,L|40:116,1,93.5,8|0,0:0|0:0,0:0:0:0: -14,291,66589,6,0,P|0:241|8:176,1,93.5,2|2,0:0|0:0,0:0:0:0: -136,292,66820,2,0,P|150:342|142:407,1,93.5,8|2,0:0|0:0,0:0:0:0: -80,232,67051,2,0,P|154:263|265:207,1,187,2|8,0:0|0:0,0:0:0:0: -315,159,67397,1,0,0:0:0:0: -491,182,67512,6,0,B|480:253|480:253|484:286|484:286|472:373,1,187,6|8,0:1|0:0,0:0:0:0: -410,124,67858,2,0,B|399:195|399:195|403:228|403:228|391:315,1,187,2|8,0:1|0:0,0:0:0:0: -329,66,68204,2,0,L|313:166,1,93.5,10|0,1:2|0:0,0:0:0:0: -181,294,68435,6,0,P|226:315|288:293,1,93.5,2|2,0:0|0:0,0:0:0:0: -440,252,68666,2,0,P|395:231|333:253,1,93.5,8|2,0:0|0:0,0:0:0:0: -128,371,68897,5,10,0:0:0:0: -181,294,69012,1,8,0:0:0:0: -117,225,69127,1,10,0:0:0:0: -170,148,69242,1,8,0:0:0:0: -52,88,69358,6,0,L|43:181,1,93.5,2|2,0:0|0:0,0:0:0:0: -181,294,69589,2,0,L|191:202,1,93.5,8|2,0:0|0:0,0:0:0:0: -39,101,69820,6,0,L|30:193,1,93.5,2|2,0:0|0:0,0:0:0:0: -168,307,70051,2,0,L|177:214,1,93.5,8|2,0:0|0:0,0:0:0:0: -198,30,70281,5,8,0:0:0:0: -220,46,70339,1,0,0:0:0:0: -244,58,70397,1,8,0:0:0:0: -269,65,70455,1,0,0:0:0:0: -296,68,70512,1,2,0:0:0:0: -322,66,70570,1,2,0:0:0:0: -348,60,70627,1,2,0:0:0:0: -373,49,70685,1,2,0:0:0:0: -396,36,70742,5,10,0:0:0:0: -441,30,70800,1,2,0:0:0:0: -483,49,70858,1,10,0:0:0:0: -510,87,70916,1,2,0:0:0:0: -512,133,70974,1,10,0:0:0:0: -492,175,71031,1,2,0:0:0:0: -453,199,71089,1,10,0:0:0:0: -407,200,71146,1,2,0:0:0:0: -364,184,71204,6,0,P|321:209|338:359,1,187,6|8,0:0|0:0,0:0:0:0: -419,372,71551,2,0,P|462:347|445:197,1,187,2|2,0:0|0:0,0:0:0:0: -332,104,71897,2,0,L|441:100,1,93.5,8|0,0:0|0:0,0:0:0:0: -248,179,72127,5,2,0:0:0:0: -248,179,72243,2,0,L|54:186,1,187,2|2,0:0|0:0,0:0:0:0: -144,259,72589,2,0,L|240:255,1,93.5,2|0,0:0|0:0,0:0:0:0: -164,104,72820,2,0,L|68:108,1,93.5,8|0,0:0|0:0,0:0:0:0: -111,338,73051,6,0,P|200:325|223:228,1,187,2|8,0:0|0:0,0:0:0:0: -192,136,73397,2,0,L|-1:143,1,187,2|2,0:0|0:0,0:0:0:0: -78,57,73743,2,0,L|174:53,1,93.5,8|0,0:0|0:0,0:0:0:0: -365,83,73974,5,2,0:0:0:0: -365,83,74089,2,0,B|294:83|288:84|255:135|251:135|191:135,1,187,2|2,0:0|0:0,0:0:0:0: -45,195,74435,2,0,P|87:216|103:264,1,93.5,2|0,0:0|0:0,0:0:0:0: -16,332,74666,2,0,B|63:323|63:323|109:331|109:331|160:322,1,140.25,8|0,0:0|0:0,0:0:0:0: -240,352,74897,6,0,P|224:290|298:187,1,187,2|8,0:0|0:0,0:0:0:0: -395,224,75243,2,0,P|411:286|337:389,1,187,2|2,0:0|0:0,0:0:0:0: -249,166,75589,2,0,L|239:73,1,93.5,8|0,0:0|0:0,0:0:0:0: -198,230,75820,5,2,0:0:0:0: -198,230,75935,2,0,B|249:267|296:244|318:210|318:210|294:242|318:278,1,187,2|2,0:0|0:0,0:0:0:0: -340,364,76281,2,0,L|433:357,1,93.5,2|0,0:0|0:0,0:0:0:0: -236,324,76512,2,0,L|120:332,1,93.5,8|0,0:0|0:0,0:0:0:0: -13,228,76743,6,0,B|96:223|96:223|131:234|131:234|198:229,1,187,2|8,0:0|0:0,0:0:0:0: -324,152,77089,2,0,B|257:157|257:157|222:146|222:146|139:151,1,187,2|2,0:0|0:0,0:0:0:0: -294,235,77435,2,0,L|388:228,1,93.5,8|0,0:0|0:0,0:0:0:0: -452,108,77666,5,2,0:0:0:0: -452,108,77781,1,8,0:0:0:0: -492,272,77897,1,10,0:0:0:0: -492,272,78012,1,8,0:0:0:0: -376,88,78127,2,0,P|404:44|488:40,1,140.25,8|0,0:0|0:0,0:0:0:0: -452,108,78358,2,0,L|301:120,1,140.25,2|0,0:0|0:0,0:0:0:0: -216,60,78589,6,0,P|232:132|144:216,1,187,6|8,0:0|0:0,0:0:0:0: -56,176,78935,2,0,P|40:104|128:20,1,187,2|2,0:0|0:0,0:0:0:0: -216,60,79281,2,0,L|223:153,1,93.5,8|0,0:0|0:0,0:0:0:0: -333,284,79512,5,2,0:0:0:0: -333,284,79627,2,0,L|317:82,1,187,2|2,0:0|0:0,0:0:0:0: -157,170,79974,2,0,P|175:203|256:211,1,93.5,2|0,0:0|0:0,0:0:0:0: -400,264,80204,2,0,P|382:231|301:223,1,93.5,8|0,0:0|0:0,0:0:0:0: -255,374,80435,6,0,L|447:359,1,187,2|8,0:0|0:0,0:0:0:0: -512,272,80781,2,0,L|320:287,1,187,2|2,0:0|0:0,0:0:0:0: -244,210,81127,2,0,L|337:203,1,93.5,8|0,0:0|0:0,0:0:0:0: -464,92,81358,5,2,0:0:0:0: -464,92,81474,2,0,P|484:152|420:272,1,187,2|2,0:0|0:0,0:0:0:0: -321,123,81820,2,0,L|310:23,1,93.5,2|0,0:0|0:0,0:0:0:0: -201,117,82051,2,0,L|215:256,1,140.25,8|0,0:0|0:0,0:0:0:0: -225,332,82281,6,0,P|153:348|53:272,1,187,2|8,0:0|0:0,0:0:0:0: -90,181,82627,2,0,P|162:165|262:241,1,187,2|2,0:0|0:0,0:0:0:0: -315,317,82974,2,0,L|441:307,1,93.5,8|0,0:0|0:0,0:0:0:0: -500,169,83204,5,2,0:0:0:0: -500,169,83320,2,0,L|306:184,1,187,2|2,0:0|0:0,0:0:0:0: -156,120,83666,2,0,P|140:68|152:24,1,93.5,2|0,0:0|0:0,0:0:0:0: -260,20,83897,2,0,P|276:72|264:116,1,93.5,8|0,0:0|0:0,0:0:0:0: -196,260,84127,6,0,L|10:240,1,187,2|8,0:0|0:0,0:0:0:0: -80,328,84474,2,0,L|265:347,1,187,2|2,0:0|0:0,0:0:0:0: -372,382,84820,2,0,P|386:339|425:314,1,93.5,8|0,0:0|0:0,0:0:0:0: -506,236,85051,2,0,P|461:246|420:225,1,93.5,2|0,0:0|0:0,0:0:0:0: -313,195,85281,2,0,P|344:228|346:274,1,93.5,8|0,0:0|0:0,0:0:0:0: -163,144,85512,6,0,L|14:135,1,140.25,2|0,0:0|0:0,0:0:0:0: -44,187,85743,2,0,L|171:194,1,93.5,8|0,0:0|0:0,0:0:0:0: -245,159,85974,2,0,P|232:96|199:67,1,93.5,2|0,0:0|0:0,0:0:0:0: -214,244,86204,2,0,L|404:225,1,187,8|2,0:0|0:0,0:0:0:0: -497,283,86551,1,0,0:0:0:0: -497,283,86666,2,0,P|436:302|409:354,1,93.5,8|0,0:0|0:0,0:0:0:0: -318,374,86897,6,0,L|328:163,1,187,2|8,0:0|0:0,0:0:0:0: -238,257,87243,1,0,0:0:0:0: -238,257,87358,2,0,L|248:46,1,187,2|8,0:0|0:0,0:0:0:0: -158,140,87704,1,2,0:0:0:0: -158,140,87820,6,0,L|163:34,1,93.5,2|0,0:0|0:0,0:0:0:0: -75,118,88051,2,0,L|70:223,1,93.5,8|0,0:0|0:0,0:0:0:0: -113,345,88281,5,0,0:0:0:0: -130,335,88339,1,0,0:0:0:0: -150,333,88397,1,0,0:0:0:0: -169,339,88454,1,0,0:0:0:0: -188,347,88512,5,10,0:0:0:0: -230,365,88570,1,2,0:0:0:0: -276,366,88628,1,10,0:0:0:0: -320,349,88686,1,2,0:0:0:0: -353,317,88743,6,0,L|362:113,1,187,6|8,0:0|0:0,0:0:0:0: -265,71,89089,1,0,0:0:0:0: -265,71,89204,2,0,P|216:122|257:235,1,187,2|8,0:0|0:0,0:0:0:0: -356,237,89551,1,0,0:0:0:0: -356,237,89666,6,0,L|472:227,1,93.5,2|0,0:0|0:0,0:0:0:0: -373,145,89897,2,0,L|222:158,1,140.25,8|0,0:0|0:0,0:0:0:0: -189,190,90127,2,0,L|282:181,1,93.5,2|0,0:0|0:0,0:0:0:0: -147,85,90358,2,0,L|24:95,1,93.5,8|0,0:0|0:0,0:0:0:0: -129,242,90589,6,0,P|186:269|266:193,1,187,2|8,0:0|0:0,0:0:0:0: -116,165,90935,2,0,P|64:200|89:308,1,187,2|2,0:0|0:0,0:0:0:0: -189,190,91281,2,0,P|190:140|162:101,1,93.5,8|0,0:0|0:0,0:0:0:0: -81,31,91512,2,0,L|174:23,1,93.5,2|0,0:0|0:0,0:0:0:0: -350,92,91743,2,0,L|257:100,1,93.5,8|0,0:0|0:0,0:0:0:0: -95,198,91974,2,0,L|188:190,1,93.5,2|0,0:0|0:0,0:0:0:0: -377,205,92204,1,2,0:0:0:0: -365,240,92262,1,2,0:0:0:0: -355,276,92320,1,2,0:0:0:0: -345,311,92377,1,2,0:0:0:0: -334,347,92435,6,0,P|264:294|292:211,1,187,2|8,0:0|0:0,0:0:0:0: -392,153,92781,1,0,0:0:0:0: -392,153,92897,2,0,P|420:70|350:17,1,187,2|8,0:0|0:0,0:0:0:0: -256,79,93243,1,0,0:0:0:0: -256,79,93358,6,0,L|263:195,1,93.5,2|0,0:0|0:0,0:0:0:0: -152,304,93589,2,0,L|142:141,1,140.25,8|0,0:0|0:0,0:0:0:0: -154,109,93820,2,0,P|122:142|78:155,1,93.5,2|0,0:0|0:0,0:0:0:0: -0,62,94051,2,0,P|31:28|75:15,1,93.5,8|0,0:0|0:0,0:0:0:0: -256,79,94281,6,0,L|267:265,1,187,2|8,0:0|0:0,0:0:0:0: -198,354,94627,1,0,0:0:0:0: -198,354,94743,2,0,P|286:378|361:327,1,187,2|8,0:0|0:0,0:0:0:0: -407,224,95089,1,0,0:0:0:0: -407,224,95204,6,0,L|247:211,1,140.25,2|0,0:0|0:0,0:0:0:0: -218,184,95435,2,0,L|330:193,1,93.5,8|0,0:0|0:0,0:0:0:0: -401,124,95666,2,0,P|410:77|383:30,1,93.5,2|0,0:0|0:0,0:0:0:0: -300,104,95897,2,0,P|291:149|311:191,1,93.5,8|0,0:0|0:0,0:0:0:0: -420,317,96127,6,0,P|334:293|273:358,1,187,2|8,0:0|0:0,0:0:0:0: -159,359,96474,1,0,0:0:0:0: -159,359,96589,2,0,P|73:382|12:317,1,187,2|8,0:0|0:0,0:0:0:0: -78,186,96935,1,0,0:0:0:0: -174,245,97051,6,0,L|195:51,1,187,2|8,0:0|0:0,0:0:0:0: -300,104,97397,1,0,0:0:0:0: -300,104,97512,2,0,B|309:153|309:153|287:195,1,93.5,2|0,0:0|0:0,0:0:0:0: -185,332,97743,2,0,B|164:293|164:293|173:244,1,93.5,8|0,0:0|0:0,0:0:0:0: -450,270,97974,6,0,L|259:281,1,187,2|8,0:0|0:0,0:0:0:0: -218,184,98320,1,0,0:0:0:0: -218,184,98435,2,0,L|409:173,1,187,2|8,0:0|0:0,0:0:0:0: -509,216,98781,1,0,0:0:0:0: -509,216,98897,6,0,B|477:120|541:136|509:24,1,187,2|8,0:0|0:0,0:0:0:0: -402,4,99243,1,0,0:0:0:0: -207,91,99358,2,0,L|217:183,1,93.5,2|0,0:0|0:0,0:0:0:0: -364,222,99589,2,0,L|353:129,1,93.5,8|0,0:0|0:0,0:0:0:0: -300,359,99820,5,2,0:0:0:0: -391,372,99935,1,0,0:0:0:0: -432,287,100051,1,8,0:0:0:0: -364,222,100166,1,0,0:0:0:0: -282,268,100281,1,2,0:0:0:0: -200,314,100397,1,0,0:0:0:0: -132,249,100512,1,8,0:0:0:0: -173,164,100628,1,0,0:0:0:0: -264,177,100743,6,0,L|248:73,1,93.5,2|0,0:0|0:0,0:0:0:0: -158,71,100974,2,0,L|173:164,1,93.5,8|0,0:0|0:0,0:0:0:0: -146,341,101204,2,0,L|130:237,1,93.5,2|0,0:0|0:0,0:0:0:0: -40,235,101435,2,0,L|54:327,1,93.5,8|0,0:0|0:0,0:0:0:0: -146,341,101666,6,0,P|214:349|234:329,1,93.5,2|0,0:0|0:0,0:0:0:0: -321,224,101897,2,0,P|253:216|233:236,1,93.5,8|0,0:0|0:0,0:0:0:0: -325,317,102127,1,2,0:0:0:0: -353,129,102243,1,2,0:0:0:0: -345,116,102300,1,2,0:0:0:0: -351,104,102358,1,2,0:0:0:0: -340,93,102416,1,2,0:0:0:0: -342,79,102474,1,2,0:0:0:0: -333,68,102531,1,2,0:0:0:0: -322,58,102589,5,10,0:0:0:0: -360,78,102646,1,2,0:0:0:0: -404,81,102704,1,2,0:0:0:0: -446,65,102762,1,2,0:0:0:0: -477,34,102819,1,2,0:0:0:0: -232,124,102935,2,0,L|173:109,1,46.75,2|0,0:0|0:0,0:0:0:0: -256,114,103051,5,2,0:0:0:0: -249,146,103108,1,2,0:0:0:0: -271,173,103166,1,10,0:0:0:0: -255,200,103224,1,2,0:0:0:0: -271,229,103281,1,2,0:0:0:0: -294,258,103339,1,2,0:0:0:0: -277,283,103397,1,2,0:0:0:0: -291,312,103454,1,2,0:0:0:0: -285,344,103512,6,0,P|370:322|476:316,1,187,6|8,0:0|0:0,0:0:0:0: -495,206,103858,1,0,0:0:0:0: -495,206,103974,2,0,P|456:129|349:137,1,187,2|8,0:0|0:0,0:0:0:0: -272,191,104320,1,0,0:0:0:0: -272,191,104435,6,0,L|280:61,1,93.5,2|0,0:0|0:0,0:0:0:0: -362,23,104666,2,0,P|287:75|188:64,1,187,8|2,0:0|0:0,0:0:0:0: -108,121,105012,1,0,0:0:0:0: -97,10,105127,1,8,0:0:0:0: -195,67,105243,1,8,0:0:0:0: -195,67,105301,1,8,0:0:0:0: -195,67,105358,6,0,P|211:139|111:224,1,187,2|8,0:0|0:0,0:0:0:0: -33,192,105704,1,0,0:0:0:0: -33,192,105820,2,0,L|41:292,1,93.5,2|0,0:0|0:0,0:0:0:0: -149,312,106051,2,0,L|141:218,1,93.5,8|0,0:0|0:0,0:0:0:0: -239,165,106281,6,0,P|272:198|279:244,1,93.5,2|0,0:0|0:0,0:0:0:0: -255,354,106512,2,0,L|351:344,1,93.5,8|0,0:0|0:0,0:0:0:0: -460,337,106743,2,0,P|399:276|386:191,1,140.25,2|0,0:0|0:0,0:0:0:0: -385,226,106974,2,0,L|481:216,1,93.5,8|0,0:0|0:0,0:0:0:0: -391,72,107204,6,0,L|204:91,1,187,2|8,0:0|0:0,0:0:0:0: -126,7,107551,1,0,0:0:0:0: -126,7,107666,2,0,P|95:51|127:179,1,187,2|8,0:0|0:0,0:0:0:0: -233,165,108012,1,0,0:0:0:0: -233,165,108127,6,0,L|219:270,1,93.5,2|0,0:0|0:0,0:0:0:0: -145,342,108358,2,0,P|217:288|336:317,1,187,8|2,0:0|0:0,0:0:0:0: -414,258,108704,1,0,0:0:0:0: -394,369,108820,1,8,0:0:0:0: -309,298,108935,1,0,0:0:0:0: -309,298,108993,1,0,0:0:0:0: -309,298,109051,6,0,L|301:103,1,187,2|8,0:0|0:0,0:0:0:0: -396,51,109397,1,0,0:0:0:0: -396,51,109512,2,0,P|427:108|408:160,1,93.5,2|0,0:0|0:0,0:0:0:0: -385,240,109743,2,0,L|491:230,1,93.5,8|0,0:0|0:0,0:0:0:0: -445,339,109974,6,0,L|339:349,1,93.5,2|0,0:0|0:0,0:0:0:0: -264,278,110204,2,0,P|250:233|260:188,1,93.5,8|0,0:0|0:0,0:0:0:0: -150,164,110435,2,0,P|130:227|164:322,1,140.25,2|0,0:0|0:0,0:0:0:0: -147,298,110666,2,0,P|101:287|57:301,1,93.5,8|0,0:0|0:0,0:0:0:0: -214,357,110897,6,0,L|400:339,1,187,2|8,0:0|0:0,0:0:0:0: -451,239,111243,1,0,0:0:0:0: -451,239,111358,2,0,L|264:256,1,187,2|8,0:0|0:0,0:0:0:0: -314,155,111704,1,0,0:0:0:0: -314,155,111820,6,0,L|407:146,1,93.5,2|0,0:0|0:0,0:0:0:0: -486,65,112051,2,0,P|443:147|450:238,1,187,8|2,0:0|0:0,0:0:0:0: -499,340,112397,1,0,0:0:0:0: -390,312,112512,1,8,0:0:0:0: -288,358,112627,1,0,0:0:0:0: -288,358,112685,1,0,0:0:0:0: -288,358,112743,6,0,L|100:344,1,187,2|8,0:0|0:0,0:0:0:0: -30,256,113089,1,0,0:0:0:0: -30,256,113204,2,0,L|218:270,1,187,2|8,0:0|0:0,0:0:0:0: -308,202,113551,1,0,0:0:0:0: -308,202,113666,6,0,P|322:134|256:43,1,187,2|8,0:0|0:0,0:0:0:0: -211,146,114012,1,0,0:0:0:0: -211,146,114127,2,0,L|221:312,1,140.25,2|0,0:0|0:0,0:0:0:0: -219,285,114358,2,0,P|262:271|306:285,1,93.5,8|0,0:0|0:0,0:0:0:0: -166,367,114589,6,0,B|94:317|105:208|187:178|256:192|256:192|325:205|407:176|418:67|346:17,1,561,2|8,0:0|0:0,0:0:0:0: -292,98,115512,1,2,0:0:0:0: -346,367,116435,6,0,B|418:317|407:208|325:178|256:192|256:192|187:205|105:176|94:67|166:17,1,561,2|8,0:0|0:0,0:0:0:0: -219,98,117358,1,2,0:0:0:0: -292,285,117589,1,8,0:0:0:0: -438,147,117820,1,2,0:0:0:0: -219,98,118051,2,0,L|88:91,1,93.5,8|0,0:0|0:0,0:0:0:0: -10,235,118281,6,0,P|-9:192|1:144,1,93.5,2|2,0:0|0:0,0:0:0:0: -154,279,118512,2,0,P|173:322|163:369,1,93.5,8|0,0:0|0:0,0:0:0:0: -3,339,118743,1,8,0:0:0:0: -219,215,118858,2,0,P|224:170|244:-10,1,187,8|2,0:0|0:0,0:0:0:0: -114,85,119204,5,2,0:0:0:0: -145,112,119262,1,2,0:0:0:0: -151,155,119319,1,2,0:0:0:0: -134,195,119377,1,2,0:0:0:0: -102,223,119434,1,2,0:0:0:0: -84,265,119493,1,2,0:0:0:0: -80,305,119551,1,2,0:0:0:0: -101,342,119608,1,2,0:0:0:0: -135,372,119666,5,2,0:0:0:0: -190,375,119723,1,2,0:0:0:0: -230,335,119781,1,2,0:0:0:0: -280,309,119839,1,2,0:0:0:0: -336,310,119897,1,2,0:0:0:0: -377,346,119954,1,2,0:0:0:0: -425,374,120012,1,2,0:0:0:0: -475,348,120070,1,2,0:0:0:0: -495,297,120127,6,0,P|500:240|514:98,1,187,6|8,0:0|0:0,0:0:0:0: -351,20,120474,2,0,P|345:76|332:219,1,187,2|2,0:0|0:0,0:0:0:0: -415,362,120820,2,0,B|458:378|458:378|508:361,1,93.5,8|0,0:0|0:0,0:0:0:0: -407,268,121051,5,2,0:0:0:0: -332,321,121166,2,0,L|145:308,1,187,2|2,0:0|0:0,0:0:0:0: -213,192,121512,2,0,P|219:146|197:105,1,93.5,2|0,0:0|0:0,0:0:0:0: -47,283,121743,2,0,P|41:329|63:370,1,93.5,8|0,0:0|0:0,0:0:0:0: -213,192,121974,6,0,L|27:180,1,187,2|8,0:0|0:0,0:0:0:0: -146,308,122320,2,0,L|332:321,1,187,2|2,0:0|0:0,0:0:0:0: -226,107,122666,2,0,P|203:147|214:191,1,93.5,8|0,0:0|0:0,0:0:0:0: -83,365,122897,5,2,0:0:0:0: -31,289,123012,2,0,P|24:211|14:102,1,187,2|2,0:0|0:0,0:0:0:0: -214,192,123358,2,0,P|174:214|128:208,1,93.5,2|0,0:0|0:0,0:0:0:0: -303,114,123589,2,0,P|342:91|388:97,1,93.5,8|0,0:0|0:0,0:0:0:0: -498,293,123820,6,0,L|306:281,1,187,2|8,0:0|0:0,0:0:0:0: -214,192,124166,2,0,L|406:204,1,187,2|2,0:0|0:0,0:0:0:0: -278,344,124512,2,0,P|245:309|242:263,1,93.5,8|0,0:0|0:0,0:0:0:0: -408,48,124743,5,2,0:0:0:0: -327,94,124858,2,0,L|311:281,1,187,2|2,0:0|0:0,0:0:0:0: -214,192,125204,2,0,P|154:196|114:171,1,93.5,2|0,0:0|0:0,0:0:0:0: -60,84,125435,2,0,P|120:80|160:105,1,93.5,8|0,0:0|0:0,0:0:0:0: -110,374,125666,5,10,0:0:0:0: -10,209,125781,1,8,0:0:0:0: -184,284,125897,1,8,0:0:0:0: -0,326,126012,1,8,0:0:0:0: -125,181,126127,2,0,B|202:169|224:229|319:212,1,187,2|0,1:0|0:0,0:0:0:0: -398,154,126474,1,0,0:0:0:0: -398,154,126589,6,0,P|346:110|352:43,1,140.25,2|0,0:0|0:0,0:0:0:0: -413,83,126820,2,0,B|419:162|419:162|406:195|406:195|413:267,1,187,2|2,1:0|0:0,0:0:0:0: -367,346,127166,1,0,0:0:0:0: -275,323,127281,1,8,0:0:0:0: -195,372,127397,1,0,0:0:0:0: -195,372,127454,1,0,0:0:0:0: -195,372,127512,6,0,P|190:282|262:228,1,187,6|8,0:0|0:0,0:0:0:0: -330,85,127858,2,0,P|334:174|262:228,1,187,2|2,0:0|0:0,0:0:0:0: -157,129,128204,2,0,L|251:135,1,93.5,8|0,0:0|0:0,0:0:0:0: -456,206,128435,5,2,0:0:0:0: -394,273,128551,2,0,L|188:261,1,187,2|2,0:0|0:0,0:0:0:0: -298,358,128897,2,0,P|341:372|387:364,1,93.5,2|0,0:0|0:0,0:0:0:0: -303,177,129127,2,0,P|259:162|213:170,1,93.5,8|0,0:0|0:0,0:0:0:0: -20,270,129358,6,0,L|206:262,1,187,2|8,0:0|0:0,0:0:0:0: -303,177,129704,2,0,L|117:185,1,187,2|2,0:0|0:0,0:0:0:0: -22,90,130051,2,0,P|82:85|120:118,1,93.5,8|0,0:0|0:0,0:0:0:0: -206,261,130281,5,2,0:0:0:0: -128,351,130397,2,0,P|86:271|116:185,1,187,2|2,0:0|0:0,0:0:0:0: -206,261,130743,2,0,L|225:365,1,93.5,2|0,0:0|0:0,0:0:0:0: -320,268,130974,2,0,L|300:163,1,93.5,8|0,0:0|0:0,0:0:0:0: -236,21,131204,6,0,P|189:99|223:182,1,187,2|8,0:0|0:0,0:0:0:0: -368,330,131551,2,0,P|414:252|380:169,1,187,2|2,0:0|0:0,0:0:0:0: -285,84,131897,2,8,L|302:175,1,93.5,8|0,0:0|0:0,0:0:0:0: -256,337,132127,5,2,0:0:0:0: -167,301,132243,2,0,P|234:242|320:268,1,187,2|2,0:0|0:0,0:0:0:0: -104,372,132589,2,0,P|57:369|10:367,1,93.5,2|0,0:0|0:0,0:0:0:0: -155,245,132820,2,0,P|201:242|248:240,1,93.5,8|0,0:0|0:0,0:0:0:0: -376,268,133051,5,2,0:0:0:0: -363,249,133108,1,2,0:0:0:0: -356,228,133166,1,2,0:0:0:0: -355,206,133224,1,2,0:0:0:0: -360,184,133281,1,10,0:0:0:0: -372,165,133339,1,2,0:0:0:0: -388,150,133397,1,10,0:0:0:0: -408,140,133454,1,2,0:0:0:0: -431,136,133512,1,2,1:0:0:0: -433,216,133743,1,8,0:0:0:0: -433,216,133858,1,8,0:0:0:0: -500,268,133973,5,2,0:0:0:0: -495,296,134031,1,2,0:0:0:0: -490,324,134088,1,2,0:0:0:0: -485,352,134146,1,2,0:0:0:0: -480,380,134204,2,0,B|334:389|359:290|190:308,1,280.5,2|0,1:0|0:0,0:0:0:0: -213,83,134666,2,0,P|238:121|235:167,1,93.5,8|0,0:0|0:0,0:0:0:0: -109,244,134897,6,0,L|-10:240,1,93.5,4|0,0:0|0:0,0:0:0:0: -236,167,135127,2,0,L|329:170,1,93.5,8|0,0:0|0:0,0:0:0:0: -208,383,135358,2,0,L|21:376,1,187,2|8,0:0|0:0,0:0:0:0: -297,282,135704,2,0,L|203:278,1,93.5,0|2,0:0|0:0,0:0:0:0: -147,80,135935,6,0,L|240:83,1,93.5,0|8,0:0|0:0,0:0:0:0: -397,51,136166,2,0,L|347:130,1,93.5,0|2,0:0|0:0,0:0:0:0: -297,282,136397,2,0,L|253:199,1,93.5,0|8,0:0|0:0,0:0:0:0: -397,51,136627,1,0,0:0:0:0: -502,166,136743,6,0,L|409:169,1,93.5,2|0,0:0|0:0,0:0:0:0: -297,282,136974,2,0,L|390:285,1,93.5,8|0,0:0|0:0,0:0:0:0: -296,151,137204,6,0,L|203:154,1,93.5,2|0,0:0|0:0,0:0:0:0: -89,242,137435,2,0,L|182:245,1,93.5,8|0,0:0|0:0,0:0:0:0: -220,337,137666,6,0,L|-2:329,1,187,2|8,0:0|0:0,0:0:0:0: -202,154,138012,2,0,L|424:161,1,187,2|2,0:0|0:0,0:0:0:0: -338,61,138358,2,0,L|244:57,1,93.5,8|0,0:0|0:0,0:0:0:0: -431,315,138589,6,0,B|460:189|460:189|452:223|480:258,1,187,2|8,0:0|0:0,0:0:0:0: -507,343,138935,1,0,0:0:0:0: -507,343,139051,2,0,B|416:313|411:386|300:358,1,187,2|8,0:0|0:0,0:0:0:0: -177,244,139397,1,0,0:0:0:0: -177,244,139512,6,0,B|268:214|273:287|384:259,1,187,2|8,0:0|0:0,0:0:0:0: -424,173,139858,1,0,0:0:0:0: -339,99,139974,2,0,L|328:-1,1,93.5,2|2,0:0|0:0,0:0:0:0: -177,244,140204,2,0,L|167:151,1,93.5,8|0,0:0|0:0,0:0:0:0: -248,95,140435,6,0,L|257:187,1,93.5,2|0,0:0|0:0,0:0:0:0: -96,300,140666,2,0,L|86:207,1,93.5,8|0,0:0|0:0,0:0:0:0: -167,151,140897,6,0,L|177:244,1,93.5,2|0,0:0|0:0,0:0:0:0: -355,315,141127,2,0,L|346:222,1,93.5,8|0,0:0|0:0,0:0:0:0: -263,380,141358,6,0,P|317:344|444:352,1,187,2|8,0:0|0:0,0:0:0:0: -177,244,141704,1,0,0:0:0:0: -177,244,141820,2,0,P|123:280|-4:272,1,187,2|8,0:0|0:0,0:0:0:0: -0,182,142166,1,0,0:0:0:0: -176,58,142281,6,0,L|167:151,1,93.5,2|0,0:0|0:0,0:0:0:0: -345,221,142512,2,0,L|355:129,1,93.5,8|0,0:0|0:0,0:0:0:0: -257,188,142743,6,0,L|248:281,1,93.5,2|0,0:0|0:0,0:0:0:0: -426,351,142974,2,0,L|435:258,1,93.5,8|0,0:0|0:0,0:0:0:0: -203,348,143204,6,0,P|239:361|326:297,1,140.25,2|0,0:0|0:0,0:0:0:0: -435,258,143435,6,0,P|398:267|316:196,1,126.224996147919,8|0,0:0|0:0,0:0:0:0: -257,188,143666,6,0,P|292:194|361:121,1,112.2,2|0,0:0|0:0,0:0:0:0: -419,136,143897,6,0,P|388:138|333:70,1,98.1749970039369,8|0,0:0|0:0,0:0:0:0: -257,188,144127,6,0,L|275:1,1,187,2|8,0:0|0:0,0:0:0:0: -435,258,144474,1,0,0:0:0:0: -435,258,144589,2,0,L|453:71,1,187,2|8,0:0|0:0,0:0:0:0: -149,337,144935,1,0,0:0:0:0: -149,337,145051,6,0,L|159:232,1,93.5,2|0,0:0|0:0,0:0:0:0: -353,153,145281,2,0,L|342:257,1,93.5,8|0,0:0|0:0,0:0:0:0: -169,318,145512,6,0,L|181:199,1,93.5,2|0,0:0|0:0,0:0:0:0: -332,171,145742,2,0,L|319:300,1,93.5,8|0,0:0|0:0,0:0:0:0: -95,131,145974,6,0,L|104:28,1,93.5,2|0,0:0|0:0,0:0:0:0: -247,76,146204,2,0,L|237:169,1,93.5,8|0,0:0|0:0,0:0:0:0: -166,150,146435,2,0,L|176:57,1,93.5,2|0,0:0|0:0,0:0:0:0: -318,95,146666,2,0,L|308:188,1,93.5,8|0,0:0|0:0,0:0:0:0: -475,319,146897,6,0,L|465:216,1,93.5,2|0,0:0|0:0,0:0:0:0: -322,263,147127,2,0,L|332:357,1,93.5,8|0,0:0|0:0,0:0:0:0: -403,338,147358,2,0,L|394:245,1,93.5,2|0,0:0|0:0,0:0:0:0: -252,283,147589,2,0,L|261:376,1,93.5,8|0,0:0|0:0,0:0:0:0: -38,368,147820,6,0,L|140:358,1,93.5,2|0,0:0|0:0,0:0:0:0: -93,215,148050,2,0,L|-1:224,1,93.5,8|0,0:0|0:0,0:0:0:0: -247,203,148281,1,2,0:0:0:0: -186,101,148397,1,8,0:0:0:0: -365,200,148512,1,8,0:0:0:0: -189,304,148627,1,8,0:0:0:0: -237,20,148743,5,2,0:0:0:0: -95,132,148858,1,2,0:0:0:0: -95,132,148916,1,2,0:0:0:0: -95,132,148974,1,10,0:0:0:0: -276,126,149089,1,0,0:0:0:0: -125,24,149204,5,2,0:0:0:0: -189,196,149320,1,8,0:0:0:0: -361,132,149435,1,8,0:0:0:0: -425,304,149551,1,8,0:0:0:0: -330,357,149666,6,0,P|240:297|79:327,1,280.5,6|0,0:0|0:0,0:0:0:0: -237,168,150589,2,0,P|327:108|488:138,1,280.5,2|0,0:0|0:0,0:0:0:0: -401,288,151512,2,0,L|122:257,1,280.5,2|0,0:0|0:0,0:0:0:0: -44,309,152320,1,8,0:0:0:0: -44,309,152377,1,8,0:0:0:0: -44,309,152435,5,10,0:0:0:0: -44,197,152551,1,2,0:0:0:0: -151,162,152666,1,8,0:0:0:0: -216,253,152781,1,2,0:0:0:0: -281,344,152897,1,2,0:0:0:0: -388,309,153012,1,2,0:0:0:0: -388,197,153128,1,8,0:0:0:0: -281,162,153243,1,2,0:0:0:0: -216,253,153358,6,0,L|503:229,1,280.5,6|0,0:0|0:0,0:0:0:0: -296,131,154281,2,0,L|9:155,1,280.5,2|0,0:0|0:0,0:0:0:0: -148,338,155204,2,0,L|428:315,1,280.5,2|0,0:0|0:0,0:0:0:0: -492,225,156127,5,10,0:0:0:0: -492,225,156185,1,8,0:0:0:0: -492,225,156243,1,8,0:0:0:0: -320,168,156358,1,8,0:0:0:0: -427,315,156474,1,8,0:0:0:0: -427,315,156531,1,8,0:0:0:0: -427,315,156589,1,10,0:0:0:0: -427,133,156704,1,8,0:0:0:0: -320,280,156820,1,10,0:0:0:0: -492,225,156935,1,8,0:0:0:0: -320,280,157051,6,0,B|194:258|174:358|44:320,1,280.5,6|0,0:0|0:0,0:0:0:0: -0,138,157974,2,0,P|88:81|186:211,1,280.5,2|0,0:0|0:0,0:0:0:0: -281,344,158897,2,0,L|312:65,1,280.5,2|0,0:0|0:0,0:0:0:0: -419,30,159704,1,8,0:0:0:0: -419,30,159762,1,8,0:0:0:0: -419,30,159820,5,10,0:0:0:0: -484,121,159935,1,8,0:0:0:0: -419,212,160051,1,8,0:0:0:0: -312,177,160166,1,8,0:0:0:0: -312,65,160281,1,10,0:0:0:0: -205,30,160397,1,8,0:0:0:0: -140,121,160513,1,8,0:0:0:0: -206,210,160627,1,8,0:0:0:0: -312,65,160743,6,0,L|418:48,1,93.5,6|0,0:0|0:0,0:0:0:0: -484,121,160974,2,0,L|378:138,1,93.5,8|0,0:0|0:0,0:0:0:0: -206,210,161204,6,0,L|312:193,1,93.5,2|0,0:0|0:0,0:0:0:0: -378,266,161435,2,0,L|272:283,1,93.5,8|0,0:0|0:0,0:0:0:0: -44,197,161666,6,0,L|33:289,1,93.5,2|0,0:0|0:0,0:0:0:0: -116,362,161897,2,0,L|126:269,1,93.5,8|0,0:0|0:0,0:0:0:0: -216,117,162127,6,0,L|205:209,1,93.5,2|0,0:0|0:0,0:0:0:0: -288,282,162358,2,0,L|298:189,1,93.5,8|0,0:0|0:0,0:0:0:0: -388,124,162589,6,0,P|436:122|482:167,1,93.5,2|0,0:0|0:0,0:0:0:0: -494,219,162820,2,0,P|446:221|400:176,1,93.5,8|0,0:0|0:0,0:0:0:0: -496,64,163051,2,0,P|498:110|472:148,1,93.5,2|0,0:0|0:0,0:0:0:0: -386,278,163281,2,0,P|383:232|410:194,1,93.5,8|0,0:0|0:0,0:0:0:0: -511,346,163512,6,0,L|397:359,1,93.5,2|0,0:0|0:0,0:0:0:0: -195,271,163743,2,0,L|287:281,1,93.5,8|0,0:0|0:0,0:0:0:0: -410,194,163974,6,0,L|296:207,1,93.5,2|0,0:0|0:0,0:0:0:0: -94,119,164205,2,0,L|186:129,1,93.5,8|0,0:0|0:0,0:0:0:0: -440,44,164435,6,0,P|407:76|401:122,1,93.5,2|0,0:0|0:0,0:0:0:0: -458,266,164666,2,0,P|445:221|409:193,1,93.5,8|0,0:0|0:0,0:0:0:0: -255,171,164897,2,0,P|299:182|342:164,1,93.5,2|0,0:0|0:0,0:0:0:0: -508,108,165127,1,8,0:0:0:0: -494,219,165243,1,8,0:0:0:0: -494,219,165301,1,8,0:0:0:0: -494,219,165358,6,0,L|482:321,1,93.5,2|0,0:0|0:0,0:0:0:0: -341,164,165589,1,10,0:0:0:0: -341,164,165704,1,2,0:0:0:0: -306,264,165820,5,10,0:0:0:0: -271,234,165877,1,10,0:0:0:0: -225,232,165935,1,2,0:0:0:0: -188,258,165993,1,2,0:0:0:0: -176,303,166050,1,10,0:0:0:0: -164,348,166108,1,10,0:0:0:0: -127,374,166166,1,10,0:0:0:0: -81,372,166224,1,10,0:0:0:0: -46,343,166281,6,0,P|47:239|141:235,1,187,6|8,0:0|0:0,0:0:0:0: -225,232,166627,1,0,0:0:0:0: -225,232,166743,2,0,L|257:25,1,187,2|8,0:0|0:0,0:0:0:0: -150,1,167089,1,0,0:0:0:0: -150,1,167204,6,0,P|137:59|160:95,1,93.5,2|0,0:0|0:0,0:0:0:0: -235,165,167435,2,0,L|379:150,1,140.25,8|0,0:0|0:0,0:0:0:0: -426,172,167666,2,0,L|311:183,1,93.5,2|0,0:0|0:0,0:0:0:0: -223,301,167897,2,0,L|337:289,1,93.5,8|0,0:0|0:0,0:0:0:0: -476,116,168127,6,0,P|416:98|365:216,1,187,2|8,0:0|0:0,0:0:0:0: -425,314,168474,2,0,P|470:271|393:167,1,187,2|2,0:0|0:0,0:0:0:0: -280,170,168820,2,0,P|286:218|342:259,1,93.5,8|0,0:0|0:0,0:0:0:0: -352,356,169051,6,0,L|239:341,1,93.5,2|0,0:0|0:0,0:0:0:0: -122,225,169281,2,0,L|215:238,1,93.5,8|0,0:0|0:0,0:0:0:0: -425,171,169512,2,0,L|332:158,1,93.5,2|0,0:0|0:0,0:0:0:0: -200,91,169743,1,10,0:0:0:0: -203,126,169800,1,2,0:0:0:0: -206,163,169858,1,2,0:0:0:0: -211,201,169916,1,2,0:0:0:0: -215,238,169974,6,0,P|173:305|43:277,1,187,2|8,0:0|0:0,0:0:0:0: -29,212,170320,1,0,0:0:0:0: -29,212,170435,2,0,L|57:7,1,187,2|8,0:0|0:0,0:0:0:0: -127,111,170781,1,0,0:0:0:0: -127,111,170897,6,0,P|172:147|220:138,1,93.5,2|0,0:0|0:0,0:0:0:0: -389,111,171127,2,0,P|315:119|279:171,1,140.25,8|0,0:0|0:0,0:0:0:0: -264,184,171358,2,0,P|268:220|279:296,1,93.5,2|0,0:0|0:0,0:0:0:0: -470,358,171589,2,0,P|465:321|455:246,1,93.5,8|0,0:0|0:0,0:0:0:0: -508,108,171820,6,0,B|432:101|432:101|411:107|411:107|316:99,1,187,2|8,0:0|0:0,0:0:0:0: -214,201,172166,1,0,0:0:0:0: -214,201,172281,2,0,B|289:207|289:207|310:201|310:201|405:209,1,187,2|8,0:0|0:0,0:0:0:0: -223,301,172628,1,0,0:0:0:0: -223,301,172743,2,0,L|83:288,1,140.25,2|0,0:0|0:0,0:0:0:0: -59,302,172974,2,0,L|152:310,1,93.5,8|0,0:0|0:0,0:0:0:0: -329,295,173204,2,0,P|332:355|307:389,1,93.5,2|0,0:0|0:0,0:0:0:0: -264,186,173435,2,0,P|261:126|286:92,1,93.5,8|0,0:0|0:0,0:0:0:0: -170,178,173666,6,0,B|75:177|99:249|4:249,1,187,2|8,0:0|0:0,0:0:0:0: -203,99,174012,1,0,0:0:0:0: -203,99,174127,2,0,B|297:99|273:27|368:27,1,187,2|8,0:0|0:0,0:0:0:0: -484,72,174474,1,0,0:0:0:0: -484,72,174589,6,0,P|475:133|458:257,1,187,2|8,0:0|0:0,0:0:0:0: -361,315,174935,1,0,0:0:0:0: -361,315,175051,2,0,P|355:274|348:222,1,93.5,2|0,0:0|0:0,0:0:0:0: -249,292,175281,2,0,P|254:332|262:385,1,93.5,8|0,0:0|0:0,0:0:0:0: -398,152,175512,6,0,P|312:207|229:175,1,187,2|8,0:0|0:0,0:0:0:0: -164,280,175858,1,0,0:0:0:0: -164,280,175974,2,0,P|90:226|3:249,1,187,2|8,0:0|0:0,0:0:0:0: -237,182,176320,1,0,0:0:0:0: -237,182,176435,6,0,B|229:94|283:97|266:-7,1,187,2|8,0:0|0:0,0:0:0:0: -151,40,176781,1,0,0:0:0:0: -0,156,176897,2,0,L|93:149,1,93.5,2|0,0:0|0:0,0:0:0:0: -164,280,177127,2,0,L|62:286,1,93.5,8|0,0:0|0:0,0:0:0:0: -208,145,177358,5,6,0:0:0:0: -242,59,177474,1,0,0:0:0:0: -334,63,177589,1,8,0:0:0:0: -358,154,177704,1,0,0:0:0:0: -281,204,177820,1,2,0:0:0:0: -208,145,177935,1,0,0:0:0:0: -129,196,178051,1,8,0:0:0:0: -153,286,178166,1,0,0:0:0:0: -246,290,178281,6,0,L|235:384,1,93.5,2|0,0:0|0:0,0:0:0:0: -142,378,178512,2,0,L|153:286,1,93.5,8|0,0:0|0:0,0:0:0:0: -139,103,178743,2,0,L|128:197,1,93.5,2|0,0:0|0:0,0:0:0:0: -35,191,178974,2,0,L|45:98,1,93.5,8|0,0:0|0:0,0:0:0:0: -139,103,179204,6,0,P|186:128|228:120,1,93.5,2|0,0:0|0:0,0:0:0:0: -362,179,179435,2,0,P|316:174|277:198,1,93.5,8|0,0:0|0:0,0:0:0:0: -392,365,179666,5,2,0:0:0:0: -464,306,179781,1,8,0:0:0:0: -464,306,179839,1,8,0:0:0:0: -464,306,179897,1,8,0:0:0:0: -378,270,180012,1,8,0:0:0:0: -450,211,180127,5,2,0:0:0:0: -362,179,180243,1,8,0:0:0:0: -362,179,180301,1,8,0:0:0:0: -362,179,180358,2,0,L|257:164,1,93.5,8|0,0:0|0:0,0:0:0:0: -160,37,180589,5,2,0:0:0:0: -105,123,180704,1,8,0:0:0:0: -269,165,180820,1,8,0:0:0:0: -259,62,180935,1,8,0:0:0:0: -172,203,181051,6,0,P|205:334|201:384,1,187,6|8,0:0|0:0,0:0:0:0: -121,328,181397,1,0,0:0:0:0: -37,358,181512,2,0,P|4:227|8:177,1,187,2|8,0:0|0:0,0:0:0:0: -58,98,181858,1,0,0:0:0:0: -58,98,181974,6,0,P|104:96|150:106,1,93.5,2|0,0:0|0:0,0:0:0:0: -381,158,182204,2,0,P|334:191|224:165,1,140.25,8|0,0:0|0:0,0:0:0:0: -214,161,182435,2,0,L|223:260,1,93.5,2|0,0:0|0:0,0:0:0:0: -184,337,182666,1,8,0:0:0:0: -278,329,182781,6,0,B|383:304|353:370|477:341,1,187,2|2,0:0|0:0,0:0:0:0: -505,267,183127,2,0,P|488:184|474:75,1,187,8|2,0:0|0:0,0:0:0:0: -403,21,183474,2,0,P|382:61|397:133,1,93.5,0|8,0:0|0:0,0:0:0:0: -331,198,183704,1,0,0:0:0:0: -287,106,183820,6,0,P|225:59|118:89,1,187,2|8,0:0|0:0,0:0:0:0: -90,168,184166,1,0,0:0:0:0: -29,98,184281,2,0,P|36:44|36:0,1,93.5,2|0,0:0|0:0,0:0:0:0: -183,152,184512,2,0,P|176:206|176:250,1,93.5,8|0,0:0|0:0,0:0:0:0: -134,324,184743,6,0,P|183:295|325:315,1,187,2|8,0:0|0:0,0:0:0:0: -370,231,185089,1,0,0:0:0:0: -357,132,185204,2,0,P|308:161|166:141,1,187,2|8,0:0|0:0,0:0:0:0: -102,104,185551,1,0,0:0:0:0: -102,104,185666,6,0,L|89:-11,1,93.5,2|0,0:0|0:0,0:0:0:0: -103,202,185897,2,0,P|73:251|84:354,1,140.25,8|0,0:0|0:0,0:0:0:0: -101,371,186127,2,0,L|213:361,1,93.5,2|0,0:0|0:0,0:0:0:0: -281,384,186358,1,8,0:0:0:0: -254,295,186474,6,0,P|248:229|231:92,1,187,2|2,0:0|0:0,0:0:0:0: -274,29,186820,2,0,P|327:8|437:76,1,187,8|2,0:0|0:0,0:0:0:0: -509,130,187166,1,0,0:0:0:0: -422,165,187281,2,0,P|381:187|321:225,1,93.5,8|0,0:0|0:0,0:0:0:0: -268,273,187512,6,0,P|209:225|94:253,1,187,2|8,0:0|0:0,0:0:0:0: -25,205,187858,1,0,0:0:0:0: -36,296,187974,2,0,L|43:393,1,93.5,2|0,0:0|0:0,0:0:0:0: -95,151,188204,2,0,L|88:54,1,93.5,8|0,0:0|0:0,0:0:0:0: -164,6,188435,6,0,P|233:5|369:38,1,187,2|8,0:0|0:0,0:0:0:0: -438,57,188781,1,0,0:0:0:0: -367,123,188897,2,0,P|298:124|162:91,1,187,2|8,0:0|0:0,0:0:0:0: -95,151,189243,1,0,0:0:0:0: -95,151,189358,6,0,L|106:252,1,93.5,2|0,0:0|0:0,0:0:0:0: -54,321,189589,2,0,P|109:298|219:381,1,187,8|2,0:0|0:0,0:0:0:0: -285,305,189935,1,0,0:0:0:0: -370,338,190051,2,0,P|419:338|462:310,1,93.5,8|0,0:0|0:0,0:0:0:0: -497,235,190281,6,0,P|485:171|468:44,1,187,2|8,0:0|0:0,0:0:0:0: -387,10,190627,1,0,0:0:0:0: -387,10,190743,2,0,L|377:109,1,93.5,2|0,0:0|0:0,0:0:0:0: -294,258,190974,2,0,L|304:159,1,93.5,8|0,0:0|0:0,0:0:0:0: -291,73,191204,6,0,P|239:22|128:42,1,187,2|8,0:0|0:0,0:0:0:0: -110,126,191551,1,0,0:0:0:0: -161,202,191666,2,0,P|209:193|250:142,1,93.5,2|0,0:0|0:0,0:0:0:0: -133,37,191897,2,0,P|83:37|30:77,1,93.5,8|0,0:0|0:0,0:0:0:0: -13,160,192127,6,0,B|45:242|165:276|256:192|256:192|347:108|467:142|499:224,1,561,2|8,0:0|0:0,0:0:0:0: -373,263,193051,1,2,0:0:0:0: -13,224,193974,6,0,B|45:142|165:108|256:192|256:192|347:276|467:242|499:160,1,561,2|8,0:0|0:0,0:0:0:0: -373,121,194898,1,2,0:0:0:0: -139,263,195127,1,8,0:0:0:0: -343,342,195358,1,2,0:0:0:0: -373,121,195589,2,8,L|359:5,1,93.5 -232,190,195820,6,0,P|228:235|251:275,1,93.5,2|10,0:0|0:0,0:0:0:0: -447,186,196051,2,0,P|470:147|461:88,1,93.5,10|10,0:0|0:0,0:0:0:0: -327,213,196281,1,10,0:0:0:0: -512,262,196397,5,10,0:0:0:0: -496,271,196454,1,2,0:0:0:0: -483,284,196512,1,10,0:0:0:0: -472,299,196570,1,10,0:0:0:0: -463,316,196627,1,10,0:0:0:0: -456,335,196685,1,10,0:0:0:0: -452,358,196743,5,10,0:0:0:0: -426,322,196801,1,10,0:0:0:0: -390,303,196858,1,10,0:0:0:0: -347,295,196916,1,10,0:0:0:0: -303,298,196974,1,10,0:0:0:0: -269,319,197031,1,10,0:0:0:0: -240,350,197089,1,10,0:0:0:0: -199,361,197147,1,10,0:0:0:0: -151,345,197204,5,10,0:0:0:0: -112,305,197262,1,10,0:0:0:0: -104,251,197320,1,10,0:0:0:0: -127,202,197377,1,10,0:0:0:0: -172,171,197435,1,10,0:0:0:0: -226,173,197493,1,10,0:0:0:0: -267,207,197551,1,10,0:0:0:0: -319,215,197608,1,10,0:0:0:0: -364,185,197666,6,0,P|371:142|384:-12,1,187,6|8,0:0|0:0,0:0:0:0: -293,44,198012,1,0,0:0:0:0: -464,131,198127,2,0,P|457:174|444:328,1,187,2|8,0:0|0:0,0:0:0:0: -364,185,198473,1,0,0:0:0:0: -249,278,198589,6,0,P|198:265|118:255,1,93.5,2|0,0:0|0:0,0:0:0:0: -30,99,198820,1,8,0:0:0:0: -30,99,199051,2,0,P|76:91|121:79,1,93.5,2|0,0:0|0:0,0:0:0:0: -199,27,199281,1,8,0:0:0:0: -113,175,199396,1,0,0:0:0:0: -355,186,199512,6,0,P|284:122|191:131,1,187,2|8,0:0|0:0,0:0:0:0: -113,175,199858,1,0,0:0:0:0: -180,321,199974,2,0,P|188:279|192:191,1,93.5,2|0,0:0|0:0,0:0:0:0: -16,163,200204,2,0,P|8:205|4:293,1,93.5,8|0,0:0|0:0,0:0:0:0: -86,315,200435,5,2,0:0:0:0: -192,228,200551,1,0,0:0:0:0: -71,107,200666,2,0,B|57:79|57:79|74:12,1,93.5,8|0,0:0|0:0,0:0:0:0: -268,190,200897,2,0,B|282:218|282:218|265:285,1,93.5,2|0,0:0|0:0,0:0:0:0: -86,200,201127,2,0,L|187:185,1,93.5,8|0,0:0|0:0,0:0:0:0: -512,85,201358,6,0,P|428:94|348:27,1,187,2|8,0:0|0:0,0:0:0:0: -247,2,201704,1,0,0:0:0:0: -190,93,201820,2,0,P|185:138|171:219,1,93.5,2|0,0:0|0:0,0:0:0:0: -357,153,202051,2,0,P|364:198|384:277,1,93.5,8|0,0:0|0:0,0:0:0:0: -427,341,202281,5,2,0:0:0:0: -449,182,202397,1,0,0:0:0:0: -287,258,202512,2,0,L|190:278,1,93.5,8|0,0:0|0:0,0:0:0:0: -10,123,202743,2,0,B|78:138|78:138|103:170|103:170|182:186,1,187,2|8,0:0|0:0,0:0:0:0: -249,122,203089,1,0,0:0:0:0: -173,0,203204,6,0,P|165:46|162:92,1,93.5,2|0,0:0|0:0,0:0:0:0: -327,194,203435,2,0,P|334:147|337:101,1,93.5,8|0,0:0|0:0,0:0:0:0: -78,274,203666,2,0,P|159:213|264:257,1,187,2|8,0:0|0:0,0:0:0:0: -297,307,204012,1,0,0:0:0:0: -379,366,204127,6,0,P|387:315|390:269,1,93.5,2|0,0:0|0:0,0:0:0:0: -327,194,204358,1,8,0:0:0:0: -357,100,204474,1,0,0:0:0:0: -512,159,204589,6,0,L|420:176,1,93.5,2|0,0:0|0:0,0:0:0:0: -268,121,204820,1,8,0:0:0:0: -385,12,204935,1,0,0:0:0:0: -357,100,205051,6,0,L|160:75,1,187,2|8,0:0|0:0,0:0:0:0: -1,107,205397,1,0,0:0:0:0: -78,143,205512,2,0,B|94:114|94:114|74:32,1,93.5,2|0,0:0|0:0,0:0:0:0: -1,291,205743,2,0,B|-15:320|-15:320|5:402,1,93.5,8|0,0:0|0:0,0:0:0:0: -130,229,205974,6,0,L|7:215,1,93.5,2|0,0:0|0:0,0:0:0:0: -183,327,206204,1,8,0:0:0:0: -234,177,206320,1,0,0:0:0:0: -286,277,206435,2,0,P|374:289|468:223,1,187,2|8,0:0|0:0,0:0:0:0: -425,123,206781,1,0,0:0:0:0: -322,180,206897,6,0,P|224:170|135:140,1,187,2|8,0:0|0:0,0:0:0:0: -140,142,207358,2,0,P|150:195|154:258,1,93.5,2|0,0:0|0:0,0:0:0:0: -323,370,207589,2,0,P|313:317|309:254,1,93.5,8|0,0:0|0:0,0:0:0:0: -62,268,207820,6,0,P|127:324|222:300,1,187,2|8,0:0|0:0,0:0:0:0: -243,204,208166,1,0,0:0:0:0: -309,277,208281,2,0,P|365:282|426:290,1,93.5,2|0,0:0|0:0,0:0:0:0: -461,105,208512,2,0,P|404:99|344:92,1,93.5,8|0,0:0|0:0,0:0:0:0: -481,338,208743,6,0,P|492:262|383:195,2,187,2|8|2,0:0|0:0|0:0,0:0:0:0: -323,370,209320,1,0,0:0:0:0: -309,277,209435,6,0,L|289:153,1,93.5,8|0,0:0|0:0,0:0:0:0: -145,71,209666,2,0,L|262:115,1,93.5,2|0,0:0|0:0,0:0:0:0: -401,28,209897,2,0,L|303:107,1,93.5,8|0,0:0|0:0,0:0:0:0: -206,195,210127,5,2,0:0:0:0: -263,16,210243,1,0,0:0:0:0: -380,159,210358,1,8,0:0:0:0: -380,159,210589,6,0,P|333:151|288:141,1,93.5,2|0,0:0|0:0,0:0:0:0: -197,96,210820,1,8,0:0:0:0: -116,158,210935,1,0,0:0:0:0: -12,43,211051,6,0,P|58:50|103:60,1,93.5,2|0,0:0|0:0,0:0:0:0: -206,195,211281,1,8,0:0:0:0: -278,43,211397,1,0,0:0:0:0: -448,187,211512,6,0,P|357:198|287:140,1,187,2|8,0:0|0:0,0:0:0:0: -197,96,211858,1,0,0:0:0:0: -206,195,211974,5,10,0:0:0:0: -353,85,212089,1,0,0:0:0:0: -234,360,212204,1,8,0:0:0:0: -116,158,212320,1,8,0:0:0:0: -320,269,212435,6,0,P|392:256|515:238,1,187,6|8,0:0|0:0,0:0:0:0: -456,334,212781,1,0,0:0:0:0: -354,166,212897,2,0,P|282:179|159:197,1,187,2|8,0:0|0:0,0:0:0:0: -65,238,213243,1,0,0:0:0:0: -129,370,213358,6,0,P|139:303|154:247,1,93.5,2|0,0:0|0:0,0:0:0:0: -81,67,213589,1,8,0:0:0:0: -81,67,213820,2,0,P|90:112|96:159,1,93.5,2|0,0:0|0:0,0:0:0:0: -60,324,214051,1,8,0:0:0:0: -224,263,214166,1,0,0:0:0:0: -65,238,214281,6,0,L|-38:229,1,93.5,2|0,0:0|0:0,0:0:0:0: -130,367,214512,1,8,0:0:0:0: -304,314,214628,1,0,0:0:0:0: -224,263,214743,2,0,B|206:293|206:293|221:349,1,93.5,2|0,0:0|0:0,0:0:0:0: -366,147,214974,2,0,B|384:117|384:117|368:60,1,93.5,8|0,0:0|0:0,0:0:0:0: -204,176,215204,5,2,0:0:0:0: -361,243,215320,1,0,0:0:0:0: -294,103,215435,2,0,L|287:201,1,93.5,8|0,0:0|0:0,0:0:0:0: -50,91,215666,2,0,P|102:47|225:55,1,187,2|8,0:0|0:0,0:0:0:0: -432,36,216012,5,8,0:0:0:0: -432,36,216070,1,8,0:0:0:0: -432,36,216127,2,0,P|383:29|310:9,1,93.5,2|0,0:0|0:0,0:0:0:0: -393,222,216358,2,0,P|426:189|462:159,1,93.5,8|0,0:0|0:0,0:0:0:0: -295,134,216589,2,0,P|218:137|115:203,1,187,2|8,0:0|0:0,0:0:0:0: -48,248,216935,1,0,0:0:0:0: -18,62,217051,6,0,L|41:158,1,93.5,2|0,0:0|0:0,0:0:0:0: -131,296,217281,2,0,B|143:228|143:228|125:193|125:193|141:100,1,187,8|2,0:0|0:0,0:0:0:0: -279,110,217627,2,0,L|216:186,1,93.5,0|8,0:0|0:0,0:0:0:0: -131,296,217858,1,0,0:0:0:0: -194,368,217974,6,0,P|223:323|219:266,1,93.5,2|0,0:0|0:0,0:0:0:0: -48,248,218204,2,0,P|35:292|46:337,1,93.5,8|0,0:0|0:0,0:0:0:0: -274,225,218435,6,0,L|299:115,1,93.5,2|0,0:0|0:0,0:0:0:0: -2,80,218666,2,0,L|22:171,1,93.5,8|0,0:0|0:0,0:0:0:0: -254,53,218897,6,0,P|224:17|104:42,1,140.25,2|0,0:0|0:0,0:0:0:0: -195,199,219127,6,0,P|238:181|266:111,1,98.1749970039369,8|0,0:0|0:0,0:0:0:0: -82,73,219358,6,0,P|76:119|145:189,1,126.224996147919,2|0,2:0|2:0,2:0:0:0: -171,134,219589,6,0,L|182:63,1,56.0999982879639,8|0,0:0|0:0,0:0:0:0: -327,237,219820,6,0,P|229:220|153:292,1,187,2|8,0:0|0:0,0:0:0:0: -0,315,220166,1,0,0:0:0:0: -71,260,220281,2,0,B|87:291|87:291|74:358,1,93.5,2|0,0:0|0:0,0:0:0:0: -96,99,220512,2,0,B|80:68|80:68|93:1,1,93.5,8|0,0:0|0:0,0:0:0:0: -121,182,220743,6,0,L|9:170,1,93.5,2|0,0:0|0:0,0:0:0:0: -161,53,220974,1,8,0:0:0:0: -242,151,221089,1,0,0:0:0:0: -281,9,221204,2,0,P|379:-2|471:71,1,187,2|8,0:0|0:0,0:0:0:0: -389,306,221551,5,8,0:0:0:0: -389,306,221608,1,8,0:0:0:0: -389,306,221666,2,0,P|370:262|376:195,1,93.5,2|0,0:0|0:0,0:0:0:0: -427,130,221897,2,0,L|234:151,1,187,8|2,0:0|0:0,0:0:0:0: -120,283,222243,1,0,0:0:0:0: -210,299,222358,6,0,P|200:259|163:181,1,93.5,8|0,0:0|0:0,0:0:0:0: -267,2,222589,2,0,P|237:30|188:101,1,93.5,2|0,0:0|0:0,0:0:0:0: -0,103,222820,2,0,P|39:114|125:121,1,93.5,8|0,0:0|0:0,0:0:0:0: -301,317,223051,6,0,P|261:305|175:298,1,93.5,2|0,0:0|0:0,0:0:0:0: -122,344,223281,1,8,0:0:0:0: -180,210,223397,1,0,0:0:0:0: -323,244,223512,6,0,P|384:252|484:175,1,187,2|8,0:0|0:0,0:0:0:0: -425,99,223858,2,0,P|364:91|264:168,1,187,2|2,0:0|0:0,0:0:0:0: -180,210,224204,2,0,L|68:197,1,93.5,8|0,0:0|0:0,0:0:0:0: -5,166,224435,5,2,0:0:0:0: -64,286,224551,1,0,0:0:0:0: -154,124,224666,2,0,B|171:92|171:92|154:13,1,93.5,8|0,0:0|0:0,0:0:0:0: -84,78,224897,5,2,0:0:0:0: -241,118,225012,1,0,0:0:0:0: -84,78,225127,2,0,L|-13:89,1,93.5,8|0,0:0|0:0,0:0:0:0: -149,260,225358,6,0,B|251:234|212:312|352:265,1,187,2|8,0:0|0:0,0:0:0:0: -448,184,225704,2,0,B|324:153|324:153|310:177|284:198,1,187,2|2,0:0|0:0,0:0:0:0: -406,360,226051,2,0,P|412:311|418:257,1,93.5,8|0,0:0|0:0,0:0:0:0: -380,80,226281,1,2,0:0:0:0: -380,80,226512,5,8,0:0:0:0: -502,257,226627,1,2,0:0:0:0: -480,115,226743,5,2,0:0:0:0: -396,231,226858,1,8,0:0:0:0: -485,129,226974,5,8,0:0:0:0: -393,213,227089,1,8,0:0:0:0: -439,171,227204,6,0,L|296:157,1,140.25,2|2,0:0|0:0,0:0:0:0: -299,157,228588,6,0,P|275:197|283:252,1,93.5,2|0,0:0|0:0,0:0:0:0: -422,93,229280,2,0,P|428:47|407:6,1,93.5,2|0,0:0|0:0,0:0:0:0: -324,0,229973,1,2,0:0:0:0: -238,105,230204,5,0,0:0:0:0: -172,136,230434,1,0,0:0:0:0: -180,63,230665,1,0,0:0:0:0: -250,215,230896,6,0,L|231:364,1,140.25,2|2,0:0|0:0,0:0:0:0: -232,354,232280,6,0,L|125:371,1,93.5 -289,280,232973,2,0,L|396:297,1,93.5,2|0,0:0|0:0,0:0:0:0: -212,226,233665,1,2,0:0:0:0: -356,119,233896,5,0,0:0:0:0: -304,62,234127,1,0,0:0:0:0: -231,74,234357,1,0,0:0:0:0: -73,213,234588,6,0,L|216:227,1,140.25,2|2,0:0|0:0,0:0:0:0: -213,227,235973,6,0,P|237:187|229:132,1,93.5,2|0,0:0|0:0,0:0:0:0: -90,291,236665,2,0,P|83:336|107:379,1,93.5,2|0,0:0|0:0,0:0:0:0: -209,330,237357,6,0,L|147:318,1,46.75,2|0,0:0|0:0,0:0:0:0: -122,166,237819,1,0,0:0:0:0: -303,228,238050,1,0,0:0:0:0: -198,241,238280,6,0,P|161:169|186:107,1,140.25,2|0,0:0|0:0,0:0:0:0: -340,37,239204,5,0,0:0:0:0: -402,74,239434,1,0,0:0:0:0: -470,63,239665,1,2,0:0:0:0: -427,182,239896,5,0,0:0:0:0: -497,206,240127,1,0,0:0:0:0: -362,265,240357,5,2,0:0:0:0: -417,309,240588,1,0,0:0:0:0: -429,379,240819,1,0,0:0:0:0: -256,224,241050,5,2,0:0:0:0: -219,285,241280,1,0,0:0:0:0: -184,198,241511,1,0,0:0:0:0: -162,327,241742,1,0,0:0:0:0: -110,203,241973,6,0,P|64:196|16:229,1,93.5,2|2,0:0|0:0,0:0:0:0: -140,135,242665,2,0,P|148:95|140:71,1,46.75,2|0,0:0|0:0,0:0:0:0: -96,37,243127,1,2,0:0:0:0: -75,103,243357,1,0,0:0:0:0: -215,150,243588,5,2,0:0:0:0: -322,47,243819,1,0,0:0:0:0: -396,39,244050,2,0,L|448:32,1,46.75,2|0,0:0|0:0,0:0:0:0: -497,144,244511,2,0,L|395:133,1,93.5,2|0,0:0|0:0,0:0:0:0: -335,257,245204,1,0,0:0:0:0: -363,327,245434,6,0,P|405:282|382:203,1,140.25,2|0,0:0|0:0,0:0:0:0: -265,264,246357,1,2,0:0:0:0: -210,314,246588,1,0,0:0:0:0: -140,294,246819,2,0,P|132:264|133:230,1,46.75,2|0,0:0|0:0,0:0:0:0: -91,67,247280,5,2,0:0:0:0: -166,57,247511,2,0,P|163:80|157:102,1,46.75,2|0,0:0|0:0,0:0:0:0: -132,178,247973,2,0,L|194:170,2,46.75 -309,221,248665,1,2,0:0:0:0: -379,95,248896,1,0,0:0:0:0: -238,21,249127,6,0,P|228:61|228:79,1,46.75,2|0,0:0|0:0,0:0:0:0: -212,135,249588,1,0,0:0:0:0: -225,207,249819,1,2,0:0:0:0: -356,282,250050,6,0,P|366:242|366:224,1,46.75 -382,168,250511,1,0,0:0:0:0: -464,93,250742,6,0,B|441:76|441:76|363:99,1,93.5,2|0,0:0|0:0,0:0:0:0: -310,194,251550,2,0,L|228:184,1,70.1250026750566 -210,103,252247,1,0,0:0:0:0: -210,103,252702,6,0,L|141:111,1,70.1250026750566,2|0,0:0|0:0,0:0:0:0: -117,195,253506,1,2,0:0:0:0: -117,195,254095,6,0,L|36:184,1,70.1250026750566,2|2,0:0|0:0,0:0:0:0: -19,113,255580,1,2,0:0:0:0: -71,53,256480,6,0,P|126:48|182:100,1,122.718754681349,2|0,0:0|0:0,0:0:0:0: -211,259,257747,6,0,P|179:213|190:158,1,105.187504012585,2|0,0:0|0:0,0:0:0:0: -474,66,258892,6,0,P|433:121|242:116,1,271.734385365844,2|0,0:0|0:0,0:0:0:0: -210,216,263197,6,0,P|298:232|385:279,1,187,6|8,0:0|0:0,0:0:0:0: -456,330,263543,1,0,0:0:0:0: -465,242,263658,2,0,P|478:185|512:56,1,187,2|8,0:0|0:0,0:0:0:0: -425,84,264004,1,0,0:0:0:0: -368,19,264120,6,0,P|319:14|246:5,1,93.5,2|0,0:0|0:0,0:0:0:0: -280,139,264350,2,0,P|326:143|372:149,1,93.5,8|0,0:0|0:0,0:0:0:0: -197,57,264581,5,2,0:0:0:0: -121,35,264697,1,2,0:0:0:0: -50,67,264812,1,8,0:0:0:0: -21,139,264927,1,2,0:0:0:0: -37,213,265043,6,0,P|129:220|234:235,1,187,2|8,0:0|0:0,0:0:0:0: -314,216,265389,1,0,0:0:0:0: -283,308,265504,2,0,P|223:365|112:339,1,187,2|8,0:0|0:0,0:0:0:0: -57,295,265850,1,0,0:0:0:0: -142,255,265966,6,0,P|154:195|160:137,1,93.5,2|0,0:0|0:0,0:0:0:0: -52,120,266197,2,0,P|40:180|34:238,1,93.5,8|0,0:0|0:0,0:0:0:0: -217,109,266427,5,2,0:0:0:0: -297,102,266543,1,2,0:0:0:0: -368,138,266658,1,8,0:0:0:0: -406,207,266773,1,2,0:0:0:0: -404,283,266889,6,0,P|417:225|461:68,1,187,2|8,0:0|0:0,0:0:0:0: -503,22,267235,1,0,0:0:0:0: -411,13,267350,2,0,P|364:19|310:27,1,93.5,2|0,0:0|0:0,0:0:0:0: -237,75,267581,1,8,0:0:0:0: -169,6,267697,1,0,0:0:0:0: -148,102,267812,6,0,P|154:148|162:203,1,93.5,2|0,0:0|0:0,0:0:0:0: -333,216,268043,2,0,P|326:169|319:115,1,93.5,8|0,0:0|0:0,0:0:0:0: -63,146,268273,5,2,0:0:0:0: -11,206,268389,1,2,0:0:0:0: -2,283,268504,1,8,0:0:0:0: -36,352,268620,1,2,0:0:0:0: -107,381,268735,6,0,P|191:364|304:347,1,187,2|8,0:0|0:0,0:0:0:0: -370,299,269081,1,0,0:0:0:0: -333,216,269197,2,0,P|339:159|351:93,1,93.5,2|0,0:0|0:0,0:0:0:0: -288,44,269427,1,8,0:0:0:0: -368,2,269543,1,0,0:0:0:0: -512,90,269658,6,0,L|420:77,1,93.5,2|0,0:0|0:0,0:0:0:0: -173,113,269889,2,0,L|265:126,1,93.5,8|0,0:0|0:0,0:0:0:0: -381,222,270120,5,2,0:0:0:0: -306,244,270235,1,2,0:0:0:0: -232,267,270350,1,8,0:0:0:0: -158,289,270466,1,10,0:0:0:0: -154,280,270523,1,8,0:0:0:0: -150,272,270581,6,0,P|152:245|165:215,1,46.75,2|0,0:0|0:0,0:0:0:0: -136,76,270697,2,0,P|159:91|178:117,1,46.75,2|0,0:0|0:0,0:0:0:0: -318,154,270812,2,0,P|294:166|262:170,1,46.75,8|0,0:0|0:0,0:0:0:0: -103,158,270927,6,0,L|25:170,2,46.75,2|0|2,0:0|0:0|0:0,0:0:0:0: -407,33,271158,2,0,L|360:25,1,46.75,2|0,0:0|0:0,0:0:0:0: -216,97,271273,5,10,0:0:0:0: -221,91,271331,1,2,0:0:0:0: -227,87,271389,1,2,0:0:0:0: -235,86,271447,1,2,0:0:0:0: -243,87,271504,2,0,P|274:131|263:194,1,93.5,2|0,0:0|0:0,0:0:0:0: -389,311,271735,5,10,0:0:0:0: -367,268,271793,1,2,0:0:0:0: -377,221,271850,1,2,0:0:0:0: -417,190,271908,1,2,0:0:0:0: -466,194,271966,2,0,P|494:212|507:243,3,46.75,2|0|0|0,0:0|0:0|0:0|0:0,0:0:0:0: -439,260,272197,6,0,P|427:214|418:131,1,93.5,8|2,0:0|0:0,0:0:0:0: -436,94,272370,1,2,0:0:0:0: -441,88,272427,5,2,0:0:0:0: -391,121,272485,1,0,0:0:0:0: -334,118,272543,1,2,0:0:0:0: -285,90,272600,1,0,0:0:0:0: -262,39,272658,1,8,0:0:0:0: -219,3,272716,1,0,0:0:0:0: -163,0,272773,2,0,L|110:14,1,46.75,2|0,0:0|0:0,0:0:0:0: -13,60,272889,5,10,0:0:0:0: -49,87,272947,1,8,0:0:0:0: -61,128,273004,1,8,0:0:0:0: -53,174,273062,1,8,0:0:0:0: -26,207,273120,1,8,0:0:0:0: -13,249,273177,1,0,0:0:0:0: -21,291,273235,2,0,L|33:337,1,46.75,2|0,0:0|0:0,0:0:0:0: -126,380,273350,5,2,0:0:0:0: -162,383,273408,1,2,0:0:0:0: -194,367,273466,1,2,0:0:0:0: -213,339,273523,1,2,0:0:0:0: -242,320,273581,1,10,0:0:0:0: -277,322,273639,1,2,0:0:0:0: -307,345,273697,1,2,0:0:0:0: -343,352,273754,1,2,0:0:0:0: -375,334,273812,6,0,P|383:286|383:218,1,93.5,10|2,0:0|0:0,0:0:0:0: -380,221,273985,1,2,0:0:0:0: -370,203,274043,2,0,L|477:218,1,93.5,2|2,0:0|0:0,0:0:0:0: -263,211,274273,6,0,L|156:196,1,93.5,2|0,0:0|0:0,0:0:0:0: -103,234,274447,1,0,0:0:0:0: -103,234,274504,2,0,B|92:199|92:199|114:119,1,93.5,8|0,0:0|0:0,0:0:0:0: -315,46,274735,2,0,B|326:81|326:81|304:161,1,93.5,2|0,0:0|0:0,0:0:0:0: -248,83,274908,1,0,0:0:0:0: -248,83,274966,2,0,L|141:68,1,93.5,8|0,0:0|0:0,0:0:0:0: -18,156,275197,5,2,0:0:0:0: -115,326,275312,1,0,0:0:0:0: -115,326,275370,1,0,0:0:0:0: -115,326,275427,2,0,P|111:281|101:226,1,93.5,8|0,0:0|0:0,0:0:0:0: -218,50,275658,2,0,P|222:95|232:150,1,93.5,2|0,0:0|0:0,0:0:0:0: -307,291,275889,2,0,L|411:280,1,93.5,8|0,0:0|0:0,0:0:0:0: -471,313,276062,1,0,0:0:0:0: -471,313,276120,6,0,B|478:289|478:289|474:256,7,46.75,2|0|0|0|8|0|0|0,0:0|0:0|0:0|0:0|0:0|0:0|0:0|0:0,0:0:0:0: -372,161,276581,2,0,B|365:185|365:185|369:218,7,46.75,2|0|0|0|8|0|0|0,0:0|0:0|0:0|0:0|0:0|0:0|0:0|0:0,0:0:0:0: -446,195,277043,5,10,0:0:0:0: -234,69,277158,1,8,0:0:0:0: -307,291,277273,1,8,0:0:0:0: -495,131,277389,1,8,0:0:0:0: -327,42,277504,5,2,0:0:0:0: -321,85,277562,1,0,0:0:0:0: -303,124,277620,1,8,0:0:0:0: -271,153,277677,1,8,0:0:0:0: -231,167,277735,1,8,0:0:0:0: -188,170,277793,1,8,0:0:0:0: -147,161,277850,1,8,0:0:0:0: -108,142,277908,1,8,0:0:0:0: -80,111,277966,6,0,P|26:157|22:280,1,187,6|8,0:0|0:0,0:0:0:0: -84,330,278312,2,0,B|188:306|163:368|273:346,1,187,2|2,0:0|0:0,0:0:0:0: -351,312,278658,2,0,P|405:318|475:352,1,93.5,8|0,0:0|0:0,0:0:0:0: -277,257,278889,1,2,0:0:0:0: -277,257,279004,2,0,P|257:178|251:64,1,187,2|2,0:0|0:0,0:0:0:0: -321,3,279350,2,0,P|345:47|344:104,1,93.5,2|0,0:0|0:0,0:0:0:0: -178,142,279581,2,0,P|154:98|155:41,1,93.5,8|0,0:0|0:0,0:0:0:0: -250,72,279812,6,0,P|354:88|472:115,1,187,2|8,0:0|0:0,0:0:0:0: -452,198,280158,2,0,P|348:182|230:155,1,187,2|2,0:0|0:0,0:0:0:0: -208,235,280504,2,0,P|217:284|225:329,1,93.5,8|0,0:0|0:0,0:0:0:0: -125,215,280735,1,2,0:0:0:0: -125,215,280850,2,0,P|72:224|-13:122,1,187,2|2,0:0|0:0,0:0:0:0: -62,10,281197,2,0,P|69:52|67:110,1,93.5,2|0,0:0|0:0,0:0:0:0: -189,148,281427,2,0,P|187:101|194:55,1,93.5,8|0,0:0|0:0,0:0:0:0: -205,40,281600,1,0,0:0:0:0: -218,29,281658,6,0,P|303:43|413:60,1,187,2|8,0:0|0:0,0:0:0:0: -489,32,282004,2,0,P|524:69|499:203,1,187,2|2,0:0|0:0,0:0:0:0: -424,242,282350,2,0,P|416:191|412:130,1,93.5,8|0,0:0|0:0,0:0:0:0: -491,313,282581,1,2,0:0:0:0: -491,313,282697,2,0,P|427:279|296:283,1,187,2|2,0:0|0:0,0:0:0:0: -239,360,283043,2,0,P|230:291|217:234,1,93.5,2|0,0:0|0:0,0:0:0:0: -266,106,283273,2,0,P|275:175|288:232,1,93.5,8|0,0:0|0:0,0:0:0:0: -148,315,283504,6,0,P|91:273|-20:294,1,187,2|8,0:0|0:0,0:0:0:0: -162,217,283850,2,0,P|218:204|365:170,1,187,2|2,0:0|0:0,0:0:0:0: -95,87,284197,2,0,L|85:183,1,93.5,8|0,0:0|0:0,0:0:0:0: -61,358,284427,5,2,0:0:0:0: -61,358,284543,1,8,0:0:0:0: -227,288,284658,1,8,0:0:0:0: -227,288,284773,1,2,0:0:0:0: -159,375,284889,2,0,L|137:213,1,140.25,2|0,0:0|0:0,0:0:0:0: -216,73,285120,2,0,B|200:187|200:187|183:168|163:153,1,140.25,8|0,0:0|0:0,0:0:0:0: -121,113,285350,6,0,L|327:79,1,187,6|8,0:0|0:0,0:0:0:0: -377,144,285697,2,0,P|433:102|408:-9,1,187,2|2,0:0|0:0,0:0:0:0: -299,161,286043,2,0,L|285:253,1,93.5,8|0,0:0|0:0,0:0:0:0: -248,96,286273,1,2,0:0:0:0: -248,96,286389,2,0,P|202:52|83:71,1,187,2|2,0:0|0:0,0:0:0:0: -0,199,286735,2,0,P|51:195|108:172,1,93.5,2|0,0:0|0:0,0:0:0:0: -285,253,286966,2,8,P|239:229|196:185,1,93.5 -160,122,287197,6,0,L|126:341,1,187,2|8,0:0|0:0,0:0:0:0: -196,371,287543,2,0,P|276:320|373:351,1,187,2|2,0:0|0:0,0:0:0:0: -430,284,287889,2,0,P|479:295|538:303,1,93.5,8|0,0:0|0:0,0:0:0:0: -349,246,288120,1,2,0:0:0:0: -349,246,288235,2,0,P|336:185|319:51,1,187,2|2,0:0|0:0,0:0:0:0: -382,5,288581,2,0,L|491:21,1,93.5,2|0,0:0|0:0,0:0:0:0: -245,108,288812,2,0,L|136:92,1,93.5,8|0,0:0|0:0,0:0:0:0: -139,86,288985,1,0,0:0:0:0: -124,78,289043,6,0,P|142:128|46:249,1,187,2|8,0:0|0:0,0:0:0:0: -29,315,289389,2,0,P|114:328|249:358,1,187,2|2,0:0|0:0,0:0:0:0: -301,334,289735,2,0,P|292:280|283:203,1,93.5,8|0,0:0|0:0,0:0:0:0: -195,82,289966,1,2,0:0:0:0: -195,82,290081,2,0,B|163:199|163:199|209:254,1,187,2|2,0:0|0:0,0:0:0:0: -365,164,290427,2,0,L|258:148,1,93.5,2|0,0:0|0:0,0:0:0:0: -375,307,290658,2,0,L|482:323,1,93.5,8|0,0:0|0:0,0:0:0:0: -505,239,290889,6,0,P|519:179|483:55,1,187,2|8,0:0|0:0,0:0:0:0: -408,9,291235,2,0,P|334:30|193:48,1,187,2|2,0:0|0:0,0:0:0:0: -155,110,291581,2,0,P|118:102|55:94,1,93.5,8|0,0:0|0:0,0:0:0:0: -245,138,291812,2,0,P|285:200|249:315,1,187,2|8,0:0|0:0,0:0:0:0: -186,368,292158,1,0,0:0:0:0: -0,252,292273,6,0,L|147:236,1,140.25,2|0,0:0|0:0,0:0:0:0: -179,271,292504,2,0,L|82:282,1,93.5,8|0,0:0|0:0,0:0:0:0: -43,150,292735,2,0,L|139:138,1,93.5,2|0,0:0|0:0,0:0:0:0: -378,221,292966,2,0,P|309:240|212:164,1,187,8|2,0:0|0:0,0:0:0:0: -132,54,293312,1,0,0:0:0:0: -227,0,293427,2,0,L|205:119,1,93.5,8|0,0:0|0:0,0:0:0:0: -147,222,293658,5,2,0:0:0:0: -132,54,293773,1,0,0:0:0:0: -285,131,293889,2,0,P|331:141|388:146,1,93.5,8|0,0:0|0:0,0:0:0:0: -450,101,294120,5,2,0:0:0:0: -363,231,294235,1,2,0:0:0:0: -334,58,294350,1,8,0:0:0:0: -441,199,294466,1,2,0:0:0:0: -303,296,294581,6,0,L|254:308,3,46.75,2|2|2|0,0:0|0:0|0:0|0:0,0:0:0:0: -204,367,294812,2,0,L|158:355,3,46.75,8|2|8|2,0:0|0:0|0:0|0:0,0:0:0:0: -80,363,295043,1,2,0:0:0:0: -45,330,295100,1,2,0:0:0:0: -26,288,295158,1,10,0:0:0:0: -18,242,295216,1,2,0:0:0:0: -22,195,295273,1,2,0:0:0:0: -39,149,295331,1,2,0:0:0:0: -71,111,295389,1,2,0:0:0:0: -116,93,295447,1,2,0:0:0:0: -168,92,295504,6,0,L|391:131,1,187,6|8,0:0|0:0,0:0:0:0: -444,197,295850,1,0,0:0:0:0: -338,248,295966,2,0,L|115:209,1,187,2|8,0:0|0:0,0:0:0:0: -54,275,296312,1,0,0:0:0:0: -152,341,296427,2,0,L|268:360,1,93.5,2|0,0:0|0:0,0:0:0:0: -499,283,296658,2,0,P|473:256|339:249,1,140.25,8|0,0:0|0:0,0:0:0:0: -338,248,296889,2,0,L|324:124,1,93.5,2|0,0:0|0:0,0:0:0:0: -420,129,297120,1,8,0:0:0:0: -397,335,297235,1,0,0:0:0:0: -240,266,297350,6,0,B|197:242|197:242|56:271,1,187,2|8,0:0|0:0,0:0:0:0: -143,23,297697,2,0,B|186:47|186:47|327:18,1,187,2|2,0:0|0:0,0:0:0:0: -150,163,298043,2,0,L|50:147,1,93.5,8|0,0:0|0:0,0:0:0:0: -264,129,298273,2,0,B|334:122|334:122|371:146|371:146|460:136,1,187,2|8,0:0|0:0,0:0:0:0: -306,208,298620,2,0,L|270:313,1,93.5,0|2,0:0|0:0,0:0:0:0: -443,137,298850,5,10,0:0:0:0: -321,20,298966,1,8,0:0:0:0: -390,236,299081,1,10,0:0:0:0: -465,59,299197,6,0,B|352:46|412:116|277:97,1,187,2|8,0:0|0:0,0:0:0:0: -75,82,299543,1,0,0:0:0:0: -75,82,299658,2,0,P|122:26|258:65,1,187,2|8,0:0|0:0,0:0:0:0: -214,214,300004,1,0,0:0:0:0: -214,214,300120,2,0,L|194:102,1,93.5,2|0,0:0|0:0,0:0:0:0: -325,194,300350,2,0,L|303:362,1,140.25,8|0,0:0|0:0,0:0:0:0: -332,378,300581,2,0,L|222:364,1,93.5,2|0,0:0|0:0,0:0:0:0: -391,266,300812,2,0,L|501:280,1,93.5,8|0,0:0|0:0,0:0:0:0: -237,290,301043,6,0,L|42:262,1,187,2|8,0:0|0:0,0:0:0:0: -0,154,301389,1,0,0:0:0:0: -53,47,301504,2,0,L|248:75,1,187,2|8,0:0|0:0,0:0:0:0: -290,183,301850,1,0,0:0:0:0: -237,290,301966,2,0,L|138:275,1,93.5,2|0,0:0|0:0,0:0:0:0: -348,127,302197,2,0,L|447:112,1,93.5,8|0,0:0|0:0,0:0:0:0: -482,321,302427,2,0,P|448:268|318:266,1,187,2|8,0:0|0:0,0:0:0:0: -212,183,302773,1,0,0:0:0:0: -296,62,302889,6,0,P|307:111|306:171,1,93.5,2|0,0:0|0:0,0:0:0:0: -144,275,303120,2,0,P|133:226|134:166,1,93.5,8|0,0:0|0:0,0:0:0:0: -289,328,303350,2,0,B|183:302|233:387|95:356,1,187,2|8,0:0|0:0,0:0:0:0: -42,263,303697,1,0,0:0:0:0: -132,182,303812,6,0,P|180:125|149:5,1,187,2|8,0:0|0:0,0:0:0:0: -68,39,304158,1,0,0:0:0:0: -68,39,304273,2,0,P|55:75|49:136,1,93.5,2|0,0:0|0:0,0:0:0:0: -269,175,304504,2,0,P|282:139|288:78,1,93.5,8|0,0:0|0:0,0:0:0:0: -163,20,304735,6,0,P|173:115|183:232,1,187,2|8,0:0|0:0,0:0:0:0: -146,296,305081,2,0,P|197:258|325:295,1,187,2|2,0:0|0:0,0:0:0:0: -378,353,305427,1,8,0:0:0:0: -470,323,305543,1,0,0:0:0:0: -403,252,305658,6,0,P|411:158|421:65,1,187,2|8,0:0|0:0,0:0:0:0: -353,1,306004,1,0,0:0:0:0: -248,105,306120,2,0,P|304:107|352:65,1,93.5,2|0,0:0|0:0,0:0:0:0: -178,48,306350,2,0,P|136:26|91:31,1,93.5,8|0,0:0|0:0,0:0:0:0: -67,171,306581,6,0,P|56:224|49:280,1,93.5,2|0,0:0|0:0,0:0:0:0: -101,341,306812,1,8,0:0:0:0: -196,332,306927,1,0,0:0:0:0: -148,251,307043,2,0,P|207:210|328:230,1,187,2|8,0:0|0:0,0:0:0:0: -395,165,307389,1,0,0:0:0:0: -327,32,307504,6,0,P|315:80|308:129,1,93.5,2|0,0:0|0:0,0:0:0:0: -379,356,307735,2,0,P|391:308|398:259,1,93.5,8|0,0:0|0:0,0:0:0:0: -511,90,307966,6,0,L|483:-25,1,93.5,2|0,0:0|0:0,0:0:0:0: -473,292,308197,2,0,L|495:382,1,93.5,8|0,0:0|0:0,0:0:0:0: -512,192,308427,5,2,0:0:0:0: -418,163,308543,1,0,0:0:0:0: -375,249,308658,1,8,0:0:0:0: -379,256,308889,5,2,0:0:0:0: -281,219,309004,1,10,0:0:0:0: -275,203,309062,1,2,0:0:0:0: -271,188,309120,1,10,0:0:0:0: -268,171,309177,1,10,0:0:0:0: -265,156,309235,1,10,0:0:0:0: -264,140,309293,1,10,0:0:0:0: -263,124,309350,5,2,0:0:0:0: -233,165,309408,1,2,0:0:0:0: -189,185,309466,1,2,0:0:0:0: -142,183,309523,1,2,0:0:0:0: -105,155,309581,1,10,0:0:0:0: -86,111,309639,1,2,0:0:0:0: -90,63,309697,1,10,0:0:0:0: -122,27,309754,1,2,0:0:0:0: -169,16,309812,6,0,L|237:24,1,46.75,10|2,0:0|0:0,0:0:0:0: -263,124,309927,2,0,L|331:116,1,46.75,10|2,0:0|0:0,0:0:0:0: -361,42,310043,2,0,L|429:50,1,46.75,10|2,0:0|0:0,0:0:0:0: -495,106,310158,1,10,0:0:0:0: -495,106,310216,1,10,0:0:0:0: -495,106,310273,6,0,L|480:318,1,187,6|8,0:0|0:0,0:0:0:0: -428,371,310620,1,0,0:0:0:0: -316,222,310735,2,0,L|329:35,1,187,2|8,0:0|0:0,0:0:0:0: -242,71,311081,1,0,0:0:0:0: -316,222,311197,6,0,P|382:211|413:234,1,93.5,2|0,0:0|0:0,0:0:0:0: -481,292,311427,1,8,0:0:0:0: -481,292,311658,2,0,L|487:198,1,93.5,2|0,0:0|0:0,0:0:0:0: -495,106,311889,1,8,0:0:0:0: -316,222,312004,1,0,0:0:0:0: -428,371,312120,6,0,B|342:392|328:324|229:344,1,187,2|8,0:0|0:0,0:0:0:0: -157,369,312466,1,0,0:0:0:0: -61,235,312581,2,0,P|56:281|74:324,1,93.5,2|0,0:0|0:0,0:0:0:0: -214,214,312812,2,0,P|219:168|201:125,1,93.5,8|0,0:0|0:0,0:0:0:0: -90,63,313043,5,2,0:0:0:0: -146,259,313158,1,0,0:0:0:0: -288,113,313273,2,0,B|307:4,1,93.5,8|0,0:0|0:0,0:0:0:0: -129,166,313504,2,0,B|146:259,1,93.5,2|0,0:0|0:0,0:0:0:0: -178,48,313735,2,0,P|136:67|89:62,1,93.5,8|0,0:0|0:0,0:0:0:0: -357,237,313966,6,0,P|422:175|519:198,1,187,2|8,0:0|0:0,0:0:0:0: -490,283,314312,1,0,0:0:0:0: -465,372,314427,2,0,L|357:354,1,93.5,2|0,0:0|0:0,0:0:0:0: -264,221,314658,2,0,L|372:239,1,93.5,8|0,0:0|0:0,0:0:0:0: -201,356,314889,6,0,P|118:355|52:286,1,140.25,2|0,0:0|0:0,0:0:0:0: -32,263,315120,2,0,L|25:168,1,93.5,8|0,0:0|0:0,0:0:0:0: -258,36,315350,2,0,B|266:125|200:130|215:226,1,187,2|8,0:0|0:0,0:0:0:0: -262,294,315697,1,0,0:0:0:0: -353,237,315812,6,0,B|377:197|377:197|370:141,1,93.5,2|0,0:0|0:0,0:0:0:0: -262,294,316043,2,0,B|238:334|238:334|245:390,1,93.5,8|0,0:0|0:0,0:0:0:0: -372,356,316273,2,0,B|468:339,1,93.5,2|0,0:0|0:0,0:0:0:0: -213,213,316504,2,0,B|117:230,1,93.5,8|0,0:0|0:0,0:0:0:0: -36,14,316735,6,0,P|100:46|93:164,1,187,2|8,0:0|0:0,0:0:0:0: -37,357,317081,1,0,0:0:0:0: -37,357,317197,2,0,P|32:285|138:232,1,187,2|8,0:0|0:0,0:0:0:0: -334,185,317543,1,8,0:0:0:0: -334,185,317600,1,8,0:0:0:0: -334,185,317658,6,0,P|274:224|175:159,1,187,6|8,0:0|0:0,0:0:0:0: -207,84,318004,1,0,0:0:0:0: -387,119,318120,2,0,P|373:181|403:221,1,93.5,2|0,0:0|0:0,0:0:0:0: -491,311,318350,2,0,P|505:249|475:209,1,93.5,8|0,0:0|0:0,0:0:0:0: -222,356,318581,6,0,B|309:359|309:359|334:351|334:351|422:354,1,187,2|8,0:0|0:0,0:0:0:0: -491,311,318927,1,0,0:0:0:0: -304,229,319043,2,0,B|216:232|216:232|191:224|191:224|103:227,1,187,2|8,0:0|0:0,0:0:0:0: -35,184,319389,1,0,0:0:0:0: -197,0,319504,6,0,P|257:80|212:171,1,187,2|8,0:0|0:0,0:0:0:0: -231,155,319966,2,0,P|281:145|329:141,1,93.5,2|0,0:0|0:0,0:0:0:0: -501,305,320197,2,0,P|451:294|403:290,1,93.5,8|0,0:0|0:0,0:0:0:0: -152,382,320427,6,0,P|92:302|137:211,1,187,2|8,0:0|0:0,0:0:0:0: -143,136,320773,1,0,0:0:0:0: -221,242,320889,2,0,P|211:287|207:334,1,93.5,2|0,0:0|0:0,0:0:0:0: -63,159,321120,2,0,P|58:112|49:66,1,93.5,8|0,0:0|0:0,0:0:0:0: -340,49,321350,6,0,P|317:135|231:155,2,187,2|8|2,0:0|0:0|0:0,0:0:0:0: -173,47,321927,1,0,0:0:0:0: -143,136,322043,2,0,L|154:246,1,93.5,8|0,0:0|0:0,0:0:0:0: -400,384,322273,6,0,L|411:274,1,93.5,2|0,0:0|0:0,0:0:0:0: -257,173,322504,2,0,L|332:227,1,93.5,8|0,0:0|0:0,0:0:0:0: -512,154,322735,2,0,L|426:192,1,93.5,2|0,0:0|0:0,0:0:0:0: -256,352,322966,1,8,0:0:0:0: -170,310,323081,1,0,0:0:0:0: -100,373,323197,6,0,L|2:368,1,93.5,2|0,0:0|0:0,0:0:0:0: -152,229,323427,2,0,L|250:224,1,93.5,8|0,0:0|0:0,0:0:0:0: -93,294,323658,2,0,L|-5:289,1,93.5,2|0,0:0|0:0,0:0:0:0: -145,150,323888,2,0,L|243:145,1,93.5,8|0,0:0|0:0,0:0:0:0: -82,221,324120,5,2,0:0:0:0: -69,207,324177,1,2,0:0:0:0: -60,191,324235,1,2,0:0:0:0: -54,173,324293,1,2,0:0:0:0: -52,154,324350,1,10,0:0:0:0: -54,136,324408,1,2,0:0:0:0: -60,118,324466,1,10,0:0:0:0: -70,102,324523,1,10,0:0:0:0: -82,88,324581,5,2,0:0:0:0: -136,92,324638,1,2,0:0:0:0: -176,130,324696,1,10,0:0:0:0: -185,185,324754,1,2,0:0:0:0: -157,233,324811,1,10,0:0:0:0: -129,280,324870,1,10,0:0:0:0: -137,335,324927,1,10,0:0:0:0: -177,373,324985,1,10,0:0:0:0: -232,378,325043,6,0,B|320:375|320:375|344:382|344:382|418:380,1,187,6|8,0:0|0:0,0:0:0:0: -485,314,325389,1,0,0:0:0:0: -267,218,325504,2,0,B|179:215|179:215|155:222|155:222|81:220,1,187,2|8,0:0|0:0,0:0:0:0: -14,154,325850,1,0,0:0:0:0: -323,267,325966,6,0,P|341:225|331:180,1,93.5,2|0,0:0|0:0,0:0:0:0: -250,19,326197,1,8,0:0:0:0: -250,19,326427,2,0,L|240:115,1,93.5,2|0,0:0|0:0,0:0:0:0: -426,191,326658,2,0,L|435:94,1,93.5,8|0,0:0|0:0,0:0:0:0: -82,221,326889,6,0,B|159:244|180:198|267:218,1,187,2|8,0:0|0:0,0:0:0:0: -511,288,327235,1,0,0:0:0:0: -449,357,327350,2,0,B|341:346,1,93.5,2|0,0:0|0:0,0:0:0:0: -332,181,327581,2,0,B|440:192,1,93.5,8|0,0:0|0:0,0:0:0:0: -505,141,327812,5,2,0:0:0:0: -304,46,327927,1,0,0:0:0:0: -323,268,328043,2,0,P|341:229|327:170,1,93.5,8|0,0:0|0:0,0:0:0:0: -155,62,328273,2,0,P|137:101|151:160,1,93.5,2|0,0:0|0:0,0:0:0:0: -248,372,328504,2,0,B|140:383,1,93.5,8|0,0:0|0:0,0:0:0:0: -242,206,328735,6,0,B|297:201|297:201|302:204|302:204|305:200|305:200|433:189,1,187,2|8,0:0|0:0,0:0:0:0: -503,242,329081,1,0,0:0:0:0: -442,9,329197,2,0,B|423:49|423:49|434:97,1,93.5,2|0,0:0|0:0,0:0:0:0: -323,268,329427,2,0,B|341:227|341:227|330:179,1,93.5,8|0,0:0|0:0,0:0:0:0: -155,62,329658,6,0,L|171:222,1,140.25,2|0,0:0|0:0,0:0:0:0: -168,201,329889,2,0,P|123:169|75:182,1,93.5,8|0,0:0|0:0,0:0:0:0: -229,277,330120,2,0,L|322:267,1,93.5,2|0,0:0|0:0,0:0:0:0: -137,335,330350,2,0,L|43:325,1,93.5,8|0,0:0|0:0,0:0:0:0: -309,359,330581,6,0,P|346:302|414:298,1,140.25,2|0,0:0|0:0,0:0:0:0: -415,299,330812,2,0,P|405:251|426:205,1,93.5,8|0,0:0|0:0,0:0:0:0: -512,47,331043,2,0,L|502:140,1,93.5,2|0,0:0|0:0,0:0:0:0: -330,179,331273,2,0,L|339:85,1,93.5,8|0,0:0|0:0,0:0:0:0: -512,320,331504,6,0,B|450:318|452:378|380:370,1,140.25,2|0,0:0|0:0,0:0:0:0: -385,370,331735,2,0,L|291:360,1,93.5,8|0,0:0|0:0,0:0:0:0: -62,381,331966,1,2,0:0:0:0: -161,306,332081,1,8,0:0:0:0: -162,259,332138,1,8,0:0:0:0: -140,219,332196,1,8,0:0:0:0: -101,194,332254,1,8,0:0:0:0: -73,155,332312,1,8,0:0:0:0: -73,108,332370,1,8,0:0:0:0: -96,68,332427,6,0,P|152:99|289:37,1,187,6|8,0:0|0:0,0:0:0:0: -337,9,332773,1,0,0:0:0:0: -421,210,332889,2,0,B|435:170|435:170|418:119,1,93.5,2|0,0:0|0:0,0:0:0:0: -215,213,333120,2,0,B|201:253|201:253|217:303,1,93.5,8|0,0:0|0:0,0:0:0:0: -344,145,333350,6,0,B|340:81|340:81|344:76|344:76|340:73|340:73|335:-14,1,140.25,2|0,0:0|0:0,0:0:0:0: -337,9,333581,2,0,L|446:24,1,93.5,8|0,0:0|0:0,0:0:0:0: -498,196,333812,2,0,P|456:182|421:210,1,93.5,2|0,0:0|0:0,0:0:0:0: -292,360,334043,2,0,P|256:387|214:373,1,93.5,8|0,0:0|0:0,0:0:0:0: -32,201,334273,6,0,B|119:177|135:235|215:212,1,187,2|8,0:0|0:0,0:0:0:0: -214,212,334735,2,0,P|208:181|198:97,1,93.5,2|0,0:0|0:0,0:0:0:0: -306,267,334966,2,0,P|300:297|290:381,1,93.5,8|0,0:0|0:0,0:0:0:0: -72,357,335197,6,0,P|98:307|224:307,1,187,2|8,0:0|0:0,0:0:0:0: -291,359,335543,1,0,0:0:0:0: -498,196,335658,2,0,B|426:187|426:187|392:199|392:199|301:187,1,187,2|8,0:0|0:0,0:0:0:0: -221,176,336004,1,0,0:0:0:0: -10,86,336120,6,0,P|80:77|154:44,1,140.25,2|0,0:0|0:0,0:0:0:0: -143,50,336350,2,0,P|111:107|120:155,1,93.5,8|0,0:0|0:0,0:0:0:0: -277,245,336581,2,0,P|244:188|198:171,1,93.5,2|0,0:0|0:0,0:0:0:0: -41,262,336812,2,0,P|106:262|143:230,1,93.5,8|0,0:0|0:0,0:0:0:0: -223,176,337043,5,2,0:0:0:0: -221,157,337100,1,2,0:0:0:0: -219,138,337158,1,10,0:0:0:0: -217,120,337216,1,2,0:0:0:0: -215,101,337273,1,2,0:0:0:0: -213,82,337331,1,2,0:0:0:0: -211,64,337389,1,2,0:0:0:0: -209,45,337446,1,2,0:0:0:0: -208,27,337504,5,2,0:0:0:0: -258,48,337561,1,2,0:0:0:0: -283,97,337619,1,2,0:0:0:0: -270,151,337677,1,2,0:0:0:0: -227,184,337734,1,10,0:0:0:0: -183,217,337793,1,10,0:0:0:0: -170,270,337851,1,10,0:0:0:0: -195,319,337909,1,10,0:0:0:0: -246,340,337966,6,0,B|313:336|313:336|346:346|346:346|438:337,1,187,6|8,0:0|0:0,0:0:0:0: -501,276,338312,1,0,0:0:0:0: -266,215,338427,2,0,B|198:211|198:211|165:221|165:221|73:212,1,187,2|8,0:0|0:0,0:0:0:0: -11,151,338773,1,0,0:0:0:0: -252,34,338889,6,0,B|233:78|233:78|248:121,1,93.5,2|0,0:0|0:0,0:0:0:0: -425,190,339120,2,0,B|444:146|444:146|428:102,1,93.5,8|0,0:0|0:0,0:0:0:0: -336,155,339350,5,10,0:0:0:0: -336,173,339407,1,8,0:0:0:0: -337,192,339465,1,8,0:0:0:0: -338,211,339523,1,8,0:0:0:0: -338,229,339580,1,8,0:0:0:0: -339,248,339638,1,8,0:0:0:0: -340,267,339696,1,8,0:0:0:0: -340,285,339753,1,8,0:0:0:0: -340,303,339812,6,0,P|426:327|487:262,1,187,6|8,0:0|0:0,0:0:0:0: -425,190,340158,1,0,0:0:0:0: -246,340,340273,2,0,P|249:296|209:250,1,93.5,2|0,0:0|0:0,0:0:0:0: -56,129,340504,2,0,P|53:173|93:219,1,93.5,8|0,0:0|0:0,0:0:0:0: -306,198,340735,6,0,B|310:146|310:146|315:138|315:138|311:130|311:130|323:-1,1,187,2|8,0:0|0:0,0:0:0:0: -237,53,341081,1,0,0:0:0:0: -340,267,341197,2,0,P|368:263|441:256,1,93.5,2|0,0:0|0:0,0:0:0:0: -246,340,341427,2,0,P|217:336|145:329,1,93.5,8|0,0:0|0:0,0:0:0:0: -13,157,341658,6,0,B|101:149|101:221|190:213,1,187,2|8,0:0|0:0,0:0:0:0: -241,137,342004,1,0,0:0:0:0: -42,237,342120,2,0,P|35:289|60:336,1,93.5,2|0,0:0|0:0,0:0:0:0: -162,129,342350,2,0,P|169:77|144:30,1,93.5,8|0,0:0|0:0,0:0:0:0: -153,329,342581,6,0,B|223:321|223:321|269:337|269:337|336:331,1,187,2|8,0:0|0:0,0:0:0:0: -417,379,342927,1,0,0:0:0:0: -306,198,343043,2,0,B|298:113|370:113|362:25,1,187,2|8,0:0|0:0,0:0:0:0: -489,112,343389,1,8,0:0:0:0: -489,112,343447,1,8,0:0:0:0: -489,112,343504,6,0,P|504:193|417:256,1,187,2|8,0:0|0:0,0:0:0:0: -248,341,343850,2,0,P|232:259|319:196,1,187,2|2,0:0|0:0,0:0:0:0: -508,361,344197,2,0,L|416:378,1,93.5,8|0,0:0|0:0,0:0:0:0: -401,373,344370,1,0,0:0:0:0: -386,367,344427,6,0,L|192:354,1,187,2|8,0:0|0:0,0:0:0:0: -107,375,344773,1,0,0:0:0:0: -122,199,344889,2,0,P|144:240|139:286,1,93.5,2|0,0:0|0:0,0:0:0:0: -13,157,345120,2,0,P|7:111|29:70,1,93.5,8|0,0:0|0:0,0:0:0:0: -200,35,345350,6,0,L|302:46,1,93.5,2|0,0:0|0:0,0:0:0:0: -396,207,345581,2,0,L|303:196,1,93.5,8|0,0:0|0:0,0:0:0:0: -384,23,345812,2,0,L|373:115,1,93.5,2|0,0:0|0:0,0:0:0:0: -212,219,346043,2,0,L|223:117,1,93.5,8|0,0:0|0:0,0:0:0:0: -512,279,346273,6,0,P|483:282|372:294,1,140.25,2|0,0:0|0:0,0:0:0:0: -349,363,346504,6,0,P|328:360|251:351,1,98.1749970039369,8|0,0:0|0:0,0:0:0:0: -212,293,346735,6,0,P|188:295|74:307,1,126.224996147919,2|0,0:0|0:0,0:0:0:0: -27,257,346966,6,0,P|14:222|23:192,1,56.0999982879639,8|0,0:0|0:0,0:0:0:0: -133,13,347197,6,0,L|122:205,1,187,6|8,0:0|0:0,0:0:0:0: -251,351,347543,1,0,0:0:0:0: -311,280,347658,2,0,P|331:238|316:186,1,93.5,2|0,0:0|0:0,0:0:0:0: -232,39,347889,2,0,P|212:80|221:125,1,93.5,8|0,0:0|0:0,0:0:0:0: -466,107,348120,6,0,P|403:112|340:117,1,93.5,2|0,0:0|0:0,0:0:0:0: -228,202,348350,2,0,P|290:196|353:191,1,93.5,8|0,0:0|0:0,0:0:0:0: -489,256,348581,2,0,P|426:261|363:266,1,93.5,2|0,0:0|0:0,0:0:0:0: -251,351,348811,2,0,P|313:345|376:340,1,93.5,8|0,0:0|0:0,0:0:0:0: -360,351,348985,1,0,0:0:0:0: -375,359,349043,6,0,P|426:304|407:190,1,187,2|8,0:0|0:0,0:0:0:0: -372,115,349389,1,0,0:0:0:0: -496,18,349504,2,0,L|488:111,1,93.5,2|0,0:0|0:0,0:0:0:0: -328,286,349735,2,0,L|320:192,1,93.5,8|0,0:0|0:0,0:0:0:0: -125,50,349966,6,0,P|170:97|307:65,1,187,2|8,0:0|0:0,0:0:0:0: -356,28,350312,1,0,0:0:0:0: -227,184,350427,2,0,B|262:280|198:280|230:384,1,187,2|8,0:0|0:0,0:0:0:0: -134,342,350773,1,0,0:0:0:0: -10,277,350889,6,0,P|7:223|-1:72,1,187,2|8,0:0|0:0,0:0:0:0: -51,13,351235,1,0,0:0:0:0: -215,180,351350,2,0,P|218:234|226:385,1,187,2|8,0:0|0:0,0:0:0:0: -502,277,351812,6,0,P|505:223|513:72,1,187,2|8,0:0|0:0,0:0:0:0: -461,13,352158,1,0,0:0:0:0: -372,115,352273,2,0,P|356:141|366:217,1,93.5,2|0,0:0|0:0,0:0:0:0: -440,349,352504,2,0,P|425:322|353:292,1,93.5,8|0,0:0|0:0,0:0:0:0: -99,278,352735,6,0,L|285:258,1,187,2|8,0:0|0:0,0:0:0:0: -371,292,353081,1,0,0:0:0:0: -450,211,353197,2,0,L|357:201,1,93.5,2|0,0:0|0:0,0:0:0:0: -191,152,353427,2,0,L|283:142,1,93.5,8|0,0:0|0:0,0:0:0:0: -393,31,353658,6,0,B|365:69|365:69|372:116,1,93.5,2|0,0:0|0:0,0:0:0:0: -489,256,353889,2,0,B|517:218|517:218|509:170,1,93.5,8|0,0:0|0:0,0:0:0:0: -357,201,354120,2,0,P|366:239|372:311,1,93.5,2|0,0:0|0:0,0:0:0:0: -498,96,354350,2,0,P|502:49|512:3,1,93.5,8|0,0:0|0:0,0:0:0:0: -512,333,354581,6,0,B|427:318|423:388|325:362,1,187,2|8,0:0|0:0,0:0:0:0: -284,258,354927,1,0,0:0:0:0: -228,334,355043,2,0,B|32:324,1,187,2|8,0:0|0:0,0:0:0:0: -5,239,355389,1,0,0:0:0:0: -199,79,355504,5,10,0:0:0:0: -110,108,355620,1,8,0:0:0:0: -208,112,355735,5,8,0:0:0:0: -124,116,355851,1,8,0:0:0:0: -211,141,355966,5,10,0:0:0:0: -139,124,356082,1,8,0:0:0:0: -210,164,356197,5,8,0:0:0:0: -153,133,356313,1,8,0:0:0:0: -90,211,356427,6,0,L|292:193,1,187,6|8,0:0|0:0,0:0:0:0: -329,116,356773,1,0,0:0:0:0: -450,258,356889,2,0,L|356:266,1,93.5,2|0,0:0|0:0,0:0:0:0: -414,101,357120,2,0,L|507:92,1,93.5,8|0,0:0|0:0,0:0:0:0: -304,355,357350,6,0,P|252:281|275:194,1,187,2|8,0:0|0:0,0:0:0:0: -329,116,357697,1,0,0:0:0:0: -110,47,357812,5,2,0:0:0:0: -147,134,357927,1,8,0:0:0:0: -93,210,358043,1,10,0:0:0:0: -130,297,358158,1,8,0:0:0:0: -304,355,358273,6,0,L|102:337,1,187,2|8,0:0|0:0,0:0:0:0: -30,374,358620,1,0,0:0:0:0: -0,202,358735,2,0,L|93:210,1,93.5,2|0,0:0|0:0,0:0:0:0: -218,58,358966,2,0,L|124:49,1,93.5,8|0,0:0|0:0,0:0:0:0: -265,250,359197,6,0,B|350:227|364:281|472:252,2,187,2|8|2,0:0|0:0|0:0,0:0:0:0: -202,180,359773,1,0,0:0:0:0: -280,128,359889,1,8,0:0:0:0: -218,58,360004,1,0,0:0:0:0: -407,0,360120,6,0,L|387:186,1,187,2|8,0:0|0:0,0:0:0:0: -449,257,360466,1,0,0:0:0:0: -304,355,360581,2,0,P|310:296|359:272,1,93.5,2|0,0:0|0:0,0:0:0:0: -479,178,360812,2,0,P|473:237|423:260,1,93.5,8|0,0:0|0:0,0:0:0:0: -280,128,361043,6,0,L|274:28,1,93.5,2|0,0:0|0:0,0:0:0:0: -193,261,361273,2,0,L|198:354,1,93.5,8|0,0:0|0:0,0:0:0:0: -36,373,361504,5,8,0:0:0:0: -74,286,361620,1,2,0:0:0:0: -8,219,361735,1,2,0:0:0:0: -46,134,361851,1,8,0:0:0:0: -193,261,361966,6,0,P|274:272|338:188,1,187,2|8,0:0|0:0,0:0:0:0: -280,128,362312,1,0,0:0:0:0: -136,99,362427,2,0,P|123:154|141:192,1,93.5,2|0,0:0|0:0,0:0:0:0: -304,355,362658,2,0,P|317:300|298:261,1,93.5,8|0,0:0|0:0,0:0:0:0: -291,256,362831,1,0,0:0:0:0: -278,244,362889,6,0,L|485:247,1,187,2|8,0:0|0:0,0:0:0:0: -202,180,363235,2,0,L|-5:177,1,187,2|2,0:0|0:0,0:0:0:0: -280,128,363581,2,0,L|383:126,1,93.5,8|0,0:0|0:0,0:0:0:0: -202,180,363812,6,0,B|158:268|240:272|190:359,2,187,2|8|2,0:0|0:0|0:0,0:0:0:0: -280,128,364389,1,0,0:0:0:0: -136,99,364504,2,0,P|123:44|141:5,1,93.5,8|0,0:0|0:0,0:0:0:0: -278,244,364735,6,0,P|291:299|272:337,1,93.5,2|0,0:0|0:0,0:0:0:0: -36,304,364966,2,0,B|50:297|50:297|51:307|51:307|59:297|59:297|60:306|60:306|68:296|68:296|69:305|69:305|77:295|77:295|78:305|78:305|85:294|85:294|86:304|86:304|94:294|94:294|95:303|95:303|103:293|103:293|104:302|104:302|112:292|112:292|113:302|113:302|121:291|121:291|121:301|121:301|129:290|129:290|130:300|130:300|138:290|138:290|139:299|139:299|147:289|147:289|148:299|148:299|156:288|156:288|156:298|156:298|164:287|164:287|165:297|165:297|173:287|173:287|174:296|174:296|182:286|182:286|183:295|183:295|198:289,1,374,8|0,0:0|0:0,0:0:0:0: -277,331,365543,1,0,0:0:0:0: -437,330,365658,6,0,P|467:262|450:218,1,93.5,2|0,0:0|0:0,0:0:0:0: -307,44,365889,2,0,P|277:112|294:156,1,93.5,8|0,0:0|0:0,0:0:0:0: -374,266,366120,1,2,0:0:0:0: -500,153,366235,2,0,L|516:35,2,93.5,0|8|0,0:0|0:0|0:0,0:0:0:0: -374,266,366581,6,0,L|386:358,1,93.5,2|0,0:0|0:0,0:0:0:0: -414,164,366812,2,0,P|322:168|265:263,1,187,8|2,0:0|0:0,0:0:0:0: -188,359,367158,1,0,0:0:0:0: -117,297,367273,2,0,P|115:271|108:189,1,93.5,8|0,0:0|0:0,0:0:0:0: -15,83,367504,6,0,B|192:130|204:-6|413:48,1,374,2|2,0:0|0:0,0:0:0:0: -468,13,368081,1,0,0:0:0:0: -445,104,368197,2,0,P|448:150|452:197,1,93.5,8|0,0:0|0:0,0:0:0:0: -356,295,368427,6,0,P|443:278|500:348,1,187,2|8,0:0|0:0,0:0:0:0: -284,353,368773,2,0,P|196:368|140:298,1,187,2|2,0:0|0:0,0:0:0:0: -99,213,369120,2,0,P|145:216|192:220,1,93.5,8|0,0:0|0:0,0:0:0:0: -378,41,369350,6,0,B|291:17|285:85|196:62,1,187,2|8,0:0|0:0,0:0:0:0: -111,24,369697,1,0,0:0:0:0: -17,161,369812,2,0,P|11:115|32:74,1,93.5,2|0,0:0|0:0,0:0:0:0: -152,211,370043,2,0,P|158:257|138:299,1,93.5,8|0,0:0|0:0,0:0:0:0: -5,384,370273,5,2,0:0:0:0: -58,268,370389,1,2,0:0:0:0: -130,372,370504,1,8,0:0:0:0: -183,256,370620,1,8,0:0:0:0: -187,237,370677,1,8,0:0:0:0: -191,219,370735,1,10,0:0:0:0: -196,201,370793,1,8,0:0:0:0: -200,183,370850,1,8,0:0:0:0: -205,165,370908,1,8,0:0:0:0: -209,146,370966,1,10,0:0:0:0: -111,24,371081,1,2,0:0:0:0: -197,62,371197,6,0,L|387:49,1,187,6|8,0:0|0:0,0:0:0:0: -315,322,371658,2,0,L|125:335,1,187,2|8,0:0|0:0,0:0:0:0: -457,193,372120,2,0,L|444:379,1,187,2|8,0:0|0:0,0:0:0:0: -55,191,372581,2,0,L|63:67,1,93.5,2|0,0:0|0:0,0:0:0:0: -68,4,372812,1,8,0:0:0:0: -152,46,372927,1,0,0:0:0:0: -186,263,373043,6,0,L|-4:276,1,187,6|8,0:0|0:0,0:0:0:0: -326,121,373504,2,0,L|516:108,1,187,2|8,0:0|0:0,0:0:0:0: -491,199,373850,1,0,0:0:0:0: -468,288,373966,2,0,L|282:301,1,187,2|8,0:0|0:0,0:0:0:0: -203,5,374427,2,0,L|328:-3,1,93.5,2|0,0:0|0:0,0:0:0:0: -389,13,374658,1,8,0:0:0:0: -329,84,374773,1,8,0:0:0:0: -327,102,374830,1,8,0:0:0:0: -326,121,374889,6,0,L|516:108,1,187,6|8,0:0|0:0,0:0:0:0: -227,377,375350,1,2,0:0:0:0: -138,348,375466,1,8,0:0:0:0: -138,254,375581,1,8,0:0:0:0: -227,225,375697,1,2,0:0:0:0: -282,301,375812,2,0,L|468:288,1,187,2|8,0:0|0:0,0:0:0:0: -230,83,376273,2,0,L|44:96,1,187,2|8,0:0|0:0,0:0:0:0: -11,185,376620,1,0,0:0:0:0: -303,212,376735,6,0,L|316:26,1,187,6|8,0:0|0:0,0:0:0:0: -43,96,377197,1,2,0:0:0:0: -72,7,377313,1,8,0:0:0:0: -166,7,377428,1,8,0:0:0:0: -195,96,377544,1,8,0:0:0:0: -119,151,377658,2,0,L|132:337,1,187,2|8,0:0|0:0,0:0:0:0: -439,382,378120,2,0,L|426:196,1,187,2|8,0:0|0:0,0:0:0:0: -348,10,378581,6,0,B|414:65|393:172|309:195|241:175|241:175|174:156|90:178|69:285|132:337,1,561,6|8,0:0|0:0,0:0:0:0: -444,354,379504,2,0,P|501:284|473:199,1,187,2|8,0:0|0:0,0:0:0:0: -348,10,379850,2,0,P|291:80|319:165,1,187,2|2,0:0|0:0,0:0:0:0: -408,139,380197,2,0,L|419:46,1,93.5,8|0,0:0|0:0,0:0:0:0: -396,231,380427,5,2,0:0:0:0: -396,231,380543,2,0,P|322:217|256:317,1,187,2|2,0:0|0:0,0:0:0:0: -324,358,380889,2,0,L|417:347,1,93.5,2|0,0:0|0:0,0:0:0:0: -255,294,381120,2,0,L|162:283,1,93.5,8|0,0:0|0:0,0:0:0:0: -32,66,381350,5,2,0:0:0:0: -32,66,381466,2,0,P|106:52|172:152,1,187,2|2,0:0|0:0,0:0:0:0: -104,193,381812,2,0,L|11:182,1,93.5,2|0,0:0|0:0,0:0:0:0: -173,129,382043,2,0,L|266:118,1,93.5,8|0,0:0|0:0,0:0:0:0: -490,320,382273,6,2,L|408:303,3,46.75,2|2|10|2,0:0|0:0|0:0|0:0,0:0:0:0: -427,332,382504,2,2,L|345:315,3,46.75,2|2|10|2,0:0|0:0|0:0|0:0,0:0:0:0: -349,341,382735,5,10,0:0:0:0: -364,312,382792,1,2,0:0:0:0: -365,280,382850,1,10,0:0:0:0: -351,251,382908,1,2,0:0:0:0: -325,232,382966,1,10,0:0:0:0: -293,227,383023,1,2,0:0:0:0: -267,208,383080,1,10,0:0:0:0: -253,179,383138,1,2,0:0:0:0: -254,147,383197,5,10,0:0:0:0: -290,174,383254,1,2,0:0:0:0: -303,218,383312,1,10,0:0:0:0: -288,262,383370,1,2,0:0:0:0: -250,287,383427,1,10,0:0:0:0: -204,280,383484,1,2,0:0:0:0: -171,248,383542,1,10,0:0:0:0: -163,203,383600,1,2,0:0:0:0: -182,161,383657,5,10,0:0:0:0: -184,102,383715,1,2,0:0:0:0: -144,58,383773,1,10,0:0:0:0: -82,54,383831,1,2,0:0:0:0: -35,93,383889,1,10,0:0:0:0: -30,153,383947,1,2,0:0:0:0: -58,205,384004,1,10,0:0:0:0: -57,266,384062,1,2,0:0:0:0: -18,313,384120,5,14,0:0:0:0: diff --git a/osu.Game.Rulesets.Mania/Resources/Testing/Beatmaps/basic-expected-conversion.json b/osu.Game.Rulesets.Mania/Resources/Testing/Beatmaps/basic-expected-conversion.json new file mode 100644 index 0000000000..30beea3512 --- /dev/null +++ b/osu.Game.Rulesets.Mania/Resources/Testing/Beatmaps/basic-expected-conversion.json @@ -0,0 +1 @@ +{"Mappings":[{"StartTime":500.0,"Objects":[{"StartTime":500.0,"EndTime":2500.0,"Column":0},{"StartTime":1500.0,"EndTime":2500.0,"Column":1}]},{"StartTime":3000.0,"Objects":[{"StartTime":3000.0,"EndTime":4000.0,"Column":2}]},{"StartTime":4500.0,"Objects":[{"StartTime":4500.0,"EndTime":5500.0,"Column":4}]},{"StartTime":6000.0,"Objects":[{"StartTime":6000.0,"EndTime":6500.0,"Column":2}]},{"StartTime":7000.0,"Objects":[{"StartTime":7000.0,"EndTime":8000.0,"Column":2}]},{"StartTime":8500.0,"Objects":[{"StartTime":8500.0,"EndTime":11000.0,"Column":0}]},{"StartTime":11500.0,"Objects":[{"StartTime":11500.0,"EndTime":12000.0,"Column":1}]},{"StartTime":12500.0,"Objects":[{"StartTime":12500.0,"EndTime":16500.0,"Column":4}]},{"StartTime":17000.0,"Objects":[{"StartTime":17000.0,"EndTime":18000.0,"Column":2}]},{"StartTime":18500.0,"Objects":[{"StartTime":18500.0,"EndTime":19450.0,"Column":0}]},{"StartTime":19875.0,"Objects":[{"StartTime":19875.0,"EndTime":23875.0,"Column":1},{"StartTime":19875.0,"EndTime":23875.0,"Column":0}]}]} \ No newline at end of file diff --git a/osu.Game.Rulesets.Mania/Resources/Testing/Beatmaps/basic.osu b/osu.Game.Rulesets.Mania/Resources/Testing/Beatmaps/basic.osu new file mode 100644 index 0000000000..d58bb28ace --- /dev/null +++ b/osu.Game.Rulesets.Mania/Resources/Testing/Beatmaps/basic.osu @@ -0,0 +1,66 @@ +osu file format v14 + +[General] +AudioFilename: virtual +AudioLeadIn: 0 +PreviewTime: -1 +Countdown: 1 +SampleSet: Soft +StackLeniency: 0.7 +Mode: 0 +LetterboxInBreaks: 0 +WidescreenStoryboard: 1 + +[Editor] +DistanceSpacing: 1.5 +BeatDivisor: 4 +GridSize: 32 +TimelineZoom: 1 + +[Metadata] +Title:Basic +TitleUnicode:Test Suite +Artist:peppy +ArtistUnicode:peppy +Creator:peppy +Version:[Basic] +Source: +Tags: +BeatmapID:826308 +BeatmapSetID:-1 + +[Difficulty] +HPDrainRate:6 +CircleSize:4 +OverallDifficulty:7 +ApproachRate:8.3 +SliderMultiplier:1.6 +SliderTickRate:1 + +[Events] +//Background and Video events +//Break Periods +//Storyboard Layer 0 (Background) +//Storyboard Layer 1 (Fail) +//Storyboard Layer 2 (Pass) +//Storyboard Layer 3 (Foreground) +//Storyboard Sound Samples + +[TimingPoints] +500,500,4,2,1,50,1,0 +13426,-100,4,3,1,45,0,0 +14884,-100,4,2,1,50,0,0 + + +[HitObjects] +96,192,500,6,0,L|416:192,2,320 +256,192,3000,12,0,4000,0:0:0:0: +256,192,4500,12,0,5500,0:0:0:0: +256,192,6000,12,0,6500,0:0:0:0: +256,128,7000,6,0,L|352:128,4,80 +32,192,8500,6,0,B|32:384|256:384|256:192|256:192|256:0|512:0|512:192,1,800 +256,192,11500,12,0,12000,0:0:0:0: +512,320,12500,6,0,B|0:256|0:256|512:96|512:96|256:32,1,1280 +256,256,17000,6,0,L|160:256,4,80 +256,192,18500,12,0,19450,0:0:0:0: +216,231,19875,6,0,B|216:135|280:135|344:135|344:199|344:263|248:327|248:327|120:327|120:327|56:39|408:39|408:39|472:150|408:342,1,1280 diff --git a/osu.Game.Rulesets.Mania/Tests/ManiaBeatmapConversionTest.cs b/osu.Game.Rulesets.Mania/Tests/ManiaBeatmapConversionTest.cs index 056e608289..8d2280c853 100644 --- a/osu.Game.Rulesets.Mania/Tests/ManiaBeatmapConversionTest.cs +++ b/osu.Game.Rulesets.Mania/Tests/ManiaBeatmapConversionTest.cs @@ -21,11 +21,11 @@ namespace osu.Game.Rulesets.Mania.Tests private bool isForCurrentRuleset; [NonParallelizable] - [TestCase(875945, false), Ignore("See: https://github.com/ppy/osu/issues/2150")] - public void Test(int beatmapId, bool isForCurrentRuleset) + [TestCase("basic", false), Ignore("See: https://github.com/ppy/osu/issues/2150")] + public void Test(string name, bool isForCurrentRuleset) { this.isForCurrentRuleset = isForCurrentRuleset; - base.Test(beatmapId); + base.Test(name); } protected override IEnumerable CreateConvertValue(HitObject hitObject) diff --git a/osu.Game.Rulesets.Mania/osu.Game.Rulesets.Mania.csproj b/osu.Game.Rulesets.Mania/osu.Game.Rulesets.Mania.csproj index bfb2fe6be3..a09b3e93a7 100644 --- a/osu.Game.Rulesets.Mania/osu.Game.Rulesets.Mania.csproj +++ b/osu.Game.Rulesets.Mania/osu.Game.Rulesets.Mania.csproj @@ -161,8 +161,8 @@ - - + + diff --git a/osu.Game.Rulesets.Osu/Resources/Testing/Beatmaps/875945-expected-conversion.json b/osu.Game.Rulesets.Osu/Resources/Testing/Beatmaps/875945-expected-conversion.json deleted file mode 100644 index 354c238fb2..0000000000 --- a/osu.Game.Rulesets.Osu/Resources/Testing/Beatmaps/875945-expected-conversion.json +++ /dev/null @@ -1 +0,0 @@ -{"Mappings":[{"StartTime":6590.0,"Objects":[{"StartTime":6590.0,"EndTime":8320.0,"StartX":88.0,"StartY":104.0,"EndX":420.097382,"EndY":110.315109}]},{"StartTime":8436.0,"Objects":[{"StartTime":8436.0,"EndTime":10166.0,"StartX":396.0,"StartY":213.0,"EndX":376.979553,"EndY":172.796143}]},{"StartTime":10282.0,"Objects":[{"StartTime":10282.0,"EndTime":12012.0,"StartX":472.0,"StartY":220.0,"EndX":222.380341,"EndY":303.344238}]},{"StartTime":12128.0,"Objects":[{"StartTime":12128.0,"EndTime":13858.0,"StartX":277.0,"StartY":200.0,"EndX":275.41626,"EndY":242.620255}]},{"StartTime":13974.0,"Objects":[{"StartTime":13974.0,"EndTime":15704.0,"StartX":224.0,"StartY":141.0,"EndX":473.000916,"EndY":224.508286}]},{"StartTime":15820.0,"Objects":[{"StartTime":15820.0,"EndTime":17550.0,"StartX":496.0,"StartY":301.0,"EndX":155.424408,"EndY":355.8156}]},{"StartTime":17666.0,"Objects":[{"StartTime":17666.0,"EndTime":19512.0,"StartX":76.0,"StartY":352.0,"EndX":151.558578,"EndY":193.103043}]},{"StartTime":19628.0,"Objects":[{"StartTime":19628.0,"EndTime":21128.0,"StartX":256.0,"StartY":192.0,"EndX":256.0,"EndY":192.0}]},{"StartTime":21359.0,"Objects":[{"StartTime":21359.0,"EndTime":21820.0,"StartX":213.0,"StartY":117.0,"EndX":119.631989,"EndY":121.966385}]},{"StartTime":22282.0,"Objects":[{"StartTime":22282.0,"EndTime":22743.0,"StartX":300.0,"StartY":161.0,"EndX":393.30603,"EndY":154.980255}]},{"StartTime":23205.0,"Objects":[{"StartTime":23205.0,"EndTime":23666.0,"StartX":233.0,"StartY":38.0,"EndX":139.631989,"EndY":42.9663849}]},{"StartTime":24128.0,"Objects":[{"StartTime":24128.0,"EndTime":24589.0,"StartX":280.0,"StartY":240.0,"EndX":373.30603,"EndY":233.980255}]},{"StartTime":25051.0,"Objects":[{"StartTime":25051.0,"EndTime":26666.0,"StartX":509.0,"StartY":22.0,"EndX":212.757538,"EndY":116.37236}]},{"StartTime":26897.0,"Objects":[{"StartTime":26897.0,"EndTime":28281.0,"StartX":139.0,"StartY":43.0,"EndX":118.957672,"EndY":293.130981}]},{"StartTime":28743.0,"Objects":[{"StartTime":28743.0,"EndTime":29204.0,"StartX":46.0,"StartY":366.0,"EndX":139.365158,"EndY":371.019623}]},{"StartTime":29666.0,"Objects":[{"StartTime":29666.0,"EndTime":30127.0,"StartX":280.0,"StartY":175.0,"EndX":186.68988,"EndY":169.044037}]},{"StartTime":30589.0,"Objects":[{"StartTime":30589.0,"EndTime":31050.0,"StartX":26.0,"StartY":287.0,"EndX":119.365158,"EndY":292.019623}]},{"StartTime":31513.0,"Objects":[{"StartTime":31513.0,"EndTime":31974.0,"StartX":300.0,"StartY":254.0,"EndX":206.68988,"EndY":248.044037}]},{"StartTime":32436.0,"Objects":[{"StartTime":32436.0,"EndTime":34282.0,"StartX":0.0,"StartY":57.0,"EndX":334.7409,"EndY":178.619827}]},{"StartTime":35205.0,"Objects":[{"StartTime":35205.0,"EndTime":36012.0,"StartX":334.0,"StartY":178.0,"EndX":316.137024,"EndY":340.647034}]},{"StartTime":36128.0,"Objects":[{"StartTime":36128.0,"EndTime":36474.0,"StartX":396.0,"StartY":313.0,"EndX":455.6553,"EndY":284.508118}]},{"StartTime":36590.0,"Objects":[{"StartTime":36590.0,"EndTime":39359.0,"StartX":508.0,"StartY":233.0,"EndX":10.77596,"EndY":46.88111}]},{"StartTime":39820.0,"Objects":[{"StartTime":39820.0,"EndTime":40281.0,"StartX":10.0,"StartY":47.0,"EndX":103.116005,"EndY":38.53491}]},{"StartTime":40743.0,"Objects":[{"StartTime":40743.0,"EndTime":41204.0,"StartX":233.0,"StartY":130.0,"EndX":139.884,"EndY":138.465088}]},{"StartTime":41666.0,"Objects":[{"StartTime":41666.0,"EndTime":42589.0,"StartX":268.0,"StartY":229.0,"EndX":454.201965,"EndY":211.742249}]},{"StartTime":43051.0,"Objects":[{"StartTime":43051.0,"EndTime":43281.0,"StartX":271.0,"StartY":366.0,"EndX":253.544708,"EndY":323.529846}]},{"StartTime":43513.0,"Objects":[{"StartTime":43513.0,"EndTime":43513.0,"StartX":268.0,"StartY":229.0,"EndX":268.0,"EndY":229.0}]},{"StartTime":43628.0,"Objects":[{"StartTime":43628.0,"EndTime":49051.0,"StartX":256.0,"StartY":192.0,"EndX":256.0,"EndY":192.0}]},{"StartTime":56435.0,"Objects":[{"StartTime":56435.0,"EndTime":56665.0,"StartX":45.0,"StartY":136.0,"EndX":218.481384,"EndY":87.55199}]},{"StartTime":56781.0,"Objects":[{"StartTime":56781.0,"EndTime":56781.0,"StartX":214.0,"StartY":252.0,"EndX":214.0,"EndY":252.0}]},{"StartTime":56897.0,"Objects":[{"StartTime":56897.0,"EndTime":57012.0,"StartX":214.0,"StartY":252.0,"EndX":192.823029,"EndY":161.0437}]},{"StartTime":57127.0,"Objects":[{"StartTime":57127.0,"EndTime":57242.0,"StartX":336.0,"StartY":48.0,"EndX":313.87915,"EndY":138.7325}]},{"StartTime":57358.0,"Objects":[{"StartTime":57358.0,"EndTime":57473.0,"StartX":319.0,"StartY":308.0,"EndX":406.663483,"EndY":309.0902}]},{"StartTime":57589.0,"Objects":[{"StartTime":57589.0,"EndTime":57704.0,"StartX":214.0,"StartY":252.0,"EndX":126.336525,"EndY":250.90979}]},{"StartTime":57820.0,"Objects":[{"StartTime":57820.0,"EndTime":57820.0,"StartX":58.0,"StartY":340.0,"EndX":58.0,"EndY":340.0}]},{"StartTime":57935.0,"Objects":[{"StartTime":57935.0,"EndTime":57935.0,"StartX":165.0,"StartY":370.0,"EndX":165.0,"EndY":370.0}]},{"StartTime":58051.0,"Objects":[{"StartTime":58051.0,"EndTime":58051.0,"StartX":263.0,"StartY":315.0,"EndX":263.0,"EndY":315.0}]},{"StartTime":58166.0,"Objects":[{"StartTime":58166.0,"EndTime":58166.0,"StartX":370.0,"StartY":345.0,"EndX":370.0,"EndY":345.0}]},{"StartTime":58224.0,"Objects":[{"StartTime":58224.0,"EndTime":58224.0,"StartX":370.0,"StartY":345.0,"EndX":370.0,"EndY":345.0}]},{"StartTime":58281.0,"Objects":[{"StartTime":58281.0,"EndTime":58511.0,"StartX":370.0,"StartY":345.0,"EndX":426.762177,"EndY":189.001526}]},{"StartTime":58627.0,"Objects":[{"StartTime":58627.0,"EndTime":58627.0,"StartX":507.0,"StartY":110.0,"EndX":507.0,"EndY":110.0}]},{"StartTime":58685.0,"Objects":[{"StartTime":58685.0,"EndTime":58685.0,"StartX":507.0,"StartY":110.0,"EndX":507.0,"EndY":110.0}]},{"StartTime":58743.0,"Objects":[{"StartTime":58743.0,"EndTime":58858.0,"StartX":507.0,"StartY":110.0,"EndX":493.172424,"EndY":17.5281219}]},{"StartTime":58974.0,"Objects":[{"StartTime":58974.0,"EndTime":59089.0,"StartX":412.0,"StartY":96.0,"EndX":425.827576,"EndY":188.471878}]},{"StartTime":59204.0,"Objects":[{"StartTime":59204.0,"EndTime":59319.0,"StartX":370.0,"StartY":344.0,"EndX":281.006439,"EndY":337.4498}]},{"StartTime":59435.0,"Objects":[{"StartTime":59435.0,"EndTime":59550.0,"StartX":273.0,"StartY":211.0,"EndX":330.438354,"EndY":279.7563}]},{"StartTime":59666.0,"Objects":[{"StartTime":59666.0,"EndTime":59781.0,"StartX":349.0,"StartY":206.0,"EndX":356.9348,"EndY":117.1017}]},{"StartTime":59897.0,"Objects":[{"StartTime":59897.0,"EndTime":60012.0,"StartX":482.0,"StartY":107.0,"EndX":414.039063,"EndY":164.9039}]},{"StartTime":60127.0,"Objects":[{"StartTime":60127.0,"EndTime":60357.0,"StartX":144.0,"StartY":273.0,"EndX":330.869141,"EndY":279.9951}]},{"StartTime":60474.0,"Objects":[{"StartTime":60474.0,"EndTime":60704.0,"StartX":349.0,"StartY":206.0,"EndX":162.130859,"EndY":199.0049}]},{"StartTime":60820.0,"Objects":[{"StartTime":60820.0,"EndTime":60935.0,"StartX":85.0,"StartY":115.0,"EndX":178.415466,"EndY":118.975128}]},{"StartTime":61051.0,"Objects":[{"StartTime":61051.0,"EndTime":61166.0,"StartX":126.0,"StartY":347.0,"EndX":66.6307449,"EndY":282.304321}]},{"StartTime":61281.0,"Objects":[{"StartTime":61281.0,"EndTime":61396.0,"StartX":162.0,"StartY":199.0,"EndX":221.369263,"EndY":263.695679}]},{"StartTime":61512.0,"Objects":[{"StartTime":61512.0,"EndTime":61627.0,"StartX":203.0,"StartY":375.0,"EndX":296.284821,"EndY":368.660248}]},{"StartTime":61743.0,"Objects":[{"StartTime":61743.0,"EndTime":61858.0,"StartX":443.0,"StartY":285.0,"EndX":349.68988,"EndY":290.955963}]},{"StartTime":61916.0,"Objects":[{"StartTime":61916.0,"EndTime":61916.0,"StartX":329.0,"StartY":279.0,"EndX":329.0,"EndY":279.0}]},{"StartTime":61974.0,"Objects":[{"StartTime":61974.0,"EndTime":62204.0,"StartX":309.0,"StartY":266.0,"EndX":290.392822,"EndY":79.9280548}]},{"StartTime":62320.0,"Objects":[{"StartTime":62320.0,"EndTime":62550.0,"StartX":203.0,"StartY":118.0,"EndX":221.6072,"EndY":304.07196}]},{"StartTime":62666.0,"Objects":[{"StartTime":62666.0,"EndTime":63127.0,"StartX":133.0,"StartY":342.0,"EndX":118.0,"EndY":186.076859}]},{"StartTime":63358.0,"Objects":[{"StartTime":63358.0,"EndTime":63358.0,"StartX":285.0,"StartY":26.0,"EndX":285.0,"EndY":26.0}]},{"StartTime":63474.0,"Objects":[{"StartTime":63474.0,"EndTime":63474.0,"StartX":352.0,"StartY":117.0,"EndX":352.0,"EndY":117.0}]},{"StartTime":63589.0,"Objects":[{"StartTime":63589.0,"EndTime":63589.0,"StartX":265.0,"StartY":189.0,"EndX":265.0,"EndY":189.0}]},{"StartTime":63705.0,"Objects":[{"StartTime":63705.0,"EndTime":63705.0,"StartX":332.0,"StartY":280.0,"EndX":332.0,"EndY":280.0}]},{"StartTime":63820.0,"Objects":[{"StartTime":63820.0,"EndTime":63820.0,"StartX":474.0,"StartY":81.0,"EndX":474.0,"EndY":81.0}]},{"StartTime":63877.0,"Objects":[{"StartTime":63877.0,"EndTime":63877.0,"StartX":456.0,"StartY":83.0,"EndX":456.0,"EndY":83.0}]},{"StartTime":63935.0,"Objects":[{"StartTime":63935.0,"EndTime":63935.0,"StartX":437.0,"StartY":85.0,"EndX":437.0,"EndY":85.0}]},{"StartTime":63993.0,"Objects":[{"StartTime":63993.0,"EndTime":63993.0,"StartX":419.0,"StartY":88.0,"EndX":419.0,"EndY":88.0}]},{"StartTime":64051.0,"Objects":[{"StartTime":64051.0,"EndTime":64166.0,"StartX":400.0,"StartY":90.0,"EndX":307.5588,"EndY":75.96875}]},{"StartTime":64281.0,"Objects":[{"StartTime":64281.0,"EndTime":64281.0,"StartX":217.0,"StartY":50.0,"EndX":217.0,"EndY":50.0}]},{"StartTime":64338.0,"Objects":[{"StartTime":64338.0,"EndTime":64338.0,"StartX":219.0,"StartY":68.0,"EndX":219.0,"EndY":68.0}]},{"StartTime":64396.0,"Objects":[{"StartTime":64396.0,"EndTime":64396.0,"StartX":221.0,"StartY":87.0,"EndX":221.0,"EndY":87.0}]},{"StartTime":64454.0,"Objects":[{"StartTime":64454.0,"EndTime":64454.0,"StartX":224.0,"StartY":105.0,"EndX":224.0,"EndY":105.0}]},{"StartTime":64512.0,"Objects":[{"StartTime":64512.0,"EndTime":64627.0,"StartX":226.0,"StartY":124.0,"EndX":211.96875,"EndY":216.4412}]},{"StartTime":64743.0,"Objects":[{"StartTime":64743.0,"EndTime":64743.0,"StartX":186.0,"StartY":307.0,"EndX":186.0,"EndY":307.0}]},{"StartTime":64800.0,"Objects":[{"StartTime":64800.0,"EndTime":64800.0,"StartX":204.0,"StartY":305.0,"EndX":204.0,"EndY":305.0}]},{"StartTime":64858.0,"Objects":[{"StartTime":64858.0,"EndTime":64858.0,"StartX":223.0,"StartY":303.0,"EndX":223.0,"EndY":303.0}]},{"StartTime":64916.0,"Objects":[{"StartTime":64916.0,"EndTime":64916.0,"StartX":241.0,"StartY":300.0,"EndX":241.0,"EndY":300.0}]},{"StartTime":64974.0,"Objects":[{"StartTime":64974.0,"EndTime":65089.0,"StartX":260.0,"StartY":298.0,"EndX":352.4412,"EndY":312.03125}]},{"StartTime":65205.0,"Objects":[{"StartTime":65205.0,"EndTime":65205.0,"StartX":443.0,"StartY":338.0,"EndX":443.0,"EndY":338.0}]},{"StartTime":65262.0,"Objects":[{"StartTime":65262.0,"EndTime":65262.0,"StartX":441.0,"StartY":320.0,"EndX":441.0,"EndY":320.0}]},{"StartTime":65320.0,"Objects":[{"StartTime":65320.0,"EndTime":65320.0,"StartX":439.0,"StartY":301.0,"EndX":439.0,"EndY":301.0}]},{"StartTime":65378.0,"Objects":[{"StartTime":65378.0,"EndTime":65378.0,"StartX":436.0,"StartY":283.0,"EndX":436.0,"EndY":283.0}]},{"StartTime":65436.0,"Objects":[{"StartTime":65436.0,"EndTime":65551.0,"StartX":434.0,"StartY":264.0,"EndX":448.03125,"EndY":171.5588}]},{"StartTime":65666.0,"Objects":[{"StartTime":65666.0,"EndTime":65666.0,"StartX":474.0,"StartY":81.0,"EndX":474.0,"EndY":81.0}]},{"StartTime":65723.0,"Objects":[{"StartTime":65723.0,"EndTime":65723.0,"StartX":456.0,"StartY":83.0,"EndX":456.0,"EndY":83.0}]},{"StartTime":65781.0,"Objects":[{"StartTime":65781.0,"EndTime":65781.0,"StartX":437.0,"StartY":85.0,"EndX":437.0,"EndY":85.0}]},{"StartTime":65839.0,"Objects":[{"StartTime":65839.0,"EndTime":65839.0,"StartX":419.0,"StartY":88.0,"EndX":419.0,"EndY":88.0}]},{"StartTime":65897.0,"Objects":[{"StartTime":65897.0,"EndTime":66012.0,"StartX":400.0,"StartY":90.0,"EndX":307.5588,"EndY":75.96875}]},{"StartTime":66127.0,"Objects":[{"StartTime":66127.0,"EndTime":66127.0,"StartX":226.0,"StartY":124.0,"EndX":226.0,"EndY":124.0}]},{"StartTime":66184.0,"Objects":[{"StartTime":66184.0,"EndTime":66184.0,"StartX":208.0,"StartY":126.0,"EndX":208.0,"EndY":126.0}]},{"StartTime":66242.0,"Objects":[{"StartTime":66242.0,"EndTime":66242.0,"StartX":189.0,"StartY":128.0,"EndX":189.0,"EndY":128.0}]},{"StartTime":66300.0,"Objects":[{"StartTime":66300.0,"EndTime":66300.0,"StartX":171.0,"StartY":131.0,"EndX":171.0,"EndY":131.0}]},{"StartTime":66358.0,"Objects":[{"StartTime":66358.0,"EndTime":66473.0,"StartX":152.0,"StartY":133.0,"EndX":59.5588074,"EndY":118.96875}]},{"StartTime":66589.0,"Objects":[{"StartTime":66589.0,"EndTime":66704.0,"StartX":14.0,"StartY":291.0,"EndX":1.656276,"EndY":199.842651}]},{"StartTime":66820.0,"Objects":[{"StartTime":66820.0,"EndTime":66935.0,"StartX":136.0,"StartY":292.0,"EndX":148.343719,"EndY":383.157349}]},{"StartTime":67051.0,"Objects":[{"StartTime":67051.0,"EndTime":67281.0,"StartX":80.0,"StartY":232.0,"EndX":249.358459,"EndY":226.52771}]},{"StartTime":67397.0,"Objects":[{"StartTime":67397.0,"EndTime":67397.0,"StartX":315.0,"StartY":159.0,"EndX":315.0,"EndY":159.0}]},{"StartTime":67512.0,"Objects":[{"StartTime":67512.0,"EndTime":67742.0,"StartX":491.0,"StartY":182.0,"EndX":472.807831,"EndY":367.1432}]},{"StartTime":67858.0,"Objects":[{"StartTime":67858.0,"EndTime":68088.0,"StartX":410.0,"StartY":124.0,"EndX":391.807831,"EndY":309.1432}]},{"StartTime":68204.0,"Objects":[{"StartTime":68204.0,"EndTime":68319.0,"StartX":329.0,"StartY":66.0,"EndX":314.227875,"EndY":158.3257}]},{"StartTime":68435.0,"Objects":[{"StartTime":68435.0,"EndTime":68550.0,"StartX":181.0,"StartY":294.0,"EndX":267.731628,"EndY":307.528839}]},{"StartTime":68666.0,"Objects":[{"StartTime":68666.0,"EndTime":68781.0,"StartX":440.0,"StartY":252.0,"EndX":353.268341,"EndY":238.47113}]},{"StartTime":68897.0,"Objects":[{"StartTime":68897.0,"EndTime":68897.0,"StartX":128.0,"StartY":371.0,"EndX":128.0,"EndY":371.0}]},{"StartTime":69012.0,"Objects":[{"StartTime":69012.0,"EndTime":69012.0,"StartX":181.0,"StartY":294.0,"EndX":181.0,"EndY":294.0}]},{"StartTime":69127.0,"Objects":[{"StartTime":69127.0,"EndTime":69127.0,"StartX":117.0,"StartY":225.0,"EndX":117.0,"EndY":225.0}]},{"StartTime":69242.0,"Objects":[{"StartTime":69242.0,"EndTime":69242.0,"StartX":170.0,"StartY":148.0,"EndX":170.0,"EndY":148.0}]},{"StartTime":69358.0,"Objects":[{"StartTime":69358.0,"EndTime":69473.0,"StartX":52.0,"StartY":88.0,"EndX":42.99369,"EndY":181.065216}]},{"StartTime":69589.0,"Objects":[{"StartTime":69589.0,"EndTime":69704.0,"StartX":181.0,"StartY":294.0,"EndX":191.103531,"EndY":201.047485}]},{"StartTime":69820.0,"Objects":[{"StartTime":69820.0,"EndTime":69935.0,"StartX":39.0,"StartY":101.0,"EndX":29.8967171,"EndY":194.055786}]},{"StartTime":70051.0,"Objects":[{"StartTime":70051.0,"EndTime":70166.0,"StartX":168.0,"StartY":307.0,"EndX":177.006317,"EndY":213.934784}]},{"StartTime":70281.0,"Objects":[{"StartTime":70281.0,"EndTime":70281.0,"StartX":198.0,"StartY":30.0,"EndX":198.0,"EndY":30.0}]},{"StartTime":70339.0,"Objects":[{"StartTime":70339.0,"EndTime":70339.0,"StartX":220.0,"StartY":46.0,"EndX":220.0,"EndY":46.0}]},{"StartTime":70397.0,"Objects":[{"StartTime":70397.0,"EndTime":70397.0,"StartX":244.0,"StartY":58.0,"EndX":244.0,"EndY":58.0}]},{"StartTime":70455.0,"Objects":[{"StartTime":70455.0,"EndTime":70455.0,"StartX":269.0,"StartY":65.0,"EndX":269.0,"EndY":65.0}]},{"StartTime":70512.0,"Objects":[{"StartTime":70512.0,"EndTime":70512.0,"StartX":296.0,"StartY":68.0,"EndX":296.0,"EndY":68.0}]},{"StartTime":70570.0,"Objects":[{"StartTime":70570.0,"EndTime":70570.0,"StartX":322.0,"StartY":66.0,"EndX":322.0,"EndY":66.0}]},{"StartTime":70627.0,"Objects":[{"StartTime":70627.0,"EndTime":70627.0,"StartX":348.0,"StartY":60.0,"EndX":348.0,"EndY":60.0}]},{"StartTime":70685.0,"Objects":[{"StartTime":70685.0,"EndTime":70685.0,"StartX":373.0,"StartY":49.0,"EndX":373.0,"EndY":49.0}]},{"StartTime":70742.0,"Objects":[{"StartTime":70742.0,"EndTime":70742.0,"StartX":396.0,"StartY":36.0,"EndX":396.0,"EndY":36.0}]},{"StartTime":70800.0,"Objects":[{"StartTime":70800.0,"EndTime":70800.0,"StartX":441.0,"StartY":30.0,"EndX":441.0,"EndY":30.0}]},{"StartTime":70858.0,"Objects":[{"StartTime":70858.0,"EndTime":70858.0,"StartX":483.0,"StartY":49.0,"EndX":483.0,"EndY":49.0}]},{"StartTime":70916.0,"Objects":[{"StartTime":70916.0,"EndTime":70916.0,"StartX":510.0,"StartY":87.0,"EndX":510.0,"EndY":87.0}]},{"StartTime":70974.0,"Objects":[{"StartTime":70974.0,"EndTime":70974.0,"StartX":512.0,"StartY":133.0,"EndX":512.0,"EndY":133.0}]},{"StartTime":71031.0,"Objects":[{"StartTime":71031.0,"EndTime":71031.0,"StartX":492.0,"StartY":175.0,"EndX":492.0,"EndY":175.0}]},{"StartTime":71089.0,"Objects":[{"StartTime":71089.0,"EndTime":71089.0,"StartX":453.0,"StartY":199.0,"EndX":453.0,"EndY":199.0}]},{"StartTime":71146.0,"Objects":[{"StartTime":71146.0,"EndTime":71146.0,"StartX":407.0,"StartY":200.0,"EndX":407.0,"EndY":200.0}]},{"StartTime":71204.0,"Objects":[{"StartTime":71204.0,"EndTime":71434.0,"StartX":364.0,"StartY":184.0,"EndX":311.518982,"EndY":334.204376}]},{"StartTime":71551.0,"Objects":[{"StartTime":71551.0,"EndTime":71781.0,"StartX":419.0,"StartY":372.0,"EndX":471.481018,"EndY":221.795639}]},{"StartTime":71897.0,"Objects":[{"StartTime":71897.0,"EndTime":72012.0,"StartX":332.0,"StartY":104.0,"EndX":425.4371,"EndY":100.571114}]},{"StartTime":72127.0,"Objects":[{"StartTime":72127.0,"EndTime":72127.0,"StartX":248.0,"StartY":179.0,"EndX":248.0,"EndY":179.0}]},{"StartTime":72243.0,"Objects":[{"StartTime":72243.0,"EndTime":72473.0,"StartX":248.0,"StartY":179.0,"EndX":61.1216278,"EndY":185.743042}]},{"StartTime":72589.0,"Objects":[{"StartTime":72589.0,"EndTime":72704.0,"StartX":144.0,"StartY":259.0,"EndX":237.418945,"EndY":255.107544}]},{"StartTime":72820.0,"Objects":[{"StartTime":72820.0,"EndTime":72935.0,"StartX":164.0,"StartY":104.0,"EndX":70.58106,"EndY":107.892456}]},{"StartTime":73051.0,"Objects":[{"StartTime":73051.0,"EndTime":73281.0,"StartX":111.0,"StartY":338.0,"EndX":227.3736,"EndY":241.712738}]},{"StartTime":73397.0,"Objects":[{"StartTime":73397.0,"EndTime":73627.0,"StartX":192.0,"StartY":136.0,"EndX":5.122879,"EndY":142.777924}]},{"StartTime":73743.0,"Objects":[{"StartTime":73743.0,"EndTime":73858.0,"StartX":78.0,"StartY":57.0,"EndX":171.418945,"EndY":53.1075439}]},{"StartTime":73974.0,"Objects":[{"StartTime":73974.0,"EndTime":73974.0,"StartX":365.0,"StartY":83.0,"EndX":365.0,"EndY":83.0}]},{"StartTime":74089.0,"Objects":[{"StartTime":74089.0,"EndTime":74319.0,"StartX":365.0,"StartY":83.0,"EndX":191.714233,"EndY":134.999924}]},{"StartTime":74435.0,"Objects":[{"StartTime":74435.0,"EndTime":74550.0,"StartX":45.0,"StartY":195.0,"EndX":103.137146,"EndY":257.4539}]},{"StartTime":74666.0,"Objects":[{"StartTime":74666.0,"EndTime":74839.0,"StartX":16.0,"StartY":332.0,"EndX":154.0101,"EndY":323.057037}]},{"StartTime":74897.0,"Objects":[{"StartTime":74897.0,"EndTime":75127.0,"StartX":240.0,"StartY":352.0,"EndX":286.697662,"EndY":192.015747}]},{"StartTime":75243.0,"Objects":[{"StartTime":75243.0,"EndTime":75473.0,"StartX":395.0,"StartY":224.0,"EndX":348.302338,"EndY":383.984253}]},{"StartTime":75589.0,"Objects":[{"StartTime":75589.0,"EndTime":75704.0,"StartX":249.0,"StartY":166.0,"EndX":239.00386,"EndY":73.03588}]},{"StartTime":75820.0,"Objects":[{"StartTime":75820.0,"EndTime":75820.0,"StartX":198.0,"StartY":230.0,"EndX":198.0,"EndY":230.0}]},{"StartTime":75935.0,"Objects":[{"StartTime":75935.0,"EndTime":76165.0,"StartX":198.0,"StartY":230.0,"EndX":307.749573,"EndY":256.112274}]},{"StartTime":76281.0,"Objects":[{"StartTime":76281.0,"EndTime":76396.0,"StartX":340.0,"StartY":364.0,"EndX":433.236267,"EndY":356.9822}]},{"StartTime":76512.0,"Objects":[{"StartTime":76512.0,"EndTime":76627.0,"StartX":236.0,"StartY":324.0,"EndX":142.721558,"EndY":330.432983}]},{"StartTime":76743.0,"Objects":[{"StartTime":76743.0,"EndTime":76973.0,"StartX":13.0,"StartY":228.0,"EndX":197.975418,"EndY":229.001831}]},{"StartTime":77089.0,"Objects":[{"StartTime":77089.0,"EndTime":77319.0,"StartX":324.0,"StartY":152.0,"EndX":139.0246,"EndY":150.99852}]},{"StartTime":77435.0,"Objects":[{"StartTime":77435.0,"EndTime":77550.0,"StartX":294.0,"StartY":235.0,"EndX":387.241821,"EndY":228.056458}]},{"StartTime":77666.0,"Objects":[{"StartTime":77666.0,"EndTime":77666.0,"StartX":452.0,"StartY":108.0,"EndX":452.0,"EndY":108.0}]},{"StartTime":77781.0,"Objects":[{"StartTime":77781.0,"EndTime":77781.0,"StartX":452.0,"StartY":108.0,"EndX":452.0,"EndY":108.0}]},{"StartTime":77897.0,"Objects":[{"StartTime":77897.0,"EndTime":77897.0,"StartX":492.0,"StartY":272.0,"EndX":492.0,"EndY":272.0}]},{"StartTime":78012.0,"Objects":[{"StartTime":78012.0,"EndTime":78012.0,"StartX":492.0,"StartY":272.0,"EndX":492.0,"EndY":272.0}]},{"StartTime":78127.0,"Objects":[{"StartTime":78127.0,"EndTime":78300.0,"StartX":376.0,"StartY":88.0,"EndX":485.975616,"EndY":38.9063225}]},{"StartTime":78358.0,"Objects":[{"StartTime":78358.0,"EndTime":78531.0,"StartX":452.0,"StartY":108.0,"EndX":312.1908,"EndY":119.110664}]},{"StartTime":78589.0,"Objects":[{"StartTime":78589.0,"EndTime":78819.0,"StartX":216.0,"StartY":60.0,"EndX":162.709442,"EndY":212.004089}]},{"StartTime":78935.0,"Objects":[{"StartTime":78935.0,"EndTime":79165.0,"StartX":56.0,"StartY":176.0,"EndX":109.290558,"EndY":23.9959145}]},{"StartTime":79281.0,"Objects":[{"StartTime":79281.0,"EndTime":79396.0,"StartX":216.0,"StartY":60.0,"EndX":223.017776,"EndY":153.236267}]},{"StartTime":79512.0,"Objects":[{"StartTime":79512.0,"EndTime":79512.0,"StartX":333.0,"StartY":284.0,"EndX":333.0,"EndY":284.0}]},{"StartTime":79627.0,"Objects":[{"StartTime":79627.0,"EndTime":79857.0,"StartX":333.0,"StartY":284.0,"EndX":318.234375,"EndY":97.58386}]},{"StartTime":79974.0,"Objects":[{"StartTime":79974.0,"EndTime":80089.0,"StartX":157.0,"StartY":170.0,"EndX":225.494568,"EndY":221.356689}]},{"StartTime":80204.0,"Objects":[{"StartTime":80204.0,"EndTime":80319.0,"StartX":400.0,"StartY":264.0,"EndX":331.505432,"EndY":212.643311}]},{"StartTime":80435.0,"Objects":[{"StartTime":80435.0,"EndTime":80665.0,"StartX":255.0,"StartY":374.0,"EndX":441.4319,"EndY":359.435}]},{"StartTime":80781.0,"Objects":[{"StartTime":80781.0,"EndTime":81011.0,"StartX":512.0,"StartY":272.0,"EndX":325.5681,"EndY":286.565}]},{"StartTime":81127.0,"Objects":[{"StartTime":81127.0,"EndTime":81242.0,"StartX":244.0,"StartY":210.0,"EndX":337.236267,"EndY":202.982224}]},{"StartTime":81358.0,"Objects":[{"StartTime":81358.0,"EndTime":81358.0,"StartX":464.0,"StartY":92.0,"EndX":464.0,"EndY":92.0}]},{"StartTime":81474.0,"Objects":[{"StartTime":81474.0,"EndTime":81704.0,"StartX":464.0,"StartY":92.0,"EndX":436.704865,"EndY":260.520569}]},{"StartTime":81820.0,"Objects":[{"StartTime":81820.0,"EndTime":81935.0,"StartX":321.0,"StartY":123.0,"EndX":310.776672,"EndY":30.060585}]},{"StartTime":82051.0,"Objects":[{"StartTime":82051.0,"EndTime":82224.0,"StartX":201.0,"StartY":117.0,"EndX":215.0548,"EndY":256.544}]},{"StartTime":82281.0,"Objects":[{"StartTime":82281.0,"EndTime":82511.0,"StartX":225.0,"StartY":332.0,"EndX":61.8697166,"EndY":290.136566}]},{"StartTime":82627.0,"Objects":[{"StartTime":82627.0,"EndTime":82857.0,"StartX":90.0,"StartY":181.0,"EndX":253.13028,"EndY":222.863434}]},{"StartTime":82974.0,"Objects":[{"StartTime":82974.0,"EndTime":83089.0,"StartX":315.0,"StartY":317.0,"EndX":408.2069,"EndY":309.602631}]},{"StartTime":83204.0,"Objects":[{"StartTime":83204.0,"EndTime":83204.0,"StartX":500.0,"StartY":169.0,"EndX":500.0,"EndY":169.0}]},{"StartTime":83320.0,"Objects":[{"StartTime":83320.0,"EndTime":83550.0,"StartX":500.0,"StartY":169.0,"EndX":313.556458,"EndY":183.415741}]},{"StartTime":83666.0,"Objects":[{"StartTime":83666.0,"EndTime":83781.0,"StartX":156.0,"StartY":120.0,"EndX":148.402573,"EndY":30.9772434}]},{"StartTime":83897.0,"Objects":[{"StartTime":83897.0,"EndTime":84012.0,"StartX":260.0,"StartY":20.0,"EndX":267.597443,"EndY":109.022758}]},{"StartTime":84127.0,"Objects":[{"StartTime":84127.0,"EndTime":84357.0,"StartX":196.0,"StartY":260.0,"EndX":10.0717621,"EndY":240.007721}]},{"StartTime":84474.0,"Objects":[{"StartTime":84474.0,"EndTime":84704.0,"StartX":80.0,"StartY":328.0,"EndX":266.0215,"EndY":347.104919}]},{"StartTime":84820.0,"Objects":[{"StartTime":84820.0,"EndTime":84935.0,"StartX":372.0,"StartY":382.0,"EndX":425.185242,"EndY":313.9457}]},{"StartTime":85051.0,"Objects":[{"StartTime":85051.0,"EndTime":85166.0,"StartX":506.0,"StartY":236.0,"EndX":420.3389,"EndY":225.319748}]},{"StartTime":85281.0,"Objects":[{"StartTime":85281.0,"EndTime":85396.0,"StartX":313.0,"StartY":195.0,"EndX":345.927277,"EndY":274.284271}]},{"StartTime":85512.0,"Objects":[{"StartTime":85512.0,"EndTime":85685.0,"StartX":163.0,"StartY":144.0,"EndX":23.0051575,"EndY":135.54393}]},{"StartTime":85743.0,"Objects":[{"StartTime":85743.0,"EndTime":85858.0,"StartX":44.0,"StartY":187.0,"EndX":137.3583,"EndY":192.145737}]},{"StartTime":85974.0,"Objects":[{"StartTime":85974.0,"EndTime":86089.0,"StartX":245.0,"StartY":159.0,"EndX":213.251648,"EndY":75.93215}]},{"StartTime":86204.0,"Objects":[{"StartTime":86204.0,"EndTime":86434.0,"StartX":214.0,"StartY":244.0,"EndX":400.07196,"EndY":225.3928}]},{"StartTime":86551.0,"Objects":[{"StartTime":86551.0,"EndTime":86551.0,"StartX":497.0,"StartY":283.0,"EndX":497.0,"EndY":283.0}]},{"StartTime":86666.0,"Objects":[{"StartTime":86666.0,"EndTime":86781.0,"StartX":497.0,"StartY":283.0,"EndX":418.634644,"EndY":323.512756}]},{"StartTime":86897.0,"Objects":[{"StartTime":86897.0,"EndTime":87127.0,"StartX":318.0,"StartY":374.0,"EndX":326.852631,"EndY":187.209656}]},{"StartTime":87243.0,"Objects":[{"StartTime":87243.0,"EndTime":87243.0,"StartX":238.0,"StartY":257.0,"EndX":238.0,"EndY":257.0}]},{"StartTime":87358.0,"Objects":[{"StartTime":87358.0,"EndTime":87588.0,"StartX":238.0,"StartY":257.0,"EndX":246.852631,"EndY":70.2096558}]},{"StartTime":87704.0,"Objects":[{"StartTime":87704.0,"EndTime":87704.0,"StartX":158.0,"StartY":140.0,"EndX":158.0,"EndY":140.0}]},{"StartTime":87820.0,"Objects":[{"StartTime":87820.0,"EndTime":87935.0,"StartX":158.0,"StartY":140.0,"EndX":162.405472,"EndY":46.60385}]},{"StartTime":88051.0,"Objects":[{"StartTime":88051.0,"EndTime":88166.0,"StartX":75.0,"StartY":118.0,"EndX":70.55266,"EndY":211.394165}]},{"StartTime":88281.0,"Objects":[{"StartTime":88281.0,"EndTime":88281.0,"StartX":113.0,"StartY":345.0,"EndX":113.0,"EndY":345.0}]},{"StartTime":88339.0,"Objects":[{"StartTime":88339.0,"EndTime":88339.0,"StartX":130.0,"StartY":335.0,"EndX":130.0,"EndY":335.0}]},{"StartTime":88397.0,"Objects":[{"StartTime":88397.0,"EndTime":88397.0,"StartX":150.0,"StartY":333.0,"EndX":150.0,"EndY":333.0}]},{"StartTime":88454.0,"Objects":[{"StartTime":88454.0,"EndTime":88454.0,"StartX":169.0,"StartY":339.0,"EndX":169.0,"EndY":339.0}]},{"StartTime":88512.0,"Objects":[{"StartTime":88512.0,"EndTime":88512.0,"StartX":188.0,"StartY":347.0,"EndX":188.0,"EndY":347.0}]},{"StartTime":88570.0,"Objects":[{"StartTime":88570.0,"EndTime":88570.0,"StartX":230.0,"StartY":365.0,"EndX":230.0,"EndY":365.0}]},{"StartTime":88628.0,"Objects":[{"StartTime":88628.0,"EndTime":88628.0,"StartX":276.0,"StartY":366.0,"EndX":276.0,"EndY":366.0}]},{"StartTime":88686.0,"Objects":[{"StartTime":88686.0,"EndTime":88686.0,"StartX":320.0,"StartY":349.0,"EndX":320.0,"EndY":349.0}]},{"StartTime":88743.0,"Objects":[{"StartTime":88743.0,"EndTime":88973.0,"StartX":353.0,"StartY":317.0,"EndX":361.241974,"EndY":130.181717}]},{"StartTime":89089.0,"Objects":[{"StartTime":89089.0,"EndTime":89089.0,"StartX":265.0,"StartY":71.0,"EndX":265.0,"EndY":71.0}]},{"StartTime":89204.0,"Objects":[{"StartTime":89204.0,"EndTime":89434.0,"StartX":265.0,"StartY":71.0,"EndX":243.2195,"EndY":225.605286}]},{"StartTime":89551.0,"Objects":[{"StartTime":89551.0,"EndTime":89551.0,"StartX":356.0,"StartY":237.0,"EndX":356.0,"EndY":237.0}]},{"StartTime":89666.0,"Objects":[{"StartTime":89666.0,"EndTime":89781.0,"StartX":356.0,"StartY":237.0,"EndX":449.1545,"EndY":228.969437}]},{"StartTime":89897.0,"Objects":[{"StartTime":89897.0,"EndTime":90070.0,"StartX":373.0,"StartY":145.0,"EndX":233.266891,"EndY":157.03}]},{"StartTime":90127.0,"Objects":[{"StartTime":90127.0,"EndTime":90242.0,"StartX":189.0,"StartY":190.0,"EndX":282.065216,"EndY":180.993683}]},{"StartTime":90358.0,"Objects":[{"StartTime":90358.0,"EndTime":90473.0,"StartX":147.0,"StartY":85.0,"EndX":53.8074875,"EndY":92.57663}]},{"StartTime":90589.0,"Objects":[{"StartTime":90589.0,"EndTime":90819.0,"StartX":129.0,"StartY":242.0,"EndX":265.9673,"EndY":193.421722}]},{"StartTime":90935.0,"Objects":[{"StartTime":90935.0,"EndTime":91165.0,"StartX":116.0,"StartY":165.0,"EndX":88.36763,"EndY":307.56366}]},{"StartTime":91281.0,"Objects":[{"StartTime":91281.0,"EndTime":91396.0,"StartX":189.0,"StartY":190.0,"EndX":166.779434,"EndY":104.921692}]},{"StartTime":91512.0,"Objects":[{"StartTime":91512.0,"EndTime":91627.0,"StartX":81.0,"StartY":31.0,"EndX":174.155975,"EndY":22.9865837}]},{"StartTime":91743.0,"Objects":[{"StartTime":91743.0,"EndTime":91858.0,"StartX":350.0,"StartY":92.0,"EndX":256.844025,"EndY":100.01342}]},{"StartTime":91974.0,"Objects":[{"StartTime":91974.0,"EndTime":92089.0,"StartX":95.0,"StartY":198.0,"EndX":188.155975,"EndY":189.986588}]},{"StartTime":92204.0,"Objects":[{"StartTime":92204.0,"EndTime":92204.0,"StartX":377.0,"StartY":205.0,"EndX":377.0,"EndY":205.0}]},{"StartTime":92262.0,"Objects":[{"StartTime":92262.0,"EndTime":92262.0,"StartX":365.0,"StartY":240.0,"EndX":365.0,"EndY":240.0}]},{"StartTime":92320.0,"Objects":[{"StartTime":92320.0,"EndTime":92320.0,"StartX":355.0,"StartY":276.0,"EndX":355.0,"EndY":276.0}]},{"StartTime":92377.0,"Objects":[{"StartTime":92377.0,"EndTime":92377.0,"StartX":345.0,"StartY":311.0,"EndX":345.0,"EndY":311.0}]},{"StartTime":92435.0,"Objects":[{"StartTime":92435.0,"EndTime":92665.0,"StartX":334.0,"StartY":347.0,"EndX":291.821869,"EndY":211.143036}]},{"StartTime":92781.0,"Objects":[{"StartTime":92781.0,"EndTime":92781.0,"StartX":392.0,"StartY":153.0,"EndX":392.0,"EndY":153.0}]},{"StartTime":92897.0,"Objects":[{"StartTime":92897.0,"EndTime":93127.0,"StartX":392.0,"StartY":153.0,"EndX":350.227783,"EndY":17.0176716}]},{"StartTime":93243.0,"Objects":[{"StartTime":93243.0,"EndTime":93243.0,"StartX":256.0,"StartY":79.0,"EndX":256.0,"EndY":79.0}]},{"StartTime":93358.0,"Objects":[{"StartTime":93358.0,"EndTime":93473.0,"StartX":256.0,"StartY":79.0,"EndX":261.632,"EndY":172.330215}]},{"StartTime":93589.0,"Objects":[{"StartTime":93589.0,"EndTime":93762.0,"StartX":152.0,"StartY":304.0,"EndX":143.41185,"EndY":164.0132}]},{"StartTime":93820.0,"Objects":[{"StartTime":93820.0,"EndTime":93935.0,"StartX":154.0,"StartY":109.0,"EndX":77.33286,"EndY":155.051788}]},{"StartTime":94051.0,"Objects":[{"StartTime":94051.0,"EndTime":94166.0,"StartX":0.0,"StartY":62.0,"EndX":75.5017853,"EndY":14.9673195}]},{"StartTime":94281.0,"Objects":[{"StartTime":94281.0,"EndTime":94511.0,"StartX":256.0,"StartY":79.0,"EndX":267.039856,"EndY":265.673828}]},{"StartTime":94627.0,"Objects":[{"StartTime":94627.0,"EndTime":94627.0,"StartX":198.0,"StartY":354.0,"EndX":198.0,"EndY":354.0}]},{"StartTime":94743.0,"Objects":[{"StartTime":94743.0,"EndTime":94973.0,"StartX":198.0,"StartY":354.0,"EndX":360.646973,"EndY":327.537933}]},{"StartTime":95089.0,"Objects":[{"StartTime":95089.0,"EndTime":95089.0,"StartX":407.0,"StartY":224.0,"EndX":407.0,"EndY":224.0}]},{"StartTime":95204.0,"Objects":[{"StartTime":95204.0,"EndTime":95377.0,"StartX":407.0,"StartY":224.0,"EndX":267.210632,"EndY":212.64212}]},{"StartTime":95435.0,"Objects":[{"StartTime":95435.0,"EndTime":95550.0,"StartX":218.0,"StartY":184.0,"EndX":311.1996,"EndY":191.489258}]},{"StartTime":95666.0,"Objects":[{"StartTime":95666.0,"EndTime":95781.0,"StartX":401.0,"StartY":124.0,"EndX":390.806671,"EndY":37.31835}]},{"StartTime":95897.0,"Objects":[{"StartTime":95897.0,"EndTime":96012.0,"StartX":300.0,"StartY":104.0,"EndX":310.698975,"EndY":190.649216}]},{"StartTime":96127.0,"Objects":[{"StartTime":96127.0,"EndTime":96357.0,"StartX":420.0,"StartY":317.0,"EndX":273.125153,"EndY":357.523529}]},{"StartTime":96474.0,"Objects":[{"StartTime":96474.0,"EndTime":96474.0,"StartX":159.0,"StartY":359.0,"EndX":159.0,"EndY":359.0}]},{"StartTime":96589.0,"Objects":[{"StartTime":96589.0,"EndTime":96819.0,"StartX":159.0,"StartY":359.0,"EndX":12.0078545,"EndY":317.029419}]},{"StartTime":96935.0,"Objects":[{"StartTime":96935.0,"EndTime":96935.0,"StartX":78.0,"StartY":186.0,"EndX":78.0,"EndY":186.0}]},{"StartTime":97051.0,"Objects":[{"StartTime":97051.0,"EndTime":97281.0,"StartX":174.0,"StartY":245.0,"EndX":194.12471,"EndY":59.08606}]},{"StartTime":97397.0,"Objects":[{"StartTime":97397.0,"EndTime":97397.0,"StartX":300.0,"StartY":104.0,"EndX":300.0,"EndY":104.0}]},{"StartTime":97512.0,"Objects":[{"StartTime":97512.0,"EndTime":97627.0,"StartX":300.0,"StartY":104.0,"EndX":288.732025,"EndY":191.6934}]},{"StartTime":97743.0,"Objects":[{"StartTime":97743.0,"EndTime":97858.0,"StartX":185.0,"StartY":332.0,"EndX":172.889053,"EndY":244.604034}]},{"StartTime":97974.0,"Objects":[{"StartTime":97974.0,"EndTime":98204.0,"StartX":450.0,"StartY":270.0,"EndX":263.309357,"EndY":280.751831}]},{"StartTime":98320.0,"Objects":[{"StartTime":98320.0,"EndTime":98320.0,"StartX":218.0,"StartY":184.0,"EndX":218.0,"EndY":184.0}]},{"StartTime":98435.0,"Objects":[{"StartTime":98435.0,"EndTime":98665.0,"StartX":218.0,"StartY":184.0,"EndX":404.690643,"EndY":173.248184}]},{"StartTime":98781.0,"Objects":[{"StartTime":98781.0,"EndTime":98781.0,"StartX":509.0,"StartY":216.0,"EndX":509.0,"EndY":216.0}]},{"StartTime":98897.0,"Objects":[{"StartTime":98897.0,"EndTime":99127.0,"StartX":509.0,"StartY":216.0,"EndX":511.477661,"EndY":33.17072}]},{"StartTime":99243.0,"Objects":[{"StartTime":99243.0,"EndTime":99243.0,"StartX":402.0,"StartY":4.0,"EndX":402.0,"EndY":4.0}]},{"StartTime":99358.0,"Objects":[{"StartTime":99358.0,"EndTime":99473.0,"StartX":207.0,"StartY":91.0,"EndX":217.103531,"EndY":183.952515}]},{"StartTime":99589.0,"Objects":[{"StartTime":99589.0,"EndTime":99704.0,"StartX":364.0,"StartY":222.0,"EndX":353.017426,"EndY":129.147247}]},{"StartTime":99820.0,"Objects":[{"StartTime":99820.0,"EndTime":99820.0,"StartX":300.0,"StartY":359.0,"EndX":300.0,"EndY":359.0}]},{"StartTime":99935.0,"Objects":[{"StartTime":99935.0,"EndTime":99935.0,"StartX":391.0,"StartY":372.0,"EndX":391.0,"EndY":372.0}]},{"StartTime":100051.0,"Objects":[{"StartTime":100051.0,"EndTime":100051.0,"StartX":432.0,"StartY":287.0,"EndX":432.0,"EndY":287.0}]},{"StartTime":100166.0,"Objects":[{"StartTime":100166.0,"EndTime":100166.0,"StartX":364.0,"StartY":222.0,"EndX":364.0,"EndY":222.0}]},{"StartTime":100281.0,"Objects":[{"StartTime":100281.0,"EndTime":100281.0,"StartX":282.0,"StartY":268.0,"EndX":282.0,"EndY":268.0}]},{"StartTime":100397.0,"Objects":[{"StartTime":100397.0,"EndTime":100397.0,"StartX":200.0,"StartY":314.0,"EndX":200.0,"EndY":314.0}]},{"StartTime":100512.0,"Objects":[{"StartTime":100512.0,"EndTime":100512.0,"StartX":132.0,"StartY":249.0,"EndX":132.0,"EndY":249.0}]},{"StartTime":100628.0,"Objects":[{"StartTime":100628.0,"EndTime":100628.0,"StartX":173.0,"StartY":164.0,"EndX":173.0,"EndY":164.0}]},{"StartTime":100743.0,"Objects":[{"StartTime":100743.0,"EndTime":100858.0,"StartX":264.0,"StartY":177.0,"EndX":249.782654,"EndY":84.58724}]},{"StartTime":100974.0,"Objects":[{"StartTime":100974.0,"EndTime":101089.0,"StartX":158.0,"StartY":71.0,"EndX":172.888229,"EndY":163.307037}]},{"StartTime":101204.0,"Objects":[{"StartTime":101204.0,"EndTime":101319.0,"StartX":146.0,"StartY":341.0,"EndX":131.782654,"EndY":248.58725}]},{"StartTime":101435.0,"Objects":[{"StartTime":101435.0,"EndTime":101550.0,"StartX":40.0,"StartY":235.0,"EndX":54.0663261,"EndY":327.435852}]},{"StartTime":101666.0,"Objects":[{"StartTime":101666.0,"EndTime":101781.0,"StartX":146.0,"StartY":341.0,"EndX":229.125732,"EndY":335.997467}]},{"StartTime":101897.0,"Objects":[{"StartTime":101897.0,"EndTime":102012.0,"StartX":321.0,"StartY":224.0,"EndX":237.874268,"EndY":229.002533}]},{"StartTime":102127.0,"Objects":[{"StartTime":102127.0,"EndTime":102127.0,"StartX":325.0,"StartY":317.0,"EndX":325.0,"EndY":317.0}]},{"StartTime":102243.0,"Objects":[{"StartTime":102243.0,"EndTime":102243.0,"StartX":353.0,"StartY":129.0,"EndX":353.0,"EndY":129.0}]},{"StartTime":102300.0,"Objects":[{"StartTime":102300.0,"EndTime":102300.0,"StartX":345.0,"StartY":116.0,"EndX":345.0,"EndY":116.0}]},{"StartTime":102358.0,"Objects":[{"StartTime":102358.0,"EndTime":102358.0,"StartX":351.0,"StartY":104.0,"EndX":351.0,"EndY":104.0}]},{"StartTime":102416.0,"Objects":[{"StartTime":102416.0,"EndTime":102416.0,"StartX":340.0,"StartY":93.0,"EndX":340.0,"EndY":93.0}]},{"StartTime":102474.0,"Objects":[{"StartTime":102474.0,"EndTime":102474.0,"StartX":342.0,"StartY":79.0,"EndX":342.0,"EndY":79.0}]},{"StartTime":102531.0,"Objects":[{"StartTime":102531.0,"EndTime":102531.0,"StartX":333.0,"StartY":68.0,"EndX":333.0,"EndY":68.0}]},{"StartTime":102589.0,"Objects":[{"StartTime":102589.0,"EndTime":102589.0,"StartX":322.0,"StartY":58.0,"EndX":322.0,"EndY":58.0}]},{"StartTime":102646.0,"Objects":[{"StartTime":102646.0,"EndTime":102646.0,"StartX":360.0,"StartY":78.0,"EndX":360.0,"EndY":78.0}]},{"StartTime":102704.0,"Objects":[{"StartTime":102704.0,"EndTime":102704.0,"StartX":404.0,"StartY":81.0,"EndX":404.0,"EndY":81.0}]},{"StartTime":102762.0,"Objects":[{"StartTime":102762.0,"EndTime":102762.0,"StartX":446.0,"StartY":65.0,"EndX":446.0,"EndY":65.0}]},{"StartTime":102819.0,"Objects":[{"StartTime":102819.0,"EndTime":102819.0,"StartX":477.0,"StartY":34.0,"EndX":477.0,"EndY":34.0}]},{"StartTime":102935.0,"Objects":[{"StartTime":102935.0,"EndTime":102992.0,"StartX":232.0,"StartY":124.0,"EndX":186.691376,"EndY":112.480858}]},{"StartTime":103051.0,"Objects":[{"StartTime":103051.0,"EndTime":103051.0,"StartX":256.0,"StartY":114.0,"EndX":256.0,"EndY":114.0}]},{"StartTime":103108.0,"Objects":[{"StartTime":103108.0,"EndTime":103108.0,"StartX":249.0,"StartY":146.0,"EndX":249.0,"EndY":146.0}]},{"StartTime":103166.0,"Objects":[{"StartTime":103166.0,"EndTime":103166.0,"StartX":271.0,"StartY":173.0,"EndX":271.0,"EndY":173.0}]},{"StartTime":103224.0,"Objects":[{"StartTime":103224.0,"EndTime":103224.0,"StartX":255.0,"StartY":200.0,"EndX":255.0,"EndY":200.0}]},{"StartTime":103281.0,"Objects":[{"StartTime":103281.0,"EndTime":103281.0,"StartX":271.0,"StartY":229.0,"EndX":271.0,"EndY":229.0}]},{"StartTime":103339.0,"Objects":[{"StartTime":103339.0,"EndTime":103339.0,"StartX":294.0,"StartY":258.0,"EndX":294.0,"EndY":258.0}]},{"StartTime":103397.0,"Objects":[{"StartTime":103397.0,"EndTime":103397.0,"StartX":277.0,"StartY":283.0,"EndX":277.0,"EndY":283.0}]},{"StartTime":103454.0,"Objects":[{"StartTime":103454.0,"EndTime":103454.0,"StartX":291.0,"StartY":312.0,"EndX":291.0,"EndY":312.0}]},{"StartTime":103512.0,"Objects":[{"StartTime":103512.0,"EndTime":103742.0,"StartX":285.0,"StartY":344.0,"EndX":468.7167,"EndY":315.6869}]},{"StartTime":103858.0,"Objects":[{"StartTime":103858.0,"EndTime":103858.0,"StartX":495.0,"StartY":206.0,"EndX":495.0,"EndY":206.0}]},{"StartTime":103974.0,"Objects":[{"StartTime":103974.0,"EndTime":104204.0,"StartX":495.0,"StartY":206.0,"EndX":364.1515,"EndY":126.091278}]},{"StartTime":104320.0,"Objects":[{"StartTime":104320.0,"EndTime":104320.0,"StartX":272.0,"StartY":191.0,"EndX":272.0,"EndY":191.0}]},{"StartTime":104435.0,"Objects":[{"StartTime":104435.0,"EndTime":104550.0,"StartX":272.0,"StartY":191.0,"EndX":277.742981,"EndY":97.6765442}]},{"StartTime":104666.0,"Objects":[{"StartTime":104666.0,"EndTime":104896.0,"StartX":362.0,"StartY":23.0,"EndX":195.2012,"EndY":67.52858}]},{"StartTime":105012.0,"Objects":[{"StartTime":105012.0,"EndTime":105012.0,"StartX":108.0,"StartY":121.0,"EndX":108.0,"EndY":121.0}]},{"StartTime":105127.0,"Objects":[{"StartTime":105127.0,"EndTime":105127.0,"StartX":97.0,"StartY":10.0,"EndX":97.0,"EndY":10.0}]},{"StartTime":105243.0,"Objects":[{"StartTime":105243.0,"EndTime":105243.0,"StartX":195.0,"StartY":67.0,"EndX":195.0,"EndY":67.0}]},{"StartTime":105301.0,"Objects":[{"StartTime":105301.0,"EndTime":105301.0,"StartX":195.0,"StartY":67.0,"EndX":195.0,"EndY":67.0}]},{"StartTime":105358.0,"Objects":[{"StartTime":105358.0,"EndTime":105588.0,"StartX":195.0,"StartY":67.0,"EndX":141.92659,"EndY":219.274048}]},{"StartTime":105704.0,"Objects":[{"StartTime":105704.0,"EndTime":105704.0,"StartX":33.0,"StartY":192.0,"EndX":33.0,"EndY":192.0}]},{"StartTime":105820.0,"Objects":[{"StartTime":105820.0,"EndTime":105935.0,"StartX":33.0,"StartY":192.0,"EndX":40.4561768,"EndY":285.20224}]},{"StartTime":106051.0,"Objects":[{"StartTime":106051.0,"EndTime":106166.0,"StartX":149.0,"StartY":312.0,"EndX":141.071213,"EndY":218.836792}]},{"StartTime":106281.0,"Objects":[{"StartTime":106281.0,"EndTime":106396.0,"StartX":239.0,"StartY":165.0,"EndX":279.132324,"EndY":242.779724}]},{"StartTime":106512.0,"Objects":[{"StartTime":106512.0,"EndTime":106627.0,"StartX":255.0,"StartY":354.0,"EndX":347.996826,"EndY":344.312836}]},{"StartTime":106743.0,"Objects":[{"StartTime":106743.0,"EndTime":106916.0,"StartX":460.0,"StartY":337.0,"EndX":384.705444,"EndY":225.777954}]},{"StartTime":106974.0,"Objects":[{"StartTime":106974.0,"EndTime":107089.0,"StartX":385.0,"StartY":226.0,"EndX":477.996826,"EndY":216.312836}]},{"StartTime":107204.0,"Objects":[{"StartTime":107204.0,"EndTime":107434.0,"StartX":391.0,"StartY":72.0,"EndX":204.95784,"EndY":90.90268}]},{"StartTime":107551.0,"Objects":[{"StartTime":107551.0,"EndTime":107551.0,"StartX":126.0,"StartY":7.0,"EndX":126.0,"EndY":7.0}]},{"StartTime":107666.0,"Objects":[{"StartTime":107666.0,"EndTime":107896.0,"StartX":126.0,"StartY":7.0,"EndX":121.048843,"EndY":173.544022}]},{"StartTime":108012.0,"Objects":[{"StartTime":108012.0,"EndTime":108012.0,"StartX":233.0,"StartY":165.0,"EndX":233.0,"EndY":165.0}]},{"StartTime":108127.0,"Objects":[{"StartTime":108127.0,"EndTime":108242.0,"StartX":233.0,"StartY":165.0,"EndX":220.6427,"EndY":257.6798}]},{"StartTime":108358.0,"Objects":[{"StartTime":108358.0,"EndTime":108588.0,"StartX":145.0,"StartY":342.0,"EndX":309.147552,"EndY":297.85675}]},{"StartTime":108704.0,"Objects":[{"StartTime":108704.0,"EndTime":108704.0,"StartX":414.0,"StartY":258.0,"EndX":414.0,"EndY":258.0}]},{"StartTime":108820.0,"Objects":[{"StartTime":108820.0,"EndTime":108820.0,"StartX":394.0,"StartY":369.0,"EndX":394.0,"EndY":369.0}]},{"StartTime":108935.0,"Objects":[{"StartTime":108935.0,"EndTime":108935.0,"StartX":309.0,"StartY":298.0,"EndX":309.0,"EndY":298.0}]},{"StartTime":108993.0,"Objects":[{"StartTime":108993.0,"EndTime":108993.0,"StartX":309.0,"StartY":298.0,"EndX":309.0,"EndY":298.0}]},{"StartTime":109051.0,"Objects":[{"StartTime":109051.0,"EndTime":109281.0,"StartX":309.0,"StartY":298.0,"EndX":301.334656,"EndY":111.157166}]},{"StartTime":109397.0,"Objects":[{"StartTime":109397.0,"EndTime":109397.0,"StartX":396.0,"StartY":51.0,"EndX":396.0,"EndY":51.0}]},{"StartTime":109512.0,"Objects":[{"StartTime":109512.0,"EndTime":109627.0,"StartX":396.0,"StartY":51.0,"EndX":423.202057,"EndY":133.881226}]},{"StartTime":109743.0,"Objects":[{"StartTime":109743.0,"EndTime":109858.0,"StartX":385.0,"StartY":240.0,"EndX":478.08667,"EndY":231.218231}]},{"StartTime":109974.0,"Objects":[{"StartTime":109974.0,"EndTime":110089.0,"StartX":445.0,"StartY":339.0,"EndX":351.91333,"EndY":347.781769}]},{"StartTime":110204.0,"Objects":[{"StartTime":110204.0,"EndTime":110319.0,"StartX":264.0,"StartY":278.0,"EndX":259.688171,"EndY":188.682465}]},{"StartTime":110435.0,"Objects":[{"StartTime":110435.0,"EndTime":110608.0,"StartX":150.0,"StartY":164.0,"EndX":146.468857,"EndY":297.5795}]},{"StartTime":110666.0,"Objects":[{"StartTime":110666.0,"EndTime":110781.0,"StartX":147.0,"StartY":298.0,"EndX":57.94221,"EndY":300.452057}]},{"StartTime":110897.0,"Objects":[{"StartTime":110897.0,"EndTime":111127.0,"StartX":214.0,"StartY":357.0,"EndX":400.130432,"EndY":338.987366}]},{"StartTime":111243.0,"Objects":[{"StartTime":111243.0,"EndTime":111243.0,"StartX":451.0,"StartY":239.0,"EndX":451.0,"EndY":239.0}]},{"StartTime":111358.0,"Objects":[{"StartTime":111358.0,"EndTime":111588.0,"StartX":451.0,"StartY":239.0,"EndX":264.767944,"EndY":255.930176}]},{"StartTime":111704.0,"Objects":[{"StartTime":111704.0,"EndTime":111704.0,"StartX":314.0,"StartY":155.0,"EndX":314.0,"EndY":155.0}]},{"StartTime":111820.0,"Objects":[{"StartTime":111820.0,"EndTime":111935.0,"StartX":314.0,"StartY":155.0,"EndX":407.065216,"EndY":145.993683}]},{"StartTime":112051.0,"Objects":[{"StartTime":112051.0,"EndTime":112281.0,"StartX":486.0,"StartY":65.0,"EndX":450.23877,"EndY":238.696548}]},{"StartTime":112397.0,"Objects":[{"StartTime":112397.0,"EndTime":112397.0,"StartX":499.0,"StartY":340.0,"EndX":499.0,"EndY":340.0}]},{"StartTime":112512.0,"Objects":[{"StartTime":112512.0,"EndTime":112512.0,"StartX":390.0,"StartY":312.0,"EndX":390.0,"EndY":312.0}]},{"StartTime":112627.0,"Objects":[{"StartTime":112627.0,"EndTime":112627.0,"StartX":288.0,"StartY":358.0,"EndX":288.0,"EndY":358.0}]},{"StartTime":112685.0,"Objects":[{"StartTime":112685.0,"EndTime":112685.0,"StartX":288.0,"StartY":358.0,"EndX":288.0,"EndY":358.0}]},{"StartTime":112743.0,"Objects":[{"StartTime":112743.0,"EndTime":112973.0,"StartX":288.0,"StartY":358.0,"EndX":101.516357,"EndY":344.1129}]},{"StartTime":113089.0,"Objects":[{"StartTime":113089.0,"EndTime":113089.0,"StartX":30.0,"StartY":256.0,"EndX":30.0,"EndY":256.0}]},{"StartTime":113204.0,"Objects":[{"StartTime":113204.0,"EndTime":113434.0,"StartX":30.0,"StartY":256.0,"EndX":216.483643,"EndY":269.8871}]},{"StartTime":113551.0,"Objects":[{"StartTime":113551.0,"EndTime":113551.0,"StartX":308.0,"StartY":202.0,"EndX":308.0,"EndY":202.0}]},{"StartTime":113666.0,"Objects":[{"StartTime":113666.0,"EndTime":113896.0,"StartX":308.0,"StartY":202.0,"EndX":257.027771,"EndY":43.50958}]},{"StartTime":114012.0,"Objects":[{"StartTime":114012.0,"EndTime":114012.0,"StartX":211.0,"StartY":146.0,"EndX":211.0,"EndY":146.0}]},{"StartTime":114127.0,"Objects":[{"StartTime":114127.0,"EndTime":114300.0,"StartX":211.0,"StartY":146.0,"EndX":219.4335,"EndY":285.996216}]},{"StartTime":114358.0,"Objects":[{"StartTime":114358.0,"EndTime":114473.0,"StartX":219.0,"StartY":285.0,"EndX":306.556854,"EndY":285.353943}]},{"StartTime":114589.0,"Objects":[{"StartTime":114589.0,"EndTime":115281.0,"StartX":166.0,"StartY":367.0,"EndX":351.058228,"EndY":20.7379055}]},{"StartTime":115512.0,"Objects":[{"StartTime":115512.0,"EndTime":115512.0,"StartX":292.0,"StartY":98.0,"EndX":292.0,"EndY":98.0}]},{"StartTime":116435.0,"Objects":[{"StartTime":116435.0,"EndTime":117127.0,"StartX":346.0,"StartY":367.0,"EndX":160.941772,"EndY":20.7379055}]},{"StartTime":117358.0,"Objects":[{"StartTime":117358.0,"EndTime":117358.0,"StartX":219.0,"StartY":98.0,"EndX":219.0,"EndY":98.0}]},{"StartTime":117589.0,"Objects":[{"StartTime":117589.0,"EndTime":117589.0,"StartX":292.0,"StartY":285.0,"EndX":292.0,"EndY":285.0}]},{"StartTime":117820.0,"Objects":[{"StartTime":117820.0,"EndTime":117820.0,"StartX":438.0,"StartY":147.0,"EndX":438.0,"EndY":147.0}]},{"StartTime":118051.0,"Objects":[{"StartTime":118051.0,"EndTime":118166.0,"StartX":219.0,"StartY":98.0,"EndX":125.6332,"EndY":93.01093}]},{"StartTime":118281.0,"Objects":[{"StartTime":118281.0,"EndTime":118396.0,"StartX":10.0,"StartY":235.0,"EndX":-0.844006062,"EndY":147.620377}]},{"StartTime":118512.0,"Objects":[{"StartTime":118512.0,"EndTime":118627.0,"StartX":154.0,"StartY":279.0,"EndX":164.4093,"EndY":366.252167}]},{"StartTime":118743.0,"Objects":[{"StartTime":118743.0,"EndTime":118743.0,"StartX":3.0,"StartY":339.0,"EndX":3.0,"EndY":339.0}]},{"StartTime":118858.0,"Objects":[{"StartTime":118858.0,"EndTime":119088.0,"StartX":219.0,"StartY":215.0,"EndX":239.6507,"EndY":29.1437378}]},{"StartTime":119204.0,"Objects":[{"StartTime":119204.0,"EndTime":119204.0,"StartX":114.0,"StartY":85.0,"EndX":114.0,"EndY":85.0}]},{"StartTime":119262.0,"Objects":[{"StartTime":119262.0,"EndTime":119262.0,"StartX":145.0,"StartY":112.0,"EndX":145.0,"EndY":112.0}]},{"StartTime":119319.0,"Objects":[{"StartTime":119319.0,"EndTime":119319.0,"StartX":151.0,"StartY":155.0,"EndX":151.0,"EndY":155.0}]},{"StartTime":119377.0,"Objects":[{"StartTime":119377.0,"EndTime":119377.0,"StartX":134.0,"StartY":195.0,"EndX":134.0,"EndY":195.0}]},{"StartTime":119434.0,"Objects":[{"StartTime":119434.0,"EndTime":119434.0,"StartX":102.0,"StartY":223.0,"EndX":102.0,"EndY":223.0}]},{"StartTime":119493.0,"Objects":[{"StartTime":119493.0,"EndTime":119493.0,"StartX":84.0,"StartY":265.0,"EndX":84.0,"EndY":265.0}]},{"StartTime":119551.0,"Objects":[{"StartTime":119551.0,"EndTime":119551.0,"StartX":80.0,"StartY":305.0,"EndX":80.0,"EndY":305.0}]},{"StartTime":119608.0,"Objects":[{"StartTime":119608.0,"EndTime":119608.0,"StartX":101.0,"StartY":342.0,"EndX":101.0,"EndY":342.0}]},{"StartTime":119666.0,"Objects":[{"StartTime":119666.0,"EndTime":119666.0,"StartX":135.0,"StartY":372.0,"EndX":135.0,"EndY":372.0}]},{"StartTime":119723.0,"Objects":[{"StartTime":119723.0,"EndTime":119723.0,"StartX":190.0,"StartY":375.0,"EndX":190.0,"EndY":375.0}]},{"StartTime":119781.0,"Objects":[{"StartTime":119781.0,"EndTime":119781.0,"StartX":230.0,"StartY":335.0,"EndX":230.0,"EndY":335.0}]},{"StartTime":119839.0,"Objects":[{"StartTime":119839.0,"EndTime":119839.0,"StartX":280.0,"StartY":309.0,"EndX":280.0,"EndY":309.0}]},{"StartTime":119897.0,"Objects":[{"StartTime":119897.0,"EndTime":119897.0,"StartX":336.0,"StartY":310.0,"EndX":336.0,"EndY":310.0}]},{"StartTime":119954.0,"Objects":[{"StartTime":119954.0,"EndTime":119954.0,"StartX":377.0,"StartY":346.0,"EndX":377.0,"EndY":346.0}]},{"StartTime":120012.0,"Objects":[{"StartTime":120012.0,"EndTime":120012.0,"StartX":425.0,"StartY":374.0,"EndX":425.0,"EndY":374.0}]},{"StartTime":120070.0,"Objects":[{"StartTime":120070.0,"EndTime":120070.0,"StartX":475.0,"StartY":348.0,"EndX":475.0,"EndY":348.0}]},{"StartTime":120127.0,"Objects":[{"StartTime":120127.0,"EndTime":120357.0,"StartX":495.0,"StartY":297.0,"EndX":512.6442,"EndY":110.837456}]},{"StartTime":120474.0,"Objects":[{"StartTime":120474.0,"EndTime":120704.0,"StartX":351.0,"StartY":20.0,"EndX":333.0354,"EndY":206.128}]},{"StartTime":120820.0,"Objects":[{"StartTime":120820.0,"EndTime":120935.0,"StartX":415.0,"StartY":362.0,"EndX":503.085052,"EndY":362.671082}]},{"StartTime":121051.0,"Objects":[{"StartTime":121051.0,"EndTime":121051.0,"StartX":407.0,"StartY":268.0,"EndX":407.0,"EndY":268.0}]},{"StartTime":121166.0,"Objects":[{"StartTime":121166.0,"EndTime":121396.0,"StartX":332.0,"StartY":321.0,"EndX":145.450241,"EndY":308.0313}]},{"StartTime":121512.0,"Objects":[{"StartTime":121512.0,"EndTime":121627.0,"StartX":213.0,"StartY":192.0,"EndX":197.601456,"EndY":105.648872}]},{"StartTime":121743.0,"Objects":[{"StartTime":121743.0,"EndTime":121858.0,"StartX":47.0,"StartY":283.0,"EndX":62.3985329,"EndY":369.351135}]},{"StartTime":121974.0,"Objects":[{"StartTime":121974.0,"EndTime":122204.0,"StartX":213.0,"StartY":192.0,"EndX":26.3879547,"EndY":179.96051}]},{"StartTime":122320.0,"Objects":[{"StartTime":122320.0,"EndTime":122550.0,"StartX":146.0,"StartY":308.0,"EndX":332.544922,"EndY":321.0381}]},{"StartTime":122666.0,"Objects":[{"StartTime":122666.0,"EndTime":122781.0,"StartX":226.0,"StartY":107.0,"EndX":213.894272,"EndY":190.829559}]},{"StartTime":122897.0,"Objects":[{"StartTime":122897.0,"EndTime":122897.0,"StartX":83.0,"StartY":365.0,"EndX":83.0,"EndY":365.0}]},{"StartTime":123012.0,"Objects":[{"StartTime":123012.0,"EndTime":123242.0,"StartX":31.0,"StartY":289.0,"EndX":14.0712194,"EndY":102.76796}]},{"StartTime":123358.0,"Objects":[{"StartTime":123358.0,"EndTime":123473.0,"StartX":214.0,"StartY":192.0,"EndX":128.038635,"EndY":208.01593}]},{"StartTime":123589.0,"Objects":[{"StartTime":123589.0,"EndTime":123704.0,"StartX":303.0,"StartY":114.0,"EndX":388.1753,"EndY":97.07513}]},{"StartTime":123820.0,"Objects":[{"StartTime":123820.0,"EndTime":124050.0,"StartX":498.0,"StartY":293.0,"EndX":311.364166,"EndY":281.335266}]},{"StartTime":124166.0,"Objects":[{"StartTime":124166.0,"EndTime":124396.0,"StartX":214.0,"StartY":192.0,"EndX":400.635834,"EndY":203.664734}]},{"StartTime":124512.0,"Objects":[{"StartTime":124512.0,"EndTime":124627.0,"StartX":278.0,"StartY":344.0,"EndX":241.45549,"EndY":265.492584}]},{"StartTime":124743.0,"Objects":[{"StartTime":124743.0,"EndTime":124743.0,"StartX":408.0,"StartY":48.0,"EndX":408.0,"EndY":48.0}]},{"StartTime":124858.0,"Objects":[{"StartTime":124858.0,"EndTime":125088.0,"StartX":327.0,"StartY":94.0,"EndX":311.058258,"EndY":280.319244}]},{"StartTime":125204.0,"Objects":[{"StartTime":125204.0,"EndTime":125319.0,"StartX":214.0,"StartY":192.0,"EndX":125.519653,"EndY":181.510071}]},{"StartTime":125435.0,"Objects":[{"StartTime":125435.0,"EndTime":125550.0,"StartX":60.0,"StartY":84.0,"EndX":148.480347,"EndY":94.48994}]},{"StartTime":125666.0,"Objects":[{"StartTime":125666.0,"EndTime":125666.0,"StartX":110.0,"StartY":374.0,"EndX":110.0,"EndY":374.0}]},{"StartTime":125781.0,"Objects":[{"StartTime":125781.0,"EndTime":125781.0,"StartX":10.0,"StartY":209.0,"EndX":10.0,"EndY":209.0}]},{"StartTime":125897.0,"Objects":[{"StartTime":125897.0,"EndTime":125897.0,"StartX":184.0,"StartY":284.0,"EndX":184.0,"EndY":284.0}]},{"StartTime":126012.0,"Objects":[{"StartTime":126012.0,"EndTime":126012.0,"StartX":0.0,"StartY":326.0,"EndX":0.0,"EndY":326.0}]},{"StartTime":126127.0,"Objects":[{"StartTime":126127.0,"EndTime":126357.0,"StartX":125.0,"StartY":181.0,"EndX":306.275452,"EndY":213.869308}]},{"StartTime":126474.0,"Objects":[{"StartTime":126474.0,"EndTime":126474.0,"StartX":398.0,"StartY":154.0,"EndX":398.0,"EndY":154.0}]},{"StartTime":126589.0,"Objects":[{"StartTime":126589.0,"EndTime":126762.0,"StartX":398.0,"StartY":154.0,"EndX":351.8152,"EndY":43.3314362}]},{"StartTime":126820.0,"Objects":[{"StartTime":126820.0,"EndTime":127050.0,"StartX":413.0,"StartY":83.0,"EndX":412.996582,"EndY":266.964874}]},{"StartTime":127166.0,"Objects":[{"StartTime":127166.0,"EndTime":127166.0,"StartX":367.0,"StartY":346.0,"EndX":367.0,"EndY":346.0}]},{"StartTime":127281.0,"Objects":[{"StartTime":127281.0,"EndTime":127281.0,"StartX":275.0,"StartY":323.0,"EndX":275.0,"EndY":323.0}]},{"StartTime":127397.0,"Objects":[{"StartTime":127397.0,"EndTime":127397.0,"StartX":195.0,"StartY":372.0,"EndX":195.0,"EndY":372.0}]},{"StartTime":127454.0,"Objects":[{"StartTime":127454.0,"EndTime":127454.0,"StartX":195.0,"StartY":372.0,"EndX":195.0,"EndY":372.0}]},{"StartTime":127512.0,"Objects":[{"StartTime":127512.0,"EndTime":127742.0,"StartX":195.0,"StartY":372.0,"EndX":261.4693,"EndY":228.10495}]},{"StartTime":127858.0,"Objects":[{"StartTime":127858.0,"EndTime":128088.0,"StartX":330.0,"StartY":85.0,"EndX":261.3013,"EndY":228.139435}]},{"StartTime":128204.0,"Objects":[{"StartTime":128204.0,"EndTime":128319.0,"StartX":157.0,"StartY":129.0,"EndX":250.31012,"EndY":134.955963}]},{"StartTime":128435.0,"Objects":[{"StartTime":128435.0,"EndTime":128435.0,"StartX":456.0,"StartY":206.0,"EndX":456.0,"EndY":206.0}]},{"StartTime":128551.0,"Objects":[{"StartTime":128551.0,"EndTime":128781.0,"StartX":394.0,"StartY":273.0,"EndX":207.316452,"EndY":262.125244}]},{"StartTime":128897.0,"Objects":[{"StartTime":128897.0,"EndTime":129012.0,"StartX":298.0,"StartY":358.0,"EndX":387.654083,"EndY":363.742249}]},{"StartTime":129127.0,"Objects":[{"StartTime":129127.0,"EndTime":129242.0,"StartX":303.0,"StartY":177.0,"EndX":213.581131,"EndY":169.7695}]},{"StartTime":129358.0,"Objects":[{"StartTime":129358.0,"EndTime":129588.0,"StartX":20.0,"StartY":270.0,"EndX":206.827255,"EndY":261.964417}]},{"StartTime":129704.0,"Objects":[{"StartTime":129704.0,"EndTime":129934.0,"StartX":303.0,"StartY":177.0,"EndX":116.172745,"EndY":185.035583}]},{"StartTime":130051.0,"Objects":[{"StartTime":130051.0,"EndTime":130166.0,"StartX":22.0,"StartY":90.0,"EndX":108.0569,"EndY":101.989265}]},{"StartTime":130281.0,"Objects":[{"StartTime":130281.0,"EndTime":130281.0,"StartX":206.0,"StartY":261.0,"EndX":206.0,"EndY":261.0}]},{"StartTime":130397.0,"Objects":[{"StartTime":130397.0,"EndTime":130627.0,"StartX":128.0,"StartY":351.0,"EndX":116.280022,"EndY":184.675079}]},{"StartTime":130743.0,"Objects":[{"StartTime":130743.0,"EndTime":130858.0,"StartX":206.0,"StartY":261.0,"EndX":222.803619,"EndY":352.977661}]},{"StartTime":130974.0,"Objects":[{"StartTime":130974.0,"EndTime":131089.0,"StartX":320.0,"StartY":268.0,"EndX":302.505,"EndY":176.151337}]},{"StartTime":131204.0,"Objects":[{"StartTime":131204.0,"EndTime":131434.0,"StartX":236.0,"StartY":21.0,"EndX":222.704208,"EndY":181.71843}]},{"StartTime":131551.0,"Objects":[{"StartTime":131551.0,"EndTime":131781.0,"StartX":368.0,"StartY":330.0,"EndX":379.811676,"EndY":168.8197}]},{"StartTime":131897.0,"Objects":[{"StartTime":131897.0,"EndTime":132012.0,"StartX":285.0,"StartY":84.0,"EndX":302.169983,"EndY":175.909973}]},{"StartTime":132127.0,"Objects":[{"StartTime":132127.0,"EndTime":132127.0,"StartX":256.0,"StartY":337.0,"EndX":256.0,"EndY":337.0}]},{"StartTime":132243.0,"Objects":[{"StartTime":132243.0,"EndTime":132473.0,"StartX":167.0,"StartY":301.0,"EndX":320.004059,"EndY":268.003876}]},{"StartTime":132589.0,"Objects":[{"StartTime":132589.0,"EndTime":132704.0,"StartX":104.0,"StartY":372.0,"EndX":10.6395264,"EndY":367.021637}]},{"StartTime":132820.0,"Objects":[{"StartTime":132820.0,"EndTime":132935.0,"StartX":155.0,"StartY":245.0,"EndX":248.357635,"EndY":239.988129}]},{"StartTime":133051.0,"Objects":[{"StartTime":133051.0,"EndTime":133051.0,"StartX":376.0,"StartY":268.0,"EndX":376.0,"EndY":268.0}]},{"StartTime":133108.0,"Objects":[{"StartTime":133108.0,"EndTime":133108.0,"StartX":363.0,"StartY":249.0,"EndX":363.0,"EndY":249.0}]},{"StartTime":133166.0,"Objects":[{"StartTime":133166.0,"EndTime":133166.0,"StartX":356.0,"StartY":228.0,"EndX":356.0,"EndY":228.0}]},{"StartTime":133224.0,"Objects":[{"StartTime":133224.0,"EndTime":133224.0,"StartX":355.0,"StartY":206.0,"EndX":355.0,"EndY":206.0}]},{"StartTime":133281.0,"Objects":[{"StartTime":133281.0,"EndTime":133281.0,"StartX":360.0,"StartY":184.0,"EndX":360.0,"EndY":184.0}]},{"StartTime":133339.0,"Objects":[{"StartTime":133339.0,"EndTime":133339.0,"StartX":372.0,"StartY":165.0,"EndX":372.0,"EndY":165.0}]},{"StartTime":133397.0,"Objects":[{"StartTime":133397.0,"EndTime":133397.0,"StartX":388.0,"StartY":150.0,"EndX":388.0,"EndY":150.0}]},{"StartTime":133454.0,"Objects":[{"StartTime":133454.0,"EndTime":133454.0,"StartX":408.0,"StartY":140.0,"EndX":408.0,"EndY":140.0}]},{"StartTime":133512.0,"Objects":[{"StartTime":133512.0,"EndTime":133512.0,"StartX":431.0,"StartY":136.0,"EndX":431.0,"EndY":136.0}]},{"StartTime":133743.0,"Objects":[{"StartTime":133743.0,"EndTime":133743.0,"StartX":433.0,"StartY":216.0,"EndX":433.0,"EndY":216.0}]},{"StartTime":133858.0,"Objects":[{"StartTime":133858.0,"EndTime":133858.0,"StartX":433.0,"StartY":216.0,"EndX":433.0,"EndY":216.0}]},{"StartTime":133973.0,"Objects":[{"StartTime":133973.0,"EndTime":133973.0,"StartX":500.0,"StartY":268.0,"EndX":500.0,"EndY":268.0}]},{"StartTime":134031.0,"Objects":[{"StartTime":134031.0,"EndTime":134031.0,"StartX":495.0,"StartY":296.0,"EndX":495.0,"EndY":296.0}]},{"StartTime":134088.0,"Objects":[{"StartTime":134088.0,"EndTime":134088.0,"StartX":490.0,"StartY":324.0,"EndX":490.0,"EndY":324.0}]},{"StartTime":134146.0,"Objects":[{"StartTime":134146.0,"EndTime":134146.0,"StartX":485.0,"StartY":352.0,"EndX":485.0,"EndY":352.0}]},{"StartTime":134204.0,"Objects":[{"StartTime":134204.0,"EndTime":134550.0,"StartX":480.0,"StartY":380.0,"EndX":215.65274,"EndY":306.0783}]},{"StartTime":134666.0,"Objects":[{"StartTime":134666.0,"EndTime":134781.0,"StartX":213.0,"StartY":83.0,"EndX":234.885178,"EndY":167.333}]},{"StartTime":134897.0,"Objects":[{"StartTime":134897.0,"EndTime":135012.0,"StartX":109.0,"StartY":244.0,"EndX":15.55278,"EndY":240.858917}]},{"StartTime":135127.0,"Objects":[{"StartTime":135127.0,"EndTime":135242.0,"StartX":236.0,"StartY":167.0,"EndX":329.4514,"EndY":170.014557}]},{"StartTime":135358.0,"Objects":[{"StartTime":135358.0,"EndTime":135588.0,"StartX":208.0,"StartY":383.0,"EndX":21.13086,"EndY":376.0049}]},{"StartTime":135704.0,"Objects":[{"StartTime":135704.0,"EndTime":135819.0,"StartX":297.0,"StartY":282.0,"EndX":203.584534,"EndY":278.024872}]},{"StartTime":135935.0,"Objects":[{"StartTime":135935.0,"EndTime":136050.0,"StartX":147.0,"StartY":80.0,"EndX":240.451385,"EndY":83.0145645}]},{"StartTime":136166.0,"Objects":[{"StartTime":136166.0,"EndTime":136281.0,"StartX":397.0,"StartY":51.0,"EndX":346.996429,"EndY":130.005646}]},{"StartTime":136397.0,"Objects":[{"StartTime":136397.0,"EndTime":136512.0,"StartX":297.0,"StartY":282.0,"EndX":253.206772,"EndY":199.390045}]},{"StartTime":136627.0,"Objects":[{"StartTime":136627.0,"EndTime":136627.0,"StartX":397.0,"StartY":51.0,"EndX":397.0,"EndY":51.0}]},{"StartTime":136743.0,"Objects":[{"StartTime":136743.0,"EndTime":136858.0,"StartX":502.0,"StartY":166.0,"EndX":408.5486,"EndY":169.014557}]},{"StartTime":136974.0,"Objects":[{"StartTime":136974.0,"EndTime":137089.0,"StartX":297.0,"StartY":282.0,"EndX":390.4514,"EndY":285.014557}]},{"StartTime":137204.0,"Objects":[{"StartTime":137204.0,"EndTime":137319.0,"StartX":296.0,"StartY":151.0,"EndX":202.548615,"EndY":154.014557}]},{"StartTime":137435.0,"Objects":[{"StartTime":137435.0,"EndTime":137550.0,"StartX":89.0,"StartY":242.0,"EndX":182.451385,"EndY":245.014557}]},{"StartTime":137666.0,"Objects":[{"StartTime":137666.0,"EndTime":137896.0,"StartX":220.0,"StartY":337.0,"EndX":33.1213074,"EndY":330.265625}]},{"StartTime":138012.0,"Objects":[{"StartTime":138012.0,"EndTime":138242.0,"StartX":202.0,"StartY":154.0,"EndX":388.9071,"EndY":159.893463}]},{"StartTime":138358.0,"Objects":[{"StartTime":138358.0,"EndTime":138473.0,"StartX":338.0,"StartY":61.0,"EndX":244.584534,"EndY":57.0248756}]},{"StartTime":138589.0,"Objects":[{"StartTime":138589.0,"EndTime":138819.0,"StartX":431.0,"StartY":315.0,"EndX":470.369141,"EndY":244.243286}]},{"StartTime":138935.0,"Objects":[{"StartTime":138935.0,"EndTime":138935.0,"StartX":507.0,"StartY":343.0,"EndX":507.0,"EndY":343.0}]},{"StartTime":139051.0,"Objects":[{"StartTime":139051.0,"EndTime":139281.0,"StartX":507.0,"StartY":343.0,"EndX":325.330963,"EndY":362.970032}]},{"StartTime":139397.0,"Objects":[{"StartTime":139397.0,"EndTime":139397.0,"StartX":177.0,"StartY":244.0,"EndX":177.0,"EndY":244.0}]},{"StartTime":139512.0,"Objects":[{"StartTime":139512.0,"EndTime":139742.0,"StartX":177.0,"StartY":244.0,"EndX":358.669037,"EndY":263.970032}]},{"StartTime":139858.0,"Objects":[{"StartTime":139858.0,"EndTime":139858.0,"StartX":424.0,"StartY":173.0,"EndX":424.0,"EndY":173.0}]},{"StartTime":139974.0,"Objects":[{"StartTime":139974.0,"EndTime":140089.0,"StartX":339.0,"StartY":99.0,"EndX":328.776672,"EndY":6.060585}]},{"StartTime":140204.0,"Objects":[{"StartTime":140204.0,"EndTime":140319.0,"StartX":177.0,"StartY":244.0,"EndX":167.00386,"EndY":151.035889}]},{"StartTime":140435.0,"Objects":[{"StartTime":140435.0,"EndTime":140550.0,"StartX":248.0,"StartY":95.0,"EndX":257.103271,"EndY":188.055786}]},{"StartTime":140666.0,"Objects":[{"StartTime":140666.0,"EndTime":140781.0,"StartX":96.0,"StartY":300.0,"EndX":86.00386,"EndY":207.035889}]},{"StartTime":140897.0,"Objects":[{"StartTime":140897.0,"EndTime":141012.0,"StartX":167.0,"StartY":151.0,"EndX":176.99614,"EndY":243.964111}]},{"StartTime":141127.0,"Objects":[{"StartTime":141127.0,"EndTime":141242.0,"StartX":355.0,"StartY":315.0,"EndX":345.993683,"EndY":221.934784}]},{"StartTime":141358.0,"Objects":[{"StartTime":141358.0,"EndTime":141588.0,"StartX":263.0,"StartY":380.0,"EndX":435.289673,"EndY":347.665344}]},{"StartTime":141704.0,"Objects":[{"StartTime":141704.0,"EndTime":141704.0,"StartX":177.0,"StartY":244.0,"EndX":177.0,"EndY":244.0}]},{"StartTime":141820.0,"Objects":[{"StartTime":141820.0,"EndTime":142050.0,"StartX":177.0,"StartY":244.0,"EndX":4.71032143,"EndY":276.334656}]},{"StartTime":142166.0,"Objects":[{"StartTime":142166.0,"EndTime":142166.0,"StartX":0.0,"StartY":182.0,"EndX":0.0,"EndY":182.0}]},{"StartTime":142281.0,"Objects":[{"StartTime":142281.0,"EndTime":142396.0,"StartX":176.0,"StartY":58.0,"EndX":166.993683,"EndY":151.065216}]},{"StartTime":142512.0,"Objects":[{"StartTime":142512.0,"EndTime":142627.0,"StartX":345.0,"StartY":221.0,"EndX":355.103546,"EndY":128.047485}]},{"StartTime":142743.0,"Objects":[{"StartTime":142743.0,"EndTime":142858.0,"StartX":257.0,"StartY":188.0,"EndX":247.993683,"EndY":281.065216}]},{"StartTime":142974.0,"Objects":[{"StartTime":142974.0,"EndTime":143089.0,"StartX":426.0,"StartY":351.0,"EndX":435.006317,"EndY":257.934784}]},{"StartTime":143204.0,"Objects":[{"StartTime":143204.0,"EndTime":143377.0,"StartX":203.0,"StartY":348.0,"EndX":320.980042,"EndY":313.05484}]},{"StartTime":143435.0,"Objects":[{"StartTime":143435.0,"EndTime":143608.0,"StartX":435.0,"StartY":258.0,"EndX":325.7411,"EndY":224.76}]},{"StartTime":143666.0,"Objects":[{"StartTime":143666.0,"EndTime":143839.0,"StartX":257.0,"StartY":188.0,"EndX":352.8504,"EndY":153.586121}]},{"StartTime":143897.0,"Objects":[{"StartTime":143897.0,"EndTime":144070.0,"StartX":419.0,"StartY":136.0,"EndX":338.0948,"EndY":97.87808}]},{"StartTime":144127.0,"Objects":[{"StartTime":144127.0,"EndTime":144357.0,"StartX":257.0,"StartY":188.0,"EndX":274.917175,"EndY":1.8603363}]},{"StartTime":144474.0,"Objects":[{"StartTime":144474.0,"EndTime":144474.0,"StartX":435.0,"StartY":258.0,"EndX":435.0,"EndY":258.0}]},{"StartTime":144589.0,"Objects":[{"StartTime":144589.0,"EndTime":144819.0,"StartX":435.0,"StartY":258.0,"EndX":452.917175,"EndY":71.86034}]},{"StartTime":144935.0,"Objects":[{"StartTime":144935.0,"EndTime":144935.0,"StartX":149.0,"StartY":337.0,"EndX":149.0,"EndY":337.0}]},{"StartTime":145051.0,"Objects":[{"StartTime":145051.0,"EndTime":145166.0,"StartX":149.0,"StartY":337.0,"EndX":157.864655,"EndY":243.921173}]},{"StartTime":145281.0,"Objects":[{"StartTime":145281.0,"EndTime":145396.0,"StartX":353.0,"StartY":153.0,"EndX":343.165436,"EndY":245.981354}]},{"StartTime":145512.0,"Objects":[{"StartTime":145512.0,"EndTime":145627.0,"StartX":169.0,"StartY":318.0,"EndX":178.381,"EndY":224.9718}]},{"StartTime":145742.0,"Objects":[{"StartTime":145742.0,"EndTime":145857.0,"StartX":332.0,"StartY":171.0,"EndX":322.625,"EndY":264.0288}]},{"StartTime":145974.0,"Objects":[{"StartTime":145974.0,"EndTime":146089.0,"StartX":95.0,"StartY":131.0,"EndX":103.138893,"EndY":37.8549042}]},{"StartTime":146204.0,"Objects":[{"StartTime":146204.0,"EndTime":146319.0,"StartX":247.0,"StartY":76.0,"EndX":237.00386,"EndY":168.964111}]},{"StartTime":146435.0,"Objects":[{"StartTime":146435.0,"EndTime":146550.0,"StartX":166.0,"StartY":150.0,"EndX":175.99614,"EndY":57.03588}]},{"StartTime":146666.0,"Objects":[{"StartTime":146666.0,"EndTime":146781.0,"StartX":318.0,"StartY":95.0,"EndX":308.003845,"EndY":187.964111}]},{"StartTime":146897.0,"Objects":[{"StartTime":146897.0,"EndTime":147012.0,"StartX":475.0,"StartY":319.0,"EndX":465.9648,"EndY":225.937561}]},{"StartTime":147127.0,"Objects":[{"StartTime":147127.0,"EndTime":147242.0,"StartX":322.0,"StartY":263.0,"EndX":331.891,"EndY":355.975342}]},{"StartTime":147358.0,"Objects":[{"StartTime":147358.0,"EndTime":147473.0,"StartX":403.0,"StartY":338.0,"EndX":393.993683,"EndY":244.934784}]},{"StartTime":147589.0,"Objects":[{"StartTime":147589.0,"EndTime":147704.0,"StartX":252.0,"StartY":283.0,"EndX":261.006317,"EndY":376.065216}]},{"StartTime":147820.0,"Objects":[{"StartTime":147820.0,"EndTime":147935.0,"StartX":38.0,"StartY":368.0,"EndX":131.053864,"EndY":358.877075}]},{"StartTime":148050.0,"Objects":[{"StartTime":148050.0,"EndTime":148165.0,"StartX":93.0,"StartY":215.0,"EndX":-0.07436371,"EndY":223.911377}]},{"StartTime":148281.0,"Objects":[{"StartTime":148281.0,"EndTime":148281.0,"StartX":247.0,"StartY":203.0,"EndX":247.0,"EndY":203.0}]},{"StartTime":148397.0,"Objects":[{"StartTime":148397.0,"EndTime":148397.0,"StartX":186.0,"StartY":101.0,"EndX":186.0,"EndY":101.0}]},{"StartTime":148512.0,"Objects":[{"StartTime":148512.0,"EndTime":148512.0,"StartX":365.0,"StartY":200.0,"EndX":365.0,"EndY":200.0}]},{"StartTime":148627.0,"Objects":[{"StartTime":148627.0,"EndTime":148627.0,"StartX":189.0,"StartY":304.0,"EndX":189.0,"EndY":304.0}]},{"StartTime":148743.0,"Objects":[{"StartTime":148743.0,"EndTime":148743.0,"StartX":237.0,"StartY":20.0,"EndX":237.0,"EndY":20.0}]},{"StartTime":148858.0,"Objects":[{"StartTime":148858.0,"EndTime":148858.0,"StartX":95.0,"StartY":132.0,"EndX":95.0,"EndY":132.0}]},{"StartTime":148916.0,"Objects":[{"StartTime":148916.0,"EndTime":148916.0,"StartX":95.0,"StartY":132.0,"EndX":95.0,"EndY":132.0}]},{"StartTime":148974.0,"Objects":[{"StartTime":148974.0,"EndTime":148974.0,"StartX":95.0,"StartY":132.0,"EndX":95.0,"EndY":132.0}]},{"StartTime":149089.0,"Objects":[{"StartTime":149089.0,"EndTime":149089.0,"StartX":276.0,"StartY":126.0,"EndX":276.0,"EndY":126.0}]},{"StartTime":149204.0,"Objects":[{"StartTime":149204.0,"EndTime":149204.0,"StartX":125.0,"StartY":24.0,"EndX":125.0,"EndY":24.0}]},{"StartTime":149320.0,"Objects":[{"StartTime":149320.0,"EndTime":149320.0,"StartX":189.0,"StartY":196.0,"EndX":189.0,"EndY":196.0}]},{"StartTime":149435.0,"Objects":[{"StartTime":149435.0,"EndTime":149435.0,"StartX":361.0,"StartY":132.0,"EndX":361.0,"EndY":132.0}]},{"StartTime":149551.0,"Objects":[{"StartTime":149551.0,"EndTime":149551.0,"StartX":425.0,"StartY":304.0,"EndX":425.0,"EndY":304.0}]},{"StartTime":149666.0,"Objects":[{"StartTime":149666.0,"EndTime":150358.0,"StartX":330.0,"StartY":357.0,"EndX":78.3954544,"EndY":327.4413}]},{"StartTime":150589.0,"Objects":[{"StartTime":150589.0,"EndTime":151281.0,"StartX":237.0,"StartY":168.0,"EndX":488.604553,"EndY":138.4413}]},{"StartTime":151512.0,"Objects":[{"StartTime":151512.0,"EndTime":152204.0,"StartX":401.0,"StartY":288.0,"EndX":122.215607,"EndY":257.023956}]},{"StartTime":152320.0,"Objects":[{"StartTime":152320.0,"EndTime":152320.0,"StartX":44.0,"StartY":309.0,"EndX":44.0,"EndY":309.0}]},{"StartTime":152377.0,"Objects":[{"StartTime":152377.0,"EndTime":152377.0,"StartX":44.0,"StartY":309.0,"EndX":44.0,"EndY":309.0}]},{"StartTime":152435.0,"Objects":[{"StartTime":152435.0,"EndTime":152435.0,"StartX":44.0,"StartY":309.0,"EndX":44.0,"EndY":309.0}]},{"StartTime":152551.0,"Objects":[{"StartTime":152551.0,"EndTime":152551.0,"StartX":44.0,"StartY":197.0,"EndX":44.0,"EndY":197.0}]},{"StartTime":152666.0,"Objects":[{"StartTime":152666.0,"EndTime":152666.0,"StartX":151.0,"StartY":162.0,"EndX":151.0,"EndY":162.0}]},{"StartTime":152781.0,"Objects":[{"StartTime":152781.0,"EndTime":152781.0,"StartX":216.0,"StartY":253.0,"EndX":216.0,"EndY":253.0}]},{"StartTime":152897.0,"Objects":[{"StartTime":152897.0,"EndTime":152897.0,"StartX":281.0,"StartY":344.0,"EndX":281.0,"EndY":344.0}]},{"StartTime":153012.0,"Objects":[{"StartTime":153012.0,"EndTime":153012.0,"StartX":388.0,"StartY":309.0,"EndX":388.0,"EndY":309.0}]},{"StartTime":153128.0,"Objects":[{"StartTime":153128.0,"EndTime":153128.0,"StartX":388.0,"StartY":197.0,"EndX":388.0,"EndY":197.0}]},{"StartTime":153243.0,"Objects":[{"StartTime":153243.0,"EndTime":153243.0,"StartX":281.0,"StartY":162.0,"EndX":281.0,"EndY":162.0}]},{"StartTime":153358.0,"Objects":[{"StartTime":153358.0,"EndTime":154050.0,"StartX":216.0,"StartY":253.0,"EndX":495.524353,"EndY":229.625137}]},{"StartTime":154281.0,"Objects":[{"StartTime":154281.0,"EndTime":154973.0,"StartX":296.0,"StartY":131.0,"EndX":16.475647,"EndY":154.374863}]},{"StartTime":155204.0,"Objects":[{"StartTime":155204.0,"EndTime":155896.0,"StartX":148.0,"StartY":338.0,"EndX":427.558441,"EndY":315.0363}]},{"StartTime":156127.0,"Objects":[{"StartTime":156127.0,"EndTime":156127.0,"StartX":492.0,"StartY":225.0,"EndX":492.0,"EndY":225.0}]},{"StartTime":156185.0,"Objects":[{"StartTime":156185.0,"EndTime":156185.0,"StartX":492.0,"StartY":225.0,"EndX":492.0,"EndY":225.0}]},{"StartTime":156243.0,"Objects":[{"StartTime":156243.0,"EndTime":156243.0,"StartX":492.0,"StartY":225.0,"EndX":492.0,"EndY":225.0}]},{"StartTime":156358.0,"Objects":[{"StartTime":156358.0,"EndTime":156358.0,"StartX":320.0,"StartY":168.0,"EndX":320.0,"EndY":168.0}]},{"StartTime":156474.0,"Objects":[{"StartTime":156474.0,"EndTime":156474.0,"StartX":427.0,"StartY":315.0,"EndX":427.0,"EndY":315.0}]},{"StartTime":156531.0,"Objects":[{"StartTime":156531.0,"EndTime":156531.0,"StartX":427.0,"StartY":315.0,"EndX":427.0,"EndY":315.0}]},{"StartTime":156589.0,"Objects":[{"StartTime":156589.0,"EndTime":156589.0,"StartX":427.0,"StartY":315.0,"EndX":427.0,"EndY":315.0}]},{"StartTime":156704.0,"Objects":[{"StartTime":156704.0,"EndTime":156704.0,"StartX":427.0,"StartY":133.0,"EndX":427.0,"EndY":133.0}]},{"StartTime":156820.0,"Objects":[{"StartTime":156820.0,"EndTime":156820.0,"StartX":320.0,"StartY":280.0,"EndX":320.0,"EndY":280.0}]},{"StartTime":156935.0,"Objects":[{"StartTime":156935.0,"EndTime":156935.0,"StartX":492.0,"StartY":225.0,"EndX":492.0,"EndY":225.0}]},{"StartTime":157051.0,"Objects":[{"StartTime":157051.0,"EndTime":157743.0,"StartX":320.0,"StartY":280.0,"EndX":49.3783264,"EndY":321.50528}]},{"StartTime":157974.0,"Objects":[{"StartTime":157974.0,"EndTime":158666.0,"StartX":0.0,"StartY":138.0,"EndX":189.926224,"EndY":191.60849}]},{"StartTime":158897.0,"Objects":[{"StartTime":158897.0,"EndTime":159589.0,"StartX":281.0,"StartY":344.0,"EndX":311.976044,"EndY":65.21561}]},{"StartTime":159704.0,"Objects":[{"StartTime":159704.0,"EndTime":159704.0,"StartX":419.0,"StartY":30.0,"EndX":419.0,"EndY":30.0}]},{"StartTime":159762.0,"Objects":[{"StartTime":159762.0,"EndTime":159762.0,"StartX":419.0,"StartY":30.0,"EndX":419.0,"EndY":30.0}]},{"StartTime":159820.0,"Objects":[{"StartTime":159820.0,"EndTime":159820.0,"StartX":419.0,"StartY":30.0,"EndX":419.0,"EndY":30.0}]},{"StartTime":159935.0,"Objects":[{"StartTime":159935.0,"EndTime":159935.0,"StartX":484.0,"StartY":121.0,"EndX":484.0,"EndY":121.0}]},{"StartTime":160051.0,"Objects":[{"StartTime":160051.0,"EndTime":160051.0,"StartX":419.0,"StartY":212.0,"EndX":419.0,"EndY":212.0}]},{"StartTime":160166.0,"Objects":[{"StartTime":160166.0,"EndTime":160166.0,"StartX":312.0,"StartY":177.0,"EndX":312.0,"EndY":177.0}]},{"StartTime":160281.0,"Objects":[{"StartTime":160281.0,"EndTime":160281.0,"StartX":312.0,"StartY":65.0,"EndX":312.0,"EndY":65.0}]},{"StartTime":160397.0,"Objects":[{"StartTime":160397.0,"EndTime":160397.0,"StartX":205.0,"StartY":30.0,"EndX":205.0,"EndY":30.0}]},{"StartTime":160513.0,"Objects":[{"StartTime":160513.0,"EndTime":160513.0,"StartX":140.0,"StartY":121.0,"EndX":140.0,"EndY":121.0}]},{"StartTime":160627.0,"Objects":[{"StartTime":160627.0,"EndTime":160627.0,"StartX":206.0,"StartY":210.0,"EndX":206.0,"EndY":210.0}]},{"StartTime":160743.0,"Objects":[{"StartTime":160743.0,"EndTime":160858.0,"StartX":312.0,"StartY":65.0,"EndX":404.320251,"EndY":50.193924}]},{"StartTime":160974.0,"Objects":[{"StartTime":160974.0,"EndTime":161089.0,"StartX":484.0,"StartY":121.0,"EndX":391.679749,"EndY":135.806076}]},{"StartTime":161204.0,"Objects":[{"StartTime":161204.0,"EndTime":161319.0,"StartX":206.0,"StartY":210.0,"EndX":298.320251,"EndY":195.193924}]},{"StartTime":161435.0,"Objects":[{"StartTime":161435.0,"EndTime":161550.0,"StartX":378.0,"StartY":266.0,"EndX":285.679749,"EndY":280.8061}]},{"StartTime":161666.0,"Objects":[{"StartTime":161666.0,"EndTime":161781.0,"StartX":44.0,"StartY":197.0,"EndX":32.89971,"EndY":289.838745}]},{"StartTime":161897.0,"Objects":[{"StartTime":161897.0,"EndTime":162012.0,"StartX":116.0,"StartY":362.0,"EndX":125.99614,"EndY":269.0359}]},{"StartTime":162127.0,"Objects":[{"StartTime":162127.0,"EndTime":162242.0,"StartX":216.0,"StartY":117.0,"EndX":204.899719,"EndY":209.838745}]},{"StartTime":162358.0,"Objects":[{"StartTime":162358.0,"EndTime":162473.0,"StartX":288.0,"StartY":282.0,"EndX":297.996155,"EndY":189.035889}]},{"StartTime":162589.0,"Objects":[{"StartTime":162589.0,"EndTime":162704.0,"StartX":388.0,"StartY":124.0,"EndX":471.636383,"EndY":147.4339}]},{"StartTime":162820.0,"Objects":[{"StartTime":162820.0,"EndTime":162935.0,"StartX":494.0,"StartY":219.0,"EndX":410.363617,"EndY":195.5661}]},{"StartTime":163051.0,"Objects":[{"StartTime":163051.0,"EndTime":163166.0,"StartX":496.0,"StartY":64.0,"EndX":472.107727,"EndY":147.907867}]},{"StartTime":163281.0,"Objects":[{"StartTime":163281.0,"EndTime":163396.0,"StartX":386.0,"StartY":278.0,"EndX":409.233765,"EndY":194.609177}]},{"StartTime":163512.0,"Objects":[{"StartTime":163512.0,"EndTime":163627.0,"StartX":511.0,"StartY":346.0,"EndX":418.102081,"EndY":356.593628}]},{"StartTime":163743.0,"Objects":[{"StartTime":163743.0,"EndTime":163858.0,"StartX":195.0,"StartY":271.0,"EndX":287.9525,"EndY":281.103546}]},{"StartTime":163974.0,"Objects":[{"StartTime":163974.0,"EndTime":164089.0,"StartX":410.0,"StartY":194.0,"EndX":317.102081,"EndY":204.593628}]},{"StartTime":164205.0,"Objects":[{"StartTime":164205.0,"EndTime":164320.0,"StartX":94.0,"StartY":119.0,"EndX":186.952515,"EndY":129.103531}]},{"StartTime":164435.0,"Objects":[{"StartTime":164435.0,"EndTime":164550.0,"StartX":440.0,"StartY":44.0,"EndX":400.919037,"EndY":121.451096}]},{"StartTime":164666.0,"Objects":[{"StartTime":164666.0,"EndTime":164781.0,"StartX":458.0,"StartY":266.0,"EndX":409.400452,"EndY":193.173218}]},{"StartTime":164897.0,"Objects":[{"StartTime":164897.0,"EndTime":165012.0,"StartX":255.0,"StartY":171.0,"EndX":341.989532,"EndY":164.008179}]},{"StartTime":165127.0,"Objects":[{"StartTime":165127.0,"EndTime":165127.0,"StartX":508.0,"StartY":108.0,"EndX":508.0,"EndY":108.0}]},{"StartTime":165243.0,"Objects":[{"StartTime":165243.0,"EndTime":165243.0,"StartX":494.0,"StartY":219.0,"EndX":494.0,"EndY":219.0}]},{"StartTime":165301.0,"Objects":[{"StartTime":165301.0,"EndTime":165301.0,"StartX":494.0,"StartY":219.0,"EndX":494.0,"EndY":219.0}]},{"StartTime":165358.0,"Objects":[{"StartTime":165358.0,"EndTime":165473.0,"StartX":494.0,"StartY":219.0,"EndX":483.075348,"EndY":311.8596}]},{"StartTime":165589.0,"Objects":[{"StartTime":165589.0,"EndTime":165589.0,"StartX":341.0,"StartY":164.0,"EndX":341.0,"EndY":164.0}]},{"StartTime":165704.0,"Objects":[{"StartTime":165704.0,"EndTime":165704.0,"StartX":341.0,"StartY":164.0,"EndX":341.0,"EndY":164.0}]},{"StartTime":165820.0,"Objects":[{"StartTime":165820.0,"EndTime":165820.0,"StartX":306.0,"StartY":264.0,"EndX":306.0,"EndY":264.0}]},{"StartTime":165877.0,"Objects":[{"StartTime":165877.0,"EndTime":165877.0,"StartX":271.0,"StartY":234.0,"EndX":271.0,"EndY":234.0}]},{"StartTime":165935.0,"Objects":[{"StartTime":165935.0,"EndTime":165935.0,"StartX":225.0,"StartY":232.0,"EndX":225.0,"EndY":232.0}]},{"StartTime":165993.0,"Objects":[{"StartTime":165993.0,"EndTime":165993.0,"StartX":188.0,"StartY":258.0,"EndX":188.0,"EndY":258.0}]},{"StartTime":166050.0,"Objects":[{"StartTime":166050.0,"EndTime":166050.0,"StartX":176.0,"StartY":303.0,"EndX":176.0,"EndY":303.0}]},{"StartTime":166108.0,"Objects":[{"StartTime":166108.0,"EndTime":166108.0,"StartX":164.0,"StartY":348.0,"EndX":164.0,"EndY":348.0}]},{"StartTime":166166.0,"Objects":[{"StartTime":166166.0,"EndTime":166166.0,"StartX":127.0,"StartY":374.0,"EndX":127.0,"EndY":374.0}]},{"StartTime":166224.0,"Objects":[{"StartTime":166224.0,"EndTime":166224.0,"StartX":81.0,"StartY":372.0,"EndX":81.0,"EndY":372.0}]},{"StartTime":166281.0,"Objects":[{"StartTime":166281.0,"EndTime":166511.0,"StartX":46.0,"StartY":343.0,"EndX":112.726479,"EndY":221.39711}]},{"StartTime":166627.0,"Objects":[{"StartTime":166627.0,"EndTime":166627.0,"StartX":225.0,"StartY":232.0,"EndX":225.0,"EndY":232.0}]},{"StartTime":166743.0,"Objects":[{"StartTime":166743.0,"EndTime":166973.0,"StartX":225.0,"StartY":232.0,"EndX":253.568863,"EndY":47.19519}]},{"StartTime":167089.0,"Objects":[{"StartTime":167089.0,"EndTime":167089.0,"StartX":150.0,"StartY":1.0,"EndX":150.0,"EndY":1.0}]},{"StartTime":167204.0,"Objects":[{"StartTime":167204.0,"EndTime":167319.0,"StartX":150.0,"StartY":1.0,"EndX":151.753357,"EndY":86.958}]},{"StartTime":167435.0,"Objects":[{"StartTime":167435.0,"EndTime":167608.0,"StartX":235.0,"StartY":165.0,"EndX":374.495239,"EndY":150.469254}]},{"StartTime":167666.0,"Objects":[{"StartTime":167666.0,"EndTime":167781.0,"StartX":426.0,"StartY":172.0,"EndX":332.9248,"EndY":180.902847}]},{"StartTime":167897.0,"Objects":[{"StartTime":167897.0,"EndTime":168012.0,"StartX":223.0,"StartY":301.0,"EndX":315.986267,"EndY":291.211975}]},{"StartTime":168127.0,"Objects":[{"StartTime":168127.0,"EndTime":168357.0,"StartX":476.0,"StartY":116.0,"EndX":352.612549,"EndY":187.116791}]},{"StartTime":168474.0,"Objects":[{"StartTime":168474.0,"EndTime":168704.0,"StartX":425.0,"StartY":314.0,"EndX":424.602539,"EndY":170.914032}]},{"StartTime":168820.0,"Objects":[{"StartTime":168820.0,"EndTime":168935.0,"StartX":280.0,"StartY":170.0,"EndX":315.84964,"EndY":249.782639}]},{"StartTime":169051.0,"Objects":[{"StartTime":169051.0,"EndTime":169166.0,"StartX":352.0,"StartY":356.0,"EndX":259.313049,"EndY":343.6964}]},{"StartTime":169281.0,"Objects":[{"StartTime":169281.0,"EndTime":169396.0,"StartX":122.0,"StartY":225.0,"EndX":214.599686,"EndY":237.944046}]},{"StartTime":169512.0,"Objects":[{"StartTime":169512.0,"EndTime":169627.0,"StartX":425.0,"StartY":171.0,"EndX":332.40033,"EndY":158.055954}]},{"StartTime":169743.0,"Objects":[{"StartTime":169743.0,"EndTime":169743.0,"StartX":200.0,"StartY":91.0,"EndX":200.0,"EndY":91.0}]},{"StartTime":169800.0,"Objects":[{"StartTime":169800.0,"EndTime":169800.0,"StartX":203.0,"StartY":126.0,"EndX":203.0,"EndY":126.0}]},{"StartTime":169858.0,"Objects":[{"StartTime":169858.0,"EndTime":169858.0,"StartX":206.0,"StartY":163.0,"EndX":206.0,"EndY":163.0}]},{"StartTime":169916.0,"Objects":[{"StartTime":169916.0,"EndTime":169916.0,"StartX":211.0,"StartY":201.0,"EndX":211.0,"EndY":201.0}]},{"StartTime":169974.0,"Objects":[{"StartTime":169974.0,"EndTime":170204.0,"StartX":215.0,"StartY":238.0,"EndX":73.0661545,"EndY":306.328583}]},{"StartTime":170320.0,"Objects":[{"StartTime":170320.0,"EndTime":170320.0,"StartX":29.0,"StartY":212.0,"EndX":29.0,"EndY":212.0}]},{"StartTime":170435.0,"Objects":[{"StartTime":170435.0,"EndTime":170665.0,"StartX":29.0,"StartY":212.0,"EndX":54.3065,"EndY":26.7202759}]},{"StartTime":170781.0,"Objects":[{"StartTime":170781.0,"EndTime":170781.0,"StartX":127.0,"StartY":111.0,"EndX":127.0,"EndY":111.0}]},{"StartTime":170897.0,"Objects":[{"StartTime":170897.0,"EndTime":171012.0,"StartX":127.0,"StartY":111.0,"EndX":205.322327,"EndY":145.04599}]},{"StartTime":171127.0,"Objects":[{"StartTime":171127.0,"EndTime":171300.0,"StartX":389.0,"StartY":111.0,"EndX":279.463837,"EndY":169.286285}]},{"StartTime":171358.0,"Objects":[{"StartTime":171358.0,"EndTime":171473.0,"StartX":264.0,"StartY":184.0,"EndX":275.884918,"EndY":276.729767}]},{"StartTime":171589.0,"Objects":[{"StartTime":171589.0,"EndTime":171704.0,"StartX":470.0,"StartY":358.0,"EndX":457.559143,"EndY":265.331421}]},{"StartTime":171820.0,"Objects":[{"StartTime":171820.0,"EndTime":172050.0,"StartX":508.0,"StartY":108.0,"EndX":322.475342,"EndY":99.5452957}]},{"StartTime":172166.0,"Objects":[{"StartTime":172166.0,"EndTime":172166.0,"StartX":214.0,"StartY":201.0,"EndX":214.0,"EndY":201.0}]},{"StartTime":172281.0,"Objects":[{"StartTime":172281.0,"EndTime":172511.0,"StartX":214.0,"StartY":201.0,"EndX":399.6029,"EndY":208.5455}]},{"StartTime":172628.0,"Objects":[{"StartTime":172628.0,"EndTime":172628.0,"StartX":223.0,"StartY":301.0,"EndX":223.0,"EndY":301.0}]},{"StartTime":172743.0,"Objects":[{"StartTime":172743.0,"EndTime":172916.0,"StartX":223.0,"StartY":301.0,"EndX":83.35077,"EndY":288.032562}]},{"StartTime":172974.0,"Objects":[{"StartTime":172974.0,"EndTime":173089.0,"StartX":59.0,"StartY":302.0,"EndX":152.155975,"EndY":310.013428}]},{"StartTime":173204.0,"Objects":[{"StartTime":173204.0,"EndTime":173319.0,"StartX":329.0,"StartY":295.0,"EndX":315.0967,"EndY":381.6435}]},{"StartTime":173435.0,"Objects":[{"StartTime":173435.0,"EndTime":173550.0,"StartX":264.0,"StartY":186.0,"EndX":277.903259,"EndY":99.356514}]},{"StartTime":173666.0,"Objects":[{"StartTime":173666.0,"EndTime":173896.0,"StartX":170.0,"StartY":178.0,"EndX":4.07558155,"EndY":248.999435}]},{"StartTime":174012.0,"Objects":[{"StartTime":174012.0,"EndTime":174012.0,"StartX":203.0,"StartY":99.0,"EndX":203.0,"EndY":99.0}]},{"StartTime":174127.0,"Objects":[{"StartTime":174127.0,"EndTime":174357.0,"StartX":203.0,"StartY":99.0,"EndX":368.4376,"EndY":26.9967422}]},{"StartTime":174474.0,"Objects":[{"StartTime":174474.0,"EndTime":174474.0,"StartX":484.0,"StartY":72.0,"EndX":484.0,"EndY":72.0}]},{"StartTime":174589.0,"Objects":[{"StartTime":174589.0,"EndTime":174819.0,"StartX":484.0,"StartY":72.0,"EndX":457.976868,"EndY":257.177124}]},{"StartTime":174935.0,"Objects":[{"StartTime":174935.0,"EndTime":174935.0,"StartX":361.0,"StartY":315.0,"EndX":361.0,"EndY":315.0}]},{"StartTime":175051.0,"Objects":[{"StartTime":175051.0,"EndTime":175166.0,"StartX":361.0,"StartY":315.0,"EndX":348.052032,"EndY":222.402908}]},{"StartTime":175281.0,"Objects":[{"StartTime":175281.0,"EndTime":175396.0,"StartX":249.0,"StartY":292.0,"EndX":261.933167,"EndY":384.591156}]},{"StartTime":175512.0,"Objects":[{"StartTime":175512.0,"EndTime":175742.0,"StartX":398.0,"StartY":152.0,"EndX":237.310669,"EndY":182.61557}]},{"StartTime":175858.0,"Objects":[{"StartTime":175858.0,"EndTime":175858.0,"StartX":164.0,"StartY":280.0,"EndX":164.0,"EndY":280.0}]},{"StartTime":175974.0,"Objects":[{"StartTime":175974.0,"EndTime":176204.0,"StartX":164.0,"StartY":280.0,"EndX":3.52966261,"EndY":248.588928}]},{"StartTime":176320.0,"Objects":[{"StartTime":176320.0,"EndTime":176320.0,"StartX":237.0,"StartY":182.0,"EndX":237.0,"EndY":182.0}]},{"StartTime":176435.0,"Objects":[{"StartTime":176435.0,"EndTime":176665.0,"StartX":237.0,"StartY":182.0,"EndX":267.121826,"EndY":0.465344548}]},{"StartTime":176781.0,"Objects":[{"StartTime":176781.0,"EndTime":176781.0,"StartX":151.0,"StartY":40.0,"EndX":151.0,"EndY":40.0}]},{"StartTime":176897.0,"Objects":[{"StartTime":176897.0,"EndTime":177012.0,"StartX":0.0,"StartY":156.0,"EndX":93.23626,"EndY":148.982224}]},{"StartTime":177127.0,"Objects":[{"StartTime":177127.0,"EndTime":177242.0,"StartX":164.0,"StartY":280.0,"EndX":70.66135,"EndY":285.4905}]},{"StartTime":177358.0,"Objects":[{"StartTime":177358.0,"EndTime":177358.0,"StartX":208.0,"StartY":145.0,"EndX":208.0,"EndY":145.0}]},{"StartTime":177474.0,"Objects":[{"StartTime":177474.0,"EndTime":177474.0,"StartX":242.0,"StartY":59.0,"EndX":242.0,"EndY":59.0}]},{"StartTime":177589.0,"Objects":[{"StartTime":177589.0,"EndTime":177589.0,"StartX":334.0,"StartY":63.0,"EndX":334.0,"EndY":63.0}]},{"StartTime":177704.0,"Objects":[{"StartTime":177704.0,"EndTime":177704.0,"StartX":358.0,"StartY":154.0,"EndX":358.0,"EndY":154.0}]},{"StartTime":177820.0,"Objects":[{"StartTime":177820.0,"EndTime":177820.0,"StartX":281.0,"StartY":204.0,"EndX":281.0,"EndY":204.0}]},{"StartTime":177935.0,"Objects":[{"StartTime":177935.0,"EndTime":177935.0,"StartX":208.0,"StartY":145.0,"EndX":208.0,"EndY":145.0}]},{"StartTime":178051.0,"Objects":[{"StartTime":178051.0,"EndTime":178051.0,"StartX":129.0,"StartY":196.0,"EndX":129.0,"EndY":196.0}]},{"StartTime":178166.0,"Objects":[{"StartTime":178166.0,"EndTime":178166.0,"StartX":153.0,"StartY":286.0,"EndX":153.0,"EndY":286.0}]},{"StartTime":178281.0,"Objects":[{"StartTime":178281.0,"EndTime":178396.0,"StartX":246.0,"StartY":290.0,"EndX":235.13266,"EndY":382.8663}]},{"StartTime":178512.0,"Objects":[{"StartTime":178512.0,"EndTime":178627.0,"StartX":142.0,"StartY":378.0,"EndX":153.100281,"EndY":285.161255}]},{"StartTime":178743.0,"Objects":[{"StartTime":178743.0,"EndTime":178858.0,"StartX":139.0,"StartY":103.0,"EndX":128.13266,"EndY":195.8663}]},{"StartTime":178974.0,"Objects":[{"StartTime":178974.0,"EndTime":179089.0,"StartX":35.0,"StartY":191.0,"EndX":44.9961433,"EndY":98.03588}]},{"StartTime":179204.0,"Objects":[{"StartTime":179204.0,"EndTime":179319.0,"StartX":139.0,"StartY":103.0,"EndX":224.03212,"EndY":121.828957}]},{"StartTime":179435.0,"Objects":[{"StartTime":179435.0,"EndTime":179550.0,"StartX":362.0,"StartY":179.0,"EndX":277.1364,"EndY":197.853836}]},{"StartTime":179666.0,"Objects":[{"StartTime":179666.0,"EndTime":179666.0,"StartX":392.0,"StartY":365.0,"EndX":392.0,"EndY":365.0}]},{"StartTime":179781.0,"Objects":[{"StartTime":179781.0,"EndTime":179781.0,"StartX":464.0,"StartY":306.0,"EndX":464.0,"EndY":306.0}]},{"StartTime":179839.0,"Objects":[{"StartTime":179839.0,"EndTime":179839.0,"StartX":464.0,"StartY":306.0,"EndX":464.0,"EndY":306.0}]},{"StartTime":179897.0,"Objects":[{"StartTime":179897.0,"EndTime":179897.0,"StartX":464.0,"StartY":306.0,"EndX":464.0,"EndY":306.0}]},{"StartTime":180012.0,"Objects":[{"StartTime":180012.0,"EndTime":180012.0,"StartX":378.0,"StartY":270.0,"EndX":378.0,"EndY":270.0}]},{"StartTime":180127.0,"Objects":[{"StartTime":180127.0,"EndTime":180127.0,"StartX":450.0,"StartY":211.0,"EndX":450.0,"EndY":211.0}]},{"StartTime":180243.0,"Objects":[{"StartTime":180243.0,"EndTime":180243.0,"StartX":362.0,"StartY":179.0,"EndX":362.0,"EndY":179.0}]},{"StartTime":180301.0,"Objects":[{"StartTime":180301.0,"EndTime":180301.0,"StartX":362.0,"StartY":179.0,"EndX":362.0,"EndY":179.0}]},{"StartTime":180358.0,"Objects":[{"StartTime":180358.0,"EndTime":180473.0,"StartX":362.0,"StartY":179.0,"EndX":269.439728,"EndY":165.7771}]},{"StartTime":180589.0,"Objects":[{"StartTime":180589.0,"EndTime":180589.0,"StartX":160.0,"StartY":37.0,"EndX":160.0,"EndY":37.0}]},{"StartTime":180704.0,"Objects":[{"StartTime":180704.0,"EndTime":180704.0,"StartX":105.0,"StartY":123.0,"EndX":105.0,"EndY":123.0}]},{"StartTime":180820.0,"Objects":[{"StartTime":180820.0,"EndTime":180820.0,"StartX":269.0,"StartY":165.0,"EndX":269.0,"EndY":165.0}]},{"StartTime":180935.0,"Objects":[{"StartTime":180935.0,"EndTime":180935.0,"StartX":259.0,"StartY":62.0,"EndX":259.0,"EndY":62.0}]},{"StartTime":181051.0,"Objects":[{"StartTime":181051.0,"EndTime":181281.0,"StartX":172.0,"StartY":203.0,"EndX":200.939163,"EndY":384.393158}]},{"StartTime":181397.0,"Objects":[{"StartTime":181397.0,"EndTime":181397.0,"StartX":121.0,"StartY":328.0,"EndX":121.0,"EndY":328.0}]},{"StartTime":181512.0,"Objects":[{"StartTime":181512.0,"EndTime":181742.0,"StartX":37.0,"StartY":358.0,"EndX":8.060843,"EndY":176.606842}]},{"StartTime":181858.0,"Objects":[{"StartTime":181858.0,"EndTime":181858.0,"StartX":58.0,"StartY":98.0,"EndX":58.0,"EndY":98.0}]},{"StartTime":181974.0,"Objects":[{"StartTime":181974.0,"EndTime":182089.0,"StartX":58.0,"StartY":98.0,"EndX":150.126,"EndY":106.04187}]},{"StartTime":182204.0,"Objects":[{"StartTime":182204.0,"EndTime":182377.0,"StartX":381.0,"StartY":158.0,"EndX":254.1083,"EndY":186.527328}]},{"StartTime":182435.0,"Objects":[{"StartTime":182435.0,"EndTime":182550.0,"StartX":214.0,"StartY":161.0,"EndX":222.465088,"EndY":254.116013}]},{"StartTime":182666.0,"Objects":[{"StartTime":182666.0,"EndTime":182666.0,"StartX":184.0,"StartY":337.0,"EndX":184.0,"EndY":337.0}]},{"StartTime":182781.0,"Objects":[{"StartTime":182781.0,"EndTime":183011.0,"StartX":278.0,"StartY":329.0,"EndX":460.104675,"EndY":344.549866}]},{"StartTime":183127.0,"Objects":[{"StartTime":183127.0,"EndTime":183357.0,"StartX":505.0,"StartY":267.0,"EndX":474.6805,"EndY":82.6349}]},{"StartTime":183474.0,"Objects":[{"StartTime":183474.0,"EndTime":183589.0,"StartX":403.0,"StartY":21.0,"EndX":384.290771,"EndY":108.182526}]},{"StartTime":183704.0,"Objects":[{"StartTime":183704.0,"EndTime":183704.0,"StartX":331.0,"StartY":198.0,"EndX":331.0,"EndY":198.0}]},{"StartTime":183820.0,"Objects":[{"StartTime":183820.0,"EndTime":184050.0,"StartX":287.0,"StartY":106.0,"EndX":124.792366,"EndY":82.3769}]},{"StartTime":184166.0,"Objects":[{"StartTime":184166.0,"EndTime":184166.0,"StartX":90.0,"StartY":168.0,"EndX":90.0,"EndY":168.0}]},{"StartTime":184281.0,"Objects":[{"StartTime":184281.0,"EndTime":184396.0,"StartX":29.0,"StartY":98.0,"EndX":36.2351723,"EndY":5.014922}]},{"StartTime":184512.0,"Objects":[{"StartTime":184512.0,"EndTime":184627.0,"StartX":183.0,"StartY":152.0,"EndX":175.764832,"EndY":244.985077}]},{"StartTime":184743.0,"Objects":[{"StartTime":184743.0,"EndTime":184973.0,"StartX":134.0,"StartY":324.0,"EndX":308.5132,"EndY":304.641235}]},{"StartTime":185089.0,"Objects":[{"StartTime":185089.0,"EndTime":185089.0,"StartX":370.0,"StartY":231.0,"EndX":370.0,"EndY":231.0}]},{"StartTime":185204.0,"Objects":[{"StartTime":185204.0,"EndTime":185434.0,"StartX":357.0,"StartY":132.0,"EndX":182.486786,"EndY":151.358765}]},{"StartTime":185551.0,"Objects":[{"StartTime":185551.0,"EndTime":185551.0,"StartX":102.0,"StartY":104.0,"EndX":102.0,"EndY":104.0}]},{"StartTime":185666.0,"Objects":[{"StartTime":185666.0,"EndTime":185781.0,"StartX":102.0,"StartY":104.0,"EndX":91.49733,"EndY":11.0917435}]},{"StartTime":185897.0,"Objects":[{"StartTime":185897.0,"EndTime":186070.0,"StartX":103.0,"StartY":202.0,"EndX":73.73589,"EndY":331.837036}]},{"StartTime":186127.0,"Objects":[{"StartTime":186127.0,"EndTime":186242.0,"StartX":101.0,"StartY":371.0,"EndX":194.129517,"EndY":362.684875}]},{"StartTime":186358.0,"Objects":[{"StartTime":186358.0,"EndTime":186358.0,"StartX":281.0,"StartY":384.0,"EndX":281.0,"EndY":384.0}]},{"StartTime":186474.0,"Objects":[{"StartTime":186474.0,"EndTime":186704.0,"StartX":254.0,"StartY":295.0,"EndX":233.4666,"EndY":109.158974}]},{"StartTime":186820.0,"Objects":[{"StartTime":186820.0,"EndTime":187050.0,"StartX":274.0,"StartY":29.0,"EndX":433.080933,"EndY":67.00046}]},{"StartTime":187166.0,"Objects":[{"StartTime":187166.0,"EndTime":187166.0,"StartX":509.0,"StartY":130.0,"EndX":509.0,"EndY":130.0}]},{"StartTime":187281.0,"Objects":[{"StartTime":187281.0,"EndTime":187396.0,"StartX":422.0,"StartY":165.0,"EndX":340.965149,"EndY":211.540863}]},{"StartTime":187512.0,"Objects":[{"StartTime":187512.0,"EndTime":187742.0,"StartX":268.0,"StartY":273.0,"EndX":105.566551,"EndY":242.5436}]},{"StartTime":187858.0,"Objects":[{"StartTime":187858.0,"EndTime":187858.0,"StartX":25.0,"StartY":205.0,"EndX":25.0,"EndY":205.0}]},{"StartTime":187974.0,"Objects":[{"StartTime":187974.0,"EndTime":188089.0,"StartX":36.0,"StartY":296.0,"EndX":42.7299232,"EndY":389.257477}]},{"StartTime":188204.0,"Objects":[{"StartTime":188204.0,"EndTime":188319.0,"StartX":95.0,"StartY":151.0,"EndX":88.27008,"EndY":57.7425156}]},{"StartTime":188435.0,"Objects":[{"StartTime":188435.0,"EndTime":188665.0,"StartX":164.0,"StartY":6.0,"EndX":347.91684,"EndY":29.5906925}]},{"StartTime":188781.0,"Objects":[{"StartTime":188781.0,"EndTime":188781.0,"StartX":438.0,"StartY":57.0,"EndX":438.0,"EndY":57.0}]},{"StartTime":188897.0,"Objects":[{"StartTime":188897.0,"EndTime":189127.0,"StartX":367.0,"StartY":123.0,"EndX":183.083176,"EndY":99.4093}]},{"StartTime":189243.0,"Objects":[{"StartTime":189243.0,"EndTime":189243.0,"StartX":95.0,"StartY":151.0,"EndX":95.0,"EndY":151.0}]},{"StartTime":189358.0,"Objects":[{"StartTime":189358.0,"EndTime":189473.0,"StartX":95.0,"StartY":151.0,"EndX":105.123306,"EndY":243.950363}]},{"StartTime":189589.0,"Objects":[{"StartTime":189589.0,"EndTime":189819.0,"StartX":54.0,"StartY":321.0,"EndX":211.608444,"EndY":357.31778}]},{"StartTime":189935.0,"Objects":[{"StartTime":189935.0,"EndTime":189935.0,"StartX":285.0,"StartY":305.0,"EndX":285.0,"EndY":305.0}]},{"StartTime":190051.0,"Objects":[{"StartTime":190051.0,"EndTime":190166.0,"StartX":370.0,"StartY":338.0,"EndX":456.4452,"EndY":316.0075}]},{"StartTime":190281.0,"Objects":[{"StartTime":190281.0,"EndTime":190511.0,"StartX":497.0,"StartY":235.0,"EndX":468.630341,"EndY":50.24517}]},{"StartTime":190627.0,"Objects":[{"StartTime":190627.0,"EndTime":190627.0,"StartX":387.0,"StartY":10.0,"EndX":387.0,"EndY":10.0}]},{"StartTime":190743.0,"Objects":[{"StartTime":190743.0,"EndTime":190858.0,"StartX":387.0,"StartY":10.0,"EndX":377.603363,"EndY":103.026627}]},{"StartTime":190974.0,"Objects":[{"StartTime":190974.0,"EndTime":191089.0,"StartX":294.0,"StartY":258.0,"EndX":303.396637,"EndY":164.973373}]},{"StartTime":191204.0,"Objects":[{"StartTime":191204.0,"EndTime":191434.0,"StartX":291.0,"StartY":73.0,"EndX":133.226776,"EndY":37.35746}]},{"StartTime":191551.0,"Objects":[{"StartTime":191551.0,"EndTime":191551.0,"StartX":110.0,"StartY":126.0,"EndX":110.0,"EndY":126.0}]},{"StartTime":191666.0,"Objects":[{"StartTime":191666.0,"EndTime":191781.0,"StartX":161.0,"StartY":202.0,"EndX":240.658936,"EndY":163.280289}]},{"StartTime":191897.0,"Objects":[{"StartTime":191897.0,"EndTime":192012.0,"StartX":133.0,"StartY":37.0,"EndX":45.915966,"EndY":57.7577744}]},{"StartTime":192127.0,"Objects":[{"StartTime":192127.0,"EndTime":192819.0,"StartX":13.0,"StartY":160.0,"EndX":492.059631,"EndY":209.3214}]},{"StartTime":193051.0,"Objects":[{"StartTime":193051.0,"EndTime":193051.0,"StartX":373.0,"StartY":263.0,"EndX":373.0,"EndY":263.0}]},{"StartTime":193974.0,"Objects":[{"StartTime":193974.0,"EndTime":194666.0,"StartX":13.0,"StartY":224.0,"EndX":492.059631,"EndY":174.6786}]},{"StartTime":194898.0,"Objects":[{"StartTime":194898.0,"EndTime":194898.0,"StartX":373.0,"StartY":121.0,"EndX":373.0,"EndY":121.0}]},{"StartTime":195127.0,"Objects":[{"StartTime":195127.0,"EndTime":195127.0,"StartX":139.0,"StartY":263.0,"EndX":139.0,"EndY":263.0}]},{"StartTime":195358.0,"Objects":[{"StartTime":195358.0,"EndTime":195358.0,"StartX":343.0,"StartY":342.0,"EndX":343.0,"EndY":342.0}]},{"StartTime":195589.0,"Objects":[{"StartTime":195589.0,"EndTime":195704.0,"StartX":373.0,"StartY":121.0,"EndX":361.7968,"EndY":28.1736145}]},{"StartTime":195820.0,"Objects":[{"StartTime":195820.0,"EndTime":195935.0,"StartX":232.0,"StartY":190.0,"EndX":251.556152,"EndY":275.567963}]},{"StartTime":196051.0,"Objects":[{"StartTime":196051.0,"EndTime":196166.0,"StartX":447.0,"StartY":186.0,"EndX":466.890839,"EndY":100.252876}]},{"StartTime":196281.0,"Objects":[{"StartTime":196281.0,"EndTime":196281.0,"StartX":327.0,"StartY":213.0,"EndX":327.0,"EndY":213.0}]},{"StartTime":196397.0,"Objects":[{"StartTime":196397.0,"EndTime":196397.0,"StartX":512.0,"StartY":262.0,"EndX":512.0,"EndY":262.0}]},{"StartTime":196454.0,"Objects":[{"StartTime":196454.0,"EndTime":196454.0,"StartX":496.0,"StartY":271.0,"EndX":496.0,"EndY":271.0}]},{"StartTime":196512.0,"Objects":[{"StartTime":196512.0,"EndTime":196512.0,"StartX":483.0,"StartY":284.0,"EndX":483.0,"EndY":284.0}]},{"StartTime":196570.0,"Objects":[{"StartTime":196570.0,"EndTime":196570.0,"StartX":472.0,"StartY":299.0,"EndX":472.0,"EndY":299.0}]},{"StartTime":196627.0,"Objects":[{"StartTime":196627.0,"EndTime":196627.0,"StartX":463.0,"StartY":316.0,"EndX":463.0,"EndY":316.0}]},{"StartTime":196685.0,"Objects":[{"StartTime":196685.0,"EndTime":196685.0,"StartX":456.0,"StartY":335.0,"EndX":456.0,"EndY":335.0}]},{"StartTime":196743.0,"Objects":[{"StartTime":196743.0,"EndTime":196743.0,"StartX":452.0,"StartY":358.0,"EndX":452.0,"EndY":358.0}]},{"StartTime":196801.0,"Objects":[{"StartTime":196801.0,"EndTime":196801.0,"StartX":426.0,"StartY":322.0,"EndX":426.0,"EndY":322.0}]},{"StartTime":196858.0,"Objects":[{"StartTime":196858.0,"EndTime":196858.0,"StartX":390.0,"StartY":303.0,"EndX":390.0,"EndY":303.0}]},{"StartTime":196916.0,"Objects":[{"StartTime":196916.0,"EndTime":196916.0,"StartX":347.0,"StartY":295.0,"EndX":347.0,"EndY":295.0}]},{"StartTime":196974.0,"Objects":[{"StartTime":196974.0,"EndTime":196974.0,"StartX":303.0,"StartY":298.0,"EndX":303.0,"EndY":298.0}]},{"StartTime":197031.0,"Objects":[{"StartTime":197031.0,"EndTime":197031.0,"StartX":269.0,"StartY":319.0,"EndX":269.0,"EndY":319.0}]},{"StartTime":197089.0,"Objects":[{"StartTime":197089.0,"EndTime":197089.0,"StartX":240.0,"StartY":350.0,"EndX":240.0,"EndY":350.0}]},{"StartTime":197147.0,"Objects":[{"StartTime":197147.0,"EndTime":197147.0,"StartX":199.0,"StartY":361.0,"EndX":199.0,"EndY":361.0}]},{"StartTime":197204.0,"Objects":[{"StartTime":197204.0,"EndTime":197204.0,"StartX":151.0,"StartY":345.0,"EndX":151.0,"EndY":345.0}]},{"StartTime":197262.0,"Objects":[{"StartTime":197262.0,"EndTime":197262.0,"StartX":112.0,"StartY":305.0,"EndX":112.0,"EndY":305.0}]},{"StartTime":197320.0,"Objects":[{"StartTime":197320.0,"EndTime":197320.0,"StartX":104.0,"StartY":251.0,"EndX":104.0,"EndY":251.0}]},{"StartTime":197377.0,"Objects":[{"StartTime":197377.0,"EndTime":197377.0,"StartX":127.0,"StartY":202.0,"EndX":127.0,"EndY":202.0}]},{"StartTime":197435.0,"Objects":[{"StartTime":197435.0,"EndTime":197435.0,"StartX":172.0,"StartY":171.0,"EndX":172.0,"EndY":171.0}]},{"StartTime":197493.0,"Objects":[{"StartTime":197493.0,"EndTime":197493.0,"StartX":226.0,"StartY":173.0,"EndX":226.0,"EndY":173.0}]},{"StartTime":197551.0,"Objects":[{"StartTime":197551.0,"EndTime":197551.0,"StartX":267.0,"StartY":207.0,"EndX":267.0,"EndY":207.0}]},{"StartTime":197608.0,"Objects":[{"StartTime":197608.0,"EndTime":197608.0,"StartX":319.0,"StartY":215.0,"EndX":319.0,"EndY":215.0}]},{"StartTime":197666.0,"Objects":[{"StartTime":197666.0,"EndTime":197896.0,"StartX":364.0,"StartY":185.0,"EndX":383.675659,"EndY":-0.795856953}]},{"StartTime":198012.0,"Objects":[{"StartTime":198012.0,"EndTime":198012.0,"StartX":293.0,"StartY":44.0,"EndX":293.0,"EndY":44.0}]},{"StartTime":198127.0,"Objects":[{"StartTime":198127.0,"EndTime":198357.0,"StartX":464.0,"StartY":131.0,"EndX":444.324158,"EndY":316.795837}]},{"StartTime":198473.0,"Objects":[{"StartTime":198473.0,"EndTime":198473.0,"StartX":364.0,"StartY":185.0,"EndX":364.0,"EndY":185.0}]},{"StartTime":198589.0,"Objects":[{"StartTime":198589.0,"EndTime":198704.0,"StartX":249.0,"StartY":278.0,"EndX":157.693237,"EndY":258.432983}]},{"StartTime":198820.0,"Objects":[{"StartTime":198820.0,"EndTime":198820.0,"StartX":30.0,"StartY":99.0,"EndX":30.0,"EndY":99.0}]},{"StartTime":199051.0,"Objects":[{"StartTime":199051.0,"EndTime":199166.0,"StartX":30.0,"StartY":99.0,"EndX":121.198547,"EndY":78.93929}]},{"StartTime":199281.0,"Objects":[{"StartTime":199281.0,"EndTime":199281.0,"StartX":199.0,"StartY":27.0,"EndX":199.0,"EndY":27.0}]},{"StartTime":199396.0,"Objects":[{"StartTime":199396.0,"EndTime":199396.0,"StartX":113.0,"StartY":175.0,"EndX":113.0,"EndY":175.0}]},{"StartTime":199512.0,"Objects":[{"StartTime":199512.0,"EndTime":199742.0,"StartX":355.0,"StartY":186.0,"EndX":197.701172,"EndY":127.579979}]},{"StartTime":199858.0,"Objects":[{"StartTime":199858.0,"EndTime":199858.0,"StartX":113.0,"StartY":175.0,"EndX":113.0,"EndY":175.0}]},{"StartTime":199974.0,"Objects":[{"StartTime":199974.0,"EndTime":200089.0,"StartX":180.0,"StartY":321.0,"EndX":192.352448,"EndY":228.483368}]},{"StartTime":200204.0,"Objects":[{"StartTime":200204.0,"EndTime":200319.0,"StartX":16.0,"StartY":163.0,"EndX":3.64754772,"EndY":255.516632}]},{"StartTime":200435.0,"Objects":[{"StartTime":200435.0,"EndTime":200435.0,"StartX":86.0,"StartY":315.0,"EndX":86.0,"EndY":315.0}]},{"StartTime":200551.0,"Objects":[{"StartTime":200551.0,"EndTime":200551.0,"StartX":192.0,"StartY":228.0,"EndX":192.0,"EndY":228.0}]},{"StartTime":200666.0,"Objects":[{"StartTime":200666.0,"EndTime":200781.0,"StartX":71.0,"StartY":107.0,"EndX":72.2961349,"EndY":18.71524}]},{"StartTime":200897.0,"Objects":[{"StartTime":200897.0,"EndTime":201012.0,"StartX":268.0,"StartY":190.0,"EndX":266.703857,"EndY":278.28476}]},{"StartTime":201127.0,"Objects":[{"StartTime":201127.0,"EndTime":201242.0,"StartX":86.0,"StartY":200.0,"EndX":178.4856,"EndY":186.264511}]},{"StartTime":201358.0,"Objects":[{"StartTime":201358.0,"EndTime":201588.0,"StartX":512.0,"StartY":85.0,"EndX":351.186523,"EndY":33.4245834}]},{"StartTime":201704.0,"Objects":[{"StartTime":201704.0,"EndTime":201704.0,"StartX":247.0,"StartY":2.0,"EndX":247.0,"EndY":2.0}]},{"StartTime":201820.0,"Objects":[{"StartTime":201820.0,"EndTime":201935.0,"StartX":190.0,"StartY":93.0,"EndX":177.555588,"EndY":185.637482}]},{"StartTime":202051.0,"Objects":[{"StartTime":202051.0,"EndTime":202166.0,"StartX":357.0,"StartY":153.0,"EndX":374.613831,"EndY":244.751144}]},{"StartTime":202281.0,"Objects":[{"StartTime":202281.0,"EndTime":202281.0,"StartX":427.0,"StartY":341.0,"EndX":427.0,"EndY":341.0}]},{"StartTime":202397.0,"Objects":[{"StartTime":202397.0,"EndTime":202397.0,"StartX":449.0,"StartY":182.0,"EndX":449.0,"EndY":182.0}]},{"StartTime":202512.0,"Objects":[{"StartTime":202512.0,"EndTime":202627.0,"StartX":287.0,"StartY":258.0,"EndX":195.426254,"EndY":276.8812}]},{"StartTime":202743.0,"Objects":[{"StartTime":202743.0,"EndTime":202973.0,"StartX":10.0,"StartY":123.0,"EndX":178.229935,"EndY":185.23645}]},{"StartTime":203089.0,"Objects":[{"StartTime":203089.0,"EndTime":203089.0,"StartX":249.0,"StartY":122.0,"EndX":249.0,"EndY":122.0}]},{"StartTime":203204.0,"Objects":[{"StartTime":203204.0,"EndTime":203319.0,"StartX":173.0,"StartY":0.0,"EndX":161.9855,"EndY":92.66878}]},{"StartTime":203435.0,"Objects":[{"StartTime":203435.0,"EndTime":203550.0,"StartX":327.0,"StartY":194.0,"EndX":336.995483,"EndY":101.1419}]},{"StartTime":203666.0,"Objects":[{"StartTime":203666.0,"EndTime":203896.0,"StartX":78.0,"StartY":274.0,"EndX":236.651749,"EndY":230.360184}]},{"StartTime":204012.0,"Objects":[{"StartTime":204012.0,"EndTime":204012.0,"StartX":297.0,"StartY":307.0,"EndX":297.0,"EndY":307.0}]},{"StartTime":204127.0,"Objects":[{"StartTime":204127.0,"EndTime":204242.0,"StartX":379.0,"StartY":366.0,"EndX":389.872437,"EndY":273.252167}]},{"StartTime":204358.0,"Objects":[{"StartTime":204358.0,"EndTime":204358.0,"StartX":327.0,"StartY":194.0,"EndX":327.0,"EndY":194.0}]},{"StartTime":204474.0,"Objects":[{"StartTime":204474.0,"EndTime":204474.0,"StartX":357.0,"StartY":100.0,"EndX":357.0,"EndY":100.0}]},{"StartTime":204589.0,"Objects":[{"StartTime":204589.0,"EndTime":204704.0,"StartX":512.0,"StartY":159.0,"EndX":420.056519,"EndY":175.989563}]},{"StartTime":204820.0,"Objects":[{"StartTime":204820.0,"EndTime":204820.0,"StartX":268.0,"StartY":121.0,"EndX":268.0,"EndY":121.0}]},{"StartTime":204935.0,"Objects":[{"StartTime":204935.0,"EndTime":204935.0,"StartX":385.0,"StartY":12.0,"EndX":385.0,"EndY":12.0}]},{"StartTime":205051.0,"Objects":[{"StartTime":205051.0,"EndTime":205281.0,"StartX":357.0,"StartY":100.0,"EndX":171.487839,"EndY":76.45785}]},{"StartTime":205397.0,"Objects":[{"StartTime":205397.0,"EndTime":205397.0,"StartX":1.0,"StartY":107.0,"EndX":1.0,"EndY":107.0}]},{"StartTime":205512.0,"Objects":[{"StartTime":205512.0,"EndTime":205627.0,"StartX":78.0,"StartY":143.0,"EndX":79.69282,"EndY":55.3405647}]},{"StartTime":205743.0,"Objects":[{"StartTime":205743.0,"EndTime":205858.0,"StartX":1.0,"StartY":291.0,"EndX":-0.692820549,"EndY":378.659424}]},{"StartTime":205974.0,"Objects":[{"StartTime":205974.0,"EndTime":206089.0,"StartX":130.0,"StartY":229.0,"EndX":37.09983,"EndY":218.426}]},{"StartTime":206204.0,"Objects":[{"StartTime":206204.0,"EndTime":206204.0,"StartX":183.0,"StartY":327.0,"EndX":183.0,"EndY":327.0}]},{"StartTime":206320.0,"Objects":[{"StartTime":206320.0,"EndTime":206320.0,"StartX":234.0,"StartY":177.0,"EndX":234.0,"EndY":177.0}]},{"StartTime":206435.0,"Objects":[{"StartTime":206435.0,"EndTime":206665.0,"StartX":286.0,"StartY":277.0,"EndX":455.482452,"EndY":240.731247}]},{"StartTime":206781.0,"Objects":[{"StartTime":206781.0,"EndTime":206781.0,"StartX":425.0,"StartY":123.0,"EndX":425.0,"EndY":123.0}]},{"StartTime":206897.0,"Objects":[{"StartTime":206897.0,"EndTime":207127.0,"StartX":322.0,"StartY":180.0,"EndX":140.309723,"EndY":142.40213}]},{"StartTime":207358.0,"Objects":[{"StartTime":207358.0,"EndTime":207473.0,"StartX":140.0,"StartY":142.0,"EndX":153.4727,"EndY":234.372437}]},{"StartTime":207589.0,"Objects":[{"StartTime":207589.0,"EndTime":207704.0,"StartX":323.0,"StartY":370.0,"EndX":309.527283,"EndY":277.627563}]},{"StartTime":207820.0,"Objects":[{"StartTime":207820.0,"EndTime":208050.0,"StartX":62.0,"StartY":268.0,"EndX":218.93959,"EndY":302.681671}]},{"StartTime":208166.0,"Objects":[{"StartTime":208166.0,"EndTime":208166.0,"StartX":243.0,"StartY":204.0,"EndX":243.0,"EndY":204.0}]},{"StartTime":208281.0,"Objects":[{"StartTime":208281.0,"EndTime":208396.0,"StartX":309.0,"StartY":277.0,"EndX":401.9958,"EndY":286.534271}]},{"StartTime":208512.0,"Objects":[{"StartTime":208512.0,"EndTime":208627.0,"StartX":461.0,"StartY":105.0,"EndX":368.04953,"EndY":94.88924}]},{"StartTime":208743.0,"Objects":[{"StartTime":208743.0,"EndTime":209204.0,"StartX":481.0,"StartY":338.0,"EndX":481.0,"EndY":338.0}]},{"StartTime":209320.0,"Objects":[{"StartTime":209320.0,"EndTime":209320.0,"StartX":323.0,"StartY":370.0,"EndX":323.0,"EndY":370.0}]},{"StartTime":209435.0,"Objects":[{"StartTime":209435.0,"EndTime":209550.0,"StartX":309.0,"StartY":277.0,"EndX":294.111755,"EndY":184.692947}]},{"StartTime":209666.0,"Objects":[{"StartTime":209666.0,"EndTime":209781.0,"StartX":145.0,"StartY":71.0,"EndX":232.516,"EndY":103.912}]},{"StartTime":209897.0,"Objects":[{"StartTime":209897.0,"EndTime":210012.0,"StartX":401.0,"StartY":28.0,"EndX":328.206665,"EndY":86.68034}]},{"StartTime":210127.0,"Objects":[{"StartTime":210127.0,"EndTime":210127.0,"StartX":206.0,"StartY":195.0,"EndX":206.0,"EndY":195.0}]},{"StartTime":210243.0,"Objects":[{"StartTime":210243.0,"EndTime":210243.0,"StartX":263.0,"StartY":16.0,"EndX":263.0,"EndY":16.0}]},{"StartTime":210358.0,"Objects":[{"StartTime":210358.0,"EndTime":210358.0,"StartX":380.0,"StartY":159.0,"EndX":380.0,"EndY":159.0}]},{"StartTime":210589.0,"Objects":[{"StartTime":210589.0,"EndTime":210704.0,"StartX":380.0,"StartY":159.0,"EndX":288.275177,"EndY":141.066971}]},{"StartTime":210820.0,"Objects":[{"StartTime":210820.0,"EndTime":210820.0,"StartX":197.0,"StartY":96.0,"EndX":197.0,"EndY":96.0}]},{"StartTime":210935.0,"Objects":[{"StartTime":210935.0,"EndTime":210935.0,"StartX":116.0,"StartY":158.0,"EndX":116.0,"EndY":158.0}]},{"StartTime":211051.0,"Objects":[{"StartTime":211051.0,"EndTime":211166.0,"StartX":12.0,"StartY":43.0,"EndX":103.829834,"EndY":60.2085228}]},{"StartTime":211281.0,"Objects":[{"StartTime":211281.0,"EndTime":211281.0,"StartX":206.0,"StartY":195.0,"EndX":206.0,"EndY":195.0}]},{"StartTime":211397.0,"Objects":[{"StartTime":211397.0,"EndTime":211397.0,"StartX":278.0,"StartY":43.0,"EndX":278.0,"EndY":43.0}]},{"StartTime":211512.0,"Objects":[{"StartTime":211512.0,"EndTime":211742.0,"StartX":448.0,"StartY":187.0,"EndX":287.3157,"EndY":140.56459}]},{"StartTime":211858.0,"Objects":[{"StartTime":211858.0,"EndTime":211858.0,"StartX":197.0,"StartY":96.0,"EndX":197.0,"EndY":96.0}]},{"StartTime":211974.0,"Objects":[{"StartTime":211974.0,"EndTime":211974.0,"StartX":206.0,"StartY":195.0,"EndX":206.0,"EndY":195.0}]},{"StartTime":212089.0,"Objects":[{"StartTime":212089.0,"EndTime":212089.0,"StartX":353.0,"StartY":85.0,"EndX":353.0,"EndY":85.0}]},{"StartTime":212204.0,"Objects":[{"StartTime":212204.0,"EndTime":212204.0,"StartX":234.0,"StartY":360.0,"EndX":234.0,"EndY":360.0}]},{"StartTime":212320.0,"Objects":[{"StartTime":212320.0,"EndTime":212320.0,"StartX":116.0,"StartY":158.0,"EndX":116.0,"EndY":158.0}]},{"StartTime":212435.0,"Objects":[{"StartTime":212435.0,"EndTime":212665.0,"StartX":320.0,"StartY":269.0,"EndX":504.5984,"EndY":239.321167}]},{"StartTime":212781.0,"Objects":[{"StartTime":212781.0,"EndTime":212781.0,"StartX":456.0,"StartY":334.0,"EndX":456.0,"EndY":334.0}]},{"StartTime":212897.0,"Objects":[{"StartTime":212897.0,"EndTime":213127.0,"StartX":354.0,"StartY":166.0,"EndX":169.401627,"EndY":195.678833}]},{"StartTime":213243.0,"Objects":[{"StartTime":213243.0,"EndTime":213243.0,"StartX":65.0,"StartY":238.0,"EndX":65.0,"EndY":238.0}]},{"StartTime":213358.0,"Objects":[{"StartTime":213358.0,"EndTime":213473.0,"StartX":129.0,"StartY":370.0,"EndX":144.934341,"EndY":277.980225}]},{"StartTime":213589.0,"Objects":[{"StartTime":213589.0,"EndTime":213589.0,"StartX":81.0,"StartY":67.0,"EndX":81.0,"EndY":67.0}]},{"StartTime":213820.0,"Objects":[{"StartTime":213820.0,"EndTime":213935.0,"StartX":81.0,"StartY":67.0,"EndX":96.02034,"EndY":159.207748}]},{"StartTime":214051.0,"Objects":[{"StartTime":214051.0,"EndTime":214051.0,"StartX":60.0,"StartY":324.0,"EndX":60.0,"EndY":324.0}]},{"StartTime":214166.0,"Objects":[{"StartTime":214166.0,"EndTime":214166.0,"StartX":224.0,"StartY":263.0,"EndX":224.0,"EndY":263.0}]},{"StartTime":214281.0,"Objects":[{"StartTime":214281.0,"EndTime":214396.0,"StartX":65.0,"StartY":238.0,"EndX":-28.1450958,"EndY":229.861115}]},{"StartTime":214512.0,"Objects":[{"StartTime":214512.0,"EndTime":214512.0,"StartX":130.0,"StartY":367.0,"EndX":130.0,"EndY":367.0}]},{"StartTime":214628.0,"Objects":[{"StartTime":214628.0,"EndTime":214628.0,"StartX":304.0,"StartY":314.0,"EndX":304.0,"EndY":314.0}]},{"StartTime":214743.0,"Objects":[{"StartTime":214743.0,"EndTime":214858.0,"StartX":224.0,"StartY":263.0,"EndX":221.139755,"EndY":349.521759}]},{"StartTime":214974.0,"Objects":[{"StartTime":214974.0,"EndTime":215089.0,"StartX":366.0,"StartY":147.0,"EndX":368.186127,"EndY":60.66312}]},{"StartTime":215204.0,"Objects":[{"StartTime":215204.0,"EndTime":215204.0,"StartX":204.0,"StartY":176.0,"EndX":204.0,"EndY":176.0}]},{"StartTime":215320.0,"Objects":[{"StartTime":215320.0,"EndTime":215320.0,"StartX":361.0,"StartY":243.0,"EndX":361.0,"EndY":243.0}]},{"StartTime":215435.0,"Objects":[{"StartTime":215435.0,"EndTime":215550.0,"StartX":294.0,"StartY":103.0,"EndX":287.3384,"EndY":196.26239}]},{"StartTime":215666.0,"Objects":[{"StartTime":215666.0,"EndTime":215896.0,"StartX":50.0,"StartY":91.0,"EndX":215.9359,"EndY":49.82467}]},{"StartTime":216012.0,"Objects":[{"StartTime":216012.0,"EndTime":216012.0,"StartX":432.0,"StartY":36.0,"EndX":432.0,"EndY":36.0}]},{"StartTime":216070.0,"Objects":[{"StartTime":216070.0,"EndTime":216070.0,"StartX":432.0,"StartY":36.0,"EndX":432.0,"EndY":36.0}]},{"StartTime":216127.0,"Objects":[{"StartTime":216127.0,"EndTime":216242.0,"StartX":432.0,"StartY":36.0,"EndX":340.248383,"EndY":18.7270851}]},{"StartTime":216358.0,"Objects":[{"StartTime":216358.0,"EndTime":216473.0,"StartX":393.0,"StartY":222.0,"EndX":461.9513,"EndY":159.0376}]},{"StartTime":216589.0,"Objects":[{"StartTime":216589.0,"EndTime":216819.0,"StartX":295.0,"StartY":134.0,"EndX":124.90863,"EndY":191.58371}]},{"StartTime":216935.0,"Objects":[{"StartTime":216935.0,"EndTime":216935.0,"StartX":48.0,"StartY":248.0,"EndX":48.0,"EndY":248.0}]},{"StartTime":217051.0,"Objects":[{"StartTime":217051.0,"EndTime":217166.0,"StartX":18.0,"StartY":62.0,"EndX":39.7845459,"EndY":152.926819}]},{"StartTime":217281.0,"Objects":[{"StartTime":217281.0,"EndTime":217511.0,"StartX":131.0,"StartY":296.0,"EndX":138.325424,"EndY":115.545959}]},{"StartTime":217627.0,"Objects":[{"StartTime":217627.0,"EndTime":217742.0,"StartX":279.0,"StartY":110.0,"EndX":219.329285,"EndY":181.983734}]},{"StartTime":217858.0,"Objects":[{"StartTime":217858.0,"EndTime":217858.0,"StartX":131.0,"StartY":296.0,"EndX":131.0,"EndY":296.0}]},{"StartTime":217974.0,"Objects":[{"StartTime":217974.0,"EndTime":218089.0,"StartX":194.0,"StartY":368.0,"EndX":224.419708,"EndY":284.240326}]},{"StartTime":218204.0,"Objects":[{"StartTime":218204.0,"EndTime":218319.0,"StartX":48.0,"StartY":248.0,"EndX":46.1122551,"EndY":337.2285}]},{"StartTime":218435.0,"Objects":[{"StartTime":218435.0,"EndTime":218550.0,"StartX":274.0,"StartY":225.0,"EndX":294.7216,"EndY":133.825073}]},{"StartTime":218666.0,"Objects":[{"StartTime":218666.0,"EndTime":218781.0,"StartX":2.0,"StartY":80.0,"EndX":22.0704327,"EndY":171.320465}]},{"StartTime":218897.0,"Objects":[{"StartTime":218897.0,"EndTime":219070.0,"StartX":254.0,"StartY":53.0,"EndX":135.86232,"EndY":12.4319439}]},{"StartTime":219127.0,"Objects":[{"StartTime":219127.0,"EndTime":219300.0,"StartX":195.0,"StartY":199.0,"EndX":264.2744,"EndY":138.449768}]},{"StartTime":219358.0,"Objects":[{"StartTime":219358.0,"EndTime":219531.0,"StartX":82.0,"StartY":73.0,"EndX":120.65477,"EndY":180.8838}]},{"StartTime":219589.0,"Objects":[{"StartTime":219589.0,"EndTime":219704.0,"StartX":171.0,"StartY":134.0,"EndX":179.589081,"EndY":78.56141}]},{"StartTime":219820.0,"Objects":[{"StartTime":219820.0,"EndTime":220050.0,"StartX":327.0,"StartY":237.0,"EndX":163.564453,"EndY":269.7495}]},{"StartTime":220166.0,"Objects":[{"StartTime":220166.0,"EndTime":220166.0,"StartX":0.0,"StartY":315.0,"EndX":0.0,"EndY":315.0}]},{"StartTime":220281.0,"Objects":[{"StartTime":220281.0,"EndTime":220396.0,"StartX":71.0,"StartY":260.0,"EndX":75.8352661,"EndY":348.541321}]},{"StartTime":220512.0,"Objects":[{"StartTime":220512.0,"EndTime":220627.0,"StartX":96.0,"StartY":99.0,"EndX":91.1647339,"EndY":10.4586678}]},{"StartTime":220743.0,"Objects":[{"StartTime":220743.0,"EndTime":220858.0,"StartX":121.0,"StartY":182.0,"EndX":28.03209,"EndY":172.039154}]},{"StartTime":220974.0,"Objects":[{"StartTime":220974.0,"EndTime":220974.0,"StartX":161.0,"StartY":53.0,"EndX":161.0,"EndY":53.0}]},{"StartTime":221089.0,"Objects":[{"StartTime":221089.0,"EndTime":221089.0,"StartX":242.0,"StartY":151.0,"EndX":242.0,"EndY":151.0}]},{"StartTime":221204.0,"Objects":[{"StartTime":221204.0,"EndTime":221434.0,"StartX":281.0,"StartY":9.0,"EndX":451.501068,"EndY":42.301693}]},{"StartTime":221551.0,"Objects":[{"StartTime":221551.0,"EndTime":221551.0,"StartX":389.0,"StartY":306.0,"EndX":389.0,"EndY":306.0}]},{"StartTime":221608.0,"Objects":[{"StartTime":221608.0,"EndTime":221608.0,"StartX":389.0,"StartY":306.0,"EndX":389.0,"EndY":306.0}]},{"StartTime":221666.0,"Objects":[{"StartTime":221666.0,"EndTime":221781.0,"StartX":389.0,"StartY":306.0,"EndX":369.661743,"EndY":217.040436}]},{"StartTime":221897.0,"Objects":[{"StartTime":221897.0,"EndTime":222127.0,"StartX":427.0,"StartY":130.0,"EndX":241.097244,"EndY":150.227753}]},{"StartTime":222243.0,"Objects":[{"StartTime":222243.0,"EndTime":222243.0,"StartX":120.0,"StartY":283.0,"EndX":120.0,"EndY":283.0}]},{"StartTime":222358.0,"Objects":[{"StartTime":222358.0,"EndTime":222473.0,"StartX":210.0,"StartY":299.0,"EndX":180.168533,"EndY":210.728531}]},{"StartTime":222589.0,"Objects":[{"StartTime":222589.0,"EndTime":222704.0,"StartX":267.0,"StartY":2.0,"EndX":204.82106,"EndY":71.31101}]},{"StartTime":222820.0,"Objects":[{"StartTime":222820.0,"EndTime":222935.0,"StartX":0.0,"StartY":103.0,"EndX":91.43494,"EndY":120.97924}]},{"StartTime":223051.0,"Objects":[{"StartTime":223051.0,"EndTime":223166.0,"StartX":301.0,"StartY":317.0,"EndX":209.844879,"EndY":297.902832}]},{"StartTime":223281.0,"Objects":[{"StartTime":223281.0,"EndTime":223281.0,"StartX":122.0,"StartY":344.0,"EndX":122.0,"EndY":344.0}]},{"StartTime":223397.0,"Objects":[{"StartTime":223397.0,"EndTime":223397.0,"StartX":180.0,"StartY":210.0,"EndX":180.0,"EndY":210.0}]},{"StartTime":223512.0,"Objects":[{"StartTime":223512.0,"EndTime":223742.0,"StartX":323.0,"StartY":244.0,"EndX":480.961945,"EndY":181.950119}]},{"StartTime":223858.0,"Objects":[{"StartTime":223858.0,"EndTime":224088.0,"StartX":425.0,"StartY":99.0,"EndX":267.038055,"EndY":161.049881}]},{"StartTime":224204.0,"Objects":[{"StartTime":224204.0,"EndTime":224319.0,"StartX":180.0,"StartY":210.0,"EndX":87.12355,"EndY":199.2197}]},{"StartTime":224435.0,"Objects":[{"StartTime":224435.0,"EndTime":224435.0,"StartX":5.0,"StartY":166.0,"EndX":5.0,"EndY":166.0}]},{"StartTime":224551.0,"Objects":[{"StartTime":224551.0,"EndTime":224551.0,"StartX":64.0,"StartY":286.0,"EndX":64.0,"EndY":286.0}]},{"StartTime":224666.0,"Objects":[{"StartTime":224666.0,"EndTime":224781.0,"StartX":154.0,"StartY":124.0,"EndX":158.953,"EndY":36.01687}]},{"StartTime":224897.0,"Objects":[{"StartTime":224897.0,"EndTime":224897.0,"StartX":84.0,"StartY":78.0,"EndX":84.0,"EndY":78.0}]},{"StartTime":225012.0,"Objects":[{"StartTime":225012.0,"EndTime":225012.0,"StartX":241.0,"StartY":118.0,"EndX":241.0,"EndY":118.0}]},{"StartTime":225127.0,"Objects":[{"StartTime":225127.0,"EndTime":225242.0,"StartX":84.0,"StartY":78.0,"EndX":-8.904526,"EndY":88.53557}]},{"StartTime":225358.0,"Objects":[{"StartTime":225358.0,"EndTime":225588.0,"StartX":149.0,"StartY":260.0,"EndX":329.855469,"EndY":271.825836}]},{"StartTime":225704.0,"Objects":[{"StartTime":225704.0,"EndTime":225934.0,"StartX":448.0,"StartY":184.0,"EndX":285.0467,"EndY":197.138382}]},{"StartTime":226051.0,"Objects":[{"StartTime":226051.0,"EndTime":226166.0,"StartX":406.0,"StartY":360.0,"EndX":416.920715,"EndY":267.141541}]},{"StartTime":226281.0,"Objects":[{"StartTime":226281.0,"EndTime":226281.0,"StartX":380.0,"StartY":80.0,"EndX":380.0,"EndY":80.0}]},{"StartTime":226512.0,"Objects":[{"StartTime":226512.0,"EndTime":226512.0,"StartX":380.0,"StartY":80.0,"EndX":380.0,"EndY":80.0}]},{"StartTime":226627.0,"Objects":[{"StartTime":226627.0,"EndTime":226627.0,"StartX":502.0,"StartY":257.0,"EndX":502.0,"EndY":257.0}]},{"StartTime":226743.0,"Objects":[{"StartTime":226743.0,"EndTime":226743.0,"StartX":480.0,"StartY":115.0,"EndX":480.0,"EndY":115.0}]},{"StartTime":226858.0,"Objects":[{"StartTime":226858.0,"EndTime":226858.0,"StartX":396.0,"StartY":231.0,"EndX":396.0,"EndY":231.0}]},{"StartTime":226974.0,"Objects":[{"StartTime":226974.0,"EndTime":226974.0,"StartX":485.0,"StartY":129.0,"EndX":485.0,"EndY":129.0}]},{"StartTime":227089.0,"Objects":[{"StartTime":227089.0,"EndTime":227089.0,"StartX":393.0,"StartY":213.0,"EndX":393.0,"EndY":213.0}]},{"StartTime":227204.0,"Objects":[{"StartTime":227204.0,"EndTime":227896.0,"StartX":439.0,"StartY":171.0,"EndX":299.417358,"EndY":157.334564}]},{"StartTime":228588.0,"Objects":[{"StartTime":228588.0,"EndTime":229049.0,"StartX":299.0,"StartY":157.0,"EndX":278.438263,"EndY":242.273743}]},{"StartTime":229280.0,"Objects":[{"StartTime":229280.0,"EndTime":229741.0,"StartX":422.0,"StartY":93.0,"EndX":407.2133,"EndY":6.2437005}]},{"StartTime":229973.0,"Objects":[{"StartTime":229973.0,"EndTime":229973.0,"StartX":324.0,"StartY":0.0,"EndX":324.0,"EndY":0.0}]},{"StartTime":230204.0,"Objects":[{"StartTime":230204.0,"EndTime":230204.0,"StartX":238.0,"StartY":105.0,"EndX":238.0,"EndY":105.0}]},{"StartTime":230434.0,"Objects":[{"StartTime":230434.0,"EndTime":230434.0,"StartX":172.0,"StartY":136.0,"EndX":172.0,"EndY":136.0}]},{"StartTime":230665.0,"Objects":[{"StartTime":230665.0,"EndTime":230665.0,"StartX":180.0,"StartY":63.0,"EndX":180.0,"EndY":63.0}]},{"StartTime":230896.0,"Objects":[{"StartTime":230896.0,"EndTime":231588.0,"StartX":250.0,"StartY":215.0,"EndX":232.25943,"EndY":354.123444}]},{"StartTime":232280.0,"Objects":[{"StartTime":232280.0,"EndTime":232741.0,"StartX":232.0,"StartY":354.0,"EndX":139.6582,"EndY":368.671143}]},{"StartTime":232973.0,"Objects":[{"StartTime":232973.0,"EndTime":233434.0,"StartX":289.0,"StartY":280.0,"EndX":381.3418,"EndY":294.671143}]},{"StartTime":233665.0,"Objects":[{"StartTime":233665.0,"EndTime":233665.0,"StartX":212.0,"StartY":226.0,"EndX":212.0,"EndY":226.0}]},{"StartTime":233896.0,"Objects":[{"StartTime":233896.0,"EndTime":233896.0,"StartX":356.0,"StartY":119.0,"EndX":356.0,"EndY":119.0}]},{"StartTime":234127.0,"Objects":[{"StartTime":234127.0,"EndTime":234127.0,"StartX":304.0,"StartY":62.0,"EndX":304.0,"EndY":62.0}]},{"StartTime":234357.0,"Objects":[{"StartTime":234357.0,"EndTime":234357.0,"StartX":231.0,"StartY":74.0,"EndX":231.0,"EndY":74.0}]},{"StartTime":234588.0,"Objects":[{"StartTime":234588.0,"EndTime":235280.0,"StartX":73.0,"StartY":213.0,"EndX":212.582657,"EndY":226.665436}]},{"StartTime":235973.0,"Objects":[{"StartTime":235973.0,"EndTime":236434.0,"StartX":213.0,"StartY":227.0,"EndX":233.561722,"EndY":141.726257}]},{"StartTime":236665.0,"Objects":[{"StartTime":236665.0,"EndTime":237126.0,"StartX":90.0,"StartY":291.0,"EndX":104.846085,"EndY":376.903625}]},{"StartTime":237357.0,"Objects":[{"StartTime":237357.0,"EndTime":237587.0,"StartX":209.0,"StartY":330.0,"EndX":163.101791,"EndY":321.1165}]},{"StartTime":237819.0,"Objects":[{"StartTime":237819.0,"EndTime":237819.0,"StartX":122.0,"StartY":166.0,"EndX":122.0,"EndY":166.0}]},{"StartTime":238050.0,"Objects":[{"StartTime":238050.0,"EndTime":238050.0,"StartX":303.0,"StartY":228.0,"EndX":303.0,"EndY":228.0}]},{"StartTime":238280.0,"Objects":[{"StartTime":238280.0,"EndTime":238972.0,"StartX":198.0,"StartY":241.0,"EndX":178.171066,"EndY":116.4422}]},{"StartTime":239204.0,"Objects":[{"StartTime":239204.0,"EndTime":239204.0,"StartX":340.0,"StartY":37.0,"EndX":340.0,"EndY":37.0}]},{"StartTime":239434.0,"Objects":[{"StartTime":239434.0,"EndTime":239434.0,"StartX":402.0,"StartY":74.0,"EndX":402.0,"EndY":74.0}]},{"StartTime":239665.0,"Objects":[{"StartTime":239665.0,"EndTime":239665.0,"StartX":470.0,"StartY":63.0,"EndX":470.0,"EndY":63.0}]},{"StartTime":239896.0,"Objects":[{"StartTime":239896.0,"EndTime":239896.0,"StartX":427.0,"StartY":182.0,"EndX":427.0,"EndY":182.0}]},{"StartTime":240127.0,"Objects":[{"StartTime":240127.0,"EndTime":240127.0,"StartX":497.0,"StartY":206.0,"EndX":497.0,"EndY":206.0}]},{"StartTime":240357.0,"Objects":[{"StartTime":240357.0,"EndTime":240357.0,"StartX":362.0,"StartY":265.0,"EndX":362.0,"EndY":265.0}]},{"StartTime":240588.0,"Objects":[{"StartTime":240588.0,"EndTime":240588.0,"StartX":417.0,"StartY":309.0,"EndX":417.0,"EndY":309.0}]},{"StartTime":240819.0,"Objects":[{"StartTime":240819.0,"EndTime":240819.0,"StartX":429.0,"StartY":379.0,"EndX":429.0,"EndY":379.0}]},{"StartTime":241050.0,"Objects":[{"StartTime":241050.0,"EndTime":241050.0,"StartX":256.0,"StartY":224.0,"EndX":256.0,"EndY":224.0}]},{"StartTime":241280.0,"Objects":[{"StartTime":241280.0,"EndTime":241280.0,"StartX":219.0,"StartY":285.0,"EndX":219.0,"EndY":285.0}]},{"StartTime":241511.0,"Objects":[{"StartTime":241511.0,"EndTime":241511.0,"StartX":184.0,"StartY":198.0,"EndX":184.0,"EndY":198.0}]},{"StartTime":241742.0,"Objects":[{"StartTime":241742.0,"EndTime":241742.0,"StartX":162.0,"StartY":327.0,"EndX":162.0,"EndY":327.0}]},{"StartTime":241973.0,"Objects":[{"StartTime":241973.0,"EndTime":242434.0,"StartX":110.0,"StartY":203.0,"EndX":24.3897762,"EndY":218.017288}]},{"StartTime":242665.0,"Objects":[{"StartTime":242665.0,"EndTime":242895.0,"StartX":140.0,"StartY":135.0,"EndX":147.002945,"EndY":89.82105}]},{"StartTime":243127.0,"Objects":[{"StartTime":243127.0,"EndTime":243127.0,"StartX":96.0,"StartY":37.0,"EndX":96.0,"EndY":37.0}]},{"StartTime":243357.0,"Objects":[{"StartTime":243357.0,"EndTime":243357.0,"StartX":75.0,"StartY":103.0,"EndX":75.0,"EndY":103.0}]},{"StartTime":243588.0,"Objects":[{"StartTime":243588.0,"EndTime":243588.0,"StartX":215.0,"StartY":150.0,"EndX":215.0,"EndY":150.0}]},{"StartTime":243819.0,"Objects":[{"StartTime":243819.0,"EndTime":243819.0,"StartX":322.0,"StartY":47.0,"EndX":322.0,"EndY":47.0}]},{"StartTime":244050.0,"Objects":[{"StartTime":244050.0,"EndTime":244280.0,"StartX":396.0,"StartY":39.0,"EndX":442.3321,"EndY":32.76299}]},{"StartTime":244511.0,"Objects":[{"StartTime":244511.0,"EndTime":244972.0,"StartX":497.0,"StartY":144.0,"EndX":404.039,"EndY":133.9748}]},{"StartTime":245204.0,"Objects":[{"StartTime":245204.0,"EndTime":245204.0,"StartX":335.0,"StartY":257.0,"EndX":335.0,"EndY":257.0}]},{"StartTime":245434.0,"Objects":[{"StartTime":245434.0,"EndTime":246126.0,"StartX":363.0,"StartY":327.0,"EndX":389.61557,"EndY":210.388672}]},{"StartTime":246357.0,"Objects":[{"StartTime":246357.0,"EndTime":246357.0,"StartX":265.0,"StartY":264.0,"EndX":265.0,"EndY":264.0}]},{"StartTime":246588.0,"Objects":[{"StartTime":246588.0,"EndTime":246588.0,"StartX":210.0,"StartY":314.0,"EndX":210.0,"EndY":314.0}]},{"StartTime":246819.0,"Objects":[{"StartTime":246819.0,"EndTime":247049.0,"StartX":140.0,"StartY":294.0,"EndX":131.233368,"EndY":248.422028}]},{"StartTime":247280.0,"Objects":[{"StartTime":247280.0,"EndTime":247280.0,"StartX":91.0,"StartY":67.0,"EndX":91.0,"EndY":67.0}]},{"StartTime":247511.0,"Objects":[{"StartTime":247511.0,"EndTime":247741.0,"StartX":166.0,"StartY":57.0,"EndX":156.782181,"EndY":102.687958}]},{"StartTime":247973.0,"Objects":[{"StartTime":247973.0,"EndTime":248434.0,"StartX":132.0,"StartY":178.0,"EndX":132.0,"EndY":178.0}]},{"StartTime":248665.0,"Objects":[{"StartTime":248665.0,"EndTime":248665.0,"StartX":309.0,"StartY":221.0,"EndX":309.0,"EndY":221.0}]},{"StartTime":248896.0,"Objects":[{"StartTime":248896.0,"EndTime":248896.0,"StartX":379.0,"StartY":95.0,"EndX":379.0,"EndY":95.0}]},{"StartTime":249127.0,"Objects":[{"StartTime":249127.0,"EndTime":249357.0,"StartX":238.0,"StartY":21.0,"EndX":227.795822,"EndY":66.32205}]},{"StartTime":249588.0,"Objects":[{"StartTime":249588.0,"EndTime":249588.0,"StartX":212.0,"StartY":135.0,"EndX":212.0,"EndY":135.0}]},{"StartTime":249819.0,"Objects":[{"StartTime":249819.0,"EndTime":249819.0,"StartX":225.0,"StartY":207.0,"EndX":225.0,"EndY":207.0}]},{"StartTime":250050.0,"Objects":[{"StartTime":250050.0,"EndTime":250280.0,"StartX":356.0,"StartY":282.0,"EndX":366.204163,"EndY":236.677948}]},{"StartTime":250511.0,"Objects":[{"StartTime":250511.0,"EndTime":250511.0,"StartX":382.0,"StartY":168.0,"EndX":382.0,"EndY":168.0}]},{"StartTime":250742.0,"Objects":[{"StartTime":250742.0,"EndTime":251203.0,"StartX":464.0,"StartY":93.0,"EndX":378.75058,"EndY":94.3556}]},{"StartTime":251550.0,"Objects":[{"StartTime":251550.0,"EndTime":251898.0,"StartX":310.0,"StartY":194.0,"EndX":240.3907,"EndY":185.511063}]},{"StartTime":252247.0,"Objects":[{"StartTime":252247.0,"EndTime":252247.0,"StartX":210.0,"StartY":103.0,"EndX":210.0,"EndY":103.0}]},{"StartTime":252702.0,"Objects":[{"StartTime":252702.0,"EndTime":253059.0,"StartX":210.0,"StartY":103.0,"EndX":140.341629,"EndY":111.076332}]},{"StartTime":253506.0,"Objects":[{"StartTime":253506.0,"EndTime":253506.0,"StartX":117.0,"StartY":195.0,"EndX":117.0,"EndY":195.0}]},{"StartTime":254095.0,"Objects":[{"StartTime":254095.0,"EndTime":254661.0,"StartX":117.0,"StartY":195.0,"EndX":47.512825,"EndY":185.563477}]},{"StartTime":255580.0,"Objects":[{"StartTime":255580.0,"EndTime":255580.0,"StartX":19.0,"StartY":113.0,"EndX":19.0,"EndY":113.0}]},{"StartTime":256480.0,"Objects":[{"StartTime":256480.0,"EndTime":257588.0,"StartX":71.0,"StartY":53.0,"EndX":176.631821,"EndY":88.00606}]},{"StartTime":257747.0,"Objects":[{"StartTime":257747.0,"EndTime":258697.0,"StartX":211.0,"StartY":259.0,"EndX":185.032272,"EndY":166.6231}]},{"StartTime":258892.0,"Objects":[{"StartTime":258892.0,"EndTime":263021.0,"StartX":474.0,"StartY":66.0,"EndX":246.531586,"EndY":119.942429}]},{"StartTime":263197.0,"Objects":[{"StartTime":263197.0,"EndTime":263427.0,"StartX":210.0,"StartY":216.0,"EndX":383.317047,"EndY":277.727753}]},{"StartTime":263543.0,"Objects":[{"StartTime":263543.0,"EndTime":263543.0,"StartX":456.0,"StartY":330.0,"EndX":456.0,"EndY":330.0}]},{"StartTime":263658.0,"Objects":[{"StartTime":263658.0,"EndTime":263888.0,"StartX":465.0,"StartY":242.0,"EndX":510.653168,"EndY":60.6925926}]},{"StartTime":264004.0,"Objects":[{"StartTime":264004.0,"EndTime":264004.0,"StartX":425.0,"StartY":84.0,"EndX":425.0,"EndY":84.0}]},{"StartTime":264120.0,"Objects":[{"StartTime":264120.0,"EndTime":264235.0,"StartX":368.0,"StartY":19.0,"EndX":275.061646,"EndY":8.803515}]},{"StartTime":264350.0,"Objects":[{"StartTime":264350.0,"EndTime":264465.0,"StartX":280.0,"StartY":139.0,"EndX":372.9198,"EndY":149.1365}]},{"StartTime":264581.0,"Objects":[{"StartTime":264581.0,"EndTime":264581.0,"StartX":197.0,"StartY":57.0,"EndX":197.0,"EndY":57.0}]},{"StartTime":264697.0,"Objects":[{"StartTime":264697.0,"EndTime":264697.0,"StartX":121.0,"StartY":35.0,"EndX":121.0,"EndY":35.0}]},{"StartTime":264812.0,"Objects":[{"StartTime":264812.0,"EndTime":264812.0,"StartX":50.0,"StartY":67.0,"EndX":50.0,"EndY":67.0}]},{"StartTime":264927.0,"Objects":[{"StartTime":264927.0,"EndTime":264927.0,"StartX":21.0,"StartY":139.0,"EndX":21.0,"EndY":139.0}]},{"StartTime":265043.0,"Objects":[{"StartTime":265043.0,"EndTime":265273.0,"StartX":37.0,"StartY":213.0,"EndX":222.8014,"EndY":233.043991}]},{"StartTime":265389.0,"Objects":[{"StartTime":265389.0,"EndTime":265389.0,"StartX":314.0,"StartY":216.0,"EndX":314.0,"EndY":216.0}]},{"StartTime":265504.0,"Objects":[{"StartTime":265504.0,"EndTime":265734.0,"StartX":283.0,"StartY":308.0,"EndX":126.098457,"EndY":351.288971}]},{"StartTime":265850.0,"Objects":[{"StartTime":265850.0,"EndTime":265850.0,"StartX":57.0,"StartY":295.0,"EndX":57.0,"EndY":295.0}]},{"StartTime":265966.0,"Objects":[{"StartTime":265966.0,"EndTime":266081.0,"StartX":142.0,"StartY":255.0,"EndX":157.97847,"EndY":162.960938}]},{"StartTime":266197.0,"Objects":[{"StartTime":266197.0,"EndTime":266312.0,"StartX":52.0,"StartY":120.0,"EndX":36.021534,"EndY":212.039063}]},{"StartTime":266427.0,"Objects":[{"StartTime":266427.0,"EndTime":266427.0,"StartX":217.0,"StartY":109.0,"EndX":217.0,"EndY":109.0}]},{"StartTime":266543.0,"Objects":[{"StartTime":266543.0,"EndTime":266543.0,"StartX":297.0,"StartY":102.0,"EndX":297.0,"EndY":102.0}]},{"StartTime":266658.0,"Objects":[{"StartTime":266658.0,"EndTime":266658.0,"StartX":368.0,"StartY":138.0,"EndX":368.0,"EndY":138.0}]},{"StartTime":266773.0,"Objects":[{"StartTime":266773.0,"EndTime":266773.0,"StartX":406.0,"StartY":207.0,"EndX":406.0,"EndY":207.0}]},{"StartTime":266889.0,"Objects":[{"StartTime":266889.0,"EndTime":267119.0,"StartX":404.0,"StartY":283.0,"EndX":450.385132,"EndY":101.907463}]},{"StartTime":267235.0,"Objects":[{"StartTime":267235.0,"EndTime":267235.0,"StartX":503.0,"StartY":22.0,"EndX":503.0,"EndY":22.0}]},{"StartTime":267350.0,"Objects":[{"StartTime":267350.0,"EndTime":267465.0,"StartX":411.0,"StartY":13.0,"EndX":318.369415,"EndY":25.6823864}]},{"StartTime":267581.0,"Objects":[{"StartTime":267581.0,"EndTime":267581.0,"StartX":237.0,"StartY":75.0,"EndX":237.0,"EndY":75.0}]},{"StartTime":267697.0,"Objects":[{"StartTime":267697.0,"EndTime":267697.0,"StartX":169.0,"StartY":6.0,"EndX":169.0,"EndY":6.0}]},{"StartTime":267812.0,"Objects":[{"StartTime":267812.0,"EndTime":267927.0,"StartX":148.0,"StartY":102.0,"EndX":160.723953,"EndY":194.627335}]},{"StartTime":268043.0,"Objects":[{"StartTime":268043.0,"EndTime":268158.0,"StartX":333.0,"StartY":216.0,"EndX":320.017151,"EndY":123.410454}]},{"StartTime":268273.0,"Objects":[{"StartTime":268273.0,"EndTime":268273.0,"StartX":63.0,"StartY":146.0,"EndX":63.0,"EndY":146.0}]},{"StartTime":268389.0,"Objects":[{"StartTime":268389.0,"EndTime":268389.0,"StartX":11.0,"StartY":206.0,"EndX":11.0,"EndY":206.0}]},{"StartTime":268504.0,"Objects":[{"StartTime":268504.0,"EndTime":268504.0,"StartX":2.0,"StartY":283.0,"EndX":2.0,"EndY":283.0}]},{"StartTime":268620.0,"Objects":[{"StartTime":268620.0,"EndTime":268620.0,"StartX":36.0,"StartY":352.0,"EndX":36.0,"EndY":352.0}]},{"StartTime":268735.0,"Objects":[{"StartTime":268735.0,"EndTime":268965.0,"StartX":107.0,"StartY":381.0,"EndX":291.10318,"EndY":348.609375}]},{"StartTime":269081.0,"Objects":[{"StartTime":269081.0,"EndTime":269081.0,"StartX":370.0,"StartY":299.0,"EndX":370.0,"EndY":299.0}]},{"StartTime":269197.0,"Objects":[{"StartTime":269197.0,"EndTime":269312.0,"StartX":333.0,"StartY":216.0,"EndX":344.8143,"EndY":123.299355}]},{"StartTime":269427.0,"Objects":[{"StartTime":269427.0,"EndTime":269427.0,"StartX":288.0,"StartY":44.0,"EndX":288.0,"EndY":44.0}]},{"StartTime":269543.0,"Objects":[{"StartTime":269543.0,"EndTime":269543.0,"StartX":368.0,"StartY":2.0,"EndX":368.0,"EndY":2.0}]},{"StartTime":269658.0,"Objects":[{"StartTime":269658.0,"EndTime":269773.0,"StartX":512.0,"StartY":90.0,"EndX":419.4197,"EndY":76.918}]},{"StartTime":269889.0,"Objects":[{"StartTime":269889.0,"EndTime":270004.0,"StartX":173.0,"StartY":113.0,"EndX":265.5803,"EndY":126.082}]},{"StartTime":270120.0,"Objects":[{"StartTime":270120.0,"EndTime":270120.0,"StartX":381.0,"StartY":222.0,"EndX":381.0,"EndY":222.0}]},{"StartTime":270235.0,"Objects":[{"StartTime":270235.0,"EndTime":270235.0,"StartX":306.0,"StartY":244.0,"EndX":306.0,"EndY":244.0}]},{"StartTime":270350.0,"Objects":[{"StartTime":270350.0,"EndTime":270350.0,"StartX":232.0,"StartY":267.0,"EndX":232.0,"EndY":267.0}]},{"StartTime":270466.0,"Objects":[{"StartTime":270466.0,"EndTime":270466.0,"StartX":158.0,"StartY":289.0,"EndX":158.0,"EndY":289.0}]},{"StartTime":270523.0,"Objects":[{"StartTime":270523.0,"EndTime":270523.0,"StartX":154.0,"StartY":280.0,"EndX":154.0,"EndY":280.0}]},{"StartTime":270581.0,"Objects":[{"StartTime":270581.0,"EndTime":270638.0,"StartX":150.0,"StartY":272.0,"EndX":158.515427,"EndY":226.578445}]},{"StartTime":270697.0,"Objects":[{"StartTime":270697.0,"EndTime":270754.0,"StartX":136.0,"StartY":76.0,"EndX":171.398178,"EndY":105.56749}]},{"StartTime":270812.0,"Objects":[{"StartTime":270812.0,"EndTime":270869.0,"StartX":318.0,"StartY":154.0,"EndX":274.58493,"EndY":169.758636}]},{"StartTime":270927.0,"Objects":[{"StartTime":270927.0,"EndTime":271042.0,"StartX":103.0,"StartY":158.0,"EndX":103.0,"EndY":158.0}]},{"StartTime":271158.0,"Objects":[{"StartTime":271158.0,"EndTime":271215.0,"StartX":407.0,"StartY":33.0,"EndX":360.912872,"EndY":25.15538}]},{"StartTime":271273.0,"Objects":[{"StartTime":271273.0,"EndTime":271273.0,"StartX":216.0,"StartY":97.0,"EndX":216.0,"EndY":97.0}]},{"StartTime":271331.0,"Objects":[{"StartTime":271331.0,"EndTime":271331.0,"StartX":221.0,"StartY":91.0,"EndX":221.0,"EndY":91.0}]},{"StartTime":271389.0,"Objects":[{"StartTime":271389.0,"EndTime":271389.0,"StartX":227.0,"StartY":87.0,"EndX":227.0,"EndY":87.0}]},{"StartTime":271447.0,"Objects":[{"StartTime":271447.0,"EndTime":271447.0,"StartX":235.0,"StartY":86.0,"EndX":235.0,"EndY":86.0}]},{"StartTime":271504.0,"Objects":[{"StartTime":271504.0,"EndTime":271619.0,"StartX":243.0,"StartY":87.0,"EndX":274.106384,"EndY":169.12706}]},{"StartTime":271735.0,"Objects":[{"StartTime":271735.0,"EndTime":271735.0,"StartX":389.0,"StartY":311.0,"EndX":389.0,"EndY":311.0}]},{"StartTime":271793.0,"Objects":[{"StartTime":271793.0,"EndTime":271793.0,"StartX":367.0,"StartY":268.0,"EndX":367.0,"EndY":268.0}]},{"StartTime":271850.0,"Objects":[{"StartTime":271850.0,"EndTime":271850.0,"StartX":377.0,"StartY":221.0,"EndX":377.0,"EndY":221.0}]},{"StartTime":271908.0,"Objects":[{"StartTime":271908.0,"EndTime":271908.0,"StartX":417.0,"StartY":190.0,"EndX":417.0,"EndY":190.0}]},{"StartTime":271966.0,"Objects":[{"StartTime":271966.0,"EndTime":272139.0,"StartX":466.0,"StartY":194.0,"EndX":501.0169,"EndY":222.893814}]},{"StartTime":272197.0,"Objects":[{"StartTime":272197.0,"EndTime":272312.0,"StartX":439.0,"StartY":260.0,"EndX":420.1435,"EndY":168.596786}]},{"StartTime":272370.0,"Objects":[{"StartTime":272370.0,"EndTime":272370.0,"StartX":436.0,"StartY":94.0,"EndX":436.0,"EndY":94.0}]},{"StartTime":272427.0,"Objects":[{"StartTime":272427.0,"EndTime":272427.0,"StartX":441.0,"StartY":88.0,"EndX":441.0,"EndY":88.0}]},{"StartTime":272485.0,"Objects":[{"StartTime":272485.0,"EndTime":272485.0,"StartX":391.0,"StartY":121.0,"EndX":391.0,"EndY":121.0}]},{"StartTime":272543.0,"Objects":[{"StartTime":272543.0,"EndTime":272543.0,"StartX":334.0,"StartY":118.0,"EndX":334.0,"EndY":118.0}]},{"StartTime":272600.0,"Objects":[{"StartTime":272600.0,"EndTime":272600.0,"StartX":285.0,"StartY":90.0,"EndX":285.0,"EndY":90.0}]},{"StartTime":272658.0,"Objects":[{"StartTime":272658.0,"EndTime":272658.0,"StartX":262.0,"StartY":39.0,"EndX":262.0,"EndY":39.0}]},{"StartTime":272716.0,"Objects":[{"StartTime":272716.0,"EndTime":272716.0,"StartX":219.0,"StartY":3.0,"EndX":219.0,"EndY":3.0}]},{"StartTime":272773.0,"Objects":[{"StartTime":272773.0,"EndTime":272830.0,"StartX":163.0,"StartY":0.0,"EndX":117.800331,"EndY":11.9395351}]},{"StartTime":272889.0,"Objects":[{"StartTime":272889.0,"EndTime":272889.0,"StartX":13.0,"StartY":60.0,"EndX":13.0,"EndY":60.0}]},{"StartTime":272947.0,"Objects":[{"StartTime":272947.0,"EndTime":272947.0,"StartX":49.0,"StartY":87.0,"EndX":49.0,"EndY":87.0}]},{"StartTime":273004.0,"Objects":[{"StartTime":273004.0,"EndTime":273004.0,"StartX":61.0,"StartY":128.0,"EndX":61.0,"EndY":128.0}]},{"StartTime":273062.0,"Objects":[{"StartTime":273062.0,"EndTime":273062.0,"StartX":53.0,"StartY":174.0,"EndX":53.0,"EndY":174.0}]},{"StartTime":273120.0,"Objects":[{"StartTime":273120.0,"EndTime":273120.0,"StartX":26.0,"StartY":207.0,"EndX":26.0,"EndY":207.0}]},{"StartTime":273177.0,"Objects":[{"StartTime":273177.0,"EndTime":273177.0,"StartX":13.0,"StartY":249.0,"EndX":13.0,"EndY":249.0}]},{"StartTime":273235.0,"Objects":[{"StartTime":273235.0,"EndTime":273292.0,"StartX":21.0,"StartY":291.0,"EndX":32.800724,"EndY":336.2361}]},{"StartTime":273350.0,"Objects":[{"StartTime":273350.0,"EndTime":273350.0,"StartX":126.0,"StartY":380.0,"EndX":126.0,"EndY":380.0}]},{"StartTime":273408.0,"Objects":[{"StartTime":273408.0,"EndTime":273408.0,"StartX":162.0,"StartY":383.0,"EndX":162.0,"EndY":383.0}]},{"StartTime":273466.0,"Objects":[{"StartTime":273466.0,"EndTime":273466.0,"StartX":194.0,"StartY":367.0,"EndX":194.0,"EndY":367.0}]},{"StartTime":273523.0,"Objects":[{"StartTime":273523.0,"EndTime":273523.0,"StartX":213.0,"StartY":339.0,"EndX":213.0,"EndY":339.0}]},{"StartTime":273581.0,"Objects":[{"StartTime":273581.0,"EndTime":273581.0,"StartX":242.0,"StartY":320.0,"EndX":242.0,"EndY":320.0}]},{"StartTime":273639.0,"Objects":[{"StartTime":273639.0,"EndTime":273639.0,"StartX":277.0,"StartY":322.0,"EndX":277.0,"EndY":322.0}]},{"StartTime":273697.0,"Objects":[{"StartTime":273697.0,"EndTime":273697.0,"StartX":307.0,"StartY":345.0,"EndX":307.0,"EndY":345.0}]},{"StartTime":273754.0,"Objects":[{"StartTime":273754.0,"EndTime":273754.0,"StartX":343.0,"StartY":352.0,"EndX":343.0,"EndY":352.0}]},{"StartTime":273812.0,"Objects":[{"StartTime":273812.0,"EndTime":273927.0,"StartX":375.0,"StartY":334.0,"EndX":384.45874,"EndY":241.25322}]},{"StartTime":273985.0,"Objects":[{"StartTime":273985.0,"EndTime":273985.0,"StartX":380.0,"StartY":221.0,"EndX":380.0,"EndY":221.0}]},{"StartTime":274043.0,"Objects":[{"StartTime":274043.0,"EndTime":274158.0,"StartX":370.0,"StartY":203.0,"EndX":462.594574,"EndY":215.980545}]},{"StartTime":274273.0,"Objects":[{"StartTime":274273.0,"EndTime":274388.0,"StartX":263.0,"StartY":211.0,"EndX":170.405426,"EndY":198.019455}]},{"StartTime":274447.0,"Objects":[{"StartTime":274447.0,"EndTime":274447.0,"StartX":103.0,"StartY":234.0,"EndX":103.0,"EndY":234.0}]},{"StartTime":274504.0,"Objects":[{"StartTime":274504.0,"EndTime":274619.0,"StartX":103.0,"StartY":234.0,"EndX":107.0641,"EndY":144.221436}]},{"StartTime":274735.0,"Objects":[{"StartTime":274735.0,"EndTime":274850.0,"StartX":315.0,"StartY":46.0,"EndX":310.935883,"EndY":135.778564}]},{"StartTime":274908.0,"Objects":[{"StartTime":274908.0,"EndTime":274908.0,"StartX":248.0,"StartY":83.0,"EndX":248.0,"EndY":83.0}]},{"StartTime":274966.0,"Objects":[{"StartTime":274966.0,"EndTime":275081.0,"StartX":248.0,"StartY":83.0,"EndX":155.405426,"EndY":70.019455}]},{"StartTime":275197.0,"Objects":[{"StartTime":275197.0,"EndTime":275197.0,"StartX":18.0,"StartY":156.0,"EndX":18.0,"EndY":156.0}]},{"StartTime":275312.0,"Objects":[{"StartTime":275312.0,"EndTime":275312.0,"StartX":115.0,"StartY":326.0,"EndX":115.0,"EndY":326.0}]},{"StartTime":275370.0,"Objects":[{"StartTime":275370.0,"EndTime":275370.0,"StartX":115.0,"StartY":326.0,"EndX":115.0,"EndY":326.0}]},{"StartTime":275427.0,"Objects":[{"StartTime":275427.0,"EndTime":275542.0,"StartX":115.0,"StartY":326.0,"EndX":102.681671,"EndY":233.426346}]},{"StartTime":275658.0,"Objects":[{"StartTime":275658.0,"EndTime":275773.0,"StartX":218.0,"StartY":50.0,"EndX":230.318329,"EndY":142.573654}]},{"StartTime":275889.0,"Objects":[{"StartTime":275889.0,"EndTime":276004.0,"StartX":307.0,"StartY":291.0,"EndX":399.981354,"EndY":281.165436}]},{"StartTime":276062.0,"Objects":[{"StartTime":276062.0,"EndTime":276062.0,"StartX":471.0,"StartY":313.0,"EndX":471.0,"EndY":313.0}]},{"StartTime":276120.0,"Objects":[{"StartTime":276120.0,"EndTime":276523.0,"StartX":471.0,"StartY":313.0,"EndX":475.382782,"EndY":267.408051}]},{"StartTime":276581.0,"Objects":[{"StartTime":276581.0,"EndTime":276984.0,"StartX":372.0,"StartY":161.0,"EndX":367.617218,"EndY":206.591965}]},{"StartTime":277043.0,"Objects":[{"StartTime":277043.0,"EndTime":277043.0,"StartX":446.0,"StartY":195.0,"EndX":446.0,"EndY":195.0}]},{"StartTime":277158.0,"Objects":[{"StartTime":277158.0,"EndTime":277158.0,"StartX":234.0,"StartY":69.0,"EndX":234.0,"EndY":69.0}]},{"StartTime":277273.0,"Objects":[{"StartTime":277273.0,"EndTime":277273.0,"StartX":307.0,"StartY":291.0,"EndX":307.0,"EndY":291.0}]},{"StartTime":277389.0,"Objects":[{"StartTime":277389.0,"EndTime":277389.0,"StartX":495.0,"StartY":131.0,"EndX":495.0,"EndY":131.0}]},{"StartTime":277504.0,"Objects":[{"StartTime":277504.0,"EndTime":277504.0,"StartX":327.0,"StartY":42.0,"EndX":327.0,"EndY":42.0}]},{"StartTime":277562.0,"Objects":[{"StartTime":277562.0,"EndTime":277562.0,"StartX":321.0,"StartY":85.0,"EndX":321.0,"EndY":85.0}]},{"StartTime":277620.0,"Objects":[{"StartTime":277620.0,"EndTime":277620.0,"StartX":303.0,"StartY":124.0,"EndX":303.0,"EndY":124.0}]},{"StartTime":277677.0,"Objects":[{"StartTime":277677.0,"EndTime":277677.0,"StartX":271.0,"StartY":153.0,"EndX":271.0,"EndY":153.0}]},{"StartTime":277735.0,"Objects":[{"StartTime":277735.0,"EndTime":277735.0,"StartX":231.0,"StartY":167.0,"EndX":231.0,"EndY":167.0}]},{"StartTime":277793.0,"Objects":[{"StartTime":277793.0,"EndTime":277793.0,"StartX":188.0,"StartY":170.0,"EndX":188.0,"EndY":170.0}]},{"StartTime":277850.0,"Objects":[{"StartTime":277850.0,"EndTime":277850.0,"StartX":147.0,"StartY":161.0,"EndX":147.0,"EndY":161.0}]},{"StartTime":277908.0,"Objects":[{"StartTime":277908.0,"EndTime":277908.0,"StartX":108.0,"StartY":142.0,"EndX":108.0,"EndY":142.0}]},{"StartTime":277966.0,"Objects":[{"StartTime":277966.0,"EndTime":278196.0,"StartX":80.0,"StartY":111.0,"EndX":15.99887,"EndY":267.260254}]},{"StartTime":278312.0,"Objects":[{"StartTime":278312.0,"EndTime":278542.0,"StartX":84.0,"StartY":330.0,"EndX":265.901367,"EndY":347.336456}]},{"StartTime":278658.0,"Objects":[{"StartTime":278658.0,"EndTime":278773.0,"StartX":351.0,"StartY":312.0,"EndX":441.5425,"EndY":331.41684}]},{"StartTime":278889.0,"Objects":[{"StartTime":278889.0,"EndTime":278889.0,"StartX":277.0,"StartY":257.0,"EndX":277.0,"EndY":257.0}]},{"StartTime":279004.0,"Objects":[{"StartTime":279004.0,"EndTime":279234.0,"StartX":277.0,"StartY":257.0,"EndX":250.534409,"EndY":72.973526}]},{"StartTime":279350.0,"Objects":[{"StartTime":279350.0,"EndTime":279465.0,"StartX":321.0,"StartY":3.0,"EndX":347.2083,"EndY":89.54563}]},{"StartTime":279581.0,"Objects":[{"StartTime":279581.0,"EndTime":279696.0,"StartX":178.0,"StartY":142.0,"EndX":151.791687,"EndY":55.45436}]},{"StartTime":279812.0,"Objects":[{"StartTime":279812.0,"EndTime":280042.0,"StartX":250.0,"StartY":72.0,"EndX":433.910248,"EndY":105.2337}]},{"StartTime":280158.0,"Objects":[{"StartTime":280158.0,"EndTime":280388.0,"StartX":452.0,"StartY":198.0,"EndX":268.089752,"EndY":164.7663}]},{"StartTime":280504.0,"Objects":[{"StartTime":280504.0,"EndTime":280619.0,"StartX":208.0,"StartY":235.0,"EndX":224.649811,"EndY":327.005127}]},{"StartTime":280735.0,"Objects":[{"StartTime":280735.0,"EndTime":280735.0,"StartX":125.0,"StartY":215.0,"EndX":125.0,"EndY":215.0}]},{"StartTime":280850.0,"Objects":[{"StartTime":280850.0,"EndTime":281080.0,"StartX":125.0,"StartY":215.0,"EndX":-12.85116,"EndY":135.932037}]},{"StartTime":281197.0,"Objects":[{"StartTime":281197.0,"EndTime":281312.0,"StartX":62.0,"StartY":10.0,"EndX":67.96667,"EndY":102.776062}]},{"StartTime":281427.0,"Objects":[{"StartTime":281427.0,"EndTime":281542.0,"StartX":189.0,"StartY":148.0,"EndX":193.9514,"EndY":55.2078743}]},{"StartTime":281600.0,"Objects":[{"StartTime":281600.0,"EndTime":281600.0,"StartX":205.0,"StartY":40.0,"EndX":205.0,"EndY":40.0}]},{"StartTime":281658.0,"Objects":[{"StartTime":281658.0,"EndTime":281888.0,"StartX":218.0,"StartY":29.0,"EndX":402.662872,"EndY":58.4550667}]},{"StartTime":282004.0,"Objects":[{"StartTime":282004.0,"EndTime":282234.0,"StartX":489.0,"StartY":32.0,"EndX":508.0971,"EndY":194.481369}]},{"StartTime":282350.0,"Objects":[{"StartTime":282350.0,"EndTime":282465.0,"StartX":424.0,"StartY":242.0,"EndX":412.63028,"EndY":149.281708}]},{"StartTime":282581.0,"Objects":[{"StartTime":282581.0,"EndTime":282581.0,"StartX":491.0,"StartY":313.0,"EndX":491.0,"EndY":313.0}]},{"StartTime":282697.0,"Objects":[{"StartTime":282697.0,"EndTime":282927.0,"StartX":491.0,"StartY":313.0,"EndX":314.45224,"EndY":276.9794}]},{"StartTime":283043.0,"Objects":[{"StartTime":283043.0,"EndTime":283158.0,"StartX":239.0,"StartY":360.0,"EndX":225.275238,"EndY":267.587952}]},{"StartTime":283273.0,"Objects":[{"StartTime":283273.0,"EndTime":283388.0,"StartX":266.0,"StartY":106.0,"EndX":279.724762,"EndY":198.412048}]},{"StartTime":283504.0,"Objects":[{"StartTime":283504.0,"EndTime":283734.0,"StartX":148.0,"StartY":315.0,"EndX":-17.67163,"EndY":292.1858}]},{"StartTime":283850.0,"Objects":[{"StartTime":283850.0,"EndTime":284080.0,"StartX":162.0,"StartY":217.0,"EndX":344.177246,"EndY":174.804657}]},{"StartTime":284197.0,"Objects":[{"StartTime":284197.0,"EndTime":284312.0,"StartX":95.0,"StartY":87.0,"EndX":85.31283,"EndY":179.996826}]},{"StartTime":284427.0,"Objects":[{"StartTime":284427.0,"EndTime":284427.0,"StartX":61.0,"StartY":358.0,"EndX":61.0,"EndY":358.0}]},{"StartTime":284543.0,"Objects":[{"StartTime":284543.0,"EndTime":284543.0,"StartX":61.0,"StartY":358.0,"EndX":61.0,"EndY":358.0}]},{"StartTime":284658.0,"Objects":[{"StartTime":284658.0,"EndTime":284658.0,"StartX":227.0,"StartY":288.0,"EndX":227.0,"EndY":288.0}]},{"StartTime":284773.0,"Objects":[{"StartTime":284773.0,"EndTime":284773.0,"StartX":227.0,"StartY":288.0,"EndX":227.0,"EndY":288.0}]},{"StartTime":284889.0,"Objects":[{"StartTime":284889.0,"EndTime":285062.0,"StartX":159.0,"StartY":375.0,"EndX":140.126938,"EndY":236.02565}]},{"StartTime":285120.0,"Objects":[{"StartTime":285120.0,"EndTime":285293.0,"StartX":216.0,"StartY":73.0,"EndX":182.363892,"EndY":169.107285}]},{"StartTime":285350.0,"Objects":[{"StartTime":285350.0,"EndTime":285580.0,"StartX":121.0,"StartY":113.0,"EndX":305.503845,"EndY":82.54791}]},{"StartTime":285697.0,"Objects":[{"StartTime":285697.0,"EndTime":285927.0,"StartX":377.0,"StartY":144.0,"EndX":415.3728,"EndY":-3.000608}]},{"StartTime":286043.0,"Objects":[{"StartTime":286043.0,"EndTime":286158.0,"StartX":299.0,"StartY":161.0,"EndX":284.9337,"EndY":253.435852}]},{"StartTime":286273.0,"Objects":[{"StartTime":286273.0,"EndTime":286273.0,"StartX":248.0,"StartY":96.0,"EndX":248.0,"EndY":96.0}]},{"StartTime":286389.0,"Objects":[{"StartTime":286389.0,"EndTime":286619.0,"StartX":248.0,"StartY":96.0,"EndX":87.4779053,"EndY":66.9705048}]},{"StartTime":286735.0,"Objects":[{"StartTime":286735.0,"EndTime":286850.0,"StartX":0.0,"StartY":199.0,"EndX":90.79614,"EndY":181.2921}]},{"StartTime":286966.0,"Objects":[{"StartTime":286966.0,"EndTime":287081.0,"StartX":285.0,"StartY":253.0,"EndX":208.507446,"EndY":201.0769}]},{"StartTime":287197.0,"Objects":[{"StartTime":287197.0,"EndTime":287427.0,"StartX":160.0,"StartY":122.0,"EndX":131.3117,"EndY":306.786316}]},{"StartTime":287543.0,"Objects":[{"StartTime":287543.0,"EndTime":287773.0,"StartX":196.0,"StartY":371.0,"EndX":360.606018,"EndY":340.6779}]},{"StartTime":287889.0,"Objects":[{"StartTime":287889.0,"EndTime":288004.0,"StartX":430.0,"StartY":284.0,"EndX":521.7903,"EndY":301.355865}]},{"StartTime":288120.0,"Objects":[{"StartTime":288120.0,"EndTime":288120.0,"StartX":349.0,"StartY":246.0,"EndX":349.0,"EndY":246.0}]},{"StartTime":288235.0,"Objects":[{"StartTime":288235.0,"EndTime":288465.0,"StartX":349.0,"StartY":246.0,"EndX":319.776855,"EndY":61.4960556}]},{"StartTime":288581.0,"Objects":[{"StartTime":288581.0,"EndTime":288696.0,"StartX":382.0,"StartY":5.0,"EndX":474.508667,"EndY":18.5792542}]},{"StartTime":288812.0,"Objects":[{"StartTime":288812.0,"EndTime":288927.0,"StartX":245.0,"StartY":108.0,"EndX":152.491333,"EndY":94.4207458}]},{"StartTime":288985.0,"Objects":[{"StartTime":288985.0,"EndTime":288985.0,"StartX":139.0,"StartY":86.0,"EndX":139.0,"EndY":86.0}]},{"StartTime":289043.0,"Objects":[{"StartTime":289043.0,"EndTime":289273.0,"StartX":124.0,"StartY":78.0,"EndX":81.78579,"EndY":237.990585}]},{"StartTime":289389.0,"Objects":[{"StartTime":289389.0,"EndTime":289619.0,"StartX":29.0,"StartY":315.0,"EndX":212.819092,"EndY":348.812439}]},{"StartTime":289735.0,"Objects":[{"StartTime":289735.0,"EndTime":289850.0,"StartX":301.0,"StartY":334.0,"EndX":286.956635,"EndY":241.579437}]},{"StartTime":289966.0,"Objects":[{"StartTime":289966.0,"EndTime":289966.0,"StartX":195.0,"StartY":82.0,"EndX":195.0,"EndY":82.0}]},{"StartTime":290081.0,"Objects":[{"StartTime":290081.0,"EndTime":290311.0,"StartX":195.0,"StartY":82.0,"EndX":205.152008,"EndY":249.399124}]},{"StartTime":290427.0,"Objects":[{"StartTime":290427.0,"EndTime":290542.0,"StartX":365.0,"StartY":164.0,"EndX":272.528137,"EndY":150.172424}]},{"StartTime":290658.0,"Objects":[{"StartTime":290658.0,"EndTime":290773.0,"StartX":375.0,"StartY":307.0,"EndX":467.471863,"EndY":320.827576}]},{"StartTime":290889.0,"Objects":[{"StartTime":290889.0,"EndTime":291119.0,"StartX":505.0,"StartY":239.0,"EndX":486.800751,"EndY":60.4442558}]},{"StartTime":291235.0,"Objects":[{"StartTime":291235.0,"EndTime":291465.0,"StartX":408.0,"StartY":9.0,"EndX":225.277878,"EndY":46.3209457}]},{"StartTime":291581.0,"Objects":[{"StartTime":291581.0,"EndTime":291696.0,"StartX":155.0,"StartY":110.0,"EndX":62.8730278,"EndY":94.62519}]},{"StartTime":291812.0,"Objects":[{"StartTime":291812.0,"EndTime":292042.0,"StartX":245.0,"StartY":138.0,"EndX":259.524231,"EndY":304.5021}]},{"StartTime":292158.0,"Objects":[{"StartTime":292158.0,"EndTime":292158.0,"StartX":186.0,"StartY":368.0,"EndX":186.0,"EndY":368.0}]},{"StartTime":292273.0,"Objects":[{"StartTime":292273.0,"EndTime":292446.0,"StartX":0.0,"StartY":252.0,"EndX":139.426544,"EndY":236.824326}]},{"StartTime":292504.0,"Objects":[{"StartTime":292504.0,"EndTime":292619.0,"StartX":179.0,"StartY":271.0,"EndX":86.0954742,"EndY":281.535553}]},{"StartTime":292735.0,"Objects":[{"StartTime":292735.0,"EndTime":292850.0,"StartX":43.0,"StartY":150.0,"EndX":135.777985,"EndY":138.402756}]},{"StartTime":292966.0,"Objects":[{"StartTime":292966.0,"EndTime":293196.0,"StartX":378.0,"StartY":221.0,"EndX":218.297974,"EndY":179.556229}]},{"StartTime":293312.0,"Objects":[{"StartTime":293312.0,"EndTime":293312.0,"StartX":132.0,"StartY":54.0,"EndX":132.0,"EndY":54.0}]},{"StartTime":293427.0,"Objects":[{"StartTime":293427.0,"EndTime":293542.0,"StartX":227.0,"StartY":0.0,"EndX":210.002319,"EndY":91.94199}]},{"StartTime":293658.0,"Objects":[{"StartTime":293658.0,"EndTime":293658.0,"StartX":147.0,"StartY":222.0,"EndX":147.0,"EndY":222.0}]},{"StartTime":293773.0,"Objects":[{"StartTime":293773.0,"EndTime":293773.0,"StartX":132.0,"StartY":54.0,"EndX":132.0,"EndY":54.0}]},{"StartTime":293889.0,"Objects":[{"StartTime":293889.0,"EndTime":294004.0,"StartX":285.0,"StartY":131.0,"EndX":377.143,"EndY":145.643051}]},{"StartTime":294120.0,"Objects":[{"StartTime":294120.0,"EndTime":294120.0,"StartX":450.0,"StartY":101.0,"EndX":450.0,"EndY":101.0}]},{"StartTime":294235.0,"Objects":[{"StartTime":294235.0,"EndTime":294235.0,"StartX":363.0,"StartY":231.0,"EndX":363.0,"EndY":231.0}]},{"StartTime":294350.0,"Objects":[{"StartTime":294350.0,"EndTime":294350.0,"StartX":334.0,"StartY":58.0,"EndX":334.0,"EndY":58.0}]},{"StartTime":294466.0,"Objects":[{"StartTime":294466.0,"EndTime":294466.0,"StartX":441.0,"StartY":199.0,"EndX":441.0,"EndY":199.0}]},{"StartTime":294581.0,"Objects":[{"StartTime":294581.0,"EndTime":294754.0,"StartX":303.0,"StartY":296.0,"EndX":257.591858,"EndY":307.120361}]},{"StartTime":294812.0,"Objects":[{"StartTime":294812.0,"EndTime":294985.0,"StartX":204.0,"StartY":367.0,"EndX":158.763885,"EndY":355.19928}]},{"StartTime":295043.0,"Objects":[{"StartTime":295043.0,"EndTime":295043.0,"StartX":80.0,"StartY":363.0,"EndX":80.0,"EndY":363.0}]},{"StartTime":295100.0,"Objects":[{"StartTime":295100.0,"EndTime":295100.0,"StartX":45.0,"StartY":330.0,"EndX":45.0,"EndY":330.0}]},{"StartTime":295158.0,"Objects":[{"StartTime":295158.0,"EndTime":295158.0,"StartX":26.0,"StartY":288.0,"EndX":26.0,"EndY":288.0}]},{"StartTime":295216.0,"Objects":[{"StartTime":295216.0,"EndTime":295216.0,"StartX":18.0,"StartY":242.0,"EndX":18.0,"EndY":242.0}]},{"StartTime":295273.0,"Objects":[{"StartTime":295273.0,"EndTime":295273.0,"StartX":22.0,"StartY":195.0,"EndX":22.0,"EndY":195.0}]},{"StartTime":295331.0,"Objects":[{"StartTime":295331.0,"EndTime":295331.0,"StartX":39.0,"StartY":149.0,"EndX":39.0,"EndY":149.0}]},{"StartTime":295389.0,"Objects":[{"StartTime":295389.0,"EndTime":295389.0,"StartX":71.0,"StartY":111.0,"EndX":71.0,"EndY":111.0}]},{"StartTime":295447.0,"Objects":[{"StartTime":295447.0,"EndTime":295447.0,"StartX":116.0,"StartY":93.0,"EndX":116.0,"EndY":93.0}]},{"StartTime":295504.0,"Objects":[{"StartTime":295504.0,"EndTime":295734.0,"StartX":168.0,"StartY":92.0,"EndX":352.204224,"EndY":124.215088}]},{"StartTime":295850.0,"Objects":[{"StartTime":295850.0,"EndTime":295850.0,"StartX":444.0,"StartY":197.0,"EndX":444.0,"EndY":197.0}]},{"StartTime":295966.0,"Objects":[{"StartTime":295966.0,"EndTime":296196.0,"StartX":338.0,"StartY":248.0,"EndX":153.795792,"EndY":215.784912}]},{"StartTime":296312.0,"Objects":[{"StartTime":296312.0,"EndTime":296312.0,"StartX":54.0,"StartY":275.0,"EndX":54.0,"EndY":275.0}]},{"StartTime":296427.0,"Objects":[{"StartTime":296427.0,"EndTime":296542.0,"StartX":152.0,"StartY":341.0,"EndX":244.270477,"EndY":356.113281}]},{"StartTime":296658.0,"Objects":[{"StartTime":296658.0,"EndTime":296831.0,"StartX":499.0,"StartY":283.0,"EndX":375.8472,"EndY":234.468475}]},{"StartTime":296889.0,"Objects":[{"StartTime":296889.0,"EndTime":297004.0,"StartX":338.0,"StartY":248.0,"EndX":327.5102,"EndY":155.0903}]},{"StartTime":297120.0,"Objects":[{"StartTime":297120.0,"EndTime":297120.0,"StartX":420.0,"StartY":129.0,"EndX":420.0,"EndY":129.0}]},{"StartTime":297235.0,"Objects":[{"StartTime":297235.0,"EndTime":297235.0,"StartX":397.0,"StartY":335.0,"EndX":397.0,"EndY":335.0}]},{"StartTime":297350.0,"Objects":[{"StartTime":297350.0,"EndTime":297580.0,"StartX":240.0,"StartY":266.0,"EndX":62.06865,"EndY":269.751831}]},{"StartTime":297697.0,"Objects":[{"StartTime":297697.0,"EndTime":297927.0,"StartX":143.0,"StartY":23.0,"EndX":320.931335,"EndY":19.2481613}]},{"StartTime":298043.0,"Objects":[{"StartTime":298043.0,"EndTime":298158.0,"StartX":150.0,"StartY":163.0,"EndX":57.6743,"EndY":148.22789}]},{"StartTime":298273.0,"Objects":[{"StartTime":298273.0,"EndTime":298503.0,"StartX":264.0,"StartY":129.0,"EndX":443.095062,"EndY":137.899429}]},{"StartTime":298620.0,"Objects":[{"StartTime":298620.0,"EndTime":298735.0,"StartX":306.0,"StartY":208.0,"EndX":275.675659,"EndY":296.445953}]},{"StartTime":298850.0,"Objects":[{"StartTime":298850.0,"EndTime":298850.0,"StartX":443.0,"StartY":137.0,"EndX":443.0,"EndY":137.0}]},{"StartTime":298966.0,"Objects":[{"StartTime":298966.0,"EndTime":298966.0,"StartX":321.0,"StartY":20.0,"EndX":321.0,"EndY":20.0}]},{"StartTime":299081.0,"Objects":[{"StartTime":299081.0,"EndTime":299081.0,"StartX":390.0,"StartY":236.0,"EndX":390.0,"EndY":236.0}]},{"StartTime":299197.0,"Objects":[{"StartTime":299197.0,"EndTime":299427.0,"StartX":465.0,"StartY":59.0,"EndX":289.129517,"EndY":98.52927}]},{"StartTime":299543.0,"Objects":[{"StartTime":299543.0,"EndTime":299543.0,"StartX":75.0,"StartY":82.0,"EndX":75.0,"EndY":82.0}]},{"StartTime":299658.0,"Objects":[{"StartTime":299658.0,"EndTime":299888.0,"StartX":75.0,"StartY":82.0,"EndX":228.278809,"EndY":32.1533127}]},{"StartTime":300004.0,"Objects":[{"StartTime":300004.0,"EndTime":300004.0,"StartX":214.0,"StartY":214.0,"EndX":214.0,"EndY":214.0}]},{"StartTime":300120.0,"Objects":[{"StartTime":300120.0,"EndTime":300235.0,"StartX":214.0,"StartY":214.0,"EndX":197.563568,"EndY":121.956024}]},{"StartTime":300350.0,"Objects":[{"StartTime":300350.0,"EndTime":300523.0,"StartX":325.0,"StartY":194.0,"EndX":306.7894,"EndY":333.0627}]},{"StartTime":300581.0,"Objects":[{"StartTime":300581.0,"EndTime":300696.0,"StartX":332.0,"StartY":378.0,"EndX":239.2482,"EndY":366.195221}]},{"StartTime":300812.0,"Objects":[{"StartTime":300812.0,"EndTime":300927.0,"StartX":391.0,"StartY":266.0,"EndX":483.7518,"EndY":277.804779}]},{"StartTime":301043.0,"Objects":[{"StartTime":301043.0,"EndTime":301273.0,"StartX":237.0,"StartY":290.0,"EndX":51.8984833,"EndY":263.421326}]},{"StartTime":301389.0,"Objects":[{"StartTime":301389.0,"EndTime":301389.0,"StartX":0.0,"StartY":154.0,"EndX":0.0,"EndY":154.0}]},{"StartTime":301504.0,"Objects":[{"StartTime":301504.0,"EndTime":301734.0,"StartX":53.0,"StartY":47.0,"EndX":238.101517,"EndY":73.57868}]},{"StartTime":301850.0,"Objects":[{"StartTime":301850.0,"EndTime":301850.0,"StartX":290.0,"StartY":183.0,"EndX":290.0,"EndY":183.0}]},{"StartTime":301966.0,"Objects":[{"StartTime":301966.0,"EndTime":302081.0,"StartX":237.0,"StartY":290.0,"EndX":144.5551,"EndY":275.9932}]},{"StartTime":302197.0,"Objects":[{"StartTime":302197.0,"EndTime":302312.0,"StartX":348.0,"StartY":127.0,"EndX":440.4449,"EndY":112.993195}]},{"StartTime":302427.0,"Objects":[{"StartTime":302427.0,"EndTime":302657.0,"StartX":482.0,"StartY":321.0,"EndX":332.600861,"EndY":256.5296}]},{"StartTime":302773.0,"Objects":[{"StartTime":302773.0,"EndTime":302773.0,"StartX":212.0,"StartY":183.0,"EndX":212.0,"EndY":183.0}]},{"StartTime":302889.0,"Objects":[{"StartTime":302889.0,"EndTime":303004.0,"StartX":296.0,"StartY":62.0,"EndX":307.855774,"EndY":154.117142}]},{"StartTime":303120.0,"Objects":[{"StartTime":303120.0,"EndTime":303235.0,"StartX":144.0,"StartY":275.0,"EndX":132.144226,"EndY":182.882858}]},{"StartTime":303350.0,"Objects":[{"StartTime":303350.0,"EndTime":303580.0,"StartX":289.0,"StartY":328.0,"EndX":112.767624,"EndY":359.539429}]},{"StartTime":303697.0,"Objects":[{"StartTime":303697.0,"EndTime":303697.0,"StartX":42.0,"StartY":263.0,"EndX":42.0,"EndY":263.0}]},{"StartTime":303812.0,"Objects":[{"StartTime":303812.0,"EndTime":304042.0,"StartX":132.0,"StartY":182.0,"EndX":163.28009,"EndY":20.0925751}]},{"StartTime":304158.0,"Objects":[{"StartTime":304158.0,"EndTime":304158.0,"StartX":68.0,"StartY":39.0,"EndX":68.0,"EndY":39.0}]},{"StartTime":304273.0,"Objects":[{"StartTime":304273.0,"EndTime":304388.0,"StartX":68.0,"StartY":39.0,"EndX":48.7815,"EndY":129.64296}]},{"StartTime":304504.0,"Objects":[{"StartTime":304504.0,"EndTime":304619.0,"StartX":269.0,"StartY":175.0,"EndX":288.2185,"EndY":84.35705}]},{"StartTime":304735.0,"Objects":[{"StartTime":304735.0,"EndTime":304965.0,"StartX":163.0,"StartY":20.0,"EndX":181.006531,"EndY":206.121765}]},{"StartTime":305081.0,"Objects":[{"StartTime":305081.0,"EndTime":305311.0,"StartX":146.0,"StartY":296.0,"EndX":311.379,"EndY":280.309662}]},{"StartTime":305427.0,"Objects":[{"StartTime":305427.0,"EndTime":305427.0,"StartX":378.0,"StartY":353.0,"EndX":378.0,"EndY":353.0}]},{"StartTime":305543.0,"Objects":[{"StartTime":305543.0,"EndTime":305543.0,"StartX":470.0,"StartY":323.0,"EndX":470.0,"EndY":323.0}]},{"StartTime":305658.0,"Objects":[{"StartTime":305658.0,"EndTime":305888.0,"StartX":403.0,"StartY":252.0,"EndX":420.897156,"EndY":65.87369}]},{"StartTime":306004.0,"Objects":[{"StartTime":306004.0,"EndTime":306004.0,"StartX":353.0,"StartY":1.0,"EndX":353.0,"EndY":1.0}]},{"StartTime":306120.0,"Objects":[{"StartTime":306120.0,"EndTime":306235.0,"StartX":248.0,"StartY":105.0,"EndX":334.8469,"EndY":88.42464}]},{"StartTime":306350.0,"Objects":[{"StartTime":306350.0,"EndTime":306465.0,"StartX":178.0,"StartY":48.0,"EndX":91.48886,"EndY":30.8236141}]},{"StartTime":306581.0,"Objects":[{"StartTime":306581.0,"EndTime":306696.0,"StartX":67.0,"StartY":171.0,"EndX":50.63526,"EndY":262.9844}]},{"StartTime":306812.0,"Objects":[{"StartTime":306812.0,"EndTime":306812.0,"StartX":101.0,"StartY":341.0,"EndX":101.0,"EndY":341.0}]},{"StartTime":306927.0,"Objects":[{"StartTime":306927.0,"EndTime":306927.0,"StartX":196.0,"StartY":332.0,"EndX":196.0,"EndY":332.0}]},{"StartTime":307043.0,"Objects":[{"StartTime":307043.0,"EndTime":307273.0,"StartX":148.0,"StartY":251.0,"EndX":316.875061,"EndY":222.402985}]},{"StartTime":307389.0,"Objects":[{"StartTime":307389.0,"EndTime":307389.0,"StartX":395.0,"StartY":165.0,"EndX":395.0,"EndY":165.0}]},{"StartTime":307504.0,"Objects":[{"StartTime":307504.0,"EndTime":307619.0,"StartX":327.0,"StartY":32.0,"EndX":308.544983,"EndY":123.509621}]},{"StartTime":307735.0,"Objects":[{"StartTime":307735.0,"EndTime":307850.0,"StartX":379.0,"StartY":356.0,"EndX":397.455017,"EndY":264.4904}]},{"StartTime":307966.0,"Objects":[{"StartTime":307966.0,"EndTime":308081.0,"StartX":511.0,"StartY":90.0,"EndX":488.880981,"EndY":-0.84601593}]},{"StartTime":308197.0,"Objects":[{"StartTime":308197.0,"EndTime":308312.0,"StartX":473.0,"StartY":292.0,"EndX":495.201874,"EndY":382.8258}]},{"StartTime":308427.0,"Objects":[{"StartTime":308427.0,"EndTime":308427.0,"StartX":512.0,"StartY":192.0,"EndX":512.0,"EndY":192.0}]},{"StartTime":308543.0,"Objects":[{"StartTime":308543.0,"EndTime":308543.0,"StartX":418.0,"StartY":163.0,"EndX":418.0,"EndY":163.0}]},{"StartTime":308658.0,"Objects":[{"StartTime":308658.0,"EndTime":308658.0,"StartX":375.0,"StartY":249.0,"EndX":375.0,"EndY":249.0}]},{"StartTime":308889.0,"Objects":[{"StartTime":308889.0,"EndTime":308889.0,"StartX":379.0,"StartY":256.0,"EndX":379.0,"EndY":256.0}]},{"StartTime":309004.0,"Objects":[{"StartTime":309004.0,"EndTime":309004.0,"StartX":281.0,"StartY":219.0,"EndX":281.0,"EndY":219.0}]},{"StartTime":309062.0,"Objects":[{"StartTime":309062.0,"EndTime":309062.0,"StartX":275.0,"StartY":203.0,"EndX":275.0,"EndY":203.0}]},{"StartTime":309120.0,"Objects":[{"StartTime":309120.0,"EndTime":309120.0,"StartX":271.0,"StartY":188.0,"EndX":271.0,"EndY":188.0}]},{"StartTime":309177.0,"Objects":[{"StartTime":309177.0,"EndTime":309177.0,"StartX":268.0,"StartY":171.0,"EndX":268.0,"EndY":171.0}]},{"StartTime":309235.0,"Objects":[{"StartTime":309235.0,"EndTime":309235.0,"StartX":265.0,"StartY":156.0,"EndX":265.0,"EndY":156.0}]},{"StartTime":309293.0,"Objects":[{"StartTime":309293.0,"EndTime":309293.0,"StartX":264.0,"StartY":140.0,"EndX":264.0,"EndY":140.0}]},{"StartTime":309350.0,"Objects":[{"StartTime":309350.0,"EndTime":309350.0,"StartX":263.0,"StartY":124.0,"EndX":263.0,"EndY":124.0}]},{"StartTime":309408.0,"Objects":[{"StartTime":309408.0,"EndTime":309408.0,"StartX":233.0,"StartY":165.0,"EndX":233.0,"EndY":165.0}]},{"StartTime":309466.0,"Objects":[{"StartTime":309466.0,"EndTime":309466.0,"StartX":189.0,"StartY":185.0,"EndX":189.0,"EndY":185.0}]},{"StartTime":309523.0,"Objects":[{"StartTime":309523.0,"EndTime":309523.0,"StartX":142.0,"StartY":183.0,"EndX":142.0,"EndY":183.0}]},{"StartTime":309581.0,"Objects":[{"StartTime":309581.0,"EndTime":309581.0,"StartX":105.0,"StartY":155.0,"EndX":105.0,"EndY":155.0}]},{"StartTime":309639.0,"Objects":[{"StartTime":309639.0,"EndTime":309639.0,"StartX":86.0,"StartY":111.0,"EndX":86.0,"EndY":111.0}]},{"StartTime":309697.0,"Objects":[{"StartTime":309697.0,"EndTime":309697.0,"StartX":90.0,"StartY":63.0,"EndX":90.0,"EndY":63.0}]},{"StartTime":309754.0,"Objects":[{"StartTime":309754.0,"EndTime":309754.0,"StartX":122.0,"StartY":27.0,"EndX":122.0,"EndY":27.0}]},{"StartTime":309812.0,"Objects":[{"StartTime":309812.0,"EndTime":309869.0,"StartX":169.0,"StartY":16.0,"EndX":215.4298,"EndY":21.462328}]},{"StartTime":309927.0,"Objects":[{"StartTime":309927.0,"EndTime":309984.0,"StartX":263.0,"StartY":124.0,"EndX":309.429779,"EndY":118.537674}]},{"StartTime":310043.0,"Objects":[{"StartTime":310043.0,"EndTime":310100.0,"StartX":361.0,"StartY":42.0,"EndX":407.429779,"EndY":47.46233}]},{"StartTime":310158.0,"Objects":[{"StartTime":310158.0,"EndTime":310158.0,"StartX":495.0,"StartY":106.0,"EndX":495.0,"EndY":106.0}]},{"StartTime":310216.0,"Objects":[{"StartTime":310216.0,"EndTime":310216.0,"StartX":495.0,"StartY":106.0,"EndX":495.0,"EndY":106.0}]},{"StartTime":310273.0,"Objects":[{"StartTime":310273.0,"EndTime":310503.0,"StartX":495.0,"StartY":106.0,"EndX":481.801849,"EndY":292.5337}]},{"StartTime":310620.0,"Objects":[{"StartTime":310620.0,"EndTime":310620.0,"StartX":428.0,"StartY":371.0,"EndX":428.0,"EndY":371.0}]},{"StartTime":310735.0,"Objects":[{"StartTime":310735.0,"EndTime":310965.0,"StartX":316.0,"StartY":222.0,"EndX":328.9687,"EndY":35.45024}]},{"StartTime":311081.0,"Objects":[{"StartTime":311081.0,"EndTime":311081.0,"StartX":242.0,"StartY":71.0,"EndX":242.0,"EndY":71.0}]},{"StartTime":311197.0,"Objects":[{"StartTime":311197.0,"EndTime":311312.0,"StartX":316.0,"StartY":222.0,"EndX":402.284546,"EndY":222.791611}]},{"StartTime":311427.0,"Objects":[{"StartTime":311427.0,"EndTime":311427.0,"StartX":481.0,"StartY":292.0,"EndX":481.0,"EndY":292.0}]},{"StartTime":311658.0,"Objects":[{"StartTime":311658.0,"EndTime":311773.0,"StartX":481.0,"StartY":292.0,"EndX":486.955963,"EndY":198.68988}]},{"StartTime":311889.0,"Objects":[{"StartTime":311889.0,"EndTime":311889.0,"StartX":495.0,"StartY":106.0,"EndX":495.0,"EndY":106.0}]},{"StartTime":312004.0,"Objects":[{"StartTime":312004.0,"EndTime":312004.0,"StartX":316.0,"StartY":222.0,"EndX":316.0,"EndY":222.0}]},{"StartTime":312120.0,"Objects":[{"StartTime":312120.0,"EndTime":312350.0,"StartX":428.0,"StartY":371.0,"EndX":247.0695,"EndY":341.194458}]},{"StartTime":312466.0,"Objects":[{"StartTime":312466.0,"EndTime":312466.0,"StartX":157.0,"StartY":369.0,"EndX":157.0,"EndY":369.0}]},{"StartTime":312581.0,"Objects":[{"StartTime":312581.0,"EndTime":312696.0,"StartX":61.0,"StartY":235.0,"EndX":73.8031,"EndY":323.714569}]},{"StartTime":312812.0,"Objects":[{"StartTime":312812.0,"EndTime":312927.0,"StartX":214.0,"StartY":214.0,"EndX":201.1969,"EndY":125.285431}]},{"StartTime":313043.0,"Objects":[{"StartTime":313043.0,"EndTime":313043.0,"StartX":90.0,"StartY":63.0,"EndX":90.0,"EndY":63.0}]},{"StartTime":313158.0,"Objects":[{"StartTime":313158.0,"EndTime":313158.0,"StartX":146.0,"StartY":259.0,"EndX":146.0,"EndY":259.0}]},{"StartTime":313273.0,"Objects":[{"StartTime":313273.0,"EndTime":313388.0,"StartX":288.0,"StartY":113.0,"EndX":304.056061,"EndY":20.8889084}]},{"StartTime":313504.0,"Objects":[{"StartTime":313504.0,"EndTime":313619.0,"StartX":129.0,"StartY":166.0,"EndX":145.8128,"EndY":257.975983}]},{"StartTime":313735.0,"Objects":[{"StartTime":313735.0,"EndTime":313850.0,"StartX":178.0,"StartY":48.0,"EndX":89.88275,"EndY":62.29895}]},{"StartTime":313966.0,"Objects":[{"StartTime":313966.0,"EndTime":314196.0,"StartX":357.0,"StartY":237.0,"EndX":510.901,"EndY":191.198853}]},{"StartTime":314312.0,"Objects":[{"StartTime":314312.0,"EndTime":314312.0,"StartX":490.0,"StartY":283.0,"EndX":490.0,"EndY":283.0}]},{"StartTime":314427.0,"Objects":[{"StartTime":314427.0,"EndTime":314542.0,"StartX":465.0,"StartY":372.0,"EndX":372.772156,"EndY":356.6287}]},{"StartTime":314658.0,"Objects":[{"StartTime":314658.0,"EndTime":314773.0,"StartX":264.0,"StartY":221.0,"EndX":356.227844,"EndY":236.3713}]},{"StartTime":314889.0,"Objects":[{"StartTime":314889.0,"EndTime":315062.0,"StartX":201.0,"StartY":356.0,"EndX":73.42414,"EndY":323.079651}]},{"StartTime":315120.0,"Objects":[{"StartTime":315120.0,"EndTime":315235.0,"StartX":32.0,"StartY":263.0,"EndX":25.1291542,"EndY":169.752792}]},{"StartTime":315350.0,"Objects":[{"StartTime":315350.0,"EndTime":315580.0,"StartX":258.0,"StartY":36.0,"EndX":213.486267,"EndY":213.907791}]},{"StartTime":315697.0,"Objects":[{"StartTime":315697.0,"EndTime":315697.0,"StartX":262.0,"StartY":294.0,"EndX":262.0,"EndY":294.0}]},{"StartTime":315812.0,"Objects":[{"StartTime":315812.0,"EndTime":315927.0,"StartX":353.0,"StartY":237.0,"EndX":371.1887,"EndY":150.509415}]},{"StartTime":316043.0,"Objects":[{"StartTime":316043.0,"EndTime":316158.0,"StartX":262.0,"StartY":294.0,"EndX":243.811325,"EndY":380.4906}]},{"StartTime":316273.0,"Objects":[{"StartTime":316273.0,"EndTime":316388.0,"StartX":372.0,"StartY":356.0,"EndX":464.0676,"EndY":339.69635}]},{"StartTime":316504.0,"Objects":[{"StartTime":316504.0,"EndTime":316619.0,"StartX":213.0,"StartY":213.0,"EndX":120.9324,"EndY":229.303635}]},{"StartTime":316735.0,"Objects":[{"StartTime":316735.0,"EndTime":316965.0,"StartX":36.0,"StartY":14.0,"EndX":103.725967,"EndY":151.469818}]},{"StartTime":317081.0,"Objects":[{"StartTime":317081.0,"EndTime":317081.0,"StartX":37.0,"StartY":357.0,"EndX":37.0,"EndY":357.0}]},{"StartTime":317197.0,"Objects":[{"StartTime":317197.0,"EndTime":317427.0,"StartX":37.0,"StartY":357.0,"EndX":120.612343,"EndY":228.825439}]},{"StartTime":317543.0,"Objects":[{"StartTime":317543.0,"EndTime":317543.0,"StartX":334.0,"StartY":185.0,"EndX":334.0,"EndY":185.0}]},{"StartTime":317600.0,"Objects":[{"StartTime":317600.0,"EndTime":317600.0,"StartX":334.0,"StartY":185.0,"EndX":334.0,"EndY":185.0}]},{"StartTime":317658.0,"Objects":[{"StartTime":317658.0,"EndTime":317888.0,"StartX":334.0,"StartY":185.0,"EndX":180.6072,"EndY":174.546585}]},{"StartTime":318004.0,"Objects":[{"StartTime":318004.0,"EndTime":318004.0,"StartX":207.0,"StartY":84.0,"EndX":207.0,"EndY":84.0}]},{"StartTime":318120.0,"Objects":[{"StartTime":318120.0,"EndTime":318235.0,"StartX":387.0,"StartY":119.0,"EndX":385.330536,"EndY":205.2478}]},{"StartTime":318350.0,"Objects":[{"StartTime":318350.0,"EndTime":318465.0,"StartX":491.0,"StartY":311.0,"EndX":492.6695,"EndY":224.752182}]},{"StartTime":318581.0,"Objects":[{"StartTime":318581.0,"EndTime":318811.0,"StartX":222.0,"StartY":356.0,"EndX":407.656677,"EndY":353.511017}]},{"StartTime":318927.0,"Objects":[{"StartTime":318927.0,"EndTime":318927.0,"StartX":491.0,"StartY":311.0,"EndX":491.0,"EndY":311.0}]},{"StartTime":319043.0,"Objects":[{"StartTime":319043.0,"EndTime":319273.0,"StartX":304.0,"StartY":229.0,"EndX":118.342148,"EndY":226.476974}]},{"StartTime":319389.0,"Objects":[{"StartTime":319389.0,"EndTime":319389.0,"StartX":35.0,"StartY":184.0,"EndX":35.0,"EndY":184.0}]},{"StartTime":319504.0,"Objects":[{"StartTime":319504.0,"EndTime":319734.0,"StartX":197.0,"StartY":0.0,"EndX":231.314728,"EndY":155.166412}]},{"StartTime":319966.0,"Objects":[{"StartTime":319966.0,"EndTime":320081.0,"StartX":231.0,"StartY":155.0,"EndX":323.294769,"EndY":141.212128}]},{"StartTime":320197.0,"Objects":[{"StartTime":320197.0,"EndTime":320312.0,"StartX":501.0,"StartY":305.0,"EndX":408.931366,"EndY":290.175568}]},{"StartTime":320427.0,"Objects":[{"StartTime":320427.0,"EndTime":320657.0,"StartX":152.0,"StartY":382.0,"EndX":117.685287,"EndY":226.833588}]},{"StartTime":320773.0,"Objects":[{"StartTime":320773.0,"EndTime":320773.0,"StartX":143.0,"StartY":136.0,"EndX":143.0,"EndY":136.0}]},{"StartTime":320889.0,"Objects":[{"StartTime":320889.0,"EndTime":321004.0,"StartX":221.0,"StartY":242.0,"EndX":206.995148,"EndY":334.165}]},{"StartTime":321120.0,"Objects":[{"StartTime":321120.0,"EndTime":321235.0,"StartX":63.0,"StartY":159.0,"EndX":49.1510544,"EndY":66.6488953}]},{"StartTime":321350.0,"Objects":[{"StartTime":321350.0,"EndTime":321811.0,"StartX":340.0,"StartY":49.0,"EndX":340.0,"EndY":49.0}]},{"StartTime":321927.0,"Objects":[{"StartTime":321927.0,"EndTime":321927.0,"StartX":173.0,"StartY":47.0,"EndX":173.0,"EndY":47.0}]},{"StartTime":322043.0,"Objects":[{"StartTime":322043.0,"EndTime":322158.0,"StartX":143.0,"StartY":136.0,"EndX":152.3036,"EndY":229.03598}]},{"StartTime":322273.0,"Objects":[{"StartTime":322273.0,"EndTime":322388.0,"StartX":400.0,"StartY":384.0,"EndX":409.3036,"EndY":290.96402}]},{"StartTime":322504.0,"Objects":[{"StartTime":322504.0,"EndTime":322619.0,"StartX":257.0,"StartY":173.0,"EndX":332.878479,"EndY":227.632492}]},{"StartTime":322735.0,"Objects":[{"StartTime":322735.0,"EndTime":322850.0,"StartX":512.0,"StartY":154.0,"EndX":426.4768,"EndY":191.789322}]},{"StartTime":322966.0,"Objects":[{"StartTime":322966.0,"EndTime":322966.0,"StartX":256.0,"StartY":352.0,"EndX":256.0,"EndY":352.0}]},{"StartTime":323081.0,"Objects":[{"StartTime":323081.0,"EndTime":323081.0,"StartX":170.0,"StartY":310.0,"EndX":170.0,"EndY":310.0}]},{"StartTime":323197.0,"Objects":[{"StartTime":323197.0,"EndTime":323312.0,"StartX":100.0,"StartY":373.0,"EndX":6.62146759,"EndY":368.235779}]},{"StartTime":323427.0,"Objects":[{"StartTime":323427.0,"EndTime":323542.0,"StartX":152.0,"StartY":229.0,"EndX":245.37854,"EndY":224.2358}]},{"StartTime":323658.0,"Objects":[{"StartTime":323658.0,"EndTime":323773.0,"StartX":93.0,"StartY":294.0,"EndX":-0.3785324,"EndY":289.235779}]},{"StartTime":323888.0,"Objects":[{"StartTime":323888.0,"EndTime":324003.0,"StartX":145.0,"StartY":150.0,"EndX":238.37854,"EndY":145.2358}]},{"StartTime":324120.0,"Objects":[{"StartTime":324120.0,"EndTime":324120.0,"StartX":82.0,"StartY":221.0,"EndX":82.0,"EndY":221.0}]},{"StartTime":324177.0,"Objects":[{"StartTime":324177.0,"EndTime":324177.0,"StartX":69.0,"StartY":207.0,"EndX":69.0,"EndY":207.0}]},{"StartTime":324235.0,"Objects":[{"StartTime":324235.0,"EndTime":324235.0,"StartX":60.0,"StartY":191.0,"EndX":60.0,"EndY":191.0}]},{"StartTime":324293.0,"Objects":[{"StartTime":324293.0,"EndTime":324293.0,"StartX":54.0,"StartY":173.0,"EndX":54.0,"EndY":173.0}]},{"StartTime":324350.0,"Objects":[{"StartTime":324350.0,"EndTime":324350.0,"StartX":52.0,"StartY":154.0,"EndX":52.0,"EndY":154.0}]},{"StartTime":324408.0,"Objects":[{"StartTime":324408.0,"EndTime":324408.0,"StartX":54.0,"StartY":136.0,"EndX":54.0,"EndY":136.0}]},{"StartTime":324466.0,"Objects":[{"StartTime":324466.0,"EndTime":324466.0,"StartX":60.0,"StartY":118.0,"EndX":60.0,"EndY":118.0}]},{"StartTime":324523.0,"Objects":[{"StartTime":324523.0,"EndTime":324523.0,"StartX":70.0,"StartY":102.0,"EndX":70.0,"EndY":102.0}]},{"StartTime":324581.0,"Objects":[{"StartTime":324581.0,"EndTime":324581.0,"StartX":82.0,"StartY":88.0,"EndX":82.0,"EndY":88.0}]},{"StartTime":324638.0,"Objects":[{"StartTime":324638.0,"EndTime":324638.0,"StartX":136.0,"StartY":92.0,"EndX":136.0,"EndY":92.0}]},{"StartTime":324696.0,"Objects":[{"StartTime":324696.0,"EndTime":324696.0,"StartX":176.0,"StartY":130.0,"EndX":176.0,"EndY":130.0}]},{"StartTime":324754.0,"Objects":[{"StartTime":324754.0,"EndTime":324754.0,"StartX":185.0,"StartY":185.0,"EndX":185.0,"EndY":185.0}]},{"StartTime":324811.0,"Objects":[{"StartTime":324811.0,"EndTime":324811.0,"StartX":157.0,"StartY":233.0,"EndX":157.0,"EndY":233.0}]},{"StartTime":324870.0,"Objects":[{"StartTime":324870.0,"EndTime":324870.0,"StartX":129.0,"StartY":280.0,"EndX":129.0,"EndY":280.0}]},{"StartTime":324927.0,"Objects":[{"StartTime":324927.0,"EndTime":324927.0,"StartX":137.0,"StartY":335.0,"EndX":137.0,"EndY":335.0}]},{"StartTime":324985.0,"Objects":[{"StartTime":324985.0,"EndTime":324985.0,"StartX":177.0,"StartY":373.0,"EndX":177.0,"EndY":373.0}]},{"StartTime":325043.0,"Objects":[{"StartTime":325043.0,"EndTime":325273.0,"StartX":232.0,"StartY":378.0,"EndX":417.921875,"EndY":380.0021}]},{"StartTime":325389.0,"Objects":[{"StartTime":325389.0,"EndTime":325389.0,"StartX":485.0,"StartY":314.0,"EndX":485.0,"EndY":314.0}]},{"StartTime":325504.0,"Objects":[{"StartTime":325504.0,"EndTime":325734.0,"StartX":267.0,"StartY":218.0,"EndX":81.07812,"EndY":220.0021}]},{"StartTime":325850.0,"Objects":[{"StartTime":325850.0,"EndTime":325850.0,"StartX":14.0,"StartY":154.0,"EndX":14.0,"EndY":154.0}]},{"StartTime":325966.0,"Objects":[{"StartTime":325966.0,"EndTime":326081.0,"StartX":323.0,"StartY":267.0,"EndX":330.8841,"EndY":179.774734}]},{"StartTime":326197.0,"Objects":[{"StartTime":326197.0,"EndTime":326197.0,"StartX":250.0,"StartY":19.0,"EndX":250.0,"EndY":19.0}]},{"StartTime":326427.0,"Objects":[{"StartTime":326427.0,"EndTime":326542.0,"StartX":250.0,"StartY":19.0,"EndX":240.312836,"EndY":111.996819}]},{"StartTime":326658.0,"Objects":[{"StartTime":326658.0,"EndTime":326773.0,"StartX":426.0,"StartY":191.0,"EndX":434.638153,"EndY":97.89988}]},{"StartTime":326889.0,"Objects":[{"StartTime":326889.0,"EndTime":327119.0,"StartX":82.0,"StartY":221.0,"EndX":266.5864,"EndY":217.909637}]},{"StartTime":327235.0,"Objects":[{"StartTime":327235.0,"EndTime":327235.0,"StartX":511.0,"StartY":288.0,"EndX":511.0,"EndY":288.0}]},{"StartTime":327350.0,"Objects":[{"StartTime":327350.0,"EndTime":327465.0,"StartX":449.0,"StartY":357.0,"EndX":355.981232,"EndY":347.525879}]},{"StartTime":327581.0,"Objects":[{"StartTime":327581.0,"EndTime":327696.0,"StartX":332.0,"StartY":181.0,"EndX":425.018768,"EndY":190.474136}]},{"StartTime":327812.0,"Objects":[{"StartTime":327812.0,"EndTime":327812.0,"StartX":505.0,"StartY":141.0,"EndX":505.0,"EndY":141.0}]},{"StartTime":327927.0,"Objects":[{"StartTime":327927.0,"EndTime":327927.0,"StartX":304.0,"StartY":46.0,"EndX":304.0,"EndY":46.0}]},{"StartTime":328043.0,"Objects":[{"StartTime":328043.0,"EndTime":328158.0,"StartX":323.0,"StartY":268.0,"EndX":333.2415,"EndY":180.425323}]},{"StartTime":328273.0,"Objects":[{"StartTime":328273.0,"EndTime":328388.0,"StartX":155.0,"StartY":62.0,"EndX":144.758514,"EndY":149.574677}]},{"StartTime":328504.0,"Objects":[{"StartTime":328504.0,"EndTime":328619.0,"StartX":248.0,"StartY":372.0,"EndX":154.981232,"EndY":381.474121}]},{"StartTime":328735.0,"Objects":[{"StartTime":328735.0,"EndTime":328965.0,"StartX":242.0,"StartY":206.0,"EndX":425.4981,"EndY":189.6447}]},{"StartTime":329081.0,"Objects":[{"StartTime":329081.0,"EndTime":329081.0,"StartX":503.0,"StartY":242.0,"EndX":503.0,"EndY":242.0}]},{"StartTime":329197.0,"Objects":[{"StartTime":329197.0,"EndTime":329312.0,"StartX":442.0,"StartY":9.0,"EndX":433.993866,"EndY":96.97322}]},{"StartTime":329427.0,"Objects":[{"StartTime":329427.0,"EndTime":329542.0,"StartX":323.0,"StartY":268.0,"EndX":330.1165,"EndY":179.508331}]},{"StartTime":329658.0,"Objects":[{"StartTime":329658.0,"EndTime":329831.0,"StartX":155.0,"StartY":62.0,"EndX":168.9554,"EndY":201.55397}]},{"StartTime":329889.0,"Objects":[{"StartTime":329889.0,"EndTime":330004.0,"StartX":168.0,"StartY":201.0,"EndX":87.631546,"EndY":174.194534}]},{"StartTime":330120.0,"Objects":[{"StartTime":330120.0,"EndTime":330235.0,"StartX":229.0,"StartY":277.0,"EndX":321.9641,"EndY":267.003845}]},{"StartTime":330350.0,"Objects":[{"StartTime":330350.0,"EndTime":330465.0,"StartX":137.0,"StartY":335.0,"EndX":44.0246429,"EndY":325.109}]},{"StartTime":330581.0,"Objects":[{"StartTime":330581.0,"EndTime":330754.0,"StartX":309.0,"StartY":359.0,"EndX":413.2007,"EndY":297.7038}]},{"StartTime":330812.0,"Objects":[{"StartTime":330812.0,"EndTime":330927.0,"StartX":415.0,"StartY":299.0,"EndX":421.031,"EndY":210.931259}]},{"StartTime":331043.0,"Objects":[{"StartTime":331043.0,"EndTime":331158.0,"StartX":512.0,"StartY":47.0,"EndX":502.003845,"EndY":139.964111}]},{"StartTime":331273.0,"Objects":[{"StartTime":331273.0,"EndTime":331388.0,"StartX":330.0,"StartY":179.0,"EndX":338.911377,"EndY":85.92564}]},{"StartTime":331504.0,"Objects":[{"StartTime":331504.0,"EndTime":331677.0,"StartX":512.0,"StartY":320.0,"EndX":385.767517,"EndY":370.49588}]},{"StartTime":331735.0,"Objects":[{"StartTime":331735.0,"EndTime":331850.0,"StartX":385.0,"StartY":370.0,"EndX":292.024658,"EndY":360.109}]},{"StartTime":331966.0,"Objects":[{"StartTime":331966.0,"EndTime":331966.0,"StartX":62.0,"StartY":381.0,"EndX":62.0,"EndY":381.0}]},{"StartTime":332081.0,"Objects":[{"StartTime":332081.0,"EndTime":332081.0,"StartX":161.0,"StartY":306.0,"EndX":161.0,"EndY":306.0}]},{"StartTime":332138.0,"Objects":[{"StartTime":332138.0,"EndTime":332138.0,"StartX":162.0,"StartY":259.0,"EndX":162.0,"EndY":259.0}]},{"StartTime":332196.0,"Objects":[{"StartTime":332196.0,"EndTime":332196.0,"StartX":140.0,"StartY":219.0,"EndX":140.0,"EndY":219.0}]},{"StartTime":332254.0,"Objects":[{"StartTime":332254.0,"EndTime":332254.0,"StartX":101.0,"StartY":194.0,"EndX":101.0,"EndY":194.0}]},{"StartTime":332312.0,"Objects":[{"StartTime":332312.0,"EndTime":332312.0,"StartX":73.0,"StartY":155.0,"EndX":73.0,"EndY":155.0}]},{"StartTime":332370.0,"Objects":[{"StartTime":332370.0,"EndTime":332370.0,"StartX":73.0,"StartY":108.0,"EndX":73.0,"EndY":108.0}]},{"StartTime":332427.0,"Objects":[{"StartTime":332427.0,"EndTime":332657.0,"StartX":96.0,"StartY":68.0,"EndX":265.196472,"EndY":68.65573}]},{"StartTime":332773.0,"Objects":[{"StartTime":332773.0,"EndTime":332773.0,"StartX":337.0,"StartY":9.0,"EndX":337.0,"EndY":9.0}]},{"StartTime":332889.0,"Objects":[{"StartTime":332889.0,"EndTime":333004.0,"StartX":421.0,"StartY":210.0,"EndX":418.8342,"EndY":121.502594}]},{"StartTime":333120.0,"Objects":[{"StartTime":333120.0,"EndTime":333235.0,"StartX":215.0,"StartY":213.0,"EndX":216.580368,"EndY":301.688629}]},{"StartTime":333350.0,"Objects":[{"StartTime":333350.0,"EndTime":333523.0,"StartX":344.0,"StartY":145.0,"EndX":336.286469,"EndY":8.384621}]},{"StartTime":333581.0,"Objects":[{"StartTime":333581.0,"EndTime":333696.0,"StartX":337.0,"StartY":9.0,"EndX":429.627045,"EndY":21.7468414}]},{"StartTime":333812.0,"Objects":[{"StartTime":333812.0,"EndTime":333927.0,"StartX":498.0,"StartY":196.0,"EndX":420.656433,"EndY":210.651871}]},{"StartTime":334043.0,"Objects":[{"StartTime":334043.0,"EndTime":334158.0,"StartX":292.0,"StartY":360.0,"EndX":213.406525,"EndY":372.487457}]},{"StartTime":334273.0,"Objects":[{"StartTime":334273.0,"EndTime":334503.0,"StartX":32.0,"StartY":201.0,"EndX":214.972687,"EndY":212.007431}]},{"StartTime":334735.0,"Objects":[{"StartTime":334735.0,"EndTime":334850.0,"StartX":214.0,"StartY":212.0,"EndX":199.81752,"EndY":119.635895}]},{"StartTime":334966.0,"Objects":[{"StartTime":334966.0,"EndTime":335081.0,"StartX":306.0,"StartY":267.0,"EndX":291.648315,"EndY":359.327148}]},{"StartTime":335197.0,"Objects":[{"StartTime":335197.0,"EndTime":335427.0,"StartX":72.0,"StartY":357.0,"EndX":216.634521,"EndY":300.623383}]},{"StartTime":335543.0,"Objects":[{"StartTime":335543.0,"EndTime":335543.0,"StartX":291.0,"StartY":359.0,"EndX":291.0,"EndY":359.0}]},{"StartTime":335658.0,"Objects":[{"StartTime":335658.0,"EndTime":335888.0,"StartX":498.0,"StartY":196.0,"EndX":314.288574,"EndY":188.752335}]},{"StartTime":336004.0,"Objects":[{"StartTime":336004.0,"EndTime":336004.0,"StartX":221.0,"StartY":176.0,"EndX":221.0,"EndY":176.0}]},{"StartTime":336120.0,"Objects":[{"StartTime":336120.0,"EndTime":336293.0,"StartX":10.0,"StartY":86.0,"EndX":143.863708,"EndY":50.2149963}]},{"StartTime":336350.0,"Objects":[{"StartTime":336350.0,"EndTime":336465.0,"StartX":143.0,"StartY":50.0,"EndX":112.3037,"EndY":133.231415}]},{"StartTime":336581.0,"Objects":[{"StartTime":336581.0,"EndTime":336696.0,"StartX":277.0,"StartY":245.0,"EndX":221.2786,"EndY":175.806427}]},{"StartTime":336812.0,"Objects":[{"StartTime":336812.0,"EndTime":336927.0,"StartX":41.0,"StartY":262.0,"EndX":128.285,"EndY":247.550751}]},{"StartTime":337043.0,"Objects":[{"StartTime":337043.0,"EndTime":337043.0,"StartX":223.0,"StartY":176.0,"EndX":223.0,"EndY":176.0}]},{"StartTime":337100.0,"Objects":[{"StartTime":337100.0,"EndTime":337100.0,"StartX":221.0,"StartY":157.0,"EndX":221.0,"EndY":157.0}]},{"StartTime":337158.0,"Objects":[{"StartTime":337158.0,"EndTime":337158.0,"StartX":219.0,"StartY":138.0,"EndX":219.0,"EndY":138.0}]},{"StartTime":337216.0,"Objects":[{"StartTime":337216.0,"EndTime":337216.0,"StartX":217.0,"StartY":120.0,"EndX":217.0,"EndY":120.0}]},{"StartTime":337273.0,"Objects":[{"StartTime":337273.0,"EndTime":337273.0,"StartX":215.0,"StartY":101.0,"EndX":215.0,"EndY":101.0}]},{"StartTime":337331.0,"Objects":[{"StartTime":337331.0,"EndTime":337331.0,"StartX":213.0,"StartY":82.0,"EndX":213.0,"EndY":82.0}]},{"StartTime":337389.0,"Objects":[{"StartTime":337389.0,"EndTime":337389.0,"StartX":211.0,"StartY":64.0,"EndX":211.0,"EndY":64.0}]},{"StartTime":337446.0,"Objects":[{"StartTime":337446.0,"EndTime":337446.0,"StartX":209.0,"StartY":45.0,"EndX":209.0,"EndY":45.0}]},{"StartTime":337504.0,"Objects":[{"StartTime":337504.0,"EndTime":337504.0,"StartX":208.0,"StartY":27.0,"EndX":208.0,"EndY":27.0}]},{"StartTime":337561.0,"Objects":[{"StartTime":337561.0,"EndTime":337561.0,"StartX":258.0,"StartY":48.0,"EndX":258.0,"EndY":48.0}]},{"StartTime":337619.0,"Objects":[{"StartTime":337619.0,"EndTime":337619.0,"StartX":283.0,"StartY":97.0,"EndX":283.0,"EndY":97.0}]},{"StartTime":337677.0,"Objects":[{"StartTime":337677.0,"EndTime":337677.0,"StartX":270.0,"StartY":151.0,"EndX":270.0,"EndY":151.0}]},{"StartTime":337734.0,"Objects":[{"StartTime":337734.0,"EndTime":337734.0,"StartX":227.0,"StartY":184.0,"EndX":227.0,"EndY":184.0}]},{"StartTime":337793.0,"Objects":[{"StartTime":337793.0,"EndTime":337793.0,"StartX":183.0,"StartY":217.0,"EndX":183.0,"EndY":217.0}]},{"StartTime":337851.0,"Objects":[{"StartTime":337851.0,"EndTime":337851.0,"StartX":170.0,"StartY":270.0,"EndX":170.0,"EndY":270.0}]},{"StartTime":337909.0,"Objects":[{"StartTime":337909.0,"EndTime":337909.0,"StartX":195.0,"StartY":319.0,"EndX":195.0,"EndY":319.0}]},{"StartTime":337966.0,"Objects":[{"StartTime":337966.0,"EndTime":338196.0,"StartX":246.0,"StartY":340.0,"EndX":430.9931,"EndY":337.685455}]},{"StartTime":338312.0,"Objects":[{"StartTime":338312.0,"EndTime":338312.0,"StartX":501.0,"StartY":276.0,"EndX":501.0,"EndY":276.0}]},{"StartTime":338427.0,"Objects":[{"StartTime":338427.0,"EndTime":338657.0,"StartX":266.0,"StartY":215.0,"EndX":81.00041,"EndY":212.782654}]},{"StartTime":338773.0,"Objects":[{"StartTime":338773.0,"EndTime":338773.0,"StartX":11.0,"StartY":151.0,"EndX":11.0,"EndY":151.0}]},{"StartTime":338889.0,"Objects":[{"StartTime":338889.0,"EndTime":339004.0,"StartX":252.0,"StartY":34.0,"EndX":248.010468,"EndY":121.030006}]},{"StartTime":339120.0,"Objects":[{"StartTime":339120.0,"EndTime":339235.0,"StartX":425.0,"StartY":190.0,"EndX":428.425751,"EndY":103.170822}]},{"StartTime":339350.0,"Objects":[{"StartTime":339350.0,"EndTime":339350.0,"StartX":336.0,"StartY":155.0,"EndX":336.0,"EndY":155.0}]},{"StartTime":339407.0,"Objects":[{"StartTime":339407.0,"EndTime":339407.0,"StartX":336.0,"StartY":173.0,"EndX":336.0,"EndY":173.0}]},{"StartTime":339465.0,"Objects":[{"StartTime":339465.0,"EndTime":339465.0,"StartX":337.0,"StartY":192.0,"EndX":337.0,"EndY":192.0}]},{"StartTime":339523.0,"Objects":[{"StartTime":339523.0,"EndTime":339523.0,"StartX":338.0,"StartY":211.0,"EndX":338.0,"EndY":211.0}]},{"StartTime":339580.0,"Objects":[{"StartTime":339580.0,"EndTime":339580.0,"StartX":338.0,"StartY":229.0,"EndX":338.0,"EndY":229.0}]},{"StartTime":339638.0,"Objects":[{"StartTime":339638.0,"EndTime":339638.0,"StartX":339.0,"StartY":248.0,"EndX":339.0,"EndY":248.0}]},{"StartTime":339696.0,"Objects":[{"StartTime":339696.0,"EndTime":339696.0,"StartX":340.0,"StartY":267.0,"EndX":340.0,"EndY":267.0}]},{"StartTime":339753.0,"Objects":[{"StartTime":339753.0,"EndTime":339753.0,"StartX":340.0,"StartY":285.0,"EndX":340.0,"EndY":285.0}]},{"StartTime":339812.0,"Objects":[{"StartTime":339812.0,"EndTime":340042.0,"StartX":340.0,"StartY":303.0,"EndX":486.874847,"EndY":262.476471}]},{"StartTime":340158.0,"Objects":[{"StartTime":340158.0,"EndTime":340158.0,"StartX":425.0,"StartY":190.0,"EndX":425.0,"EndY":190.0}]},{"StartTime":340273.0,"Objects":[{"StartTime":340273.0,"EndTime":340388.0,"StartX":246.0,"StartY":340.0,"EndX":221.6169,"EndY":257.034}]},{"StartTime":340504.0,"Objects":[{"StartTime":340504.0,"EndTime":340619.0,"StartX":56.0,"StartY":129.0,"EndX":80.38311,"EndY":211.965988}]},{"StartTime":340735.0,"Objects":[{"StartTime":340735.0,"EndTime":340965.0,"StartX":306.0,"StartY":198.0,"EndX":321.624359,"EndY":14.0174713}]},{"StartTime":341081.0,"Objects":[{"StartTime":341081.0,"EndTime":341081.0,"StartX":237.0,"StartY":53.0,"EndX":237.0,"EndY":53.0}]},{"StartTime":341197.0,"Objects":[{"StartTime":341197.0,"EndTime":341312.0,"StartX":340.0,"StartY":267.0,"EndX":432.88443,"EndY":256.536774}]},{"StartTime":341427.0,"Objects":[{"StartTime":341427.0,"EndTime":341542.0,"StartX":246.0,"StartY":340.0,"EndX":153.1035,"EndY":329.5818}]},{"StartTime":341658.0,"Objects":[{"StartTime":341658.0,"EndTime":341888.0,"StartX":13.0,"StartY":157.0,"EndX":186.088242,"EndY":213.289383}]},{"StartTime":342004.0,"Objects":[{"StartTime":342004.0,"EndTime":342004.0,"StartX":241.0,"StartY":137.0,"EndX":241.0,"EndY":137.0}]},{"StartTime":342120.0,"Objects":[{"StartTime":342120.0,"EndTime":342235.0,"StartX":42.0,"StartY":237.0,"EndX":50.8947067,"EndY":325.530121}]},{"StartTime":342350.0,"Objects":[{"StartTime":342350.0,"EndTime":342465.0,"StartX":162.0,"StartY":129.0,"EndX":153.1053,"EndY":40.4698868}]},{"StartTime":342581.0,"Objects":[{"StartTime":342581.0,"EndTime":342811.0,"StartX":153.0,"StartY":329.0,"EndX":336.57074,"EndY":330.948883}]},{"StartTime":342927.0,"Objects":[{"StartTime":342927.0,"EndTime":342927.0,"StartX":417.0,"StartY":379.0,"EndX":417.0,"EndY":379.0}]},{"StartTime":343043.0,"Objects":[{"StartTime":343043.0,"EndTime":343273.0,"StartX":306.0,"StartY":198.0,"EndX":362.014862,"EndY":25.198595}]},{"StartTime":343389.0,"Objects":[{"StartTime":343389.0,"EndTime":343389.0,"StartX":489.0,"StartY":112.0,"EndX":489.0,"EndY":112.0}]},{"StartTime":343447.0,"Objects":[{"StartTime":343447.0,"EndTime":343447.0,"StartX":489.0,"StartY":112.0,"EndX":489.0,"EndY":112.0}]},{"StartTime":343504.0,"Objects":[{"StartTime":343504.0,"EndTime":343734.0,"StartX":489.0,"StartY":112.0,"EndX":430.810028,"EndY":255.1297}]},{"StartTime":343850.0,"Objects":[{"StartTime":343850.0,"EndTime":344080.0,"StartX":248.0,"StartY":341.0,"EndX":303.8333,"EndY":197.0142}]},{"StartTime":344197.0,"Objects":[{"StartTime":344197.0,"EndTime":344312.0,"StartX":508.0,"StartY":361.0,"EndX":416.056519,"EndY":377.989563}]},{"StartTime":344370.0,"Objects":[{"StartTime":344370.0,"EndTime":344370.0,"StartX":401.0,"StartY":373.0,"EndX":401.0,"EndY":373.0}]},{"StartTime":344427.0,"Objects":[{"StartTime":344427.0,"EndTime":344657.0,"StartX":386.0,"StartY":367.0,"EndX":199.418442,"EndY":354.4971}]},{"StartTime":344773.0,"Objects":[{"StartTime":344773.0,"EndTime":344773.0,"StartX":107.0,"StartY":375.0,"EndX":107.0,"EndY":375.0}]},{"StartTime":344889.0,"Objects":[{"StartTime":344889.0,"EndTime":345004.0,"StartX":122.0,"StartY":199.0,"EndX":139.229675,"EndY":285.376923}]},{"StartTime":345120.0,"Objects":[{"StartTime":345120.0,"EndTime":345235.0,"StartX":13.0,"StartY":157.0,"EndX":28.3985329,"EndY":70.64887}]},{"StartTime":345350.0,"Objects":[{"StartTime":345350.0,"EndTime":345465.0,"StartX":200.0,"StartY":35.0,"EndX":292.961,"EndY":45.0252037}]},{"StartTime":345581.0,"Objects":[{"StartTime":345581.0,"EndTime":345696.0,"StartX":396.0,"StartY":207.0,"EndX":303.147247,"EndY":196.01741}]},{"StartTime":345812.0,"Objects":[{"StartTime":345812.0,"EndTime":345927.0,"StartX":384.0,"StartY":23.0,"EndX":372.899719,"EndY":115.838753}]},{"StartTime":346043.0,"Objects":[{"StartTime":346043.0,"EndTime":346158.0,"StartX":212.0,"StartY":219.0,"EndX":222.0252,"EndY":126.039009}]},{"StartTime":346273.0,"Objects":[{"StartTime":346273.0,"EndTime":346446.0,"StartX":512.0,"StartY":279.0,"EndX":372.54837,"EndY":293.938843}]},{"StartTime":346504.0,"Objects":[{"StartTime":346504.0,"EndTime":346677.0,"StartX":349.0,"StartY":363.0,"EndX":251.56488,"EndY":351.0558}]},{"StartTime":346735.0,"Objects":[{"StartTime":346735.0,"EndTime":346908.0,"StartX":212.0,"StartY":293.0,"EndX":86.40335,"EndY":305.496063}]},{"StartTime":346966.0,"Objects":[{"StartTime":346966.0,"EndTime":347081.0,"StartX":27.0,"StartY":257.0,"EndX":17.0992432,"EndY":204.344482}]},{"StartTime":347197.0,"Objects":[{"StartTime":347197.0,"EndTime":347427.0,"StartX":133.0,"StartY":13.0,"EndX":122.304,"EndY":199.693832}]},{"StartTime":347543.0,"Objects":[{"StartTime":347543.0,"EndTime":347543.0,"StartX":251.0,"StartY":351.0,"EndX":251.0,"EndY":351.0}]},{"StartTime":347658.0,"Objects":[{"StartTime":347658.0,"EndTime":347773.0,"StartX":311.0,"StartY":280.0,"EndX":321.293121,"EndY":193.711548}]},{"StartTime":347889.0,"Objects":[{"StartTime":347889.0,"EndTime":348004.0,"StartX":232.0,"StartY":39.0,"EndX":221.182831,"EndY":125.364609}]},{"StartTime":348120.0,"Objects":[{"StartTime":348120.0,"EndTime":348235.0,"StartX":466.0,"StartY":107.0,"EndX":372.7931,"EndY":114.397377}]},{"StartTime":348350.0,"Objects":[{"StartTime":348350.0,"EndTime":348465.0,"StartX":228.0,"StartY":202.0,"EndX":321.100616,"EndY":193.395279}]},{"StartTime":348581.0,"Objects":[{"StartTime":348581.0,"EndTime":348696.0,"StartX":489.0,"StartY":256.0,"EndX":395.7931,"EndY":263.397369}]},{"StartTime":348811.0,"Objects":[{"StartTime":348811.0,"EndTime":348926.0,"StartX":251.0,"StartY":351.0,"EndX":344.100616,"EndY":342.395264}]},{"StartTime":348985.0,"Objects":[{"StartTime":348985.0,"EndTime":348985.0,"StartX":360.0,"StartY":351.0,"EndX":360.0,"EndY":351.0}]},{"StartTime":349043.0,"Objects":[{"StartTime":349043.0,"EndTime":349273.0,"StartX":375.0,"StartY":359.0,"EndX":414.0389,"EndY":198.942963}]},{"StartTime":349389.0,"Objects":[{"StartTime":349389.0,"EndTime":349389.0,"StartX":372.0,"StartY":115.0,"EndX":372.0,"EndY":115.0}]},{"StartTime":349504.0,"Objects":[{"StartTime":349504.0,"EndTime":349619.0,"StartX":496.0,"StartY":18.0,"EndX":487.986572,"EndY":111.155975}]},{"StartTime":349735.0,"Objects":[{"StartTime":349735.0,"EndTime":349850.0,"StartX":328.0,"StartY":286.0,"EndX":320.071228,"EndY":192.836792}]},{"StartTime":349966.0,"Objects":[{"StartTime":349966.0,"EndTime":350196.0,"StartX":125.0,"StartY":50.0,"EndX":284.148956,"EndY":88.47991}]},{"StartTime":350312.0,"Objects":[{"StartTime":350312.0,"EndTime":350312.0,"StartX":356.0,"StartY":28.0,"EndX":356.0,"EndY":28.0}]},{"StartTime":350427.0,"Objects":[{"StartTime":350427.0,"EndTime":350657.0,"StartX":227.0,"StartY":184.0,"EndX":225.454483,"EndY":367.288971}]},{"StartTime":350773.0,"Objects":[{"StartTime":350773.0,"EndTime":350773.0,"StartX":134.0,"StartY":342.0,"EndX":134.0,"EndY":342.0}]},{"StartTime":350889.0,"Objects":[{"StartTime":350889.0,"EndTime":351119.0,"StartX":10.0,"StartY":277.0,"EndX":-0.06311858,"EndY":90.27113}]},{"StartTime":351235.0,"Objects":[{"StartTime":351235.0,"EndTime":351235.0,"StartX":51.0,"StartY":13.0,"EndX":51.0,"EndY":13.0}]},{"StartTime":351350.0,"Objects":[{"StartTime":351350.0,"EndTime":351580.0,"StartX":215.0,"StartY":180.0,"EndX":225.063126,"EndY":366.728882}]},{"StartTime":351812.0,"Objects":[{"StartTime":351812.0,"EndTime":352042.0,"StartX":502.0,"StartY":277.0,"EndX":512.0631,"EndY":90.27113}]},{"StartTime":352158.0,"Objects":[{"StartTime":352158.0,"EndTime":352158.0,"StartX":461.0,"StartY":13.0,"EndX":461.0,"EndY":13.0}]},{"StartTime":352273.0,"Objects":[{"StartTime":352273.0,"EndTime":352388.0,"StartX":372.0,"StartY":115.0,"EndX":357.579346,"EndY":202.246719}]},{"StartTime":352504.0,"Objects":[{"StartTime":352504.0,"EndTime":352619.0,"StartX":440.0,"StartY":349.0,"EndX":371.599976,"EndY":292.499023}]},{"StartTime":352735.0,"Objects":[{"StartTime":352735.0,"EndTime":352965.0,"StartX":99.0,"StartY":278.0,"EndX":284.928223,"EndY":258.007721}]},{"StartTime":353081.0,"Objects":[{"StartTime":353081.0,"EndTime":353081.0,"StartX":371.0,"StartY":292.0,"EndX":371.0,"EndY":292.0}]},{"StartTime":353197.0,"Objects":[{"StartTime":353197.0,"EndTime":353312.0,"StartX":450.0,"StartY":211.0,"EndX":357.0359,"EndY":201.00386}]},{"StartTime":353427.0,"Objects":[{"StartTime":353427.0,"EndTime":353542.0,"StartX":191.0,"StartY":152.0,"EndX":283.9525,"EndY":141.896469}]},{"StartTime":353658.0,"Objects":[{"StartTime":353658.0,"EndTime":353773.0,"StartX":393.0,"StartY":31.0,"EndX":371.820251,"EndY":114.7932}]},{"StartTime":353889.0,"Objects":[{"StartTime":353889.0,"EndTime":354004.0,"StartX":489.0,"StartY":256.0,"EndX":509.3886,"EndY":172.331635}]},{"StartTime":354120.0,"Objects":[{"StartTime":354120.0,"EndTime":354235.0,"StartX":357.0,"StartY":201.0,"EndX":371.809753,"EndY":293.072876}]},{"StartTime":354350.0,"Objects":[{"StartTime":354350.0,"EndTime":354465.0,"StartX":498.0,"StartY":96.0,"EndX":511.787018,"EndY":3.77911043}]},{"StartTime":354581.0,"Objects":[{"StartTime":354581.0,"EndTime":354811.0,"StartX":512.0,"StartY":333.0,"EndX":332.387054,"EndY":363.815735}]},{"StartTime":354927.0,"Objects":[{"StartTime":354927.0,"EndTime":354927.0,"StartX":284.0,"StartY":258.0,"EndX":284.0,"EndY":258.0}]},{"StartTime":355043.0,"Objects":[{"StartTime":355043.0,"EndTime":355273.0,"StartX":228.0,"StartY":334.0,"EndX":41.2429352,"EndY":324.4716}]},{"StartTime":355389.0,"Objects":[{"StartTime":355389.0,"EndTime":355389.0,"StartX":5.0,"StartY":239.0,"EndX":5.0,"EndY":239.0}]},{"StartTime":355504.0,"Objects":[{"StartTime":355504.0,"EndTime":355504.0,"StartX":199.0,"StartY":79.0,"EndX":199.0,"EndY":79.0}]},{"StartTime":355620.0,"Objects":[{"StartTime":355620.0,"EndTime":355620.0,"StartX":110.0,"StartY":108.0,"EndX":110.0,"EndY":108.0}]},{"StartTime":355735.0,"Objects":[{"StartTime":355735.0,"EndTime":355735.0,"StartX":208.0,"StartY":112.0,"EndX":208.0,"EndY":112.0}]},{"StartTime":355851.0,"Objects":[{"StartTime":355851.0,"EndTime":355851.0,"StartX":124.0,"StartY":116.0,"EndX":124.0,"EndY":116.0}]},{"StartTime":355966.0,"Objects":[{"StartTime":355966.0,"EndTime":355966.0,"StartX":211.0,"StartY":141.0,"EndX":211.0,"EndY":141.0}]},{"StartTime":356082.0,"Objects":[{"StartTime":356082.0,"EndTime":356082.0,"StartX":139.0,"StartY":124.0,"EndX":139.0,"EndY":124.0}]},{"StartTime":356197.0,"Objects":[{"StartTime":356197.0,"EndTime":356197.0,"StartX":210.0,"StartY":164.0,"EndX":210.0,"EndY":164.0}]},{"StartTime":356313.0,"Objects":[{"StartTime":356313.0,"EndTime":356313.0,"StartX":153.0,"StartY":133.0,"EndX":153.0,"EndY":133.0}]},{"StartTime":356427.0,"Objects":[{"StartTime":356427.0,"EndTime":356657.0,"StartX":90.0,"StartY":211.0,"EndX":276.261963,"EndY":194.4024}]},{"StartTime":356773.0,"Objects":[{"StartTime":356773.0,"EndTime":356773.0,"StartX":329.0,"StartY":116.0,"EndX":329.0,"EndY":116.0}]},{"StartTime":356889.0,"Objects":[{"StartTime":356889.0,"EndTime":357004.0,"StartX":450.0,"StartY":258.0,"EndX":356.8368,"EndY":265.928772}]},{"StartTime":357120.0,"Objects":[{"StartTime":357120.0,"EndTime":357235.0,"StartX":414.0,"StartY":101.0,"EndX":507.065216,"EndY":91.99369}]},{"StartTime":357350.0,"Objects":[{"StartTime":357350.0,"EndTime":357580.0,"StartX":304.0,"StartY":355.0,"EndX":275.4751,"EndY":193.381378}]},{"StartTime":357697.0,"Objects":[{"StartTime":357697.0,"EndTime":357697.0,"StartX":329.0,"StartY":116.0,"EndX":329.0,"EndY":116.0}]},{"StartTime":357812.0,"Objects":[{"StartTime":357812.0,"EndTime":357812.0,"StartX":110.0,"StartY":47.0,"EndX":110.0,"EndY":47.0}]},{"StartTime":357927.0,"Objects":[{"StartTime":357927.0,"EndTime":357927.0,"StartX":147.0,"StartY":134.0,"EndX":147.0,"EndY":134.0}]},{"StartTime":358043.0,"Objects":[{"StartTime":358043.0,"EndTime":358043.0,"StartX":93.0,"StartY":210.0,"EndX":93.0,"EndY":210.0}]},{"StartTime":358158.0,"Objects":[{"StartTime":358158.0,"EndTime":358158.0,"StartX":130.0,"StartY":297.0,"EndX":130.0,"EndY":297.0}]},{"StartTime":358273.0,"Objects":[{"StartTime":358273.0,"EndTime":358503.0,"StartX":304.0,"StartY":355.0,"EndX":117.738037,"EndY":338.4024}]},{"StartTime":358620.0,"Objects":[{"StartTime":358620.0,"EndTime":358620.0,"StartX":30.0,"StartY":374.0,"EndX":30.0,"EndY":374.0}]},{"StartTime":358735.0,"Objects":[{"StartTime":358735.0,"EndTime":358850.0,"StartX":0.0,"StartY":202.0,"EndX":93.1559753,"EndY":210.013412}]},{"StartTime":358966.0,"Objects":[{"StartTime":358966.0,"EndTime":359081.0,"StartX":218.0,"StartY":58.0,"EndX":124.925636,"EndY":49.088623}]},{"StartTime":359197.0,"Objects":[{"StartTime":359197.0,"EndTime":359658.0,"StartX":265.0,"StartY":250.0,"EndX":265.0,"EndY":250.0}]},{"StartTime":359773.0,"Objects":[{"StartTime":359773.0,"EndTime":359773.0,"StartX":202.0,"StartY":180.0,"EndX":202.0,"EndY":180.0}]},{"StartTime":359889.0,"Objects":[{"StartTime":359889.0,"EndTime":359889.0,"StartX":280.0,"StartY":128.0,"EndX":280.0,"EndY":128.0}]},{"StartTime":360004.0,"Objects":[{"StartTime":360004.0,"EndTime":360004.0,"StartX":218.0,"StartY":58.0,"EndX":218.0,"EndY":58.0}]},{"StartTime":360120.0,"Objects":[{"StartTime":360120.0,"EndTime":360350.0,"StartX":407.0,"StartY":0.0,"EndX":387.007721,"EndY":185.928238}]},{"StartTime":360466.0,"Objects":[{"StartTime":360466.0,"EndTime":360466.0,"StartX":449.0,"StartY":257.0,"EndX":449.0,"EndY":257.0}]},{"StartTime":360581.0,"Objects":[{"StartTime":360581.0,"EndTime":360696.0,"StartX":304.0,"StartY":355.0,"EndX":334.297119,"EndY":276.701324}]},{"StartTime":360812.0,"Objects":[{"StartTime":360812.0,"EndTime":360927.0,"StartX":479.0,"StartY":178.0,"EndX":448.5207,"EndY":255.8609}]},{"StartTime":361043.0,"Objects":[{"StartTime":361043.0,"EndTime":361158.0,"StartX":280.0,"StartY":128.0,"EndX":274.4001,"EndY":34.6678467}]},{"StartTime":361273.0,"Objects":[{"StartTime":361273.0,"EndTime":361388.0,"StartX":193.0,"StartY":261.0,"EndX":198.019638,"EndY":354.365173}]},{"StartTime":361504.0,"Objects":[{"StartTime":361504.0,"EndTime":361504.0,"StartX":36.0,"StartY":373.0,"EndX":36.0,"EndY":373.0}]},{"StartTime":361620.0,"Objects":[{"StartTime":361620.0,"EndTime":361620.0,"StartX":74.0,"StartY":286.0,"EndX":74.0,"EndY":286.0}]},{"StartTime":361735.0,"Objects":[{"StartTime":361735.0,"EndTime":361735.0,"StartX":8.0,"StartY":219.0,"EndX":8.0,"EndY":219.0}]},{"StartTime":361851.0,"Objects":[{"StartTime":361851.0,"EndTime":361851.0,"StartX":46.0,"StartY":134.0,"EndX":46.0,"EndY":134.0}]},{"StartTime":361966.0,"Objects":[{"StartTime":361966.0,"EndTime":362196.0,"StartX":193.0,"StartY":261.0,"EndX":336.945068,"EndY":197.733841}]},{"StartTime":362312.0,"Objects":[{"StartTime":362312.0,"EndTime":362312.0,"StartX":280.0,"StartY":128.0,"EndX":280.0,"EndY":128.0}]},{"StartTime":362427.0,"Objects":[{"StartTime":362427.0,"EndTime":362542.0,"StartX":136.0,"StartY":99.0,"EndX":136.619537,"EndY":186.493362}]},{"StartTime":362658.0,"Objects":[{"StartTime":362658.0,"EndTime":362773.0,"StartX":304.0,"StartY":355.0,"EndX":303.383759,"EndY":267.495758}]},{"StartTime":362831.0,"Objects":[{"StartTime":362831.0,"EndTime":362831.0,"StartX":291.0,"StartY":256.0,"EndX":291.0,"EndY":256.0}]},{"StartTime":362889.0,"Objects":[{"StartTime":362889.0,"EndTime":363119.0,"StartX":278.0,"StartY":244.0,"EndX":464.980377,"EndY":246.709854}]},{"StartTime":363235.0,"Objects":[{"StartTime":363235.0,"EndTime":363465.0,"StartX":202.0,"StartY":180.0,"EndX":15.0196228,"EndY":177.290146}]},{"StartTime":363581.0,"Objects":[{"StartTime":363581.0,"EndTime":363696.0,"StartX":280.0,"StartY":128.0,"EndX":373.482361,"EndY":126.184807}]},{"StartTime":363812.0,"Objects":[{"StartTime":363812.0,"EndTime":364273.0,"StartX":202.0,"StartY":180.0,"EndX":202.0,"EndY":180.0}]},{"StartTime":364389.0,"Objects":[{"StartTime":364389.0,"EndTime":364389.0,"StartX":280.0,"StartY":128.0,"EndX":280.0,"EndY":128.0}]},{"StartTime":364504.0,"Objects":[{"StartTime":364504.0,"EndTime":364619.0,"StartX":136.0,"StartY":99.0,"EndX":136.152527,"EndY":11.2166071}]},{"StartTime":364735.0,"Objects":[{"StartTime":364735.0,"EndTime":364850.0,"StartX":278.0,"StartY":244.0,"EndX":276.9106,"EndY":331.195862}]},{"StartTime":364966.0,"Objects":[{"StartTime":364966.0,"EndTime":365427.0,"StartX":36.0,"StartY":304.0,"EndX":191.452774,"EndY":291.6189}]},{"StartTime":365543.0,"Objects":[{"StartTime":365543.0,"EndTime":365543.0,"StartX":277.0,"StartY":331.0,"EndX":277.0,"EndY":331.0}]},{"StartTime":365658.0,"Objects":[{"StartTime":365658.0,"EndTime":365773.0,"StartX":437.0,"StartY":330.0,"EndX":464.182739,"EndY":246.050735}]},{"StartTime":365889.0,"Objects":[{"StartTime":365889.0,"EndTime":366004.0,"StartX":307.0,"StartY":44.0,"EndX":279.817261,"EndY":127.949265}]},{"StartTime":366120.0,"Objects":[{"StartTime":366120.0,"EndTime":366120.0,"StartX":374.0,"StartY":266.0,"EndX":374.0,"EndY":266.0}]},{"StartTime":366235.0,"Objects":[{"StartTime":366235.0,"EndTime":366465.0,"StartX":500.0,"StartY":153.0,"EndX":500.0,"EndY":153.0}]},{"StartTime":366581.0,"Objects":[{"StartTime":366581.0,"EndTime":366696.0,"StartX":374.0,"StartY":266.0,"EndX":386.0932,"EndY":358.714661}]},{"StartTime":366812.0,"Objects":[{"StartTime":366812.0,"EndTime":367042.0,"StartX":414.0,"StartY":164.0,"EndX":267.744141,"EndY":238.645279}]},{"StartTime":367158.0,"Objects":[{"StartTime":367158.0,"EndTime":367158.0,"StartX":188.0,"StartY":359.0,"EndX":188.0,"EndY":359.0}]},{"StartTime":367273.0,"Objects":[{"StartTime":367273.0,"EndTime":367388.0,"StartX":117.0,"StartY":297.0,"EndX":109.341568,"EndY":203.814987}]},{"StartTime":367504.0,"Objects":[{"StartTime":367504.0,"EndTime":367965.0,"StartX":15.0,"StartY":83.0,"EndX":378.823,"EndY":40.5067368}]},{"StartTime":368081.0,"Objects":[{"StartTime":368081.0,"EndTime":368081.0,"StartX":468.0,"StartY":13.0,"EndX":468.0,"EndY":13.0}]},{"StartTime":368197.0,"Objects":[{"StartTime":368197.0,"EndTime":368312.0,"StartX":445.0,"StartY":104.0,"EndX":452.021454,"EndY":197.2299}]},{"StartTime":368427.0,"Objects":[{"StartTime":368427.0,"EndTime":368657.0,"StartX":356.0,"StartY":295.0,"EndX":499.8424,"EndY":347.1567}]},{"StartTime":368773.0,"Objects":[{"StartTime":368773.0,"EndTime":369003.0,"StartX":284.0,"StartY":353.0,"EndX":140.1095,"EndY":298.577545}]},{"StartTime":369120.0,"Objects":[{"StartTime":369120.0,"EndTime":369235.0,"StartX":99.0,"StartY":213.0,"EndX":192.2299,"EndY":220.021469}]},{"StartTime":369350.0,"Objects":[{"StartTime":369350.0,"EndTime":369580.0,"StartX":378.0,"StartY":41.0,"EndX":197.235046,"EndY":62.3002167}]},{"StartTime":369697.0,"Objects":[{"StartTime":369697.0,"EndTime":369697.0,"StartX":111.0,"StartY":24.0,"EndX":111.0,"EndY":24.0}]},{"StartTime":369812.0,"Objects":[{"StartTime":369812.0,"EndTime":369927.0,"StartX":17.0,"StartY":161.0,"EndX":31.7866936,"EndY":74.24371}]},{"StartTime":370043.0,"Objects":[{"StartTime":370043.0,"EndTime":370158.0,"StartX":152.0,"StartY":211.0,"EndX":138.411133,"EndY":298.491272}]},{"StartTime":370273.0,"Objects":[{"StartTime":370273.0,"EndTime":370273.0,"StartX":5.0,"StartY":384.0,"EndX":5.0,"EndY":384.0}]},{"StartTime":370389.0,"Objects":[{"StartTime":370389.0,"EndTime":370389.0,"StartX":58.0,"StartY":268.0,"EndX":58.0,"EndY":268.0}]},{"StartTime":370504.0,"Objects":[{"StartTime":370504.0,"EndTime":370504.0,"StartX":130.0,"StartY":372.0,"EndX":130.0,"EndY":372.0}]},{"StartTime":370620.0,"Objects":[{"StartTime":370620.0,"EndTime":370620.0,"StartX":183.0,"StartY":256.0,"EndX":183.0,"EndY":256.0}]},{"StartTime":370677.0,"Objects":[{"StartTime":370677.0,"EndTime":370677.0,"StartX":187.0,"StartY":237.0,"EndX":187.0,"EndY":237.0}]},{"StartTime":370735.0,"Objects":[{"StartTime":370735.0,"EndTime":370735.0,"StartX":191.0,"StartY":219.0,"EndX":191.0,"EndY":219.0}]},{"StartTime":370793.0,"Objects":[{"StartTime":370793.0,"EndTime":370793.0,"StartX":196.0,"StartY":201.0,"EndX":196.0,"EndY":201.0}]},{"StartTime":370850.0,"Objects":[{"StartTime":370850.0,"EndTime":370850.0,"StartX":200.0,"StartY":183.0,"EndX":200.0,"EndY":183.0}]},{"StartTime":370908.0,"Objects":[{"StartTime":370908.0,"EndTime":370908.0,"StartX":205.0,"StartY":165.0,"EndX":205.0,"EndY":165.0}]},{"StartTime":370966.0,"Objects":[{"StartTime":370966.0,"EndTime":370966.0,"StartX":209.0,"StartY":146.0,"EndX":209.0,"EndY":146.0}]},{"StartTime":371081.0,"Objects":[{"StartTime":371081.0,"EndTime":371081.0,"StartX":111.0,"StartY":24.0,"EndX":111.0,"EndY":24.0}]},{"StartTime":371197.0,"Objects":[{"StartTime":371197.0,"EndTime":371427.0,"StartX":197.0,"StartY":62.0,"EndX":383.563843,"EndY":49.2351074}]},{"StartTime":371658.0,"Objects":[{"StartTime":371658.0,"EndTime":371888.0,"StartX":315.0,"StartY":322.0,"EndX":128.436172,"EndY":334.7649}]},{"StartTime":372120.0,"Objects":[{"StartTime":372120.0,"EndTime":372350.0,"StartX":457.0,"StartY":193.0,"EndX":443.9619,"EndY":379.544922}]},{"StartTime":372581.0,"Objects":[{"StartTime":372581.0,"EndTime":372696.0,"StartX":55.0,"StartY":191.0,"EndX":61.0197449,"EndY":97.693985}]},{"StartTime":372812.0,"Objects":[{"StartTime":372812.0,"EndTime":372812.0,"StartX":68.0,"StartY":4.0,"EndX":68.0,"EndY":4.0}]},{"StartTime":372927.0,"Objects":[{"StartTime":372927.0,"EndTime":372927.0,"StartX":152.0,"StartY":46.0,"EndX":152.0,"EndY":46.0}]},{"StartTime":373043.0,"Objects":[{"StartTime":373043.0,"EndTime":373273.0,"StartX":186.0,"StartY":263.0,"EndX":-0.5638275,"EndY":275.7649}]},{"StartTime":373504.0,"Objects":[{"StartTime":373504.0,"EndTime":373734.0,"StartX":326.0,"StartY":121.0,"EndX":512.563843,"EndY":108.235107}]},{"StartTime":373850.0,"Objects":[{"StartTime":373850.0,"EndTime":373850.0,"StartX":491.0,"StartY":199.0,"EndX":491.0,"EndY":199.0}]},{"StartTime":373966.0,"Objects":[{"StartTime":373966.0,"EndTime":374196.0,"StartX":468.0,"StartY":288.0,"EndX":281.455078,"EndY":301.0381}]},{"StartTime":374427.0,"Objects":[{"StartTime":374427.0,"EndTime":374542.0,"StartX":203.0,"StartY":5.0,"EndX":296.309082,"EndY":-0.9717822}]},{"StartTime":374658.0,"Objects":[{"StartTime":374658.0,"EndTime":374658.0,"StartX":389.0,"StartY":13.0,"EndX":389.0,"EndY":13.0}]},{"StartTime":374773.0,"Objects":[{"StartTime":374773.0,"EndTime":374773.0,"StartX":329.0,"StartY":84.0,"EndX":329.0,"EndY":84.0}]},{"StartTime":374830.0,"Objects":[{"StartTime":374830.0,"EndTime":374830.0,"StartX":327.0,"StartY":102.0,"EndX":327.0,"EndY":102.0}]},{"StartTime":374889.0,"Objects":[{"StartTime":374889.0,"EndTime":375119.0,"StartX":326.0,"StartY":121.0,"EndX":512.563843,"EndY":108.235107}]},{"StartTime":375350.0,"Objects":[{"StartTime":375350.0,"EndTime":375350.0,"StartX":227.0,"StartY":377.0,"EndX":227.0,"EndY":377.0}]},{"StartTime":375466.0,"Objects":[{"StartTime":375466.0,"EndTime":375466.0,"StartX":138.0,"StartY":348.0,"EndX":138.0,"EndY":348.0}]},{"StartTime":375581.0,"Objects":[{"StartTime":375581.0,"EndTime":375581.0,"StartX":138.0,"StartY":254.0,"EndX":138.0,"EndY":254.0}]},{"StartTime":375697.0,"Objects":[{"StartTime":375697.0,"EndTime":375697.0,"StartX":227.0,"StartY":225.0,"EndX":227.0,"EndY":225.0}]},{"StartTime":375812.0,"Objects":[{"StartTime":375812.0,"EndTime":376042.0,"StartX":282.0,"StartY":301.0,"EndX":468.544922,"EndY":287.9619}]},{"StartTime":376273.0,"Objects":[{"StartTime":376273.0,"EndTime":376503.0,"StartX":230.0,"StartY":83.0,"EndX":43.45508,"EndY":96.0380859}]},{"StartTime":376620.0,"Objects":[{"StartTime":376620.0,"EndTime":376620.0,"StartX":11.0,"StartY":185.0,"EndX":11.0,"EndY":185.0}]},{"StartTime":376735.0,"Objects":[{"StartTime":376735.0,"EndTime":376965.0,"StartX":303.0,"StartY":212.0,"EndX":316.0381,"EndY":25.4550781}]},{"StartTime":377197.0,"Objects":[{"StartTime":377197.0,"EndTime":377197.0,"StartX":43.0,"StartY":96.0,"EndX":43.0,"EndY":96.0}]},{"StartTime":377313.0,"Objects":[{"StartTime":377313.0,"EndTime":377313.0,"StartX":72.0,"StartY":7.0,"EndX":72.0,"EndY":7.0}]},{"StartTime":377428.0,"Objects":[{"StartTime":377428.0,"EndTime":377428.0,"StartX":166.0,"StartY":7.0,"EndX":166.0,"EndY":7.0}]},{"StartTime":377544.0,"Objects":[{"StartTime":377544.0,"EndTime":377544.0,"StartX":195.0,"StartY":96.0,"EndX":195.0,"EndY":96.0}]},{"StartTime":377658.0,"Objects":[{"StartTime":377658.0,"EndTime":377888.0,"StartX":119.0,"StartY":151.0,"EndX":132.038086,"EndY":337.544922}]},{"StartTime":378120.0,"Objects":[{"StartTime":378120.0,"EndTime":378350.0,"StartX":439.0,"StartY":382.0,"EndX":425.9619,"EndY":195.455078}]},{"StartTime":378581.0,"Objects":[{"StartTime":378581.0,"EndTime":379273.0,"StartX":348.0,"StartY":10.0,"EndX":132.2942,"EndY":337.2544}]},{"StartTime":379504.0,"Objects":[{"StartTime":379504.0,"EndTime":379734.0,"StartX":444.0,"StartY":354.0,"EndX":473.311646,"EndY":199.3194}]},{"StartTime":379850.0,"Objects":[{"StartTime":379850.0,"EndTime":380080.0,"StartX":348.0,"StartY":10.0,"EndX":318.688354,"EndY":164.6806}]},{"StartTime":380197.0,"Objects":[{"StartTime":380197.0,"EndTime":380312.0,"StartX":408.0,"StartY":139.0,"EndX":418.982574,"EndY":46.1472549}]},{"StartTime":380427.0,"Objects":[{"StartTime":380427.0,"EndTime":380427.0,"StartX":396.0,"StartY":231.0,"EndX":396.0,"EndY":231.0}]},{"StartTime":380543.0,"Objects":[{"StartTime":380543.0,"EndTime":380773.0,"StartX":396.0,"StartY":231.0,"EndX":255.399872,"EndY":294.9562}]},{"StartTime":380889.0,"Objects":[{"StartTime":380889.0,"EndTime":381004.0,"StartX":324.0,"StartY":358.0,"EndX":416.852753,"EndY":347.017426}]},{"StartTime":381120.0,"Objects":[{"StartTime":381120.0,"EndTime":381235.0,"StartX":255.0,"StartY":294.0,"EndX":162.147247,"EndY":283.017426}]},{"StartTime":381350.0,"Objects":[{"StartTime":381350.0,"EndTime":381350.0,"StartX":32.0,"StartY":66.0,"EndX":32.0,"EndY":66.0}]},{"StartTime":381466.0,"Objects":[{"StartTime":381466.0,"EndTime":381696.0,"StartX":32.0,"StartY":66.0,"EndX":172.600113,"EndY":129.956238}]},{"StartTime":381812.0,"Objects":[{"StartTime":381812.0,"EndTime":381927.0,"StartX":104.0,"StartY":193.0,"EndX":11.1472549,"EndY":182.01741}]},{"StartTime":382043.0,"Objects":[{"StartTime":382043.0,"EndTime":382158.0,"StartX":173.0,"StartY":129.0,"EndX":265.852753,"EndY":118.017418}]},{"StartTime":382273.0,"Objects":[{"StartTime":382273.0,"EndTime":382446.0,"StartX":490.0,"StartY":320.0,"EndX":444.2234,"EndY":310.509735}]},{"StartTime":382504.0,"Objects":[{"StartTime":382504.0,"EndTime":382677.0,"StartX":427.0,"StartY":332.0,"EndX":381.2234,"EndY":322.509735}]},{"StartTime":382735.0,"Objects":[{"StartTime":382735.0,"EndTime":382735.0,"StartX":349.0,"StartY":341.0,"EndX":349.0,"EndY":341.0}]},{"StartTime":382792.0,"Objects":[{"StartTime":382792.0,"EndTime":382792.0,"StartX":364.0,"StartY":312.0,"EndX":364.0,"EndY":312.0}]},{"StartTime":382850.0,"Objects":[{"StartTime":382850.0,"EndTime":382850.0,"StartX":365.0,"StartY":280.0,"EndX":365.0,"EndY":280.0}]},{"StartTime":382908.0,"Objects":[{"StartTime":382908.0,"EndTime":382908.0,"StartX":351.0,"StartY":251.0,"EndX":351.0,"EndY":251.0}]},{"StartTime":382966.0,"Objects":[{"StartTime":382966.0,"EndTime":382966.0,"StartX":325.0,"StartY":232.0,"EndX":325.0,"EndY":232.0}]},{"StartTime":383023.0,"Objects":[{"StartTime":383023.0,"EndTime":383023.0,"StartX":293.0,"StartY":227.0,"EndX":293.0,"EndY":227.0}]},{"StartTime":383080.0,"Objects":[{"StartTime":383080.0,"EndTime":383080.0,"StartX":267.0,"StartY":208.0,"EndX":267.0,"EndY":208.0}]},{"StartTime":383138.0,"Objects":[{"StartTime":383138.0,"EndTime":383138.0,"StartX":253.0,"StartY":179.0,"EndX":253.0,"EndY":179.0}]},{"StartTime":383197.0,"Objects":[{"StartTime":383197.0,"EndTime":383197.0,"StartX":254.0,"StartY":147.0,"EndX":254.0,"EndY":147.0}]},{"StartTime":383254.0,"Objects":[{"StartTime":383254.0,"EndTime":383254.0,"StartX":290.0,"StartY":174.0,"EndX":290.0,"EndY":174.0}]},{"StartTime":383312.0,"Objects":[{"StartTime":383312.0,"EndTime":383312.0,"StartX":303.0,"StartY":218.0,"EndX":303.0,"EndY":218.0}]},{"StartTime":383370.0,"Objects":[{"StartTime":383370.0,"EndTime":383370.0,"StartX":288.0,"StartY":262.0,"EndX":288.0,"EndY":262.0}]},{"StartTime":383427.0,"Objects":[{"StartTime":383427.0,"EndTime":383427.0,"StartX":250.0,"StartY":287.0,"EndX":250.0,"EndY":287.0}]},{"StartTime":383484.0,"Objects":[{"StartTime":383484.0,"EndTime":383484.0,"StartX":204.0,"StartY":280.0,"EndX":204.0,"EndY":280.0}]},{"StartTime":383542.0,"Objects":[{"StartTime":383542.0,"EndTime":383542.0,"StartX":171.0,"StartY":248.0,"EndX":171.0,"EndY":248.0}]},{"StartTime":383600.0,"Objects":[{"StartTime":383600.0,"EndTime":383600.0,"StartX":163.0,"StartY":203.0,"EndX":163.0,"EndY":203.0}]},{"StartTime":383657.0,"Objects":[{"StartTime":383657.0,"EndTime":383657.0,"StartX":182.0,"StartY":161.0,"EndX":182.0,"EndY":161.0}]},{"StartTime":383715.0,"Objects":[{"StartTime":383715.0,"EndTime":383715.0,"StartX":184.0,"StartY":102.0,"EndX":184.0,"EndY":102.0}]},{"StartTime":383773.0,"Objects":[{"StartTime":383773.0,"EndTime":383773.0,"StartX":144.0,"StartY":58.0,"EndX":144.0,"EndY":58.0}]},{"StartTime":383831.0,"Objects":[{"StartTime":383831.0,"EndTime":383831.0,"StartX":82.0,"StartY":54.0,"EndX":82.0,"EndY":54.0}]},{"StartTime":383889.0,"Objects":[{"StartTime":383889.0,"EndTime":383889.0,"StartX":35.0,"StartY":93.0,"EndX":35.0,"EndY":93.0}]},{"StartTime":383947.0,"Objects":[{"StartTime":383947.0,"EndTime":383947.0,"StartX":30.0,"StartY":153.0,"EndX":30.0,"EndY":153.0}]},{"StartTime":384004.0,"Objects":[{"StartTime":384004.0,"EndTime":384004.0,"StartX":58.0,"StartY":205.0,"EndX":58.0,"EndY":205.0}]},{"StartTime":384062.0,"Objects":[{"StartTime":384062.0,"EndTime":384062.0,"StartX":57.0,"StartY":266.0,"EndX":57.0,"EndY":266.0}]},{"StartTime":384120.0,"Objects":[{"StartTime":384120.0,"EndTime":384120.0,"StartX":18.0,"StartY":313.0,"EndX":18.0,"EndY":313.0}]}]} \ No newline at end of file diff --git a/osu.Game.Rulesets.Osu/Resources/Testing/Beatmaps/875945.osu b/osu.Game.Rulesets.Osu/Resources/Testing/Beatmaps/875945.osu deleted file mode 100644 index a24fcea30a..0000000000 --- a/osu.Game.Rulesets.Osu/Resources/Testing/Beatmaps/875945.osu +++ /dev/null @@ -1,1824 +0,0 @@ -osu file format v14 - -[General] -AudioFilename: imagematerial.mp3 -AudioLeadIn: 0 -PreviewTime: 165589 -Countdown: 0 -SampleSet: Soft -StackLeniency: 0.7 -Mode: 0 -LetterboxInBreaks: 0 -EpilepsyWarning: 1 -WidescreenStoryboard: 1 - -[Editor] -Bookmarks: 56435,71204,88743,103512,120127,134897,149666,181051,197666,310280,356434,371204,384127 -DistanceSpacing: 0.3 -BeatDivisor: 4 -GridSize: 4 -TimelineZoom: 5.700003 - -[Metadata] -Title:IMAGE -MATERIAL- -TitleUnicode:IMAGE -MATERIAL- -Artist:Tatsh -ArtistUnicode:Tatsh -Creator:Enon -Version:Revolution -Source: -Tags:(新曲) (Shinkyoku) REFLEC BEAT limelight 福山沙織 fukuyama saori Dailycare -BeatmapID:875945 -BeatmapSetID:402837 - -[Difficulty] -HPDrainRate:6 -CircleSize:4.2 -OverallDifficulty:9 -ApproachRate:9.8 -SliderMultiplier:1.87 -SliderTickRate:1 - -[Events] -//Background and Video events -0,0,"BG.jpg",0,0 -//Break Periods -2,49251,55956 -//Storyboard Layer 0 (Background) -//Storyboard Layer 1 (Fail) -//Storyboard Layer 2 (Pass) -//Storyboard Layer 3 (Foreground) -//Storyboard Sound Samples - -[TimingPoints] -6590,461.538461538462,4,2,2,15,1,0 -6590,-200,4,2,2,15,0,0 -8320,-200,4,2,2,5,0,0 -8436,-200,4,2,2,15,0,0 -10166,-200,4,2,2,5,0,0 -10282,-200,4,2,2,15,0,0 -12013,-200,4,2,2,5,0,0 -12128,-200,4,2,2,15,0,0 -13859,-200,4,2,2,5,0,0 -13974,-200,4,2,2,15,0,0 -15705,-200,4,2,2,5,0,0 -15820,-200,4,2,2,15,0,0 -17551,-200,4,2,2,5,0,0 -17666,-200,4,2,2,15,0,0 -49051,230.769230769231,4,2,1,15,1,0 -56435,-100,4,2,1,60,0,0 -62666,-200,4,2,1,60,0,0 -63820,-100,4,2,1,60,0,0 -69358,-100,4,2,1,55,0,0 -69589,-100,4,2,1,50,0,0 -69820,-100,4,2,1,45,0,0 -70051,-100,4,2,1,40,0,0 -70281,-100,4,2,1,30,0,0 -70512,-100,4,2,1,40,0,0 -70743,-100,4,2,1,50,0,0 -70974,-100,4,2,1,60,0,0 -71204,-100,4,2,1,70,0,0 -74839,-100,4,2,1,5,0,0 -74897,-100,4,2,1,70,0,0 -78301,-100,4,2,1,5,0,0 -78358,-100,4,2,1,70,0,0 -78531,-100,4,2,1,5,0,0 -78589,-100,4,2,1,70,0,0 -82224,-100,4,2,1,5,0,0 -82281,-100,4,2,1,70,0,0 -85685,-100,4,2,1,5,0,0 -85743,-100,4,2,1,70,0,0 -88743,-100,4,2,1,85,0,1 -90070,-100,4,2,1,5,0,1 -90127,-100,4,2,1,85,0,1 -93762,-100,4,2,1,5,0,1 -93820,-100,4,2,1,85,0,1 -95377,-100,4,2,1,5,0,1 -95435,-100,4,2,1,85,0,1 -103512,-100,4,2,1,60,0,0 -106916,-100,4,2,1,5,0,0 -106974,-100,4,2,1,60,0,0 -110608,-100,4,2,1,5,0,0 -110666,-100,4,2,1,60,0,0 -114301,-100,4,2,1,5,0,0 -114358,-100,4,2,1,60,0,0 -114820,-100,4,2,3,60,0,0 -114834,-100,4,2,1,60,0,0 -116666,-100,4,2,3,60,0,0 -116680,-100,4,2,1,60,0,0 -117358,-100,4,2,1,55,0,0 -117589,-100,4,2,1,50,0,0 -117820,-100,4,2,1,45,0,0 -118051,-100,4,2,1,40,0,0 -118281,-100,4,2,1,30,0,0 -118743,-100,4,2,1,40,0,0 -119204,-100,4,2,1,50,0,0 -119666,-100,4,2,1,60,0,0 -120127,-100,4,2,1,70,0,0 -126762,-100,4,2,1,5,0,0 -126820,-100,4,2,1,70,0,0 -143377,-100,4,2,1,5,0,0 -143435,-111.111111111111,4,2,1,70,0,0 -143608,-111.111111111111,4,2,1,5,0,0 -143666,-125,4,2,1,70,0,0 -143839,-125,4,2,1,5,0,0 -143897,-142.857142857143,4,2,1,70,0,0 -144070,-142.857142857143,4,2,1,5,0,0 -144127,-100,4,2,1,70,0,0 -149666,-200,4,2,1,40,0,0 -160743,-100,4,2,1,55,0,0 -166281,-100,4,2,1,85,0,1 -167608,-100,4,2,1,5,0,1 -167666,-100,4,2,1,85,0,1 -171301,-100,4,2,1,5,0,1 -171358,-100,4,2,1,85,0,1 -172916,-100,4,2,1,5,0,1 -172974,-100,4,2,1,85,0,1 -181051,-100,4,2,1,60,0,0 -182377,-100,4,2,1,5,0,0 -182435,-100,4,2,1,60,0,0 -192358,-100,4,2,3,60,0,0 -192373,-100,4,2,1,60,0,0 -194204,-100,4,2,3,60,0,0 -194219,-100,4,2,1,60,0,0 -194897,-100,4,2,1,55,0,0 -195127,-100,4,2,1,50,0,0 -195358,-100,4,2,1,45,0,0 -195589,-100,4,2,1,40,0,0 -195820,-100,4,2,1,30,0,0 -196281,-100,4,2,1,40,0,0 -196743,-100,4,2,1,50,0,0 -197204,-100,4,2,1,60,0,0 -197666,-100,4,2,1,85,0,1 -219070,-100,4,2,1,5,0,1 -219127,-142.857142857143,4,2,1,85,0,1 -219301,-142.857142857143,4,2,1,5,0,1 -219358,-111.111111111111,4,2,1,85,0,1 -219531,-111.111111111111,4,2,1,5,0,1 -219589,-166.666666666667,4,2,1,85,0,1 -219762,-166.666666666667,4,2,1,5,0,1 -219820,-100,4,2,1,85,0,1 -227204,461.538461538462,4,2,2,25,1,0 -227204,-200,4,2,2,25,0,0 -251550,697.674418604651,4,2,2,25,1,0 -251550,-133.333333333333,4,2,2,25,0,0 -252702,714.285714285714,4,2,2,20,1,0 -252702,-133.333333333333,4,2,2,20,0,0 -253506,800,4,2,2,18,1,0 -254095,1132.07547169811,4,2,2,15,1,0 -254095,-133.333333333333,4,2,2,15,0,0 -255580,1200,4,2,2,10,1,0 -256480,1267.10000000001,4,2,2,8,1,0 -256480,-133.333333333333,4,2,2,8,0,0 -258892,2131.45714285714,4,2,2,6,1,0 -258892,-133.333333333333,4,2,2,6,0,0 -263197,230.769230769231,4,2,1,65,1,0 -277966,-100,4,2,1,70,0,0 -285062,-100,4,2,1,5,0,0 -285120,-100,4,2,1,70,0,0 -285293,-100,4,2,1,5,0,0 -285350,-100,4,2,1,70,0,0 -292447,-100,4,2,1,5,0,0 -292504,-100,4,2,1,70,0,0 -295504,-100,4,2,1,85,0,1 -296831,-100,4,2,1,5,0,1 -296889,-100,4,2,1,85,0,1 -300523,-100,4,2,1,5,0,1 -300581,-100,4,2,1,85,0,1 -308889,-100,4,2,1,85,0,0 -310273,-100,4,2,1,85,0,1 -315062,-100,4,2,1,5,0,1 -315120,-100,4,2,1,85,0,1 -329831,-100,4,2,1,5,0,1 -329889,-100,4,2,1,85,0,1 -330754,-100,4,2,1,5,0,1 -330812,-100,4,2,1,85,0,1 -331677,-100,4,2,1,5,0,1 -331735,-100,4,2,1,85,0,1 -333523,-100,4,2,1,5,0,1 -333581,-100,4,2,1,85,0,1 -336293,-100,4,2,1,5,0,1 -336350,-100,4,2,1,85,0,1 -346447,-100,4,2,1,5,0,1 -346504,-142.857142857143,4,2,1,85,0,1 -346677,-142.857142857143,4,2,1,5,0,1 -346735,-111.111111111111,4,2,1,85,0,1 -346908,-111.111111111111,4,2,1,5,0,1 -346966,-166.666666666667,4,2,1,85,0,1 -347197,-100,4,2,1,85,0,1 -356427,-100,4,2,1,60,0,0 - - -[Colours] -Combo1 : 235,221,186 -Combo2 : 165,202,233 -Combo3 : 114,145,218 -Combo4 : 58,148,190 - -[HitObjects] -88,104,6590,6,0,B|176:156|256:108|256:108|336:60|423:112,1,350.625,6|0,0:0|0:0,0:0:0:0: -396,213,8436,2,0,P|277:247|376:172,1,350.625,6|0,0:0|0:0,0:0:0:0: -472,220,10282,2,0,P|456:288|220:300,1,350.625,6|0,0:0|0:0,0:0:0:0: -277,200,12128,2,0,P|398:225|276:244,1,350.625,6|0,0:0|0:0,0:0:0:0: -224,141,13974,6,0,P|379:90|473:224,1,350.625,6|0,0:0|0:0,0:0:0:0: -496,301,15820,2,0,B|304:277|329:378|139:354,1,350.625,6|0,0:0|0:0,0:0:0:0: -76,352,17666,2,0,B|128:271|43:128|43:128|96:217|173:187,1,374,6|2,0:0|0:0,0:0:0:0: -256,192,19628,12,0,21128,0:0:0:0: -213,117,21359,6,0,L|119:122,1,93.5,6|0,0:0|0:0,0:0:0:0: -300,161,22282,2,0,L|393:155,1,93.5,2|0,0:0|0:0,0:0:0:0: -233,38,23205,2,0,L|139:43,1,93.5,6|0,0:0|0:0,0:0:0:0: -280,240,24128,2,0,L|373:234,1,93.5,2|0,0:0|0:0,0:0:0:0: -509,22,25051,6,0,B|342:1|390:161|198:113,1,327.25,6|0,0:0|0:0,0:0:0:0: -139,43,26897,2,0,P|181:132|110:300,1,280.5,2|0,0:0|0:0,0:0:0:0: -46,366,28743,6,0,L|139:371,1,93.5,6|0,0:0|0:0,0:0:0:0: -280,175,29666,2,0,L|186:169,1,93.5,2|0,0:0|0:0,0:0:0:0: -26,287,30589,2,0,L|119:292,1,93.5,6|0,0:0|0:0,0:0:0:0: -300,254,31513,2,0,L|206:248,1,93.5,2|0,0:0|0:0,0:0:0:0: -0,57,32436,6,0,B|189:33|134:214|352:176,1,374,6|2,0:0|0:0,0:0:0:0: -334,178,35205,2,0,L|315:351,1,163.625,2|0,0:0|0:0,0:0:0:0: -396,313,36128,6,0,P|430:308|456:284,1,70.125,6|0,0:0|0:0,0:0:0:0: -508,233,36590,6,0,B|205:287|288:12|1:48,1,561,2|0,0:0|0:0,0:0:0:0: -10,47,39820,6,0,L|120:37,1,93.5,6|0,0:0|0:0,0:0:0:0: -233,130,40743,2,0,L|123:140,1,93.5,2|0,0:0|0:0,0:0:0:0: -268,229,41666,2,0,L|473:210,1,187,2|2,0:0|0:0,0:0:0:0: -271,366,43051,2,0,P|254:329|255:303,1,46.75 -268,229,43513,5,6,0:0:0:0: -256,192,43628,12,0,49051,0:0:0:0: -45,136,56435,6,0,B|140:151|119:74|222:88,1,187,6|8,0:0|0:0,0:0:0:0: -214,252,56781,1,0,0:0:0:0: -214,252,56897,2,0,P|209:223|187:144,1,93.5,2|0,0:0|0:0,0:0:0:0: -336,48,57127,2,0,P|323:93|314:138,1,93.5,8|0,0:0|0:0,0:0:0:0: -319,308,57358,6,0,P|379:321|411:306,1,93.5,2|0,0:0|0:0,0:0:0:0: -214,252,57589,2,0,P|154:239|122:254,1,93.5,8|0,0:0|0:0,0:0:0:0: -58,340,57820,1,2,0:0:0:0: -165,370,57935,1,0,0:0:0:0: -263,315,58051,1,8,0:0:0:0: -370,345,58166,1,8,0:0:0:0: -370,345,58224,1,0,0:0:0:0: -370,345,58281,6,0,P|361:263|435:186,1,187,2|8,0:0|0:0,0:0:0:0: -507,110,58627,1,0,0:0:0:0: -507,110,58685,1,0,0:0:0:0: -507,110,58743,2,0,L|491:3,1,93.5,2|0,0:0|0:0,0:0:0:0: -412,96,58974,2,0,L|428:203,1,93.5,8|2,0:0|0:0,0:0:0:0: -370,344,59204,6,0,P|331:353|275:333,1,93.5,2|0,0:0|0:0,0:0:0:0: -273,211,59435,2,0,P|293:253|331:280,1,93.5,8|0,0:0|0:0,0:0:0:0: -349,206,59666,2,0,P|341:160|357:117,1,93.5,2|0,0:0|0:0,0:0:0:0: -482,107,59897,2,0,P|440:127|414:165,1,93.5,8|0,0:0|0:0,0:0:0:0: -144,273,60127,6,0,L|331:280,1,187,2|8,0:0|0:0,0:0:0:0: -349,206,60474,2,0,L|162:199,1,187,0|2,0:0|0:0,0:0:0:0: -85,115,60820,2,0,L|179:119,1,93.5,8|2,0:0|0:0,0:0:0:0: -126,347,61051,6,0,P|88:326|66:277,1,93.5,2|0,0:0|0:0,0:0:0:0: -162,199,61281,2,0,P|200:220|222:269,1,93.5,8|0,0:0|0:0,0:0:0:0: -203,375,61512,2,0,L|306:368,1,93.5,2|2,0:0|0:0,0:0:0:0: -443,285,61743,2,0,L|349:291,1,93.5,8|0,0:0|0:0,0:0:0:0: -329,279,61916,1,0,0:0:0:0: -309,266,61974,6,0,L|289:66,1,187,2|8,0:0|0:0,0:0:0:0: -203,118,62320,2,0,L|223:318,1,187,0|2,0:0|0:0,0:0:0:0: -133,342,62666,2,0,B|132:316|132:316|128:316|128:316|130:295|130:295|126:296|126:296|129:275|129:275|125:275|125:275|127:254|127:254|123:255|123:255|125:234|125:234|121:234|121:234|123:213|123:213|119:214|119:214|121:193|121:193|118:193|118:193|118:172,1,187,8|8,0:0|0:0,0:0:0:0: -285,26,63358,5,2,0:0:0:0: -352,117,63474,1,8,0:0:0:0: -265,189,63589,1,10,0:0:0:0: -332,280,63705,1,8,0:0:0:0: -474,81,63820,5,2,0:0:0:0: -456,83,63877,1,2,0:0:0:0: -437,85,63935,1,2,0:0:0:0: -419,88,63993,1,2,0:0:0:0: -400,90,64051,2,0,L|288:73,1,93.5,8|0,0:0|0:0,0:0:0:0: -217,50,64281,5,2,0:0:0:0: -219,68,64338,1,2,0:0:0:0: -221,87,64396,1,2,0:0:0:0: -224,105,64454,1,2,0:0:0:0: -226,124,64512,2,0,L|209:236,1,93.5,8|0,0:0|0:0,0:0:0:0: -186,307,64743,5,2,0:0:0:0: -204,305,64800,1,2,0:0:0:0: -223,303,64858,1,2,0:0:0:0: -241,300,64916,1,2,0:0:0:0: -260,298,64974,2,0,L|372:315,1,93.5,8|0,0:0|0:0,0:0:0:0: -443,338,65205,5,2,0:0:0:0: -441,320,65262,1,2,0:0:0:0: -439,301,65320,1,2,0:0:0:0: -436,283,65378,1,2,0:0:0:0: -434,264,65436,2,0,L|451:152,1,93.5,8|0,0:0|0:0,0:0:0:0: -474,81,65666,5,2,0:0:0:0: -456,83,65723,1,2,0:0:0:0: -437,85,65781,1,2,0:0:0:0: -419,88,65839,1,2,0:0:0:0: -400,90,65897,2,0,L|288:73,1,93.5,8|0,0:0|0:0,0:0:0:0: -226,124,66127,5,2,0:0:0:0: -208,126,66184,1,2,0:0:0:0: -189,128,66242,1,2,0:0:0:0: -171,131,66300,1,2,0:0:0:0: -152,133,66358,2,0,L|40:116,1,93.5,8|0,0:0|0:0,0:0:0:0: -14,291,66589,6,0,P|0:241|8:176,1,93.5,2|2,0:0|0:0,0:0:0:0: -136,292,66820,2,0,P|150:342|142:407,1,93.5,8|2,0:0|0:0,0:0:0:0: -80,232,67051,2,0,P|154:263|265:207,1,187,2|8,0:0|0:0,0:0:0:0: -315,159,67397,1,0,0:0:0:0: -491,182,67512,6,0,B|480:253|480:253|484:286|484:286|472:373,1,187,6|8,0:1|0:0,0:0:0:0: -410,124,67858,2,0,B|399:195|399:195|403:228|403:228|391:315,1,187,2|8,0:1|0:0,0:0:0:0: -329,66,68204,2,0,L|313:166,1,93.5,10|0,1:2|0:0,0:0:0:0: -181,294,68435,6,0,P|226:315|288:293,1,93.5,2|2,0:0|0:0,0:0:0:0: -440,252,68666,2,0,P|395:231|333:253,1,93.5,8|2,0:0|0:0,0:0:0:0: -128,371,68897,5,10,0:0:0:0: -181,294,69012,1,8,0:0:0:0: -117,225,69127,1,10,0:0:0:0: -170,148,69242,1,8,0:0:0:0: -52,88,69358,6,0,L|43:181,1,93.5,2|2,0:0|0:0,0:0:0:0: -181,294,69589,2,0,L|191:202,1,93.5,8|2,0:0|0:0,0:0:0:0: -39,101,69820,6,0,L|30:193,1,93.5,2|2,0:0|0:0,0:0:0:0: -168,307,70051,2,0,L|177:214,1,93.5,8|2,0:0|0:0,0:0:0:0: -198,30,70281,5,8,0:0:0:0: -220,46,70339,1,0,0:0:0:0: -244,58,70397,1,8,0:0:0:0: -269,65,70455,1,0,0:0:0:0: -296,68,70512,1,2,0:0:0:0: -322,66,70570,1,2,0:0:0:0: -348,60,70627,1,2,0:0:0:0: -373,49,70685,1,2,0:0:0:0: -396,36,70742,5,10,0:0:0:0: -441,30,70800,1,2,0:0:0:0: -483,49,70858,1,10,0:0:0:0: -510,87,70916,1,2,0:0:0:0: -512,133,70974,1,10,0:0:0:0: -492,175,71031,1,2,0:0:0:0: -453,199,71089,1,10,0:0:0:0: -407,200,71146,1,2,0:0:0:0: -364,184,71204,6,0,P|321:209|338:359,1,187,6|8,0:0|0:0,0:0:0:0: -419,372,71551,2,0,P|462:347|445:197,1,187,2|2,0:0|0:0,0:0:0:0: -332,104,71897,2,0,L|441:100,1,93.5,8|0,0:0|0:0,0:0:0:0: -248,179,72127,5,2,0:0:0:0: -248,179,72243,2,0,L|54:186,1,187,2|2,0:0|0:0,0:0:0:0: -144,259,72589,2,0,L|240:255,1,93.5,2|0,0:0|0:0,0:0:0:0: -164,104,72820,2,0,L|68:108,1,93.5,8|0,0:0|0:0,0:0:0:0: -111,338,73051,6,0,P|200:325|223:228,1,187,2|8,0:0|0:0,0:0:0:0: -192,136,73397,2,0,L|-1:143,1,187,2|2,0:0|0:0,0:0:0:0: -78,57,73743,2,0,L|174:53,1,93.5,8|0,0:0|0:0,0:0:0:0: -365,83,73974,5,2,0:0:0:0: -365,83,74089,2,0,B|294:83|288:84|255:135|251:135|191:135,1,187,2|2,0:0|0:0,0:0:0:0: -45,195,74435,2,0,P|87:216|103:264,1,93.5,2|0,0:0|0:0,0:0:0:0: -16,332,74666,2,0,B|63:323|63:323|109:331|109:331|160:322,1,140.25,8|0,0:0|0:0,0:0:0:0: -240,352,74897,6,0,P|224:290|298:187,1,187,2|8,0:0|0:0,0:0:0:0: -395,224,75243,2,0,P|411:286|337:389,1,187,2|2,0:0|0:0,0:0:0:0: -249,166,75589,2,0,L|239:73,1,93.5,8|0,0:0|0:0,0:0:0:0: -198,230,75820,5,2,0:0:0:0: -198,230,75935,2,0,B|249:267|296:244|318:210|318:210|294:242|318:278,1,187,2|2,0:0|0:0,0:0:0:0: -340,364,76281,2,0,L|433:357,1,93.5,2|0,0:0|0:0,0:0:0:0: -236,324,76512,2,0,L|120:332,1,93.5,8|0,0:0|0:0,0:0:0:0: -13,228,76743,6,0,B|96:223|96:223|131:234|131:234|198:229,1,187,2|8,0:0|0:0,0:0:0:0: -324,152,77089,2,0,B|257:157|257:157|222:146|222:146|139:151,1,187,2|2,0:0|0:0,0:0:0:0: -294,235,77435,2,0,L|388:228,1,93.5,8|0,0:0|0:0,0:0:0:0: -452,108,77666,5,2,0:0:0:0: -452,108,77781,1,8,0:0:0:0: -492,272,77897,1,10,0:0:0:0: -492,272,78012,1,8,0:0:0:0: -376,88,78127,2,0,P|404:44|488:40,1,140.25,8|0,0:0|0:0,0:0:0:0: -452,108,78358,2,0,L|301:120,1,140.25,2|0,0:0|0:0,0:0:0:0: -216,60,78589,6,0,P|232:132|144:216,1,187,6|8,0:0|0:0,0:0:0:0: -56,176,78935,2,0,P|40:104|128:20,1,187,2|2,0:0|0:0,0:0:0:0: -216,60,79281,2,0,L|223:153,1,93.5,8|0,0:0|0:0,0:0:0:0: -333,284,79512,5,2,0:0:0:0: -333,284,79627,2,0,L|317:82,1,187,2|2,0:0|0:0,0:0:0:0: -157,170,79974,2,0,P|175:203|256:211,1,93.5,2|0,0:0|0:0,0:0:0:0: -400,264,80204,2,0,P|382:231|301:223,1,93.5,8|0,0:0|0:0,0:0:0:0: -255,374,80435,6,0,L|447:359,1,187,2|8,0:0|0:0,0:0:0:0: -512,272,80781,2,0,L|320:287,1,187,2|2,0:0|0:0,0:0:0:0: -244,210,81127,2,0,L|337:203,1,93.5,8|0,0:0|0:0,0:0:0:0: -464,92,81358,5,2,0:0:0:0: -464,92,81474,2,0,P|484:152|420:272,1,187,2|2,0:0|0:0,0:0:0:0: -321,123,81820,2,0,L|310:23,1,93.5,2|0,0:0|0:0,0:0:0:0: -201,117,82051,2,0,L|215:256,1,140.25,8|0,0:0|0:0,0:0:0:0: -225,332,82281,6,0,P|153:348|53:272,1,187,2|8,0:0|0:0,0:0:0:0: -90,181,82627,2,0,P|162:165|262:241,1,187,2|2,0:0|0:0,0:0:0:0: -315,317,82974,2,0,L|441:307,1,93.5,8|0,0:0|0:0,0:0:0:0: -500,169,83204,5,2,0:0:0:0: -500,169,83320,2,0,L|306:184,1,187,2|2,0:0|0:0,0:0:0:0: -156,120,83666,2,0,P|140:68|152:24,1,93.5,2|0,0:0|0:0,0:0:0:0: -260,20,83897,2,0,P|276:72|264:116,1,93.5,8|0,0:0|0:0,0:0:0:0: -196,260,84127,6,0,L|10:240,1,187,2|8,0:0|0:0,0:0:0:0: -80,328,84474,2,0,L|265:347,1,187,2|2,0:0|0:0,0:0:0:0: -372,382,84820,2,0,P|386:339|425:314,1,93.5,8|0,0:0|0:0,0:0:0:0: -506,236,85051,2,0,P|461:246|420:225,1,93.5,2|0,0:0|0:0,0:0:0:0: -313,195,85281,2,0,P|344:228|346:274,1,93.5,8|0,0:0|0:0,0:0:0:0: -163,144,85512,6,0,L|14:135,1,140.25,2|0,0:0|0:0,0:0:0:0: -44,187,85743,2,0,L|171:194,1,93.5,8|0,0:0|0:0,0:0:0:0: -245,159,85974,2,0,P|232:96|199:67,1,93.5,2|0,0:0|0:0,0:0:0:0: -214,244,86204,2,0,L|404:225,1,187,8|2,0:0|0:0,0:0:0:0: -497,283,86551,1,0,0:0:0:0: -497,283,86666,2,0,P|436:302|409:354,1,93.5,8|0,0:0|0:0,0:0:0:0: -318,374,86897,6,0,L|328:163,1,187,2|8,0:0|0:0,0:0:0:0: -238,257,87243,1,0,0:0:0:0: -238,257,87358,2,0,L|248:46,1,187,2|8,0:0|0:0,0:0:0:0: -158,140,87704,1,2,0:0:0:0: -158,140,87820,6,0,L|163:34,1,93.5,2|0,0:0|0:0,0:0:0:0: -75,118,88051,2,0,L|70:223,1,93.5,8|0,0:0|0:0,0:0:0:0: -113,345,88281,5,0,0:0:0:0: -130,335,88339,1,0,0:0:0:0: -150,333,88397,1,0,0:0:0:0: -169,339,88454,1,0,0:0:0:0: -188,347,88512,5,10,0:0:0:0: -230,365,88570,1,2,0:0:0:0: -276,366,88628,1,10,0:0:0:0: -320,349,88686,1,2,0:0:0:0: -353,317,88743,6,0,L|362:113,1,187,6|8,0:0|0:0,0:0:0:0: -265,71,89089,1,0,0:0:0:0: -265,71,89204,2,0,P|216:122|257:235,1,187,2|8,0:0|0:0,0:0:0:0: -356,237,89551,1,0,0:0:0:0: -356,237,89666,6,0,L|472:227,1,93.5,2|0,0:0|0:0,0:0:0:0: -373,145,89897,2,0,L|222:158,1,140.25,8|0,0:0|0:0,0:0:0:0: -189,190,90127,2,0,L|282:181,1,93.5,2|0,0:0|0:0,0:0:0:0: -147,85,90358,2,0,L|24:95,1,93.5,8|0,0:0|0:0,0:0:0:0: -129,242,90589,6,0,P|186:269|266:193,1,187,2|8,0:0|0:0,0:0:0:0: -116,165,90935,2,0,P|64:200|89:308,1,187,2|2,0:0|0:0,0:0:0:0: -189,190,91281,2,0,P|190:140|162:101,1,93.5,8|0,0:0|0:0,0:0:0:0: -81,31,91512,2,0,L|174:23,1,93.5,2|0,0:0|0:0,0:0:0:0: -350,92,91743,2,0,L|257:100,1,93.5,8|0,0:0|0:0,0:0:0:0: -95,198,91974,2,0,L|188:190,1,93.5,2|0,0:0|0:0,0:0:0:0: -377,205,92204,1,2,0:0:0:0: -365,240,92262,1,2,0:0:0:0: -355,276,92320,1,2,0:0:0:0: -345,311,92377,1,2,0:0:0:0: -334,347,92435,6,0,P|264:294|292:211,1,187,2|8,0:0|0:0,0:0:0:0: -392,153,92781,1,0,0:0:0:0: -392,153,92897,2,0,P|420:70|350:17,1,187,2|8,0:0|0:0,0:0:0:0: -256,79,93243,1,0,0:0:0:0: -256,79,93358,6,0,L|263:195,1,93.5,2|0,0:0|0:0,0:0:0:0: -152,304,93589,2,0,L|142:141,1,140.25,8|0,0:0|0:0,0:0:0:0: -154,109,93820,2,0,P|122:142|78:155,1,93.5,2|0,0:0|0:0,0:0:0:0: -0,62,94051,2,0,P|31:28|75:15,1,93.5,8|0,0:0|0:0,0:0:0:0: -256,79,94281,6,0,L|267:265,1,187,2|8,0:0|0:0,0:0:0:0: -198,354,94627,1,0,0:0:0:0: -198,354,94743,2,0,P|286:378|361:327,1,187,2|8,0:0|0:0,0:0:0:0: -407,224,95089,1,0,0:0:0:0: -407,224,95204,6,0,L|247:211,1,140.25,2|0,0:0|0:0,0:0:0:0: -218,184,95435,2,0,L|330:193,1,93.5,8|0,0:0|0:0,0:0:0:0: -401,124,95666,2,0,P|410:77|383:30,1,93.5,2|0,0:0|0:0,0:0:0:0: -300,104,95897,2,0,P|291:149|311:191,1,93.5,8|0,0:0|0:0,0:0:0:0: -420,317,96127,6,0,P|334:293|273:358,1,187,2|8,0:0|0:0,0:0:0:0: -159,359,96474,1,0,0:0:0:0: -159,359,96589,2,0,P|73:382|12:317,1,187,2|8,0:0|0:0,0:0:0:0: -78,186,96935,1,0,0:0:0:0: -174,245,97051,6,0,L|195:51,1,187,2|8,0:0|0:0,0:0:0:0: -300,104,97397,1,0,0:0:0:0: -300,104,97512,2,0,B|309:153|309:153|287:195,1,93.5,2|0,0:0|0:0,0:0:0:0: -185,332,97743,2,0,B|164:293|164:293|173:244,1,93.5,8|0,0:0|0:0,0:0:0:0: -450,270,97974,6,0,L|259:281,1,187,2|8,0:0|0:0,0:0:0:0: -218,184,98320,1,0,0:0:0:0: -218,184,98435,2,0,L|409:173,1,187,2|8,0:0|0:0,0:0:0:0: -509,216,98781,1,0,0:0:0:0: -509,216,98897,6,0,B|477:120|541:136|509:24,1,187,2|8,0:0|0:0,0:0:0:0: -402,4,99243,1,0,0:0:0:0: -207,91,99358,2,0,L|217:183,1,93.5,2|0,0:0|0:0,0:0:0:0: -364,222,99589,2,0,L|353:129,1,93.5,8|0,0:0|0:0,0:0:0:0: -300,359,99820,5,2,0:0:0:0: -391,372,99935,1,0,0:0:0:0: -432,287,100051,1,8,0:0:0:0: -364,222,100166,1,0,0:0:0:0: -282,268,100281,1,2,0:0:0:0: -200,314,100397,1,0,0:0:0:0: -132,249,100512,1,8,0:0:0:0: -173,164,100628,1,0,0:0:0:0: -264,177,100743,6,0,L|248:73,1,93.5,2|0,0:0|0:0,0:0:0:0: -158,71,100974,2,0,L|173:164,1,93.5,8|0,0:0|0:0,0:0:0:0: -146,341,101204,2,0,L|130:237,1,93.5,2|0,0:0|0:0,0:0:0:0: -40,235,101435,2,0,L|54:327,1,93.5,8|0,0:0|0:0,0:0:0:0: -146,341,101666,6,0,P|214:349|234:329,1,93.5,2|0,0:0|0:0,0:0:0:0: -321,224,101897,2,0,P|253:216|233:236,1,93.5,8|0,0:0|0:0,0:0:0:0: -325,317,102127,1,2,0:0:0:0: -353,129,102243,1,2,0:0:0:0: -345,116,102300,1,2,0:0:0:0: -351,104,102358,1,2,0:0:0:0: -340,93,102416,1,2,0:0:0:0: -342,79,102474,1,2,0:0:0:0: -333,68,102531,1,2,0:0:0:0: -322,58,102589,5,10,0:0:0:0: -360,78,102646,1,2,0:0:0:0: -404,81,102704,1,2,0:0:0:0: -446,65,102762,1,2,0:0:0:0: -477,34,102819,1,2,0:0:0:0: -232,124,102935,2,0,L|173:109,1,46.75,2|0,0:0|0:0,0:0:0:0: -256,114,103051,5,2,0:0:0:0: -249,146,103108,1,2,0:0:0:0: -271,173,103166,1,10,0:0:0:0: -255,200,103224,1,2,0:0:0:0: -271,229,103281,1,2,0:0:0:0: -294,258,103339,1,2,0:0:0:0: -277,283,103397,1,2,0:0:0:0: -291,312,103454,1,2,0:0:0:0: -285,344,103512,6,0,P|370:322|476:316,1,187,6|8,0:0|0:0,0:0:0:0: -495,206,103858,1,0,0:0:0:0: -495,206,103974,2,0,P|456:129|349:137,1,187,2|8,0:0|0:0,0:0:0:0: -272,191,104320,1,0,0:0:0:0: -272,191,104435,6,0,L|280:61,1,93.5,2|0,0:0|0:0,0:0:0:0: -362,23,104666,2,0,P|287:75|188:64,1,187,8|2,0:0|0:0,0:0:0:0: -108,121,105012,1,0,0:0:0:0: -97,10,105127,1,8,0:0:0:0: -195,67,105243,1,8,0:0:0:0: -195,67,105301,1,8,0:0:0:0: -195,67,105358,6,0,P|211:139|111:224,1,187,2|8,0:0|0:0,0:0:0:0: -33,192,105704,1,0,0:0:0:0: -33,192,105820,2,0,L|41:292,1,93.5,2|0,0:0|0:0,0:0:0:0: -149,312,106051,2,0,L|141:218,1,93.5,8|0,0:0|0:0,0:0:0:0: -239,165,106281,6,0,P|272:198|279:244,1,93.5,2|0,0:0|0:0,0:0:0:0: -255,354,106512,2,0,L|351:344,1,93.5,8|0,0:0|0:0,0:0:0:0: -460,337,106743,2,0,P|399:276|386:191,1,140.25,2|0,0:0|0:0,0:0:0:0: -385,226,106974,2,0,L|481:216,1,93.5,8|0,0:0|0:0,0:0:0:0: -391,72,107204,6,0,L|204:91,1,187,2|8,0:0|0:0,0:0:0:0: -126,7,107551,1,0,0:0:0:0: -126,7,107666,2,0,P|95:51|127:179,1,187,2|8,0:0|0:0,0:0:0:0: -233,165,108012,1,0,0:0:0:0: -233,165,108127,6,0,L|219:270,1,93.5,2|0,0:0|0:0,0:0:0:0: -145,342,108358,2,0,P|217:288|336:317,1,187,8|2,0:0|0:0,0:0:0:0: -414,258,108704,1,0,0:0:0:0: -394,369,108820,1,8,0:0:0:0: -309,298,108935,1,0,0:0:0:0: -309,298,108993,1,0,0:0:0:0: -309,298,109051,6,0,L|301:103,1,187,2|8,0:0|0:0,0:0:0:0: -396,51,109397,1,0,0:0:0:0: -396,51,109512,2,0,P|427:108|408:160,1,93.5,2|0,0:0|0:0,0:0:0:0: -385,240,109743,2,0,L|491:230,1,93.5,8|0,0:0|0:0,0:0:0:0: -445,339,109974,6,0,L|339:349,1,93.5,2|0,0:0|0:0,0:0:0:0: -264,278,110204,2,0,P|250:233|260:188,1,93.5,8|0,0:0|0:0,0:0:0:0: -150,164,110435,2,0,P|130:227|164:322,1,140.25,2|0,0:0|0:0,0:0:0:0: -147,298,110666,2,0,P|101:287|57:301,1,93.5,8|0,0:0|0:0,0:0:0:0: -214,357,110897,6,0,L|400:339,1,187,2|8,0:0|0:0,0:0:0:0: -451,239,111243,1,0,0:0:0:0: -451,239,111358,2,0,L|264:256,1,187,2|8,0:0|0:0,0:0:0:0: -314,155,111704,1,0,0:0:0:0: -314,155,111820,6,0,L|407:146,1,93.5,2|0,0:0|0:0,0:0:0:0: -486,65,112051,2,0,P|443:147|450:238,1,187,8|2,0:0|0:0,0:0:0:0: -499,340,112397,1,0,0:0:0:0: -390,312,112512,1,8,0:0:0:0: -288,358,112627,1,0,0:0:0:0: -288,358,112685,1,0,0:0:0:0: -288,358,112743,6,0,L|100:344,1,187,2|8,0:0|0:0,0:0:0:0: -30,256,113089,1,0,0:0:0:0: -30,256,113204,2,0,L|218:270,1,187,2|8,0:0|0:0,0:0:0:0: -308,202,113551,1,0,0:0:0:0: -308,202,113666,6,0,P|322:134|256:43,1,187,2|8,0:0|0:0,0:0:0:0: -211,146,114012,1,0,0:0:0:0: -211,146,114127,2,0,L|221:312,1,140.25,2|0,0:0|0:0,0:0:0:0: -219,285,114358,2,0,P|262:271|306:285,1,93.5,8|0,0:0|0:0,0:0:0:0: -166,367,114589,6,0,B|94:317|105:208|187:178|256:192|256:192|325:205|407:176|418:67|346:17,1,561,2|8,0:0|0:0,0:0:0:0: -292,98,115512,1,2,0:0:0:0: -346,367,116435,6,0,B|418:317|407:208|325:178|256:192|256:192|187:205|105:176|94:67|166:17,1,561,2|8,0:0|0:0,0:0:0:0: -219,98,117358,1,2,0:0:0:0: -292,285,117589,1,8,0:0:0:0: -438,147,117820,1,2,0:0:0:0: -219,98,118051,2,0,L|88:91,1,93.5,8|0,0:0|0:0,0:0:0:0: -10,235,118281,6,0,P|-9:192|1:144,1,93.5,2|2,0:0|0:0,0:0:0:0: -154,279,118512,2,0,P|173:322|163:369,1,93.5,8|0,0:0|0:0,0:0:0:0: -3,339,118743,1,8,0:0:0:0: -219,215,118858,2,0,P|224:170|244:-10,1,187,8|2,0:0|0:0,0:0:0:0: -114,85,119204,5,2,0:0:0:0: -145,112,119262,1,2,0:0:0:0: -151,155,119319,1,2,0:0:0:0: -134,195,119377,1,2,0:0:0:0: -102,223,119434,1,2,0:0:0:0: -84,265,119493,1,2,0:0:0:0: -80,305,119551,1,2,0:0:0:0: -101,342,119608,1,2,0:0:0:0: -135,372,119666,5,2,0:0:0:0: -190,375,119723,1,2,0:0:0:0: -230,335,119781,1,2,0:0:0:0: -280,309,119839,1,2,0:0:0:0: -336,310,119897,1,2,0:0:0:0: -377,346,119954,1,2,0:0:0:0: -425,374,120012,1,2,0:0:0:0: -475,348,120070,1,2,0:0:0:0: -495,297,120127,6,0,P|500:240|514:98,1,187,6|8,0:0|0:0,0:0:0:0: -351,20,120474,2,0,P|345:76|332:219,1,187,2|2,0:0|0:0,0:0:0:0: -415,362,120820,2,0,B|458:378|458:378|508:361,1,93.5,8|0,0:0|0:0,0:0:0:0: -407,268,121051,5,2,0:0:0:0: -332,321,121166,2,0,L|145:308,1,187,2|2,0:0|0:0,0:0:0:0: -213,192,121512,2,0,P|219:146|197:105,1,93.5,2|0,0:0|0:0,0:0:0:0: -47,283,121743,2,0,P|41:329|63:370,1,93.5,8|0,0:0|0:0,0:0:0:0: -213,192,121974,6,0,L|27:180,1,187,2|8,0:0|0:0,0:0:0:0: -146,308,122320,2,0,L|332:321,1,187,2|2,0:0|0:0,0:0:0:0: -226,107,122666,2,0,P|203:147|214:191,1,93.5,8|0,0:0|0:0,0:0:0:0: -83,365,122897,5,2,0:0:0:0: -31,289,123012,2,0,P|24:211|14:102,1,187,2|2,0:0|0:0,0:0:0:0: -214,192,123358,2,0,P|174:214|128:208,1,93.5,2|0,0:0|0:0,0:0:0:0: -303,114,123589,2,0,P|342:91|388:97,1,93.5,8|0,0:0|0:0,0:0:0:0: -498,293,123820,6,0,L|306:281,1,187,2|8,0:0|0:0,0:0:0:0: -214,192,124166,2,0,L|406:204,1,187,2|2,0:0|0:0,0:0:0:0: -278,344,124512,2,0,P|245:309|242:263,1,93.5,8|0,0:0|0:0,0:0:0:0: -408,48,124743,5,2,0:0:0:0: -327,94,124858,2,0,L|311:281,1,187,2|2,0:0|0:0,0:0:0:0: -214,192,125204,2,0,P|154:196|114:171,1,93.5,2|0,0:0|0:0,0:0:0:0: -60,84,125435,2,0,P|120:80|160:105,1,93.5,8|0,0:0|0:0,0:0:0:0: -110,374,125666,5,10,0:0:0:0: -10,209,125781,1,8,0:0:0:0: -184,284,125897,1,8,0:0:0:0: -0,326,126012,1,8,0:0:0:0: -125,181,126127,2,0,B|202:169|224:229|319:212,1,187,2|0,1:0|0:0,0:0:0:0: -398,154,126474,1,0,0:0:0:0: -398,154,126589,6,0,P|346:110|352:43,1,140.25,2|0,0:0|0:0,0:0:0:0: -413,83,126820,2,0,B|419:162|419:162|406:195|406:195|413:267,1,187,2|2,1:0|0:0,0:0:0:0: -367,346,127166,1,0,0:0:0:0: -275,323,127281,1,8,0:0:0:0: -195,372,127397,1,0,0:0:0:0: -195,372,127454,1,0,0:0:0:0: -195,372,127512,6,0,P|190:282|262:228,1,187,6|8,0:0|0:0,0:0:0:0: -330,85,127858,2,0,P|334:174|262:228,1,187,2|2,0:0|0:0,0:0:0:0: -157,129,128204,2,0,L|251:135,1,93.5,8|0,0:0|0:0,0:0:0:0: -456,206,128435,5,2,0:0:0:0: -394,273,128551,2,0,L|188:261,1,187,2|2,0:0|0:0,0:0:0:0: -298,358,128897,2,0,P|341:372|387:364,1,93.5,2|0,0:0|0:0,0:0:0:0: -303,177,129127,2,0,P|259:162|213:170,1,93.5,8|0,0:0|0:0,0:0:0:0: -20,270,129358,6,0,L|206:262,1,187,2|8,0:0|0:0,0:0:0:0: -303,177,129704,2,0,L|117:185,1,187,2|2,0:0|0:0,0:0:0:0: -22,90,130051,2,0,P|82:85|120:118,1,93.5,8|0,0:0|0:0,0:0:0:0: -206,261,130281,5,2,0:0:0:0: -128,351,130397,2,0,P|86:271|116:185,1,187,2|2,0:0|0:0,0:0:0:0: -206,261,130743,2,0,L|225:365,1,93.5,2|0,0:0|0:0,0:0:0:0: -320,268,130974,2,0,L|300:163,1,93.5,8|0,0:0|0:0,0:0:0:0: -236,21,131204,6,0,P|189:99|223:182,1,187,2|8,0:0|0:0,0:0:0:0: -368,330,131551,2,0,P|414:252|380:169,1,187,2|2,0:0|0:0,0:0:0:0: -285,84,131897,2,8,L|302:175,1,93.5,8|0,0:0|0:0,0:0:0:0: -256,337,132127,5,2,0:0:0:0: -167,301,132243,2,0,P|234:242|320:268,1,187,2|2,0:0|0:0,0:0:0:0: -104,372,132589,2,0,P|57:369|10:367,1,93.5,2|0,0:0|0:0,0:0:0:0: -155,245,132820,2,0,P|201:242|248:240,1,93.5,8|0,0:0|0:0,0:0:0:0: -376,268,133051,5,2,0:0:0:0: -363,249,133108,1,2,0:0:0:0: -356,228,133166,1,2,0:0:0:0: -355,206,133224,1,2,0:0:0:0: -360,184,133281,1,10,0:0:0:0: -372,165,133339,1,2,0:0:0:0: -388,150,133397,1,10,0:0:0:0: -408,140,133454,1,2,0:0:0:0: -431,136,133512,1,2,1:0:0:0: -433,216,133743,1,8,0:0:0:0: -433,216,133858,1,8,0:0:0:0: -500,268,133973,5,2,0:0:0:0: -495,296,134031,1,2,0:0:0:0: -490,324,134088,1,2,0:0:0:0: -485,352,134146,1,2,0:0:0:0: -480,380,134204,2,0,B|334:389|359:290|190:308,1,280.5,2|0,1:0|0:0,0:0:0:0: -213,83,134666,2,0,P|238:121|235:167,1,93.5,8|0,0:0|0:0,0:0:0:0: -109,244,134897,6,0,L|-10:240,1,93.5,4|0,0:0|0:0,0:0:0:0: -236,167,135127,2,0,L|329:170,1,93.5,8|0,0:0|0:0,0:0:0:0: -208,383,135358,2,0,L|21:376,1,187,2|8,0:0|0:0,0:0:0:0: -297,282,135704,2,0,L|203:278,1,93.5,0|2,0:0|0:0,0:0:0:0: -147,80,135935,6,0,L|240:83,1,93.5,0|8,0:0|0:0,0:0:0:0: -397,51,136166,2,0,L|347:130,1,93.5,0|2,0:0|0:0,0:0:0:0: -297,282,136397,2,0,L|253:199,1,93.5,0|8,0:0|0:0,0:0:0:0: -397,51,136627,1,0,0:0:0:0: -502,166,136743,6,0,L|409:169,1,93.5,2|0,0:0|0:0,0:0:0:0: -297,282,136974,2,0,L|390:285,1,93.5,8|0,0:0|0:0,0:0:0:0: -296,151,137204,6,0,L|203:154,1,93.5,2|0,0:0|0:0,0:0:0:0: -89,242,137435,2,0,L|182:245,1,93.5,8|0,0:0|0:0,0:0:0:0: -220,337,137666,6,0,L|-2:329,1,187,2|8,0:0|0:0,0:0:0:0: -202,154,138012,2,0,L|424:161,1,187,2|2,0:0|0:0,0:0:0:0: -338,61,138358,2,0,L|244:57,1,93.5,8|0,0:0|0:0,0:0:0:0: -431,315,138589,6,0,B|460:189|460:189|452:223|480:258,1,187,2|8,0:0|0:0,0:0:0:0: -507,343,138935,1,0,0:0:0:0: -507,343,139051,2,0,B|416:313|411:386|300:358,1,187,2|8,0:0|0:0,0:0:0:0: -177,244,139397,1,0,0:0:0:0: -177,244,139512,6,0,B|268:214|273:287|384:259,1,187,2|8,0:0|0:0,0:0:0:0: -424,173,139858,1,0,0:0:0:0: -339,99,139974,2,0,L|328:-1,1,93.5,2|2,0:0|0:0,0:0:0:0: -177,244,140204,2,0,L|167:151,1,93.5,8|0,0:0|0:0,0:0:0:0: -248,95,140435,6,0,L|257:187,1,93.5,2|0,0:0|0:0,0:0:0:0: -96,300,140666,2,0,L|86:207,1,93.5,8|0,0:0|0:0,0:0:0:0: -167,151,140897,6,0,L|177:244,1,93.5,2|0,0:0|0:0,0:0:0:0: -355,315,141127,2,0,L|346:222,1,93.5,8|0,0:0|0:0,0:0:0:0: -263,380,141358,6,0,P|317:344|444:352,1,187,2|8,0:0|0:0,0:0:0:0: -177,244,141704,1,0,0:0:0:0: -177,244,141820,2,0,P|123:280|-4:272,1,187,2|8,0:0|0:0,0:0:0:0: -0,182,142166,1,0,0:0:0:0: -176,58,142281,6,0,L|167:151,1,93.5,2|0,0:0|0:0,0:0:0:0: -345,221,142512,2,0,L|355:129,1,93.5,8|0,0:0|0:0,0:0:0:0: -257,188,142743,6,0,L|248:281,1,93.5,2|0,0:0|0:0,0:0:0:0: -426,351,142974,2,0,L|435:258,1,93.5,8|0,0:0|0:0,0:0:0:0: -203,348,143204,6,0,P|239:361|326:297,1,140.25,2|0,0:0|0:0,0:0:0:0: -435,258,143435,6,0,P|398:267|316:196,1,126.224996147919,8|0,0:0|0:0,0:0:0:0: -257,188,143666,6,0,P|292:194|361:121,1,112.2,2|0,0:0|0:0,0:0:0:0: -419,136,143897,6,0,P|388:138|333:70,1,98.1749970039369,8|0,0:0|0:0,0:0:0:0: -257,188,144127,6,0,L|275:1,1,187,2|8,0:0|0:0,0:0:0:0: -435,258,144474,1,0,0:0:0:0: -435,258,144589,2,0,L|453:71,1,187,2|8,0:0|0:0,0:0:0:0: -149,337,144935,1,0,0:0:0:0: -149,337,145051,6,0,L|159:232,1,93.5,2|0,0:0|0:0,0:0:0:0: -353,153,145281,2,0,L|342:257,1,93.5,8|0,0:0|0:0,0:0:0:0: -169,318,145512,6,0,L|181:199,1,93.5,2|0,0:0|0:0,0:0:0:0: -332,171,145742,2,0,L|319:300,1,93.5,8|0,0:0|0:0,0:0:0:0: -95,131,145974,6,0,L|104:28,1,93.5,2|0,0:0|0:0,0:0:0:0: -247,76,146204,2,0,L|237:169,1,93.5,8|0,0:0|0:0,0:0:0:0: -166,150,146435,2,0,L|176:57,1,93.5,2|0,0:0|0:0,0:0:0:0: -318,95,146666,2,0,L|308:188,1,93.5,8|0,0:0|0:0,0:0:0:0: -475,319,146897,6,0,L|465:216,1,93.5,2|0,0:0|0:0,0:0:0:0: -322,263,147127,2,0,L|332:357,1,93.5,8|0,0:0|0:0,0:0:0:0: -403,338,147358,2,0,L|394:245,1,93.5,2|0,0:0|0:0,0:0:0:0: -252,283,147589,2,0,L|261:376,1,93.5,8|0,0:0|0:0,0:0:0:0: -38,368,147820,6,0,L|140:358,1,93.5,2|0,0:0|0:0,0:0:0:0: -93,215,148050,2,0,L|-1:224,1,93.5,8|0,0:0|0:0,0:0:0:0: -247,203,148281,1,2,0:0:0:0: -186,101,148397,1,8,0:0:0:0: -365,200,148512,1,8,0:0:0:0: -189,304,148627,1,8,0:0:0:0: -237,20,148743,5,2,0:0:0:0: -95,132,148858,1,2,0:0:0:0: -95,132,148916,1,2,0:0:0:0: -95,132,148974,1,10,0:0:0:0: -276,126,149089,1,0,0:0:0:0: -125,24,149204,5,2,0:0:0:0: -189,196,149320,1,8,0:0:0:0: -361,132,149435,1,8,0:0:0:0: -425,304,149551,1,8,0:0:0:0: -330,357,149666,6,0,P|240:297|79:327,1,280.5,6|0,0:0|0:0,0:0:0:0: -237,168,150589,2,0,P|327:108|488:138,1,280.5,2|0,0:0|0:0,0:0:0:0: -401,288,151512,2,0,L|122:257,1,280.5,2|0,0:0|0:0,0:0:0:0: -44,309,152320,1,8,0:0:0:0: -44,309,152377,1,8,0:0:0:0: -44,309,152435,5,10,0:0:0:0: -44,197,152551,1,2,0:0:0:0: -151,162,152666,1,8,0:0:0:0: -216,253,152781,1,2,0:0:0:0: -281,344,152897,1,2,0:0:0:0: -388,309,153012,1,2,0:0:0:0: -388,197,153128,1,8,0:0:0:0: -281,162,153243,1,2,0:0:0:0: -216,253,153358,6,0,L|503:229,1,280.5,6|0,0:0|0:0,0:0:0:0: -296,131,154281,2,0,L|9:155,1,280.5,2|0,0:0|0:0,0:0:0:0: -148,338,155204,2,0,L|428:315,1,280.5,2|0,0:0|0:0,0:0:0:0: -492,225,156127,5,10,0:0:0:0: -492,225,156185,1,8,0:0:0:0: -492,225,156243,1,8,0:0:0:0: -320,168,156358,1,8,0:0:0:0: -427,315,156474,1,8,0:0:0:0: -427,315,156531,1,8,0:0:0:0: -427,315,156589,1,10,0:0:0:0: -427,133,156704,1,8,0:0:0:0: -320,280,156820,1,10,0:0:0:0: -492,225,156935,1,8,0:0:0:0: -320,280,157051,6,0,B|194:258|174:358|44:320,1,280.5,6|0,0:0|0:0,0:0:0:0: -0,138,157974,2,0,P|88:81|186:211,1,280.5,2|0,0:0|0:0,0:0:0:0: -281,344,158897,2,0,L|312:65,1,280.5,2|0,0:0|0:0,0:0:0:0: -419,30,159704,1,8,0:0:0:0: -419,30,159762,1,8,0:0:0:0: -419,30,159820,5,10,0:0:0:0: -484,121,159935,1,8,0:0:0:0: -419,212,160051,1,8,0:0:0:0: -312,177,160166,1,8,0:0:0:0: -312,65,160281,1,10,0:0:0:0: -205,30,160397,1,8,0:0:0:0: -140,121,160513,1,8,0:0:0:0: -206,210,160627,1,8,0:0:0:0: -312,65,160743,6,0,L|418:48,1,93.5,6|0,0:0|0:0,0:0:0:0: -484,121,160974,2,0,L|378:138,1,93.5,8|0,0:0|0:0,0:0:0:0: -206,210,161204,6,0,L|312:193,1,93.5,2|0,0:0|0:0,0:0:0:0: -378,266,161435,2,0,L|272:283,1,93.5,8|0,0:0|0:0,0:0:0:0: -44,197,161666,6,0,L|33:289,1,93.5,2|0,0:0|0:0,0:0:0:0: -116,362,161897,2,0,L|126:269,1,93.5,8|0,0:0|0:0,0:0:0:0: -216,117,162127,6,0,L|205:209,1,93.5,2|0,0:0|0:0,0:0:0:0: -288,282,162358,2,0,L|298:189,1,93.5,8|0,0:0|0:0,0:0:0:0: -388,124,162589,6,0,P|436:122|482:167,1,93.5,2|0,0:0|0:0,0:0:0:0: -494,219,162820,2,0,P|446:221|400:176,1,93.5,8|0,0:0|0:0,0:0:0:0: -496,64,163051,2,0,P|498:110|472:148,1,93.5,2|0,0:0|0:0,0:0:0:0: -386,278,163281,2,0,P|383:232|410:194,1,93.5,8|0,0:0|0:0,0:0:0:0: -511,346,163512,6,0,L|397:359,1,93.5,2|0,0:0|0:0,0:0:0:0: -195,271,163743,2,0,L|287:281,1,93.5,8|0,0:0|0:0,0:0:0:0: -410,194,163974,6,0,L|296:207,1,93.5,2|0,0:0|0:0,0:0:0:0: -94,119,164205,2,0,L|186:129,1,93.5,8|0,0:0|0:0,0:0:0:0: -440,44,164435,6,0,P|407:76|401:122,1,93.5,2|0,0:0|0:0,0:0:0:0: -458,266,164666,2,0,P|445:221|409:193,1,93.5,8|0,0:0|0:0,0:0:0:0: -255,171,164897,2,0,P|299:182|342:164,1,93.5,2|0,0:0|0:0,0:0:0:0: -508,108,165127,1,8,0:0:0:0: -494,219,165243,1,8,0:0:0:0: -494,219,165301,1,8,0:0:0:0: -494,219,165358,6,0,L|482:321,1,93.5,2|0,0:0|0:0,0:0:0:0: -341,164,165589,1,10,0:0:0:0: -341,164,165704,1,2,0:0:0:0: -306,264,165820,5,10,0:0:0:0: -271,234,165877,1,10,0:0:0:0: -225,232,165935,1,2,0:0:0:0: -188,258,165993,1,2,0:0:0:0: -176,303,166050,1,10,0:0:0:0: -164,348,166108,1,10,0:0:0:0: -127,374,166166,1,10,0:0:0:0: -81,372,166224,1,10,0:0:0:0: -46,343,166281,6,0,P|47:239|141:235,1,187,6|8,0:0|0:0,0:0:0:0: -225,232,166627,1,0,0:0:0:0: -225,232,166743,2,0,L|257:25,1,187,2|8,0:0|0:0,0:0:0:0: -150,1,167089,1,0,0:0:0:0: -150,1,167204,6,0,P|137:59|160:95,1,93.5,2|0,0:0|0:0,0:0:0:0: -235,165,167435,2,0,L|379:150,1,140.25,8|0,0:0|0:0,0:0:0:0: -426,172,167666,2,0,L|311:183,1,93.5,2|0,0:0|0:0,0:0:0:0: -223,301,167897,2,0,L|337:289,1,93.5,8|0,0:0|0:0,0:0:0:0: -476,116,168127,6,0,P|416:98|365:216,1,187,2|8,0:0|0:0,0:0:0:0: -425,314,168474,2,0,P|470:271|393:167,1,187,2|2,0:0|0:0,0:0:0:0: -280,170,168820,2,0,P|286:218|342:259,1,93.5,8|0,0:0|0:0,0:0:0:0: -352,356,169051,6,0,L|239:341,1,93.5,2|0,0:0|0:0,0:0:0:0: -122,225,169281,2,0,L|215:238,1,93.5,8|0,0:0|0:0,0:0:0:0: -425,171,169512,2,0,L|332:158,1,93.5,2|0,0:0|0:0,0:0:0:0: -200,91,169743,1,10,0:0:0:0: -203,126,169800,1,2,0:0:0:0: -206,163,169858,1,2,0:0:0:0: -211,201,169916,1,2,0:0:0:0: -215,238,169974,6,0,P|173:305|43:277,1,187,2|8,0:0|0:0,0:0:0:0: -29,212,170320,1,0,0:0:0:0: -29,212,170435,2,0,L|57:7,1,187,2|8,0:0|0:0,0:0:0:0: -127,111,170781,1,0,0:0:0:0: -127,111,170897,6,0,P|172:147|220:138,1,93.5,2|0,0:0|0:0,0:0:0:0: -389,111,171127,2,0,P|315:119|279:171,1,140.25,8|0,0:0|0:0,0:0:0:0: -264,184,171358,2,0,P|268:220|279:296,1,93.5,2|0,0:0|0:0,0:0:0:0: -470,358,171589,2,0,P|465:321|455:246,1,93.5,8|0,0:0|0:0,0:0:0:0: -508,108,171820,6,0,B|432:101|432:101|411:107|411:107|316:99,1,187,2|8,0:0|0:0,0:0:0:0: -214,201,172166,1,0,0:0:0:0: -214,201,172281,2,0,B|289:207|289:207|310:201|310:201|405:209,1,187,2|8,0:0|0:0,0:0:0:0: -223,301,172628,1,0,0:0:0:0: -223,301,172743,2,0,L|83:288,1,140.25,2|0,0:0|0:0,0:0:0:0: -59,302,172974,2,0,L|152:310,1,93.5,8|0,0:0|0:0,0:0:0:0: -329,295,173204,2,0,P|332:355|307:389,1,93.5,2|0,0:0|0:0,0:0:0:0: -264,186,173435,2,0,P|261:126|286:92,1,93.5,8|0,0:0|0:0,0:0:0:0: -170,178,173666,6,0,B|75:177|99:249|4:249,1,187,2|8,0:0|0:0,0:0:0:0: -203,99,174012,1,0,0:0:0:0: -203,99,174127,2,0,B|297:99|273:27|368:27,1,187,2|8,0:0|0:0,0:0:0:0: -484,72,174474,1,0,0:0:0:0: -484,72,174589,6,0,P|475:133|458:257,1,187,2|8,0:0|0:0,0:0:0:0: -361,315,174935,1,0,0:0:0:0: -361,315,175051,2,0,P|355:274|348:222,1,93.5,2|0,0:0|0:0,0:0:0:0: -249,292,175281,2,0,P|254:332|262:385,1,93.5,8|0,0:0|0:0,0:0:0:0: -398,152,175512,6,0,P|312:207|229:175,1,187,2|8,0:0|0:0,0:0:0:0: -164,280,175858,1,0,0:0:0:0: -164,280,175974,2,0,P|90:226|3:249,1,187,2|8,0:0|0:0,0:0:0:0: -237,182,176320,1,0,0:0:0:0: -237,182,176435,6,0,B|229:94|283:97|266:-7,1,187,2|8,0:0|0:0,0:0:0:0: -151,40,176781,1,0,0:0:0:0: -0,156,176897,2,0,L|93:149,1,93.5,2|0,0:0|0:0,0:0:0:0: -164,280,177127,2,0,L|62:286,1,93.5,8|0,0:0|0:0,0:0:0:0: -208,145,177358,5,6,0:0:0:0: -242,59,177474,1,0,0:0:0:0: -334,63,177589,1,8,0:0:0:0: -358,154,177704,1,0,0:0:0:0: -281,204,177820,1,2,0:0:0:0: -208,145,177935,1,0,0:0:0:0: -129,196,178051,1,8,0:0:0:0: -153,286,178166,1,0,0:0:0:0: -246,290,178281,6,0,L|235:384,1,93.5,2|0,0:0|0:0,0:0:0:0: -142,378,178512,2,0,L|153:286,1,93.5,8|0,0:0|0:0,0:0:0:0: -139,103,178743,2,0,L|128:197,1,93.5,2|0,0:0|0:0,0:0:0:0: -35,191,178974,2,0,L|45:98,1,93.5,8|0,0:0|0:0,0:0:0:0: -139,103,179204,6,0,P|186:128|228:120,1,93.5,2|0,0:0|0:0,0:0:0:0: -362,179,179435,2,0,P|316:174|277:198,1,93.5,8|0,0:0|0:0,0:0:0:0: -392,365,179666,5,2,0:0:0:0: -464,306,179781,1,8,0:0:0:0: -464,306,179839,1,8,0:0:0:0: -464,306,179897,1,8,0:0:0:0: -378,270,180012,1,8,0:0:0:0: -450,211,180127,5,2,0:0:0:0: -362,179,180243,1,8,0:0:0:0: -362,179,180301,1,8,0:0:0:0: -362,179,180358,2,0,L|257:164,1,93.5,8|0,0:0|0:0,0:0:0:0: -160,37,180589,5,2,0:0:0:0: -105,123,180704,1,8,0:0:0:0: -269,165,180820,1,8,0:0:0:0: -259,62,180935,1,8,0:0:0:0: -172,203,181051,6,0,P|205:334|201:384,1,187,6|8,0:0|0:0,0:0:0:0: -121,328,181397,1,0,0:0:0:0: -37,358,181512,2,0,P|4:227|8:177,1,187,2|8,0:0|0:0,0:0:0:0: -58,98,181858,1,0,0:0:0:0: -58,98,181974,6,0,P|104:96|150:106,1,93.5,2|0,0:0|0:0,0:0:0:0: -381,158,182204,2,0,P|334:191|224:165,1,140.25,8|0,0:0|0:0,0:0:0:0: -214,161,182435,2,0,L|223:260,1,93.5,2|0,0:0|0:0,0:0:0:0: -184,337,182666,1,8,0:0:0:0: -278,329,182781,6,0,B|383:304|353:370|477:341,1,187,2|2,0:0|0:0,0:0:0:0: -505,267,183127,2,0,P|488:184|474:75,1,187,8|2,0:0|0:0,0:0:0:0: -403,21,183474,2,0,P|382:61|397:133,1,93.5,0|8,0:0|0:0,0:0:0:0: -331,198,183704,1,0,0:0:0:0: -287,106,183820,6,0,P|225:59|118:89,1,187,2|8,0:0|0:0,0:0:0:0: -90,168,184166,1,0,0:0:0:0: -29,98,184281,2,0,P|36:44|36:0,1,93.5,2|0,0:0|0:0,0:0:0:0: -183,152,184512,2,0,P|176:206|176:250,1,93.5,8|0,0:0|0:0,0:0:0:0: -134,324,184743,6,0,P|183:295|325:315,1,187,2|8,0:0|0:0,0:0:0:0: -370,231,185089,1,0,0:0:0:0: -357,132,185204,2,0,P|308:161|166:141,1,187,2|8,0:0|0:0,0:0:0:0: -102,104,185551,1,0,0:0:0:0: -102,104,185666,6,0,L|89:-11,1,93.5,2|0,0:0|0:0,0:0:0:0: -103,202,185897,2,0,P|73:251|84:354,1,140.25,8|0,0:0|0:0,0:0:0:0: -101,371,186127,2,0,L|213:361,1,93.5,2|0,0:0|0:0,0:0:0:0: -281,384,186358,1,8,0:0:0:0: -254,295,186474,6,0,P|248:229|231:92,1,187,2|2,0:0|0:0,0:0:0:0: -274,29,186820,2,0,P|327:8|437:76,1,187,8|2,0:0|0:0,0:0:0:0: -509,130,187166,1,0,0:0:0:0: -422,165,187281,2,0,P|381:187|321:225,1,93.5,8|0,0:0|0:0,0:0:0:0: -268,273,187512,6,0,P|209:225|94:253,1,187,2|8,0:0|0:0,0:0:0:0: -25,205,187858,1,0,0:0:0:0: -36,296,187974,2,0,L|43:393,1,93.5,2|0,0:0|0:0,0:0:0:0: -95,151,188204,2,0,L|88:54,1,93.5,8|0,0:0|0:0,0:0:0:0: -164,6,188435,6,0,P|233:5|369:38,1,187,2|8,0:0|0:0,0:0:0:0: -438,57,188781,1,0,0:0:0:0: -367,123,188897,2,0,P|298:124|162:91,1,187,2|8,0:0|0:0,0:0:0:0: -95,151,189243,1,0,0:0:0:0: -95,151,189358,6,0,L|106:252,1,93.5,2|0,0:0|0:0,0:0:0:0: -54,321,189589,2,0,P|109:298|219:381,1,187,8|2,0:0|0:0,0:0:0:0: -285,305,189935,1,0,0:0:0:0: -370,338,190051,2,0,P|419:338|462:310,1,93.5,8|0,0:0|0:0,0:0:0:0: -497,235,190281,6,0,P|485:171|468:44,1,187,2|8,0:0|0:0,0:0:0:0: -387,10,190627,1,0,0:0:0:0: -387,10,190743,2,0,L|377:109,1,93.5,2|0,0:0|0:0,0:0:0:0: -294,258,190974,2,0,L|304:159,1,93.5,8|0,0:0|0:0,0:0:0:0: -291,73,191204,6,0,P|239:22|128:42,1,187,2|8,0:0|0:0,0:0:0:0: -110,126,191551,1,0,0:0:0:0: -161,202,191666,2,0,P|209:193|250:142,1,93.5,2|0,0:0|0:0,0:0:0:0: -133,37,191897,2,0,P|83:37|30:77,1,93.5,8|0,0:0|0:0,0:0:0:0: -13,160,192127,6,0,B|45:242|165:276|256:192|256:192|347:108|467:142|499:224,1,561,2|8,0:0|0:0,0:0:0:0: -373,263,193051,1,2,0:0:0:0: -13,224,193974,6,0,B|45:142|165:108|256:192|256:192|347:276|467:242|499:160,1,561,2|8,0:0|0:0,0:0:0:0: -373,121,194898,1,2,0:0:0:0: -139,263,195127,1,8,0:0:0:0: -343,342,195358,1,2,0:0:0:0: -373,121,195589,2,8,L|359:5,1,93.5 -232,190,195820,6,0,P|228:235|251:275,1,93.5,2|10,0:0|0:0,0:0:0:0: -447,186,196051,2,0,P|470:147|461:88,1,93.5,10|10,0:0|0:0,0:0:0:0: -327,213,196281,1,10,0:0:0:0: -512,262,196397,5,10,0:0:0:0: -496,271,196454,1,2,0:0:0:0: -483,284,196512,1,10,0:0:0:0: -472,299,196570,1,10,0:0:0:0: -463,316,196627,1,10,0:0:0:0: -456,335,196685,1,10,0:0:0:0: -452,358,196743,5,10,0:0:0:0: -426,322,196801,1,10,0:0:0:0: -390,303,196858,1,10,0:0:0:0: -347,295,196916,1,10,0:0:0:0: -303,298,196974,1,10,0:0:0:0: -269,319,197031,1,10,0:0:0:0: -240,350,197089,1,10,0:0:0:0: -199,361,197147,1,10,0:0:0:0: -151,345,197204,5,10,0:0:0:0: -112,305,197262,1,10,0:0:0:0: -104,251,197320,1,10,0:0:0:0: -127,202,197377,1,10,0:0:0:0: -172,171,197435,1,10,0:0:0:0: -226,173,197493,1,10,0:0:0:0: -267,207,197551,1,10,0:0:0:0: -319,215,197608,1,10,0:0:0:0: -364,185,197666,6,0,P|371:142|384:-12,1,187,6|8,0:0|0:0,0:0:0:0: -293,44,198012,1,0,0:0:0:0: -464,131,198127,2,0,P|457:174|444:328,1,187,2|8,0:0|0:0,0:0:0:0: -364,185,198473,1,0,0:0:0:0: -249,278,198589,6,0,P|198:265|118:255,1,93.5,2|0,0:0|0:0,0:0:0:0: -30,99,198820,1,8,0:0:0:0: -30,99,199051,2,0,P|76:91|121:79,1,93.5,2|0,0:0|0:0,0:0:0:0: -199,27,199281,1,8,0:0:0:0: -113,175,199396,1,0,0:0:0:0: -355,186,199512,6,0,P|284:122|191:131,1,187,2|8,0:0|0:0,0:0:0:0: -113,175,199858,1,0,0:0:0:0: -180,321,199974,2,0,P|188:279|192:191,1,93.5,2|0,0:0|0:0,0:0:0:0: -16,163,200204,2,0,P|8:205|4:293,1,93.5,8|0,0:0|0:0,0:0:0:0: -86,315,200435,5,2,0:0:0:0: -192,228,200551,1,0,0:0:0:0: -71,107,200666,2,0,B|57:79|57:79|74:12,1,93.5,8|0,0:0|0:0,0:0:0:0: -268,190,200897,2,0,B|282:218|282:218|265:285,1,93.5,2|0,0:0|0:0,0:0:0:0: -86,200,201127,2,0,L|187:185,1,93.5,8|0,0:0|0:0,0:0:0:0: -512,85,201358,6,0,P|428:94|348:27,1,187,2|8,0:0|0:0,0:0:0:0: -247,2,201704,1,0,0:0:0:0: -190,93,201820,2,0,P|185:138|171:219,1,93.5,2|0,0:0|0:0,0:0:0:0: -357,153,202051,2,0,P|364:198|384:277,1,93.5,8|0,0:0|0:0,0:0:0:0: -427,341,202281,5,2,0:0:0:0: -449,182,202397,1,0,0:0:0:0: -287,258,202512,2,0,L|190:278,1,93.5,8|0,0:0|0:0,0:0:0:0: -10,123,202743,2,0,B|78:138|78:138|103:170|103:170|182:186,1,187,2|8,0:0|0:0,0:0:0:0: -249,122,203089,1,0,0:0:0:0: -173,0,203204,6,0,P|165:46|162:92,1,93.5,2|0,0:0|0:0,0:0:0:0: -327,194,203435,2,0,P|334:147|337:101,1,93.5,8|0,0:0|0:0,0:0:0:0: -78,274,203666,2,0,P|159:213|264:257,1,187,2|8,0:0|0:0,0:0:0:0: -297,307,204012,1,0,0:0:0:0: -379,366,204127,6,0,P|387:315|390:269,1,93.5,2|0,0:0|0:0,0:0:0:0: -327,194,204358,1,8,0:0:0:0: -357,100,204474,1,0,0:0:0:0: -512,159,204589,6,0,L|420:176,1,93.5,2|0,0:0|0:0,0:0:0:0: -268,121,204820,1,8,0:0:0:0: -385,12,204935,1,0,0:0:0:0: -357,100,205051,6,0,L|160:75,1,187,2|8,0:0|0:0,0:0:0:0: -1,107,205397,1,0,0:0:0:0: -78,143,205512,2,0,B|94:114|94:114|74:32,1,93.5,2|0,0:0|0:0,0:0:0:0: -1,291,205743,2,0,B|-15:320|-15:320|5:402,1,93.5,8|0,0:0|0:0,0:0:0:0: -130,229,205974,6,0,L|7:215,1,93.5,2|0,0:0|0:0,0:0:0:0: -183,327,206204,1,8,0:0:0:0: -234,177,206320,1,0,0:0:0:0: -286,277,206435,2,0,P|374:289|468:223,1,187,2|8,0:0|0:0,0:0:0:0: -425,123,206781,1,0,0:0:0:0: -322,180,206897,6,0,P|224:170|135:140,1,187,2|8,0:0|0:0,0:0:0:0: -140,142,207358,2,0,P|150:195|154:258,1,93.5,2|0,0:0|0:0,0:0:0:0: -323,370,207589,2,0,P|313:317|309:254,1,93.5,8|0,0:0|0:0,0:0:0:0: -62,268,207820,6,0,P|127:324|222:300,1,187,2|8,0:0|0:0,0:0:0:0: -243,204,208166,1,0,0:0:0:0: -309,277,208281,2,0,P|365:282|426:290,1,93.5,2|0,0:0|0:0,0:0:0:0: -461,105,208512,2,0,P|404:99|344:92,1,93.5,8|0,0:0|0:0,0:0:0:0: -481,338,208743,6,0,P|492:262|383:195,2,187,2|8|2,0:0|0:0|0:0,0:0:0:0: -323,370,209320,1,0,0:0:0:0: -309,277,209435,6,0,L|289:153,1,93.5,8|0,0:0|0:0,0:0:0:0: -145,71,209666,2,0,L|262:115,1,93.5,2|0,0:0|0:0,0:0:0:0: -401,28,209897,2,0,L|303:107,1,93.5,8|0,0:0|0:0,0:0:0:0: -206,195,210127,5,2,0:0:0:0: -263,16,210243,1,0,0:0:0:0: -380,159,210358,1,8,0:0:0:0: -380,159,210589,6,0,P|333:151|288:141,1,93.5,2|0,0:0|0:0,0:0:0:0: -197,96,210820,1,8,0:0:0:0: -116,158,210935,1,0,0:0:0:0: -12,43,211051,6,0,P|58:50|103:60,1,93.5,2|0,0:0|0:0,0:0:0:0: -206,195,211281,1,8,0:0:0:0: -278,43,211397,1,0,0:0:0:0: -448,187,211512,6,0,P|357:198|287:140,1,187,2|8,0:0|0:0,0:0:0:0: -197,96,211858,1,0,0:0:0:0: -206,195,211974,5,10,0:0:0:0: -353,85,212089,1,0,0:0:0:0: -234,360,212204,1,8,0:0:0:0: -116,158,212320,1,8,0:0:0:0: -320,269,212435,6,0,P|392:256|515:238,1,187,6|8,0:0|0:0,0:0:0:0: -456,334,212781,1,0,0:0:0:0: -354,166,212897,2,0,P|282:179|159:197,1,187,2|8,0:0|0:0,0:0:0:0: -65,238,213243,1,0,0:0:0:0: -129,370,213358,6,0,P|139:303|154:247,1,93.5,2|0,0:0|0:0,0:0:0:0: -81,67,213589,1,8,0:0:0:0: -81,67,213820,2,0,P|90:112|96:159,1,93.5,2|0,0:0|0:0,0:0:0:0: -60,324,214051,1,8,0:0:0:0: -224,263,214166,1,0,0:0:0:0: -65,238,214281,6,0,L|-38:229,1,93.5,2|0,0:0|0:0,0:0:0:0: -130,367,214512,1,8,0:0:0:0: -304,314,214628,1,0,0:0:0:0: -224,263,214743,2,0,B|206:293|206:293|221:349,1,93.5,2|0,0:0|0:0,0:0:0:0: -366,147,214974,2,0,B|384:117|384:117|368:60,1,93.5,8|0,0:0|0:0,0:0:0:0: -204,176,215204,5,2,0:0:0:0: -361,243,215320,1,0,0:0:0:0: -294,103,215435,2,0,L|287:201,1,93.5,8|0,0:0|0:0,0:0:0:0: -50,91,215666,2,0,P|102:47|225:55,1,187,2|8,0:0|0:0,0:0:0:0: -432,36,216012,5,8,0:0:0:0: -432,36,216070,1,8,0:0:0:0: -432,36,216127,2,0,P|383:29|310:9,1,93.5,2|0,0:0|0:0,0:0:0:0: -393,222,216358,2,0,P|426:189|462:159,1,93.5,8|0,0:0|0:0,0:0:0:0: -295,134,216589,2,0,P|218:137|115:203,1,187,2|8,0:0|0:0,0:0:0:0: -48,248,216935,1,0,0:0:0:0: -18,62,217051,6,0,L|41:158,1,93.5,2|0,0:0|0:0,0:0:0:0: -131,296,217281,2,0,B|143:228|143:228|125:193|125:193|141:100,1,187,8|2,0:0|0:0,0:0:0:0: -279,110,217627,2,0,L|216:186,1,93.5,0|8,0:0|0:0,0:0:0:0: -131,296,217858,1,0,0:0:0:0: -194,368,217974,6,0,P|223:323|219:266,1,93.5,2|0,0:0|0:0,0:0:0:0: -48,248,218204,2,0,P|35:292|46:337,1,93.5,8|0,0:0|0:0,0:0:0:0: -274,225,218435,6,0,L|299:115,1,93.5,2|0,0:0|0:0,0:0:0:0: -2,80,218666,2,0,L|22:171,1,93.5,8|0,0:0|0:0,0:0:0:0: -254,53,218897,6,0,P|224:17|104:42,1,140.25,2|0,0:0|0:0,0:0:0:0: -195,199,219127,6,0,P|238:181|266:111,1,98.1749970039369,8|0,0:0|0:0,0:0:0:0: -82,73,219358,6,0,P|76:119|145:189,1,126.224996147919,2|0,2:0|2:0,2:0:0:0: -171,134,219589,6,0,L|182:63,1,56.0999982879639,8|0,0:0|0:0,0:0:0:0: -327,237,219820,6,0,P|229:220|153:292,1,187,2|8,0:0|0:0,0:0:0:0: -0,315,220166,1,0,0:0:0:0: -71,260,220281,2,0,B|87:291|87:291|74:358,1,93.5,2|0,0:0|0:0,0:0:0:0: -96,99,220512,2,0,B|80:68|80:68|93:1,1,93.5,8|0,0:0|0:0,0:0:0:0: -121,182,220743,6,0,L|9:170,1,93.5,2|0,0:0|0:0,0:0:0:0: -161,53,220974,1,8,0:0:0:0: -242,151,221089,1,0,0:0:0:0: -281,9,221204,2,0,P|379:-2|471:71,1,187,2|8,0:0|0:0,0:0:0:0: -389,306,221551,5,8,0:0:0:0: -389,306,221608,1,8,0:0:0:0: -389,306,221666,2,0,P|370:262|376:195,1,93.5,2|0,0:0|0:0,0:0:0:0: -427,130,221897,2,0,L|234:151,1,187,8|2,0:0|0:0,0:0:0:0: -120,283,222243,1,0,0:0:0:0: -210,299,222358,6,0,P|200:259|163:181,1,93.5,8|0,0:0|0:0,0:0:0:0: -267,2,222589,2,0,P|237:30|188:101,1,93.5,2|0,0:0|0:0,0:0:0:0: -0,103,222820,2,0,P|39:114|125:121,1,93.5,8|0,0:0|0:0,0:0:0:0: -301,317,223051,6,0,P|261:305|175:298,1,93.5,2|0,0:0|0:0,0:0:0:0: -122,344,223281,1,8,0:0:0:0: -180,210,223397,1,0,0:0:0:0: -323,244,223512,6,0,P|384:252|484:175,1,187,2|8,0:0|0:0,0:0:0:0: -425,99,223858,2,0,P|364:91|264:168,1,187,2|2,0:0|0:0,0:0:0:0: -180,210,224204,2,0,L|68:197,1,93.5,8|0,0:0|0:0,0:0:0:0: -5,166,224435,5,2,0:0:0:0: -64,286,224551,1,0,0:0:0:0: -154,124,224666,2,0,B|171:92|171:92|154:13,1,93.5,8|0,0:0|0:0,0:0:0:0: -84,78,224897,5,2,0:0:0:0: -241,118,225012,1,0,0:0:0:0: -84,78,225127,2,0,L|-13:89,1,93.5,8|0,0:0|0:0,0:0:0:0: -149,260,225358,6,0,B|251:234|212:312|352:265,1,187,2|8,0:0|0:0,0:0:0:0: -448,184,225704,2,0,B|324:153|324:153|310:177|284:198,1,187,2|2,0:0|0:0,0:0:0:0: -406,360,226051,2,0,P|412:311|418:257,1,93.5,8|0,0:0|0:0,0:0:0:0: -380,80,226281,1,2,0:0:0:0: -380,80,226512,5,8,0:0:0:0: -502,257,226627,1,2,0:0:0:0: -480,115,226743,5,2,0:0:0:0: -396,231,226858,1,8,0:0:0:0: -485,129,226974,5,8,0:0:0:0: -393,213,227089,1,8,0:0:0:0: -439,171,227204,6,0,L|296:157,1,140.25,2|2,0:0|0:0,0:0:0:0: -299,157,228588,6,0,P|275:197|283:252,1,93.5,2|0,0:0|0:0,0:0:0:0: -422,93,229280,2,0,P|428:47|407:6,1,93.5,2|0,0:0|0:0,0:0:0:0: -324,0,229973,1,2,0:0:0:0: -238,105,230204,5,0,0:0:0:0: -172,136,230434,1,0,0:0:0:0: -180,63,230665,1,0,0:0:0:0: -250,215,230896,6,0,L|231:364,1,140.25,2|2,0:0|0:0,0:0:0:0: -232,354,232280,6,0,L|125:371,1,93.5 -289,280,232973,2,0,L|396:297,1,93.5,2|0,0:0|0:0,0:0:0:0: -212,226,233665,1,2,0:0:0:0: -356,119,233896,5,0,0:0:0:0: -304,62,234127,1,0,0:0:0:0: -231,74,234357,1,0,0:0:0:0: -73,213,234588,6,0,L|216:227,1,140.25,2|2,0:0|0:0,0:0:0:0: -213,227,235973,6,0,P|237:187|229:132,1,93.5,2|0,0:0|0:0,0:0:0:0: -90,291,236665,2,0,P|83:336|107:379,1,93.5,2|0,0:0|0:0,0:0:0:0: -209,330,237357,6,0,L|147:318,1,46.75,2|0,0:0|0:0,0:0:0:0: -122,166,237819,1,0,0:0:0:0: -303,228,238050,1,0,0:0:0:0: -198,241,238280,6,0,P|161:169|186:107,1,140.25,2|0,0:0|0:0,0:0:0:0: -340,37,239204,5,0,0:0:0:0: -402,74,239434,1,0,0:0:0:0: -470,63,239665,1,2,0:0:0:0: -427,182,239896,5,0,0:0:0:0: -497,206,240127,1,0,0:0:0:0: -362,265,240357,5,2,0:0:0:0: -417,309,240588,1,0,0:0:0:0: -429,379,240819,1,0,0:0:0:0: -256,224,241050,5,2,0:0:0:0: -219,285,241280,1,0,0:0:0:0: -184,198,241511,1,0,0:0:0:0: -162,327,241742,1,0,0:0:0:0: -110,203,241973,6,0,P|64:196|16:229,1,93.5,2|2,0:0|0:0,0:0:0:0: -140,135,242665,2,0,P|148:95|140:71,1,46.75,2|0,0:0|0:0,0:0:0:0: -96,37,243127,1,2,0:0:0:0: -75,103,243357,1,0,0:0:0:0: -215,150,243588,5,2,0:0:0:0: -322,47,243819,1,0,0:0:0:0: -396,39,244050,2,0,L|448:32,1,46.75,2|0,0:0|0:0,0:0:0:0: -497,144,244511,2,0,L|395:133,1,93.5,2|0,0:0|0:0,0:0:0:0: -335,257,245204,1,0,0:0:0:0: -363,327,245434,6,0,P|405:282|382:203,1,140.25,2|0,0:0|0:0,0:0:0:0: -265,264,246357,1,2,0:0:0:0: -210,314,246588,1,0,0:0:0:0: -140,294,246819,2,0,P|132:264|133:230,1,46.75,2|0,0:0|0:0,0:0:0:0: -91,67,247280,5,2,0:0:0:0: -166,57,247511,2,0,P|163:80|157:102,1,46.75,2|0,0:0|0:0,0:0:0:0: -132,178,247973,2,0,L|194:170,2,46.75 -309,221,248665,1,2,0:0:0:0: -379,95,248896,1,0,0:0:0:0: -238,21,249127,6,0,P|228:61|228:79,1,46.75,2|0,0:0|0:0,0:0:0:0: -212,135,249588,1,0,0:0:0:0: -225,207,249819,1,2,0:0:0:0: -356,282,250050,6,0,P|366:242|366:224,1,46.75 -382,168,250511,1,0,0:0:0:0: -464,93,250742,6,0,B|441:76|441:76|363:99,1,93.5,2|0,0:0|0:0,0:0:0:0: -310,194,251550,2,0,L|228:184,1,70.1250026750566 -210,103,252247,1,0,0:0:0:0: -210,103,252702,6,0,L|141:111,1,70.1250026750566,2|0,0:0|0:0,0:0:0:0: -117,195,253506,1,2,0:0:0:0: -117,195,254095,6,0,L|36:184,1,70.1250026750566,2|2,0:0|0:0,0:0:0:0: -19,113,255580,1,2,0:0:0:0: -71,53,256480,6,0,P|126:48|182:100,1,122.718754681349,2|0,0:0|0:0,0:0:0:0: -211,259,257747,6,0,P|179:213|190:158,1,105.187504012585,2|0,0:0|0:0,0:0:0:0: -474,66,258892,6,0,P|433:121|242:116,1,271.734385365844,2|0,0:0|0:0,0:0:0:0: -210,216,263197,6,0,P|298:232|385:279,1,187,6|8,0:0|0:0,0:0:0:0: -456,330,263543,1,0,0:0:0:0: -465,242,263658,2,0,P|478:185|512:56,1,187,2|8,0:0|0:0,0:0:0:0: -425,84,264004,1,0,0:0:0:0: -368,19,264120,6,0,P|319:14|246:5,1,93.5,2|0,0:0|0:0,0:0:0:0: -280,139,264350,2,0,P|326:143|372:149,1,93.5,8|0,0:0|0:0,0:0:0:0: -197,57,264581,5,2,0:0:0:0: -121,35,264697,1,2,0:0:0:0: -50,67,264812,1,8,0:0:0:0: -21,139,264927,1,2,0:0:0:0: -37,213,265043,6,0,P|129:220|234:235,1,187,2|8,0:0|0:0,0:0:0:0: -314,216,265389,1,0,0:0:0:0: -283,308,265504,2,0,P|223:365|112:339,1,187,2|8,0:0|0:0,0:0:0:0: -57,295,265850,1,0,0:0:0:0: -142,255,265966,6,0,P|154:195|160:137,1,93.5,2|0,0:0|0:0,0:0:0:0: -52,120,266197,2,0,P|40:180|34:238,1,93.5,8|0,0:0|0:0,0:0:0:0: -217,109,266427,5,2,0:0:0:0: -297,102,266543,1,2,0:0:0:0: -368,138,266658,1,8,0:0:0:0: -406,207,266773,1,2,0:0:0:0: -404,283,266889,6,0,P|417:225|461:68,1,187,2|8,0:0|0:0,0:0:0:0: -503,22,267235,1,0,0:0:0:0: -411,13,267350,2,0,P|364:19|310:27,1,93.5,2|0,0:0|0:0,0:0:0:0: -237,75,267581,1,8,0:0:0:0: -169,6,267697,1,0,0:0:0:0: -148,102,267812,6,0,P|154:148|162:203,1,93.5,2|0,0:0|0:0,0:0:0:0: -333,216,268043,2,0,P|326:169|319:115,1,93.5,8|0,0:0|0:0,0:0:0:0: -63,146,268273,5,2,0:0:0:0: -11,206,268389,1,2,0:0:0:0: -2,283,268504,1,8,0:0:0:0: -36,352,268620,1,2,0:0:0:0: -107,381,268735,6,0,P|191:364|304:347,1,187,2|8,0:0|0:0,0:0:0:0: -370,299,269081,1,0,0:0:0:0: -333,216,269197,2,0,P|339:159|351:93,1,93.5,2|0,0:0|0:0,0:0:0:0: -288,44,269427,1,8,0:0:0:0: -368,2,269543,1,0,0:0:0:0: -512,90,269658,6,0,L|420:77,1,93.5,2|0,0:0|0:0,0:0:0:0: -173,113,269889,2,0,L|265:126,1,93.5,8|0,0:0|0:0,0:0:0:0: -381,222,270120,5,2,0:0:0:0: -306,244,270235,1,2,0:0:0:0: -232,267,270350,1,8,0:0:0:0: -158,289,270466,1,10,0:0:0:0: -154,280,270523,1,8,0:0:0:0: -150,272,270581,6,0,P|152:245|165:215,1,46.75,2|0,0:0|0:0,0:0:0:0: -136,76,270697,2,0,P|159:91|178:117,1,46.75,2|0,0:0|0:0,0:0:0:0: -318,154,270812,2,0,P|294:166|262:170,1,46.75,8|0,0:0|0:0,0:0:0:0: -103,158,270927,6,0,L|25:170,2,46.75,2|0|2,0:0|0:0|0:0,0:0:0:0: -407,33,271158,2,0,L|360:25,1,46.75,2|0,0:0|0:0,0:0:0:0: -216,97,271273,5,10,0:0:0:0: -221,91,271331,1,2,0:0:0:0: -227,87,271389,1,2,0:0:0:0: -235,86,271447,1,2,0:0:0:0: -243,87,271504,2,0,P|274:131|263:194,1,93.5,2|0,0:0|0:0,0:0:0:0: -389,311,271735,5,10,0:0:0:0: -367,268,271793,1,2,0:0:0:0: -377,221,271850,1,2,0:0:0:0: -417,190,271908,1,2,0:0:0:0: -466,194,271966,2,0,P|494:212|507:243,3,46.75,2|0|0|0,0:0|0:0|0:0|0:0,0:0:0:0: -439,260,272197,6,0,P|427:214|418:131,1,93.5,8|2,0:0|0:0,0:0:0:0: -436,94,272370,1,2,0:0:0:0: -441,88,272427,5,2,0:0:0:0: -391,121,272485,1,0,0:0:0:0: -334,118,272543,1,2,0:0:0:0: -285,90,272600,1,0,0:0:0:0: -262,39,272658,1,8,0:0:0:0: -219,3,272716,1,0,0:0:0:0: -163,0,272773,2,0,L|110:14,1,46.75,2|0,0:0|0:0,0:0:0:0: -13,60,272889,5,10,0:0:0:0: -49,87,272947,1,8,0:0:0:0: -61,128,273004,1,8,0:0:0:0: -53,174,273062,1,8,0:0:0:0: -26,207,273120,1,8,0:0:0:0: -13,249,273177,1,0,0:0:0:0: -21,291,273235,2,0,L|33:337,1,46.75,2|0,0:0|0:0,0:0:0:0: -126,380,273350,5,2,0:0:0:0: -162,383,273408,1,2,0:0:0:0: -194,367,273466,1,2,0:0:0:0: -213,339,273523,1,2,0:0:0:0: -242,320,273581,1,10,0:0:0:0: -277,322,273639,1,2,0:0:0:0: -307,345,273697,1,2,0:0:0:0: -343,352,273754,1,2,0:0:0:0: -375,334,273812,6,0,P|383:286|383:218,1,93.5,10|2,0:0|0:0,0:0:0:0: -380,221,273985,1,2,0:0:0:0: -370,203,274043,2,0,L|477:218,1,93.5,2|2,0:0|0:0,0:0:0:0: -263,211,274273,6,0,L|156:196,1,93.5,2|0,0:0|0:0,0:0:0:0: -103,234,274447,1,0,0:0:0:0: -103,234,274504,2,0,B|92:199|92:199|114:119,1,93.5,8|0,0:0|0:0,0:0:0:0: -315,46,274735,2,0,B|326:81|326:81|304:161,1,93.5,2|0,0:0|0:0,0:0:0:0: -248,83,274908,1,0,0:0:0:0: -248,83,274966,2,0,L|141:68,1,93.5,8|0,0:0|0:0,0:0:0:0: -18,156,275197,5,2,0:0:0:0: -115,326,275312,1,0,0:0:0:0: -115,326,275370,1,0,0:0:0:0: -115,326,275427,2,0,P|111:281|101:226,1,93.5,8|0,0:0|0:0,0:0:0:0: -218,50,275658,2,0,P|222:95|232:150,1,93.5,2|0,0:0|0:0,0:0:0:0: -307,291,275889,2,0,L|411:280,1,93.5,8|0,0:0|0:0,0:0:0:0: -471,313,276062,1,0,0:0:0:0: -471,313,276120,6,0,B|478:289|478:289|474:256,7,46.75,2|0|0|0|8|0|0|0,0:0|0:0|0:0|0:0|0:0|0:0|0:0|0:0,0:0:0:0: -372,161,276581,2,0,B|365:185|365:185|369:218,7,46.75,2|0|0|0|8|0|0|0,0:0|0:0|0:0|0:0|0:0|0:0|0:0|0:0,0:0:0:0: -446,195,277043,5,10,0:0:0:0: -234,69,277158,1,8,0:0:0:0: -307,291,277273,1,8,0:0:0:0: -495,131,277389,1,8,0:0:0:0: -327,42,277504,5,2,0:0:0:0: -321,85,277562,1,0,0:0:0:0: -303,124,277620,1,8,0:0:0:0: -271,153,277677,1,8,0:0:0:0: -231,167,277735,1,8,0:0:0:0: -188,170,277793,1,8,0:0:0:0: -147,161,277850,1,8,0:0:0:0: -108,142,277908,1,8,0:0:0:0: -80,111,277966,6,0,P|26:157|22:280,1,187,6|8,0:0|0:0,0:0:0:0: -84,330,278312,2,0,B|188:306|163:368|273:346,1,187,2|2,0:0|0:0,0:0:0:0: -351,312,278658,2,0,P|405:318|475:352,1,93.5,8|0,0:0|0:0,0:0:0:0: -277,257,278889,1,2,0:0:0:0: -277,257,279004,2,0,P|257:178|251:64,1,187,2|2,0:0|0:0,0:0:0:0: -321,3,279350,2,0,P|345:47|344:104,1,93.5,2|0,0:0|0:0,0:0:0:0: -178,142,279581,2,0,P|154:98|155:41,1,93.5,8|0,0:0|0:0,0:0:0:0: -250,72,279812,6,0,P|354:88|472:115,1,187,2|8,0:0|0:0,0:0:0:0: -452,198,280158,2,0,P|348:182|230:155,1,187,2|2,0:0|0:0,0:0:0:0: -208,235,280504,2,0,P|217:284|225:329,1,93.5,8|0,0:0|0:0,0:0:0:0: -125,215,280735,1,2,0:0:0:0: -125,215,280850,2,0,P|72:224|-13:122,1,187,2|2,0:0|0:0,0:0:0:0: -62,10,281197,2,0,P|69:52|67:110,1,93.5,2|0,0:0|0:0,0:0:0:0: -189,148,281427,2,0,P|187:101|194:55,1,93.5,8|0,0:0|0:0,0:0:0:0: -205,40,281600,1,0,0:0:0:0: -218,29,281658,6,0,P|303:43|413:60,1,187,2|8,0:0|0:0,0:0:0:0: -489,32,282004,2,0,P|524:69|499:203,1,187,2|2,0:0|0:0,0:0:0:0: -424,242,282350,2,0,P|416:191|412:130,1,93.5,8|0,0:0|0:0,0:0:0:0: -491,313,282581,1,2,0:0:0:0: -491,313,282697,2,0,P|427:279|296:283,1,187,2|2,0:0|0:0,0:0:0:0: -239,360,283043,2,0,P|230:291|217:234,1,93.5,2|0,0:0|0:0,0:0:0:0: -266,106,283273,2,0,P|275:175|288:232,1,93.5,8|0,0:0|0:0,0:0:0:0: -148,315,283504,6,0,P|91:273|-20:294,1,187,2|8,0:0|0:0,0:0:0:0: -162,217,283850,2,0,P|218:204|365:170,1,187,2|2,0:0|0:0,0:0:0:0: -95,87,284197,2,0,L|85:183,1,93.5,8|0,0:0|0:0,0:0:0:0: -61,358,284427,5,2,0:0:0:0: -61,358,284543,1,8,0:0:0:0: -227,288,284658,1,8,0:0:0:0: -227,288,284773,1,2,0:0:0:0: -159,375,284889,2,0,L|137:213,1,140.25,2|0,0:0|0:0,0:0:0:0: -216,73,285120,2,0,B|200:187|200:187|183:168|163:153,1,140.25,8|0,0:0|0:0,0:0:0:0: -121,113,285350,6,0,L|327:79,1,187,6|8,0:0|0:0,0:0:0:0: -377,144,285697,2,0,P|433:102|408:-9,1,187,2|2,0:0|0:0,0:0:0:0: -299,161,286043,2,0,L|285:253,1,93.5,8|0,0:0|0:0,0:0:0:0: -248,96,286273,1,2,0:0:0:0: -248,96,286389,2,0,P|202:52|83:71,1,187,2|2,0:0|0:0,0:0:0:0: -0,199,286735,2,0,P|51:195|108:172,1,93.5,2|0,0:0|0:0,0:0:0:0: -285,253,286966,2,8,P|239:229|196:185,1,93.5 -160,122,287197,6,0,L|126:341,1,187,2|8,0:0|0:0,0:0:0:0: -196,371,287543,2,0,P|276:320|373:351,1,187,2|2,0:0|0:0,0:0:0:0: -430,284,287889,2,0,P|479:295|538:303,1,93.5,8|0,0:0|0:0,0:0:0:0: -349,246,288120,1,2,0:0:0:0: -349,246,288235,2,0,P|336:185|319:51,1,187,2|2,0:0|0:0,0:0:0:0: -382,5,288581,2,0,L|491:21,1,93.5,2|0,0:0|0:0,0:0:0:0: -245,108,288812,2,0,L|136:92,1,93.5,8|0,0:0|0:0,0:0:0:0: -139,86,288985,1,0,0:0:0:0: -124,78,289043,6,0,P|142:128|46:249,1,187,2|8,0:0|0:0,0:0:0:0: -29,315,289389,2,0,P|114:328|249:358,1,187,2|2,0:0|0:0,0:0:0:0: -301,334,289735,2,0,P|292:280|283:203,1,93.5,8|0,0:0|0:0,0:0:0:0: -195,82,289966,1,2,0:0:0:0: -195,82,290081,2,0,B|163:199|163:199|209:254,1,187,2|2,0:0|0:0,0:0:0:0: -365,164,290427,2,0,L|258:148,1,93.5,2|0,0:0|0:0,0:0:0:0: -375,307,290658,2,0,L|482:323,1,93.5,8|0,0:0|0:0,0:0:0:0: -505,239,290889,6,0,P|519:179|483:55,1,187,2|8,0:0|0:0,0:0:0:0: -408,9,291235,2,0,P|334:30|193:48,1,187,2|2,0:0|0:0,0:0:0:0: -155,110,291581,2,0,P|118:102|55:94,1,93.5,8|0,0:0|0:0,0:0:0:0: -245,138,291812,2,0,P|285:200|249:315,1,187,2|8,0:0|0:0,0:0:0:0: -186,368,292158,1,0,0:0:0:0: -0,252,292273,6,0,L|147:236,1,140.25,2|0,0:0|0:0,0:0:0:0: -179,271,292504,2,0,L|82:282,1,93.5,8|0,0:0|0:0,0:0:0:0: -43,150,292735,2,0,L|139:138,1,93.5,2|0,0:0|0:0,0:0:0:0: -378,221,292966,2,0,P|309:240|212:164,1,187,8|2,0:0|0:0,0:0:0:0: -132,54,293312,1,0,0:0:0:0: -227,0,293427,2,0,L|205:119,1,93.5,8|0,0:0|0:0,0:0:0:0: -147,222,293658,5,2,0:0:0:0: -132,54,293773,1,0,0:0:0:0: -285,131,293889,2,0,P|331:141|388:146,1,93.5,8|0,0:0|0:0,0:0:0:0: -450,101,294120,5,2,0:0:0:0: -363,231,294235,1,2,0:0:0:0: -334,58,294350,1,8,0:0:0:0: -441,199,294466,1,2,0:0:0:0: -303,296,294581,6,0,L|254:308,3,46.75,2|2|2|0,0:0|0:0|0:0|0:0,0:0:0:0: -204,367,294812,2,0,L|158:355,3,46.75,8|2|8|2,0:0|0:0|0:0|0:0,0:0:0:0: -80,363,295043,1,2,0:0:0:0: -45,330,295100,1,2,0:0:0:0: -26,288,295158,1,10,0:0:0:0: -18,242,295216,1,2,0:0:0:0: -22,195,295273,1,2,0:0:0:0: -39,149,295331,1,2,0:0:0:0: -71,111,295389,1,2,0:0:0:0: -116,93,295447,1,2,0:0:0:0: -168,92,295504,6,0,L|391:131,1,187,6|8,0:0|0:0,0:0:0:0: -444,197,295850,1,0,0:0:0:0: -338,248,295966,2,0,L|115:209,1,187,2|8,0:0|0:0,0:0:0:0: -54,275,296312,1,0,0:0:0:0: -152,341,296427,2,0,L|268:360,1,93.5,2|0,0:0|0:0,0:0:0:0: -499,283,296658,2,0,P|473:256|339:249,1,140.25,8|0,0:0|0:0,0:0:0:0: -338,248,296889,2,0,L|324:124,1,93.5,2|0,0:0|0:0,0:0:0:0: -420,129,297120,1,8,0:0:0:0: -397,335,297235,1,0,0:0:0:0: -240,266,297350,6,0,B|197:242|197:242|56:271,1,187,2|8,0:0|0:0,0:0:0:0: -143,23,297697,2,0,B|186:47|186:47|327:18,1,187,2|2,0:0|0:0,0:0:0:0: -150,163,298043,2,0,L|50:147,1,93.5,8|0,0:0|0:0,0:0:0:0: -264,129,298273,2,0,B|334:122|334:122|371:146|371:146|460:136,1,187,2|8,0:0|0:0,0:0:0:0: -306,208,298620,2,0,L|270:313,1,93.5,0|2,0:0|0:0,0:0:0:0: -443,137,298850,5,10,0:0:0:0: -321,20,298966,1,8,0:0:0:0: -390,236,299081,1,10,0:0:0:0: -465,59,299197,6,0,B|352:46|412:116|277:97,1,187,2|8,0:0|0:0,0:0:0:0: -75,82,299543,1,0,0:0:0:0: -75,82,299658,2,0,P|122:26|258:65,1,187,2|8,0:0|0:0,0:0:0:0: -214,214,300004,1,0,0:0:0:0: -214,214,300120,2,0,L|194:102,1,93.5,2|0,0:0|0:0,0:0:0:0: -325,194,300350,2,0,L|303:362,1,140.25,8|0,0:0|0:0,0:0:0:0: -332,378,300581,2,0,L|222:364,1,93.5,2|0,0:0|0:0,0:0:0:0: -391,266,300812,2,0,L|501:280,1,93.5,8|0,0:0|0:0,0:0:0:0: -237,290,301043,6,0,L|42:262,1,187,2|8,0:0|0:0,0:0:0:0: -0,154,301389,1,0,0:0:0:0: -53,47,301504,2,0,L|248:75,1,187,2|8,0:0|0:0,0:0:0:0: -290,183,301850,1,0,0:0:0:0: -237,290,301966,2,0,L|138:275,1,93.5,2|0,0:0|0:0,0:0:0:0: -348,127,302197,2,0,L|447:112,1,93.5,8|0,0:0|0:0,0:0:0:0: -482,321,302427,2,0,P|448:268|318:266,1,187,2|8,0:0|0:0,0:0:0:0: -212,183,302773,1,0,0:0:0:0: -296,62,302889,6,0,P|307:111|306:171,1,93.5,2|0,0:0|0:0,0:0:0:0: -144,275,303120,2,0,P|133:226|134:166,1,93.5,8|0,0:0|0:0,0:0:0:0: -289,328,303350,2,0,B|183:302|233:387|95:356,1,187,2|8,0:0|0:0,0:0:0:0: -42,263,303697,1,0,0:0:0:0: -132,182,303812,6,0,P|180:125|149:5,1,187,2|8,0:0|0:0,0:0:0:0: -68,39,304158,1,0,0:0:0:0: -68,39,304273,2,0,P|55:75|49:136,1,93.5,2|0,0:0|0:0,0:0:0:0: -269,175,304504,2,0,P|282:139|288:78,1,93.5,8|0,0:0|0:0,0:0:0:0: -163,20,304735,6,0,P|173:115|183:232,1,187,2|8,0:0|0:0,0:0:0:0: -146,296,305081,2,0,P|197:258|325:295,1,187,2|2,0:0|0:0,0:0:0:0: -378,353,305427,1,8,0:0:0:0: -470,323,305543,1,0,0:0:0:0: -403,252,305658,6,0,P|411:158|421:65,1,187,2|8,0:0|0:0,0:0:0:0: -353,1,306004,1,0,0:0:0:0: -248,105,306120,2,0,P|304:107|352:65,1,93.5,2|0,0:0|0:0,0:0:0:0: -178,48,306350,2,0,P|136:26|91:31,1,93.5,8|0,0:0|0:0,0:0:0:0: -67,171,306581,6,0,P|56:224|49:280,1,93.5,2|0,0:0|0:0,0:0:0:0: -101,341,306812,1,8,0:0:0:0: -196,332,306927,1,0,0:0:0:0: -148,251,307043,2,0,P|207:210|328:230,1,187,2|8,0:0|0:0,0:0:0:0: -395,165,307389,1,0,0:0:0:0: -327,32,307504,6,0,P|315:80|308:129,1,93.5,2|0,0:0|0:0,0:0:0:0: -379,356,307735,2,0,P|391:308|398:259,1,93.5,8|0,0:0|0:0,0:0:0:0: -511,90,307966,6,0,L|483:-25,1,93.5,2|0,0:0|0:0,0:0:0:0: -473,292,308197,2,0,L|495:382,1,93.5,8|0,0:0|0:0,0:0:0:0: -512,192,308427,5,2,0:0:0:0: -418,163,308543,1,0,0:0:0:0: -375,249,308658,1,8,0:0:0:0: -379,256,308889,5,2,0:0:0:0: -281,219,309004,1,10,0:0:0:0: -275,203,309062,1,2,0:0:0:0: -271,188,309120,1,10,0:0:0:0: -268,171,309177,1,10,0:0:0:0: -265,156,309235,1,10,0:0:0:0: -264,140,309293,1,10,0:0:0:0: -263,124,309350,5,2,0:0:0:0: -233,165,309408,1,2,0:0:0:0: -189,185,309466,1,2,0:0:0:0: -142,183,309523,1,2,0:0:0:0: -105,155,309581,1,10,0:0:0:0: -86,111,309639,1,2,0:0:0:0: -90,63,309697,1,10,0:0:0:0: -122,27,309754,1,2,0:0:0:0: -169,16,309812,6,0,L|237:24,1,46.75,10|2,0:0|0:0,0:0:0:0: -263,124,309927,2,0,L|331:116,1,46.75,10|2,0:0|0:0,0:0:0:0: -361,42,310043,2,0,L|429:50,1,46.75,10|2,0:0|0:0,0:0:0:0: -495,106,310158,1,10,0:0:0:0: -495,106,310216,1,10,0:0:0:0: -495,106,310273,6,0,L|480:318,1,187,6|8,0:0|0:0,0:0:0:0: -428,371,310620,1,0,0:0:0:0: -316,222,310735,2,0,L|329:35,1,187,2|8,0:0|0:0,0:0:0:0: -242,71,311081,1,0,0:0:0:0: -316,222,311197,6,0,P|382:211|413:234,1,93.5,2|0,0:0|0:0,0:0:0:0: -481,292,311427,1,8,0:0:0:0: -481,292,311658,2,0,L|487:198,1,93.5,2|0,0:0|0:0,0:0:0:0: -495,106,311889,1,8,0:0:0:0: -316,222,312004,1,0,0:0:0:0: -428,371,312120,6,0,B|342:392|328:324|229:344,1,187,2|8,0:0|0:0,0:0:0:0: -157,369,312466,1,0,0:0:0:0: -61,235,312581,2,0,P|56:281|74:324,1,93.5,2|0,0:0|0:0,0:0:0:0: -214,214,312812,2,0,P|219:168|201:125,1,93.5,8|0,0:0|0:0,0:0:0:0: -90,63,313043,5,2,0:0:0:0: -146,259,313158,1,0,0:0:0:0: -288,113,313273,2,0,B|307:4,1,93.5,8|0,0:0|0:0,0:0:0:0: -129,166,313504,2,0,B|146:259,1,93.5,2|0,0:0|0:0,0:0:0:0: -178,48,313735,2,0,P|136:67|89:62,1,93.5,8|0,0:0|0:0,0:0:0:0: -357,237,313966,6,0,P|422:175|519:198,1,187,2|8,0:0|0:0,0:0:0:0: -490,283,314312,1,0,0:0:0:0: -465,372,314427,2,0,L|357:354,1,93.5,2|0,0:0|0:0,0:0:0:0: -264,221,314658,2,0,L|372:239,1,93.5,8|0,0:0|0:0,0:0:0:0: -201,356,314889,6,0,P|118:355|52:286,1,140.25,2|0,0:0|0:0,0:0:0:0: -32,263,315120,2,0,L|25:168,1,93.5,8|0,0:0|0:0,0:0:0:0: -258,36,315350,2,0,B|266:125|200:130|215:226,1,187,2|8,0:0|0:0,0:0:0:0: -262,294,315697,1,0,0:0:0:0: -353,237,315812,6,0,B|377:197|377:197|370:141,1,93.5,2|0,0:0|0:0,0:0:0:0: -262,294,316043,2,0,B|238:334|238:334|245:390,1,93.5,8|0,0:0|0:0,0:0:0:0: -372,356,316273,2,0,B|468:339,1,93.5,2|0,0:0|0:0,0:0:0:0: -213,213,316504,2,0,B|117:230,1,93.5,8|0,0:0|0:0,0:0:0:0: -36,14,316735,6,0,P|100:46|93:164,1,187,2|8,0:0|0:0,0:0:0:0: -37,357,317081,1,0,0:0:0:0: -37,357,317197,2,0,P|32:285|138:232,1,187,2|8,0:0|0:0,0:0:0:0: -334,185,317543,1,8,0:0:0:0: -334,185,317600,1,8,0:0:0:0: -334,185,317658,6,0,P|274:224|175:159,1,187,6|8,0:0|0:0,0:0:0:0: -207,84,318004,1,0,0:0:0:0: -387,119,318120,2,0,P|373:181|403:221,1,93.5,2|0,0:0|0:0,0:0:0:0: -491,311,318350,2,0,P|505:249|475:209,1,93.5,8|0,0:0|0:0,0:0:0:0: -222,356,318581,6,0,B|309:359|309:359|334:351|334:351|422:354,1,187,2|8,0:0|0:0,0:0:0:0: -491,311,318927,1,0,0:0:0:0: -304,229,319043,2,0,B|216:232|216:232|191:224|191:224|103:227,1,187,2|8,0:0|0:0,0:0:0:0: -35,184,319389,1,0,0:0:0:0: -197,0,319504,6,0,P|257:80|212:171,1,187,2|8,0:0|0:0,0:0:0:0: -231,155,319966,2,0,P|281:145|329:141,1,93.5,2|0,0:0|0:0,0:0:0:0: -501,305,320197,2,0,P|451:294|403:290,1,93.5,8|0,0:0|0:0,0:0:0:0: -152,382,320427,6,0,P|92:302|137:211,1,187,2|8,0:0|0:0,0:0:0:0: -143,136,320773,1,0,0:0:0:0: -221,242,320889,2,0,P|211:287|207:334,1,93.5,2|0,0:0|0:0,0:0:0:0: -63,159,321120,2,0,P|58:112|49:66,1,93.5,8|0,0:0|0:0,0:0:0:0: -340,49,321350,6,0,P|317:135|231:155,2,187,2|8|2,0:0|0:0|0:0,0:0:0:0: -173,47,321927,1,0,0:0:0:0: -143,136,322043,2,0,L|154:246,1,93.5,8|0,0:0|0:0,0:0:0:0: -400,384,322273,6,0,L|411:274,1,93.5,2|0,0:0|0:0,0:0:0:0: -257,173,322504,2,0,L|332:227,1,93.5,8|0,0:0|0:0,0:0:0:0: -512,154,322735,2,0,L|426:192,1,93.5,2|0,0:0|0:0,0:0:0:0: -256,352,322966,1,8,0:0:0:0: -170,310,323081,1,0,0:0:0:0: -100,373,323197,6,0,L|2:368,1,93.5,2|0,0:0|0:0,0:0:0:0: -152,229,323427,2,0,L|250:224,1,93.5,8|0,0:0|0:0,0:0:0:0: -93,294,323658,2,0,L|-5:289,1,93.5,2|0,0:0|0:0,0:0:0:0: -145,150,323888,2,0,L|243:145,1,93.5,8|0,0:0|0:0,0:0:0:0: -82,221,324120,5,2,0:0:0:0: -69,207,324177,1,2,0:0:0:0: -60,191,324235,1,2,0:0:0:0: -54,173,324293,1,2,0:0:0:0: -52,154,324350,1,10,0:0:0:0: -54,136,324408,1,2,0:0:0:0: -60,118,324466,1,10,0:0:0:0: -70,102,324523,1,10,0:0:0:0: -82,88,324581,5,2,0:0:0:0: -136,92,324638,1,2,0:0:0:0: -176,130,324696,1,10,0:0:0:0: -185,185,324754,1,2,0:0:0:0: -157,233,324811,1,10,0:0:0:0: -129,280,324870,1,10,0:0:0:0: -137,335,324927,1,10,0:0:0:0: -177,373,324985,1,10,0:0:0:0: -232,378,325043,6,0,B|320:375|320:375|344:382|344:382|418:380,1,187,6|8,0:0|0:0,0:0:0:0: -485,314,325389,1,0,0:0:0:0: -267,218,325504,2,0,B|179:215|179:215|155:222|155:222|81:220,1,187,2|8,0:0|0:0,0:0:0:0: -14,154,325850,1,0,0:0:0:0: -323,267,325966,6,0,P|341:225|331:180,1,93.5,2|0,0:0|0:0,0:0:0:0: -250,19,326197,1,8,0:0:0:0: -250,19,326427,2,0,L|240:115,1,93.5,2|0,0:0|0:0,0:0:0:0: -426,191,326658,2,0,L|435:94,1,93.5,8|0,0:0|0:0,0:0:0:0: -82,221,326889,6,0,B|159:244|180:198|267:218,1,187,2|8,0:0|0:0,0:0:0:0: -511,288,327235,1,0,0:0:0:0: -449,357,327350,2,0,B|341:346,1,93.5,2|0,0:0|0:0,0:0:0:0: -332,181,327581,2,0,B|440:192,1,93.5,8|0,0:0|0:0,0:0:0:0: -505,141,327812,5,2,0:0:0:0: -304,46,327927,1,0,0:0:0:0: -323,268,328043,2,0,P|341:229|327:170,1,93.5,8|0,0:0|0:0,0:0:0:0: -155,62,328273,2,0,P|137:101|151:160,1,93.5,2|0,0:0|0:0,0:0:0:0: -248,372,328504,2,0,B|140:383,1,93.5,8|0,0:0|0:0,0:0:0:0: -242,206,328735,6,0,B|297:201|297:201|302:204|302:204|305:200|305:200|433:189,1,187,2|8,0:0|0:0,0:0:0:0: -503,242,329081,1,0,0:0:0:0: -442,9,329197,2,0,B|423:49|423:49|434:97,1,93.5,2|0,0:0|0:0,0:0:0:0: -323,268,329427,2,0,B|341:227|341:227|330:179,1,93.5,8|0,0:0|0:0,0:0:0:0: -155,62,329658,6,0,L|171:222,1,140.25,2|0,0:0|0:0,0:0:0:0: -168,201,329889,2,0,P|123:169|75:182,1,93.5,8|0,0:0|0:0,0:0:0:0: -229,277,330120,2,0,L|322:267,1,93.5,2|0,0:0|0:0,0:0:0:0: -137,335,330350,2,0,L|43:325,1,93.5,8|0,0:0|0:0,0:0:0:0: -309,359,330581,6,0,P|346:302|414:298,1,140.25,2|0,0:0|0:0,0:0:0:0: -415,299,330812,2,0,P|405:251|426:205,1,93.5,8|0,0:0|0:0,0:0:0:0: -512,47,331043,2,0,L|502:140,1,93.5,2|0,0:0|0:0,0:0:0:0: -330,179,331273,2,0,L|339:85,1,93.5,8|0,0:0|0:0,0:0:0:0: -512,320,331504,6,0,B|450:318|452:378|380:370,1,140.25,2|0,0:0|0:0,0:0:0:0: -385,370,331735,2,0,L|291:360,1,93.5,8|0,0:0|0:0,0:0:0:0: -62,381,331966,1,2,0:0:0:0: -161,306,332081,1,8,0:0:0:0: -162,259,332138,1,8,0:0:0:0: -140,219,332196,1,8,0:0:0:0: -101,194,332254,1,8,0:0:0:0: -73,155,332312,1,8,0:0:0:0: -73,108,332370,1,8,0:0:0:0: -96,68,332427,6,0,P|152:99|289:37,1,187,6|8,0:0|0:0,0:0:0:0: -337,9,332773,1,0,0:0:0:0: -421,210,332889,2,0,B|435:170|435:170|418:119,1,93.5,2|0,0:0|0:0,0:0:0:0: -215,213,333120,2,0,B|201:253|201:253|217:303,1,93.5,8|0,0:0|0:0,0:0:0:0: -344,145,333350,6,0,B|340:81|340:81|344:76|344:76|340:73|340:73|335:-14,1,140.25,2|0,0:0|0:0,0:0:0:0: -337,9,333581,2,0,L|446:24,1,93.5,8|0,0:0|0:0,0:0:0:0: -498,196,333812,2,0,P|456:182|421:210,1,93.5,2|0,0:0|0:0,0:0:0:0: -292,360,334043,2,0,P|256:387|214:373,1,93.5,8|0,0:0|0:0,0:0:0:0: -32,201,334273,6,0,B|119:177|135:235|215:212,1,187,2|8,0:0|0:0,0:0:0:0: -214,212,334735,2,0,P|208:181|198:97,1,93.5,2|0,0:0|0:0,0:0:0:0: -306,267,334966,2,0,P|300:297|290:381,1,93.5,8|0,0:0|0:0,0:0:0:0: -72,357,335197,6,0,P|98:307|224:307,1,187,2|8,0:0|0:0,0:0:0:0: -291,359,335543,1,0,0:0:0:0: -498,196,335658,2,0,B|426:187|426:187|392:199|392:199|301:187,1,187,2|8,0:0|0:0,0:0:0:0: -221,176,336004,1,0,0:0:0:0: -10,86,336120,6,0,P|80:77|154:44,1,140.25,2|0,0:0|0:0,0:0:0:0: -143,50,336350,2,0,P|111:107|120:155,1,93.5,8|0,0:0|0:0,0:0:0:0: -277,245,336581,2,0,P|244:188|198:171,1,93.5,2|0,0:0|0:0,0:0:0:0: -41,262,336812,2,0,P|106:262|143:230,1,93.5,8|0,0:0|0:0,0:0:0:0: -223,176,337043,5,2,0:0:0:0: -221,157,337100,1,2,0:0:0:0: -219,138,337158,1,10,0:0:0:0: -217,120,337216,1,2,0:0:0:0: -215,101,337273,1,2,0:0:0:0: -213,82,337331,1,2,0:0:0:0: -211,64,337389,1,2,0:0:0:0: -209,45,337446,1,2,0:0:0:0: -208,27,337504,5,2,0:0:0:0: -258,48,337561,1,2,0:0:0:0: -283,97,337619,1,2,0:0:0:0: -270,151,337677,1,2,0:0:0:0: -227,184,337734,1,10,0:0:0:0: -183,217,337793,1,10,0:0:0:0: -170,270,337851,1,10,0:0:0:0: -195,319,337909,1,10,0:0:0:0: -246,340,337966,6,0,B|313:336|313:336|346:346|346:346|438:337,1,187,6|8,0:0|0:0,0:0:0:0: -501,276,338312,1,0,0:0:0:0: -266,215,338427,2,0,B|198:211|198:211|165:221|165:221|73:212,1,187,2|8,0:0|0:0,0:0:0:0: -11,151,338773,1,0,0:0:0:0: -252,34,338889,6,0,B|233:78|233:78|248:121,1,93.5,2|0,0:0|0:0,0:0:0:0: -425,190,339120,2,0,B|444:146|444:146|428:102,1,93.5,8|0,0:0|0:0,0:0:0:0: -336,155,339350,5,10,0:0:0:0: -336,173,339407,1,8,0:0:0:0: -337,192,339465,1,8,0:0:0:0: -338,211,339523,1,8,0:0:0:0: -338,229,339580,1,8,0:0:0:0: -339,248,339638,1,8,0:0:0:0: -340,267,339696,1,8,0:0:0:0: -340,285,339753,1,8,0:0:0:0: -340,303,339812,6,0,P|426:327|487:262,1,187,6|8,0:0|0:0,0:0:0:0: -425,190,340158,1,0,0:0:0:0: -246,340,340273,2,0,P|249:296|209:250,1,93.5,2|0,0:0|0:0,0:0:0:0: -56,129,340504,2,0,P|53:173|93:219,1,93.5,8|0,0:0|0:0,0:0:0:0: -306,198,340735,6,0,B|310:146|310:146|315:138|315:138|311:130|311:130|323:-1,1,187,2|8,0:0|0:0,0:0:0:0: -237,53,341081,1,0,0:0:0:0: -340,267,341197,2,0,P|368:263|441:256,1,93.5,2|0,0:0|0:0,0:0:0:0: -246,340,341427,2,0,P|217:336|145:329,1,93.5,8|0,0:0|0:0,0:0:0:0: -13,157,341658,6,0,B|101:149|101:221|190:213,1,187,2|8,0:0|0:0,0:0:0:0: -241,137,342004,1,0,0:0:0:0: -42,237,342120,2,0,P|35:289|60:336,1,93.5,2|0,0:0|0:0,0:0:0:0: -162,129,342350,2,0,P|169:77|144:30,1,93.5,8|0,0:0|0:0,0:0:0:0: -153,329,342581,6,0,B|223:321|223:321|269:337|269:337|336:331,1,187,2|8,0:0|0:0,0:0:0:0: -417,379,342927,1,0,0:0:0:0: -306,198,343043,2,0,B|298:113|370:113|362:25,1,187,2|8,0:0|0:0,0:0:0:0: -489,112,343389,1,8,0:0:0:0: -489,112,343447,1,8,0:0:0:0: -489,112,343504,6,0,P|504:193|417:256,1,187,2|8,0:0|0:0,0:0:0:0: -248,341,343850,2,0,P|232:259|319:196,1,187,2|2,0:0|0:0,0:0:0:0: -508,361,344197,2,0,L|416:378,1,93.5,8|0,0:0|0:0,0:0:0:0: -401,373,344370,1,0,0:0:0:0: -386,367,344427,6,0,L|192:354,1,187,2|8,0:0|0:0,0:0:0:0: -107,375,344773,1,0,0:0:0:0: -122,199,344889,2,0,P|144:240|139:286,1,93.5,2|0,0:0|0:0,0:0:0:0: -13,157,345120,2,0,P|7:111|29:70,1,93.5,8|0,0:0|0:0,0:0:0:0: -200,35,345350,6,0,L|302:46,1,93.5,2|0,0:0|0:0,0:0:0:0: -396,207,345581,2,0,L|303:196,1,93.5,8|0,0:0|0:0,0:0:0:0: -384,23,345812,2,0,L|373:115,1,93.5,2|0,0:0|0:0,0:0:0:0: -212,219,346043,2,0,L|223:117,1,93.5,8|0,0:0|0:0,0:0:0:0: -512,279,346273,6,0,P|483:282|372:294,1,140.25,2|0,0:0|0:0,0:0:0:0: -349,363,346504,6,0,P|328:360|251:351,1,98.1749970039369,8|0,0:0|0:0,0:0:0:0: -212,293,346735,6,0,P|188:295|74:307,1,126.224996147919,2|0,0:0|0:0,0:0:0:0: -27,257,346966,6,0,P|14:222|23:192,1,56.0999982879639,8|0,0:0|0:0,0:0:0:0: -133,13,347197,6,0,L|122:205,1,187,6|8,0:0|0:0,0:0:0:0: -251,351,347543,1,0,0:0:0:0: -311,280,347658,2,0,P|331:238|316:186,1,93.5,2|0,0:0|0:0,0:0:0:0: -232,39,347889,2,0,P|212:80|221:125,1,93.5,8|0,0:0|0:0,0:0:0:0: -466,107,348120,6,0,P|403:112|340:117,1,93.5,2|0,0:0|0:0,0:0:0:0: -228,202,348350,2,0,P|290:196|353:191,1,93.5,8|0,0:0|0:0,0:0:0:0: -489,256,348581,2,0,P|426:261|363:266,1,93.5,2|0,0:0|0:0,0:0:0:0: -251,351,348811,2,0,P|313:345|376:340,1,93.5,8|0,0:0|0:0,0:0:0:0: -360,351,348985,1,0,0:0:0:0: -375,359,349043,6,0,P|426:304|407:190,1,187,2|8,0:0|0:0,0:0:0:0: -372,115,349389,1,0,0:0:0:0: -496,18,349504,2,0,L|488:111,1,93.5,2|0,0:0|0:0,0:0:0:0: -328,286,349735,2,0,L|320:192,1,93.5,8|0,0:0|0:0,0:0:0:0: -125,50,349966,6,0,P|170:97|307:65,1,187,2|8,0:0|0:0,0:0:0:0: -356,28,350312,1,0,0:0:0:0: -227,184,350427,2,0,B|262:280|198:280|230:384,1,187,2|8,0:0|0:0,0:0:0:0: -134,342,350773,1,0,0:0:0:0: -10,277,350889,6,0,P|7:223|-1:72,1,187,2|8,0:0|0:0,0:0:0:0: -51,13,351235,1,0,0:0:0:0: -215,180,351350,2,0,P|218:234|226:385,1,187,2|8,0:0|0:0,0:0:0:0: -502,277,351812,6,0,P|505:223|513:72,1,187,2|8,0:0|0:0,0:0:0:0: -461,13,352158,1,0,0:0:0:0: -372,115,352273,2,0,P|356:141|366:217,1,93.5,2|0,0:0|0:0,0:0:0:0: -440,349,352504,2,0,P|425:322|353:292,1,93.5,8|0,0:0|0:0,0:0:0:0: -99,278,352735,6,0,L|285:258,1,187,2|8,0:0|0:0,0:0:0:0: -371,292,353081,1,0,0:0:0:0: -450,211,353197,2,0,L|357:201,1,93.5,2|0,0:0|0:0,0:0:0:0: -191,152,353427,2,0,L|283:142,1,93.5,8|0,0:0|0:0,0:0:0:0: -393,31,353658,6,0,B|365:69|365:69|372:116,1,93.5,2|0,0:0|0:0,0:0:0:0: -489,256,353889,2,0,B|517:218|517:218|509:170,1,93.5,8|0,0:0|0:0,0:0:0:0: -357,201,354120,2,0,P|366:239|372:311,1,93.5,2|0,0:0|0:0,0:0:0:0: -498,96,354350,2,0,P|502:49|512:3,1,93.5,8|0,0:0|0:0,0:0:0:0: -512,333,354581,6,0,B|427:318|423:388|325:362,1,187,2|8,0:0|0:0,0:0:0:0: -284,258,354927,1,0,0:0:0:0: -228,334,355043,2,0,B|32:324,1,187,2|8,0:0|0:0,0:0:0:0: -5,239,355389,1,0,0:0:0:0: -199,79,355504,5,10,0:0:0:0: -110,108,355620,1,8,0:0:0:0: -208,112,355735,5,8,0:0:0:0: -124,116,355851,1,8,0:0:0:0: -211,141,355966,5,10,0:0:0:0: -139,124,356082,1,8,0:0:0:0: -210,164,356197,5,8,0:0:0:0: -153,133,356313,1,8,0:0:0:0: -90,211,356427,6,0,L|292:193,1,187,6|8,0:0|0:0,0:0:0:0: -329,116,356773,1,0,0:0:0:0: -450,258,356889,2,0,L|356:266,1,93.5,2|0,0:0|0:0,0:0:0:0: -414,101,357120,2,0,L|507:92,1,93.5,8|0,0:0|0:0,0:0:0:0: -304,355,357350,6,0,P|252:281|275:194,1,187,2|8,0:0|0:0,0:0:0:0: -329,116,357697,1,0,0:0:0:0: -110,47,357812,5,2,0:0:0:0: -147,134,357927,1,8,0:0:0:0: -93,210,358043,1,10,0:0:0:0: -130,297,358158,1,8,0:0:0:0: -304,355,358273,6,0,L|102:337,1,187,2|8,0:0|0:0,0:0:0:0: -30,374,358620,1,0,0:0:0:0: -0,202,358735,2,0,L|93:210,1,93.5,2|0,0:0|0:0,0:0:0:0: -218,58,358966,2,0,L|124:49,1,93.5,8|0,0:0|0:0,0:0:0:0: -265,250,359197,6,0,B|350:227|364:281|472:252,2,187,2|8|2,0:0|0:0|0:0,0:0:0:0: -202,180,359773,1,0,0:0:0:0: -280,128,359889,1,8,0:0:0:0: -218,58,360004,1,0,0:0:0:0: -407,0,360120,6,0,L|387:186,1,187,2|8,0:0|0:0,0:0:0:0: -449,257,360466,1,0,0:0:0:0: -304,355,360581,2,0,P|310:296|359:272,1,93.5,2|0,0:0|0:0,0:0:0:0: -479,178,360812,2,0,P|473:237|423:260,1,93.5,8|0,0:0|0:0,0:0:0:0: -280,128,361043,6,0,L|274:28,1,93.5,2|0,0:0|0:0,0:0:0:0: -193,261,361273,2,0,L|198:354,1,93.5,8|0,0:0|0:0,0:0:0:0: -36,373,361504,5,8,0:0:0:0: -74,286,361620,1,2,0:0:0:0: -8,219,361735,1,2,0:0:0:0: -46,134,361851,1,8,0:0:0:0: -193,261,361966,6,0,P|274:272|338:188,1,187,2|8,0:0|0:0,0:0:0:0: -280,128,362312,1,0,0:0:0:0: -136,99,362427,2,0,P|123:154|141:192,1,93.5,2|0,0:0|0:0,0:0:0:0: -304,355,362658,2,0,P|317:300|298:261,1,93.5,8|0,0:0|0:0,0:0:0:0: -291,256,362831,1,0,0:0:0:0: -278,244,362889,6,0,L|485:247,1,187,2|8,0:0|0:0,0:0:0:0: -202,180,363235,2,0,L|-5:177,1,187,2|2,0:0|0:0,0:0:0:0: -280,128,363581,2,0,L|383:126,1,93.5,8|0,0:0|0:0,0:0:0:0: -202,180,363812,6,0,B|158:268|240:272|190:359,2,187,2|8|2,0:0|0:0|0:0,0:0:0:0: -280,128,364389,1,0,0:0:0:0: -136,99,364504,2,0,P|123:44|141:5,1,93.5,8|0,0:0|0:0,0:0:0:0: -278,244,364735,6,0,P|291:299|272:337,1,93.5,2|0,0:0|0:0,0:0:0:0: -36,304,364966,2,0,B|50:297|50:297|51:307|51:307|59:297|59:297|60:306|60:306|68:296|68:296|69:305|69:305|77:295|77:295|78:305|78:305|85:294|85:294|86:304|86:304|94:294|94:294|95:303|95:303|103:293|103:293|104:302|104:302|112:292|112:292|113:302|113:302|121:291|121:291|121:301|121:301|129:290|129:290|130:300|130:300|138:290|138:290|139:299|139:299|147:289|147:289|148:299|148:299|156:288|156:288|156:298|156:298|164:287|164:287|165:297|165:297|173:287|173:287|174:296|174:296|182:286|182:286|183:295|183:295|198:289,1,374,8|0,0:0|0:0,0:0:0:0: -277,331,365543,1,0,0:0:0:0: -437,330,365658,6,0,P|467:262|450:218,1,93.5,2|0,0:0|0:0,0:0:0:0: -307,44,365889,2,0,P|277:112|294:156,1,93.5,8|0,0:0|0:0,0:0:0:0: -374,266,366120,1,2,0:0:0:0: -500,153,366235,2,0,L|516:35,2,93.5,0|8|0,0:0|0:0|0:0,0:0:0:0: -374,266,366581,6,0,L|386:358,1,93.5,2|0,0:0|0:0,0:0:0:0: -414,164,366812,2,0,P|322:168|265:263,1,187,8|2,0:0|0:0,0:0:0:0: -188,359,367158,1,0,0:0:0:0: -117,297,367273,2,0,P|115:271|108:189,1,93.5,8|0,0:0|0:0,0:0:0:0: -15,83,367504,6,0,B|192:130|204:-6|413:48,1,374,2|2,0:0|0:0,0:0:0:0: -468,13,368081,1,0,0:0:0:0: -445,104,368197,2,0,P|448:150|452:197,1,93.5,8|0,0:0|0:0,0:0:0:0: -356,295,368427,6,0,P|443:278|500:348,1,187,2|8,0:0|0:0,0:0:0:0: -284,353,368773,2,0,P|196:368|140:298,1,187,2|2,0:0|0:0,0:0:0:0: -99,213,369120,2,0,P|145:216|192:220,1,93.5,8|0,0:0|0:0,0:0:0:0: -378,41,369350,6,0,B|291:17|285:85|196:62,1,187,2|8,0:0|0:0,0:0:0:0: -111,24,369697,1,0,0:0:0:0: -17,161,369812,2,0,P|11:115|32:74,1,93.5,2|0,0:0|0:0,0:0:0:0: -152,211,370043,2,0,P|158:257|138:299,1,93.5,8|0,0:0|0:0,0:0:0:0: -5,384,370273,5,2,0:0:0:0: -58,268,370389,1,2,0:0:0:0: -130,372,370504,1,8,0:0:0:0: -183,256,370620,1,8,0:0:0:0: -187,237,370677,1,8,0:0:0:0: -191,219,370735,1,10,0:0:0:0: -196,201,370793,1,8,0:0:0:0: -200,183,370850,1,8,0:0:0:0: -205,165,370908,1,8,0:0:0:0: -209,146,370966,1,10,0:0:0:0: -111,24,371081,1,2,0:0:0:0: -197,62,371197,6,0,L|387:49,1,187,6|8,0:0|0:0,0:0:0:0: -315,322,371658,2,0,L|125:335,1,187,2|8,0:0|0:0,0:0:0:0: -457,193,372120,2,0,L|444:379,1,187,2|8,0:0|0:0,0:0:0:0: -55,191,372581,2,0,L|63:67,1,93.5,2|0,0:0|0:0,0:0:0:0: -68,4,372812,1,8,0:0:0:0: -152,46,372927,1,0,0:0:0:0: -186,263,373043,6,0,L|-4:276,1,187,6|8,0:0|0:0,0:0:0:0: -326,121,373504,2,0,L|516:108,1,187,2|8,0:0|0:0,0:0:0:0: -491,199,373850,1,0,0:0:0:0: -468,288,373966,2,0,L|282:301,1,187,2|8,0:0|0:0,0:0:0:0: -203,5,374427,2,0,L|328:-3,1,93.5,2|0,0:0|0:0,0:0:0:0: -389,13,374658,1,8,0:0:0:0: -329,84,374773,1,8,0:0:0:0: -327,102,374830,1,8,0:0:0:0: -326,121,374889,6,0,L|516:108,1,187,6|8,0:0|0:0,0:0:0:0: -227,377,375350,1,2,0:0:0:0: -138,348,375466,1,8,0:0:0:0: -138,254,375581,1,8,0:0:0:0: -227,225,375697,1,2,0:0:0:0: -282,301,375812,2,0,L|468:288,1,187,2|8,0:0|0:0,0:0:0:0: -230,83,376273,2,0,L|44:96,1,187,2|8,0:0|0:0,0:0:0:0: -11,185,376620,1,0,0:0:0:0: -303,212,376735,6,0,L|316:26,1,187,6|8,0:0|0:0,0:0:0:0: -43,96,377197,1,2,0:0:0:0: -72,7,377313,1,8,0:0:0:0: -166,7,377428,1,8,0:0:0:0: -195,96,377544,1,8,0:0:0:0: -119,151,377658,2,0,L|132:337,1,187,2|8,0:0|0:0,0:0:0:0: -439,382,378120,2,0,L|426:196,1,187,2|8,0:0|0:0,0:0:0:0: -348,10,378581,6,0,B|414:65|393:172|309:195|241:175|241:175|174:156|90:178|69:285|132:337,1,561,6|8,0:0|0:0,0:0:0:0: -444,354,379504,2,0,P|501:284|473:199,1,187,2|8,0:0|0:0,0:0:0:0: -348,10,379850,2,0,P|291:80|319:165,1,187,2|2,0:0|0:0,0:0:0:0: -408,139,380197,2,0,L|419:46,1,93.5,8|0,0:0|0:0,0:0:0:0: -396,231,380427,5,2,0:0:0:0: -396,231,380543,2,0,P|322:217|256:317,1,187,2|2,0:0|0:0,0:0:0:0: -324,358,380889,2,0,L|417:347,1,93.5,2|0,0:0|0:0,0:0:0:0: -255,294,381120,2,0,L|162:283,1,93.5,8|0,0:0|0:0,0:0:0:0: -32,66,381350,5,2,0:0:0:0: -32,66,381466,2,0,P|106:52|172:152,1,187,2|2,0:0|0:0,0:0:0:0: -104,193,381812,2,0,L|11:182,1,93.5,2|0,0:0|0:0,0:0:0:0: -173,129,382043,2,0,L|266:118,1,93.5,8|0,0:0|0:0,0:0:0:0: -490,320,382273,6,2,L|408:303,3,46.75,2|2|10|2,0:0|0:0|0:0|0:0,0:0:0:0: -427,332,382504,2,2,L|345:315,3,46.75,2|2|10|2,0:0|0:0|0:0|0:0,0:0:0:0: -349,341,382735,5,10,0:0:0:0: -364,312,382792,1,2,0:0:0:0: -365,280,382850,1,10,0:0:0:0: -351,251,382908,1,2,0:0:0:0: -325,232,382966,1,10,0:0:0:0: -293,227,383023,1,2,0:0:0:0: -267,208,383080,1,10,0:0:0:0: -253,179,383138,1,2,0:0:0:0: -254,147,383197,5,10,0:0:0:0: -290,174,383254,1,2,0:0:0:0: -303,218,383312,1,10,0:0:0:0: -288,262,383370,1,2,0:0:0:0: -250,287,383427,1,10,0:0:0:0: -204,280,383484,1,2,0:0:0:0: -171,248,383542,1,10,0:0:0:0: -163,203,383600,1,2,0:0:0:0: -182,161,383657,5,10,0:0:0:0: -184,102,383715,1,2,0:0:0:0: -144,58,383773,1,10,0:0:0:0: -82,54,383831,1,2,0:0:0:0: -35,93,383889,1,10,0:0:0:0: -30,153,383947,1,2,0:0:0:0: -58,205,384004,1,10,0:0:0:0: -57,266,384062,1,2,0:0:0:0: -18,313,384120,5,14,0:0:0:0: diff --git a/osu.Game.Rulesets.Osu/Resources/Testing/Beatmaps/basic-expected-conversion.json b/osu.Game.Rulesets.Osu/Resources/Testing/Beatmaps/basic-expected-conversion.json new file mode 100644 index 0000000000..a9432772c5 --- /dev/null +++ b/osu.Game.Rulesets.Osu/Resources/Testing/Beatmaps/basic-expected-conversion.json @@ -0,0 +1 @@ +{"Mappings":[{"StartTime":500.0,"Objects":[{"StartTime":500.0,"EndTime":2500.0,"StartX":96.0,"StartY":192.0,"EndX":96.0,"EndY":192.0}]},{"StartTime":3000.0,"Objects":[{"StartTime":3000.0,"EndTime":4000.0,"StartX":256.0,"StartY":192.0,"EndX":256.0,"EndY":192.0}]},{"StartTime":4500.0,"Objects":[{"StartTime":4500.0,"EndTime":5500.0,"StartX":256.0,"StartY":192.0,"EndX":256.0,"EndY":192.0}]},{"StartTime":6000.0,"Objects":[{"StartTime":6000.0,"EndTime":6500.0,"StartX":256.0,"StartY":192.0,"EndX":256.0,"EndY":192.0}]},{"StartTime":7000.0,"Objects":[{"StartTime":7000.0,"EndTime":8000.0,"StartX":256.0,"StartY":128.0,"EndX":256.0,"EndY":128.0}]},{"StartTime":8500.0,"Objects":[{"StartTime":8500.0,"EndTime":10999.0,"StartX":32.0,"StartY":192.0,"EndX":508.166229,"EndY":153.299271}]},{"StartTime":11500.0,"Objects":[{"StartTime":11500.0,"EndTime":12000.0,"StartX":256.0,"StartY":192.0,"EndX":256.0,"EndY":192.0}]},{"StartTime":12500.0,"Objects":[{"StartTime":12500.0,"EndTime":16500.0,"StartX":512.0,"StartY":320.0,"EndX":291.1977,"EndY":40.799427}]},{"StartTime":17000.0,"Objects":[{"StartTime":17000.0,"EndTime":18000.0,"StartX":256.0,"StartY":256.0,"EndX":256.0,"EndY":256.0}]},{"StartTime":18500.0,"Objects":[{"StartTime":18500.0,"EndTime":19450.0,"StartX":256.0,"StartY":192.0,"EndX":256.0,"EndY":192.0}]},{"StartTime":19875.0,"Objects":[{"StartTime":19875.0,"EndTime":23874.0,"StartX":216.0,"StartY":231.0,"EndX":408.720825,"EndY":339.810455}]}]} \ No newline at end of file diff --git a/osu.Game.Rulesets.Osu/Resources/Testing/Beatmaps/basic.osu b/osu.Game.Rulesets.Osu/Resources/Testing/Beatmaps/basic.osu new file mode 100644 index 0000000000..d58bb28ace --- /dev/null +++ b/osu.Game.Rulesets.Osu/Resources/Testing/Beatmaps/basic.osu @@ -0,0 +1,66 @@ +osu file format v14 + +[General] +AudioFilename: virtual +AudioLeadIn: 0 +PreviewTime: -1 +Countdown: 1 +SampleSet: Soft +StackLeniency: 0.7 +Mode: 0 +LetterboxInBreaks: 0 +WidescreenStoryboard: 1 + +[Editor] +DistanceSpacing: 1.5 +BeatDivisor: 4 +GridSize: 32 +TimelineZoom: 1 + +[Metadata] +Title:Basic +TitleUnicode:Test Suite +Artist:peppy +ArtistUnicode:peppy +Creator:peppy +Version:[Basic] +Source: +Tags: +BeatmapID:826308 +BeatmapSetID:-1 + +[Difficulty] +HPDrainRate:6 +CircleSize:4 +OverallDifficulty:7 +ApproachRate:8.3 +SliderMultiplier:1.6 +SliderTickRate:1 + +[Events] +//Background and Video events +//Break Periods +//Storyboard Layer 0 (Background) +//Storyboard Layer 1 (Fail) +//Storyboard Layer 2 (Pass) +//Storyboard Layer 3 (Foreground) +//Storyboard Sound Samples + +[TimingPoints] +500,500,4,2,1,50,1,0 +13426,-100,4,3,1,45,0,0 +14884,-100,4,2,1,50,0,0 + + +[HitObjects] +96,192,500,6,0,L|416:192,2,320 +256,192,3000,12,0,4000,0:0:0:0: +256,192,4500,12,0,5500,0:0:0:0: +256,192,6000,12,0,6500,0:0:0:0: +256,128,7000,6,0,L|352:128,4,80 +32,192,8500,6,0,B|32:384|256:384|256:192|256:192|256:0|512:0|512:192,1,800 +256,192,11500,12,0,12000,0:0:0:0: +512,320,12500,6,0,B|0:256|0:256|512:96|512:96|256:32,1,1280 +256,256,17000,6,0,L|160:256,4,80 +256,192,18500,12,0,19450,0:0:0:0: +216,231,19875,6,0,B|216:135|280:135|344:135|344:199|344:263|248:327|248:327|120:327|120:327|56:39|408:39|408:39|472:150|408:342,1,1280 diff --git a/osu.Game.Rulesets.Osu/Tests/OsuBeatmapConversionTest.cs b/osu.Game.Rulesets.Osu/Tests/OsuBeatmapConversionTest.cs index cac0c83e96..8f7a486569 100644 --- a/osu.Game.Rulesets.Osu/Tests/OsuBeatmapConversionTest.cs +++ b/osu.Game.Rulesets.Osu/Tests/OsuBeatmapConversionTest.cs @@ -19,10 +19,10 @@ namespace osu.Game.Rulesets.Osu.Tests { protected override string ResourceAssembly => "osu.Game.Rulesets.Osu"; - [TestCase(875945), Ignore("See: https://github.com/ppy/osu/issues/2151")] - public new void Test(int beatmapId) + [TestCase("basic")] + public new void Test(string name) { - base.Test(beatmapId); + base.Test(name); } protected override IEnumerable CreateConvertValue(HitObject hitObject) diff --git a/osu.Game.Rulesets.Osu/osu.Game.Rulesets.Osu.csproj b/osu.Game.Rulesets.Osu/osu.Game.Rulesets.Osu.csproj index fc3e3fa72f..01dda307bc 100644 --- a/osu.Game.Rulesets.Osu/osu.Game.Rulesets.Osu.csproj +++ b/osu.Game.Rulesets.Osu/osu.Game.Rulesets.Osu.csproj @@ -174,8 +174,8 @@ - - + + diff --git a/osu.Game.Rulesets.Taiko/Resources/Testing/Beatmaps/875945-expected-conversion.json b/osu.Game.Rulesets.Taiko/Resources/Testing/Beatmaps/875945-expected-conversion.json deleted file mode 100644 index 165faaac17..0000000000 --- a/osu.Game.Rulesets.Taiko/Resources/Testing/Beatmaps/875945-expected-conversion.json +++ /dev/null @@ -1 +0,0 @@ -{"Mappings":[{"StartTime":6590.0,"Objects":[{"StartTime":6590.0,"EndTime":8320.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":8436.0,"Objects":[{"StartTime":8436.0,"EndTime":10166.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":10282.0,"Objects":[{"StartTime":10282.0,"EndTime":12012.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":12128.0,"Objects":[{"StartTime":12128.0,"EndTime":13858.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":13974.0,"Objects":[{"StartTime":13974.0,"EndTime":15704.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":15820.0,"Objects":[{"StartTime":15820.0,"EndTime":17550.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":17666.0,"Objects":[{"StartTime":17666.0,"EndTime":19512.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":19628.0,"Objects":[{"StartTime":19628.0,"EndTime":21128.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":false,"IsSwell":true,"IsStrong":false}]},{"StartTime":21359.0,"Objects":[{"StartTime":21359.0,"EndTime":21359.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":21820.0,"EndTime":21820.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":22282.0,"Objects":[{"StartTime":22282.0,"EndTime":22282.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":22743.0,"EndTime":22743.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":23205.0,"Objects":[{"StartTime":23205.0,"EndTime":23205.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":23666.0,"EndTime":23666.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":24128.0,"Objects":[{"StartTime":24128.0,"EndTime":24128.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":24589.0,"EndTime":24589.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":25051.0,"Objects":[{"StartTime":25051.0,"EndTime":26666.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":26897.0,"Objects":[{"StartTime":26897.0,"EndTime":28281.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":28743.0,"Objects":[{"StartTime":28743.0,"EndTime":28743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":29204.0,"EndTime":29204.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":29666.0,"Objects":[{"StartTime":29666.0,"EndTime":29666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":30127.0,"EndTime":30127.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":30589.0,"Objects":[{"StartTime":30589.0,"EndTime":30589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":31050.0,"EndTime":31050.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":31513.0,"Objects":[{"StartTime":31513.0,"EndTime":31513.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":31974.0,"EndTime":31974.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":32436.0,"Objects":[{"StartTime":32436.0,"EndTime":34282.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":35205.0,"Objects":[{"StartTime":35205.0,"EndTime":35205.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":35666.0,"EndTime":35666.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":36128.0,"Objects":[{"StartTime":36128.0,"EndTime":36128.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":36474.0,"EndTime":36474.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":36590.0,"Objects":[{"StartTime":36590.0,"EndTime":39359.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":39820.0,"Objects":[{"StartTime":39820.0,"EndTime":39820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":40281.0,"EndTime":40281.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":40743.0,"Objects":[{"StartTime":40743.0,"EndTime":40743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":41204.0,"EndTime":41204.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":41666.0,"Objects":[{"StartTime":41666.0,"EndTime":42589.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":43051.0,"Objects":[{"StartTime":43051.0,"EndTime":43051.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":43281.0,"EndTime":43281.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":43513.0,"Objects":[{"StartTime":43513.0,"EndTime":43513.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true}]},{"StartTime":43628.0,"Objects":[{"StartTime":43628.0,"EndTime":49051.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":false,"IsSwell":true,"IsStrong":false}]},{"StartTime":56435.0,"Objects":[{"StartTime":56435.0,"EndTime":56435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":56665.0,"EndTime":56665.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":56781.0,"Objects":[{"StartTime":56781.0,"EndTime":56781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":56897.0,"Objects":[{"StartTime":56897.0,"EndTime":56897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":57012.0,"EndTime":57012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":57127.0,"Objects":[{"StartTime":57127.0,"EndTime":57127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":57242.0,"EndTime":57242.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":57358.0,"Objects":[{"StartTime":57358.0,"EndTime":57358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":57473.0,"EndTime":57473.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":57589.0,"Objects":[{"StartTime":57589.0,"EndTime":57589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":57704.0,"EndTime":57704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":57820.0,"Objects":[{"StartTime":57820.0,"EndTime":57820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":57935.0,"Objects":[{"StartTime":57935.0,"EndTime":57935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":58051.0,"Objects":[{"StartTime":58051.0,"EndTime":58051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":58166.0,"Objects":[{"StartTime":58166.0,"EndTime":58166.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":58224.0,"Objects":[{"StartTime":58224.0,"EndTime":58224.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":58281.0,"Objects":[{"StartTime":58281.0,"EndTime":58281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":58511.0,"EndTime":58511.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":58627.0,"Objects":[{"StartTime":58627.0,"EndTime":58627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":58685.0,"Objects":[{"StartTime":58685.0,"EndTime":58685.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":58743.0,"Objects":[{"StartTime":58743.0,"EndTime":58743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":58858.0,"EndTime":58858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":58974.0,"Objects":[{"StartTime":58974.0,"EndTime":58974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":59089.0,"EndTime":59089.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":59204.0,"Objects":[{"StartTime":59204.0,"EndTime":59204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":59319.0,"EndTime":59319.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":59435.0,"Objects":[{"StartTime":59435.0,"EndTime":59435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":59550.0,"EndTime":59550.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":59666.0,"Objects":[{"StartTime":59666.0,"EndTime":59666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":59781.0,"EndTime":59781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":59897.0,"Objects":[{"StartTime":59897.0,"EndTime":59897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":60012.0,"EndTime":60012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":60127.0,"Objects":[{"StartTime":60127.0,"EndTime":60127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":60357.0,"EndTime":60357.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":60474.0,"Objects":[{"StartTime":60474.0,"EndTime":60474.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":60704.0,"EndTime":60704.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":60820.0,"Objects":[{"StartTime":60820.0,"EndTime":60820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":60935.0,"EndTime":60935.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":61051.0,"Objects":[{"StartTime":61051.0,"EndTime":61051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":61166.0,"EndTime":61166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":61281.0,"Objects":[{"StartTime":61281.0,"EndTime":61281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":61396.0,"EndTime":61396.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":61512.0,"Objects":[{"StartTime":61512.0,"EndTime":61512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":61627.0,"EndTime":61627.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":61743.0,"Objects":[{"StartTime":61743.0,"EndTime":61743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":61858.0,"EndTime":61858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":61916.0,"Objects":[{"StartTime":61916.0,"EndTime":61916.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":61974.0,"Objects":[{"StartTime":61974.0,"EndTime":61974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":62204.0,"EndTime":62204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":62320.0,"Objects":[{"StartTime":62320.0,"EndTime":62320.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":62550.0,"EndTime":62550.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":62666.0,"Objects":[{"StartTime":62666.0,"EndTime":63127.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":63358.0,"Objects":[{"StartTime":63358.0,"EndTime":63358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":63474.0,"Objects":[{"StartTime":63474.0,"EndTime":63474.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":63589.0,"Objects":[{"StartTime":63589.0,"EndTime":63589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":63705.0,"Objects":[{"StartTime":63705.0,"EndTime":63705.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":63820.0,"Objects":[{"StartTime":63820.0,"EndTime":63820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":63877.0,"Objects":[{"StartTime":63877.0,"EndTime":63877.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":63935.0,"Objects":[{"StartTime":63935.0,"EndTime":63935.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":63993.0,"Objects":[{"StartTime":63993.0,"EndTime":63993.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":64051.0,"Objects":[{"StartTime":64051.0,"EndTime":64051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":64166.0,"EndTime":64166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":64281.0,"Objects":[{"StartTime":64281.0,"EndTime":64281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":64338.0,"Objects":[{"StartTime":64338.0,"EndTime":64338.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":64396.0,"Objects":[{"StartTime":64396.0,"EndTime":64396.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":64454.0,"Objects":[{"StartTime":64454.0,"EndTime":64454.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":64512.0,"Objects":[{"StartTime":64512.0,"EndTime":64512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":64627.0,"EndTime":64627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":64743.0,"Objects":[{"StartTime":64743.0,"EndTime":64743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":64800.0,"Objects":[{"StartTime":64800.0,"EndTime":64800.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":64858.0,"Objects":[{"StartTime":64858.0,"EndTime":64858.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":64916.0,"Objects":[{"StartTime":64916.0,"EndTime":64916.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":64974.0,"Objects":[{"StartTime":64974.0,"EndTime":64974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":65089.0,"EndTime":65089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":65205.0,"Objects":[{"StartTime":65205.0,"EndTime":65205.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":65262.0,"Objects":[{"StartTime":65262.0,"EndTime":65262.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":65320.0,"Objects":[{"StartTime":65320.0,"EndTime":65320.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":65378.0,"Objects":[{"StartTime":65378.0,"EndTime":65378.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":65436.0,"Objects":[{"StartTime":65436.0,"EndTime":65436.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":65551.0,"EndTime":65551.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":65666.0,"Objects":[{"StartTime":65666.0,"EndTime":65666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":65723.0,"Objects":[{"StartTime":65723.0,"EndTime":65723.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":65781.0,"Objects":[{"StartTime":65781.0,"EndTime":65781.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":65839.0,"Objects":[{"StartTime":65839.0,"EndTime":65839.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":65897.0,"Objects":[{"StartTime":65897.0,"EndTime":65897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":66012.0,"EndTime":66012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":66127.0,"Objects":[{"StartTime":66127.0,"EndTime":66127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":66184.0,"Objects":[{"StartTime":66184.0,"EndTime":66184.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":66242.0,"Objects":[{"StartTime":66242.0,"EndTime":66242.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":66300.0,"Objects":[{"StartTime":66300.0,"EndTime":66300.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":66358.0,"Objects":[{"StartTime":66358.0,"EndTime":66358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":66473.0,"EndTime":66473.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":66589.0,"Objects":[{"StartTime":66589.0,"EndTime":66589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":66704.0,"EndTime":66704.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":66820.0,"Objects":[{"StartTime":66820.0,"EndTime":66820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":66935.0,"EndTime":66935.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":67051.0,"Objects":[{"StartTime":67051.0,"EndTime":67051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":67281.0,"EndTime":67281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":67397.0,"Objects":[{"StartTime":67397.0,"EndTime":67397.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":67512.0,"Objects":[{"StartTime":67512.0,"EndTime":67512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":67742.0,"EndTime":67742.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":67858.0,"Objects":[{"StartTime":67858.0,"EndTime":67858.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":68088.0,"EndTime":68088.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":68204.0,"Objects":[{"StartTime":68204.0,"EndTime":68204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":68319.0,"EndTime":68319.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":68435.0,"Objects":[{"StartTime":68435.0,"EndTime":68435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":68550.0,"EndTime":68550.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":68666.0,"Objects":[{"StartTime":68666.0,"EndTime":68666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":68781.0,"EndTime":68781.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":68897.0,"Objects":[{"StartTime":68897.0,"EndTime":68897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":69012.0,"Objects":[{"StartTime":69012.0,"EndTime":69012.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":69127.0,"Objects":[{"StartTime":69127.0,"EndTime":69127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":69242.0,"Objects":[{"StartTime":69242.0,"EndTime":69242.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":69358.0,"Objects":[{"StartTime":69358.0,"EndTime":69358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":69473.0,"EndTime":69473.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":69589.0,"Objects":[{"StartTime":69589.0,"EndTime":69589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":69704.0,"EndTime":69704.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":69820.0,"Objects":[{"StartTime":69820.0,"EndTime":69820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":69935.0,"EndTime":69935.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":70051.0,"Objects":[{"StartTime":70051.0,"EndTime":70051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":70166.0,"EndTime":70166.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":70281.0,"Objects":[{"StartTime":70281.0,"EndTime":70281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":70339.0,"Objects":[{"StartTime":70339.0,"EndTime":70339.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":70397.0,"Objects":[{"StartTime":70397.0,"EndTime":70397.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":70455.0,"Objects":[{"StartTime":70455.0,"EndTime":70455.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":70512.0,"Objects":[{"StartTime":70512.0,"EndTime":70512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":70570.0,"Objects":[{"StartTime":70570.0,"EndTime":70570.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":70627.0,"Objects":[{"StartTime":70627.0,"EndTime":70627.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":70685.0,"Objects":[{"StartTime":70685.0,"EndTime":70685.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":70742.0,"Objects":[{"StartTime":70742.0,"EndTime":70742.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":70800.0,"Objects":[{"StartTime":70800.0,"EndTime":70800.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":70858.0,"Objects":[{"StartTime":70858.0,"EndTime":70858.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":70916.0,"Objects":[{"StartTime":70916.0,"EndTime":70916.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":70974.0,"Objects":[{"StartTime":70974.0,"EndTime":70974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":71031.0,"Objects":[{"StartTime":71031.0,"EndTime":71031.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":71089.0,"Objects":[{"StartTime":71089.0,"EndTime":71089.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":71146.0,"Objects":[{"StartTime":71146.0,"EndTime":71146.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":71204.0,"Objects":[{"StartTime":71204.0,"EndTime":71204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":71434.0,"EndTime":71434.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":71551.0,"Objects":[{"StartTime":71551.0,"EndTime":71551.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":71781.0,"EndTime":71781.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":71897.0,"Objects":[{"StartTime":71897.0,"EndTime":71897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":72012.0,"EndTime":72012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":72127.0,"Objects":[{"StartTime":72127.0,"EndTime":72127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":72243.0,"Objects":[{"StartTime":72243.0,"EndTime":72243.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":72473.0,"EndTime":72473.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":72589.0,"Objects":[{"StartTime":72589.0,"EndTime":72589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":72704.0,"EndTime":72704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":72820.0,"Objects":[{"StartTime":72820.0,"EndTime":72820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":72935.0,"EndTime":72935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":73051.0,"Objects":[{"StartTime":73051.0,"EndTime":73051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":73281.0,"EndTime":73281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":73397.0,"Objects":[{"StartTime":73397.0,"EndTime":73397.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":73627.0,"EndTime":73627.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":73743.0,"Objects":[{"StartTime":73743.0,"EndTime":73743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":73858.0,"EndTime":73858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":73974.0,"Objects":[{"StartTime":73974.0,"EndTime":73974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":74089.0,"Objects":[{"StartTime":74089.0,"EndTime":74089.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":74319.0,"EndTime":74319.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":74435.0,"Objects":[{"StartTime":74435.0,"EndTime":74435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":74550.0,"EndTime":74550.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":74666.0,"Objects":[{"StartTime":74666.0,"EndTime":74666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":74839.0,"EndTime":74839.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":74897.0,"Objects":[{"StartTime":74897.0,"EndTime":74897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":75127.0,"EndTime":75127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":75243.0,"Objects":[{"StartTime":75243.0,"EndTime":75243.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":75473.0,"EndTime":75473.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":75589.0,"Objects":[{"StartTime":75589.0,"EndTime":75589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":75704.0,"EndTime":75704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":75820.0,"Objects":[{"StartTime":75820.0,"EndTime":75820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":75935.0,"Objects":[{"StartTime":75935.0,"EndTime":75935.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":76165.0,"EndTime":76165.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":76281.0,"Objects":[{"StartTime":76281.0,"EndTime":76281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":76396.0,"EndTime":76396.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":76512.0,"Objects":[{"StartTime":76512.0,"EndTime":76512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":76627.0,"EndTime":76627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":76743.0,"Objects":[{"StartTime":76743.0,"EndTime":76743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":76973.0,"EndTime":76973.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":77089.0,"Objects":[{"StartTime":77089.0,"EndTime":77089.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":77319.0,"EndTime":77319.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":77435.0,"Objects":[{"StartTime":77435.0,"EndTime":77435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":77550.0,"EndTime":77550.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":77666.0,"Objects":[{"StartTime":77666.0,"EndTime":77666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":77781.0,"Objects":[{"StartTime":77781.0,"EndTime":77781.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":77897.0,"Objects":[{"StartTime":77897.0,"EndTime":77897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":78012.0,"Objects":[{"StartTime":78012.0,"EndTime":78012.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":78127.0,"Objects":[{"StartTime":78127.0,"EndTime":78127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":78300.0,"EndTime":78300.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":78358.0,"Objects":[{"StartTime":78358.0,"EndTime":78358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":78531.0,"EndTime":78531.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":78589.0,"Objects":[{"StartTime":78589.0,"EndTime":78589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":78819.0,"EndTime":78819.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":78935.0,"Objects":[{"StartTime":78935.0,"EndTime":78935.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":79165.0,"EndTime":79165.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":79281.0,"Objects":[{"StartTime":79281.0,"EndTime":79281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":79396.0,"EndTime":79396.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":79512.0,"Objects":[{"StartTime":79512.0,"EndTime":79512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":79627.0,"Objects":[{"StartTime":79627.0,"EndTime":79627.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":79857.0,"EndTime":79857.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":79974.0,"Objects":[{"StartTime":79974.0,"EndTime":79974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":80089.0,"EndTime":80089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":80204.0,"Objects":[{"StartTime":80204.0,"EndTime":80204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":80319.0,"EndTime":80319.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":80435.0,"Objects":[{"StartTime":80435.0,"EndTime":80435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":80665.0,"EndTime":80665.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":80781.0,"Objects":[{"StartTime":80781.0,"EndTime":80781.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":81011.0,"EndTime":81011.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":81127.0,"Objects":[{"StartTime":81127.0,"EndTime":81127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":81242.0,"EndTime":81242.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":81358.0,"Objects":[{"StartTime":81358.0,"EndTime":81358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":81474.0,"Objects":[{"StartTime":81474.0,"EndTime":81474.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":81704.0,"EndTime":81704.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":81820.0,"Objects":[{"StartTime":81820.0,"EndTime":81820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":81935.0,"EndTime":81935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":82051.0,"Objects":[{"StartTime":82051.0,"EndTime":82051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":82224.0,"EndTime":82224.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":82281.0,"Objects":[{"StartTime":82281.0,"EndTime":82281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":82511.0,"EndTime":82511.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":82627.0,"Objects":[{"StartTime":82627.0,"EndTime":82627.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":82857.0,"EndTime":82857.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":82974.0,"Objects":[{"StartTime":82974.0,"EndTime":82974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":83089.0,"EndTime":83089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":83204.0,"Objects":[{"StartTime":83204.0,"EndTime":83204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":83320.0,"Objects":[{"StartTime":83320.0,"EndTime":83320.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":83550.0,"EndTime":83550.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":83666.0,"Objects":[{"StartTime":83666.0,"EndTime":83666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":83781.0,"EndTime":83781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":83897.0,"Objects":[{"StartTime":83897.0,"EndTime":83897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":84012.0,"EndTime":84012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":84127.0,"Objects":[{"StartTime":84127.0,"EndTime":84127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":84357.0,"EndTime":84357.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":84474.0,"Objects":[{"StartTime":84474.0,"EndTime":84474.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":84704.0,"EndTime":84704.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":84820.0,"Objects":[{"StartTime":84820.0,"EndTime":84820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":84935.0,"EndTime":84935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":85051.0,"Objects":[{"StartTime":85051.0,"EndTime":85051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":85166.0,"EndTime":85166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":85281.0,"Objects":[{"StartTime":85281.0,"EndTime":85281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":85396.0,"EndTime":85396.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":85512.0,"Objects":[{"StartTime":85512.0,"EndTime":85512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":85685.0,"EndTime":85685.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":85743.0,"Objects":[{"StartTime":85743.0,"EndTime":85743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":85858.0,"EndTime":85858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":85974.0,"Objects":[{"StartTime":85974.0,"EndTime":85974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":86089.0,"EndTime":86089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":86204.0,"Objects":[{"StartTime":86204.0,"EndTime":86204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":86434.0,"EndTime":86434.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":86551.0,"Objects":[{"StartTime":86551.0,"EndTime":86551.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":86666.0,"Objects":[{"StartTime":86666.0,"EndTime":86666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":86781.0,"EndTime":86781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":86897.0,"Objects":[{"StartTime":86897.0,"EndTime":86897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":87127.0,"EndTime":87127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":87243.0,"Objects":[{"StartTime":87243.0,"EndTime":87243.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":87358.0,"Objects":[{"StartTime":87358.0,"EndTime":87358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":87588.0,"EndTime":87588.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":87704.0,"Objects":[{"StartTime":87704.0,"EndTime":87704.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":87820.0,"Objects":[{"StartTime":87820.0,"EndTime":87820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":87935.0,"EndTime":87935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":88051.0,"Objects":[{"StartTime":88051.0,"EndTime":88051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":88166.0,"EndTime":88166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":88281.0,"Objects":[{"StartTime":88281.0,"EndTime":88281.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":88339.0,"Objects":[{"StartTime":88339.0,"EndTime":88339.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":88397.0,"Objects":[{"StartTime":88397.0,"EndTime":88397.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":88454.0,"Objects":[{"StartTime":88454.0,"EndTime":88454.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":88512.0,"Objects":[{"StartTime":88512.0,"EndTime":88512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":88570.0,"Objects":[{"StartTime":88570.0,"EndTime":88570.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":88628.0,"Objects":[{"StartTime":88628.0,"EndTime":88628.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":88686.0,"Objects":[{"StartTime":88686.0,"EndTime":88686.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":88743.0,"Objects":[{"StartTime":88743.0,"EndTime":88743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":88973.0,"EndTime":88973.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":89089.0,"Objects":[{"StartTime":89089.0,"EndTime":89089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":89204.0,"Objects":[{"StartTime":89204.0,"EndTime":89204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":89434.0,"EndTime":89434.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":89551.0,"Objects":[{"StartTime":89551.0,"EndTime":89551.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":89666.0,"Objects":[{"StartTime":89666.0,"EndTime":89666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":89781.0,"EndTime":89781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":89897.0,"Objects":[{"StartTime":89897.0,"EndTime":89897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":90070.0,"EndTime":90070.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":90127.0,"Objects":[{"StartTime":90127.0,"EndTime":90127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":90242.0,"EndTime":90242.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":90358.0,"Objects":[{"StartTime":90358.0,"EndTime":90358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":90473.0,"EndTime":90473.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":90589.0,"Objects":[{"StartTime":90589.0,"EndTime":90589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":90819.0,"EndTime":90819.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":90935.0,"Objects":[{"StartTime":90935.0,"EndTime":90935.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":91165.0,"EndTime":91165.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":91281.0,"Objects":[{"StartTime":91281.0,"EndTime":91281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":91396.0,"EndTime":91396.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":91512.0,"Objects":[{"StartTime":91512.0,"EndTime":91512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":91627.0,"EndTime":91627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":91743.0,"Objects":[{"StartTime":91743.0,"EndTime":91743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":91858.0,"EndTime":91858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":91974.0,"Objects":[{"StartTime":91974.0,"EndTime":91974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":92089.0,"EndTime":92089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":92204.0,"Objects":[{"StartTime":92204.0,"EndTime":92204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":92262.0,"Objects":[{"StartTime":92262.0,"EndTime":92262.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":92320.0,"Objects":[{"StartTime":92320.0,"EndTime":92320.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":92377.0,"Objects":[{"StartTime":92377.0,"EndTime":92377.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":92435.0,"Objects":[{"StartTime":92435.0,"EndTime":92435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":92665.0,"EndTime":92665.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":92781.0,"Objects":[{"StartTime":92781.0,"EndTime":92781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":92897.0,"Objects":[{"StartTime":92897.0,"EndTime":92897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":93127.0,"EndTime":93127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":93243.0,"Objects":[{"StartTime":93243.0,"EndTime":93243.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":93358.0,"Objects":[{"StartTime":93358.0,"EndTime":93358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":93473.0,"EndTime":93473.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":93589.0,"Objects":[{"StartTime":93589.0,"EndTime":93589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":93762.0,"EndTime":93762.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":93820.0,"Objects":[{"StartTime":93820.0,"EndTime":93820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":93935.0,"EndTime":93935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":94051.0,"Objects":[{"StartTime":94051.0,"EndTime":94051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":94166.0,"EndTime":94166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":94281.0,"Objects":[{"StartTime":94281.0,"EndTime":94281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":94511.0,"EndTime":94511.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":94627.0,"Objects":[{"StartTime":94627.0,"EndTime":94627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":94743.0,"Objects":[{"StartTime":94743.0,"EndTime":94743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":94973.0,"EndTime":94973.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":95089.0,"Objects":[{"StartTime":95089.0,"EndTime":95089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":95204.0,"Objects":[{"StartTime":95204.0,"EndTime":95204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":95377.0,"EndTime":95377.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":95435.0,"Objects":[{"StartTime":95435.0,"EndTime":95435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":95550.0,"EndTime":95550.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":95666.0,"Objects":[{"StartTime":95666.0,"EndTime":95666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":95781.0,"EndTime":95781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":95897.0,"Objects":[{"StartTime":95897.0,"EndTime":95897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":96012.0,"EndTime":96012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":96127.0,"Objects":[{"StartTime":96127.0,"EndTime":96127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":96357.0,"EndTime":96357.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":96474.0,"Objects":[{"StartTime":96474.0,"EndTime":96474.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":96589.0,"Objects":[{"StartTime":96589.0,"EndTime":96589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":96819.0,"EndTime":96819.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":96935.0,"Objects":[{"StartTime":96935.0,"EndTime":96935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":97051.0,"Objects":[{"StartTime":97051.0,"EndTime":97051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":97281.0,"EndTime":97281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":97397.0,"Objects":[{"StartTime":97397.0,"EndTime":97397.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":97512.0,"Objects":[{"StartTime":97512.0,"EndTime":97512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":97627.0,"EndTime":97627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":97743.0,"Objects":[{"StartTime":97743.0,"EndTime":97743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":97858.0,"EndTime":97858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":97974.0,"Objects":[{"StartTime":97974.0,"EndTime":97974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":98204.0,"EndTime":98204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":98320.0,"Objects":[{"StartTime":98320.0,"EndTime":98320.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":98435.0,"Objects":[{"StartTime":98435.0,"EndTime":98435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":98665.0,"EndTime":98665.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":98781.0,"Objects":[{"StartTime":98781.0,"EndTime":98781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":98897.0,"Objects":[{"StartTime":98897.0,"EndTime":98897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":99127.0,"EndTime":99127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":99243.0,"Objects":[{"StartTime":99243.0,"EndTime":99243.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":99358.0,"Objects":[{"StartTime":99358.0,"EndTime":99358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":99473.0,"EndTime":99473.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":99589.0,"Objects":[{"StartTime":99589.0,"EndTime":99589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":99704.0,"EndTime":99704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":99820.0,"Objects":[{"StartTime":99820.0,"EndTime":99820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":99935.0,"Objects":[{"StartTime":99935.0,"EndTime":99935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":100051.0,"Objects":[{"StartTime":100051.0,"EndTime":100051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":100166.0,"Objects":[{"StartTime":100166.0,"EndTime":100166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":100281.0,"Objects":[{"StartTime":100281.0,"EndTime":100281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":100397.0,"Objects":[{"StartTime":100397.0,"EndTime":100397.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":100512.0,"Objects":[{"StartTime":100512.0,"EndTime":100512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":100628.0,"Objects":[{"StartTime":100628.0,"EndTime":100628.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":100743.0,"Objects":[{"StartTime":100743.0,"EndTime":100743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":100858.0,"EndTime":100858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":100974.0,"Objects":[{"StartTime":100974.0,"EndTime":100974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":101089.0,"EndTime":101089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":101204.0,"Objects":[{"StartTime":101204.0,"EndTime":101204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":101319.0,"EndTime":101319.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":101435.0,"Objects":[{"StartTime":101435.0,"EndTime":101435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":101550.0,"EndTime":101550.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":101666.0,"Objects":[{"StartTime":101666.0,"EndTime":101666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":101781.0,"EndTime":101781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":101897.0,"Objects":[{"StartTime":101897.0,"EndTime":101897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":102012.0,"EndTime":102012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":102127.0,"Objects":[{"StartTime":102127.0,"EndTime":102127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":102243.0,"Objects":[{"StartTime":102243.0,"EndTime":102243.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":102300.0,"Objects":[{"StartTime":102300.0,"EndTime":102300.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":102358.0,"Objects":[{"StartTime":102358.0,"EndTime":102358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":102416.0,"Objects":[{"StartTime":102416.0,"EndTime":102416.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":102474.0,"Objects":[{"StartTime":102474.0,"EndTime":102474.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":102531.0,"Objects":[{"StartTime":102531.0,"EndTime":102531.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":102589.0,"Objects":[{"StartTime":102589.0,"EndTime":102589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":102646.0,"Objects":[{"StartTime":102646.0,"EndTime":102646.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":102704.0,"Objects":[{"StartTime":102704.0,"EndTime":102704.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":102762.0,"Objects":[{"StartTime":102762.0,"EndTime":102762.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":102819.0,"Objects":[{"StartTime":102819.0,"EndTime":102819.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":102935.0,"Objects":[{"StartTime":102935.0,"EndTime":102935.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":102992.0,"EndTime":102992.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":103051.0,"Objects":[{"StartTime":103051.0,"EndTime":103051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":103108.0,"Objects":[{"StartTime":103108.0,"EndTime":103108.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":103166.0,"Objects":[{"StartTime":103166.0,"EndTime":103166.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":103224.0,"Objects":[{"StartTime":103224.0,"EndTime":103224.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":103281.0,"Objects":[{"StartTime":103281.0,"EndTime":103281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":103339.0,"Objects":[{"StartTime":103339.0,"EndTime":103339.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":103397.0,"Objects":[{"StartTime":103397.0,"EndTime":103397.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":103454.0,"Objects":[{"StartTime":103454.0,"EndTime":103454.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":103512.0,"Objects":[{"StartTime":103512.0,"EndTime":103512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":103742.0,"EndTime":103742.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":103858.0,"Objects":[{"StartTime":103858.0,"EndTime":103858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":103974.0,"Objects":[{"StartTime":103974.0,"EndTime":103974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":104204.0,"EndTime":104204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":104320.0,"Objects":[{"StartTime":104320.0,"EndTime":104320.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":104435.0,"Objects":[{"StartTime":104435.0,"EndTime":104435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":104550.0,"EndTime":104550.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":104666.0,"Objects":[{"StartTime":104666.0,"EndTime":104666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":104896.0,"EndTime":104896.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":105012.0,"Objects":[{"StartTime":105012.0,"EndTime":105012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":105127.0,"Objects":[{"StartTime":105127.0,"EndTime":105127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":105243.0,"Objects":[{"StartTime":105243.0,"EndTime":105243.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":105301.0,"Objects":[{"StartTime":105301.0,"EndTime":105301.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":105358.0,"Objects":[{"StartTime":105358.0,"EndTime":105358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":105588.0,"EndTime":105588.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":105704.0,"Objects":[{"StartTime":105704.0,"EndTime":105704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":105820.0,"Objects":[{"StartTime":105820.0,"EndTime":105820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":105935.0,"EndTime":105935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":106051.0,"Objects":[{"StartTime":106051.0,"EndTime":106051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":106166.0,"EndTime":106166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":106281.0,"Objects":[{"StartTime":106281.0,"EndTime":106281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":106396.0,"EndTime":106396.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":106512.0,"Objects":[{"StartTime":106512.0,"EndTime":106512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":106627.0,"EndTime":106627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":106743.0,"Objects":[{"StartTime":106743.0,"EndTime":106743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":106916.0,"EndTime":106916.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":106974.0,"Objects":[{"StartTime":106974.0,"EndTime":106974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":107089.0,"EndTime":107089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":107204.0,"Objects":[{"StartTime":107204.0,"EndTime":107204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":107434.0,"EndTime":107434.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":107551.0,"Objects":[{"StartTime":107551.0,"EndTime":107551.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":107666.0,"Objects":[{"StartTime":107666.0,"EndTime":107666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":107896.0,"EndTime":107896.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":108012.0,"Objects":[{"StartTime":108012.0,"EndTime":108012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":108127.0,"Objects":[{"StartTime":108127.0,"EndTime":108127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":108242.0,"EndTime":108242.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":108358.0,"Objects":[{"StartTime":108358.0,"EndTime":108358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":108588.0,"EndTime":108588.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":108704.0,"Objects":[{"StartTime":108704.0,"EndTime":108704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":108820.0,"Objects":[{"StartTime":108820.0,"EndTime":108820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":108935.0,"Objects":[{"StartTime":108935.0,"EndTime":108935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":108993.0,"Objects":[{"StartTime":108993.0,"EndTime":108993.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":109051.0,"Objects":[{"StartTime":109051.0,"EndTime":109051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":109281.0,"EndTime":109281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":109397.0,"Objects":[{"StartTime":109397.0,"EndTime":109397.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":109512.0,"Objects":[{"StartTime":109512.0,"EndTime":109512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":109627.0,"EndTime":109627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":109743.0,"Objects":[{"StartTime":109743.0,"EndTime":109743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":109858.0,"EndTime":109858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":109974.0,"Objects":[{"StartTime":109974.0,"EndTime":109974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":110089.0,"EndTime":110089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":110204.0,"Objects":[{"StartTime":110204.0,"EndTime":110204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":110319.0,"EndTime":110319.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":110435.0,"Objects":[{"StartTime":110435.0,"EndTime":110435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":110608.0,"EndTime":110608.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":110666.0,"Objects":[{"StartTime":110666.0,"EndTime":110666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":110781.0,"EndTime":110781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":110897.0,"Objects":[{"StartTime":110897.0,"EndTime":110897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":111127.0,"EndTime":111127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":111243.0,"Objects":[{"StartTime":111243.0,"EndTime":111243.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":111358.0,"Objects":[{"StartTime":111358.0,"EndTime":111358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":111588.0,"EndTime":111588.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":111704.0,"Objects":[{"StartTime":111704.0,"EndTime":111704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":111820.0,"Objects":[{"StartTime":111820.0,"EndTime":111820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":111935.0,"EndTime":111935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":112051.0,"Objects":[{"StartTime":112051.0,"EndTime":112051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":112281.0,"EndTime":112281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":112397.0,"Objects":[{"StartTime":112397.0,"EndTime":112397.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":112512.0,"Objects":[{"StartTime":112512.0,"EndTime":112512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":112627.0,"Objects":[{"StartTime":112627.0,"EndTime":112627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":112685.0,"Objects":[{"StartTime":112685.0,"EndTime":112685.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":112743.0,"Objects":[{"StartTime":112743.0,"EndTime":112743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":112973.0,"EndTime":112973.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":113089.0,"Objects":[{"StartTime":113089.0,"EndTime":113089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":113204.0,"Objects":[{"StartTime":113204.0,"EndTime":113204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":113434.0,"EndTime":113434.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":113551.0,"Objects":[{"StartTime":113551.0,"EndTime":113551.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":113666.0,"Objects":[{"StartTime":113666.0,"EndTime":113666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":113896.0,"EndTime":113896.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":114012.0,"Objects":[{"StartTime":114012.0,"EndTime":114012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":114127.0,"Objects":[{"StartTime":114127.0,"EndTime":114127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":114300.0,"EndTime":114300.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":114358.0,"Objects":[{"StartTime":114358.0,"EndTime":114358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":114473.0,"EndTime":114473.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":114589.0,"Objects":[{"StartTime":114589.0,"EndTime":115281.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":115512.0,"Objects":[{"StartTime":115512.0,"EndTime":115512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":116435.0,"Objects":[{"StartTime":116435.0,"EndTime":117127.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":117358.0,"Objects":[{"StartTime":117358.0,"EndTime":117358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":117589.0,"Objects":[{"StartTime":117589.0,"EndTime":117589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":117820.0,"Objects":[{"StartTime":117820.0,"EndTime":117820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":118051.0,"Objects":[{"StartTime":118051.0,"EndTime":118051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":118166.0,"EndTime":118166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":118281.0,"Objects":[{"StartTime":118281.0,"EndTime":118281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":118396.0,"EndTime":118396.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":118512.0,"Objects":[{"StartTime":118512.0,"EndTime":118512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":118627.0,"EndTime":118627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":118743.0,"Objects":[{"StartTime":118743.0,"EndTime":118743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":118858.0,"Objects":[{"StartTime":118858.0,"EndTime":118858.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":119088.0,"EndTime":119088.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":119204.0,"Objects":[{"StartTime":119204.0,"EndTime":119204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":119262.0,"Objects":[{"StartTime":119262.0,"EndTime":119262.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":119319.0,"Objects":[{"StartTime":119319.0,"EndTime":119319.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":119377.0,"Objects":[{"StartTime":119377.0,"EndTime":119377.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":119434.0,"Objects":[{"StartTime":119434.0,"EndTime":119434.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":119493.0,"Objects":[{"StartTime":119493.0,"EndTime":119493.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":119551.0,"Objects":[{"StartTime":119551.0,"EndTime":119551.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":119608.0,"Objects":[{"StartTime":119608.0,"EndTime":119608.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":119666.0,"Objects":[{"StartTime":119666.0,"EndTime":119666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":119723.0,"Objects":[{"StartTime":119723.0,"EndTime":119723.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":119781.0,"Objects":[{"StartTime":119781.0,"EndTime":119781.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":119839.0,"Objects":[{"StartTime":119839.0,"EndTime":119839.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":119897.0,"Objects":[{"StartTime":119897.0,"EndTime":119897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":119954.0,"Objects":[{"StartTime":119954.0,"EndTime":119954.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":120012.0,"Objects":[{"StartTime":120012.0,"EndTime":120012.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":120070.0,"Objects":[{"StartTime":120070.0,"EndTime":120070.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":120127.0,"Objects":[{"StartTime":120127.0,"EndTime":120127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":120357.0,"EndTime":120357.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":120474.0,"Objects":[{"StartTime":120474.0,"EndTime":120474.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":120704.0,"EndTime":120704.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":120820.0,"Objects":[{"StartTime":120820.0,"EndTime":120820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":120935.0,"EndTime":120935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":121051.0,"Objects":[{"StartTime":121051.0,"EndTime":121051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":121166.0,"Objects":[{"StartTime":121166.0,"EndTime":121166.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":121396.0,"EndTime":121396.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":121512.0,"Objects":[{"StartTime":121512.0,"EndTime":121512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":121627.0,"EndTime":121627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":121743.0,"Objects":[{"StartTime":121743.0,"EndTime":121743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":121858.0,"EndTime":121858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":121974.0,"Objects":[{"StartTime":121974.0,"EndTime":121974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":122204.0,"EndTime":122204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":122320.0,"Objects":[{"StartTime":122320.0,"EndTime":122320.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":122550.0,"EndTime":122550.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":122666.0,"Objects":[{"StartTime":122666.0,"EndTime":122666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":122781.0,"EndTime":122781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":122897.0,"Objects":[{"StartTime":122897.0,"EndTime":122897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":123012.0,"Objects":[{"StartTime":123012.0,"EndTime":123012.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":123242.0,"EndTime":123242.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":123358.0,"Objects":[{"StartTime":123358.0,"EndTime":123358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":123473.0,"EndTime":123473.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":123589.0,"Objects":[{"StartTime":123589.0,"EndTime":123589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":123704.0,"EndTime":123704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":123820.0,"Objects":[{"StartTime":123820.0,"EndTime":123820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":124050.0,"EndTime":124050.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":124166.0,"Objects":[{"StartTime":124166.0,"EndTime":124166.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":124396.0,"EndTime":124396.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":124512.0,"Objects":[{"StartTime":124512.0,"EndTime":124512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":124627.0,"EndTime":124627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":124743.0,"Objects":[{"StartTime":124743.0,"EndTime":124743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":124858.0,"Objects":[{"StartTime":124858.0,"EndTime":124858.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":125088.0,"EndTime":125088.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":125204.0,"Objects":[{"StartTime":125204.0,"EndTime":125204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":125319.0,"EndTime":125319.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":125435.0,"Objects":[{"StartTime":125435.0,"EndTime":125435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":125550.0,"EndTime":125550.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":125666.0,"Objects":[{"StartTime":125666.0,"EndTime":125666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":125781.0,"Objects":[{"StartTime":125781.0,"EndTime":125781.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":125897.0,"Objects":[{"StartTime":125897.0,"EndTime":125897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":126012.0,"Objects":[{"StartTime":126012.0,"EndTime":126012.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":126127.0,"Objects":[{"StartTime":126127.0,"EndTime":126127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":126357.0,"EndTime":126357.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":126474.0,"Objects":[{"StartTime":126474.0,"EndTime":126474.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":126589.0,"Objects":[{"StartTime":126589.0,"EndTime":126589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":126762.0,"EndTime":126762.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":126820.0,"Objects":[{"StartTime":126820.0,"EndTime":126820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":127050.0,"EndTime":127050.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":127166.0,"Objects":[{"StartTime":127166.0,"EndTime":127166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":127281.0,"Objects":[{"StartTime":127281.0,"EndTime":127281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":127397.0,"Objects":[{"StartTime":127397.0,"EndTime":127397.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":127454.0,"Objects":[{"StartTime":127454.0,"EndTime":127454.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":127512.0,"Objects":[{"StartTime":127512.0,"EndTime":127512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":127742.0,"EndTime":127742.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":127858.0,"Objects":[{"StartTime":127858.0,"EndTime":127858.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":128088.0,"EndTime":128088.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":128204.0,"Objects":[{"StartTime":128204.0,"EndTime":128204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":128319.0,"EndTime":128319.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":128435.0,"Objects":[{"StartTime":128435.0,"EndTime":128435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":128551.0,"Objects":[{"StartTime":128551.0,"EndTime":128551.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":128781.0,"EndTime":128781.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":128897.0,"Objects":[{"StartTime":128897.0,"EndTime":128897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":129012.0,"EndTime":129012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":129127.0,"Objects":[{"StartTime":129127.0,"EndTime":129127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":129242.0,"EndTime":129242.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":129358.0,"Objects":[{"StartTime":129358.0,"EndTime":129358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":129588.0,"EndTime":129588.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":129704.0,"Objects":[{"StartTime":129704.0,"EndTime":129704.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":129934.0,"EndTime":129934.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":130051.0,"Objects":[{"StartTime":130051.0,"EndTime":130051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":130166.0,"EndTime":130166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":130281.0,"Objects":[{"StartTime":130281.0,"EndTime":130281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":130397.0,"Objects":[{"StartTime":130397.0,"EndTime":130397.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":130627.0,"EndTime":130627.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":130743.0,"Objects":[{"StartTime":130743.0,"EndTime":130743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":130858.0,"EndTime":130858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":130974.0,"Objects":[{"StartTime":130974.0,"EndTime":130974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":131089.0,"EndTime":131089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":131204.0,"Objects":[{"StartTime":131204.0,"EndTime":131204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":131434.0,"EndTime":131434.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":131551.0,"Objects":[{"StartTime":131551.0,"EndTime":131551.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":131781.0,"EndTime":131781.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":131897.0,"Objects":[{"StartTime":131897.0,"EndTime":131897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":132012.0,"EndTime":132012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":132127.0,"Objects":[{"StartTime":132127.0,"EndTime":132127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":132243.0,"Objects":[{"StartTime":132243.0,"EndTime":132243.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":132473.0,"EndTime":132473.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":132589.0,"Objects":[{"StartTime":132589.0,"EndTime":132589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":132704.0,"EndTime":132704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":132820.0,"Objects":[{"StartTime":132820.0,"EndTime":132820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":132935.0,"EndTime":132935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":133051.0,"Objects":[{"StartTime":133051.0,"EndTime":133051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":133108.0,"Objects":[{"StartTime":133108.0,"EndTime":133108.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":133166.0,"Objects":[{"StartTime":133166.0,"EndTime":133166.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":133224.0,"Objects":[{"StartTime":133224.0,"EndTime":133224.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":133281.0,"Objects":[{"StartTime":133281.0,"EndTime":133281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":133339.0,"Objects":[{"StartTime":133339.0,"EndTime":133339.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":133397.0,"Objects":[{"StartTime":133397.0,"EndTime":133397.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":133454.0,"Objects":[{"StartTime":133454.0,"EndTime":133454.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":133512.0,"Objects":[{"StartTime":133512.0,"EndTime":133512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":133743.0,"Objects":[{"StartTime":133743.0,"EndTime":133743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":133858.0,"Objects":[{"StartTime":133858.0,"EndTime":133858.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":133973.0,"Objects":[{"StartTime":133973.0,"EndTime":133973.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":134031.0,"Objects":[{"StartTime":134031.0,"EndTime":134031.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":134088.0,"Objects":[{"StartTime":134088.0,"EndTime":134088.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":134146.0,"Objects":[{"StartTime":134146.0,"EndTime":134146.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":134204.0,"Objects":[{"StartTime":134204.0,"EndTime":134204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":134434.0,"EndTime":134434.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":134666.0,"Objects":[{"StartTime":134666.0,"EndTime":134666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":134781.0,"EndTime":134781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":134897.0,"Objects":[{"StartTime":134897.0,"EndTime":134897.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":135012.0,"EndTime":135012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":135127.0,"Objects":[{"StartTime":135127.0,"EndTime":135127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":135242.0,"EndTime":135242.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":135358.0,"Objects":[{"StartTime":135358.0,"EndTime":135358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":135588.0,"EndTime":135588.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":135704.0,"Objects":[{"StartTime":135704.0,"EndTime":135704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":135819.0,"EndTime":135819.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":135935.0,"Objects":[{"StartTime":135935.0,"EndTime":135935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":136050.0,"EndTime":136050.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":136166.0,"Objects":[{"StartTime":136166.0,"EndTime":136166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":136281.0,"EndTime":136281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":136397.0,"Objects":[{"StartTime":136397.0,"EndTime":136397.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":136512.0,"EndTime":136512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":136627.0,"Objects":[{"StartTime":136627.0,"EndTime":136627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":136743.0,"Objects":[{"StartTime":136743.0,"EndTime":136743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":136858.0,"EndTime":136858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":136974.0,"Objects":[{"StartTime":136974.0,"EndTime":136974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":137089.0,"EndTime":137089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":137204.0,"Objects":[{"StartTime":137204.0,"EndTime":137204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":137319.0,"EndTime":137319.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":137435.0,"Objects":[{"StartTime":137435.0,"EndTime":137435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":137550.0,"EndTime":137550.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":137666.0,"Objects":[{"StartTime":137666.0,"EndTime":137666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":137896.0,"EndTime":137896.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":138012.0,"Objects":[{"StartTime":138012.0,"EndTime":138012.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":138242.0,"EndTime":138242.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":138358.0,"Objects":[{"StartTime":138358.0,"EndTime":138358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":138473.0,"EndTime":138473.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":138589.0,"Objects":[{"StartTime":138589.0,"EndTime":138589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":138819.0,"EndTime":138819.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":138935.0,"Objects":[{"StartTime":138935.0,"EndTime":138935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":139051.0,"Objects":[{"StartTime":139051.0,"EndTime":139051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":139281.0,"EndTime":139281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":139397.0,"Objects":[{"StartTime":139397.0,"EndTime":139397.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":139512.0,"Objects":[{"StartTime":139512.0,"EndTime":139512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":139742.0,"EndTime":139742.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":139858.0,"Objects":[{"StartTime":139858.0,"EndTime":139858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":139974.0,"Objects":[{"StartTime":139974.0,"EndTime":139974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":140089.0,"EndTime":140089.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":140204.0,"Objects":[{"StartTime":140204.0,"EndTime":140204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":140319.0,"EndTime":140319.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":140435.0,"Objects":[{"StartTime":140435.0,"EndTime":140435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":140550.0,"EndTime":140550.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":140666.0,"Objects":[{"StartTime":140666.0,"EndTime":140666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":140781.0,"EndTime":140781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":140897.0,"Objects":[{"StartTime":140897.0,"EndTime":140897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":141012.0,"EndTime":141012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":141127.0,"Objects":[{"StartTime":141127.0,"EndTime":141127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":141242.0,"EndTime":141242.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":141358.0,"Objects":[{"StartTime":141358.0,"EndTime":141358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":141588.0,"EndTime":141588.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":141704.0,"Objects":[{"StartTime":141704.0,"EndTime":141704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":141820.0,"Objects":[{"StartTime":141820.0,"EndTime":141820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":142050.0,"EndTime":142050.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":142166.0,"Objects":[{"StartTime":142166.0,"EndTime":142166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":142281.0,"Objects":[{"StartTime":142281.0,"EndTime":142281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":142396.0,"EndTime":142396.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":142512.0,"Objects":[{"StartTime":142512.0,"EndTime":142512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":142627.0,"EndTime":142627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":142743.0,"Objects":[{"StartTime":142743.0,"EndTime":142743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":142858.0,"EndTime":142858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":142974.0,"Objects":[{"StartTime":142974.0,"EndTime":142974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":143089.0,"EndTime":143089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":143204.0,"Objects":[{"StartTime":143204.0,"EndTime":143204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":143377.0,"EndTime":143377.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":143435.0,"Objects":[{"StartTime":143435.0,"EndTime":143435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":143608.0,"EndTime":143608.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":143666.0,"Objects":[{"StartTime":143666.0,"EndTime":143666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":143839.0,"EndTime":143839.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":143897.0,"Objects":[{"StartTime":143897.0,"EndTime":143897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":144070.0,"EndTime":144070.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":144127.0,"Objects":[{"StartTime":144127.0,"EndTime":144127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":144357.0,"EndTime":144357.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":144474.0,"Objects":[{"StartTime":144474.0,"EndTime":144474.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":144589.0,"Objects":[{"StartTime":144589.0,"EndTime":144589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":144819.0,"EndTime":144819.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":144935.0,"Objects":[{"StartTime":144935.0,"EndTime":144935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":145051.0,"Objects":[{"StartTime":145051.0,"EndTime":145051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":145166.0,"EndTime":145166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":145281.0,"Objects":[{"StartTime":145281.0,"EndTime":145281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":145396.0,"EndTime":145396.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":145512.0,"Objects":[{"StartTime":145512.0,"EndTime":145512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":145627.0,"EndTime":145627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":145742.0,"Objects":[{"StartTime":145742.0,"EndTime":145742.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":145857.0,"EndTime":145857.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":145974.0,"Objects":[{"StartTime":145974.0,"EndTime":145974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":146089.0,"EndTime":146089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":146204.0,"Objects":[{"StartTime":146204.0,"EndTime":146204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":146319.0,"EndTime":146319.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":146435.0,"Objects":[{"StartTime":146435.0,"EndTime":146435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":146550.0,"EndTime":146550.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":146666.0,"Objects":[{"StartTime":146666.0,"EndTime":146666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":146781.0,"EndTime":146781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":146897.0,"Objects":[{"StartTime":146897.0,"EndTime":146897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":147012.0,"EndTime":147012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":147127.0,"Objects":[{"StartTime":147127.0,"EndTime":147127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":147242.0,"EndTime":147242.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":147358.0,"Objects":[{"StartTime":147358.0,"EndTime":147358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":147473.0,"EndTime":147473.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":147589.0,"Objects":[{"StartTime":147589.0,"EndTime":147589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":147704.0,"EndTime":147704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":147820.0,"Objects":[{"StartTime":147820.0,"EndTime":147820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":147935.0,"EndTime":147935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":148050.0,"Objects":[{"StartTime":148050.0,"EndTime":148050.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":148165.0,"EndTime":148165.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":148281.0,"Objects":[{"StartTime":148281.0,"EndTime":148281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":148397.0,"Objects":[{"StartTime":148397.0,"EndTime":148397.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":148512.0,"Objects":[{"StartTime":148512.0,"EndTime":148512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":148627.0,"Objects":[{"StartTime":148627.0,"EndTime":148627.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":148743.0,"Objects":[{"StartTime":148743.0,"EndTime":148743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":148858.0,"Objects":[{"StartTime":148858.0,"EndTime":148858.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":148916.0,"Objects":[{"StartTime":148916.0,"EndTime":148916.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":148974.0,"Objects":[{"StartTime":148974.0,"EndTime":148974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":149089.0,"Objects":[{"StartTime":149089.0,"EndTime":149089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":149204.0,"Objects":[{"StartTime":149204.0,"EndTime":149204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":149320.0,"Objects":[{"StartTime":149320.0,"EndTime":149320.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":149435.0,"Objects":[{"StartTime":149435.0,"EndTime":149435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":149551.0,"Objects":[{"StartTime":149551.0,"EndTime":149551.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":149666.0,"Objects":[{"StartTime":149666.0,"EndTime":150358.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":150589.0,"Objects":[{"StartTime":150589.0,"EndTime":151281.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":151512.0,"Objects":[{"StartTime":151512.0,"EndTime":152204.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":152320.0,"Objects":[{"StartTime":152320.0,"EndTime":152320.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":152377.0,"Objects":[{"StartTime":152377.0,"EndTime":152377.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":152435.0,"Objects":[{"StartTime":152435.0,"EndTime":152435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":152551.0,"Objects":[{"StartTime":152551.0,"EndTime":152551.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":152666.0,"Objects":[{"StartTime":152666.0,"EndTime":152666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":152781.0,"Objects":[{"StartTime":152781.0,"EndTime":152781.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":152897.0,"Objects":[{"StartTime":152897.0,"EndTime":152897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":153012.0,"Objects":[{"StartTime":153012.0,"EndTime":153012.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":153128.0,"Objects":[{"StartTime":153128.0,"EndTime":153128.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":153243.0,"Objects":[{"StartTime":153243.0,"EndTime":153243.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":153358.0,"Objects":[{"StartTime":153358.0,"EndTime":154050.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":154281.0,"Objects":[{"StartTime":154281.0,"EndTime":154973.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":155204.0,"Objects":[{"StartTime":155204.0,"EndTime":155896.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":156127.0,"Objects":[{"StartTime":156127.0,"EndTime":156127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":156185.0,"Objects":[{"StartTime":156185.0,"EndTime":156185.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":156243.0,"Objects":[{"StartTime":156243.0,"EndTime":156243.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":156358.0,"Objects":[{"StartTime":156358.0,"EndTime":156358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":156474.0,"Objects":[{"StartTime":156474.0,"EndTime":156474.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":156531.0,"Objects":[{"StartTime":156531.0,"EndTime":156531.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":156589.0,"Objects":[{"StartTime":156589.0,"EndTime":156589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":156704.0,"Objects":[{"StartTime":156704.0,"EndTime":156704.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":156820.0,"Objects":[{"StartTime":156820.0,"EndTime":156820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":156935.0,"Objects":[{"StartTime":156935.0,"EndTime":156935.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":157051.0,"Objects":[{"StartTime":157051.0,"EndTime":157743.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":157974.0,"Objects":[{"StartTime":157974.0,"EndTime":158666.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":158897.0,"Objects":[{"StartTime":158897.0,"EndTime":159589.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":159704.0,"Objects":[{"StartTime":159704.0,"EndTime":159704.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":159762.0,"Objects":[{"StartTime":159762.0,"EndTime":159762.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":159820.0,"Objects":[{"StartTime":159820.0,"EndTime":159820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":159935.0,"Objects":[{"StartTime":159935.0,"EndTime":159935.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":160051.0,"Objects":[{"StartTime":160051.0,"EndTime":160051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":160166.0,"Objects":[{"StartTime":160166.0,"EndTime":160166.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":160281.0,"Objects":[{"StartTime":160281.0,"EndTime":160281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":160397.0,"Objects":[{"StartTime":160397.0,"EndTime":160397.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":160513.0,"Objects":[{"StartTime":160513.0,"EndTime":160513.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":160627.0,"Objects":[{"StartTime":160627.0,"EndTime":160627.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":160743.0,"Objects":[{"StartTime":160743.0,"EndTime":160743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":160858.0,"EndTime":160858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":160974.0,"Objects":[{"StartTime":160974.0,"EndTime":160974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":161089.0,"EndTime":161089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":161204.0,"Objects":[{"StartTime":161204.0,"EndTime":161204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":161319.0,"EndTime":161319.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":161435.0,"Objects":[{"StartTime":161435.0,"EndTime":161435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":161550.0,"EndTime":161550.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":161666.0,"Objects":[{"StartTime":161666.0,"EndTime":161666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":161781.0,"EndTime":161781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":161897.0,"Objects":[{"StartTime":161897.0,"EndTime":161897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":162012.0,"EndTime":162012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":162127.0,"Objects":[{"StartTime":162127.0,"EndTime":162127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":162242.0,"EndTime":162242.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":162358.0,"Objects":[{"StartTime":162358.0,"EndTime":162358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":162473.0,"EndTime":162473.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":162589.0,"Objects":[{"StartTime":162589.0,"EndTime":162589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":162704.0,"EndTime":162704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":162820.0,"Objects":[{"StartTime":162820.0,"EndTime":162820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":162935.0,"EndTime":162935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":163051.0,"Objects":[{"StartTime":163051.0,"EndTime":163051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":163166.0,"EndTime":163166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":163281.0,"Objects":[{"StartTime":163281.0,"EndTime":163281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":163396.0,"EndTime":163396.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":163512.0,"Objects":[{"StartTime":163512.0,"EndTime":163512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":163627.0,"EndTime":163627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":163743.0,"Objects":[{"StartTime":163743.0,"EndTime":163743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":163858.0,"EndTime":163858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":163974.0,"Objects":[{"StartTime":163974.0,"EndTime":163974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":164089.0,"EndTime":164089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":164205.0,"Objects":[{"StartTime":164205.0,"EndTime":164205.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":164320.0,"EndTime":164320.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":164435.0,"Objects":[{"StartTime":164435.0,"EndTime":164435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":164550.0,"EndTime":164550.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":164666.0,"Objects":[{"StartTime":164666.0,"EndTime":164666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":164781.0,"EndTime":164781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":164897.0,"Objects":[{"StartTime":164897.0,"EndTime":164897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":165012.0,"EndTime":165012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":165127.0,"Objects":[{"StartTime":165127.0,"EndTime":165127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":165243.0,"Objects":[{"StartTime":165243.0,"EndTime":165243.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":165301.0,"Objects":[{"StartTime":165301.0,"EndTime":165301.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":165358.0,"Objects":[{"StartTime":165358.0,"EndTime":165358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":165473.0,"EndTime":165473.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":165589.0,"Objects":[{"StartTime":165589.0,"EndTime":165589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":165704.0,"Objects":[{"StartTime":165704.0,"EndTime":165704.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":165820.0,"Objects":[{"StartTime":165820.0,"EndTime":165820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":165877.0,"Objects":[{"StartTime":165877.0,"EndTime":165877.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":165935.0,"Objects":[{"StartTime":165935.0,"EndTime":165935.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":165993.0,"Objects":[{"StartTime":165993.0,"EndTime":165993.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":166050.0,"Objects":[{"StartTime":166050.0,"EndTime":166050.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":166108.0,"Objects":[{"StartTime":166108.0,"EndTime":166108.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":166166.0,"Objects":[{"StartTime":166166.0,"EndTime":166166.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":166224.0,"Objects":[{"StartTime":166224.0,"EndTime":166224.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":166281.0,"Objects":[{"StartTime":166281.0,"EndTime":166281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":166511.0,"EndTime":166511.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":166627.0,"Objects":[{"StartTime":166627.0,"EndTime":166627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":166743.0,"Objects":[{"StartTime":166743.0,"EndTime":166743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":166973.0,"EndTime":166973.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":167089.0,"Objects":[{"StartTime":167089.0,"EndTime":167089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":167204.0,"Objects":[{"StartTime":167204.0,"EndTime":167204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":167319.0,"EndTime":167319.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":167435.0,"Objects":[{"StartTime":167435.0,"EndTime":167435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":167608.0,"EndTime":167608.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":167666.0,"Objects":[{"StartTime":167666.0,"EndTime":167666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":167781.0,"EndTime":167781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":167897.0,"Objects":[{"StartTime":167897.0,"EndTime":167897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":168012.0,"EndTime":168012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":168127.0,"Objects":[{"StartTime":168127.0,"EndTime":168127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":168357.0,"EndTime":168357.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":168474.0,"Objects":[{"StartTime":168474.0,"EndTime":168474.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":168704.0,"EndTime":168704.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":168820.0,"Objects":[{"StartTime":168820.0,"EndTime":168820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":168935.0,"EndTime":168935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":169051.0,"Objects":[{"StartTime":169051.0,"EndTime":169051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":169166.0,"EndTime":169166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":169281.0,"Objects":[{"StartTime":169281.0,"EndTime":169281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":169396.0,"EndTime":169396.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":169512.0,"Objects":[{"StartTime":169512.0,"EndTime":169512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":169627.0,"EndTime":169627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":169743.0,"Objects":[{"StartTime":169743.0,"EndTime":169743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":169800.0,"Objects":[{"StartTime":169800.0,"EndTime":169800.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":169858.0,"Objects":[{"StartTime":169858.0,"EndTime":169858.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":169916.0,"Objects":[{"StartTime":169916.0,"EndTime":169916.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":169974.0,"Objects":[{"StartTime":169974.0,"EndTime":169974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":170204.0,"EndTime":170204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":170320.0,"Objects":[{"StartTime":170320.0,"EndTime":170320.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":170435.0,"Objects":[{"StartTime":170435.0,"EndTime":170435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":170665.0,"EndTime":170665.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":170781.0,"Objects":[{"StartTime":170781.0,"EndTime":170781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":170897.0,"Objects":[{"StartTime":170897.0,"EndTime":170897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":171012.0,"EndTime":171012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":171127.0,"Objects":[{"StartTime":171127.0,"EndTime":171127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":171300.0,"EndTime":171300.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":171358.0,"Objects":[{"StartTime":171358.0,"EndTime":171358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":171473.0,"EndTime":171473.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":171589.0,"Objects":[{"StartTime":171589.0,"EndTime":171589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":171704.0,"EndTime":171704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":171820.0,"Objects":[{"StartTime":171820.0,"EndTime":171820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":172050.0,"EndTime":172050.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":172166.0,"Objects":[{"StartTime":172166.0,"EndTime":172166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":172281.0,"Objects":[{"StartTime":172281.0,"EndTime":172281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":172511.0,"EndTime":172511.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":172628.0,"Objects":[{"StartTime":172628.0,"EndTime":172628.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":172743.0,"Objects":[{"StartTime":172743.0,"EndTime":172743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":172916.0,"EndTime":172916.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":172974.0,"Objects":[{"StartTime":172974.0,"EndTime":172974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":173089.0,"EndTime":173089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":173204.0,"Objects":[{"StartTime":173204.0,"EndTime":173204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":173319.0,"EndTime":173319.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":173435.0,"Objects":[{"StartTime":173435.0,"EndTime":173435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":173550.0,"EndTime":173550.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":173666.0,"Objects":[{"StartTime":173666.0,"EndTime":173666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":173896.0,"EndTime":173896.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":174012.0,"Objects":[{"StartTime":174012.0,"EndTime":174012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":174127.0,"Objects":[{"StartTime":174127.0,"EndTime":174127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":174357.0,"EndTime":174357.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":174474.0,"Objects":[{"StartTime":174474.0,"EndTime":174474.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":174589.0,"Objects":[{"StartTime":174589.0,"EndTime":174589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":174819.0,"EndTime":174819.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":174935.0,"Objects":[{"StartTime":174935.0,"EndTime":174935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":175051.0,"Objects":[{"StartTime":175051.0,"EndTime":175051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":175166.0,"EndTime":175166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":175281.0,"Objects":[{"StartTime":175281.0,"EndTime":175281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":175396.0,"EndTime":175396.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":175512.0,"Objects":[{"StartTime":175512.0,"EndTime":175512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":175742.0,"EndTime":175742.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":175858.0,"Objects":[{"StartTime":175858.0,"EndTime":175858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":175974.0,"Objects":[{"StartTime":175974.0,"EndTime":175974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":176204.0,"EndTime":176204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":176320.0,"Objects":[{"StartTime":176320.0,"EndTime":176320.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":176435.0,"Objects":[{"StartTime":176435.0,"EndTime":176435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":176665.0,"EndTime":176665.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":176781.0,"Objects":[{"StartTime":176781.0,"EndTime":176781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":176897.0,"Objects":[{"StartTime":176897.0,"EndTime":176897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":177012.0,"EndTime":177012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":177127.0,"Objects":[{"StartTime":177127.0,"EndTime":177127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":177242.0,"EndTime":177242.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":177358.0,"Objects":[{"StartTime":177358.0,"EndTime":177358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true}]},{"StartTime":177474.0,"Objects":[{"StartTime":177474.0,"EndTime":177474.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":177589.0,"Objects":[{"StartTime":177589.0,"EndTime":177589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":177704.0,"Objects":[{"StartTime":177704.0,"EndTime":177704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":177820.0,"Objects":[{"StartTime":177820.0,"EndTime":177820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":177935.0,"Objects":[{"StartTime":177935.0,"EndTime":177935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":178051.0,"Objects":[{"StartTime":178051.0,"EndTime":178051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":178166.0,"Objects":[{"StartTime":178166.0,"EndTime":178166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":178281.0,"Objects":[{"StartTime":178281.0,"EndTime":178281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":178396.0,"EndTime":178396.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":178512.0,"Objects":[{"StartTime":178512.0,"EndTime":178512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":178627.0,"EndTime":178627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":178743.0,"Objects":[{"StartTime":178743.0,"EndTime":178743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":178858.0,"EndTime":178858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":178974.0,"Objects":[{"StartTime":178974.0,"EndTime":178974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":179089.0,"EndTime":179089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":179204.0,"Objects":[{"StartTime":179204.0,"EndTime":179204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":179319.0,"EndTime":179319.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":179435.0,"Objects":[{"StartTime":179435.0,"EndTime":179435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":179550.0,"EndTime":179550.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":179666.0,"Objects":[{"StartTime":179666.0,"EndTime":179666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":179781.0,"Objects":[{"StartTime":179781.0,"EndTime":179781.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":179839.0,"Objects":[{"StartTime":179839.0,"EndTime":179839.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":179897.0,"Objects":[{"StartTime":179897.0,"EndTime":179897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":180012.0,"Objects":[{"StartTime":180012.0,"EndTime":180012.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":180127.0,"Objects":[{"StartTime":180127.0,"EndTime":180127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":180243.0,"Objects":[{"StartTime":180243.0,"EndTime":180243.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":180301.0,"Objects":[{"StartTime":180301.0,"EndTime":180301.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":180358.0,"Objects":[{"StartTime":180358.0,"EndTime":180358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":180473.0,"EndTime":180473.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":180589.0,"Objects":[{"StartTime":180589.0,"EndTime":180589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":180704.0,"Objects":[{"StartTime":180704.0,"EndTime":180704.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":180820.0,"Objects":[{"StartTime":180820.0,"EndTime":180820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":180935.0,"Objects":[{"StartTime":180935.0,"EndTime":180935.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":181051.0,"Objects":[{"StartTime":181051.0,"EndTime":181051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":181281.0,"EndTime":181281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":181397.0,"Objects":[{"StartTime":181397.0,"EndTime":181397.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":181512.0,"Objects":[{"StartTime":181512.0,"EndTime":181512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":181742.0,"EndTime":181742.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":181858.0,"Objects":[{"StartTime":181858.0,"EndTime":181858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":181974.0,"Objects":[{"StartTime":181974.0,"EndTime":181974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":182089.0,"EndTime":182089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":182204.0,"Objects":[{"StartTime":182204.0,"EndTime":182204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":182377.0,"EndTime":182377.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":182435.0,"Objects":[{"StartTime":182435.0,"EndTime":182435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":182550.0,"EndTime":182550.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":182666.0,"Objects":[{"StartTime":182666.0,"EndTime":182666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":182781.0,"Objects":[{"StartTime":182781.0,"EndTime":182781.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":183011.0,"EndTime":183011.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":183127.0,"Objects":[{"StartTime":183127.0,"EndTime":183127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":183357.0,"EndTime":183357.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":183474.0,"Objects":[{"StartTime":183474.0,"EndTime":183474.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":183589.0,"EndTime":183589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":183704.0,"Objects":[{"StartTime":183704.0,"EndTime":183704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":183820.0,"Objects":[{"StartTime":183820.0,"EndTime":183820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":184050.0,"EndTime":184050.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":184166.0,"Objects":[{"StartTime":184166.0,"EndTime":184166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":184281.0,"Objects":[{"StartTime":184281.0,"EndTime":184281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":184396.0,"EndTime":184396.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":184512.0,"Objects":[{"StartTime":184512.0,"EndTime":184512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":184627.0,"EndTime":184627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":184743.0,"Objects":[{"StartTime":184743.0,"EndTime":184743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":184973.0,"EndTime":184973.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":185089.0,"Objects":[{"StartTime":185089.0,"EndTime":185089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":185204.0,"Objects":[{"StartTime":185204.0,"EndTime":185204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":185434.0,"EndTime":185434.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":185551.0,"Objects":[{"StartTime":185551.0,"EndTime":185551.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":185666.0,"Objects":[{"StartTime":185666.0,"EndTime":185666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":185781.0,"EndTime":185781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":185897.0,"Objects":[{"StartTime":185897.0,"EndTime":185897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":186070.0,"EndTime":186070.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":186127.0,"Objects":[{"StartTime":186127.0,"EndTime":186127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":186242.0,"EndTime":186242.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":186358.0,"Objects":[{"StartTime":186358.0,"EndTime":186358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":186474.0,"Objects":[{"StartTime":186474.0,"EndTime":186474.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":186704.0,"EndTime":186704.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":186820.0,"Objects":[{"StartTime":186820.0,"EndTime":186820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":187050.0,"EndTime":187050.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":187166.0,"Objects":[{"StartTime":187166.0,"EndTime":187166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":187281.0,"Objects":[{"StartTime":187281.0,"EndTime":187281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":187396.0,"EndTime":187396.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":187512.0,"Objects":[{"StartTime":187512.0,"EndTime":187512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":187742.0,"EndTime":187742.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":187858.0,"Objects":[{"StartTime":187858.0,"EndTime":187858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":187974.0,"Objects":[{"StartTime":187974.0,"EndTime":187974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":188089.0,"EndTime":188089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":188204.0,"Objects":[{"StartTime":188204.0,"EndTime":188204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":188319.0,"EndTime":188319.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":188435.0,"Objects":[{"StartTime":188435.0,"EndTime":188435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":188665.0,"EndTime":188665.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":188781.0,"Objects":[{"StartTime":188781.0,"EndTime":188781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":188897.0,"Objects":[{"StartTime":188897.0,"EndTime":188897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":189127.0,"EndTime":189127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":189243.0,"Objects":[{"StartTime":189243.0,"EndTime":189243.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":189358.0,"Objects":[{"StartTime":189358.0,"EndTime":189358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":189473.0,"EndTime":189473.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":189589.0,"Objects":[{"StartTime":189589.0,"EndTime":189589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":189819.0,"EndTime":189819.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":189935.0,"Objects":[{"StartTime":189935.0,"EndTime":189935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":190051.0,"Objects":[{"StartTime":190051.0,"EndTime":190051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":190166.0,"EndTime":190166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":190281.0,"Objects":[{"StartTime":190281.0,"EndTime":190281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":190511.0,"EndTime":190511.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":190627.0,"Objects":[{"StartTime":190627.0,"EndTime":190627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":190743.0,"Objects":[{"StartTime":190743.0,"EndTime":190743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":190858.0,"EndTime":190858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":190974.0,"Objects":[{"StartTime":190974.0,"EndTime":190974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":191089.0,"EndTime":191089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":191204.0,"Objects":[{"StartTime":191204.0,"EndTime":191204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":191434.0,"EndTime":191434.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":191551.0,"Objects":[{"StartTime":191551.0,"EndTime":191551.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":191666.0,"Objects":[{"StartTime":191666.0,"EndTime":191666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":191781.0,"EndTime":191781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":191897.0,"Objects":[{"StartTime":191897.0,"EndTime":191897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":192012.0,"EndTime":192012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":192127.0,"Objects":[{"StartTime":192127.0,"EndTime":192819.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":193051.0,"Objects":[{"StartTime":193051.0,"EndTime":193051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":193974.0,"Objects":[{"StartTime":193974.0,"EndTime":194666.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":194898.0,"Objects":[{"StartTime":194898.0,"EndTime":194898.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":195127.0,"Objects":[{"StartTime":195127.0,"EndTime":195127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":195358.0,"Objects":[{"StartTime":195358.0,"EndTime":195358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":195589.0,"Objects":[{"StartTime":195589.0,"EndTime":195589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":195704.0,"EndTime":195704.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":195820.0,"Objects":[{"StartTime":195820.0,"EndTime":195820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":195935.0,"EndTime":195935.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":196051.0,"Objects":[{"StartTime":196051.0,"EndTime":196051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":196166.0,"EndTime":196166.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":196281.0,"Objects":[{"StartTime":196281.0,"EndTime":196281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":196397.0,"Objects":[{"StartTime":196397.0,"EndTime":196397.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":196454.0,"Objects":[{"StartTime":196454.0,"EndTime":196454.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":196512.0,"Objects":[{"StartTime":196512.0,"EndTime":196512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":196570.0,"Objects":[{"StartTime":196570.0,"EndTime":196570.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":196627.0,"Objects":[{"StartTime":196627.0,"EndTime":196627.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":196685.0,"Objects":[{"StartTime":196685.0,"EndTime":196685.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":196743.0,"Objects":[{"StartTime":196743.0,"EndTime":196743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":196801.0,"Objects":[{"StartTime":196801.0,"EndTime":196801.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":196858.0,"Objects":[{"StartTime":196858.0,"EndTime":196858.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":196916.0,"Objects":[{"StartTime":196916.0,"EndTime":196916.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":196974.0,"Objects":[{"StartTime":196974.0,"EndTime":196974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":197031.0,"Objects":[{"StartTime":197031.0,"EndTime":197031.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":197089.0,"Objects":[{"StartTime":197089.0,"EndTime":197089.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":197147.0,"Objects":[{"StartTime":197147.0,"EndTime":197147.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":197204.0,"Objects":[{"StartTime":197204.0,"EndTime":197204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":197262.0,"Objects":[{"StartTime":197262.0,"EndTime":197262.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":197320.0,"Objects":[{"StartTime":197320.0,"EndTime":197320.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":197377.0,"Objects":[{"StartTime":197377.0,"EndTime":197377.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":197435.0,"Objects":[{"StartTime":197435.0,"EndTime":197435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":197493.0,"Objects":[{"StartTime":197493.0,"EndTime":197493.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":197551.0,"Objects":[{"StartTime":197551.0,"EndTime":197551.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":197608.0,"Objects":[{"StartTime":197608.0,"EndTime":197608.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":197666.0,"Objects":[{"StartTime":197666.0,"EndTime":197666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":197896.0,"EndTime":197896.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":198012.0,"Objects":[{"StartTime":198012.0,"EndTime":198012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":198127.0,"Objects":[{"StartTime":198127.0,"EndTime":198127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":198357.0,"EndTime":198357.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":198473.0,"Objects":[{"StartTime":198473.0,"EndTime":198473.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":198589.0,"Objects":[{"StartTime":198589.0,"EndTime":198589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":198704.0,"EndTime":198704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":198820.0,"Objects":[{"StartTime":198820.0,"EndTime":198820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":199051.0,"Objects":[{"StartTime":199051.0,"EndTime":199051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":199166.0,"EndTime":199166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":199281.0,"Objects":[{"StartTime":199281.0,"EndTime":199281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":199396.0,"Objects":[{"StartTime":199396.0,"EndTime":199396.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":199512.0,"Objects":[{"StartTime":199512.0,"EndTime":199512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":199742.0,"EndTime":199742.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":199858.0,"Objects":[{"StartTime":199858.0,"EndTime":199858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":199974.0,"Objects":[{"StartTime":199974.0,"EndTime":199974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":200089.0,"EndTime":200089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":200204.0,"Objects":[{"StartTime":200204.0,"EndTime":200204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":200319.0,"EndTime":200319.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":200435.0,"Objects":[{"StartTime":200435.0,"EndTime":200435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":200551.0,"Objects":[{"StartTime":200551.0,"EndTime":200551.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":200666.0,"Objects":[{"StartTime":200666.0,"EndTime":200666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":200781.0,"EndTime":200781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":200897.0,"Objects":[{"StartTime":200897.0,"EndTime":200897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":201012.0,"EndTime":201012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":201127.0,"Objects":[{"StartTime":201127.0,"EndTime":201127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":201242.0,"EndTime":201242.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":201358.0,"Objects":[{"StartTime":201358.0,"EndTime":201358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":201588.0,"EndTime":201588.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":201704.0,"Objects":[{"StartTime":201704.0,"EndTime":201704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":201820.0,"Objects":[{"StartTime":201820.0,"EndTime":201820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":201935.0,"EndTime":201935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":202051.0,"Objects":[{"StartTime":202051.0,"EndTime":202051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":202166.0,"EndTime":202166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":202281.0,"Objects":[{"StartTime":202281.0,"EndTime":202281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":202397.0,"Objects":[{"StartTime":202397.0,"EndTime":202397.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":202512.0,"Objects":[{"StartTime":202512.0,"EndTime":202512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":202627.0,"EndTime":202627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":202743.0,"Objects":[{"StartTime":202743.0,"EndTime":202743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":202973.0,"EndTime":202973.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":203089.0,"Objects":[{"StartTime":203089.0,"EndTime":203089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":203204.0,"Objects":[{"StartTime":203204.0,"EndTime":203204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":203319.0,"EndTime":203319.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":203435.0,"Objects":[{"StartTime":203435.0,"EndTime":203435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":203550.0,"EndTime":203550.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":203666.0,"Objects":[{"StartTime":203666.0,"EndTime":203666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":203896.0,"EndTime":203896.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":204012.0,"Objects":[{"StartTime":204012.0,"EndTime":204012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":204127.0,"Objects":[{"StartTime":204127.0,"EndTime":204127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":204242.0,"EndTime":204242.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":204358.0,"Objects":[{"StartTime":204358.0,"EndTime":204358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":204474.0,"Objects":[{"StartTime":204474.0,"EndTime":204474.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":204589.0,"Objects":[{"StartTime":204589.0,"EndTime":204589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":204704.0,"EndTime":204704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":204820.0,"Objects":[{"StartTime":204820.0,"EndTime":204820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":204935.0,"Objects":[{"StartTime":204935.0,"EndTime":204935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":205051.0,"Objects":[{"StartTime":205051.0,"EndTime":205051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":205281.0,"EndTime":205281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":205397.0,"Objects":[{"StartTime":205397.0,"EndTime":205397.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":205512.0,"Objects":[{"StartTime":205512.0,"EndTime":205512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":205627.0,"EndTime":205627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":205743.0,"Objects":[{"StartTime":205743.0,"EndTime":205743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":205858.0,"EndTime":205858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":205974.0,"Objects":[{"StartTime":205974.0,"EndTime":205974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":206089.0,"EndTime":206089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":206204.0,"Objects":[{"StartTime":206204.0,"EndTime":206204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":206320.0,"Objects":[{"StartTime":206320.0,"EndTime":206320.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":206435.0,"Objects":[{"StartTime":206435.0,"EndTime":206435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":206665.0,"EndTime":206665.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":206781.0,"Objects":[{"StartTime":206781.0,"EndTime":206781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":206897.0,"Objects":[{"StartTime":206897.0,"EndTime":206897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":207127.0,"EndTime":207127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":207358.0,"Objects":[{"StartTime":207358.0,"EndTime":207358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":207473.0,"EndTime":207473.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":207589.0,"Objects":[{"StartTime":207589.0,"EndTime":207589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":207704.0,"EndTime":207704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":207820.0,"Objects":[{"StartTime":207820.0,"EndTime":207820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":208050.0,"EndTime":208050.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":208166.0,"Objects":[{"StartTime":208166.0,"EndTime":208166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":208281.0,"Objects":[{"StartTime":208281.0,"EndTime":208281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":208396.0,"EndTime":208396.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":208512.0,"Objects":[{"StartTime":208512.0,"EndTime":208512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":208627.0,"EndTime":208627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":208743.0,"Objects":[{"StartTime":208743.0,"EndTime":209204.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":209320.0,"Objects":[{"StartTime":209320.0,"EndTime":209320.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":209435.0,"Objects":[{"StartTime":209435.0,"EndTime":209435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":209550.0,"EndTime":209550.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":209666.0,"Objects":[{"StartTime":209666.0,"EndTime":209666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":209781.0,"EndTime":209781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":209897.0,"Objects":[{"StartTime":209897.0,"EndTime":209897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":210012.0,"EndTime":210012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":210127.0,"Objects":[{"StartTime":210127.0,"EndTime":210127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":210243.0,"Objects":[{"StartTime":210243.0,"EndTime":210243.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":210358.0,"Objects":[{"StartTime":210358.0,"EndTime":210358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":210589.0,"Objects":[{"StartTime":210589.0,"EndTime":210589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":210704.0,"EndTime":210704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":210820.0,"Objects":[{"StartTime":210820.0,"EndTime":210820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":210935.0,"Objects":[{"StartTime":210935.0,"EndTime":210935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":211051.0,"Objects":[{"StartTime":211051.0,"EndTime":211051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":211166.0,"EndTime":211166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":211281.0,"Objects":[{"StartTime":211281.0,"EndTime":211281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":211397.0,"Objects":[{"StartTime":211397.0,"EndTime":211397.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":211512.0,"Objects":[{"StartTime":211512.0,"EndTime":211512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":211742.0,"EndTime":211742.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":211858.0,"Objects":[{"StartTime":211858.0,"EndTime":211858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":211974.0,"Objects":[{"StartTime":211974.0,"EndTime":211974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":212089.0,"Objects":[{"StartTime":212089.0,"EndTime":212089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":212204.0,"Objects":[{"StartTime":212204.0,"EndTime":212204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":212320.0,"Objects":[{"StartTime":212320.0,"EndTime":212320.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":212435.0,"Objects":[{"StartTime":212435.0,"EndTime":212435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":212665.0,"EndTime":212665.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":212781.0,"Objects":[{"StartTime":212781.0,"EndTime":212781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":212897.0,"Objects":[{"StartTime":212897.0,"EndTime":212897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":213127.0,"EndTime":213127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":213243.0,"Objects":[{"StartTime":213243.0,"EndTime":213243.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":213358.0,"Objects":[{"StartTime":213358.0,"EndTime":213358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":213473.0,"EndTime":213473.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":213589.0,"Objects":[{"StartTime":213589.0,"EndTime":213589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":213820.0,"Objects":[{"StartTime":213820.0,"EndTime":213820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":213935.0,"EndTime":213935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":214051.0,"Objects":[{"StartTime":214051.0,"EndTime":214051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":214166.0,"Objects":[{"StartTime":214166.0,"EndTime":214166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":214281.0,"Objects":[{"StartTime":214281.0,"EndTime":214281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":214396.0,"EndTime":214396.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":214512.0,"Objects":[{"StartTime":214512.0,"EndTime":214512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":214628.0,"Objects":[{"StartTime":214628.0,"EndTime":214628.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":214743.0,"Objects":[{"StartTime":214743.0,"EndTime":214743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":214858.0,"EndTime":214858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":214974.0,"Objects":[{"StartTime":214974.0,"EndTime":214974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":215089.0,"EndTime":215089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":215204.0,"Objects":[{"StartTime":215204.0,"EndTime":215204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":215320.0,"Objects":[{"StartTime":215320.0,"EndTime":215320.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":215435.0,"Objects":[{"StartTime":215435.0,"EndTime":215435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":215550.0,"EndTime":215550.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":215666.0,"Objects":[{"StartTime":215666.0,"EndTime":215666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":215896.0,"EndTime":215896.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":216012.0,"Objects":[{"StartTime":216012.0,"EndTime":216012.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":216070.0,"Objects":[{"StartTime":216070.0,"EndTime":216070.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":216127.0,"Objects":[{"StartTime":216127.0,"EndTime":216127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":216242.0,"EndTime":216242.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":216358.0,"Objects":[{"StartTime":216358.0,"EndTime":216358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":216473.0,"EndTime":216473.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":216589.0,"Objects":[{"StartTime":216589.0,"EndTime":216589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":216819.0,"EndTime":216819.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":216935.0,"Objects":[{"StartTime":216935.0,"EndTime":216935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":217051.0,"Objects":[{"StartTime":217051.0,"EndTime":217051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":217166.0,"EndTime":217166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":217281.0,"Objects":[{"StartTime":217281.0,"EndTime":217281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":217511.0,"EndTime":217511.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":217627.0,"Objects":[{"StartTime":217627.0,"EndTime":217627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":217742.0,"EndTime":217742.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":217858.0,"Objects":[{"StartTime":217858.0,"EndTime":217858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":217974.0,"Objects":[{"StartTime":217974.0,"EndTime":217974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":218089.0,"EndTime":218089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":218204.0,"Objects":[{"StartTime":218204.0,"EndTime":218204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":218319.0,"EndTime":218319.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":218435.0,"Objects":[{"StartTime":218435.0,"EndTime":218435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":218550.0,"EndTime":218550.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":218666.0,"Objects":[{"StartTime":218666.0,"EndTime":218666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":218781.0,"EndTime":218781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":218897.0,"Objects":[{"StartTime":218897.0,"EndTime":218897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":219070.0,"EndTime":219070.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":219127.0,"Objects":[{"StartTime":219127.0,"EndTime":219127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":219300.0,"EndTime":219300.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":219358.0,"Objects":[{"StartTime":219358.0,"EndTime":219358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":219531.0,"EndTime":219531.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":219589.0,"Objects":[{"StartTime":219589.0,"EndTime":219589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":219704.0,"EndTime":219704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":219820.0,"Objects":[{"StartTime":219820.0,"EndTime":219820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":220050.0,"EndTime":220050.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":220166.0,"Objects":[{"StartTime":220166.0,"EndTime":220166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":220281.0,"Objects":[{"StartTime":220281.0,"EndTime":220281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":220396.0,"EndTime":220396.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":220512.0,"Objects":[{"StartTime":220512.0,"EndTime":220512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":220627.0,"EndTime":220627.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":220743.0,"Objects":[{"StartTime":220743.0,"EndTime":220743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":220858.0,"EndTime":220858.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":220974.0,"Objects":[{"StartTime":220974.0,"EndTime":220974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":221089.0,"Objects":[{"StartTime":221089.0,"EndTime":221089.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":221204.0,"Objects":[{"StartTime":221204.0,"EndTime":221204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":221434.0,"EndTime":221434.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":221551.0,"Objects":[{"StartTime":221551.0,"EndTime":221551.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":221608.0,"Objects":[{"StartTime":221608.0,"EndTime":221608.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":221666.0,"Objects":[{"StartTime":221666.0,"EndTime":221666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":221781.0,"EndTime":221781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":221897.0,"Objects":[{"StartTime":221897.0,"EndTime":221897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":222127.0,"EndTime":222127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":222243.0,"Objects":[{"StartTime":222243.0,"EndTime":222243.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":222358.0,"Objects":[{"StartTime":222358.0,"EndTime":222358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":222473.0,"EndTime":222473.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":222589.0,"Objects":[{"StartTime":222589.0,"EndTime":222589.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":222704.0,"EndTime":222704.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":222820.0,"Objects":[{"StartTime":222820.0,"EndTime":222820.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":222935.0,"EndTime":222935.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":223051.0,"Objects":[{"StartTime":223051.0,"EndTime":223051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":223166.0,"EndTime":223166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":223281.0,"Objects":[{"StartTime":223281.0,"EndTime":223281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":223397.0,"Objects":[{"StartTime":223397.0,"EndTime":223397.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":223512.0,"Objects":[{"StartTime":223512.0,"EndTime":223512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":223742.0,"EndTime":223742.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":223858.0,"Objects":[{"StartTime":223858.0,"EndTime":223858.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":224088.0,"EndTime":224088.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":224204.0,"Objects":[{"StartTime":224204.0,"EndTime":224204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":224319.0,"EndTime":224319.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":224435.0,"Objects":[{"StartTime":224435.0,"EndTime":224435.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":224551.0,"Objects":[{"StartTime":224551.0,"EndTime":224551.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":224666.0,"Objects":[{"StartTime":224666.0,"EndTime":224666.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":224781.0,"EndTime":224781.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":224897.0,"Objects":[{"StartTime":224897.0,"EndTime":224897.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":225012.0,"Objects":[{"StartTime":225012.0,"EndTime":225012.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":225127.0,"Objects":[{"StartTime":225127.0,"EndTime":225127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":225242.0,"EndTime":225242.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":225358.0,"Objects":[{"StartTime":225358.0,"EndTime":225358.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":225588.0,"EndTime":225588.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":225704.0,"Objects":[{"StartTime":225704.0,"EndTime":225704.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":225934.0,"EndTime":225934.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":226051.0,"Objects":[{"StartTime":226051.0,"EndTime":226051.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":226166.0,"EndTime":226166.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":226281.0,"Objects":[{"StartTime":226281.0,"EndTime":226281.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":226512.0,"Objects":[{"StartTime":226512.0,"EndTime":226512.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":226627.0,"Objects":[{"StartTime":226627.0,"EndTime":226627.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":226743.0,"Objects":[{"StartTime":226743.0,"EndTime":226743.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":226858.0,"Objects":[{"StartTime":226858.0,"EndTime":226858.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":226974.0,"Objects":[{"StartTime":226974.0,"EndTime":226974.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":227089.0,"Objects":[{"StartTime":227089.0,"EndTime":227089.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":227204.0,"Objects":[{"StartTime":227204.0,"EndTime":227204.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":227665.0,"EndTime":227665.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":228588.0,"Objects":[{"StartTime":228588.0,"EndTime":228588.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":229049.0,"EndTime":229049.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":229280.0,"Objects":[{"StartTime":229280.0,"EndTime":229280.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":229741.0,"EndTime":229741.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":229973.0,"Objects":[{"StartTime":229973.0,"EndTime":229973.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":230204.0,"Objects":[{"StartTime":230204.0,"EndTime":230204.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":230434.0,"Objects":[{"StartTime":230434.0,"EndTime":230434.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":230665.0,"Objects":[{"StartTime":230665.0,"EndTime":230665.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":230896.0,"Objects":[{"StartTime":230896.0,"EndTime":230896.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":231357.0,"EndTime":231357.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":232280.0,"Objects":[{"StartTime":232280.0,"EndTime":232280.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":232741.0,"EndTime":232741.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":232973.0,"Objects":[{"StartTime":232973.0,"EndTime":232973.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":233434.0,"EndTime":233434.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":233665.0,"Objects":[{"StartTime":233665.0,"EndTime":233665.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":233896.0,"Objects":[{"StartTime":233896.0,"EndTime":233896.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":234127.0,"Objects":[{"StartTime":234127.0,"EndTime":234127.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":234357.0,"Objects":[{"StartTime":234357.0,"EndTime":234357.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":234588.0,"Objects":[{"StartTime":234588.0,"EndTime":234588.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":235049.0,"EndTime":235049.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":235973.0,"Objects":[{"StartTime":235973.0,"EndTime":235973.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":236434.0,"EndTime":236434.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":236665.0,"Objects":[{"StartTime":236665.0,"EndTime":236665.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":237126.0,"EndTime":237126.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":237357.0,"Objects":[{"StartTime":237357.0,"EndTime":237357.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":237587.0,"EndTime":237587.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":237819.0,"Objects":[{"StartTime":237819.0,"EndTime":237819.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":238050.0,"Objects":[{"StartTime":238050.0,"EndTime":238050.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":238280.0,"Objects":[{"StartTime":238280.0,"EndTime":238280.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":238741.0,"EndTime":238741.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":239204.0,"Objects":[{"StartTime":239204.0,"EndTime":239204.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":239434.0,"Objects":[{"StartTime":239434.0,"EndTime":239434.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":239665.0,"Objects":[{"StartTime":239665.0,"EndTime":239665.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":239896.0,"Objects":[{"StartTime":239896.0,"EndTime":239896.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":240127.0,"Objects":[{"StartTime":240127.0,"EndTime":240127.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":240357.0,"Objects":[{"StartTime":240357.0,"EndTime":240357.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":240588.0,"Objects":[{"StartTime":240588.0,"EndTime":240588.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":240819.0,"Objects":[{"StartTime":240819.0,"EndTime":240819.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":241050.0,"Objects":[{"StartTime":241050.0,"EndTime":241050.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":241280.0,"Objects":[{"StartTime":241280.0,"EndTime":241280.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":241511.0,"Objects":[{"StartTime":241511.0,"EndTime":241511.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":241742.0,"Objects":[{"StartTime":241742.0,"EndTime":241742.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":241973.0,"Objects":[{"StartTime":241973.0,"EndTime":241973.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":242434.0,"EndTime":242434.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":242665.0,"Objects":[{"StartTime":242665.0,"EndTime":242665.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":242895.0,"EndTime":242895.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":243127.0,"Objects":[{"StartTime":243127.0,"EndTime":243127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":243357.0,"Objects":[{"StartTime":243357.0,"EndTime":243357.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":243588.0,"Objects":[{"StartTime":243588.0,"EndTime":243588.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":243819.0,"Objects":[{"StartTime":243819.0,"EndTime":243819.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":244050.0,"Objects":[{"StartTime":244050.0,"EndTime":244050.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":244280.0,"EndTime":244280.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":244511.0,"Objects":[{"StartTime":244511.0,"EndTime":244511.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":244972.0,"EndTime":244972.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":245204.0,"Objects":[{"StartTime":245204.0,"EndTime":245204.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":245434.0,"Objects":[{"StartTime":245434.0,"EndTime":245434.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":245895.0,"EndTime":245895.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":246357.0,"Objects":[{"StartTime":246357.0,"EndTime":246357.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":246588.0,"Objects":[{"StartTime":246588.0,"EndTime":246588.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":246819.0,"Objects":[{"StartTime":246819.0,"EndTime":246819.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":247049.0,"EndTime":247049.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":247280.0,"Objects":[{"StartTime":247280.0,"EndTime":247280.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":247511.0,"Objects":[{"StartTime":247511.0,"EndTime":247511.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":247741.0,"EndTime":247741.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":247973.0,"Objects":[{"StartTime":247973.0,"EndTime":247973.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":248203.0,"EndTime":248203.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":248434.0,"EndTime":248434.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":248665.0,"Objects":[{"StartTime":248665.0,"EndTime":248665.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":248896.0,"Objects":[{"StartTime":248896.0,"EndTime":248896.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":249127.0,"Objects":[{"StartTime":249127.0,"EndTime":249127.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":249357.0,"EndTime":249357.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":249588.0,"Objects":[{"StartTime":249588.0,"EndTime":249588.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":249819.0,"Objects":[{"StartTime":249819.0,"EndTime":249819.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":250050.0,"Objects":[{"StartTime":250050.0,"EndTime":250050.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":250280.0,"EndTime":250280.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":250511.0,"Objects":[{"StartTime":250511.0,"EndTime":250511.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":250742.0,"Objects":[{"StartTime":250742.0,"EndTime":250742.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":251203.0,"EndTime":251203.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":251550.0,"Objects":[{"StartTime":251550.0,"EndTime":251550.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":251898.0,"EndTime":251898.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":252247.0,"Objects":[{"StartTime":252247.0,"EndTime":252247.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":252702.0,"Objects":[{"StartTime":252702.0,"EndTime":252702.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":253059.0,"EndTime":253059.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":253506.0,"Objects":[{"StartTime":253506.0,"EndTime":253506.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":254095.0,"Objects":[{"StartTime":254095.0,"EndTime":254095.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":254661.0,"EndTime":254661.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":255580.0,"Objects":[{"StartTime":255580.0,"EndTime":255580.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":256480.0,"Objects":[{"StartTime":256480.0,"EndTime":256480.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":257588.0,"EndTime":257588.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":257747.0,"Objects":[{"StartTime":257747.0,"EndTime":257747.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":258697.0,"EndTime":258697.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":258892.0,"Objects":[{"StartTime":258892.0,"EndTime":258892.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":261023.0,"EndTime":261023.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":263154.0,"EndTime":263154.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":263197.0,"Objects":[{"StartTime":263197.0,"EndTime":263197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":263427.0,"EndTime":263427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":263543.0,"Objects":[{"StartTime":263543.0,"EndTime":263543.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":263658.0,"Objects":[{"StartTime":263658.0,"EndTime":263658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":263888.0,"EndTime":263888.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":264004.0,"Objects":[{"StartTime":264004.0,"EndTime":264004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":264120.0,"Objects":[{"StartTime":264120.0,"EndTime":264120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":264235.0,"EndTime":264235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":264350.0,"Objects":[{"StartTime":264350.0,"EndTime":264350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":264465.0,"EndTime":264465.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":264581.0,"Objects":[{"StartTime":264581.0,"EndTime":264581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":264697.0,"Objects":[{"StartTime":264697.0,"EndTime":264697.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":264812.0,"Objects":[{"StartTime":264812.0,"EndTime":264812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":264927.0,"Objects":[{"StartTime":264927.0,"EndTime":264927.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":265043.0,"Objects":[{"StartTime":265043.0,"EndTime":265043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":265273.0,"EndTime":265273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":265389.0,"Objects":[{"StartTime":265389.0,"EndTime":265389.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":265504.0,"Objects":[{"StartTime":265504.0,"EndTime":265504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":265734.0,"EndTime":265734.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":265850.0,"Objects":[{"StartTime":265850.0,"EndTime":265850.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":265966.0,"Objects":[{"StartTime":265966.0,"EndTime":265966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":266081.0,"EndTime":266081.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":266197.0,"Objects":[{"StartTime":266197.0,"EndTime":266197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":266312.0,"EndTime":266312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":266427.0,"Objects":[{"StartTime":266427.0,"EndTime":266427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":266543.0,"Objects":[{"StartTime":266543.0,"EndTime":266543.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":266658.0,"Objects":[{"StartTime":266658.0,"EndTime":266658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":266773.0,"Objects":[{"StartTime":266773.0,"EndTime":266773.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":266889.0,"Objects":[{"StartTime":266889.0,"EndTime":266889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":267119.0,"EndTime":267119.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":267235.0,"Objects":[{"StartTime":267235.0,"EndTime":267235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":267350.0,"Objects":[{"StartTime":267350.0,"EndTime":267350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":267465.0,"EndTime":267465.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":267581.0,"Objects":[{"StartTime":267581.0,"EndTime":267581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":267697.0,"Objects":[{"StartTime":267697.0,"EndTime":267697.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":267812.0,"Objects":[{"StartTime":267812.0,"EndTime":267812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":267927.0,"EndTime":267927.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":268043.0,"Objects":[{"StartTime":268043.0,"EndTime":268043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":268158.0,"EndTime":268158.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":268273.0,"Objects":[{"StartTime":268273.0,"EndTime":268273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":268389.0,"Objects":[{"StartTime":268389.0,"EndTime":268389.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":268504.0,"Objects":[{"StartTime":268504.0,"EndTime":268504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":268620.0,"Objects":[{"StartTime":268620.0,"EndTime":268620.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":268735.0,"Objects":[{"StartTime":268735.0,"EndTime":268735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":268965.0,"EndTime":268965.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":269081.0,"Objects":[{"StartTime":269081.0,"EndTime":269081.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":269197.0,"Objects":[{"StartTime":269197.0,"EndTime":269197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":269312.0,"EndTime":269312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":269427.0,"Objects":[{"StartTime":269427.0,"EndTime":269427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":269543.0,"Objects":[{"StartTime":269543.0,"EndTime":269543.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":269658.0,"Objects":[{"StartTime":269658.0,"EndTime":269658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":269773.0,"EndTime":269773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":269889.0,"Objects":[{"StartTime":269889.0,"EndTime":269889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":270004.0,"EndTime":270004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":270120.0,"Objects":[{"StartTime":270120.0,"EndTime":270120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":270235.0,"Objects":[{"StartTime":270235.0,"EndTime":270235.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":270350.0,"Objects":[{"StartTime":270350.0,"EndTime":270350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":270466.0,"Objects":[{"StartTime":270466.0,"EndTime":270466.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":270523.0,"Objects":[{"StartTime":270523.0,"EndTime":270523.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":270581.0,"Objects":[{"StartTime":270581.0,"EndTime":270581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":270638.0,"EndTime":270638.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":270697.0,"Objects":[{"StartTime":270697.0,"EndTime":270697.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":270754.0,"EndTime":270754.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":270812.0,"Objects":[{"StartTime":270812.0,"EndTime":270812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":270869.0,"EndTime":270869.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":270927.0,"Objects":[{"StartTime":270927.0,"EndTime":270927.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":270984.0,"EndTime":270984.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":271042.0,"EndTime":271042.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":271158.0,"Objects":[{"StartTime":271158.0,"EndTime":271158.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":271215.0,"EndTime":271215.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":271273.0,"Objects":[{"StartTime":271273.0,"EndTime":271273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":271331.0,"Objects":[{"StartTime":271331.0,"EndTime":271331.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":271389.0,"Objects":[{"StartTime":271389.0,"EndTime":271389.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":271447.0,"Objects":[{"StartTime":271447.0,"EndTime":271447.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":271504.0,"Objects":[{"StartTime":271504.0,"EndTime":271504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":271619.0,"EndTime":271619.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":271735.0,"Objects":[{"StartTime":271735.0,"EndTime":271735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":271793.0,"Objects":[{"StartTime":271793.0,"EndTime":271793.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":271850.0,"Objects":[{"StartTime":271850.0,"EndTime":271850.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":271908.0,"Objects":[{"StartTime":271908.0,"EndTime":271908.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":271966.0,"Objects":[{"StartTime":271966.0,"EndTime":271966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":272023.0,"EndTime":272023.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":272081.0,"EndTime":272081.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":272139.0,"EndTime":272139.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":272197.0,"Objects":[{"StartTime":272197.0,"EndTime":272197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":272312.0,"EndTime":272312.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":272370.0,"Objects":[{"StartTime":272370.0,"EndTime":272370.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":272427.0,"Objects":[{"StartTime":272427.0,"EndTime":272427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":272485.0,"Objects":[{"StartTime":272485.0,"EndTime":272485.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":272543.0,"Objects":[{"StartTime":272543.0,"EndTime":272543.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":272600.0,"Objects":[{"StartTime":272600.0,"EndTime":272600.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":272658.0,"Objects":[{"StartTime":272658.0,"EndTime":272658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":272716.0,"Objects":[{"StartTime":272716.0,"EndTime":272716.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":272773.0,"Objects":[{"StartTime":272773.0,"EndTime":272773.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":272830.0,"EndTime":272830.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":272889.0,"Objects":[{"StartTime":272889.0,"EndTime":272889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":272947.0,"Objects":[{"StartTime":272947.0,"EndTime":272947.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":273004.0,"Objects":[{"StartTime":273004.0,"EndTime":273004.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":273062.0,"Objects":[{"StartTime":273062.0,"EndTime":273062.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":273120.0,"Objects":[{"StartTime":273120.0,"EndTime":273120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":273177.0,"Objects":[{"StartTime":273177.0,"EndTime":273177.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":273235.0,"Objects":[{"StartTime":273235.0,"EndTime":273235.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":273292.0,"EndTime":273292.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":273350.0,"Objects":[{"StartTime":273350.0,"EndTime":273350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":273408.0,"Objects":[{"StartTime":273408.0,"EndTime":273408.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":273466.0,"Objects":[{"StartTime":273466.0,"EndTime":273466.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":273523.0,"Objects":[{"StartTime":273523.0,"EndTime":273523.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":273581.0,"Objects":[{"StartTime":273581.0,"EndTime":273581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":273639.0,"Objects":[{"StartTime":273639.0,"EndTime":273639.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":273697.0,"Objects":[{"StartTime":273697.0,"EndTime":273697.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":273754.0,"Objects":[{"StartTime":273754.0,"EndTime":273754.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":273812.0,"Objects":[{"StartTime":273812.0,"EndTime":273812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":273927.0,"EndTime":273927.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":273985.0,"Objects":[{"StartTime":273985.0,"EndTime":273985.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":274043.0,"Objects":[{"StartTime":274043.0,"EndTime":274043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":274158.0,"EndTime":274158.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":274273.0,"Objects":[{"StartTime":274273.0,"EndTime":274273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":274388.0,"EndTime":274388.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":274447.0,"Objects":[{"StartTime":274447.0,"EndTime":274447.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":274504.0,"Objects":[{"StartTime":274504.0,"EndTime":274504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":274619.0,"EndTime":274619.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":274735.0,"Objects":[{"StartTime":274735.0,"EndTime":274735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":274850.0,"EndTime":274850.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":274908.0,"Objects":[{"StartTime":274908.0,"EndTime":274908.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":274966.0,"Objects":[{"StartTime":274966.0,"EndTime":274966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":275081.0,"EndTime":275081.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":275197.0,"Objects":[{"StartTime":275197.0,"EndTime":275197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":275312.0,"Objects":[{"StartTime":275312.0,"EndTime":275312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":275370.0,"Objects":[{"StartTime":275370.0,"EndTime":275370.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":275427.0,"Objects":[{"StartTime":275427.0,"EndTime":275427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":275542.0,"EndTime":275542.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":275658.0,"Objects":[{"StartTime":275658.0,"EndTime":275658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":275773.0,"EndTime":275773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":275889.0,"Objects":[{"StartTime":275889.0,"EndTime":275889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":276004.0,"EndTime":276004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":276062.0,"Objects":[{"StartTime":276062.0,"EndTime":276062.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":276120.0,"Objects":[{"StartTime":276120.0,"EndTime":276120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":276177.0,"EndTime":276177.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":276235.0,"EndTime":276235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":276292.0,"EndTime":276292.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":276350.0,"EndTime":276350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":276407.0,"EndTime":276407.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":276465.0,"EndTime":276465.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":276522.0,"EndTime":276522.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":276581.0,"Objects":[{"StartTime":276581.0,"EndTime":276581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":276638.0,"EndTime":276638.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":276696.0,"EndTime":276696.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":276753.0,"EndTime":276753.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":276811.0,"EndTime":276811.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":276868.0,"EndTime":276868.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":276926.0,"EndTime":276926.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":276983.0,"EndTime":276983.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":277043.0,"Objects":[{"StartTime":277043.0,"EndTime":277043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":277158.0,"Objects":[{"StartTime":277158.0,"EndTime":277158.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":277273.0,"Objects":[{"StartTime":277273.0,"EndTime":277273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":277389.0,"Objects":[{"StartTime":277389.0,"EndTime":277389.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":277504.0,"Objects":[{"StartTime":277504.0,"EndTime":277504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":277562.0,"Objects":[{"StartTime":277562.0,"EndTime":277562.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":277620.0,"Objects":[{"StartTime":277620.0,"EndTime":277620.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":277677.0,"Objects":[{"StartTime":277677.0,"EndTime":277677.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":277735.0,"Objects":[{"StartTime":277735.0,"EndTime":277735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":277793.0,"Objects":[{"StartTime":277793.0,"EndTime":277793.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":277850.0,"Objects":[{"StartTime":277850.0,"EndTime":277850.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":277908.0,"Objects":[{"StartTime":277908.0,"EndTime":277908.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":277966.0,"Objects":[{"StartTime":277966.0,"EndTime":277966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":278196.0,"EndTime":278196.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":278312.0,"Objects":[{"StartTime":278312.0,"EndTime":278312.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":278542.0,"EndTime":278542.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":278658.0,"Objects":[{"StartTime":278658.0,"EndTime":278658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":278773.0,"EndTime":278773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":278889.0,"Objects":[{"StartTime":278889.0,"EndTime":278889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":279004.0,"Objects":[{"StartTime":279004.0,"EndTime":279004.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":279234.0,"EndTime":279234.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":279350.0,"Objects":[{"StartTime":279350.0,"EndTime":279350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":279465.0,"EndTime":279465.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":279581.0,"Objects":[{"StartTime":279581.0,"EndTime":279581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":279696.0,"EndTime":279696.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":279812.0,"Objects":[{"StartTime":279812.0,"EndTime":279812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":280042.0,"EndTime":280042.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":280158.0,"Objects":[{"StartTime":280158.0,"EndTime":280158.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":280388.0,"EndTime":280388.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":280504.0,"Objects":[{"StartTime":280504.0,"EndTime":280504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":280619.0,"EndTime":280619.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":280735.0,"Objects":[{"StartTime":280735.0,"EndTime":280735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":280850.0,"Objects":[{"StartTime":280850.0,"EndTime":280850.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":281080.0,"EndTime":281080.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":281197.0,"Objects":[{"StartTime":281197.0,"EndTime":281197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":281312.0,"EndTime":281312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":281427.0,"Objects":[{"StartTime":281427.0,"EndTime":281427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":281542.0,"EndTime":281542.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":281600.0,"Objects":[{"StartTime":281600.0,"EndTime":281600.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":281658.0,"Objects":[{"StartTime":281658.0,"EndTime":281658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":281888.0,"EndTime":281888.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":282004.0,"Objects":[{"StartTime":282004.0,"EndTime":282004.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":282234.0,"EndTime":282234.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":282350.0,"Objects":[{"StartTime":282350.0,"EndTime":282350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":282465.0,"EndTime":282465.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":282581.0,"Objects":[{"StartTime":282581.0,"EndTime":282581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":282697.0,"Objects":[{"StartTime":282697.0,"EndTime":282697.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":282927.0,"EndTime":282927.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":283043.0,"Objects":[{"StartTime":283043.0,"EndTime":283043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":283158.0,"EndTime":283158.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":283273.0,"Objects":[{"StartTime":283273.0,"EndTime":283273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":283388.0,"EndTime":283388.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":283504.0,"Objects":[{"StartTime":283504.0,"EndTime":283504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":283734.0,"EndTime":283734.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":283850.0,"Objects":[{"StartTime":283850.0,"EndTime":283850.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":284080.0,"EndTime":284080.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":284197.0,"Objects":[{"StartTime":284197.0,"EndTime":284197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":284312.0,"EndTime":284312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":284427.0,"Objects":[{"StartTime":284427.0,"EndTime":284427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":284543.0,"Objects":[{"StartTime":284543.0,"EndTime":284543.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":284658.0,"Objects":[{"StartTime":284658.0,"EndTime":284658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":284773.0,"Objects":[{"StartTime":284773.0,"EndTime":284773.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":284889.0,"Objects":[{"StartTime":284889.0,"EndTime":284889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":285062.0,"EndTime":285062.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":285120.0,"Objects":[{"StartTime":285120.0,"EndTime":285120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":285293.0,"EndTime":285293.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":285350.0,"Objects":[{"StartTime":285350.0,"EndTime":285350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":285580.0,"EndTime":285580.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":285697.0,"Objects":[{"StartTime":285697.0,"EndTime":285697.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":285927.0,"EndTime":285927.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":286043.0,"Objects":[{"StartTime":286043.0,"EndTime":286043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":286158.0,"EndTime":286158.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":286273.0,"Objects":[{"StartTime":286273.0,"EndTime":286273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":286389.0,"Objects":[{"StartTime":286389.0,"EndTime":286389.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":286619.0,"EndTime":286619.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":286735.0,"Objects":[{"StartTime":286735.0,"EndTime":286735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":286850.0,"EndTime":286850.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":286966.0,"Objects":[{"StartTime":286966.0,"EndTime":286966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":287081.0,"EndTime":287081.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":287197.0,"Objects":[{"StartTime":287197.0,"EndTime":287197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":287427.0,"EndTime":287427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":287543.0,"Objects":[{"StartTime":287543.0,"EndTime":287543.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":287773.0,"EndTime":287773.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":287889.0,"Objects":[{"StartTime":287889.0,"EndTime":287889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":288004.0,"EndTime":288004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":288120.0,"Objects":[{"StartTime":288120.0,"EndTime":288120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":288235.0,"Objects":[{"StartTime":288235.0,"EndTime":288235.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":288465.0,"EndTime":288465.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":288581.0,"Objects":[{"StartTime":288581.0,"EndTime":288581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":288696.0,"EndTime":288696.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":288812.0,"Objects":[{"StartTime":288812.0,"EndTime":288812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":288927.0,"EndTime":288927.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":288985.0,"Objects":[{"StartTime":288985.0,"EndTime":288985.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":289043.0,"Objects":[{"StartTime":289043.0,"EndTime":289043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":289273.0,"EndTime":289273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":289389.0,"Objects":[{"StartTime":289389.0,"EndTime":289389.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":289619.0,"EndTime":289619.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":289735.0,"Objects":[{"StartTime":289735.0,"EndTime":289735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":289850.0,"EndTime":289850.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":289966.0,"Objects":[{"StartTime":289966.0,"EndTime":289966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":290081.0,"Objects":[{"StartTime":290081.0,"EndTime":290081.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":290311.0,"EndTime":290311.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":290427.0,"Objects":[{"StartTime":290427.0,"EndTime":290427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":290542.0,"EndTime":290542.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":290658.0,"Objects":[{"StartTime":290658.0,"EndTime":290658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":290773.0,"EndTime":290773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":290889.0,"Objects":[{"StartTime":290889.0,"EndTime":290889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":291119.0,"EndTime":291119.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":291235.0,"Objects":[{"StartTime":291235.0,"EndTime":291235.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":291465.0,"EndTime":291465.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":291581.0,"Objects":[{"StartTime":291581.0,"EndTime":291581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":291696.0,"EndTime":291696.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":291812.0,"Objects":[{"StartTime":291812.0,"EndTime":291812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":292042.0,"EndTime":292042.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":292158.0,"Objects":[{"StartTime":292158.0,"EndTime":292158.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":292273.0,"Objects":[{"StartTime":292273.0,"EndTime":292273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":292446.0,"EndTime":292446.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":292504.0,"Objects":[{"StartTime":292504.0,"EndTime":292504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":292619.0,"EndTime":292619.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":292735.0,"Objects":[{"StartTime":292735.0,"EndTime":292735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":292850.0,"EndTime":292850.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":292966.0,"Objects":[{"StartTime":292966.0,"EndTime":292966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":293196.0,"EndTime":293196.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":293312.0,"Objects":[{"StartTime":293312.0,"EndTime":293312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":293427.0,"Objects":[{"StartTime":293427.0,"EndTime":293427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":293542.0,"EndTime":293542.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":293658.0,"Objects":[{"StartTime":293658.0,"EndTime":293658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":293773.0,"Objects":[{"StartTime":293773.0,"EndTime":293773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":293889.0,"Objects":[{"StartTime":293889.0,"EndTime":293889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":294004.0,"EndTime":294004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":294120.0,"Objects":[{"StartTime":294120.0,"EndTime":294120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":294235.0,"Objects":[{"StartTime":294235.0,"EndTime":294235.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":294350.0,"Objects":[{"StartTime":294350.0,"EndTime":294350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":294466.0,"Objects":[{"StartTime":294466.0,"EndTime":294466.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":294581.0,"Objects":[{"StartTime":294581.0,"EndTime":294581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":294638.0,"EndTime":294638.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":294696.0,"EndTime":294696.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":294754.0,"EndTime":294754.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":294812.0,"Objects":[{"StartTime":294812.0,"EndTime":294812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":294869.0,"EndTime":294869.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":294927.0,"EndTime":294927.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":294985.0,"EndTime":294985.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":295043.0,"Objects":[{"StartTime":295043.0,"EndTime":295043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":295100.0,"Objects":[{"StartTime":295100.0,"EndTime":295100.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":295158.0,"Objects":[{"StartTime":295158.0,"EndTime":295158.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":295216.0,"Objects":[{"StartTime":295216.0,"EndTime":295216.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":295273.0,"Objects":[{"StartTime":295273.0,"EndTime":295273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":295331.0,"Objects":[{"StartTime":295331.0,"EndTime":295331.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":295389.0,"Objects":[{"StartTime":295389.0,"EndTime":295389.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":295447.0,"Objects":[{"StartTime":295447.0,"EndTime":295447.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":295504.0,"Objects":[{"StartTime":295504.0,"EndTime":295504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":295734.0,"EndTime":295734.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":295850.0,"Objects":[{"StartTime":295850.0,"EndTime":295850.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":295966.0,"Objects":[{"StartTime":295966.0,"EndTime":295966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":296196.0,"EndTime":296196.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":296312.0,"Objects":[{"StartTime":296312.0,"EndTime":296312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":296427.0,"Objects":[{"StartTime":296427.0,"EndTime":296427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":296542.0,"EndTime":296542.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":296658.0,"Objects":[{"StartTime":296658.0,"EndTime":296658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":296831.0,"EndTime":296831.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":296889.0,"Objects":[{"StartTime":296889.0,"EndTime":296889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":297004.0,"EndTime":297004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":297120.0,"Objects":[{"StartTime":297120.0,"EndTime":297120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":297235.0,"Objects":[{"StartTime":297235.0,"EndTime":297235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":297350.0,"Objects":[{"StartTime":297350.0,"EndTime":297350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":297580.0,"EndTime":297580.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":297697.0,"Objects":[{"StartTime":297697.0,"EndTime":297697.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":297927.0,"EndTime":297927.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":298043.0,"Objects":[{"StartTime":298043.0,"EndTime":298043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":298158.0,"EndTime":298158.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":298273.0,"Objects":[{"StartTime":298273.0,"EndTime":298273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":298503.0,"EndTime":298503.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":298620.0,"Objects":[{"StartTime":298620.0,"EndTime":298620.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":298735.0,"EndTime":298735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":298850.0,"Objects":[{"StartTime":298850.0,"EndTime":298850.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":298966.0,"Objects":[{"StartTime":298966.0,"EndTime":298966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":299081.0,"Objects":[{"StartTime":299081.0,"EndTime":299081.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":299197.0,"Objects":[{"StartTime":299197.0,"EndTime":299197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":299427.0,"EndTime":299427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":299543.0,"Objects":[{"StartTime":299543.0,"EndTime":299543.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":299658.0,"Objects":[{"StartTime":299658.0,"EndTime":299658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":299888.0,"EndTime":299888.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":300004.0,"Objects":[{"StartTime":300004.0,"EndTime":300004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":300120.0,"Objects":[{"StartTime":300120.0,"EndTime":300120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":300235.0,"EndTime":300235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":300350.0,"Objects":[{"StartTime":300350.0,"EndTime":300350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":300523.0,"EndTime":300523.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":300581.0,"Objects":[{"StartTime":300581.0,"EndTime":300581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":300696.0,"EndTime":300696.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":300812.0,"Objects":[{"StartTime":300812.0,"EndTime":300812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":300927.0,"EndTime":300927.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":301043.0,"Objects":[{"StartTime":301043.0,"EndTime":301043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":301273.0,"EndTime":301273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":301389.0,"Objects":[{"StartTime":301389.0,"EndTime":301389.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":301504.0,"Objects":[{"StartTime":301504.0,"EndTime":301504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":301734.0,"EndTime":301734.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":301850.0,"Objects":[{"StartTime":301850.0,"EndTime":301850.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":301966.0,"Objects":[{"StartTime":301966.0,"EndTime":301966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":302081.0,"EndTime":302081.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":302197.0,"Objects":[{"StartTime":302197.0,"EndTime":302197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":302312.0,"EndTime":302312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":302427.0,"Objects":[{"StartTime":302427.0,"EndTime":302427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":302657.0,"EndTime":302657.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":302773.0,"Objects":[{"StartTime":302773.0,"EndTime":302773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":302889.0,"Objects":[{"StartTime":302889.0,"EndTime":302889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":303004.0,"EndTime":303004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":303120.0,"Objects":[{"StartTime":303120.0,"EndTime":303120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":303235.0,"EndTime":303235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":303350.0,"Objects":[{"StartTime":303350.0,"EndTime":303350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":303580.0,"EndTime":303580.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":303697.0,"Objects":[{"StartTime":303697.0,"EndTime":303697.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":303812.0,"Objects":[{"StartTime":303812.0,"EndTime":303812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":304042.0,"EndTime":304042.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":304158.0,"Objects":[{"StartTime":304158.0,"EndTime":304158.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":304273.0,"Objects":[{"StartTime":304273.0,"EndTime":304273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":304388.0,"EndTime":304388.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":304504.0,"Objects":[{"StartTime":304504.0,"EndTime":304504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":304619.0,"EndTime":304619.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":304735.0,"Objects":[{"StartTime":304735.0,"EndTime":304735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":304965.0,"EndTime":304965.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":305081.0,"Objects":[{"StartTime":305081.0,"EndTime":305081.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":305311.0,"EndTime":305311.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":305427.0,"Objects":[{"StartTime":305427.0,"EndTime":305427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":305543.0,"Objects":[{"StartTime":305543.0,"EndTime":305543.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":305658.0,"Objects":[{"StartTime":305658.0,"EndTime":305658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":305888.0,"EndTime":305888.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":306004.0,"Objects":[{"StartTime":306004.0,"EndTime":306004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":306120.0,"Objects":[{"StartTime":306120.0,"EndTime":306120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":306235.0,"EndTime":306235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":306350.0,"Objects":[{"StartTime":306350.0,"EndTime":306350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":306465.0,"EndTime":306465.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":306581.0,"Objects":[{"StartTime":306581.0,"EndTime":306581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":306696.0,"EndTime":306696.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":306812.0,"Objects":[{"StartTime":306812.0,"EndTime":306812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":306927.0,"Objects":[{"StartTime":306927.0,"EndTime":306927.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":307043.0,"Objects":[{"StartTime":307043.0,"EndTime":307043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":307273.0,"EndTime":307273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":307389.0,"Objects":[{"StartTime":307389.0,"EndTime":307389.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":307504.0,"Objects":[{"StartTime":307504.0,"EndTime":307504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":307619.0,"EndTime":307619.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":307735.0,"Objects":[{"StartTime":307735.0,"EndTime":307735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":307850.0,"EndTime":307850.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":307966.0,"Objects":[{"StartTime":307966.0,"EndTime":307966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":308081.0,"EndTime":308081.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":308197.0,"Objects":[{"StartTime":308197.0,"EndTime":308197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":308312.0,"EndTime":308312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":308427.0,"Objects":[{"StartTime":308427.0,"EndTime":308427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":308543.0,"Objects":[{"StartTime":308543.0,"EndTime":308543.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":308658.0,"Objects":[{"StartTime":308658.0,"EndTime":308658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":308889.0,"Objects":[{"StartTime":308889.0,"EndTime":308889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":309004.0,"Objects":[{"StartTime":309004.0,"EndTime":309004.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":309062.0,"Objects":[{"StartTime":309062.0,"EndTime":309062.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":309120.0,"Objects":[{"StartTime":309120.0,"EndTime":309120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":309177.0,"Objects":[{"StartTime":309177.0,"EndTime":309177.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":309235.0,"Objects":[{"StartTime":309235.0,"EndTime":309235.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":309293.0,"Objects":[{"StartTime":309293.0,"EndTime":309293.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":309350.0,"Objects":[{"StartTime":309350.0,"EndTime":309350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":309408.0,"Objects":[{"StartTime":309408.0,"EndTime":309408.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":309466.0,"Objects":[{"StartTime":309466.0,"EndTime":309466.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":309523.0,"Objects":[{"StartTime":309523.0,"EndTime":309523.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":309581.0,"Objects":[{"StartTime":309581.0,"EndTime":309581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":309639.0,"Objects":[{"StartTime":309639.0,"EndTime":309639.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":309697.0,"Objects":[{"StartTime":309697.0,"EndTime":309697.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":309754.0,"Objects":[{"StartTime":309754.0,"EndTime":309754.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":309812.0,"Objects":[{"StartTime":309812.0,"EndTime":309812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":309869.0,"EndTime":309869.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":309927.0,"Objects":[{"StartTime":309927.0,"EndTime":309927.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":309984.0,"EndTime":309984.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":310043.0,"Objects":[{"StartTime":310043.0,"EndTime":310043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":310100.0,"EndTime":310100.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":310158.0,"Objects":[{"StartTime":310158.0,"EndTime":310158.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":310216.0,"Objects":[{"StartTime":310216.0,"EndTime":310216.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":310273.0,"Objects":[{"StartTime":310273.0,"EndTime":310273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":310503.0,"EndTime":310503.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":310620.0,"Objects":[{"StartTime":310620.0,"EndTime":310620.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":310735.0,"Objects":[{"StartTime":310735.0,"EndTime":310735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":310965.0,"EndTime":310965.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":311081.0,"Objects":[{"StartTime":311081.0,"EndTime":311081.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":311197.0,"Objects":[{"StartTime":311197.0,"EndTime":311197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":311312.0,"EndTime":311312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":311427.0,"Objects":[{"StartTime":311427.0,"EndTime":311427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":311658.0,"Objects":[{"StartTime":311658.0,"EndTime":311658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":311773.0,"EndTime":311773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":311889.0,"Objects":[{"StartTime":311889.0,"EndTime":311889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":312004.0,"Objects":[{"StartTime":312004.0,"EndTime":312004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":312120.0,"Objects":[{"StartTime":312120.0,"EndTime":312120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":312350.0,"EndTime":312350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":312466.0,"Objects":[{"StartTime":312466.0,"EndTime":312466.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":312581.0,"Objects":[{"StartTime":312581.0,"EndTime":312581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":312696.0,"EndTime":312696.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":312812.0,"Objects":[{"StartTime":312812.0,"EndTime":312812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":312927.0,"EndTime":312927.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":313043.0,"Objects":[{"StartTime":313043.0,"EndTime":313043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":313158.0,"Objects":[{"StartTime":313158.0,"EndTime":313158.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":313273.0,"Objects":[{"StartTime":313273.0,"EndTime":313273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":313388.0,"EndTime":313388.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":313504.0,"Objects":[{"StartTime":313504.0,"EndTime":313504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":313619.0,"EndTime":313619.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":313735.0,"Objects":[{"StartTime":313735.0,"EndTime":313735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":313850.0,"EndTime":313850.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":313966.0,"Objects":[{"StartTime":313966.0,"EndTime":313966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":314196.0,"EndTime":314196.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":314312.0,"Objects":[{"StartTime":314312.0,"EndTime":314312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":314427.0,"Objects":[{"StartTime":314427.0,"EndTime":314427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":314542.0,"EndTime":314542.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":314658.0,"Objects":[{"StartTime":314658.0,"EndTime":314658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":314773.0,"EndTime":314773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":314889.0,"Objects":[{"StartTime":314889.0,"EndTime":314889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":315062.0,"EndTime":315062.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":315120.0,"Objects":[{"StartTime":315120.0,"EndTime":315120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":315235.0,"EndTime":315235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":315350.0,"Objects":[{"StartTime":315350.0,"EndTime":315350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":315580.0,"EndTime":315580.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":315697.0,"Objects":[{"StartTime":315697.0,"EndTime":315697.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":315812.0,"Objects":[{"StartTime":315812.0,"EndTime":315812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":315927.0,"EndTime":315927.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":316043.0,"Objects":[{"StartTime":316043.0,"EndTime":316043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":316158.0,"EndTime":316158.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":316273.0,"Objects":[{"StartTime":316273.0,"EndTime":316273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":316388.0,"EndTime":316388.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":316504.0,"Objects":[{"StartTime":316504.0,"EndTime":316504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":316619.0,"EndTime":316619.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":316735.0,"Objects":[{"StartTime":316735.0,"EndTime":316735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":316965.0,"EndTime":316965.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":317081.0,"Objects":[{"StartTime":317081.0,"EndTime":317081.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":317197.0,"Objects":[{"StartTime":317197.0,"EndTime":317197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":317427.0,"EndTime":317427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":317543.0,"Objects":[{"StartTime":317543.0,"EndTime":317543.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":317600.0,"Objects":[{"StartTime":317600.0,"EndTime":317600.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":317658.0,"Objects":[{"StartTime":317658.0,"EndTime":317658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":317888.0,"EndTime":317888.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":318004.0,"Objects":[{"StartTime":318004.0,"EndTime":318004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":318120.0,"Objects":[{"StartTime":318120.0,"EndTime":318120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":318235.0,"EndTime":318235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":318350.0,"Objects":[{"StartTime":318350.0,"EndTime":318350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":318465.0,"EndTime":318465.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":318581.0,"Objects":[{"StartTime":318581.0,"EndTime":318581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":318811.0,"EndTime":318811.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":318927.0,"Objects":[{"StartTime":318927.0,"EndTime":318927.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":319043.0,"Objects":[{"StartTime":319043.0,"EndTime":319043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":319273.0,"EndTime":319273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":319389.0,"Objects":[{"StartTime":319389.0,"EndTime":319389.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":319504.0,"Objects":[{"StartTime":319504.0,"EndTime":319504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":319734.0,"EndTime":319734.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":319966.0,"Objects":[{"StartTime":319966.0,"EndTime":319966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":320081.0,"EndTime":320081.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":320197.0,"Objects":[{"StartTime":320197.0,"EndTime":320197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":320312.0,"EndTime":320312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":320427.0,"Objects":[{"StartTime":320427.0,"EndTime":320427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":320657.0,"EndTime":320657.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":320773.0,"Objects":[{"StartTime":320773.0,"EndTime":320773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":320889.0,"Objects":[{"StartTime":320889.0,"EndTime":320889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":321004.0,"EndTime":321004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":321120.0,"Objects":[{"StartTime":321120.0,"EndTime":321120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":321235.0,"EndTime":321235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":321350.0,"Objects":[{"StartTime":321350.0,"EndTime":321811.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":321927.0,"Objects":[{"StartTime":321927.0,"EndTime":321927.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":322043.0,"Objects":[{"StartTime":322043.0,"EndTime":322043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":322158.0,"EndTime":322158.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":322273.0,"Objects":[{"StartTime":322273.0,"EndTime":322273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":322388.0,"EndTime":322388.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":322504.0,"Objects":[{"StartTime":322504.0,"EndTime":322504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":322619.0,"EndTime":322619.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":322735.0,"Objects":[{"StartTime":322735.0,"EndTime":322735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":322850.0,"EndTime":322850.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":322966.0,"Objects":[{"StartTime":322966.0,"EndTime":322966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":323081.0,"Objects":[{"StartTime":323081.0,"EndTime":323081.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":323197.0,"Objects":[{"StartTime":323197.0,"EndTime":323197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":323312.0,"EndTime":323312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":323427.0,"Objects":[{"StartTime":323427.0,"EndTime":323427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":323542.0,"EndTime":323542.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":323658.0,"Objects":[{"StartTime":323658.0,"EndTime":323658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":323773.0,"EndTime":323773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":323888.0,"Objects":[{"StartTime":323888.0,"EndTime":323888.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":324003.0,"EndTime":324003.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":324120.0,"Objects":[{"StartTime":324120.0,"EndTime":324120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":324177.0,"Objects":[{"StartTime":324177.0,"EndTime":324177.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":324235.0,"Objects":[{"StartTime":324235.0,"EndTime":324235.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":324293.0,"Objects":[{"StartTime":324293.0,"EndTime":324293.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":324350.0,"Objects":[{"StartTime":324350.0,"EndTime":324350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":324408.0,"Objects":[{"StartTime":324408.0,"EndTime":324408.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":324466.0,"Objects":[{"StartTime":324466.0,"EndTime":324466.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":324523.0,"Objects":[{"StartTime":324523.0,"EndTime":324523.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":324581.0,"Objects":[{"StartTime":324581.0,"EndTime":324581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":324638.0,"Objects":[{"StartTime":324638.0,"EndTime":324638.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":324696.0,"Objects":[{"StartTime":324696.0,"EndTime":324696.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":324754.0,"Objects":[{"StartTime":324754.0,"EndTime":324754.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":324811.0,"Objects":[{"StartTime":324811.0,"EndTime":324811.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":324870.0,"Objects":[{"StartTime":324870.0,"EndTime":324870.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":324927.0,"Objects":[{"StartTime":324927.0,"EndTime":324927.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":324985.0,"Objects":[{"StartTime":324985.0,"EndTime":324985.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":325043.0,"Objects":[{"StartTime":325043.0,"EndTime":325043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":325273.0,"EndTime":325273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":325389.0,"Objects":[{"StartTime":325389.0,"EndTime":325389.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":325504.0,"Objects":[{"StartTime":325504.0,"EndTime":325504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":325734.0,"EndTime":325734.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":325850.0,"Objects":[{"StartTime":325850.0,"EndTime":325850.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":325966.0,"Objects":[{"StartTime":325966.0,"EndTime":325966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":326081.0,"EndTime":326081.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":326197.0,"Objects":[{"StartTime":326197.0,"EndTime":326197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":326427.0,"Objects":[{"StartTime":326427.0,"EndTime":326427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":326542.0,"EndTime":326542.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":326658.0,"Objects":[{"StartTime":326658.0,"EndTime":326658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":326773.0,"EndTime":326773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":326889.0,"Objects":[{"StartTime":326889.0,"EndTime":326889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":327119.0,"EndTime":327119.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":327235.0,"Objects":[{"StartTime":327235.0,"EndTime":327235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":327350.0,"Objects":[{"StartTime":327350.0,"EndTime":327350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":327465.0,"EndTime":327465.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":327581.0,"Objects":[{"StartTime":327581.0,"EndTime":327581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":327696.0,"EndTime":327696.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":327812.0,"Objects":[{"StartTime":327812.0,"EndTime":327812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":327927.0,"Objects":[{"StartTime":327927.0,"EndTime":327927.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":328043.0,"Objects":[{"StartTime":328043.0,"EndTime":328043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":328158.0,"EndTime":328158.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":328273.0,"Objects":[{"StartTime":328273.0,"EndTime":328273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":328388.0,"EndTime":328388.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":328504.0,"Objects":[{"StartTime":328504.0,"EndTime":328504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":328619.0,"EndTime":328619.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":328735.0,"Objects":[{"StartTime":328735.0,"EndTime":328735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":328965.0,"EndTime":328965.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":329081.0,"Objects":[{"StartTime":329081.0,"EndTime":329081.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":329197.0,"Objects":[{"StartTime":329197.0,"EndTime":329197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":329312.0,"EndTime":329312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":329427.0,"Objects":[{"StartTime":329427.0,"EndTime":329427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":329542.0,"EndTime":329542.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":329658.0,"Objects":[{"StartTime":329658.0,"EndTime":329658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":329831.0,"EndTime":329831.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":329889.0,"Objects":[{"StartTime":329889.0,"EndTime":329889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":330004.0,"EndTime":330004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":330120.0,"Objects":[{"StartTime":330120.0,"EndTime":330120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":330235.0,"EndTime":330235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":330350.0,"Objects":[{"StartTime":330350.0,"EndTime":330350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":330465.0,"EndTime":330465.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":330581.0,"Objects":[{"StartTime":330581.0,"EndTime":330581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":330754.0,"EndTime":330754.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":330812.0,"Objects":[{"StartTime":330812.0,"EndTime":330812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":330927.0,"EndTime":330927.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":331043.0,"Objects":[{"StartTime":331043.0,"EndTime":331043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":331158.0,"EndTime":331158.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":331273.0,"Objects":[{"StartTime":331273.0,"EndTime":331273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":331388.0,"EndTime":331388.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":331504.0,"Objects":[{"StartTime":331504.0,"EndTime":331504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":331677.0,"EndTime":331677.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":331735.0,"Objects":[{"StartTime":331735.0,"EndTime":331735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":331850.0,"EndTime":331850.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":331966.0,"Objects":[{"StartTime":331966.0,"EndTime":331966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":332081.0,"Objects":[{"StartTime":332081.0,"EndTime":332081.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":332138.0,"Objects":[{"StartTime":332138.0,"EndTime":332138.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":332196.0,"Objects":[{"StartTime":332196.0,"EndTime":332196.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":332254.0,"Objects":[{"StartTime":332254.0,"EndTime":332254.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":332312.0,"Objects":[{"StartTime":332312.0,"EndTime":332312.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":332370.0,"Objects":[{"StartTime":332370.0,"EndTime":332370.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":332427.0,"Objects":[{"StartTime":332427.0,"EndTime":332427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":332657.0,"EndTime":332657.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":332773.0,"Objects":[{"StartTime":332773.0,"EndTime":332773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":332889.0,"Objects":[{"StartTime":332889.0,"EndTime":332889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":333004.0,"EndTime":333004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":333120.0,"Objects":[{"StartTime":333120.0,"EndTime":333120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":333235.0,"EndTime":333235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":333350.0,"Objects":[{"StartTime":333350.0,"EndTime":333350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":333523.0,"EndTime":333523.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":333581.0,"Objects":[{"StartTime":333581.0,"EndTime":333581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":333696.0,"EndTime":333696.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":333812.0,"Objects":[{"StartTime":333812.0,"EndTime":333812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":333927.0,"EndTime":333927.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":334043.0,"Objects":[{"StartTime":334043.0,"EndTime":334043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":334158.0,"EndTime":334158.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":334273.0,"Objects":[{"StartTime":334273.0,"EndTime":334273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":334503.0,"EndTime":334503.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":334735.0,"Objects":[{"StartTime":334735.0,"EndTime":334735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":334850.0,"EndTime":334850.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":334966.0,"Objects":[{"StartTime":334966.0,"EndTime":334966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":335081.0,"EndTime":335081.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":335197.0,"Objects":[{"StartTime":335197.0,"EndTime":335197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":335427.0,"EndTime":335427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":335543.0,"Objects":[{"StartTime":335543.0,"EndTime":335543.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":335658.0,"Objects":[{"StartTime":335658.0,"EndTime":335658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":335888.0,"EndTime":335888.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":336004.0,"Objects":[{"StartTime":336004.0,"EndTime":336004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":336120.0,"Objects":[{"StartTime":336120.0,"EndTime":336120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":336293.0,"EndTime":336293.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":336350.0,"Objects":[{"StartTime":336350.0,"EndTime":336350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":336465.0,"EndTime":336465.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":336581.0,"Objects":[{"StartTime":336581.0,"EndTime":336581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":336696.0,"EndTime":336696.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":336812.0,"Objects":[{"StartTime":336812.0,"EndTime":336812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":336927.0,"EndTime":336927.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":337043.0,"Objects":[{"StartTime":337043.0,"EndTime":337043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":337100.0,"Objects":[{"StartTime":337100.0,"EndTime":337100.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":337158.0,"Objects":[{"StartTime":337158.0,"EndTime":337158.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":337216.0,"Objects":[{"StartTime":337216.0,"EndTime":337216.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":337273.0,"Objects":[{"StartTime":337273.0,"EndTime":337273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":337331.0,"Objects":[{"StartTime":337331.0,"EndTime":337331.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":337389.0,"Objects":[{"StartTime":337389.0,"EndTime":337389.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":337446.0,"Objects":[{"StartTime":337446.0,"EndTime":337446.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":337504.0,"Objects":[{"StartTime":337504.0,"EndTime":337504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":337561.0,"Objects":[{"StartTime":337561.0,"EndTime":337561.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":337619.0,"Objects":[{"StartTime":337619.0,"EndTime":337619.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":337677.0,"Objects":[{"StartTime":337677.0,"EndTime":337677.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":337734.0,"Objects":[{"StartTime":337734.0,"EndTime":337734.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":337793.0,"Objects":[{"StartTime":337793.0,"EndTime":337793.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":337851.0,"Objects":[{"StartTime":337851.0,"EndTime":337851.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":337909.0,"Objects":[{"StartTime":337909.0,"EndTime":337909.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":337966.0,"Objects":[{"StartTime":337966.0,"EndTime":337966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":338196.0,"EndTime":338196.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":338312.0,"Objects":[{"StartTime":338312.0,"EndTime":338312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":338427.0,"Objects":[{"StartTime":338427.0,"EndTime":338427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":338657.0,"EndTime":338657.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":338773.0,"Objects":[{"StartTime":338773.0,"EndTime":338773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":338889.0,"Objects":[{"StartTime":338889.0,"EndTime":338889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":339004.0,"EndTime":339004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":339120.0,"Objects":[{"StartTime":339120.0,"EndTime":339120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":339235.0,"EndTime":339235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":339350.0,"Objects":[{"StartTime":339350.0,"EndTime":339350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":339407.0,"Objects":[{"StartTime":339407.0,"EndTime":339407.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":339465.0,"Objects":[{"StartTime":339465.0,"EndTime":339465.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":339523.0,"Objects":[{"StartTime":339523.0,"EndTime":339523.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":339580.0,"Objects":[{"StartTime":339580.0,"EndTime":339580.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":339638.0,"Objects":[{"StartTime":339638.0,"EndTime":339638.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":339696.0,"Objects":[{"StartTime":339696.0,"EndTime":339696.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":339753.0,"Objects":[{"StartTime":339753.0,"EndTime":339753.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":339812.0,"Objects":[{"StartTime":339812.0,"EndTime":339812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":340042.0,"EndTime":340042.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":340158.0,"Objects":[{"StartTime":340158.0,"EndTime":340158.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":340273.0,"Objects":[{"StartTime":340273.0,"EndTime":340273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":340388.0,"EndTime":340388.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":340504.0,"Objects":[{"StartTime":340504.0,"EndTime":340504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":340619.0,"EndTime":340619.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":340735.0,"Objects":[{"StartTime":340735.0,"EndTime":340735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":340965.0,"EndTime":340965.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":341081.0,"Objects":[{"StartTime":341081.0,"EndTime":341081.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":341197.0,"Objects":[{"StartTime":341197.0,"EndTime":341197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":341312.0,"EndTime":341312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":341427.0,"Objects":[{"StartTime":341427.0,"EndTime":341427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":341542.0,"EndTime":341542.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":341658.0,"Objects":[{"StartTime":341658.0,"EndTime":341658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":341888.0,"EndTime":341888.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":342004.0,"Objects":[{"StartTime":342004.0,"EndTime":342004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":342120.0,"Objects":[{"StartTime":342120.0,"EndTime":342120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":342235.0,"EndTime":342235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":342350.0,"Objects":[{"StartTime":342350.0,"EndTime":342350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":342465.0,"EndTime":342465.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":342581.0,"Objects":[{"StartTime":342581.0,"EndTime":342581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":342811.0,"EndTime":342811.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":342927.0,"Objects":[{"StartTime":342927.0,"EndTime":342927.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":343043.0,"Objects":[{"StartTime":343043.0,"EndTime":343043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":343273.0,"EndTime":343273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":343389.0,"Objects":[{"StartTime":343389.0,"EndTime":343389.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":343447.0,"Objects":[{"StartTime":343447.0,"EndTime":343447.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":343504.0,"Objects":[{"StartTime":343504.0,"EndTime":343504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":343734.0,"EndTime":343734.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":343850.0,"Objects":[{"StartTime":343850.0,"EndTime":343850.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":344080.0,"EndTime":344080.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":344197.0,"Objects":[{"StartTime":344197.0,"EndTime":344197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":344312.0,"EndTime":344312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":344370.0,"Objects":[{"StartTime":344370.0,"EndTime":344370.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":344427.0,"Objects":[{"StartTime":344427.0,"EndTime":344427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":344657.0,"EndTime":344657.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":344773.0,"Objects":[{"StartTime":344773.0,"EndTime":344773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":344889.0,"Objects":[{"StartTime":344889.0,"EndTime":344889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":345004.0,"EndTime":345004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":345120.0,"Objects":[{"StartTime":345120.0,"EndTime":345120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":345235.0,"EndTime":345235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":345350.0,"Objects":[{"StartTime":345350.0,"EndTime":345350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":345465.0,"EndTime":345465.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":345581.0,"Objects":[{"StartTime":345581.0,"EndTime":345581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":345696.0,"EndTime":345696.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":345812.0,"Objects":[{"StartTime":345812.0,"EndTime":345812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":345927.0,"EndTime":345927.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":346043.0,"Objects":[{"StartTime":346043.0,"EndTime":346043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":346158.0,"EndTime":346158.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":346273.0,"Objects":[{"StartTime":346273.0,"EndTime":346273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":346446.0,"EndTime":346446.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":346504.0,"Objects":[{"StartTime":346504.0,"EndTime":346504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":346677.0,"EndTime":346677.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":346735.0,"Objects":[{"StartTime":346735.0,"EndTime":346735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":346908.0,"EndTime":346908.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":346966.0,"Objects":[{"StartTime":346966.0,"EndTime":346966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":347081.0,"EndTime":347081.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":347197.0,"Objects":[{"StartTime":347197.0,"EndTime":347197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":347427.0,"EndTime":347427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":347543.0,"Objects":[{"StartTime":347543.0,"EndTime":347543.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":347658.0,"Objects":[{"StartTime":347658.0,"EndTime":347658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":347773.0,"EndTime":347773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":347889.0,"Objects":[{"StartTime":347889.0,"EndTime":347889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":348004.0,"EndTime":348004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":348120.0,"Objects":[{"StartTime":348120.0,"EndTime":348120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":348235.0,"EndTime":348235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":348350.0,"Objects":[{"StartTime":348350.0,"EndTime":348350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":348465.0,"EndTime":348465.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":348581.0,"Objects":[{"StartTime":348581.0,"EndTime":348581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":348696.0,"EndTime":348696.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":348811.0,"Objects":[{"StartTime":348811.0,"EndTime":348811.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":348926.0,"EndTime":348926.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":348985.0,"Objects":[{"StartTime":348985.0,"EndTime":348985.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":349043.0,"Objects":[{"StartTime":349043.0,"EndTime":349043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":349273.0,"EndTime":349273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":349389.0,"Objects":[{"StartTime":349389.0,"EndTime":349389.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":349504.0,"Objects":[{"StartTime":349504.0,"EndTime":349504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":349619.0,"EndTime":349619.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":349735.0,"Objects":[{"StartTime":349735.0,"EndTime":349735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":349850.0,"EndTime":349850.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":349966.0,"Objects":[{"StartTime":349966.0,"EndTime":349966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":350196.0,"EndTime":350196.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":350312.0,"Objects":[{"StartTime":350312.0,"EndTime":350312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":350427.0,"Objects":[{"StartTime":350427.0,"EndTime":350427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":350657.0,"EndTime":350657.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":350773.0,"Objects":[{"StartTime":350773.0,"EndTime":350773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":350889.0,"Objects":[{"StartTime":350889.0,"EndTime":350889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":351119.0,"EndTime":351119.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":351235.0,"Objects":[{"StartTime":351235.0,"EndTime":351235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":351350.0,"Objects":[{"StartTime":351350.0,"EndTime":351350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":351580.0,"EndTime":351580.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":351812.0,"Objects":[{"StartTime":351812.0,"EndTime":351812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":352042.0,"EndTime":352042.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":352158.0,"Objects":[{"StartTime":352158.0,"EndTime":352158.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":352273.0,"Objects":[{"StartTime":352273.0,"EndTime":352273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":352388.0,"EndTime":352388.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":352504.0,"Objects":[{"StartTime":352504.0,"EndTime":352504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":352619.0,"EndTime":352619.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":352735.0,"Objects":[{"StartTime":352735.0,"EndTime":352735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":352965.0,"EndTime":352965.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":353081.0,"Objects":[{"StartTime":353081.0,"EndTime":353081.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":353197.0,"Objects":[{"StartTime":353197.0,"EndTime":353197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":353312.0,"EndTime":353312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":353427.0,"Objects":[{"StartTime":353427.0,"EndTime":353427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":353542.0,"EndTime":353542.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":353658.0,"Objects":[{"StartTime":353658.0,"EndTime":353658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":353773.0,"EndTime":353773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":353889.0,"Objects":[{"StartTime":353889.0,"EndTime":353889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":354004.0,"EndTime":354004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":354120.0,"Objects":[{"StartTime":354120.0,"EndTime":354120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":354235.0,"EndTime":354235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":354350.0,"Objects":[{"StartTime":354350.0,"EndTime":354350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":354465.0,"EndTime":354465.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":354581.0,"Objects":[{"StartTime":354581.0,"EndTime":354581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":354811.0,"EndTime":354811.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":354927.0,"Objects":[{"StartTime":354927.0,"EndTime":354927.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":355043.0,"Objects":[{"StartTime":355043.0,"EndTime":355043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":355273.0,"EndTime":355273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":355389.0,"Objects":[{"StartTime":355389.0,"EndTime":355389.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":355504.0,"Objects":[{"StartTime":355504.0,"EndTime":355504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":355620.0,"Objects":[{"StartTime":355620.0,"EndTime":355620.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":355735.0,"Objects":[{"StartTime":355735.0,"EndTime":355735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":355851.0,"Objects":[{"StartTime":355851.0,"EndTime":355851.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":355966.0,"Objects":[{"StartTime":355966.0,"EndTime":355966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":356082.0,"Objects":[{"StartTime":356082.0,"EndTime":356082.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":356197.0,"Objects":[{"StartTime":356197.0,"EndTime":356197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":356313.0,"Objects":[{"StartTime":356313.0,"EndTime":356313.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":356427.0,"Objects":[{"StartTime":356427.0,"EndTime":356427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":356657.0,"EndTime":356657.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":356773.0,"Objects":[{"StartTime":356773.0,"EndTime":356773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":356889.0,"Objects":[{"StartTime":356889.0,"EndTime":356889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":357004.0,"EndTime":357004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":357120.0,"Objects":[{"StartTime":357120.0,"EndTime":357120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":357235.0,"EndTime":357235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":357350.0,"Objects":[{"StartTime":357350.0,"EndTime":357350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":357580.0,"EndTime":357580.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":357697.0,"Objects":[{"StartTime":357697.0,"EndTime":357697.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":357812.0,"Objects":[{"StartTime":357812.0,"EndTime":357812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":357927.0,"Objects":[{"StartTime":357927.0,"EndTime":357927.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":358043.0,"Objects":[{"StartTime":358043.0,"EndTime":358043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":358158.0,"Objects":[{"StartTime":358158.0,"EndTime":358158.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":358273.0,"Objects":[{"StartTime":358273.0,"EndTime":358273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":358503.0,"EndTime":358503.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":358620.0,"Objects":[{"StartTime":358620.0,"EndTime":358620.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":358735.0,"Objects":[{"StartTime":358735.0,"EndTime":358735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":358850.0,"EndTime":358850.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":358966.0,"Objects":[{"StartTime":358966.0,"EndTime":358966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":359081.0,"EndTime":359081.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":359197.0,"Objects":[{"StartTime":359197.0,"EndTime":359658.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":359773.0,"Objects":[{"StartTime":359773.0,"EndTime":359773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":359889.0,"Objects":[{"StartTime":359889.0,"EndTime":359889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":360004.0,"Objects":[{"StartTime":360004.0,"EndTime":360004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":360120.0,"Objects":[{"StartTime":360120.0,"EndTime":360120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":360350.0,"EndTime":360350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":360466.0,"Objects":[{"StartTime":360466.0,"EndTime":360466.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":360581.0,"Objects":[{"StartTime":360581.0,"EndTime":360581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":360696.0,"EndTime":360696.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":360812.0,"Objects":[{"StartTime":360812.0,"EndTime":360812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":360927.0,"EndTime":360927.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":361043.0,"Objects":[{"StartTime":361043.0,"EndTime":361043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":361158.0,"EndTime":361158.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":361273.0,"Objects":[{"StartTime":361273.0,"EndTime":361273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":361388.0,"EndTime":361388.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":361504.0,"Objects":[{"StartTime":361504.0,"EndTime":361504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":361620.0,"Objects":[{"StartTime":361620.0,"EndTime":361620.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":361735.0,"Objects":[{"StartTime":361735.0,"EndTime":361735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":361851.0,"Objects":[{"StartTime":361851.0,"EndTime":361851.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":361966.0,"Objects":[{"StartTime":361966.0,"EndTime":361966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":362196.0,"EndTime":362196.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":362312.0,"Objects":[{"StartTime":362312.0,"EndTime":362312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":362427.0,"Objects":[{"StartTime":362427.0,"EndTime":362427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":362542.0,"EndTime":362542.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":362658.0,"Objects":[{"StartTime":362658.0,"EndTime":362658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":362773.0,"EndTime":362773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":362831.0,"Objects":[{"StartTime":362831.0,"EndTime":362831.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":362889.0,"Objects":[{"StartTime":362889.0,"EndTime":362889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":363119.0,"EndTime":363119.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":363235.0,"Objects":[{"StartTime":363235.0,"EndTime":363235.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":363465.0,"EndTime":363465.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":363581.0,"Objects":[{"StartTime":363581.0,"EndTime":363581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":363696.0,"EndTime":363696.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":363812.0,"Objects":[{"StartTime":363812.0,"EndTime":364273.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":364389.0,"Objects":[{"StartTime":364389.0,"EndTime":364389.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":364504.0,"Objects":[{"StartTime":364504.0,"EndTime":364504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":364619.0,"EndTime":364619.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":364735.0,"Objects":[{"StartTime":364735.0,"EndTime":364735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":364850.0,"EndTime":364850.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":364966.0,"Objects":[{"StartTime":364966.0,"EndTime":365427.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":365543.0,"Objects":[{"StartTime":365543.0,"EndTime":365543.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":365658.0,"Objects":[{"StartTime":365658.0,"EndTime":365658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":365773.0,"EndTime":365773.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":365889.0,"Objects":[{"StartTime":365889.0,"EndTime":365889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":366004.0,"EndTime":366004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":366120.0,"Objects":[{"StartTime":366120.0,"EndTime":366120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":366235.0,"Objects":[{"StartTime":366235.0,"EndTime":366235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":366350.0,"EndTime":366350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":366465.0,"EndTime":366465.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":366581.0,"Objects":[{"StartTime":366581.0,"EndTime":366581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":366696.0,"EndTime":366696.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":366812.0,"Objects":[{"StartTime":366812.0,"EndTime":366812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":367042.0,"EndTime":367042.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":367158.0,"Objects":[{"StartTime":367158.0,"EndTime":367158.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":367273.0,"Objects":[{"StartTime":367273.0,"EndTime":367273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":367388.0,"EndTime":367388.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":367504.0,"Objects":[{"StartTime":367504.0,"EndTime":367965.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":368081.0,"Objects":[{"StartTime":368081.0,"EndTime":368081.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":368197.0,"Objects":[{"StartTime":368197.0,"EndTime":368197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":368312.0,"EndTime":368312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":368427.0,"Objects":[{"StartTime":368427.0,"EndTime":368427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":368657.0,"EndTime":368657.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":368773.0,"Objects":[{"StartTime":368773.0,"EndTime":368773.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":369003.0,"EndTime":369003.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":369120.0,"Objects":[{"StartTime":369120.0,"EndTime":369120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":369235.0,"EndTime":369235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":369350.0,"Objects":[{"StartTime":369350.0,"EndTime":369350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":369580.0,"EndTime":369580.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":369697.0,"Objects":[{"StartTime":369697.0,"EndTime":369697.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":369812.0,"Objects":[{"StartTime":369812.0,"EndTime":369812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":369927.0,"EndTime":369927.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":370043.0,"Objects":[{"StartTime":370043.0,"EndTime":370043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":370158.0,"EndTime":370158.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":370273.0,"Objects":[{"StartTime":370273.0,"EndTime":370273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":370389.0,"Objects":[{"StartTime":370389.0,"EndTime":370389.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":370504.0,"Objects":[{"StartTime":370504.0,"EndTime":370504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":370620.0,"Objects":[{"StartTime":370620.0,"EndTime":370620.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":370677.0,"Objects":[{"StartTime":370677.0,"EndTime":370677.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":370735.0,"Objects":[{"StartTime":370735.0,"EndTime":370735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":370793.0,"Objects":[{"StartTime":370793.0,"EndTime":370793.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":370850.0,"Objects":[{"StartTime":370850.0,"EndTime":370850.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":370908.0,"Objects":[{"StartTime":370908.0,"EndTime":370908.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":370966.0,"Objects":[{"StartTime":370966.0,"EndTime":370966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":371081.0,"Objects":[{"StartTime":371081.0,"EndTime":371081.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":371197.0,"Objects":[{"StartTime":371197.0,"EndTime":371197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":371427.0,"EndTime":371427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":371658.0,"Objects":[{"StartTime":371658.0,"EndTime":371658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":371888.0,"EndTime":371888.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":372120.0,"Objects":[{"StartTime":372120.0,"EndTime":372120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":372350.0,"EndTime":372350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":372581.0,"Objects":[{"StartTime":372581.0,"EndTime":372581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":372696.0,"EndTime":372696.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":372812.0,"Objects":[{"StartTime":372812.0,"EndTime":372812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":372927.0,"Objects":[{"StartTime":372927.0,"EndTime":372927.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":373043.0,"Objects":[{"StartTime":373043.0,"EndTime":373043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":373273.0,"EndTime":373273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":373504.0,"Objects":[{"StartTime":373504.0,"EndTime":373504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":373734.0,"EndTime":373734.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":373850.0,"Objects":[{"StartTime":373850.0,"EndTime":373850.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":373966.0,"Objects":[{"StartTime":373966.0,"EndTime":373966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":374196.0,"EndTime":374196.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":374427.0,"Objects":[{"StartTime":374427.0,"EndTime":374427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":374542.0,"EndTime":374542.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":374658.0,"Objects":[{"StartTime":374658.0,"EndTime":374658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":374773.0,"Objects":[{"StartTime":374773.0,"EndTime":374773.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":374830.0,"Objects":[{"StartTime":374830.0,"EndTime":374830.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":374889.0,"Objects":[{"StartTime":374889.0,"EndTime":374889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":375119.0,"EndTime":375119.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":375350.0,"Objects":[{"StartTime":375350.0,"EndTime":375350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":375466.0,"Objects":[{"StartTime":375466.0,"EndTime":375466.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":375581.0,"Objects":[{"StartTime":375581.0,"EndTime":375581.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":375697.0,"Objects":[{"StartTime":375697.0,"EndTime":375697.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":375812.0,"Objects":[{"StartTime":375812.0,"EndTime":375812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":376042.0,"EndTime":376042.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":376273.0,"Objects":[{"StartTime":376273.0,"EndTime":376273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":376503.0,"EndTime":376503.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":376620.0,"Objects":[{"StartTime":376620.0,"EndTime":376620.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":376735.0,"Objects":[{"StartTime":376735.0,"EndTime":376735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true},{"StartTime":376965.0,"EndTime":376965.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":377197.0,"Objects":[{"StartTime":377197.0,"EndTime":377197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":377313.0,"Objects":[{"StartTime":377313.0,"EndTime":377313.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":377428.0,"Objects":[{"StartTime":377428.0,"EndTime":377428.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":377544.0,"Objects":[{"StartTime":377544.0,"EndTime":377544.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":377658.0,"Objects":[{"StartTime":377658.0,"EndTime":377658.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":377888.0,"EndTime":377888.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":378120.0,"Objects":[{"StartTime":378120.0,"EndTime":378120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":378350.0,"EndTime":378350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":378581.0,"Objects":[{"StartTime":378581.0,"EndTime":379273.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":379504.0,"Objects":[{"StartTime":379504.0,"EndTime":379504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":379734.0,"EndTime":379734.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":379850.0,"Objects":[{"StartTime":379850.0,"EndTime":379850.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":380080.0,"EndTime":380080.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":380197.0,"Objects":[{"StartTime":380197.0,"EndTime":380197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":380312.0,"EndTime":380312.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":380427.0,"Objects":[{"StartTime":380427.0,"EndTime":380427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":380543.0,"Objects":[{"StartTime":380543.0,"EndTime":380543.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":380773.0,"EndTime":380773.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":380889.0,"Objects":[{"StartTime":380889.0,"EndTime":380889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":381004.0,"EndTime":381004.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":381120.0,"Objects":[{"StartTime":381120.0,"EndTime":381120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":381235.0,"EndTime":381235.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":381350.0,"Objects":[{"StartTime":381350.0,"EndTime":381350.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":381466.0,"Objects":[{"StartTime":381466.0,"EndTime":381466.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":381696.0,"EndTime":381696.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":381812.0,"Objects":[{"StartTime":381812.0,"EndTime":381812.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":381927.0,"EndTime":381927.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":382043.0,"Objects":[{"StartTime":382043.0,"EndTime":382043.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":382158.0,"EndTime":382158.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":382273.0,"Objects":[{"StartTime":382273.0,"EndTime":382273.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":382330.0,"EndTime":382330.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":382388.0,"EndTime":382388.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":382446.0,"EndTime":382446.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":382504.0,"Objects":[{"StartTime":382504.0,"EndTime":382504.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":382561.0,"EndTime":382561.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":382619.0,"EndTime":382619.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":382677.0,"EndTime":382677.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":382735.0,"Objects":[{"StartTime":382735.0,"EndTime":382735.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":382792.0,"Objects":[{"StartTime":382792.0,"EndTime":382792.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":382850.0,"Objects":[{"StartTime":382850.0,"EndTime":382850.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":382908.0,"Objects":[{"StartTime":382908.0,"EndTime":382908.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":382966.0,"Objects":[{"StartTime":382966.0,"EndTime":382966.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":383023.0,"Objects":[{"StartTime":383023.0,"EndTime":383023.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":383080.0,"Objects":[{"StartTime":383080.0,"EndTime":383080.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":383138.0,"Objects":[{"StartTime":383138.0,"EndTime":383138.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":383197.0,"Objects":[{"StartTime":383197.0,"EndTime":383197.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":383254.0,"Objects":[{"StartTime":383254.0,"EndTime":383254.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":383312.0,"Objects":[{"StartTime":383312.0,"EndTime":383312.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":383370.0,"Objects":[{"StartTime":383370.0,"EndTime":383370.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":383427.0,"Objects":[{"StartTime":383427.0,"EndTime":383427.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":383484.0,"Objects":[{"StartTime":383484.0,"EndTime":383484.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":383542.0,"Objects":[{"StartTime":383542.0,"EndTime":383542.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":383600.0,"Objects":[{"StartTime":383600.0,"EndTime":383600.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":383657.0,"Objects":[{"StartTime":383657.0,"EndTime":383657.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":383715.0,"Objects":[{"StartTime":383715.0,"EndTime":383715.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":383773.0,"Objects":[{"StartTime":383773.0,"EndTime":383773.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":383831.0,"Objects":[{"StartTime":383831.0,"EndTime":383831.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":383889.0,"Objects":[{"StartTime":383889.0,"EndTime":383889.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":383947.0,"Objects":[{"StartTime":383947.0,"EndTime":383947.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":384004.0,"Objects":[{"StartTime":384004.0,"EndTime":384004.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":384062.0,"Objects":[{"StartTime":384062.0,"EndTime":384062.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":384120.0,"Objects":[{"StartTime":384120.0,"EndTime":384120.0,"IsRim":true,"IsCentre":false,"IsDrumRoll":false,"IsSwell":false,"IsStrong":true}]}]} \ No newline at end of file diff --git a/osu.Game.Rulesets.Taiko/Resources/Testing/Beatmaps/875945.osu b/osu.Game.Rulesets.Taiko/Resources/Testing/Beatmaps/875945.osu deleted file mode 100644 index a24fcea30a..0000000000 --- a/osu.Game.Rulesets.Taiko/Resources/Testing/Beatmaps/875945.osu +++ /dev/null @@ -1,1824 +0,0 @@ -osu file format v14 - -[General] -AudioFilename: imagematerial.mp3 -AudioLeadIn: 0 -PreviewTime: 165589 -Countdown: 0 -SampleSet: Soft -StackLeniency: 0.7 -Mode: 0 -LetterboxInBreaks: 0 -EpilepsyWarning: 1 -WidescreenStoryboard: 1 - -[Editor] -Bookmarks: 56435,71204,88743,103512,120127,134897,149666,181051,197666,310280,356434,371204,384127 -DistanceSpacing: 0.3 -BeatDivisor: 4 -GridSize: 4 -TimelineZoom: 5.700003 - -[Metadata] -Title:IMAGE -MATERIAL- -TitleUnicode:IMAGE -MATERIAL- -Artist:Tatsh -ArtistUnicode:Tatsh -Creator:Enon -Version:Revolution -Source: -Tags:(新曲) (Shinkyoku) REFLEC BEAT limelight 福山沙織 fukuyama saori Dailycare -BeatmapID:875945 -BeatmapSetID:402837 - -[Difficulty] -HPDrainRate:6 -CircleSize:4.2 -OverallDifficulty:9 -ApproachRate:9.8 -SliderMultiplier:1.87 -SliderTickRate:1 - -[Events] -//Background and Video events -0,0,"BG.jpg",0,0 -//Break Periods -2,49251,55956 -//Storyboard Layer 0 (Background) -//Storyboard Layer 1 (Fail) -//Storyboard Layer 2 (Pass) -//Storyboard Layer 3 (Foreground) -//Storyboard Sound Samples - -[TimingPoints] -6590,461.538461538462,4,2,2,15,1,0 -6590,-200,4,2,2,15,0,0 -8320,-200,4,2,2,5,0,0 -8436,-200,4,2,2,15,0,0 -10166,-200,4,2,2,5,0,0 -10282,-200,4,2,2,15,0,0 -12013,-200,4,2,2,5,0,0 -12128,-200,4,2,2,15,0,0 -13859,-200,4,2,2,5,0,0 -13974,-200,4,2,2,15,0,0 -15705,-200,4,2,2,5,0,0 -15820,-200,4,2,2,15,0,0 -17551,-200,4,2,2,5,0,0 -17666,-200,4,2,2,15,0,0 -49051,230.769230769231,4,2,1,15,1,0 -56435,-100,4,2,1,60,0,0 -62666,-200,4,2,1,60,0,0 -63820,-100,4,2,1,60,0,0 -69358,-100,4,2,1,55,0,0 -69589,-100,4,2,1,50,0,0 -69820,-100,4,2,1,45,0,0 -70051,-100,4,2,1,40,0,0 -70281,-100,4,2,1,30,0,0 -70512,-100,4,2,1,40,0,0 -70743,-100,4,2,1,50,0,0 -70974,-100,4,2,1,60,0,0 -71204,-100,4,2,1,70,0,0 -74839,-100,4,2,1,5,0,0 -74897,-100,4,2,1,70,0,0 -78301,-100,4,2,1,5,0,0 -78358,-100,4,2,1,70,0,0 -78531,-100,4,2,1,5,0,0 -78589,-100,4,2,1,70,0,0 -82224,-100,4,2,1,5,0,0 -82281,-100,4,2,1,70,0,0 -85685,-100,4,2,1,5,0,0 -85743,-100,4,2,1,70,0,0 -88743,-100,4,2,1,85,0,1 -90070,-100,4,2,1,5,0,1 -90127,-100,4,2,1,85,0,1 -93762,-100,4,2,1,5,0,1 -93820,-100,4,2,1,85,0,1 -95377,-100,4,2,1,5,0,1 -95435,-100,4,2,1,85,0,1 -103512,-100,4,2,1,60,0,0 -106916,-100,4,2,1,5,0,0 -106974,-100,4,2,1,60,0,0 -110608,-100,4,2,1,5,0,0 -110666,-100,4,2,1,60,0,0 -114301,-100,4,2,1,5,0,0 -114358,-100,4,2,1,60,0,0 -114820,-100,4,2,3,60,0,0 -114834,-100,4,2,1,60,0,0 -116666,-100,4,2,3,60,0,0 -116680,-100,4,2,1,60,0,0 -117358,-100,4,2,1,55,0,0 -117589,-100,4,2,1,50,0,0 -117820,-100,4,2,1,45,0,0 -118051,-100,4,2,1,40,0,0 -118281,-100,4,2,1,30,0,0 -118743,-100,4,2,1,40,0,0 -119204,-100,4,2,1,50,0,0 -119666,-100,4,2,1,60,0,0 -120127,-100,4,2,1,70,0,0 -126762,-100,4,2,1,5,0,0 -126820,-100,4,2,1,70,0,0 -143377,-100,4,2,1,5,0,0 -143435,-111.111111111111,4,2,1,70,0,0 -143608,-111.111111111111,4,2,1,5,0,0 -143666,-125,4,2,1,70,0,0 -143839,-125,4,2,1,5,0,0 -143897,-142.857142857143,4,2,1,70,0,0 -144070,-142.857142857143,4,2,1,5,0,0 -144127,-100,4,2,1,70,0,0 -149666,-200,4,2,1,40,0,0 -160743,-100,4,2,1,55,0,0 -166281,-100,4,2,1,85,0,1 -167608,-100,4,2,1,5,0,1 -167666,-100,4,2,1,85,0,1 -171301,-100,4,2,1,5,0,1 -171358,-100,4,2,1,85,0,1 -172916,-100,4,2,1,5,0,1 -172974,-100,4,2,1,85,0,1 -181051,-100,4,2,1,60,0,0 -182377,-100,4,2,1,5,0,0 -182435,-100,4,2,1,60,0,0 -192358,-100,4,2,3,60,0,0 -192373,-100,4,2,1,60,0,0 -194204,-100,4,2,3,60,0,0 -194219,-100,4,2,1,60,0,0 -194897,-100,4,2,1,55,0,0 -195127,-100,4,2,1,50,0,0 -195358,-100,4,2,1,45,0,0 -195589,-100,4,2,1,40,0,0 -195820,-100,4,2,1,30,0,0 -196281,-100,4,2,1,40,0,0 -196743,-100,4,2,1,50,0,0 -197204,-100,4,2,1,60,0,0 -197666,-100,4,2,1,85,0,1 -219070,-100,4,2,1,5,0,1 -219127,-142.857142857143,4,2,1,85,0,1 -219301,-142.857142857143,4,2,1,5,0,1 -219358,-111.111111111111,4,2,1,85,0,1 -219531,-111.111111111111,4,2,1,5,0,1 -219589,-166.666666666667,4,2,1,85,0,1 -219762,-166.666666666667,4,2,1,5,0,1 -219820,-100,4,2,1,85,0,1 -227204,461.538461538462,4,2,2,25,1,0 -227204,-200,4,2,2,25,0,0 -251550,697.674418604651,4,2,2,25,1,0 -251550,-133.333333333333,4,2,2,25,0,0 -252702,714.285714285714,4,2,2,20,1,0 -252702,-133.333333333333,4,2,2,20,0,0 -253506,800,4,2,2,18,1,0 -254095,1132.07547169811,4,2,2,15,1,0 -254095,-133.333333333333,4,2,2,15,0,0 -255580,1200,4,2,2,10,1,0 -256480,1267.10000000001,4,2,2,8,1,0 -256480,-133.333333333333,4,2,2,8,0,0 -258892,2131.45714285714,4,2,2,6,1,0 -258892,-133.333333333333,4,2,2,6,0,0 -263197,230.769230769231,4,2,1,65,1,0 -277966,-100,4,2,1,70,0,0 -285062,-100,4,2,1,5,0,0 -285120,-100,4,2,1,70,0,0 -285293,-100,4,2,1,5,0,0 -285350,-100,4,2,1,70,0,0 -292447,-100,4,2,1,5,0,0 -292504,-100,4,2,1,70,0,0 -295504,-100,4,2,1,85,0,1 -296831,-100,4,2,1,5,0,1 -296889,-100,4,2,1,85,0,1 -300523,-100,4,2,1,5,0,1 -300581,-100,4,2,1,85,0,1 -308889,-100,4,2,1,85,0,0 -310273,-100,4,2,1,85,0,1 -315062,-100,4,2,1,5,0,1 -315120,-100,4,2,1,85,0,1 -329831,-100,4,2,1,5,0,1 -329889,-100,4,2,1,85,0,1 -330754,-100,4,2,1,5,0,1 -330812,-100,4,2,1,85,0,1 -331677,-100,4,2,1,5,0,1 -331735,-100,4,2,1,85,0,1 -333523,-100,4,2,1,5,0,1 -333581,-100,4,2,1,85,0,1 -336293,-100,4,2,1,5,0,1 -336350,-100,4,2,1,85,0,1 -346447,-100,4,2,1,5,0,1 -346504,-142.857142857143,4,2,1,85,0,1 -346677,-142.857142857143,4,2,1,5,0,1 -346735,-111.111111111111,4,2,1,85,0,1 -346908,-111.111111111111,4,2,1,5,0,1 -346966,-166.666666666667,4,2,1,85,0,1 -347197,-100,4,2,1,85,0,1 -356427,-100,4,2,1,60,0,0 - - -[Colours] -Combo1 : 235,221,186 -Combo2 : 165,202,233 -Combo3 : 114,145,218 -Combo4 : 58,148,190 - -[HitObjects] -88,104,6590,6,0,B|176:156|256:108|256:108|336:60|423:112,1,350.625,6|0,0:0|0:0,0:0:0:0: -396,213,8436,2,0,P|277:247|376:172,1,350.625,6|0,0:0|0:0,0:0:0:0: -472,220,10282,2,0,P|456:288|220:300,1,350.625,6|0,0:0|0:0,0:0:0:0: -277,200,12128,2,0,P|398:225|276:244,1,350.625,6|0,0:0|0:0,0:0:0:0: -224,141,13974,6,0,P|379:90|473:224,1,350.625,6|0,0:0|0:0,0:0:0:0: -496,301,15820,2,0,B|304:277|329:378|139:354,1,350.625,6|0,0:0|0:0,0:0:0:0: -76,352,17666,2,0,B|128:271|43:128|43:128|96:217|173:187,1,374,6|2,0:0|0:0,0:0:0:0: -256,192,19628,12,0,21128,0:0:0:0: -213,117,21359,6,0,L|119:122,1,93.5,6|0,0:0|0:0,0:0:0:0: -300,161,22282,2,0,L|393:155,1,93.5,2|0,0:0|0:0,0:0:0:0: -233,38,23205,2,0,L|139:43,1,93.5,6|0,0:0|0:0,0:0:0:0: -280,240,24128,2,0,L|373:234,1,93.5,2|0,0:0|0:0,0:0:0:0: -509,22,25051,6,0,B|342:1|390:161|198:113,1,327.25,6|0,0:0|0:0,0:0:0:0: -139,43,26897,2,0,P|181:132|110:300,1,280.5,2|0,0:0|0:0,0:0:0:0: -46,366,28743,6,0,L|139:371,1,93.5,6|0,0:0|0:0,0:0:0:0: -280,175,29666,2,0,L|186:169,1,93.5,2|0,0:0|0:0,0:0:0:0: -26,287,30589,2,0,L|119:292,1,93.5,6|0,0:0|0:0,0:0:0:0: -300,254,31513,2,0,L|206:248,1,93.5,2|0,0:0|0:0,0:0:0:0: -0,57,32436,6,0,B|189:33|134:214|352:176,1,374,6|2,0:0|0:0,0:0:0:0: -334,178,35205,2,0,L|315:351,1,163.625,2|0,0:0|0:0,0:0:0:0: -396,313,36128,6,0,P|430:308|456:284,1,70.125,6|0,0:0|0:0,0:0:0:0: -508,233,36590,6,0,B|205:287|288:12|1:48,1,561,2|0,0:0|0:0,0:0:0:0: -10,47,39820,6,0,L|120:37,1,93.5,6|0,0:0|0:0,0:0:0:0: -233,130,40743,2,0,L|123:140,1,93.5,2|0,0:0|0:0,0:0:0:0: -268,229,41666,2,0,L|473:210,1,187,2|2,0:0|0:0,0:0:0:0: -271,366,43051,2,0,P|254:329|255:303,1,46.75 -268,229,43513,5,6,0:0:0:0: -256,192,43628,12,0,49051,0:0:0:0: -45,136,56435,6,0,B|140:151|119:74|222:88,1,187,6|8,0:0|0:0,0:0:0:0: -214,252,56781,1,0,0:0:0:0: -214,252,56897,2,0,P|209:223|187:144,1,93.5,2|0,0:0|0:0,0:0:0:0: -336,48,57127,2,0,P|323:93|314:138,1,93.5,8|0,0:0|0:0,0:0:0:0: -319,308,57358,6,0,P|379:321|411:306,1,93.5,2|0,0:0|0:0,0:0:0:0: -214,252,57589,2,0,P|154:239|122:254,1,93.5,8|0,0:0|0:0,0:0:0:0: -58,340,57820,1,2,0:0:0:0: -165,370,57935,1,0,0:0:0:0: -263,315,58051,1,8,0:0:0:0: -370,345,58166,1,8,0:0:0:0: -370,345,58224,1,0,0:0:0:0: -370,345,58281,6,0,P|361:263|435:186,1,187,2|8,0:0|0:0,0:0:0:0: -507,110,58627,1,0,0:0:0:0: -507,110,58685,1,0,0:0:0:0: -507,110,58743,2,0,L|491:3,1,93.5,2|0,0:0|0:0,0:0:0:0: -412,96,58974,2,0,L|428:203,1,93.5,8|2,0:0|0:0,0:0:0:0: -370,344,59204,6,0,P|331:353|275:333,1,93.5,2|0,0:0|0:0,0:0:0:0: -273,211,59435,2,0,P|293:253|331:280,1,93.5,8|0,0:0|0:0,0:0:0:0: -349,206,59666,2,0,P|341:160|357:117,1,93.5,2|0,0:0|0:0,0:0:0:0: -482,107,59897,2,0,P|440:127|414:165,1,93.5,8|0,0:0|0:0,0:0:0:0: -144,273,60127,6,0,L|331:280,1,187,2|8,0:0|0:0,0:0:0:0: -349,206,60474,2,0,L|162:199,1,187,0|2,0:0|0:0,0:0:0:0: -85,115,60820,2,0,L|179:119,1,93.5,8|2,0:0|0:0,0:0:0:0: -126,347,61051,6,0,P|88:326|66:277,1,93.5,2|0,0:0|0:0,0:0:0:0: -162,199,61281,2,0,P|200:220|222:269,1,93.5,8|0,0:0|0:0,0:0:0:0: -203,375,61512,2,0,L|306:368,1,93.5,2|2,0:0|0:0,0:0:0:0: -443,285,61743,2,0,L|349:291,1,93.5,8|0,0:0|0:0,0:0:0:0: -329,279,61916,1,0,0:0:0:0: -309,266,61974,6,0,L|289:66,1,187,2|8,0:0|0:0,0:0:0:0: -203,118,62320,2,0,L|223:318,1,187,0|2,0:0|0:0,0:0:0:0: -133,342,62666,2,0,B|132:316|132:316|128:316|128:316|130:295|130:295|126:296|126:296|129:275|129:275|125:275|125:275|127:254|127:254|123:255|123:255|125:234|125:234|121:234|121:234|123:213|123:213|119:214|119:214|121:193|121:193|118:193|118:193|118:172,1,187,8|8,0:0|0:0,0:0:0:0: -285,26,63358,5,2,0:0:0:0: -352,117,63474,1,8,0:0:0:0: -265,189,63589,1,10,0:0:0:0: -332,280,63705,1,8,0:0:0:0: -474,81,63820,5,2,0:0:0:0: -456,83,63877,1,2,0:0:0:0: -437,85,63935,1,2,0:0:0:0: -419,88,63993,1,2,0:0:0:0: -400,90,64051,2,0,L|288:73,1,93.5,8|0,0:0|0:0,0:0:0:0: -217,50,64281,5,2,0:0:0:0: -219,68,64338,1,2,0:0:0:0: -221,87,64396,1,2,0:0:0:0: -224,105,64454,1,2,0:0:0:0: -226,124,64512,2,0,L|209:236,1,93.5,8|0,0:0|0:0,0:0:0:0: -186,307,64743,5,2,0:0:0:0: -204,305,64800,1,2,0:0:0:0: -223,303,64858,1,2,0:0:0:0: -241,300,64916,1,2,0:0:0:0: -260,298,64974,2,0,L|372:315,1,93.5,8|0,0:0|0:0,0:0:0:0: -443,338,65205,5,2,0:0:0:0: -441,320,65262,1,2,0:0:0:0: -439,301,65320,1,2,0:0:0:0: -436,283,65378,1,2,0:0:0:0: -434,264,65436,2,0,L|451:152,1,93.5,8|0,0:0|0:0,0:0:0:0: -474,81,65666,5,2,0:0:0:0: -456,83,65723,1,2,0:0:0:0: -437,85,65781,1,2,0:0:0:0: -419,88,65839,1,2,0:0:0:0: -400,90,65897,2,0,L|288:73,1,93.5,8|0,0:0|0:0,0:0:0:0: -226,124,66127,5,2,0:0:0:0: -208,126,66184,1,2,0:0:0:0: -189,128,66242,1,2,0:0:0:0: -171,131,66300,1,2,0:0:0:0: -152,133,66358,2,0,L|40:116,1,93.5,8|0,0:0|0:0,0:0:0:0: -14,291,66589,6,0,P|0:241|8:176,1,93.5,2|2,0:0|0:0,0:0:0:0: -136,292,66820,2,0,P|150:342|142:407,1,93.5,8|2,0:0|0:0,0:0:0:0: -80,232,67051,2,0,P|154:263|265:207,1,187,2|8,0:0|0:0,0:0:0:0: -315,159,67397,1,0,0:0:0:0: -491,182,67512,6,0,B|480:253|480:253|484:286|484:286|472:373,1,187,6|8,0:1|0:0,0:0:0:0: -410,124,67858,2,0,B|399:195|399:195|403:228|403:228|391:315,1,187,2|8,0:1|0:0,0:0:0:0: -329,66,68204,2,0,L|313:166,1,93.5,10|0,1:2|0:0,0:0:0:0: -181,294,68435,6,0,P|226:315|288:293,1,93.5,2|2,0:0|0:0,0:0:0:0: -440,252,68666,2,0,P|395:231|333:253,1,93.5,8|2,0:0|0:0,0:0:0:0: -128,371,68897,5,10,0:0:0:0: -181,294,69012,1,8,0:0:0:0: -117,225,69127,1,10,0:0:0:0: -170,148,69242,1,8,0:0:0:0: -52,88,69358,6,0,L|43:181,1,93.5,2|2,0:0|0:0,0:0:0:0: -181,294,69589,2,0,L|191:202,1,93.5,8|2,0:0|0:0,0:0:0:0: -39,101,69820,6,0,L|30:193,1,93.5,2|2,0:0|0:0,0:0:0:0: -168,307,70051,2,0,L|177:214,1,93.5,8|2,0:0|0:0,0:0:0:0: -198,30,70281,5,8,0:0:0:0: -220,46,70339,1,0,0:0:0:0: -244,58,70397,1,8,0:0:0:0: -269,65,70455,1,0,0:0:0:0: -296,68,70512,1,2,0:0:0:0: -322,66,70570,1,2,0:0:0:0: -348,60,70627,1,2,0:0:0:0: -373,49,70685,1,2,0:0:0:0: -396,36,70742,5,10,0:0:0:0: -441,30,70800,1,2,0:0:0:0: -483,49,70858,1,10,0:0:0:0: -510,87,70916,1,2,0:0:0:0: -512,133,70974,1,10,0:0:0:0: -492,175,71031,1,2,0:0:0:0: -453,199,71089,1,10,0:0:0:0: -407,200,71146,1,2,0:0:0:0: -364,184,71204,6,0,P|321:209|338:359,1,187,6|8,0:0|0:0,0:0:0:0: -419,372,71551,2,0,P|462:347|445:197,1,187,2|2,0:0|0:0,0:0:0:0: -332,104,71897,2,0,L|441:100,1,93.5,8|0,0:0|0:0,0:0:0:0: -248,179,72127,5,2,0:0:0:0: -248,179,72243,2,0,L|54:186,1,187,2|2,0:0|0:0,0:0:0:0: -144,259,72589,2,0,L|240:255,1,93.5,2|0,0:0|0:0,0:0:0:0: -164,104,72820,2,0,L|68:108,1,93.5,8|0,0:0|0:0,0:0:0:0: -111,338,73051,6,0,P|200:325|223:228,1,187,2|8,0:0|0:0,0:0:0:0: -192,136,73397,2,0,L|-1:143,1,187,2|2,0:0|0:0,0:0:0:0: -78,57,73743,2,0,L|174:53,1,93.5,8|0,0:0|0:0,0:0:0:0: -365,83,73974,5,2,0:0:0:0: -365,83,74089,2,0,B|294:83|288:84|255:135|251:135|191:135,1,187,2|2,0:0|0:0,0:0:0:0: -45,195,74435,2,0,P|87:216|103:264,1,93.5,2|0,0:0|0:0,0:0:0:0: -16,332,74666,2,0,B|63:323|63:323|109:331|109:331|160:322,1,140.25,8|0,0:0|0:0,0:0:0:0: -240,352,74897,6,0,P|224:290|298:187,1,187,2|8,0:0|0:0,0:0:0:0: -395,224,75243,2,0,P|411:286|337:389,1,187,2|2,0:0|0:0,0:0:0:0: -249,166,75589,2,0,L|239:73,1,93.5,8|0,0:0|0:0,0:0:0:0: -198,230,75820,5,2,0:0:0:0: -198,230,75935,2,0,B|249:267|296:244|318:210|318:210|294:242|318:278,1,187,2|2,0:0|0:0,0:0:0:0: -340,364,76281,2,0,L|433:357,1,93.5,2|0,0:0|0:0,0:0:0:0: -236,324,76512,2,0,L|120:332,1,93.5,8|0,0:0|0:0,0:0:0:0: -13,228,76743,6,0,B|96:223|96:223|131:234|131:234|198:229,1,187,2|8,0:0|0:0,0:0:0:0: -324,152,77089,2,0,B|257:157|257:157|222:146|222:146|139:151,1,187,2|2,0:0|0:0,0:0:0:0: -294,235,77435,2,0,L|388:228,1,93.5,8|0,0:0|0:0,0:0:0:0: -452,108,77666,5,2,0:0:0:0: -452,108,77781,1,8,0:0:0:0: -492,272,77897,1,10,0:0:0:0: -492,272,78012,1,8,0:0:0:0: -376,88,78127,2,0,P|404:44|488:40,1,140.25,8|0,0:0|0:0,0:0:0:0: -452,108,78358,2,0,L|301:120,1,140.25,2|0,0:0|0:0,0:0:0:0: -216,60,78589,6,0,P|232:132|144:216,1,187,6|8,0:0|0:0,0:0:0:0: -56,176,78935,2,0,P|40:104|128:20,1,187,2|2,0:0|0:0,0:0:0:0: -216,60,79281,2,0,L|223:153,1,93.5,8|0,0:0|0:0,0:0:0:0: -333,284,79512,5,2,0:0:0:0: -333,284,79627,2,0,L|317:82,1,187,2|2,0:0|0:0,0:0:0:0: -157,170,79974,2,0,P|175:203|256:211,1,93.5,2|0,0:0|0:0,0:0:0:0: -400,264,80204,2,0,P|382:231|301:223,1,93.5,8|0,0:0|0:0,0:0:0:0: -255,374,80435,6,0,L|447:359,1,187,2|8,0:0|0:0,0:0:0:0: -512,272,80781,2,0,L|320:287,1,187,2|2,0:0|0:0,0:0:0:0: -244,210,81127,2,0,L|337:203,1,93.5,8|0,0:0|0:0,0:0:0:0: -464,92,81358,5,2,0:0:0:0: -464,92,81474,2,0,P|484:152|420:272,1,187,2|2,0:0|0:0,0:0:0:0: -321,123,81820,2,0,L|310:23,1,93.5,2|0,0:0|0:0,0:0:0:0: -201,117,82051,2,0,L|215:256,1,140.25,8|0,0:0|0:0,0:0:0:0: -225,332,82281,6,0,P|153:348|53:272,1,187,2|8,0:0|0:0,0:0:0:0: -90,181,82627,2,0,P|162:165|262:241,1,187,2|2,0:0|0:0,0:0:0:0: -315,317,82974,2,0,L|441:307,1,93.5,8|0,0:0|0:0,0:0:0:0: -500,169,83204,5,2,0:0:0:0: -500,169,83320,2,0,L|306:184,1,187,2|2,0:0|0:0,0:0:0:0: -156,120,83666,2,0,P|140:68|152:24,1,93.5,2|0,0:0|0:0,0:0:0:0: -260,20,83897,2,0,P|276:72|264:116,1,93.5,8|0,0:0|0:0,0:0:0:0: -196,260,84127,6,0,L|10:240,1,187,2|8,0:0|0:0,0:0:0:0: -80,328,84474,2,0,L|265:347,1,187,2|2,0:0|0:0,0:0:0:0: -372,382,84820,2,0,P|386:339|425:314,1,93.5,8|0,0:0|0:0,0:0:0:0: -506,236,85051,2,0,P|461:246|420:225,1,93.5,2|0,0:0|0:0,0:0:0:0: -313,195,85281,2,0,P|344:228|346:274,1,93.5,8|0,0:0|0:0,0:0:0:0: -163,144,85512,6,0,L|14:135,1,140.25,2|0,0:0|0:0,0:0:0:0: -44,187,85743,2,0,L|171:194,1,93.5,8|0,0:0|0:0,0:0:0:0: -245,159,85974,2,0,P|232:96|199:67,1,93.5,2|0,0:0|0:0,0:0:0:0: -214,244,86204,2,0,L|404:225,1,187,8|2,0:0|0:0,0:0:0:0: -497,283,86551,1,0,0:0:0:0: -497,283,86666,2,0,P|436:302|409:354,1,93.5,8|0,0:0|0:0,0:0:0:0: -318,374,86897,6,0,L|328:163,1,187,2|8,0:0|0:0,0:0:0:0: -238,257,87243,1,0,0:0:0:0: -238,257,87358,2,0,L|248:46,1,187,2|8,0:0|0:0,0:0:0:0: -158,140,87704,1,2,0:0:0:0: -158,140,87820,6,0,L|163:34,1,93.5,2|0,0:0|0:0,0:0:0:0: -75,118,88051,2,0,L|70:223,1,93.5,8|0,0:0|0:0,0:0:0:0: -113,345,88281,5,0,0:0:0:0: -130,335,88339,1,0,0:0:0:0: -150,333,88397,1,0,0:0:0:0: -169,339,88454,1,0,0:0:0:0: -188,347,88512,5,10,0:0:0:0: -230,365,88570,1,2,0:0:0:0: -276,366,88628,1,10,0:0:0:0: -320,349,88686,1,2,0:0:0:0: -353,317,88743,6,0,L|362:113,1,187,6|8,0:0|0:0,0:0:0:0: -265,71,89089,1,0,0:0:0:0: -265,71,89204,2,0,P|216:122|257:235,1,187,2|8,0:0|0:0,0:0:0:0: -356,237,89551,1,0,0:0:0:0: -356,237,89666,6,0,L|472:227,1,93.5,2|0,0:0|0:0,0:0:0:0: -373,145,89897,2,0,L|222:158,1,140.25,8|0,0:0|0:0,0:0:0:0: -189,190,90127,2,0,L|282:181,1,93.5,2|0,0:0|0:0,0:0:0:0: -147,85,90358,2,0,L|24:95,1,93.5,8|0,0:0|0:0,0:0:0:0: -129,242,90589,6,0,P|186:269|266:193,1,187,2|8,0:0|0:0,0:0:0:0: -116,165,90935,2,0,P|64:200|89:308,1,187,2|2,0:0|0:0,0:0:0:0: -189,190,91281,2,0,P|190:140|162:101,1,93.5,8|0,0:0|0:0,0:0:0:0: -81,31,91512,2,0,L|174:23,1,93.5,2|0,0:0|0:0,0:0:0:0: -350,92,91743,2,0,L|257:100,1,93.5,8|0,0:0|0:0,0:0:0:0: -95,198,91974,2,0,L|188:190,1,93.5,2|0,0:0|0:0,0:0:0:0: -377,205,92204,1,2,0:0:0:0: -365,240,92262,1,2,0:0:0:0: -355,276,92320,1,2,0:0:0:0: -345,311,92377,1,2,0:0:0:0: -334,347,92435,6,0,P|264:294|292:211,1,187,2|8,0:0|0:0,0:0:0:0: -392,153,92781,1,0,0:0:0:0: -392,153,92897,2,0,P|420:70|350:17,1,187,2|8,0:0|0:0,0:0:0:0: -256,79,93243,1,0,0:0:0:0: -256,79,93358,6,0,L|263:195,1,93.5,2|0,0:0|0:0,0:0:0:0: -152,304,93589,2,0,L|142:141,1,140.25,8|0,0:0|0:0,0:0:0:0: -154,109,93820,2,0,P|122:142|78:155,1,93.5,2|0,0:0|0:0,0:0:0:0: -0,62,94051,2,0,P|31:28|75:15,1,93.5,8|0,0:0|0:0,0:0:0:0: -256,79,94281,6,0,L|267:265,1,187,2|8,0:0|0:0,0:0:0:0: -198,354,94627,1,0,0:0:0:0: -198,354,94743,2,0,P|286:378|361:327,1,187,2|8,0:0|0:0,0:0:0:0: -407,224,95089,1,0,0:0:0:0: -407,224,95204,6,0,L|247:211,1,140.25,2|0,0:0|0:0,0:0:0:0: -218,184,95435,2,0,L|330:193,1,93.5,8|0,0:0|0:0,0:0:0:0: -401,124,95666,2,0,P|410:77|383:30,1,93.5,2|0,0:0|0:0,0:0:0:0: -300,104,95897,2,0,P|291:149|311:191,1,93.5,8|0,0:0|0:0,0:0:0:0: -420,317,96127,6,0,P|334:293|273:358,1,187,2|8,0:0|0:0,0:0:0:0: -159,359,96474,1,0,0:0:0:0: -159,359,96589,2,0,P|73:382|12:317,1,187,2|8,0:0|0:0,0:0:0:0: -78,186,96935,1,0,0:0:0:0: -174,245,97051,6,0,L|195:51,1,187,2|8,0:0|0:0,0:0:0:0: -300,104,97397,1,0,0:0:0:0: -300,104,97512,2,0,B|309:153|309:153|287:195,1,93.5,2|0,0:0|0:0,0:0:0:0: -185,332,97743,2,0,B|164:293|164:293|173:244,1,93.5,8|0,0:0|0:0,0:0:0:0: -450,270,97974,6,0,L|259:281,1,187,2|8,0:0|0:0,0:0:0:0: -218,184,98320,1,0,0:0:0:0: -218,184,98435,2,0,L|409:173,1,187,2|8,0:0|0:0,0:0:0:0: -509,216,98781,1,0,0:0:0:0: -509,216,98897,6,0,B|477:120|541:136|509:24,1,187,2|8,0:0|0:0,0:0:0:0: -402,4,99243,1,0,0:0:0:0: -207,91,99358,2,0,L|217:183,1,93.5,2|0,0:0|0:0,0:0:0:0: -364,222,99589,2,0,L|353:129,1,93.5,8|0,0:0|0:0,0:0:0:0: -300,359,99820,5,2,0:0:0:0: -391,372,99935,1,0,0:0:0:0: -432,287,100051,1,8,0:0:0:0: -364,222,100166,1,0,0:0:0:0: -282,268,100281,1,2,0:0:0:0: -200,314,100397,1,0,0:0:0:0: -132,249,100512,1,8,0:0:0:0: -173,164,100628,1,0,0:0:0:0: -264,177,100743,6,0,L|248:73,1,93.5,2|0,0:0|0:0,0:0:0:0: -158,71,100974,2,0,L|173:164,1,93.5,8|0,0:0|0:0,0:0:0:0: -146,341,101204,2,0,L|130:237,1,93.5,2|0,0:0|0:0,0:0:0:0: -40,235,101435,2,0,L|54:327,1,93.5,8|0,0:0|0:0,0:0:0:0: -146,341,101666,6,0,P|214:349|234:329,1,93.5,2|0,0:0|0:0,0:0:0:0: -321,224,101897,2,0,P|253:216|233:236,1,93.5,8|0,0:0|0:0,0:0:0:0: -325,317,102127,1,2,0:0:0:0: -353,129,102243,1,2,0:0:0:0: -345,116,102300,1,2,0:0:0:0: -351,104,102358,1,2,0:0:0:0: -340,93,102416,1,2,0:0:0:0: -342,79,102474,1,2,0:0:0:0: -333,68,102531,1,2,0:0:0:0: -322,58,102589,5,10,0:0:0:0: -360,78,102646,1,2,0:0:0:0: -404,81,102704,1,2,0:0:0:0: -446,65,102762,1,2,0:0:0:0: -477,34,102819,1,2,0:0:0:0: -232,124,102935,2,0,L|173:109,1,46.75,2|0,0:0|0:0,0:0:0:0: -256,114,103051,5,2,0:0:0:0: -249,146,103108,1,2,0:0:0:0: -271,173,103166,1,10,0:0:0:0: -255,200,103224,1,2,0:0:0:0: -271,229,103281,1,2,0:0:0:0: -294,258,103339,1,2,0:0:0:0: -277,283,103397,1,2,0:0:0:0: -291,312,103454,1,2,0:0:0:0: -285,344,103512,6,0,P|370:322|476:316,1,187,6|8,0:0|0:0,0:0:0:0: -495,206,103858,1,0,0:0:0:0: -495,206,103974,2,0,P|456:129|349:137,1,187,2|8,0:0|0:0,0:0:0:0: -272,191,104320,1,0,0:0:0:0: -272,191,104435,6,0,L|280:61,1,93.5,2|0,0:0|0:0,0:0:0:0: -362,23,104666,2,0,P|287:75|188:64,1,187,8|2,0:0|0:0,0:0:0:0: -108,121,105012,1,0,0:0:0:0: -97,10,105127,1,8,0:0:0:0: -195,67,105243,1,8,0:0:0:0: -195,67,105301,1,8,0:0:0:0: -195,67,105358,6,0,P|211:139|111:224,1,187,2|8,0:0|0:0,0:0:0:0: -33,192,105704,1,0,0:0:0:0: -33,192,105820,2,0,L|41:292,1,93.5,2|0,0:0|0:0,0:0:0:0: -149,312,106051,2,0,L|141:218,1,93.5,8|0,0:0|0:0,0:0:0:0: -239,165,106281,6,0,P|272:198|279:244,1,93.5,2|0,0:0|0:0,0:0:0:0: -255,354,106512,2,0,L|351:344,1,93.5,8|0,0:0|0:0,0:0:0:0: -460,337,106743,2,0,P|399:276|386:191,1,140.25,2|0,0:0|0:0,0:0:0:0: -385,226,106974,2,0,L|481:216,1,93.5,8|0,0:0|0:0,0:0:0:0: -391,72,107204,6,0,L|204:91,1,187,2|8,0:0|0:0,0:0:0:0: -126,7,107551,1,0,0:0:0:0: -126,7,107666,2,0,P|95:51|127:179,1,187,2|8,0:0|0:0,0:0:0:0: -233,165,108012,1,0,0:0:0:0: -233,165,108127,6,0,L|219:270,1,93.5,2|0,0:0|0:0,0:0:0:0: -145,342,108358,2,0,P|217:288|336:317,1,187,8|2,0:0|0:0,0:0:0:0: -414,258,108704,1,0,0:0:0:0: -394,369,108820,1,8,0:0:0:0: -309,298,108935,1,0,0:0:0:0: -309,298,108993,1,0,0:0:0:0: -309,298,109051,6,0,L|301:103,1,187,2|8,0:0|0:0,0:0:0:0: -396,51,109397,1,0,0:0:0:0: -396,51,109512,2,0,P|427:108|408:160,1,93.5,2|0,0:0|0:0,0:0:0:0: -385,240,109743,2,0,L|491:230,1,93.5,8|0,0:0|0:0,0:0:0:0: -445,339,109974,6,0,L|339:349,1,93.5,2|0,0:0|0:0,0:0:0:0: -264,278,110204,2,0,P|250:233|260:188,1,93.5,8|0,0:0|0:0,0:0:0:0: -150,164,110435,2,0,P|130:227|164:322,1,140.25,2|0,0:0|0:0,0:0:0:0: -147,298,110666,2,0,P|101:287|57:301,1,93.5,8|0,0:0|0:0,0:0:0:0: -214,357,110897,6,0,L|400:339,1,187,2|8,0:0|0:0,0:0:0:0: -451,239,111243,1,0,0:0:0:0: -451,239,111358,2,0,L|264:256,1,187,2|8,0:0|0:0,0:0:0:0: -314,155,111704,1,0,0:0:0:0: -314,155,111820,6,0,L|407:146,1,93.5,2|0,0:0|0:0,0:0:0:0: -486,65,112051,2,0,P|443:147|450:238,1,187,8|2,0:0|0:0,0:0:0:0: -499,340,112397,1,0,0:0:0:0: -390,312,112512,1,8,0:0:0:0: -288,358,112627,1,0,0:0:0:0: -288,358,112685,1,0,0:0:0:0: -288,358,112743,6,0,L|100:344,1,187,2|8,0:0|0:0,0:0:0:0: -30,256,113089,1,0,0:0:0:0: -30,256,113204,2,0,L|218:270,1,187,2|8,0:0|0:0,0:0:0:0: -308,202,113551,1,0,0:0:0:0: -308,202,113666,6,0,P|322:134|256:43,1,187,2|8,0:0|0:0,0:0:0:0: -211,146,114012,1,0,0:0:0:0: -211,146,114127,2,0,L|221:312,1,140.25,2|0,0:0|0:0,0:0:0:0: -219,285,114358,2,0,P|262:271|306:285,1,93.5,8|0,0:0|0:0,0:0:0:0: -166,367,114589,6,0,B|94:317|105:208|187:178|256:192|256:192|325:205|407:176|418:67|346:17,1,561,2|8,0:0|0:0,0:0:0:0: -292,98,115512,1,2,0:0:0:0: -346,367,116435,6,0,B|418:317|407:208|325:178|256:192|256:192|187:205|105:176|94:67|166:17,1,561,2|8,0:0|0:0,0:0:0:0: -219,98,117358,1,2,0:0:0:0: -292,285,117589,1,8,0:0:0:0: -438,147,117820,1,2,0:0:0:0: -219,98,118051,2,0,L|88:91,1,93.5,8|0,0:0|0:0,0:0:0:0: -10,235,118281,6,0,P|-9:192|1:144,1,93.5,2|2,0:0|0:0,0:0:0:0: -154,279,118512,2,0,P|173:322|163:369,1,93.5,8|0,0:0|0:0,0:0:0:0: -3,339,118743,1,8,0:0:0:0: -219,215,118858,2,0,P|224:170|244:-10,1,187,8|2,0:0|0:0,0:0:0:0: -114,85,119204,5,2,0:0:0:0: -145,112,119262,1,2,0:0:0:0: -151,155,119319,1,2,0:0:0:0: -134,195,119377,1,2,0:0:0:0: -102,223,119434,1,2,0:0:0:0: -84,265,119493,1,2,0:0:0:0: -80,305,119551,1,2,0:0:0:0: -101,342,119608,1,2,0:0:0:0: -135,372,119666,5,2,0:0:0:0: -190,375,119723,1,2,0:0:0:0: -230,335,119781,1,2,0:0:0:0: -280,309,119839,1,2,0:0:0:0: -336,310,119897,1,2,0:0:0:0: -377,346,119954,1,2,0:0:0:0: -425,374,120012,1,2,0:0:0:0: -475,348,120070,1,2,0:0:0:0: -495,297,120127,6,0,P|500:240|514:98,1,187,6|8,0:0|0:0,0:0:0:0: -351,20,120474,2,0,P|345:76|332:219,1,187,2|2,0:0|0:0,0:0:0:0: -415,362,120820,2,0,B|458:378|458:378|508:361,1,93.5,8|0,0:0|0:0,0:0:0:0: -407,268,121051,5,2,0:0:0:0: -332,321,121166,2,0,L|145:308,1,187,2|2,0:0|0:0,0:0:0:0: -213,192,121512,2,0,P|219:146|197:105,1,93.5,2|0,0:0|0:0,0:0:0:0: -47,283,121743,2,0,P|41:329|63:370,1,93.5,8|0,0:0|0:0,0:0:0:0: -213,192,121974,6,0,L|27:180,1,187,2|8,0:0|0:0,0:0:0:0: -146,308,122320,2,0,L|332:321,1,187,2|2,0:0|0:0,0:0:0:0: -226,107,122666,2,0,P|203:147|214:191,1,93.5,8|0,0:0|0:0,0:0:0:0: -83,365,122897,5,2,0:0:0:0: -31,289,123012,2,0,P|24:211|14:102,1,187,2|2,0:0|0:0,0:0:0:0: -214,192,123358,2,0,P|174:214|128:208,1,93.5,2|0,0:0|0:0,0:0:0:0: -303,114,123589,2,0,P|342:91|388:97,1,93.5,8|0,0:0|0:0,0:0:0:0: -498,293,123820,6,0,L|306:281,1,187,2|8,0:0|0:0,0:0:0:0: -214,192,124166,2,0,L|406:204,1,187,2|2,0:0|0:0,0:0:0:0: -278,344,124512,2,0,P|245:309|242:263,1,93.5,8|0,0:0|0:0,0:0:0:0: -408,48,124743,5,2,0:0:0:0: -327,94,124858,2,0,L|311:281,1,187,2|2,0:0|0:0,0:0:0:0: -214,192,125204,2,0,P|154:196|114:171,1,93.5,2|0,0:0|0:0,0:0:0:0: -60,84,125435,2,0,P|120:80|160:105,1,93.5,8|0,0:0|0:0,0:0:0:0: -110,374,125666,5,10,0:0:0:0: -10,209,125781,1,8,0:0:0:0: -184,284,125897,1,8,0:0:0:0: -0,326,126012,1,8,0:0:0:0: -125,181,126127,2,0,B|202:169|224:229|319:212,1,187,2|0,1:0|0:0,0:0:0:0: -398,154,126474,1,0,0:0:0:0: -398,154,126589,6,0,P|346:110|352:43,1,140.25,2|0,0:0|0:0,0:0:0:0: -413,83,126820,2,0,B|419:162|419:162|406:195|406:195|413:267,1,187,2|2,1:0|0:0,0:0:0:0: -367,346,127166,1,0,0:0:0:0: -275,323,127281,1,8,0:0:0:0: -195,372,127397,1,0,0:0:0:0: -195,372,127454,1,0,0:0:0:0: -195,372,127512,6,0,P|190:282|262:228,1,187,6|8,0:0|0:0,0:0:0:0: -330,85,127858,2,0,P|334:174|262:228,1,187,2|2,0:0|0:0,0:0:0:0: -157,129,128204,2,0,L|251:135,1,93.5,8|0,0:0|0:0,0:0:0:0: -456,206,128435,5,2,0:0:0:0: -394,273,128551,2,0,L|188:261,1,187,2|2,0:0|0:0,0:0:0:0: -298,358,128897,2,0,P|341:372|387:364,1,93.5,2|0,0:0|0:0,0:0:0:0: -303,177,129127,2,0,P|259:162|213:170,1,93.5,8|0,0:0|0:0,0:0:0:0: -20,270,129358,6,0,L|206:262,1,187,2|8,0:0|0:0,0:0:0:0: -303,177,129704,2,0,L|117:185,1,187,2|2,0:0|0:0,0:0:0:0: -22,90,130051,2,0,P|82:85|120:118,1,93.5,8|0,0:0|0:0,0:0:0:0: -206,261,130281,5,2,0:0:0:0: -128,351,130397,2,0,P|86:271|116:185,1,187,2|2,0:0|0:0,0:0:0:0: -206,261,130743,2,0,L|225:365,1,93.5,2|0,0:0|0:0,0:0:0:0: -320,268,130974,2,0,L|300:163,1,93.5,8|0,0:0|0:0,0:0:0:0: -236,21,131204,6,0,P|189:99|223:182,1,187,2|8,0:0|0:0,0:0:0:0: -368,330,131551,2,0,P|414:252|380:169,1,187,2|2,0:0|0:0,0:0:0:0: -285,84,131897,2,8,L|302:175,1,93.5,8|0,0:0|0:0,0:0:0:0: -256,337,132127,5,2,0:0:0:0: -167,301,132243,2,0,P|234:242|320:268,1,187,2|2,0:0|0:0,0:0:0:0: -104,372,132589,2,0,P|57:369|10:367,1,93.5,2|0,0:0|0:0,0:0:0:0: -155,245,132820,2,0,P|201:242|248:240,1,93.5,8|0,0:0|0:0,0:0:0:0: -376,268,133051,5,2,0:0:0:0: -363,249,133108,1,2,0:0:0:0: -356,228,133166,1,2,0:0:0:0: -355,206,133224,1,2,0:0:0:0: -360,184,133281,1,10,0:0:0:0: -372,165,133339,1,2,0:0:0:0: -388,150,133397,1,10,0:0:0:0: -408,140,133454,1,2,0:0:0:0: -431,136,133512,1,2,1:0:0:0: -433,216,133743,1,8,0:0:0:0: -433,216,133858,1,8,0:0:0:0: -500,268,133973,5,2,0:0:0:0: -495,296,134031,1,2,0:0:0:0: -490,324,134088,1,2,0:0:0:0: -485,352,134146,1,2,0:0:0:0: -480,380,134204,2,0,B|334:389|359:290|190:308,1,280.5,2|0,1:0|0:0,0:0:0:0: -213,83,134666,2,0,P|238:121|235:167,1,93.5,8|0,0:0|0:0,0:0:0:0: -109,244,134897,6,0,L|-10:240,1,93.5,4|0,0:0|0:0,0:0:0:0: -236,167,135127,2,0,L|329:170,1,93.5,8|0,0:0|0:0,0:0:0:0: -208,383,135358,2,0,L|21:376,1,187,2|8,0:0|0:0,0:0:0:0: -297,282,135704,2,0,L|203:278,1,93.5,0|2,0:0|0:0,0:0:0:0: -147,80,135935,6,0,L|240:83,1,93.5,0|8,0:0|0:0,0:0:0:0: -397,51,136166,2,0,L|347:130,1,93.5,0|2,0:0|0:0,0:0:0:0: -297,282,136397,2,0,L|253:199,1,93.5,0|8,0:0|0:0,0:0:0:0: -397,51,136627,1,0,0:0:0:0: -502,166,136743,6,0,L|409:169,1,93.5,2|0,0:0|0:0,0:0:0:0: -297,282,136974,2,0,L|390:285,1,93.5,8|0,0:0|0:0,0:0:0:0: -296,151,137204,6,0,L|203:154,1,93.5,2|0,0:0|0:0,0:0:0:0: -89,242,137435,2,0,L|182:245,1,93.5,8|0,0:0|0:0,0:0:0:0: -220,337,137666,6,0,L|-2:329,1,187,2|8,0:0|0:0,0:0:0:0: -202,154,138012,2,0,L|424:161,1,187,2|2,0:0|0:0,0:0:0:0: -338,61,138358,2,0,L|244:57,1,93.5,8|0,0:0|0:0,0:0:0:0: -431,315,138589,6,0,B|460:189|460:189|452:223|480:258,1,187,2|8,0:0|0:0,0:0:0:0: -507,343,138935,1,0,0:0:0:0: -507,343,139051,2,0,B|416:313|411:386|300:358,1,187,2|8,0:0|0:0,0:0:0:0: -177,244,139397,1,0,0:0:0:0: -177,244,139512,6,0,B|268:214|273:287|384:259,1,187,2|8,0:0|0:0,0:0:0:0: -424,173,139858,1,0,0:0:0:0: -339,99,139974,2,0,L|328:-1,1,93.5,2|2,0:0|0:0,0:0:0:0: -177,244,140204,2,0,L|167:151,1,93.5,8|0,0:0|0:0,0:0:0:0: -248,95,140435,6,0,L|257:187,1,93.5,2|0,0:0|0:0,0:0:0:0: -96,300,140666,2,0,L|86:207,1,93.5,8|0,0:0|0:0,0:0:0:0: -167,151,140897,6,0,L|177:244,1,93.5,2|0,0:0|0:0,0:0:0:0: -355,315,141127,2,0,L|346:222,1,93.5,8|0,0:0|0:0,0:0:0:0: -263,380,141358,6,0,P|317:344|444:352,1,187,2|8,0:0|0:0,0:0:0:0: -177,244,141704,1,0,0:0:0:0: -177,244,141820,2,0,P|123:280|-4:272,1,187,2|8,0:0|0:0,0:0:0:0: -0,182,142166,1,0,0:0:0:0: -176,58,142281,6,0,L|167:151,1,93.5,2|0,0:0|0:0,0:0:0:0: -345,221,142512,2,0,L|355:129,1,93.5,8|0,0:0|0:0,0:0:0:0: -257,188,142743,6,0,L|248:281,1,93.5,2|0,0:0|0:0,0:0:0:0: -426,351,142974,2,0,L|435:258,1,93.5,8|0,0:0|0:0,0:0:0:0: -203,348,143204,6,0,P|239:361|326:297,1,140.25,2|0,0:0|0:0,0:0:0:0: -435,258,143435,6,0,P|398:267|316:196,1,126.224996147919,8|0,0:0|0:0,0:0:0:0: -257,188,143666,6,0,P|292:194|361:121,1,112.2,2|0,0:0|0:0,0:0:0:0: -419,136,143897,6,0,P|388:138|333:70,1,98.1749970039369,8|0,0:0|0:0,0:0:0:0: -257,188,144127,6,0,L|275:1,1,187,2|8,0:0|0:0,0:0:0:0: -435,258,144474,1,0,0:0:0:0: -435,258,144589,2,0,L|453:71,1,187,2|8,0:0|0:0,0:0:0:0: -149,337,144935,1,0,0:0:0:0: -149,337,145051,6,0,L|159:232,1,93.5,2|0,0:0|0:0,0:0:0:0: -353,153,145281,2,0,L|342:257,1,93.5,8|0,0:0|0:0,0:0:0:0: -169,318,145512,6,0,L|181:199,1,93.5,2|0,0:0|0:0,0:0:0:0: -332,171,145742,2,0,L|319:300,1,93.5,8|0,0:0|0:0,0:0:0:0: -95,131,145974,6,0,L|104:28,1,93.5,2|0,0:0|0:0,0:0:0:0: -247,76,146204,2,0,L|237:169,1,93.5,8|0,0:0|0:0,0:0:0:0: -166,150,146435,2,0,L|176:57,1,93.5,2|0,0:0|0:0,0:0:0:0: -318,95,146666,2,0,L|308:188,1,93.5,8|0,0:0|0:0,0:0:0:0: -475,319,146897,6,0,L|465:216,1,93.5,2|0,0:0|0:0,0:0:0:0: -322,263,147127,2,0,L|332:357,1,93.5,8|0,0:0|0:0,0:0:0:0: -403,338,147358,2,0,L|394:245,1,93.5,2|0,0:0|0:0,0:0:0:0: -252,283,147589,2,0,L|261:376,1,93.5,8|0,0:0|0:0,0:0:0:0: -38,368,147820,6,0,L|140:358,1,93.5,2|0,0:0|0:0,0:0:0:0: -93,215,148050,2,0,L|-1:224,1,93.5,8|0,0:0|0:0,0:0:0:0: -247,203,148281,1,2,0:0:0:0: -186,101,148397,1,8,0:0:0:0: -365,200,148512,1,8,0:0:0:0: -189,304,148627,1,8,0:0:0:0: -237,20,148743,5,2,0:0:0:0: -95,132,148858,1,2,0:0:0:0: -95,132,148916,1,2,0:0:0:0: -95,132,148974,1,10,0:0:0:0: -276,126,149089,1,0,0:0:0:0: -125,24,149204,5,2,0:0:0:0: -189,196,149320,1,8,0:0:0:0: -361,132,149435,1,8,0:0:0:0: -425,304,149551,1,8,0:0:0:0: -330,357,149666,6,0,P|240:297|79:327,1,280.5,6|0,0:0|0:0,0:0:0:0: -237,168,150589,2,0,P|327:108|488:138,1,280.5,2|0,0:0|0:0,0:0:0:0: -401,288,151512,2,0,L|122:257,1,280.5,2|0,0:0|0:0,0:0:0:0: -44,309,152320,1,8,0:0:0:0: -44,309,152377,1,8,0:0:0:0: -44,309,152435,5,10,0:0:0:0: -44,197,152551,1,2,0:0:0:0: -151,162,152666,1,8,0:0:0:0: -216,253,152781,1,2,0:0:0:0: -281,344,152897,1,2,0:0:0:0: -388,309,153012,1,2,0:0:0:0: -388,197,153128,1,8,0:0:0:0: -281,162,153243,1,2,0:0:0:0: -216,253,153358,6,0,L|503:229,1,280.5,6|0,0:0|0:0,0:0:0:0: -296,131,154281,2,0,L|9:155,1,280.5,2|0,0:0|0:0,0:0:0:0: -148,338,155204,2,0,L|428:315,1,280.5,2|0,0:0|0:0,0:0:0:0: -492,225,156127,5,10,0:0:0:0: -492,225,156185,1,8,0:0:0:0: -492,225,156243,1,8,0:0:0:0: -320,168,156358,1,8,0:0:0:0: -427,315,156474,1,8,0:0:0:0: -427,315,156531,1,8,0:0:0:0: -427,315,156589,1,10,0:0:0:0: -427,133,156704,1,8,0:0:0:0: -320,280,156820,1,10,0:0:0:0: -492,225,156935,1,8,0:0:0:0: -320,280,157051,6,0,B|194:258|174:358|44:320,1,280.5,6|0,0:0|0:0,0:0:0:0: -0,138,157974,2,0,P|88:81|186:211,1,280.5,2|0,0:0|0:0,0:0:0:0: -281,344,158897,2,0,L|312:65,1,280.5,2|0,0:0|0:0,0:0:0:0: -419,30,159704,1,8,0:0:0:0: -419,30,159762,1,8,0:0:0:0: -419,30,159820,5,10,0:0:0:0: -484,121,159935,1,8,0:0:0:0: -419,212,160051,1,8,0:0:0:0: -312,177,160166,1,8,0:0:0:0: -312,65,160281,1,10,0:0:0:0: -205,30,160397,1,8,0:0:0:0: -140,121,160513,1,8,0:0:0:0: -206,210,160627,1,8,0:0:0:0: -312,65,160743,6,0,L|418:48,1,93.5,6|0,0:0|0:0,0:0:0:0: -484,121,160974,2,0,L|378:138,1,93.5,8|0,0:0|0:0,0:0:0:0: -206,210,161204,6,0,L|312:193,1,93.5,2|0,0:0|0:0,0:0:0:0: -378,266,161435,2,0,L|272:283,1,93.5,8|0,0:0|0:0,0:0:0:0: -44,197,161666,6,0,L|33:289,1,93.5,2|0,0:0|0:0,0:0:0:0: -116,362,161897,2,0,L|126:269,1,93.5,8|0,0:0|0:0,0:0:0:0: -216,117,162127,6,0,L|205:209,1,93.5,2|0,0:0|0:0,0:0:0:0: -288,282,162358,2,0,L|298:189,1,93.5,8|0,0:0|0:0,0:0:0:0: -388,124,162589,6,0,P|436:122|482:167,1,93.5,2|0,0:0|0:0,0:0:0:0: -494,219,162820,2,0,P|446:221|400:176,1,93.5,8|0,0:0|0:0,0:0:0:0: -496,64,163051,2,0,P|498:110|472:148,1,93.5,2|0,0:0|0:0,0:0:0:0: -386,278,163281,2,0,P|383:232|410:194,1,93.5,8|0,0:0|0:0,0:0:0:0: -511,346,163512,6,0,L|397:359,1,93.5,2|0,0:0|0:0,0:0:0:0: -195,271,163743,2,0,L|287:281,1,93.5,8|0,0:0|0:0,0:0:0:0: -410,194,163974,6,0,L|296:207,1,93.5,2|0,0:0|0:0,0:0:0:0: -94,119,164205,2,0,L|186:129,1,93.5,8|0,0:0|0:0,0:0:0:0: -440,44,164435,6,0,P|407:76|401:122,1,93.5,2|0,0:0|0:0,0:0:0:0: -458,266,164666,2,0,P|445:221|409:193,1,93.5,8|0,0:0|0:0,0:0:0:0: -255,171,164897,2,0,P|299:182|342:164,1,93.5,2|0,0:0|0:0,0:0:0:0: -508,108,165127,1,8,0:0:0:0: -494,219,165243,1,8,0:0:0:0: -494,219,165301,1,8,0:0:0:0: -494,219,165358,6,0,L|482:321,1,93.5,2|0,0:0|0:0,0:0:0:0: -341,164,165589,1,10,0:0:0:0: -341,164,165704,1,2,0:0:0:0: -306,264,165820,5,10,0:0:0:0: -271,234,165877,1,10,0:0:0:0: -225,232,165935,1,2,0:0:0:0: -188,258,165993,1,2,0:0:0:0: -176,303,166050,1,10,0:0:0:0: -164,348,166108,1,10,0:0:0:0: -127,374,166166,1,10,0:0:0:0: -81,372,166224,1,10,0:0:0:0: -46,343,166281,6,0,P|47:239|141:235,1,187,6|8,0:0|0:0,0:0:0:0: -225,232,166627,1,0,0:0:0:0: -225,232,166743,2,0,L|257:25,1,187,2|8,0:0|0:0,0:0:0:0: -150,1,167089,1,0,0:0:0:0: -150,1,167204,6,0,P|137:59|160:95,1,93.5,2|0,0:0|0:0,0:0:0:0: -235,165,167435,2,0,L|379:150,1,140.25,8|0,0:0|0:0,0:0:0:0: -426,172,167666,2,0,L|311:183,1,93.5,2|0,0:0|0:0,0:0:0:0: -223,301,167897,2,0,L|337:289,1,93.5,8|0,0:0|0:0,0:0:0:0: -476,116,168127,6,0,P|416:98|365:216,1,187,2|8,0:0|0:0,0:0:0:0: -425,314,168474,2,0,P|470:271|393:167,1,187,2|2,0:0|0:0,0:0:0:0: -280,170,168820,2,0,P|286:218|342:259,1,93.5,8|0,0:0|0:0,0:0:0:0: -352,356,169051,6,0,L|239:341,1,93.5,2|0,0:0|0:0,0:0:0:0: -122,225,169281,2,0,L|215:238,1,93.5,8|0,0:0|0:0,0:0:0:0: -425,171,169512,2,0,L|332:158,1,93.5,2|0,0:0|0:0,0:0:0:0: -200,91,169743,1,10,0:0:0:0: -203,126,169800,1,2,0:0:0:0: -206,163,169858,1,2,0:0:0:0: -211,201,169916,1,2,0:0:0:0: -215,238,169974,6,0,P|173:305|43:277,1,187,2|8,0:0|0:0,0:0:0:0: -29,212,170320,1,0,0:0:0:0: -29,212,170435,2,0,L|57:7,1,187,2|8,0:0|0:0,0:0:0:0: -127,111,170781,1,0,0:0:0:0: -127,111,170897,6,0,P|172:147|220:138,1,93.5,2|0,0:0|0:0,0:0:0:0: -389,111,171127,2,0,P|315:119|279:171,1,140.25,8|0,0:0|0:0,0:0:0:0: -264,184,171358,2,0,P|268:220|279:296,1,93.5,2|0,0:0|0:0,0:0:0:0: -470,358,171589,2,0,P|465:321|455:246,1,93.5,8|0,0:0|0:0,0:0:0:0: -508,108,171820,6,0,B|432:101|432:101|411:107|411:107|316:99,1,187,2|8,0:0|0:0,0:0:0:0: -214,201,172166,1,0,0:0:0:0: -214,201,172281,2,0,B|289:207|289:207|310:201|310:201|405:209,1,187,2|8,0:0|0:0,0:0:0:0: -223,301,172628,1,0,0:0:0:0: -223,301,172743,2,0,L|83:288,1,140.25,2|0,0:0|0:0,0:0:0:0: -59,302,172974,2,0,L|152:310,1,93.5,8|0,0:0|0:0,0:0:0:0: -329,295,173204,2,0,P|332:355|307:389,1,93.5,2|0,0:0|0:0,0:0:0:0: -264,186,173435,2,0,P|261:126|286:92,1,93.5,8|0,0:0|0:0,0:0:0:0: -170,178,173666,6,0,B|75:177|99:249|4:249,1,187,2|8,0:0|0:0,0:0:0:0: -203,99,174012,1,0,0:0:0:0: -203,99,174127,2,0,B|297:99|273:27|368:27,1,187,2|8,0:0|0:0,0:0:0:0: -484,72,174474,1,0,0:0:0:0: -484,72,174589,6,0,P|475:133|458:257,1,187,2|8,0:0|0:0,0:0:0:0: -361,315,174935,1,0,0:0:0:0: -361,315,175051,2,0,P|355:274|348:222,1,93.5,2|0,0:0|0:0,0:0:0:0: -249,292,175281,2,0,P|254:332|262:385,1,93.5,8|0,0:0|0:0,0:0:0:0: -398,152,175512,6,0,P|312:207|229:175,1,187,2|8,0:0|0:0,0:0:0:0: -164,280,175858,1,0,0:0:0:0: -164,280,175974,2,0,P|90:226|3:249,1,187,2|8,0:0|0:0,0:0:0:0: -237,182,176320,1,0,0:0:0:0: -237,182,176435,6,0,B|229:94|283:97|266:-7,1,187,2|8,0:0|0:0,0:0:0:0: -151,40,176781,1,0,0:0:0:0: -0,156,176897,2,0,L|93:149,1,93.5,2|0,0:0|0:0,0:0:0:0: -164,280,177127,2,0,L|62:286,1,93.5,8|0,0:0|0:0,0:0:0:0: -208,145,177358,5,6,0:0:0:0: -242,59,177474,1,0,0:0:0:0: -334,63,177589,1,8,0:0:0:0: -358,154,177704,1,0,0:0:0:0: -281,204,177820,1,2,0:0:0:0: -208,145,177935,1,0,0:0:0:0: -129,196,178051,1,8,0:0:0:0: -153,286,178166,1,0,0:0:0:0: -246,290,178281,6,0,L|235:384,1,93.5,2|0,0:0|0:0,0:0:0:0: -142,378,178512,2,0,L|153:286,1,93.5,8|0,0:0|0:0,0:0:0:0: -139,103,178743,2,0,L|128:197,1,93.5,2|0,0:0|0:0,0:0:0:0: -35,191,178974,2,0,L|45:98,1,93.5,8|0,0:0|0:0,0:0:0:0: -139,103,179204,6,0,P|186:128|228:120,1,93.5,2|0,0:0|0:0,0:0:0:0: -362,179,179435,2,0,P|316:174|277:198,1,93.5,8|0,0:0|0:0,0:0:0:0: -392,365,179666,5,2,0:0:0:0: -464,306,179781,1,8,0:0:0:0: -464,306,179839,1,8,0:0:0:0: -464,306,179897,1,8,0:0:0:0: -378,270,180012,1,8,0:0:0:0: -450,211,180127,5,2,0:0:0:0: -362,179,180243,1,8,0:0:0:0: -362,179,180301,1,8,0:0:0:0: -362,179,180358,2,0,L|257:164,1,93.5,8|0,0:0|0:0,0:0:0:0: -160,37,180589,5,2,0:0:0:0: -105,123,180704,1,8,0:0:0:0: -269,165,180820,1,8,0:0:0:0: -259,62,180935,1,8,0:0:0:0: -172,203,181051,6,0,P|205:334|201:384,1,187,6|8,0:0|0:0,0:0:0:0: -121,328,181397,1,0,0:0:0:0: -37,358,181512,2,0,P|4:227|8:177,1,187,2|8,0:0|0:0,0:0:0:0: -58,98,181858,1,0,0:0:0:0: -58,98,181974,6,0,P|104:96|150:106,1,93.5,2|0,0:0|0:0,0:0:0:0: -381,158,182204,2,0,P|334:191|224:165,1,140.25,8|0,0:0|0:0,0:0:0:0: -214,161,182435,2,0,L|223:260,1,93.5,2|0,0:0|0:0,0:0:0:0: -184,337,182666,1,8,0:0:0:0: -278,329,182781,6,0,B|383:304|353:370|477:341,1,187,2|2,0:0|0:0,0:0:0:0: -505,267,183127,2,0,P|488:184|474:75,1,187,8|2,0:0|0:0,0:0:0:0: -403,21,183474,2,0,P|382:61|397:133,1,93.5,0|8,0:0|0:0,0:0:0:0: -331,198,183704,1,0,0:0:0:0: -287,106,183820,6,0,P|225:59|118:89,1,187,2|8,0:0|0:0,0:0:0:0: -90,168,184166,1,0,0:0:0:0: -29,98,184281,2,0,P|36:44|36:0,1,93.5,2|0,0:0|0:0,0:0:0:0: -183,152,184512,2,0,P|176:206|176:250,1,93.5,8|0,0:0|0:0,0:0:0:0: -134,324,184743,6,0,P|183:295|325:315,1,187,2|8,0:0|0:0,0:0:0:0: -370,231,185089,1,0,0:0:0:0: -357,132,185204,2,0,P|308:161|166:141,1,187,2|8,0:0|0:0,0:0:0:0: -102,104,185551,1,0,0:0:0:0: -102,104,185666,6,0,L|89:-11,1,93.5,2|0,0:0|0:0,0:0:0:0: -103,202,185897,2,0,P|73:251|84:354,1,140.25,8|0,0:0|0:0,0:0:0:0: -101,371,186127,2,0,L|213:361,1,93.5,2|0,0:0|0:0,0:0:0:0: -281,384,186358,1,8,0:0:0:0: -254,295,186474,6,0,P|248:229|231:92,1,187,2|2,0:0|0:0,0:0:0:0: -274,29,186820,2,0,P|327:8|437:76,1,187,8|2,0:0|0:0,0:0:0:0: -509,130,187166,1,0,0:0:0:0: -422,165,187281,2,0,P|381:187|321:225,1,93.5,8|0,0:0|0:0,0:0:0:0: -268,273,187512,6,0,P|209:225|94:253,1,187,2|8,0:0|0:0,0:0:0:0: -25,205,187858,1,0,0:0:0:0: -36,296,187974,2,0,L|43:393,1,93.5,2|0,0:0|0:0,0:0:0:0: -95,151,188204,2,0,L|88:54,1,93.5,8|0,0:0|0:0,0:0:0:0: -164,6,188435,6,0,P|233:5|369:38,1,187,2|8,0:0|0:0,0:0:0:0: -438,57,188781,1,0,0:0:0:0: -367,123,188897,2,0,P|298:124|162:91,1,187,2|8,0:0|0:0,0:0:0:0: -95,151,189243,1,0,0:0:0:0: -95,151,189358,6,0,L|106:252,1,93.5,2|0,0:0|0:0,0:0:0:0: -54,321,189589,2,0,P|109:298|219:381,1,187,8|2,0:0|0:0,0:0:0:0: -285,305,189935,1,0,0:0:0:0: -370,338,190051,2,0,P|419:338|462:310,1,93.5,8|0,0:0|0:0,0:0:0:0: -497,235,190281,6,0,P|485:171|468:44,1,187,2|8,0:0|0:0,0:0:0:0: -387,10,190627,1,0,0:0:0:0: -387,10,190743,2,0,L|377:109,1,93.5,2|0,0:0|0:0,0:0:0:0: -294,258,190974,2,0,L|304:159,1,93.5,8|0,0:0|0:0,0:0:0:0: -291,73,191204,6,0,P|239:22|128:42,1,187,2|8,0:0|0:0,0:0:0:0: -110,126,191551,1,0,0:0:0:0: -161,202,191666,2,0,P|209:193|250:142,1,93.5,2|0,0:0|0:0,0:0:0:0: -133,37,191897,2,0,P|83:37|30:77,1,93.5,8|0,0:0|0:0,0:0:0:0: -13,160,192127,6,0,B|45:242|165:276|256:192|256:192|347:108|467:142|499:224,1,561,2|8,0:0|0:0,0:0:0:0: -373,263,193051,1,2,0:0:0:0: -13,224,193974,6,0,B|45:142|165:108|256:192|256:192|347:276|467:242|499:160,1,561,2|8,0:0|0:0,0:0:0:0: -373,121,194898,1,2,0:0:0:0: -139,263,195127,1,8,0:0:0:0: -343,342,195358,1,2,0:0:0:0: -373,121,195589,2,8,L|359:5,1,93.5 -232,190,195820,6,0,P|228:235|251:275,1,93.5,2|10,0:0|0:0,0:0:0:0: -447,186,196051,2,0,P|470:147|461:88,1,93.5,10|10,0:0|0:0,0:0:0:0: -327,213,196281,1,10,0:0:0:0: -512,262,196397,5,10,0:0:0:0: -496,271,196454,1,2,0:0:0:0: -483,284,196512,1,10,0:0:0:0: -472,299,196570,1,10,0:0:0:0: -463,316,196627,1,10,0:0:0:0: -456,335,196685,1,10,0:0:0:0: -452,358,196743,5,10,0:0:0:0: -426,322,196801,1,10,0:0:0:0: -390,303,196858,1,10,0:0:0:0: -347,295,196916,1,10,0:0:0:0: -303,298,196974,1,10,0:0:0:0: -269,319,197031,1,10,0:0:0:0: -240,350,197089,1,10,0:0:0:0: -199,361,197147,1,10,0:0:0:0: -151,345,197204,5,10,0:0:0:0: -112,305,197262,1,10,0:0:0:0: -104,251,197320,1,10,0:0:0:0: -127,202,197377,1,10,0:0:0:0: -172,171,197435,1,10,0:0:0:0: -226,173,197493,1,10,0:0:0:0: -267,207,197551,1,10,0:0:0:0: -319,215,197608,1,10,0:0:0:0: -364,185,197666,6,0,P|371:142|384:-12,1,187,6|8,0:0|0:0,0:0:0:0: -293,44,198012,1,0,0:0:0:0: -464,131,198127,2,0,P|457:174|444:328,1,187,2|8,0:0|0:0,0:0:0:0: -364,185,198473,1,0,0:0:0:0: -249,278,198589,6,0,P|198:265|118:255,1,93.5,2|0,0:0|0:0,0:0:0:0: -30,99,198820,1,8,0:0:0:0: -30,99,199051,2,0,P|76:91|121:79,1,93.5,2|0,0:0|0:0,0:0:0:0: -199,27,199281,1,8,0:0:0:0: -113,175,199396,1,0,0:0:0:0: -355,186,199512,6,0,P|284:122|191:131,1,187,2|8,0:0|0:0,0:0:0:0: -113,175,199858,1,0,0:0:0:0: -180,321,199974,2,0,P|188:279|192:191,1,93.5,2|0,0:0|0:0,0:0:0:0: -16,163,200204,2,0,P|8:205|4:293,1,93.5,8|0,0:0|0:0,0:0:0:0: -86,315,200435,5,2,0:0:0:0: -192,228,200551,1,0,0:0:0:0: -71,107,200666,2,0,B|57:79|57:79|74:12,1,93.5,8|0,0:0|0:0,0:0:0:0: -268,190,200897,2,0,B|282:218|282:218|265:285,1,93.5,2|0,0:0|0:0,0:0:0:0: -86,200,201127,2,0,L|187:185,1,93.5,8|0,0:0|0:0,0:0:0:0: -512,85,201358,6,0,P|428:94|348:27,1,187,2|8,0:0|0:0,0:0:0:0: -247,2,201704,1,0,0:0:0:0: -190,93,201820,2,0,P|185:138|171:219,1,93.5,2|0,0:0|0:0,0:0:0:0: -357,153,202051,2,0,P|364:198|384:277,1,93.5,8|0,0:0|0:0,0:0:0:0: -427,341,202281,5,2,0:0:0:0: -449,182,202397,1,0,0:0:0:0: -287,258,202512,2,0,L|190:278,1,93.5,8|0,0:0|0:0,0:0:0:0: -10,123,202743,2,0,B|78:138|78:138|103:170|103:170|182:186,1,187,2|8,0:0|0:0,0:0:0:0: -249,122,203089,1,0,0:0:0:0: -173,0,203204,6,0,P|165:46|162:92,1,93.5,2|0,0:0|0:0,0:0:0:0: -327,194,203435,2,0,P|334:147|337:101,1,93.5,8|0,0:0|0:0,0:0:0:0: -78,274,203666,2,0,P|159:213|264:257,1,187,2|8,0:0|0:0,0:0:0:0: -297,307,204012,1,0,0:0:0:0: -379,366,204127,6,0,P|387:315|390:269,1,93.5,2|0,0:0|0:0,0:0:0:0: -327,194,204358,1,8,0:0:0:0: -357,100,204474,1,0,0:0:0:0: -512,159,204589,6,0,L|420:176,1,93.5,2|0,0:0|0:0,0:0:0:0: -268,121,204820,1,8,0:0:0:0: -385,12,204935,1,0,0:0:0:0: -357,100,205051,6,0,L|160:75,1,187,2|8,0:0|0:0,0:0:0:0: -1,107,205397,1,0,0:0:0:0: -78,143,205512,2,0,B|94:114|94:114|74:32,1,93.5,2|0,0:0|0:0,0:0:0:0: -1,291,205743,2,0,B|-15:320|-15:320|5:402,1,93.5,8|0,0:0|0:0,0:0:0:0: -130,229,205974,6,0,L|7:215,1,93.5,2|0,0:0|0:0,0:0:0:0: -183,327,206204,1,8,0:0:0:0: -234,177,206320,1,0,0:0:0:0: -286,277,206435,2,0,P|374:289|468:223,1,187,2|8,0:0|0:0,0:0:0:0: -425,123,206781,1,0,0:0:0:0: -322,180,206897,6,0,P|224:170|135:140,1,187,2|8,0:0|0:0,0:0:0:0: -140,142,207358,2,0,P|150:195|154:258,1,93.5,2|0,0:0|0:0,0:0:0:0: -323,370,207589,2,0,P|313:317|309:254,1,93.5,8|0,0:0|0:0,0:0:0:0: -62,268,207820,6,0,P|127:324|222:300,1,187,2|8,0:0|0:0,0:0:0:0: -243,204,208166,1,0,0:0:0:0: -309,277,208281,2,0,P|365:282|426:290,1,93.5,2|0,0:0|0:0,0:0:0:0: -461,105,208512,2,0,P|404:99|344:92,1,93.5,8|0,0:0|0:0,0:0:0:0: -481,338,208743,6,0,P|492:262|383:195,2,187,2|8|2,0:0|0:0|0:0,0:0:0:0: -323,370,209320,1,0,0:0:0:0: -309,277,209435,6,0,L|289:153,1,93.5,8|0,0:0|0:0,0:0:0:0: -145,71,209666,2,0,L|262:115,1,93.5,2|0,0:0|0:0,0:0:0:0: -401,28,209897,2,0,L|303:107,1,93.5,8|0,0:0|0:0,0:0:0:0: -206,195,210127,5,2,0:0:0:0: -263,16,210243,1,0,0:0:0:0: -380,159,210358,1,8,0:0:0:0: -380,159,210589,6,0,P|333:151|288:141,1,93.5,2|0,0:0|0:0,0:0:0:0: -197,96,210820,1,8,0:0:0:0: -116,158,210935,1,0,0:0:0:0: -12,43,211051,6,0,P|58:50|103:60,1,93.5,2|0,0:0|0:0,0:0:0:0: -206,195,211281,1,8,0:0:0:0: -278,43,211397,1,0,0:0:0:0: -448,187,211512,6,0,P|357:198|287:140,1,187,2|8,0:0|0:0,0:0:0:0: -197,96,211858,1,0,0:0:0:0: -206,195,211974,5,10,0:0:0:0: -353,85,212089,1,0,0:0:0:0: -234,360,212204,1,8,0:0:0:0: -116,158,212320,1,8,0:0:0:0: -320,269,212435,6,0,P|392:256|515:238,1,187,6|8,0:0|0:0,0:0:0:0: -456,334,212781,1,0,0:0:0:0: -354,166,212897,2,0,P|282:179|159:197,1,187,2|8,0:0|0:0,0:0:0:0: -65,238,213243,1,0,0:0:0:0: -129,370,213358,6,0,P|139:303|154:247,1,93.5,2|0,0:0|0:0,0:0:0:0: -81,67,213589,1,8,0:0:0:0: -81,67,213820,2,0,P|90:112|96:159,1,93.5,2|0,0:0|0:0,0:0:0:0: -60,324,214051,1,8,0:0:0:0: -224,263,214166,1,0,0:0:0:0: -65,238,214281,6,0,L|-38:229,1,93.5,2|0,0:0|0:0,0:0:0:0: -130,367,214512,1,8,0:0:0:0: -304,314,214628,1,0,0:0:0:0: -224,263,214743,2,0,B|206:293|206:293|221:349,1,93.5,2|0,0:0|0:0,0:0:0:0: -366,147,214974,2,0,B|384:117|384:117|368:60,1,93.5,8|0,0:0|0:0,0:0:0:0: -204,176,215204,5,2,0:0:0:0: -361,243,215320,1,0,0:0:0:0: -294,103,215435,2,0,L|287:201,1,93.5,8|0,0:0|0:0,0:0:0:0: -50,91,215666,2,0,P|102:47|225:55,1,187,2|8,0:0|0:0,0:0:0:0: -432,36,216012,5,8,0:0:0:0: -432,36,216070,1,8,0:0:0:0: -432,36,216127,2,0,P|383:29|310:9,1,93.5,2|0,0:0|0:0,0:0:0:0: -393,222,216358,2,0,P|426:189|462:159,1,93.5,8|0,0:0|0:0,0:0:0:0: -295,134,216589,2,0,P|218:137|115:203,1,187,2|8,0:0|0:0,0:0:0:0: -48,248,216935,1,0,0:0:0:0: -18,62,217051,6,0,L|41:158,1,93.5,2|0,0:0|0:0,0:0:0:0: -131,296,217281,2,0,B|143:228|143:228|125:193|125:193|141:100,1,187,8|2,0:0|0:0,0:0:0:0: -279,110,217627,2,0,L|216:186,1,93.5,0|8,0:0|0:0,0:0:0:0: -131,296,217858,1,0,0:0:0:0: -194,368,217974,6,0,P|223:323|219:266,1,93.5,2|0,0:0|0:0,0:0:0:0: -48,248,218204,2,0,P|35:292|46:337,1,93.5,8|0,0:0|0:0,0:0:0:0: -274,225,218435,6,0,L|299:115,1,93.5,2|0,0:0|0:0,0:0:0:0: -2,80,218666,2,0,L|22:171,1,93.5,8|0,0:0|0:0,0:0:0:0: -254,53,218897,6,0,P|224:17|104:42,1,140.25,2|0,0:0|0:0,0:0:0:0: -195,199,219127,6,0,P|238:181|266:111,1,98.1749970039369,8|0,0:0|0:0,0:0:0:0: -82,73,219358,6,0,P|76:119|145:189,1,126.224996147919,2|0,2:0|2:0,2:0:0:0: -171,134,219589,6,0,L|182:63,1,56.0999982879639,8|0,0:0|0:0,0:0:0:0: -327,237,219820,6,0,P|229:220|153:292,1,187,2|8,0:0|0:0,0:0:0:0: -0,315,220166,1,0,0:0:0:0: -71,260,220281,2,0,B|87:291|87:291|74:358,1,93.5,2|0,0:0|0:0,0:0:0:0: -96,99,220512,2,0,B|80:68|80:68|93:1,1,93.5,8|0,0:0|0:0,0:0:0:0: -121,182,220743,6,0,L|9:170,1,93.5,2|0,0:0|0:0,0:0:0:0: -161,53,220974,1,8,0:0:0:0: -242,151,221089,1,0,0:0:0:0: -281,9,221204,2,0,P|379:-2|471:71,1,187,2|8,0:0|0:0,0:0:0:0: -389,306,221551,5,8,0:0:0:0: -389,306,221608,1,8,0:0:0:0: -389,306,221666,2,0,P|370:262|376:195,1,93.5,2|0,0:0|0:0,0:0:0:0: -427,130,221897,2,0,L|234:151,1,187,8|2,0:0|0:0,0:0:0:0: -120,283,222243,1,0,0:0:0:0: -210,299,222358,6,0,P|200:259|163:181,1,93.5,8|0,0:0|0:0,0:0:0:0: -267,2,222589,2,0,P|237:30|188:101,1,93.5,2|0,0:0|0:0,0:0:0:0: -0,103,222820,2,0,P|39:114|125:121,1,93.5,8|0,0:0|0:0,0:0:0:0: -301,317,223051,6,0,P|261:305|175:298,1,93.5,2|0,0:0|0:0,0:0:0:0: -122,344,223281,1,8,0:0:0:0: -180,210,223397,1,0,0:0:0:0: -323,244,223512,6,0,P|384:252|484:175,1,187,2|8,0:0|0:0,0:0:0:0: -425,99,223858,2,0,P|364:91|264:168,1,187,2|2,0:0|0:0,0:0:0:0: -180,210,224204,2,0,L|68:197,1,93.5,8|0,0:0|0:0,0:0:0:0: -5,166,224435,5,2,0:0:0:0: -64,286,224551,1,0,0:0:0:0: -154,124,224666,2,0,B|171:92|171:92|154:13,1,93.5,8|0,0:0|0:0,0:0:0:0: -84,78,224897,5,2,0:0:0:0: -241,118,225012,1,0,0:0:0:0: -84,78,225127,2,0,L|-13:89,1,93.5,8|0,0:0|0:0,0:0:0:0: -149,260,225358,6,0,B|251:234|212:312|352:265,1,187,2|8,0:0|0:0,0:0:0:0: -448,184,225704,2,0,B|324:153|324:153|310:177|284:198,1,187,2|2,0:0|0:0,0:0:0:0: -406,360,226051,2,0,P|412:311|418:257,1,93.5,8|0,0:0|0:0,0:0:0:0: -380,80,226281,1,2,0:0:0:0: -380,80,226512,5,8,0:0:0:0: -502,257,226627,1,2,0:0:0:0: -480,115,226743,5,2,0:0:0:0: -396,231,226858,1,8,0:0:0:0: -485,129,226974,5,8,0:0:0:0: -393,213,227089,1,8,0:0:0:0: -439,171,227204,6,0,L|296:157,1,140.25,2|2,0:0|0:0,0:0:0:0: -299,157,228588,6,0,P|275:197|283:252,1,93.5,2|0,0:0|0:0,0:0:0:0: -422,93,229280,2,0,P|428:47|407:6,1,93.5,2|0,0:0|0:0,0:0:0:0: -324,0,229973,1,2,0:0:0:0: -238,105,230204,5,0,0:0:0:0: -172,136,230434,1,0,0:0:0:0: -180,63,230665,1,0,0:0:0:0: -250,215,230896,6,0,L|231:364,1,140.25,2|2,0:0|0:0,0:0:0:0: -232,354,232280,6,0,L|125:371,1,93.5 -289,280,232973,2,0,L|396:297,1,93.5,2|0,0:0|0:0,0:0:0:0: -212,226,233665,1,2,0:0:0:0: -356,119,233896,5,0,0:0:0:0: -304,62,234127,1,0,0:0:0:0: -231,74,234357,1,0,0:0:0:0: -73,213,234588,6,0,L|216:227,1,140.25,2|2,0:0|0:0,0:0:0:0: -213,227,235973,6,0,P|237:187|229:132,1,93.5,2|0,0:0|0:0,0:0:0:0: -90,291,236665,2,0,P|83:336|107:379,1,93.5,2|0,0:0|0:0,0:0:0:0: -209,330,237357,6,0,L|147:318,1,46.75,2|0,0:0|0:0,0:0:0:0: -122,166,237819,1,0,0:0:0:0: -303,228,238050,1,0,0:0:0:0: -198,241,238280,6,0,P|161:169|186:107,1,140.25,2|0,0:0|0:0,0:0:0:0: -340,37,239204,5,0,0:0:0:0: -402,74,239434,1,0,0:0:0:0: -470,63,239665,1,2,0:0:0:0: -427,182,239896,5,0,0:0:0:0: -497,206,240127,1,0,0:0:0:0: -362,265,240357,5,2,0:0:0:0: -417,309,240588,1,0,0:0:0:0: -429,379,240819,1,0,0:0:0:0: -256,224,241050,5,2,0:0:0:0: -219,285,241280,1,0,0:0:0:0: -184,198,241511,1,0,0:0:0:0: -162,327,241742,1,0,0:0:0:0: -110,203,241973,6,0,P|64:196|16:229,1,93.5,2|2,0:0|0:0,0:0:0:0: -140,135,242665,2,0,P|148:95|140:71,1,46.75,2|0,0:0|0:0,0:0:0:0: -96,37,243127,1,2,0:0:0:0: -75,103,243357,1,0,0:0:0:0: -215,150,243588,5,2,0:0:0:0: -322,47,243819,1,0,0:0:0:0: -396,39,244050,2,0,L|448:32,1,46.75,2|0,0:0|0:0,0:0:0:0: -497,144,244511,2,0,L|395:133,1,93.5,2|0,0:0|0:0,0:0:0:0: -335,257,245204,1,0,0:0:0:0: -363,327,245434,6,0,P|405:282|382:203,1,140.25,2|0,0:0|0:0,0:0:0:0: -265,264,246357,1,2,0:0:0:0: -210,314,246588,1,0,0:0:0:0: -140,294,246819,2,0,P|132:264|133:230,1,46.75,2|0,0:0|0:0,0:0:0:0: -91,67,247280,5,2,0:0:0:0: -166,57,247511,2,0,P|163:80|157:102,1,46.75,2|0,0:0|0:0,0:0:0:0: -132,178,247973,2,0,L|194:170,2,46.75 -309,221,248665,1,2,0:0:0:0: -379,95,248896,1,0,0:0:0:0: -238,21,249127,6,0,P|228:61|228:79,1,46.75,2|0,0:0|0:0,0:0:0:0: -212,135,249588,1,0,0:0:0:0: -225,207,249819,1,2,0:0:0:0: -356,282,250050,6,0,P|366:242|366:224,1,46.75 -382,168,250511,1,0,0:0:0:0: -464,93,250742,6,0,B|441:76|441:76|363:99,1,93.5,2|0,0:0|0:0,0:0:0:0: -310,194,251550,2,0,L|228:184,1,70.1250026750566 -210,103,252247,1,0,0:0:0:0: -210,103,252702,6,0,L|141:111,1,70.1250026750566,2|0,0:0|0:0,0:0:0:0: -117,195,253506,1,2,0:0:0:0: -117,195,254095,6,0,L|36:184,1,70.1250026750566,2|2,0:0|0:0,0:0:0:0: -19,113,255580,1,2,0:0:0:0: -71,53,256480,6,0,P|126:48|182:100,1,122.718754681349,2|0,0:0|0:0,0:0:0:0: -211,259,257747,6,0,P|179:213|190:158,1,105.187504012585,2|0,0:0|0:0,0:0:0:0: -474,66,258892,6,0,P|433:121|242:116,1,271.734385365844,2|0,0:0|0:0,0:0:0:0: -210,216,263197,6,0,P|298:232|385:279,1,187,6|8,0:0|0:0,0:0:0:0: -456,330,263543,1,0,0:0:0:0: -465,242,263658,2,0,P|478:185|512:56,1,187,2|8,0:0|0:0,0:0:0:0: -425,84,264004,1,0,0:0:0:0: -368,19,264120,6,0,P|319:14|246:5,1,93.5,2|0,0:0|0:0,0:0:0:0: -280,139,264350,2,0,P|326:143|372:149,1,93.5,8|0,0:0|0:0,0:0:0:0: -197,57,264581,5,2,0:0:0:0: -121,35,264697,1,2,0:0:0:0: -50,67,264812,1,8,0:0:0:0: -21,139,264927,1,2,0:0:0:0: -37,213,265043,6,0,P|129:220|234:235,1,187,2|8,0:0|0:0,0:0:0:0: -314,216,265389,1,0,0:0:0:0: -283,308,265504,2,0,P|223:365|112:339,1,187,2|8,0:0|0:0,0:0:0:0: -57,295,265850,1,0,0:0:0:0: -142,255,265966,6,0,P|154:195|160:137,1,93.5,2|0,0:0|0:0,0:0:0:0: -52,120,266197,2,0,P|40:180|34:238,1,93.5,8|0,0:0|0:0,0:0:0:0: -217,109,266427,5,2,0:0:0:0: -297,102,266543,1,2,0:0:0:0: -368,138,266658,1,8,0:0:0:0: -406,207,266773,1,2,0:0:0:0: -404,283,266889,6,0,P|417:225|461:68,1,187,2|8,0:0|0:0,0:0:0:0: -503,22,267235,1,0,0:0:0:0: -411,13,267350,2,0,P|364:19|310:27,1,93.5,2|0,0:0|0:0,0:0:0:0: -237,75,267581,1,8,0:0:0:0: -169,6,267697,1,0,0:0:0:0: -148,102,267812,6,0,P|154:148|162:203,1,93.5,2|0,0:0|0:0,0:0:0:0: -333,216,268043,2,0,P|326:169|319:115,1,93.5,8|0,0:0|0:0,0:0:0:0: -63,146,268273,5,2,0:0:0:0: -11,206,268389,1,2,0:0:0:0: -2,283,268504,1,8,0:0:0:0: -36,352,268620,1,2,0:0:0:0: -107,381,268735,6,0,P|191:364|304:347,1,187,2|8,0:0|0:0,0:0:0:0: -370,299,269081,1,0,0:0:0:0: -333,216,269197,2,0,P|339:159|351:93,1,93.5,2|0,0:0|0:0,0:0:0:0: -288,44,269427,1,8,0:0:0:0: -368,2,269543,1,0,0:0:0:0: -512,90,269658,6,0,L|420:77,1,93.5,2|0,0:0|0:0,0:0:0:0: -173,113,269889,2,0,L|265:126,1,93.5,8|0,0:0|0:0,0:0:0:0: -381,222,270120,5,2,0:0:0:0: -306,244,270235,1,2,0:0:0:0: -232,267,270350,1,8,0:0:0:0: -158,289,270466,1,10,0:0:0:0: -154,280,270523,1,8,0:0:0:0: -150,272,270581,6,0,P|152:245|165:215,1,46.75,2|0,0:0|0:0,0:0:0:0: -136,76,270697,2,0,P|159:91|178:117,1,46.75,2|0,0:0|0:0,0:0:0:0: -318,154,270812,2,0,P|294:166|262:170,1,46.75,8|0,0:0|0:0,0:0:0:0: -103,158,270927,6,0,L|25:170,2,46.75,2|0|2,0:0|0:0|0:0,0:0:0:0: -407,33,271158,2,0,L|360:25,1,46.75,2|0,0:0|0:0,0:0:0:0: -216,97,271273,5,10,0:0:0:0: -221,91,271331,1,2,0:0:0:0: -227,87,271389,1,2,0:0:0:0: -235,86,271447,1,2,0:0:0:0: -243,87,271504,2,0,P|274:131|263:194,1,93.5,2|0,0:0|0:0,0:0:0:0: -389,311,271735,5,10,0:0:0:0: -367,268,271793,1,2,0:0:0:0: -377,221,271850,1,2,0:0:0:0: -417,190,271908,1,2,0:0:0:0: -466,194,271966,2,0,P|494:212|507:243,3,46.75,2|0|0|0,0:0|0:0|0:0|0:0,0:0:0:0: -439,260,272197,6,0,P|427:214|418:131,1,93.5,8|2,0:0|0:0,0:0:0:0: -436,94,272370,1,2,0:0:0:0: -441,88,272427,5,2,0:0:0:0: -391,121,272485,1,0,0:0:0:0: -334,118,272543,1,2,0:0:0:0: -285,90,272600,1,0,0:0:0:0: -262,39,272658,1,8,0:0:0:0: -219,3,272716,1,0,0:0:0:0: -163,0,272773,2,0,L|110:14,1,46.75,2|0,0:0|0:0,0:0:0:0: -13,60,272889,5,10,0:0:0:0: -49,87,272947,1,8,0:0:0:0: -61,128,273004,1,8,0:0:0:0: -53,174,273062,1,8,0:0:0:0: -26,207,273120,1,8,0:0:0:0: -13,249,273177,1,0,0:0:0:0: -21,291,273235,2,0,L|33:337,1,46.75,2|0,0:0|0:0,0:0:0:0: -126,380,273350,5,2,0:0:0:0: -162,383,273408,1,2,0:0:0:0: -194,367,273466,1,2,0:0:0:0: -213,339,273523,1,2,0:0:0:0: -242,320,273581,1,10,0:0:0:0: -277,322,273639,1,2,0:0:0:0: -307,345,273697,1,2,0:0:0:0: -343,352,273754,1,2,0:0:0:0: -375,334,273812,6,0,P|383:286|383:218,1,93.5,10|2,0:0|0:0,0:0:0:0: -380,221,273985,1,2,0:0:0:0: -370,203,274043,2,0,L|477:218,1,93.5,2|2,0:0|0:0,0:0:0:0: -263,211,274273,6,0,L|156:196,1,93.5,2|0,0:0|0:0,0:0:0:0: -103,234,274447,1,0,0:0:0:0: -103,234,274504,2,0,B|92:199|92:199|114:119,1,93.5,8|0,0:0|0:0,0:0:0:0: -315,46,274735,2,0,B|326:81|326:81|304:161,1,93.5,2|0,0:0|0:0,0:0:0:0: -248,83,274908,1,0,0:0:0:0: -248,83,274966,2,0,L|141:68,1,93.5,8|0,0:0|0:0,0:0:0:0: -18,156,275197,5,2,0:0:0:0: -115,326,275312,1,0,0:0:0:0: -115,326,275370,1,0,0:0:0:0: -115,326,275427,2,0,P|111:281|101:226,1,93.5,8|0,0:0|0:0,0:0:0:0: -218,50,275658,2,0,P|222:95|232:150,1,93.5,2|0,0:0|0:0,0:0:0:0: -307,291,275889,2,0,L|411:280,1,93.5,8|0,0:0|0:0,0:0:0:0: -471,313,276062,1,0,0:0:0:0: -471,313,276120,6,0,B|478:289|478:289|474:256,7,46.75,2|0|0|0|8|0|0|0,0:0|0:0|0:0|0:0|0:0|0:0|0:0|0:0,0:0:0:0: -372,161,276581,2,0,B|365:185|365:185|369:218,7,46.75,2|0|0|0|8|0|0|0,0:0|0:0|0:0|0:0|0:0|0:0|0:0|0:0,0:0:0:0: -446,195,277043,5,10,0:0:0:0: -234,69,277158,1,8,0:0:0:0: -307,291,277273,1,8,0:0:0:0: -495,131,277389,1,8,0:0:0:0: -327,42,277504,5,2,0:0:0:0: -321,85,277562,1,0,0:0:0:0: -303,124,277620,1,8,0:0:0:0: -271,153,277677,1,8,0:0:0:0: -231,167,277735,1,8,0:0:0:0: -188,170,277793,1,8,0:0:0:0: -147,161,277850,1,8,0:0:0:0: -108,142,277908,1,8,0:0:0:0: -80,111,277966,6,0,P|26:157|22:280,1,187,6|8,0:0|0:0,0:0:0:0: -84,330,278312,2,0,B|188:306|163:368|273:346,1,187,2|2,0:0|0:0,0:0:0:0: -351,312,278658,2,0,P|405:318|475:352,1,93.5,8|0,0:0|0:0,0:0:0:0: -277,257,278889,1,2,0:0:0:0: -277,257,279004,2,0,P|257:178|251:64,1,187,2|2,0:0|0:0,0:0:0:0: -321,3,279350,2,0,P|345:47|344:104,1,93.5,2|0,0:0|0:0,0:0:0:0: -178,142,279581,2,0,P|154:98|155:41,1,93.5,8|0,0:0|0:0,0:0:0:0: -250,72,279812,6,0,P|354:88|472:115,1,187,2|8,0:0|0:0,0:0:0:0: -452,198,280158,2,0,P|348:182|230:155,1,187,2|2,0:0|0:0,0:0:0:0: -208,235,280504,2,0,P|217:284|225:329,1,93.5,8|0,0:0|0:0,0:0:0:0: -125,215,280735,1,2,0:0:0:0: -125,215,280850,2,0,P|72:224|-13:122,1,187,2|2,0:0|0:0,0:0:0:0: -62,10,281197,2,0,P|69:52|67:110,1,93.5,2|0,0:0|0:0,0:0:0:0: -189,148,281427,2,0,P|187:101|194:55,1,93.5,8|0,0:0|0:0,0:0:0:0: -205,40,281600,1,0,0:0:0:0: -218,29,281658,6,0,P|303:43|413:60,1,187,2|8,0:0|0:0,0:0:0:0: -489,32,282004,2,0,P|524:69|499:203,1,187,2|2,0:0|0:0,0:0:0:0: -424,242,282350,2,0,P|416:191|412:130,1,93.5,8|0,0:0|0:0,0:0:0:0: -491,313,282581,1,2,0:0:0:0: -491,313,282697,2,0,P|427:279|296:283,1,187,2|2,0:0|0:0,0:0:0:0: -239,360,283043,2,0,P|230:291|217:234,1,93.5,2|0,0:0|0:0,0:0:0:0: -266,106,283273,2,0,P|275:175|288:232,1,93.5,8|0,0:0|0:0,0:0:0:0: -148,315,283504,6,0,P|91:273|-20:294,1,187,2|8,0:0|0:0,0:0:0:0: -162,217,283850,2,0,P|218:204|365:170,1,187,2|2,0:0|0:0,0:0:0:0: -95,87,284197,2,0,L|85:183,1,93.5,8|0,0:0|0:0,0:0:0:0: -61,358,284427,5,2,0:0:0:0: -61,358,284543,1,8,0:0:0:0: -227,288,284658,1,8,0:0:0:0: -227,288,284773,1,2,0:0:0:0: -159,375,284889,2,0,L|137:213,1,140.25,2|0,0:0|0:0,0:0:0:0: -216,73,285120,2,0,B|200:187|200:187|183:168|163:153,1,140.25,8|0,0:0|0:0,0:0:0:0: -121,113,285350,6,0,L|327:79,1,187,6|8,0:0|0:0,0:0:0:0: -377,144,285697,2,0,P|433:102|408:-9,1,187,2|2,0:0|0:0,0:0:0:0: -299,161,286043,2,0,L|285:253,1,93.5,8|0,0:0|0:0,0:0:0:0: -248,96,286273,1,2,0:0:0:0: -248,96,286389,2,0,P|202:52|83:71,1,187,2|2,0:0|0:0,0:0:0:0: -0,199,286735,2,0,P|51:195|108:172,1,93.5,2|0,0:0|0:0,0:0:0:0: -285,253,286966,2,8,P|239:229|196:185,1,93.5 -160,122,287197,6,0,L|126:341,1,187,2|8,0:0|0:0,0:0:0:0: -196,371,287543,2,0,P|276:320|373:351,1,187,2|2,0:0|0:0,0:0:0:0: -430,284,287889,2,0,P|479:295|538:303,1,93.5,8|0,0:0|0:0,0:0:0:0: -349,246,288120,1,2,0:0:0:0: -349,246,288235,2,0,P|336:185|319:51,1,187,2|2,0:0|0:0,0:0:0:0: -382,5,288581,2,0,L|491:21,1,93.5,2|0,0:0|0:0,0:0:0:0: -245,108,288812,2,0,L|136:92,1,93.5,8|0,0:0|0:0,0:0:0:0: -139,86,288985,1,0,0:0:0:0: -124,78,289043,6,0,P|142:128|46:249,1,187,2|8,0:0|0:0,0:0:0:0: -29,315,289389,2,0,P|114:328|249:358,1,187,2|2,0:0|0:0,0:0:0:0: -301,334,289735,2,0,P|292:280|283:203,1,93.5,8|0,0:0|0:0,0:0:0:0: -195,82,289966,1,2,0:0:0:0: -195,82,290081,2,0,B|163:199|163:199|209:254,1,187,2|2,0:0|0:0,0:0:0:0: -365,164,290427,2,0,L|258:148,1,93.5,2|0,0:0|0:0,0:0:0:0: -375,307,290658,2,0,L|482:323,1,93.5,8|0,0:0|0:0,0:0:0:0: -505,239,290889,6,0,P|519:179|483:55,1,187,2|8,0:0|0:0,0:0:0:0: -408,9,291235,2,0,P|334:30|193:48,1,187,2|2,0:0|0:0,0:0:0:0: -155,110,291581,2,0,P|118:102|55:94,1,93.5,8|0,0:0|0:0,0:0:0:0: -245,138,291812,2,0,P|285:200|249:315,1,187,2|8,0:0|0:0,0:0:0:0: -186,368,292158,1,0,0:0:0:0: -0,252,292273,6,0,L|147:236,1,140.25,2|0,0:0|0:0,0:0:0:0: -179,271,292504,2,0,L|82:282,1,93.5,8|0,0:0|0:0,0:0:0:0: -43,150,292735,2,0,L|139:138,1,93.5,2|0,0:0|0:0,0:0:0:0: -378,221,292966,2,0,P|309:240|212:164,1,187,8|2,0:0|0:0,0:0:0:0: -132,54,293312,1,0,0:0:0:0: -227,0,293427,2,0,L|205:119,1,93.5,8|0,0:0|0:0,0:0:0:0: -147,222,293658,5,2,0:0:0:0: -132,54,293773,1,0,0:0:0:0: -285,131,293889,2,0,P|331:141|388:146,1,93.5,8|0,0:0|0:0,0:0:0:0: -450,101,294120,5,2,0:0:0:0: -363,231,294235,1,2,0:0:0:0: -334,58,294350,1,8,0:0:0:0: -441,199,294466,1,2,0:0:0:0: -303,296,294581,6,0,L|254:308,3,46.75,2|2|2|0,0:0|0:0|0:0|0:0,0:0:0:0: -204,367,294812,2,0,L|158:355,3,46.75,8|2|8|2,0:0|0:0|0:0|0:0,0:0:0:0: -80,363,295043,1,2,0:0:0:0: -45,330,295100,1,2,0:0:0:0: -26,288,295158,1,10,0:0:0:0: -18,242,295216,1,2,0:0:0:0: -22,195,295273,1,2,0:0:0:0: -39,149,295331,1,2,0:0:0:0: -71,111,295389,1,2,0:0:0:0: -116,93,295447,1,2,0:0:0:0: -168,92,295504,6,0,L|391:131,1,187,6|8,0:0|0:0,0:0:0:0: -444,197,295850,1,0,0:0:0:0: -338,248,295966,2,0,L|115:209,1,187,2|8,0:0|0:0,0:0:0:0: -54,275,296312,1,0,0:0:0:0: -152,341,296427,2,0,L|268:360,1,93.5,2|0,0:0|0:0,0:0:0:0: -499,283,296658,2,0,P|473:256|339:249,1,140.25,8|0,0:0|0:0,0:0:0:0: -338,248,296889,2,0,L|324:124,1,93.5,2|0,0:0|0:0,0:0:0:0: -420,129,297120,1,8,0:0:0:0: -397,335,297235,1,0,0:0:0:0: -240,266,297350,6,0,B|197:242|197:242|56:271,1,187,2|8,0:0|0:0,0:0:0:0: -143,23,297697,2,0,B|186:47|186:47|327:18,1,187,2|2,0:0|0:0,0:0:0:0: -150,163,298043,2,0,L|50:147,1,93.5,8|0,0:0|0:0,0:0:0:0: -264,129,298273,2,0,B|334:122|334:122|371:146|371:146|460:136,1,187,2|8,0:0|0:0,0:0:0:0: -306,208,298620,2,0,L|270:313,1,93.5,0|2,0:0|0:0,0:0:0:0: -443,137,298850,5,10,0:0:0:0: -321,20,298966,1,8,0:0:0:0: -390,236,299081,1,10,0:0:0:0: -465,59,299197,6,0,B|352:46|412:116|277:97,1,187,2|8,0:0|0:0,0:0:0:0: -75,82,299543,1,0,0:0:0:0: -75,82,299658,2,0,P|122:26|258:65,1,187,2|8,0:0|0:0,0:0:0:0: -214,214,300004,1,0,0:0:0:0: -214,214,300120,2,0,L|194:102,1,93.5,2|0,0:0|0:0,0:0:0:0: -325,194,300350,2,0,L|303:362,1,140.25,8|0,0:0|0:0,0:0:0:0: -332,378,300581,2,0,L|222:364,1,93.5,2|0,0:0|0:0,0:0:0:0: -391,266,300812,2,0,L|501:280,1,93.5,8|0,0:0|0:0,0:0:0:0: -237,290,301043,6,0,L|42:262,1,187,2|8,0:0|0:0,0:0:0:0: -0,154,301389,1,0,0:0:0:0: -53,47,301504,2,0,L|248:75,1,187,2|8,0:0|0:0,0:0:0:0: -290,183,301850,1,0,0:0:0:0: -237,290,301966,2,0,L|138:275,1,93.5,2|0,0:0|0:0,0:0:0:0: -348,127,302197,2,0,L|447:112,1,93.5,8|0,0:0|0:0,0:0:0:0: -482,321,302427,2,0,P|448:268|318:266,1,187,2|8,0:0|0:0,0:0:0:0: -212,183,302773,1,0,0:0:0:0: -296,62,302889,6,0,P|307:111|306:171,1,93.5,2|0,0:0|0:0,0:0:0:0: -144,275,303120,2,0,P|133:226|134:166,1,93.5,8|0,0:0|0:0,0:0:0:0: -289,328,303350,2,0,B|183:302|233:387|95:356,1,187,2|8,0:0|0:0,0:0:0:0: -42,263,303697,1,0,0:0:0:0: -132,182,303812,6,0,P|180:125|149:5,1,187,2|8,0:0|0:0,0:0:0:0: -68,39,304158,1,0,0:0:0:0: -68,39,304273,2,0,P|55:75|49:136,1,93.5,2|0,0:0|0:0,0:0:0:0: -269,175,304504,2,0,P|282:139|288:78,1,93.5,8|0,0:0|0:0,0:0:0:0: -163,20,304735,6,0,P|173:115|183:232,1,187,2|8,0:0|0:0,0:0:0:0: -146,296,305081,2,0,P|197:258|325:295,1,187,2|2,0:0|0:0,0:0:0:0: -378,353,305427,1,8,0:0:0:0: -470,323,305543,1,0,0:0:0:0: -403,252,305658,6,0,P|411:158|421:65,1,187,2|8,0:0|0:0,0:0:0:0: -353,1,306004,1,0,0:0:0:0: -248,105,306120,2,0,P|304:107|352:65,1,93.5,2|0,0:0|0:0,0:0:0:0: -178,48,306350,2,0,P|136:26|91:31,1,93.5,8|0,0:0|0:0,0:0:0:0: -67,171,306581,6,0,P|56:224|49:280,1,93.5,2|0,0:0|0:0,0:0:0:0: -101,341,306812,1,8,0:0:0:0: -196,332,306927,1,0,0:0:0:0: -148,251,307043,2,0,P|207:210|328:230,1,187,2|8,0:0|0:0,0:0:0:0: -395,165,307389,1,0,0:0:0:0: -327,32,307504,6,0,P|315:80|308:129,1,93.5,2|0,0:0|0:0,0:0:0:0: -379,356,307735,2,0,P|391:308|398:259,1,93.5,8|0,0:0|0:0,0:0:0:0: -511,90,307966,6,0,L|483:-25,1,93.5,2|0,0:0|0:0,0:0:0:0: -473,292,308197,2,0,L|495:382,1,93.5,8|0,0:0|0:0,0:0:0:0: -512,192,308427,5,2,0:0:0:0: -418,163,308543,1,0,0:0:0:0: -375,249,308658,1,8,0:0:0:0: -379,256,308889,5,2,0:0:0:0: -281,219,309004,1,10,0:0:0:0: -275,203,309062,1,2,0:0:0:0: -271,188,309120,1,10,0:0:0:0: -268,171,309177,1,10,0:0:0:0: -265,156,309235,1,10,0:0:0:0: -264,140,309293,1,10,0:0:0:0: -263,124,309350,5,2,0:0:0:0: -233,165,309408,1,2,0:0:0:0: -189,185,309466,1,2,0:0:0:0: -142,183,309523,1,2,0:0:0:0: -105,155,309581,1,10,0:0:0:0: -86,111,309639,1,2,0:0:0:0: -90,63,309697,1,10,0:0:0:0: -122,27,309754,1,2,0:0:0:0: -169,16,309812,6,0,L|237:24,1,46.75,10|2,0:0|0:0,0:0:0:0: -263,124,309927,2,0,L|331:116,1,46.75,10|2,0:0|0:0,0:0:0:0: -361,42,310043,2,0,L|429:50,1,46.75,10|2,0:0|0:0,0:0:0:0: -495,106,310158,1,10,0:0:0:0: -495,106,310216,1,10,0:0:0:0: -495,106,310273,6,0,L|480:318,1,187,6|8,0:0|0:0,0:0:0:0: -428,371,310620,1,0,0:0:0:0: -316,222,310735,2,0,L|329:35,1,187,2|8,0:0|0:0,0:0:0:0: -242,71,311081,1,0,0:0:0:0: -316,222,311197,6,0,P|382:211|413:234,1,93.5,2|0,0:0|0:0,0:0:0:0: -481,292,311427,1,8,0:0:0:0: -481,292,311658,2,0,L|487:198,1,93.5,2|0,0:0|0:0,0:0:0:0: -495,106,311889,1,8,0:0:0:0: -316,222,312004,1,0,0:0:0:0: -428,371,312120,6,0,B|342:392|328:324|229:344,1,187,2|8,0:0|0:0,0:0:0:0: -157,369,312466,1,0,0:0:0:0: -61,235,312581,2,0,P|56:281|74:324,1,93.5,2|0,0:0|0:0,0:0:0:0: -214,214,312812,2,0,P|219:168|201:125,1,93.5,8|0,0:0|0:0,0:0:0:0: -90,63,313043,5,2,0:0:0:0: -146,259,313158,1,0,0:0:0:0: -288,113,313273,2,0,B|307:4,1,93.5,8|0,0:0|0:0,0:0:0:0: -129,166,313504,2,0,B|146:259,1,93.5,2|0,0:0|0:0,0:0:0:0: -178,48,313735,2,0,P|136:67|89:62,1,93.5,8|0,0:0|0:0,0:0:0:0: -357,237,313966,6,0,P|422:175|519:198,1,187,2|8,0:0|0:0,0:0:0:0: -490,283,314312,1,0,0:0:0:0: -465,372,314427,2,0,L|357:354,1,93.5,2|0,0:0|0:0,0:0:0:0: -264,221,314658,2,0,L|372:239,1,93.5,8|0,0:0|0:0,0:0:0:0: -201,356,314889,6,0,P|118:355|52:286,1,140.25,2|0,0:0|0:0,0:0:0:0: -32,263,315120,2,0,L|25:168,1,93.5,8|0,0:0|0:0,0:0:0:0: -258,36,315350,2,0,B|266:125|200:130|215:226,1,187,2|8,0:0|0:0,0:0:0:0: -262,294,315697,1,0,0:0:0:0: -353,237,315812,6,0,B|377:197|377:197|370:141,1,93.5,2|0,0:0|0:0,0:0:0:0: -262,294,316043,2,0,B|238:334|238:334|245:390,1,93.5,8|0,0:0|0:0,0:0:0:0: -372,356,316273,2,0,B|468:339,1,93.5,2|0,0:0|0:0,0:0:0:0: -213,213,316504,2,0,B|117:230,1,93.5,8|0,0:0|0:0,0:0:0:0: -36,14,316735,6,0,P|100:46|93:164,1,187,2|8,0:0|0:0,0:0:0:0: -37,357,317081,1,0,0:0:0:0: -37,357,317197,2,0,P|32:285|138:232,1,187,2|8,0:0|0:0,0:0:0:0: -334,185,317543,1,8,0:0:0:0: -334,185,317600,1,8,0:0:0:0: -334,185,317658,6,0,P|274:224|175:159,1,187,6|8,0:0|0:0,0:0:0:0: -207,84,318004,1,0,0:0:0:0: -387,119,318120,2,0,P|373:181|403:221,1,93.5,2|0,0:0|0:0,0:0:0:0: -491,311,318350,2,0,P|505:249|475:209,1,93.5,8|0,0:0|0:0,0:0:0:0: -222,356,318581,6,0,B|309:359|309:359|334:351|334:351|422:354,1,187,2|8,0:0|0:0,0:0:0:0: -491,311,318927,1,0,0:0:0:0: -304,229,319043,2,0,B|216:232|216:232|191:224|191:224|103:227,1,187,2|8,0:0|0:0,0:0:0:0: -35,184,319389,1,0,0:0:0:0: -197,0,319504,6,0,P|257:80|212:171,1,187,2|8,0:0|0:0,0:0:0:0: -231,155,319966,2,0,P|281:145|329:141,1,93.5,2|0,0:0|0:0,0:0:0:0: -501,305,320197,2,0,P|451:294|403:290,1,93.5,8|0,0:0|0:0,0:0:0:0: -152,382,320427,6,0,P|92:302|137:211,1,187,2|8,0:0|0:0,0:0:0:0: -143,136,320773,1,0,0:0:0:0: -221,242,320889,2,0,P|211:287|207:334,1,93.5,2|0,0:0|0:0,0:0:0:0: -63,159,321120,2,0,P|58:112|49:66,1,93.5,8|0,0:0|0:0,0:0:0:0: -340,49,321350,6,0,P|317:135|231:155,2,187,2|8|2,0:0|0:0|0:0,0:0:0:0: -173,47,321927,1,0,0:0:0:0: -143,136,322043,2,0,L|154:246,1,93.5,8|0,0:0|0:0,0:0:0:0: -400,384,322273,6,0,L|411:274,1,93.5,2|0,0:0|0:0,0:0:0:0: -257,173,322504,2,0,L|332:227,1,93.5,8|0,0:0|0:0,0:0:0:0: -512,154,322735,2,0,L|426:192,1,93.5,2|0,0:0|0:0,0:0:0:0: -256,352,322966,1,8,0:0:0:0: -170,310,323081,1,0,0:0:0:0: -100,373,323197,6,0,L|2:368,1,93.5,2|0,0:0|0:0,0:0:0:0: -152,229,323427,2,0,L|250:224,1,93.5,8|0,0:0|0:0,0:0:0:0: -93,294,323658,2,0,L|-5:289,1,93.5,2|0,0:0|0:0,0:0:0:0: -145,150,323888,2,0,L|243:145,1,93.5,8|0,0:0|0:0,0:0:0:0: -82,221,324120,5,2,0:0:0:0: -69,207,324177,1,2,0:0:0:0: -60,191,324235,1,2,0:0:0:0: -54,173,324293,1,2,0:0:0:0: -52,154,324350,1,10,0:0:0:0: -54,136,324408,1,2,0:0:0:0: -60,118,324466,1,10,0:0:0:0: -70,102,324523,1,10,0:0:0:0: -82,88,324581,5,2,0:0:0:0: -136,92,324638,1,2,0:0:0:0: -176,130,324696,1,10,0:0:0:0: -185,185,324754,1,2,0:0:0:0: -157,233,324811,1,10,0:0:0:0: -129,280,324870,1,10,0:0:0:0: -137,335,324927,1,10,0:0:0:0: -177,373,324985,1,10,0:0:0:0: -232,378,325043,6,0,B|320:375|320:375|344:382|344:382|418:380,1,187,6|8,0:0|0:0,0:0:0:0: -485,314,325389,1,0,0:0:0:0: -267,218,325504,2,0,B|179:215|179:215|155:222|155:222|81:220,1,187,2|8,0:0|0:0,0:0:0:0: -14,154,325850,1,0,0:0:0:0: -323,267,325966,6,0,P|341:225|331:180,1,93.5,2|0,0:0|0:0,0:0:0:0: -250,19,326197,1,8,0:0:0:0: -250,19,326427,2,0,L|240:115,1,93.5,2|0,0:0|0:0,0:0:0:0: -426,191,326658,2,0,L|435:94,1,93.5,8|0,0:0|0:0,0:0:0:0: -82,221,326889,6,0,B|159:244|180:198|267:218,1,187,2|8,0:0|0:0,0:0:0:0: -511,288,327235,1,0,0:0:0:0: -449,357,327350,2,0,B|341:346,1,93.5,2|0,0:0|0:0,0:0:0:0: -332,181,327581,2,0,B|440:192,1,93.5,8|0,0:0|0:0,0:0:0:0: -505,141,327812,5,2,0:0:0:0: -304,46,327927,1,0,0:0:0:0: -323,268,328043,2,0,P|341:229|327:170,1,93.5,8|0,0:0|0:0,0:0:0:0: -155,62,328273,2,0,P|137:101|151:160,1,93.5,2|0,0:0|0:0,0:0:0:0: -248,372,328504,2,0,B|140:383,1,93.5,8|0,0:0|0:0,0:0:0:0: -242,206,328735,6,0,B|297:201|297:201|302:204|302:204|305:200|305:200|433:189,1,187,2|8,0:0|0:0,0:0:0:0: -503,242,329081,1,0,0:0:0:0: -442,9,329197,2,0,B|423:49|423:49|434:97,1,93.5,2|0,0:0|0:0,0:0:0:0: -323,268,329427,2,0,B|341:227|341:227|330:179,1,93.5,8|0,0:0|0:0,0:0:0:0: -155,62,329658,6,0,L|171:222,1,140.25,2|0,0:0|0:0,0:0:0:0: -168,201,329889,2,0,P|123:169|75:182,1,93.5,8|0,0:0|0:0,0:0:0:0: -229,277,330120,2,0,L|322:267,1,93.5,2|0,0:0|0:0,0:0:0:0: -137,335,330350,2,0,L|43:325,1,93.5,8|0,0:0|0:0,0:0:0:0: -309,359,330581,6,0,P|346:302|414:298,1,140.25,2|0,0:0|0:0,0:0:0:0: -415,299,330812,2,0,P|405:251|426:205,1,93.5,8|0,0:0|0:0,0:0:0:0: -512,47,331043,2,0,L|502:140,1,93.5,2|0,0:0|0:0,0:0:0:0: -330,179,331273,2,0,L|339:85,1,93.5,8|0,0:0|0:0,0:0:0:0: -512,320,331504,6,0,B|450:318|452:378|380:370,1,140.25,2|0,0:0|0:0,0:0:0:0: -385,370,331735,2,0,L|291:360,1,93.5,8|0,0:0|0:0,0:0:0:0: -62,381,331966,1,2,0:0:0:0: -161,306,332081,1,8,0:0:0:0: -162,259,332138,1,8,0:0:0:0: -140,219,332196,1,8,0:0:0:0: -101,194,332254,1,8,0:0:0:0: -73,155,332312,1,8,0:0:0:0: -73,108,332370,1,8,0:0:0:0: -96,68,332427,6,0,P|152:99|289:37,1,187,6|8,0:0|0:0,0:0:0:0: -337,9,332773,1,0,0:0:0:0: -421,210,332889,2,0,B|435:170|435:170|418:119,1,93.5,2|0,0:0|0:0,0:0:0:0: -215,213,333120,2,0,B|201:253|201:253|217:303,1,93.5,8|0,0:0|0:0,0:0:0:0: -344,145,333350,6,0,B|340:81|340:81|344:76|344:76|340:73|340:73|335:-14,1,140.25,2|0,0:0|0:0,0:0:0:0: -337,9,333581,2,0,L|446:24,1,93.5,8|0,0:0|0:0,0:0:0:0: -498,196,333812,2,0,P|456:182|421:210,1,93.5,2|0,0:0|0:0,0:0:0:0: -292,360,334043,2,0,P|256:387|214:373,1,93.5,8|0,0:0|0:0,0:0:0:0: -32,201,334273,6,0,B|119:177|135:235|215:212,1,187,2|8,0:0|0:0,0:0:0:0: -214,212,334735,2,0,P|208:181|198:97,1,93.5,2|0,0:0|0:0,0:0:0:0: -306,267,334966,2,0,P|300:297|290:381,1,93.5,8|0,0:0|0:0,0:0:0:0: -72,357,335197,6,0,P|98:307|224:307,1,187,2|8,0:0|0:0,0:0:0:0: -291,359,335543,1,0,0:0:0:0: -498,196,335658,2,0,B|426:187|426:187|392:199|392:199|301:187,1,187,2|8,0:0|0:0,0:0:0:0: -221,176,336004,1,0,0:0:0:0: -10,86,336120,6,0,P|80:77|154:44,1,140.25,2|0,0:0|0:0,0:0:0:0: -143,50,336350,2,0,P|111:107|120:155,1,93.5,8|0,0:0|0:0,0:0:0:0: -277,245,336581,2,0,P|244:188|198:171,1,93.5,2|0,0:0|0:0,0:0:0:0: -41,262,336812,2,0,P|106:262|143:230,1,93.5,8|0,0:0|0:0,0:0:0:0: -223,176,337043,5,2,0:0:0:0: -221,157,337100,1,2,0:0:0:0: -219,138,337158,1,10,0:0:0:0: -217,120,337216,1,2,0:0:0:0: -215,101,337273,1,2,0:0:0:0: -213,82,337331,1,2,0:0:0:0: -211,64,337389,1,2,0:0:0:0: -209,45,337446,1,2,0:0:0:0: -208,27,337504,5,2,0:0:0:0: -258,48,337561,1,2,0:0:0:0: -283,97,337619,1,2,0:0:0:0: -270,151,337677,1,2,0:0:0:0: -227,184,337734,1,10,0:0:0:0: -183,217,337793,1,10,0:0:0:0: -170,270,337851,1,10,0:0:0:0: -195,319,337909,1,10,0:0:0:0: -246,340,337966,6,0,B|313:336|313:336|346:346|346:346|438:337,1,187,6|8,0:0|0:0,0:0:0:0: -501,276,338312,1,0,0:0:0:0: -266,215,338427,2,0,B|198:211|198:211|165:221|165:221|73:212,1,187,2|8,0:0|0:0,0:0:0:0: -11,151,338773,1,0,0:0:0:0: -252,34,338889,6,0,B|233:78|233:78|248:121,1,93.5,2|0,0:0|0:0,0:0:0:0: -425,190,339120,2,0,B|444:146|444:146|428:102,1,93.5,8|0,0:0|0:0,0:0:0:0: -336,155,339350,5,10,0:0:0:0: -336,173,339407,1,8,0:0:0:0: -337,192,339465,1,8,0:0:0:0: -338,211,339523,1,8,0:0:0:0: -338,229,339580,1,8,0:0:0:0: -339,248,339638,1,8,0:0:0:0: -340,267,339696,1,8,0:0:0:0: -340,285,339753,1,8,0:0:0:0: -340,303,339812,6,0,P|426:327|487:262,1,187,6|8,0:0|0:0,0:0:0:0: -425,190,340158,1,0,0:0:0:0: -246,340,340273,2,0,P|249:296|209:250,1,93.5,2|0,0:0|0:0,0:0:0:0: -56,129,340504,2,0,P|53:173|93:219,1,93.5,8|0,0:0|0:0,0:0:0:0: -306,198,340735,6,0,B|310:146|310:146|315:138|315:138|311:130|311:130|323:-1,1,187,2|8,0:0|0:0,0:0:0:0: -237,53,341081,1,0,0:0:0:0: -340,267,341197,2,0,P|368:263|441:256,1,93.5,2|0,0:0|0:0,0:0:0:0: -246,340,341427,2,0,P|217:336|145:329,1,93.5,8|0,0:0|0:0,0:0:0:0: -13,157,341658,6,0,B|101:149|101:221|190:213,1,187,2|8,0:0|0:0,0:0:0:0: -241,137,342004,1,0,0:0:0:0: -42,237,342120,2,0,P|35:289|60:336,1,93.5,2|0,0:0|0:0,0:0:0:0: -162,129,342350,2,0,P|169:77|144:30,1,93.5,8|0,0:0|0:0,0:0:0:0: -153,329,342581,6,0,B|223:321|223:321|269:337|269:337|336:331,1,187,2|8,0:0|0:0,0:0:0:0: -417,379,342927,1,0,0:0:0:0: -306,198,343043,2,0,B|298:113|370:113|362:25,1,187,2|8,0:0|0:0,0:0:0:0: -489,112,343389,1,8,0:0:0:0: -489,112,343447,1,8,0:0:0:0: -489,112,343504,6,0,P|504:193|417:256,1,187,2|8,0:0|0:0,0:0:0:0: -248,341,343850,2,0,P|232:259|319:196,1,187,2|2,0:0|0:0,0:0:0:0: -508,361,344197,2,0,L|416:378,1,93.5,8|0,0:0|0:0,0:0:0:0: -401,373,344370,1,0,0:0:0:0: -386,367,344427,6,0,L|192:354,1,187,2|8,0:0|0:0,0:0:0:0: -107,375,344773,1,0,0:0:0:0: -122,199,344889,2,0,P|144:240|139:286,1,93.5,2|0,0:0|0:0,0:0:0:0: -13,157,345120,2,0,P|7:111|29:70,1,93.5,8|0,0:0|0:0,0:0:0:0: -200,35,345350,6,0,L|302:46,1,93.5,2|0,0:0|0:0,0:0:0:0: -396,207,345581,2,0,L|303:196,1,93.5,8|0,0:0|0:0,0:0:0:0: -384,23,345812,2,0,L|373:115,1,93.5,2|0,0:0|0:0,0:0:0:0: -212,219,346043,2,0,L|223:117,1,93.5,8|0,0:0|0:0,0:0:0:0: -512,279,346273,6,0,P|483:282|372:294,1,140.25,2|0,0:0|0:0,0:0:0:0: -349,363,346504,6,0,P|328:360|251:351,1,98.1749970039369,8|0,0:0|0:0,0:0:0:0: -212,293,346735,6,0,P|188:295|74:307,1,126.224996147919,2|0,0:0|0:0,0:0:0:0: -27,257,346966,6,0,P|14:222|23:192,1,56.0999982879639,8|0,0:0|0:0,0:0:0:0: -133,13,347197,6,0,L|122:205,1,187,6|8,0:0|0:0,0:0:0:0: -251,351,347543,1,0,0:0:0:0: -311,280,347658,2,0,P|331:238|316:186,1,93.5,2|0,0:0|0:0,0:0:0:0: -232,39,347889,2,0,P|212:80|221:125,1,93.5,8|0,0:0|0:0,0:0:0:0: -466,107,348120,6,0,P|403:112|340:117,1,93.5,2|0,0:0|0:0,0:0:0:0: -228,202,348350,2,0,P|290:196|353:191,1,93.5,8|0,0:0|0:0,0:0:0:0: -489,256,348581,2,0,P|426:261|363:266,1,93.5,2|0,0:0|0:0,0:0:0:0: -251,351,348811,2,0,P|313:345|376:340,1,93.5,8|0,0:0|0:0,0:0:0:0: -360,351,348985,1,0,0:0:0:0: -375,359,349043,6,0,P|426:304|407:190,1,187,2|8,0:0|0:0,0:0:0:0: -372,115,349389,1,0,0:0:0:0: -496,18,349504,2,0,L|488:111,1,93.5,2|0,0:0|0:0,0:0:0:0: -328,286,349735,2,0,L|320:192,1,93.5,8|0,0:0|0:0,0:0:0:0: -125,50,349966,6,0,P|170:97|307:65,1,187,2|8,0:0|0:0,0:0:0:0: -356,28,350312,1,0,0:0:0:0: -227,184,350427,2,0,B|262:280|198:280|230:384,1,187,2|8,0:0|0:0,0:0:0:0: -134,342,350773,1,0,0:0:0:0: -10,277,350889,6,0,P|7:223|-1:72,1,187,2|8,0:0|0:0,0:0:0:0: -51,13,351235,1,0,0:0:0:0: -215,180,351350,2,0,P|218:234|226:385,1,187,2|8,0:0|0:0,0:0:0:0: -502,277,351812,6,0,P|505:223|513:72,1,187,2|8,0:0|0:0,0:0:0:0: -461,13,352158,1,0,0:0:0:0: -372,115,352273,2,0,P|356:141|366:217,1,93.5,2|0,0:0|0:0,0:0:0:0: -440,349,352504,2,0,P|425:322|353:292,1,93.5,8|0,0:0|0:0,0:0:0:0: -99,278,352735,6,0,L|285:258,1,187,2|8,0:0|0:0,0:0:0:0: -371,292,353081,1,0,0:0:0:0: -450,211,353197,2,0,L|357:201,1,93.5,2|0,0:0|0:0,0:0:0:0: -191,152,353427,2,0,L|283:142,1,93.5,8|0,0:0|0:0,0:0:0:0: -393,31,353658,6,0,B|365:69|365:69|372:116,1,93.5,2|0,0:0|0:0,0:0:0:0: -489,256,353889,2,0,B|517:218|517:218|509:170,1,93.5,8|0,0:0|0:0,0:0:0:0: -357,201,354120,2,0,P|366:239|372:311,1,93.5,2|0,0:0|0:0,0:0:0:0: -498,96,354350,2,0,P|502:49|512:3,1,93.5,8|0,0:0|0:0,0:0:0:0: -512,333,354581,6,0,B|427:318|423:388|325:362,1,187,2|8,0:0|0:0,0:0:0:0: -284,258,354927,1,0,0:0:0:0: -228,334,355043,2,0,B|32:324,1,187,2|8,0:0|0:0,0:0:0:0: -5,239,355389,1,0,0:0:0:0: -199,79,355504,5,10,0:0:0:0: -110,108,355620,1,8,0:0:0:0: -208,112,355735,5,8,0:0:0:0: -124,116,355851,1,8,0:0:0:0: -211,141,355966,5,10,0:0:0:0: -139,124,356082,1,8,0:0:0:0: -210,164,356197,5,8,0:0:0:0: -153,133,356313,1,8,0:0:0:0: -90,211,356427,6,0,L|292:193,1,187,6|8,0:0|0:0,0:0:0:0: -329,116,356773,1,0,0:0:0:0: -450,258,356889,2,0,L|356:266,1,93.5,2|0,0:0|0:0,0:0:0:0: -414,101,357120,2,0,L|507:92,1,93.5,8|0,0:0|0:0,0:0:0:0: -304,355,357350,6,0,P|252:281|275:194,1,187,2|8,0:0|0:0,0:0:0:0: -329,116,357697,1,0,0:0:0:0: -110,47,357812,5,2,0:0:0:0: -147,134,357927,1,8,0:0:0:0: -93,210,358043,1,10,0:0:0:0: -130,297,358158,1,8,0:0:0:0: -304,355,358273,6,0,L|102:337,1,187,2|8,0:0|0:0,0:0:0:0: -30,374,358620,1,0,0:0:0:0: -0,202,358735,2,0,L|93:210,1,93.5,2|0,0:0|0:0,0:0:0:0: -218,58,358966,2,0,L|124:49,1,93.5,8|0,0:0|0:0,0:0:0:0: -265,250,359197,6,0,B|350:227|364:281|472:252,2,187,2|8|2,0:0|0:0|0:0,0:0:0:0: -202,180,359773,1,0,0:0:0:0: -280,128,359889,1,8,0:0:0:0: -218,58,360004,1,0,0:0:0:0: -407,0,360120,6,0,L|387:186,1,187,2|8,0:0|0:0,0:0:0:0: -449,257,360466,1,0,0:0:0:0: -304,355,360581,2,0,P|310:296|359:272,1,93.5,2|0,0:0|0:0,0:0:0:0: -479,178,360812,2,0,P|473:237|423:260,1,93.5,8|0,0:0|0:0,0:0:0:0: -280,128,361043,6,0,L|274:28,1,93.5,2|0,0:0|0:0,0:0:0:0: -193,261,361273,2,0,L|198:354,1,93.5,8|0,0:0|0:0,0:0:0:0: -36,373,361504,5,8,0:0:0:0: -74,286,361620,1,2,0:0:0:0: -8,219,361735,1,2,0:0:0:0: -46,134,361851,1,8,0:0:0:0: -193,261,361966,6,0,P|274:272|338:188,1,187,2|8,0:0|0:0,0:0:0:0: -280,128,362312,1,0,0:0:0:0: -136,99,362427,2,0,P|123:154|141:192,1,93.5,2|0,0:0|0:0,0:0:0:0: -304,355,362658,2,0,P|317:300|298:261,1,93.5,8|0,0:0|0:0,0:0:0:0: -291,256,362831,1,0,0:0:0:0: -278,244,362889,6,0,L|485:247,1,187,2|8,0:0|0:0,0:0:0:0: -202,180,363235,2,0,L|-5:177,1,187,2|2,0:0|0:0,0:0:0:0: -280,128,363581,2,0,L|383:126,1,93.5,8|0,0:0|0:0,0:0:0:0: -202,180,363812,6,0,B|158:268|240:272|190:359,2,187,2|8|2,0:0|0:0|0:0,0:0:0:0: -280,128,364389,1,0,0:0:0:0: -136,99,364504,2,0,P|123:44|141:5,1,93.5,8|0,0:0|0:0,0:0:0:0: -278,244,364735,6,0,P|291:299|272:337,1,93.5,2|0,0:0|0:0,0:0:0:0: -36,304,364966,2,0,B|50:297|50:297|51:307|51:307|59:297|59:297|60:306|60:306|68:296|68:296|69:305|69:305|77:295|77:295|78:305|78:305|85:294|85:294|86:304|86:304|94:294|94:294|95:303|95:303|103:293|103:293|104:302|104:302|112:292|112:292|113:302|113:302|121:291|121:291|121:301|121:301|129:290|129:290|130:300|130:300|138:290|138:290|139:299|139:299|147:289|147:289|148:299|148:299|156:288|156:288|156:298|156:298|164:287|164:287|165:297|165:297|173:287|173:287|174:296|174:296|182:286|182:286|183:295|183:295|198:289,1,374,8|0,0:0|0:0,0:0:0:0: -277,331,365543,1,0,0:0:0:0: -437,330,365658,6,0,P|467:262|450:218,1,93.5,2|0,0:0|0:0,0:0:0:0: -307,44,365889,2,0,P|277:112|294:156,1,93.5,8|0,0:0|0:0,0:0:0:0: -374,266,366120,1,2,0:0:0:0: -500,153,366235,2,0,L|516:35,2,93.5,0|8|0,0:0|0:0|0:0,0:0:0:0: -374,266,366581,6,0,L|386:358,1,93.5,2|0,0:0|0:0,0:0:0:0: -414,164,366812,2,0,P|322:168|265:263,1,187,8|2,0:0|0:0,0:0:0:0: -188,359,367158,1,0,0:0:0:0: -117,297,367273,2,0,P|115:271|108:189,1,93.5,8|0,0:0|0:0,0:0:0:0: -15,83,367504,6,0,B|192:130|204:-6|413:48,1,374,2|2,0:0|0:0,0:0:0:0: -468,13,368081,1,0,0:0:0:0: -445,104,368197,2,0,P|448:150|452:197,1,93.5,8|0,0:0|0:0,0:0:0:0: -356,295,368427,6,0,P|443:278|500:348,1,187,2|8,0:0|0:0,0:0:0:0: -284,353,368773,2,0,P|196:368|140:298,1,187,2|2,0:0|0:0,0:0:0:0: -99,213,369120,2,0,P|145:216|192:220,1,93.5,8|0,0:0|0:0,0:0:0:0: -378,41,369350,6,0,B|291:17|285:85|196:62,1,187,2|8,0:0|0:0,0:0:0:0: -111,24,369697,1,0,0:0:0:0: -17,161,369812,2,0,P|11:115|32:74,1,93.5,2|0,0:0|0:0,0:0:0:0: -152,211,370043,2,0,P|158:257|138:299,1,93.5,8|0,0:0|0:0,0:0:0:0: -5,384,370273,5,2,0:0:0:0: -58,268,370389,1,2,0:0:0:0: -130,372,370504,1,8,0:0:0:0: -183,256,370620,1,8,0:0:0:0: -187,237,370677,1,8,0:0:0:0: -191,219,370735,1,10,0:0:0:0: -196,201,370793,1,8,0:0:0:0: -200,183,370850,1,8,0:0:0:0: -205,165,370908,1,8,0:0:0:0: -209,146,370966,1,10,0:0:0:0: -111,24,371081,1,2,0:0:0:0: -197,62,371197,6,0,L|387:49,1,187,6|8,0:0|0:0,0:0:0:0: -315,322,371658,2,0,L|125:335,1,187,2|8,0:0|0:0,0:0:0:0: -457,193,372120,2,0,L|444:379,1,187,2|8,0:0|0:0,0:0:0:0: -55,191,372581,2,0,L|63:67,1,93.5,2|0,0:0|0:0,0:0:0:0: -68,4,372812,1,8,0:0:0:0: -152,46,372927,1,0,0:0:0:0: -186,263,373043,6,0,L|-4:276,1,187,6|8,0:0|0:0,0:0:0:0: -326,121,373504,2,0,L|516:108,1,187,2|8,0:0|0:0,0:0:0:0: -491,199,373850,1,0,0:0:0:0: -468,288,373966,2,0,L|282:301,1,187,2|8,0:0|0:0,0:0:0:0: -203,5,374427,2,0,L|328:-3,1,93.5,2|0,0:0|0:0,0:0:0:0: -389,13,374658,1,8,0:0:0:0: -329,84,374773,1,8,0:0:0:0: -327,102,374830,1,8,0:0:0:0: -326,121,374889,6,0,L|516:108,1,187,6|8,0:0|0:0,0:0:0:0: -227,377,375350,1,2,0:0:0:0: -138,348,375466,1,8,0:0:0:0: -138,254,375581,1,8,0:0:0:0: -227,225,375697,1,2,0:0:0:0: -282,301,375812,2,0,L|468:288,1,187,2|8,0:0|0:0,0:0:0:0: -230,83,376273,2,0,L|44:96,1,187,2|8,0:0|0:0,0:0:0:0: -11,185,376620,1,0,0:0:0:0: -303,212,376735,6,0,L|316:26,1,187,6|8,0:0|0:0,0:0:0:0: -43,96,377197,1,2,0:0:0:0: -72,7,377313,1,8,0:0:0:0: -166,7,377428,1,8,0:0:0:0: -195,96,377544,1,8,0:0:0:0: -119,151,377658,2,0,L|132:337,1,187,2|8,0:0|0:0,0:0:0:0: -439,382,378120,2,0,L|426:196,1,187,2|8,0:0|0:0,0:0:0:0: -348,10,378581,6,0,B|414:65|393:172|309:195|241:175|241:175|174:156|90:178|69:285|132:337,1,561,6|8,0:0|0:0,0:0:0:0: -444,354,379504,2,0,P|501:284|473:199,1,187,2|8,0:0|0:0,0:0:0:0: -348,10,379850,2,0,P|291:80|319:165,1,187,2|2,0:0|0:0,0:0:0:0: -408,139,380197,2,0,L|419:46,1,93.5,8|0,0:0|0:0,0:0:0:0: -396,231,380427,5,2,0:0:0:0: -396,231,380543,2,0,P|322:217|256:317,1,187,2|2,0:0|0:0,0:0:0:0: -324,358,380889,2,0,L|417:347,1,93.5,2|0,0:0|0:0,0:0:0:0: -255,294,381120,2,0,L|162:283,1,93.5,8|0,0:0|0:0,0:0:0:0: -32,66,381350,5,2,0:0:0:0: -32,66,381466,2,0,P|106:52|172:152,1,187,2|2,0:0|0:0,0:0:0:0: -104,193,381812,2,0,L|11:182,1,93.5,2|0,0:0|0:0,0:0:0:0: -173,129,382043,2,0,L|266:118,1,93.5,8|0,0:0|0:0,0:0:0:0: -490,320,382273,6,2,L|408:303,3,46.75,2|2|10|2,0:0|0:0|0:0|0:0,0:0:0:0: -427,332,382504,2,2,L|345:315,3,46.75,2|2|10|2,0:0|0:0|0:0|0:0,0:0:0:0: -349,341,382735,5,10,0:0:0:0: -364,312,382792,1,2,0:0:0:0: -365,280,382850,1,10,0:0:0:0: -351,251,382908,1,2,0:0:0:0: -325,232,382966,1,10,0:0:0:0: -293,227,383023,1,2,0:0:0:0: -267,208,383080,1,10,0:0:0:0: -253,179,383138,1,2,0:0:0:0: -254,147,383197,5,10,0:0:0:0: -290,174,383254,1,2,0:0:0:0: -303,218,383312,1,10,0:0:0:0: -288,262,383370,1,2,0:0:0:0: -250,287,383427,1,10,0:0:0:0: -204,280,383484,1,2,0:0:0:0: -171,248,383542,1,10,0:0:0:0: -163,203,383600,1,2,0:0:0:0: -182,161,383657,5,10,0:0:0:0: -184,102,383715,1,2,0:0:0:0: -144,58,383773,1,10,0:0:0:0: -82,54,383831,1,2,0:0:0:0: -35,93,383889,1,10,0:0:0:0: -30,153,383947,1,2,0:0:0:0: -58,205,384004,1,10,0:0:0:0: -57,266,384062,1,2,0:0:0:0: -18,313,384120,5,14,0:0:0:0: diff --git a/osu.Game.Rulesets.Taiko/Resources/Testing/Beatmaps/basic-expected-conversion.json b/osu.Game.Rulesets.Taiko/Resources/Testing/Beatmaps/basic-expected-conversion.json new file mode 100644 index 0000000000..7fa7c8b386 --- /dev/null +++ b/osu.Game.Rulesets.Taiko/Resources/Testing/Beatmaps/basic-expected-conversion.json @@ -0,0 +1 @@ +{"Mappings":[{"StartTime":500.0,"Objects":[{"StartTime":500.0,"EndTime":2499.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":3000.0,"Objects":[{"StartTime":3000.0,"EndTime":4000.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":false,"IsSwell":true,"IsStrong":false}]},{"StartTime":4500.0,"Objects":[{"StartTime":4500.0,"EndTime":5500.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":false,"IsSwell":true,"IsStrong":false}]},{"StartTime":6000.0,"Objects":[{"StartTime":6000.0,"EndTime":6500.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":false,"IsSwell":true,"IsStrong":false}]},{"StartTime":7000.0,"Objects":[{"StartTime":7000.0,"EndTime":7000.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":7249.0,"EndTime":7249.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":7499.0,"EndTime":7499.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":7749.0,"EndTime":7749.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":7999.0,"EndTime":7999.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":8500.0,"Objects":[{"StartTime":8500.0,"EndTime":10999.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":11500.0,"Objects":[{"StartTime":11500.0,"EndTime":12000.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":false,"IsSwell":true,"IsStrong":false}]},{"StartTime":12500.0,"Objects":[{"StartTime":12500.0,"EndTime":16499.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":17000.0,"Objects":[{"StartTime":17000.0,"EndTime":17000.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":17249.0,"EndTime":17249.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":17499.0,"EndTime":17499.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":17749.0,"EndTime":17749.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":17999.0,"EndTime":17999.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":18500.0,"Objects":[{"StartTime":18500.0,"EndTime":19450.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":false,"IsSwell":true,"IsStrong":false}]},{"StartTime":19875.0,"Objects":[{"StartTime":19875.0,"EndTime":23874.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]}]} \ No newline at end of file diff --git a/osu.Game.Rulesets.Taiko/Resources/Testing/Beatmaps/basic.osu b/osu.Game.Rulesets.Taiko/Resources/Testing/Beatmaps/basic.osu new file mode 100644 index 0000000000..d58bb28ace --- /dev/null +++ b/osu.Game.Rulesets.Taiko/Resources/Testing/Beatmaps/basic.osu @@ -0,0 +1,66 @@ +osu file format v14 + +[General] +AudioFilename: virtual +AudioLeadIn: 0 +PreviewTime: -1 +Countdown: 1 +SampleSet: Soft +StackLeniency: 0.7 +Mode: 0 +LetterboxInBreaks: 0 +WidescreenStoryboard: 1 + +[Editor] +DistanceSpacing: 1.5 +BeatDivisor: 4 +GridSize: 32 +TimelineZoom: 1 + +[Metadata] +Title:Basic +TitleUnicode:Test Suite +Artist:peppy +ArtistUnicode:peppy +Creator:peppy +Version:[Basic] +Source: +Tags: +BeatmapID:826308 +BeatmapSetID:-1 + +[Difficulty] +HPDrainRate:6 +CircleSize:4 +OverallDifficulty:7 +ApproachRate:8.3 +SliderMultiplier:1.6 +SliderTickRate:1 + +[Events] +//Background and Video events +//Break Periods +//Storyboard Layer 0 (Background) +//Storyboard Layer 1 (Fail) +//Storyboard Layer 2 (Pass) +//Storyboard Layer 3 (Foreground) +//Storyboard Sound Samples + +[TimingPoints] +500,500,4,2,1,50,1,0 +13426,-100,4,3,1,45,0,0 +14884,-100,4,2,1,50,0,0 + + +[HitObjects] +96,192,500,6,0,L|416:192,2,320 +256,192,3000,12,0,4000,0:0:0:0: +256,192,4500,12,0,5500,0:0:0:0: +256,192,6000,12,0,6500,0:0:0:0: +256,128,7000,6,0,L|352:128,4,80 +32,192,8500,6,0,B|32:384|256:384|256:192|256:192|256:0|512:0|512:192,1,800 +256,192,11500,12,0,12000,0:0:0:0: +512,320,12500,6,0,B|0:256|0:256|512:96|512:96|256:32,1,1280 +256,256,17000,6,0,L|160:256,4,80 +256,192,18500,12,0,19450,0:0:0:0: +216,231,19875,6,0,B|216:135|280:135|344:135|344:199|344:263|248:327|248:327|120:327|120:327|56:39|408:39|408:39|472:150|408:342,1,1280 diff --git a/osu.Game.Rulesets.Taiko/Tests/TaikoBeatmapConversionTest.cs b/osu.Game.Rulesets.Taiko/Tests/TaikoBeatmapConversionTest.cs index 29f5f1b848..dc7d9dd98c 100644 --- a/osu.Game.Rulesets.Taiko/Tests/TaikoBeatmapConversionTest.cs +++ b/osu.Game.Rulesets.Taiko/Tests/TaikoBeatmapConversionTest.cs @@ -21,11 +21,11 @@ namespace osu.Game.Rulesets.Taiko.Tests private bool isForCurrentRuleset; [NonParallelizable] - [TestCase(875945, false), Ignore("See: https://github.com/ppy/osu/issues/2152")] - public void Test(int beatmapId, bool isForCurrentRuleset) + [TestCase("basic", false), Ignore("See: https://github.com/ppy/osu/issues/2152")] + public void Test(string name, bool isForCurrentRuleset) { this.isForCurrentRuleset = isForCurrentRuleset; - base.Test(beatmapId); + base.Test(name); } protected override IEnumerable CreateConvertValue(HitObject hitObject) diff --git a/osu.Game.Rulesets.Taiko/osu.Game.Rulesets.Taiko.csproj b/osu.Game.Rulesets.Taiko/osu.Game.Rulesets.Taiko.csproj index 8db70102b4..07d27455b8 100644 --- a/osu.Game.Rulesets.Taiko/osu.Game.Rulesets.Taiko.csproj +++ b/osu.Game.Rulesets.Taiko/osu.Game.Rulesets.Taiko.csproj @@ -147,8 +147,8 @@ - - + + diff --git a/osu.Game/Tests/Beatmaps/BeatmapConversionTest.cs b/osu.Game/Tests/Beatmaps/BeatmapConversionTest.cs index 5b5f6200b2..66d6a0b951 100644 --- a/osu.Game/Tests/Beatmaps/BeatmapConversionTest.cs +++ b/osu.Game/Tests/Beatmaps/BeatmapConversionTest.cs @@ -23,10 +23,10 @@ namespace osu.Game.Tests.Beatmaps protected abstract string ResourceAssembly { get; } - protected void Test(int beatmapId) + protected void Test(string name) { - var ourResult = convert(beatmapId); - var expectedResult = read(beatmapId); + var ourResult = convert(name); + var expectedResult = read(name); Assert.Multiple(() => { @@ -75,9 +75,9 @@ namespace osu.Game.Tests.Beatmaps }); } - private ConvertResult convert(int beatmapId) + private ConvertResult convert(string name) { - var beatmap = getBeatmap(beatmapId); + var beatmap = getBeatmap(name); var result = new ConvertResult(); @@ -97,9 +97,9 @@ namespace osu.Game.Tests.Beatmaps return result; } - private ConvertResult read(int beatmapId) + private ConvertResult read(string name) { - using (var resStream = openResource($"{resource_namespace}.{beatmapId}{expected_conversion_suffix}.json")) + using (var resStream = openResource($"{resource_namespace}.{name}{expected_conversion_suffix}.json")) using (var reader = new StreamReader(resStream)) { var contents = reader.ReadToEnd(); @@ -107,10 +107,10 @@ namespace osu.Game.Tests.Beatmaps } } - private Beatmap getBeatmap(int beatmapId) + private Beatmap getBeatmap(string name) { var decoder = new LegacyBeatmapDecoder(); - using (var resStream = openResource($"{resource_namespace}.{beatmapId}.osu")) + using (var resStream = openResource($"{resource_namespace}.{name}.osu")) using (var stream = new StreamReader(resStream)) return decoder.DecodeBeatmap(stream); } From 8a15d4e67703a488245ebbb6a4b183d2e6203711 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Fri, 2 Mar 2018 16:25:08 +0900 Subject: [PATCH 252/544] Fix linear perfect-curves not being cased to CurveType.Linear Fixes #2151. --- osu.Game/Rulesets/Objects/Legacy/ConvertHitObjectParser.cs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/osu.Game/Rulesets/Objects/Legacy/ConvertHitObjectParser.cs b/osu.Game/Rulesets/Objects/Legacy/ConvertHitObjectParser.cs index 2fcf3205c1..ce292ef223 100644 --- a/osu.Game/Rulesets/Objects/Legacy/ConvertHitObjectParser.cs +++ b/osu.Game/Rulesets/Objects/Legacy/ConvertHitObjectParser.cs @@ -9,6 +9,7 @@ using System.Globalization; using osu.Game.Beatmaps.Formats; using osu.Game.Audio; using System.Linq; +using osu.Framework.MathUtils; namespace osu.Game.Rulesets.Objects.Legacy { @@ -74,6 +75,11 @@ namespace osu.Game.Rulesets.Objects.Legacy points.Add(new Vector2((int)Convert.ToDouble(temp[0], CultureInfo.InvariantCulture), (int)Convert.ToDouble(temp[1], CultureInfo.InvariantCulture)) - pos); } + // osu-stable special-cased colinear perfect curves to a CurveType.Linear + bool isLinear(List p) => Precision.AlmostEquals(0, (p[1].Y - p[0].Y) * (p[2].X - p[0].X) - (p[1].X - p[0].X) * (p[2].Y - p[0].Y)); + if (points.Count == 3 && curveType == CurveType.PerfectCurve && isLinear(points)) + curveType = CurveType.Linear; + int repeatCount = Convert.ToInt32(split[6], CultureInfo.InvariantCulture); if (repeatCount > 9000) From 820a852caf5888d1190dafeab45cfa61fe732c4f Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Fri, 2 Mar 2018 18:37:38 +0900 Subject: [PATCH 253/544] Remove unnecessary .osu properties --- .../Resources/Testing/Beatmaps/basic.osu | 39 ------------------- .../Tests/CatchBeatmapConversionTest.cs | 2 +- .../Resources/Testing/Beatmaps/basic.osu | 39 ------------------- .../Resources/Testing/Beatmaps/basic.osu | 39 ------------------- .../Resources/Testing/Beatmaps/basic.osu | 39 ------------------- 5 files changed, 1 insertion(+), 157 deletions(-) diff --git a/osu.Game.Rulesets.Catch/Resources/Testing/Beatmaps/basic.osu b/osu.Game.Rulesets.Catch/Resources/Testing/Beatmaps/basic.osu index d58bb28ace..40b4409760 100644 --- a/osu.Game.Rulesets.Catch/Resources/Testing/Beatmaps/basic.osu +++ b/osu.Game.Rulesets.Catch/Resources/Testing/Beatmaps/basic.osu @@ -1,34 +1,5 @@ osu file format v14 -[General] -AudioFilename: virtual -AudioLeadIn: 0 -PreviewTime: -1 -Countdown: 1 -SampleSet: Soft -StackLeniency: 0.7 -Mode: 0 -LetterboxInBreaks: 0 -WidescreenStoryboard: 1 - -[Editor] -DistanceSpacing: 1.5 -BeatDivisor: 4 -GridSize: 32 -TimelineZoom: 1 - -[Metadata] -Title:Basic -TitleUnicode:Test Suite -Artist:peppy -ArtistUnicode:peppy -Creator:peppy -Version:[Basic] -Source: -Tags: -BeatmapID:826308 -BeatmapSetID:-1 - [Difficulty] HPDrainRate:6 CircleSize:4 @@ -37,21 +8,11 @@ ApproachRate:8.3 SliderMultiplier:1.6 SliderTickRate:1 -[Events] -//Background and Video events -//Break Periods -//Storyboard Layer 0 (Background) -//Storyboard Layer 1 (Fail) -//Storyboard Layer 2 (Pass) -//Storyboard Layer 3 (Foreground) -//Storyboard Sound Samples - [TimingPoints] 500,500,4,2,1,50,1,0 13426,-100,4,3,1,45,0,0 14884,-100,4,2,1,50,0,0 - [HitObjects] 96,192,500,6,0,L|416:192,2,320 256,192,3000,12,0,4000,0:0:0:0: diff --git a/osu.Game.Rulesets.Catch/Tests/CatchBeatmapConversionTest.cs b/osu.Game.Rulesets.Catch/Tests/CatchBeatmapConversionTest.cs index fbcb778268..31d1e9768f 100644 --- a/osu.Game.Rulesets.Catch/Tests/CatchBeatmapConversionTest.cs +++ b/osu.Game.Rulesets.Catch/Tests/CatchBeatmapConversionTest.cs @@ -18,7 +18,7 @@ namespace osu.Game.Rulesets.Catch.Tests { protected override string ResourceAssembly => "osu.Game.Rulesets.Catch"; - [TestCase("basic"), Ignore("See: https://github.com/ppy/osu/issues/2149")] + [TestCase("basic")] public new void Test(string name) { base.Test(name); diff --git a/osu.Game.Rulesets.Mania/Resources/Testing/Beatmaps/basic.osu b/osu.Game.Rulesets.Mania/Resources/Testing/Beatmaps/basic.osu index d58bb28ace..40b4409760 100644 --- a/osu.Game.Rulesets.Mania/Resources/Testing/Beatmaps/basic.osu +++ b/osu.Game.Rulesets.Mania/Resources/Testing/Beatmaps/basic.osu @@ -1,34 +1,5 @@ osu file format v14 -[General] -AudioFilename: virtual -AudioLeadIn: 0 -PreviewTime: -1 -Countdown: 1 -SampleSet: Soft -StackLeniency: 0.7 -Mode: 0 -LetterboxInBreaks: 0 -WidescreenStoryboard: 1 - -[Editor] -DistanceSpacing: 1.5 -BeatDivisor: 4 -GridSize: 32 -TimelineZoom: 1 - -[Metadata] -Title:Basic -TitleUnicode:Test Suite -Artist:peppy -ArtistUnicode:peppy -Creator:peppy -Version:[Basic] -Source: -Tags: -BeatmapID:826308 -BeatmapSetID:-1 - [Difficulty] HPDrainRate:6 CircleSize:4 @@ -37,21 +8,11 @@ ApproachRate:8.3 SliderMultiplier:1.6 SliderTickRate:1 -[Events] -//Background and Video events -//Break Periods -//Storyboard Layer 0 (Background) -//Storyboard Layer 1 (Fail) -//Storyboard Layer 2 (Pass) -//Storyboard Layer 3 (Foreground) -//Storyboard Sound Samples - [TimingPoints] 500,500,4,2,1,50,1,0 13426,-100,4,3,1,45,0,0 14884,-100,4,2,1,50,0,0 - [HitObjects] 96,192,500,6,0,L|416:192,2,320 256,192,3000,12,0,4000,0:0:0:0: diff --git a/osu.Game.Rulesets.Osu/Resources/Testing/Beatmaps/basic.osu b/osu.Game.Rulesets.Osu/Resources/Testing/Beatmaps/basic.osu index d58bb28ace..40b4409760 100644 --- a/osu.Game.Rulesets.Osu/Resources/Testing/Beatmaps/basic.osu +++ b/osu.Game.Rulesets.Osu/Resources/Testing/Beatmaps/basic.osu @@ -1,34 +1,5 @@ osu file format v14 -[General] -AudioFilename: virtual -AudioLeadIn: 0 -PreviewTime: -1 -Countdown: 1 -SampleSet: Soft -StackLeniency: 0.7 -Mode: 0 -LetterboxInBreaks: 0 -WidescreenStoryboard: 1 - -[Editor] -DistanceSpacing: 1.5 -BeatDivisor: 4 -GridSize: 32 -TimelineZoom: 1 - -[Metadata] -Title:Basic -TitleUnicode:Test Suite -Artist:peppy -ArtistUnicode:peppy -Creator:peppy -Version:[Basic] -Source: -Tags: -BeatmapID:826308 -BeatmapSetID:-1 - [Difficulty] HPDrainRate:6 CircleSize:4 @@ -37,21 +8,11 @@ ApproachRate:8.3 SliderMultiplier:1.6 SliderTickRate:1 -[Events] -//Background and Video events -//Break Periods -//Storyboard Layer 0 (Background) -//Storyboard Layer 1 (Fail) -//Storyboard Layer 2 (Pass) -//Storyboard Layer 3 (Foreground) -//Storyboard Sound Samples - [TimingPoints] 500,500,4,2,1,50,1,0 13426,-100,4,3,1,45,0,0 14884,-100,4,2,1,50,0,0 - [HitObjects] 96,192,500,6,0,L|416:192,2,320 256,192,3000,12,0,4000,0:0:0:0: diff --git a/osu.Game.Rulesets.Taiko/Resources/Testing/Beatmaps/basic.osu b/osu.Game.Rulesets.Taiko/Resources/Testing/Beatmaps/basic.osu index d58bb28ace..40b4409760 100644 --- a/osu.Game.Rulesets.Taiko/Resources/Testing/Beatmaps/basic.osu +++ b/osu.Game.Rulesets.Taiko/Resources/Testing/Beatmaps/basic.osu @@ -1,34 +1,5 @@ osu file format v14 -[General] -AudioFilename: virtual -AudioLeadIn: 0 -PreviewTime: -1 -Countdown: 1 -SampleSet: Soft -StackLeniency: 0.7 -Mode: 0 -LetterboxInBreaks: 0 -WidescreenStoryboard: 1 - -[Editor] -DistanceSpacing: 1.5 -BeatDivisor: 4 -GridSize: 32 -TimelineZoom: 1 - -[Metadata] -Title:Basic -TitleUnicode:Test Suite -Artist:peppy -ArtistUnicode:peppy -Creator:peppy -Version:[Basic] -Source: -Tags: -BeatmapID:826308 -BeatmapSetID:-1 - [Difficulty] HPDrainRate:6 CircleSize:4 @@ -37,21 +8,11 @@ ApproachRate:8.3 SliderMultiplier:1.6 SliderTickRate:1 -[Events] -//Background and Video events -//Break Periods -//Storyboard Layer 0 (Background) -//Storyboard Layer 1 (Fail) -//Storyboard Layer 2 (Pass) -//Storyboard Layer 3 (Foreground) -//Storyboard Sound Samples - [TimingPoints] 500,500,4,2,1,50,1,0 13426,-100,4,3,1,45,0,0 14884,-100,4,2,1,50,0,0 - [HitObjects] 96,192,500,6,0,L|416:192,2,320 256,192,3000,12,0,4000,0:0:0:0: From 401d3fff7bd581f894d22d218f30360519b4874e Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Fri, 2 Mar 2018 18:30:31 +0900 Subject: [PATCH 254/544] Add colinear perfect curve test case --- ...inear-perfect-curve-expected-conversion.json | 17 +++++++++++++++++ .../Testing/Beatmaps/colinear-perfect-curve.osu | 15 +++++++++++++++ .../Tests/OsuBeatmapConversionTest.cs | 1 + .../osu.Game.Rulesets.Osu.csproj | 2 ++ 4 files changed, 35 insertions(+) create mode 100644 osu.Game.Rulesets.Osu/Resources/Testing/Beatmaps/colinear-perfect-curve-expected-conversion.json create mode 100644 osu.Game.Rulesets.Osu/Resources/Testing/Beatmaps/colinear-perfect-curve.osu diff --git a/osu.Game.Rulesets.Osu/Resources/Testing/Beatmaps/colinear-perfect-curve-expected-conversion.json b/osu.Game.Rulesets.Osu/Resources/Testing/Beatmaps/colinear-perfect-curve-expected-conversion.json new file mode 100644 index 0000000000..8a97f36b01 --- /dev/null +++ b/osu.Game.Rulesets.Osu/Resources/Testing/Beatmaps/colinear-perfect-curve-expected-conversion.json @@ -0,0 +1,17 @@ +{ + "Mappings": [ + { + "StartTime": 118858, + "Objects": [ + { + "StartTime": 118858, + "EndTime": 119088, + "StartX": 219, + "StartY": 215, + "EndX": 239.6507, + "EndY": 29.1437378 + } + ] + } + ] +} \ No newline at end of file diff --git a/osu.Game.Rulesets.Osu/Resources/Testing/Beatmaps/colinear-perfect-curve.osu b/osu.Game.Rulesets.Osu/Resources/Testing/Beatmaps/colinear-perfect-curve.osu new file mode 100644 index 0000000000..8c3edc9571 --- /dev/null +++ b/osu.Game.Rulesets.Osu/Resources/Testing/Beatmaps/colinear-perfect-curve.osu @@ -0,0 +1,15 @@ +osu file format v14 + +[Difficulty] +HPDrainRate:6 +CircleSize:4.2 +OverallDifficulty:9 +ApproachRate:9.8 +SliderMultiplier:1.87 +SliderTickRate:1 + +[TimingPoints] +49051,230.769230769231,4,2,1,15,1,0 + +[HitObjects] +219,215,118858,2,0,P|224:170|244:-10,1,187,8|2,0:0|0:0,0:0:0:0: diff --git a/osu.Game.Rulesets.Osu/Tests/OsuBeatmapConversionTest.cs b/osu.Game.Rulesets.Osu/Tests/OsuBeatmapConversionTest.cs index 8f7a486569..2c62d571f8 100644 --- a/osu.Game.Rulesets.Osu/Tests/OsuBeatmapConversionTest.cs +++ b/osu.Game.Rulesets.Osu/Tests/OsuBeatmapConversionTest.cs @@ -20,6 +20,7 @@ namespace osu.Game.Rulesets.Osu.Tests protected override string ResourceAssembly => "osu.Game.Rulesets.Osu"; [TestCase("basic")] + [TestCase("colinear-perfect-curve")] public new void Test(string name) { base.Test(name); diff --git a/osu.Game.Rulesets.Osu/osu.Game.Rulesets.Osu.csproj b/osu.Game.Rulesets.Osu/osu.Game.Rulesets.Osu.csproj index 01dda307bc..6c4fe856be 100644 --- a/osu.Game.Rulesets.Osu/osu.Game.Rulesets.Osu.csproj +++ b/osu.Game.Rulesets.Osu/osu.Game.Rulesets.Osu.csproj @@ -176,6 +176,8 @@ + + From 71755f536331f401a8fb525db54eb9fbfa910779 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Fri, 2 Mar 2018 20:12:29 +0900 Subject: [PATCH 255/544] Prettyfy some JSON --- .../Beatmaps/basic-expected-conversion.json | 958 +++++++++++++++++- .../Beatmaps/basic-expected-conversion.json | 104 +- .../Beatmaps/basic-expected-conversion.json | 125 ++- .../Beatmaps/basic-expected-conversion.json | 210 +++- 4 files changed, 1393 insertions(+), 4 deletions(-) diff --git a/osu.Game.Rulesets.Catch/Resources/Testing/Beatmaps/basic-expected-conversion.json b/osu.Game.Rulesets.Catch/Resources/Testing/Beatmaps/basic-expected-conversion.json index 3abd3d1ddd..9357d3b75c 100644 --- a/osu.Game.Rulesets.Catch/Resources/Testing/Beatmaps/basic-expected-conversion.json +++ b/osu.Game.Rulesets.Catch/Resources/Testing/Beatmaps/basic-expected-conversion.json @@ -1 +1,957 @@ -{"Mappings":[{"StartTime":500.0,"Objects":[{"StartTime":500.0,"Position":96.0},{"StartTime":562.0,"Position":100.84},{"StartTime":625.0,"Position":125.0},{"StartTime":687.0,"Position":152.84},{"StartTime":750.0,"Position":191.0},{"StartTime":812.0,"Position":212.84},{"StartTime":875.0,"Position":217.0},{"StartTime":937.0,"Position":234.84},{"StartTime":1000.0,"Position":256.0},{"StartTime":1062.0,"Position":267.84},{"StartTime":1125.0,"Position":284.0},{"StartTime":1187.0,"Position":311.84},{"StartTime":1250.0,"Position":350.0},{"StartTime":1312.0,"Position":359.84},{"StartTime":1375.0,"Position":367.0},{"StartTime":1437.0,"Position":400.84},{"StartTime":1500.0,"Position":416.0},{"StartTime":1562.0,"Position":377.159973},{"StartTime":1625.0,"Position":367.0},{"StartTime":1687.0,"Position":374.159973},{"StartTime":1750.0,"Position":353.0},{"StartTime":1812.0,"Position":329.159973},{"StartTime":1875.0,"Position":288.0},{"StartTime":1937.0,"Position":259.159973},{"StartTime":2000.0,"Position":256.0},{"StartTime":2058.0,"Position":232.44},{"StartTime":2116.0,"Position":222.879974},{"StartTime":2174.0,"Position":185.319992},{"StartTime":2232.0,"Position":177.76001},{"StartTime":2290.0,"Position":162.200012},{"StartTime":2348.0,"Position":158.639984},{"StartTime":2406.0,"Position":111.079994},{"StartTime":2500.0,"Position":96.0}]},{"StartTime":3000.0,"Objects":[{"StartTime":3000.0,"Position":18.0},{"StartTime":3062.0,"Position":482.0},{"StartTime":3125.0,"Position":243.0},{"StartTime":3187.0,"Position":332.0},{"StartTime":3250.0,"Position":477.0},{"StartTime":3312.0,"Position":376.0},{"StartTime":3375.0,"Position":104.0},{"StartTime":3437.0,"Position":156.0},{"StartTime":3500.0,"Position":135.0},{"StartTime":3562.0,"Position":256.0},{"StartTime":3625.0,"Position":360.0},{"StartTime":3687.0,"Position":199.0},{"StartTime":3750.0,"Position":239.0},{"StartTime":3812.0,"Position":326.0},{"StartTime":3875.0,"Position":393.0},{"StartTime":3937.0,"Position":470.0},{"StartTime":4000.0,"Position":136.0}]},{"StartTime":4500.0,"Objects":[{"StartTime":4500.0,"Position":317.0},{"StartTime":4562.0,"Position":354.0},{"StartTime":4625.0,"Position":414.0},{"StartTime":4687.0,"Position":39.0},{"StartTime":4750.0,"Position":172.0},{"StartTime":4812.0,"Position":479.0},{"StartTime":4875.0,"Position":18.0},{"StartTime":4937.0,"Position":151.0},{"StartTime":5000.0,"Position":342.0},{"StartTime":5062.0,"Position":400.0},{"StartTime":5125.0,"Position":420.0},{"StartTime":5187.0,"Position":90.0},{"StartTime":5250.0,"Position":220.0},{"StartTime":5312.0,"Position":80.0},{"StartTime":5375.0,"Position":421.0},{"StartTime":5437.0,"Position":473.0},{"StartTime":5500.0,"Position":97.0}]},{"StartTime":6000.0,"Objects":[{"StartTime":6000.0,"Position":105.0},{"StartTime":6062.0,"Position":249.0},{"StartTime":6125.0,"Position":163.0},{"StartTime":6187.0,"Position":194.0},{"StartTime":6250.0,"Position":106.0},{"StartTime":6312.0,"Position":212.0},{"StartTime":6375.0,"Position":257.0},{"StartTime":6437.0,"Position":461.0},{"StartTime":6500.0,"Position":79.0}]},{"StartTime":7000.0,"Objects":[{"StartTime":7000.0,"Position":256.0},{"StartTime":7062.0,"Position":294.84},{"StartTime":7125.0,"Position":279.0},{"StartTime":7187.0,"Position":309.84},{"StartTime":7250.0,"Position":336.0},{"StartTime":7312.0,"Position":322.16},{"StartTime":7375.0,"Position":308.0},{"StartTime":7437.0,"Position":263.16},{"StartTime":7500.0,"Position":256.0},{"StartTime":7562.0,"Position":261.84},{"StartTime":7625.0,"Position":277.0},{"StartTime":7687.0,"Position":318.84},{"StartTime":7750.0,"Position":336.0},{"StartTime":7803.0,"Position":305.04},{"StartTime":7857.0,"Position":307.76},{"StartTime":7910.0,"Position":297.8},{"StartTime":8000.0,"Position":256.0}]},{"StartTime":8500.0,"Objects":[{"StartTime":8500.0,"Position":32.0},{"StartTime":8562.0,"Position":22.8515015},{"StartTime":8625.0,"Position":28.5659637},{"StartTime":8687.0,"Position":50.3433228},{"StartTime":8750.0,"Position":56.58974},{"StartTime":8812.0,"Position":64.23422},{"StartTime":8875.0,"Position":67.7117844},{"StartTime":8937.0,"Position":90.52607},{"StartTime":9000.0,"Position":101.81015},{"StartTime":9062.0,"Position":113.478188},{"StartTime":9125.0,"Position":159.414444},{"StartTime":9187.0,"Position":155.1861},{"StartTime":9250.0,"Position":179.600418},{"StartTime":9312.0,"Position":212.293015},{"StartTime":9375.0,"Position":197.2076},{"StartTime":9437.0,"Position":243.438324},{"StartTime":9500.0,"Position":237.2304},{"StartTime":9562.0,"Position":241.253983},{"StartTime":9625.0,"Position":258.950623},{"StartTime":9687.0,"Position":253.3786},{"StartTime":9750.0,"Position":270.8865},{"StartTime":9812.0,"Position":244.38974},{"StartTime":9875.0,"Position":242.701874},{"StartTime":9937.0,"Position":256.2331},{"StartTime":10000.0,"Position":270.339874},{"StartTime":10062.0,"Position":275.9349},{"StartTime":10125.0,"Position":297.2969},{"StartTime":10187.0,"Position":307.834137},{"StartTime":10250.0,"Position":321.6449},{"StartTime":10312.0,"Position":357.746338},{"StartTime":10375.0,"Position":358.21875},{"StartTime":10437.0,"Position":394.943},{"StartTime":10500.0,"Position":401.0588},{"StartTime":10558.0,"Position":418.21347},{"StartTime":10616.0,"Position":424.6034},{"StartTime":10674.0,"Position":455.835754},{"StartTime":10732.0,"Position":477.5042},{"StartTime":10790.0,"Position":476.290955},{"StartTime":10848.0,"Position":470.943237},{"StartTime":10906.0,"Position":503.3372},{"StartTime":10999.0,"Position":508.166229}]},{"StartTime":11500.0,"Objects":[{"StartTime":11500.0,"Position":321.0},{"StartTime":11562.0,"Position":17.0},{"StartTime":11625.0,"Position":173.0},{"StartTime":11687.0,"Position":170.0},{"StartTime":11750.0,"Position":447.0},{"StartTime":11812.0,"Position":218.0},{"StartTime":11875.0,"Position":394.0},{"StartTime":11937.0,"Position":46.0},{"StartTime":12000.0,"Position":480.0}]},{"StartTime":12500.0,"Objects":[{"StartTime":12500.0,"Position":512.0},{"StartTime":12562.0,"Position":491.3132},{"StartTime":12625.0,"Position":484.3089},{"StartTime":12687.0,"Position":454.6221},{"StartTime":12750.0,"Position":433.617767},{"StartTime":12812.0,"Position":399.930969},{"StartTime":12875.0,"Position":395.926666},{"StartTime":12937.0,"Position":361.239868},{"StartTime":13000.0,"Position":353.235535},{"StartTime":13062.0,"Position":314.548767},{"StartTime":13125.0,"Position":315.544434},{"StartTime":13187.0,"Position":288.857635},{"StartTime":13250.0,"Position":254.853333},{"StartTime":13312.0,"Position":239.166534},{"StartTime":13375.0,"Position":240.1622},{"StartTime":13437.0,"Position":212.4754},{"StartTime":13500.0,"Position":194.471069},{"StartTime":13562.0,"Position":161.784271},{"StartTime":13625.0,"Position":145.779968},{"StartTime":13687.0,"Position":129.09314},{"StartTime":13750.0,"Position":104.088837},{"StartTime":13812.0,"Position":95.40204},{"StartTime":13875.0,"Position":61.3977356},{"StartTime":13937.0,"Position":56.710907},{"StartTime":14000.0,"Position":35.7066345},{"StartTime":14062.0,"Position":5.019806},{"StartTime":14125.0,"Position":0.0},{"StartTime":14187.0,"Position":39.7696266},{"StartTime":14250.0,"Position":23.0119171},{"StartTime":14312.0,"Position":75.94882},{"StartTime":14375.0,"Position":98.19112},{"StartTime":14437.0,"Position":82.12803},{"StartTime":14500.0,"Position":118.370323},{"StartTime":14562.0,"Position":149.307236},{"StartTime":14625.0,"Position":168.549515},{"StartTime":14687.0,"Position":190.486435},{"StartTime":14750.0,"Position":186.728714},{"StartTime":14812.0,"Position":199.665634},{"StartTime":14875.0,"Position":228.907928},{"StartTime":14937.0,"Position":264.844849},{"StartTime":15000.0,"Position":271.087128},{"StartTime":15062.0,"Position":290.024017},{"StartTime":15125.0,"Position":302.266327},{"StartTime":15187.0,"Position":344.203247},{"StartTime":15250.0,"Position":356.445526},{"StartTime":15312.0,"Position":359.382446},{"StartTime":15375.0,"Position":401.624725},{"StartTime":15437.0,"Position":388.561646},{"StartTime":15500.0,"Position":423.803925},{"StartTime":15562.0,"Position":425.740845},{"StartTime":15625.0,"Position":449.983124},{"StartTime":15687.0,"Position":468.920044},{"StartTime":15750.0,"Position":492.162323},{"StartTime":15812.0,"Position":506.784332},{"StartTime":15875.0,"Position":474.226227},{"StartTime":15937.0,"Position":482.978638},{"StartTime":16000.0,"Position":446.420532},{"StartTime":16058.0,"Position":418.4146},{"StartTime":16116.0,"Position":425.408844},{"StartTime":16174.0,"Position":383.402924},{"StartTime":16232.0,"Position":363.397156},{"StartTime":16290.0,"Position":343.391235},{"StartTime":16348.0,"Position":328.385468},{"StartTime":16406.0,"Position":322.3797},{"StartTime":16500.0,"Position":291.1977}]},{"StartTime":17000.0,"Objects":[{"StartTime":17000.0,"Position":256.0},{"StartTime":17062.0,"Position":228.16},{"StartTime":17125.0,"Position":234.0},{"StartTime":17187.0,"Position":202.16},{"StartTime":17250.0,"Position":176.0},{"StartTime":17312.0,"Position":210.84},{"StartTime":17375.0,"Position":221.0},{"StartTime":17437.0,"Position":219.84},{"StartTime":17500.0,"Position":256.0},{"StartTime":17562.0,"Position":219.16},{"StartTime":17625.0,"Position":228.0},{"StartTime":17687.0,"Position":203.16},{"StartTime":17750.0,"Position":176.0},{"StartTime":17803.0,"Position":174.959991},{"StartTime":17857.0,"Position":214.23999},{"StartTime":17910.0,"Position":228.200012},{"StartTime":18000.0,"Position":256.0}]},{"StartTime":18500.0,"Objects":[{"StartTime":18500.0,"Position":362.0},{"StartTime":18559.0,"Position":249.0},{"StartTime":18618.0,"Position":357.0},{"StartTime":18678.0,"Position":167.0},{"StartTime":18737.0,"Position":477.0},{"StartTime":18796.0,"Position":411.0},{"StartTime":18856.0,"Position":254.0},{"StartTime":18915.0,"Position":308.0},{"StartTime":18975.0,"Position":399.0},{"StartTime":19034.0,"Position":176.0},{"StartTime":19093.0,"Position":14.0},{"StartTime":19153.0,"Position":258.0},{"StartTime":19212.0,"Position":221.0},{"StartTime":19271.0,"Position":481.0},{"StartTime":19331.0,"Position":92.0},{"StartTime":19390.0,"Position":211.0},{"StartTime":19450.0,"Position":135.0}]},{"StartTime":19875.0,"Objects":[{"StartTime":19875.0,"Position":216.0},{"StartTime":19937.0,"Position":215.307053},{"StartTime":20000.0,"Position":236.036865},{"StartTime":20062.0,"Position":236.312088},{"StartTime":20125.0,"Position":235.838928},{"StartTime":20187.0,"Position":269.9743},{"StartTime":20250.0,"Position":285.999146},{"StartTime":20312.0,"Position":283.669067},{"StartTime":20375.0,"Position":317.446747},{"StartTime":20437.0,"Position":330.750275},{"StartTime":20500.0,"Position":344.0156},{"StartTime":20562.0,"Position":318.472168},{"StartTime":20625.0,"Position":309.165466},{"StartTime":20687.0,"Position":317.044617},{"StartTime":20750.0,"Position":280.457367},{"StartTime":20812.0,"Position":272.220581},{"StartTime":20875.0,"Position":270.3294},{"StartTime":20937.0,"Position":262.57605},{"StartTime":21000.0,"Position":244.803329},{"StartTime":21062.0,"Position":215.958359},{"StartTime":21125.0,"Position":177.79332},{"StartTime":21187.0,"Position":190.948349},{"StartTime":21250.0,"Position":158.78334},{"StartTime":21312.0,"Position":136.93837},{"StartTime":21375.0,"Position":119.121056},{"StartTime":21437.0,"Position":132.387573},{"StartTime":21500.0,"Position":124.503014},{"StartTime":21562.0,"Position":118.749374},{"StartTime":21625.0,"Position":123.165535},{"StartTime":21687.0,"Position":96.02999},{"StartTime":21750.0,"Position":118.547928},{"StartTime":21812.0,"Position":128.856232},{"StartTime":21875.0,"Position":124.28746},{"StartTime":21937.0,"Position":150.754929},{"StartTime":22000.0,"Position":149.528732},{"StartTime":22062.0,"Position":145.1691},{"StartTime":22125.0,"Position":182.802155},{"StartTime":22187.0,"Position":178.6452},{"StartTime":22250.0,"Position":213.892181},{"StartTime":22312.0,"Position":218.713028},{"StartTime":22375.0,"Position":240.4715},{"StartTime":22437.0,"Position":239.371887},{"StartTime":22500.0,"Position":261.907257},{"StartTime":22562.0,"Position":314.353119},{"StartTime":22625.0,"Position":299.273376},{"StartTime":22687.0,"Position":356.98288},{"StartTime":22750.0,"Position":339.078552},{"StartTime":22812.0,"Position":377.8958},{"StartTime":22875.0,"Position":398.054047},{"StartTime":22937.0,"Position":398.739441},{"StartTime":23000.0,"Position":407.178467},{"StartTime":23062.0,"Position":444.8687},{"StartTime":23125.0,"Position":417.069977},{"StartTime":23187.0,"Position":454.688477},{"StartTime":23250.0,"Position":428.9612},{"StartTime":23312.0,"Position":441.92807},{"StartTime":23375.0,"Position":439.749878},{"StartTime":23433.0,"Position":455.644684},{"StartTime":23491.0,"Position":440.7359},{"StartTime":23549.0,"Position":430.0944},{"StartTime":23607.0,"Position":420.796173},{"StartTime":23665.0,"Position":435.897461},{"StartTime":23723.0,"Position":418.462555},{"StartTime":23781.0,"Position":405.53775},{"StartTime":23874.0,"Position":408.720825}]}]} \ No newline at end of file +{ + "Mappings": [{ + "StartTime": 500.0, + "Objects": [{ + "StartTime": 500.0, + "Position": 96.0 + }, { + "StartTime": 562.0, + "Position": 100.84 + }, { + "StartTime": 625.0, + "Position": 125.0 + }, { + "StartTime": 687.0, + "Position": 152.84 + }, { + "StartTime": 750.0, + "Position": 191.0 + }, { + "StartTime": 812.0, + "Position": 212.84 + }, { + "StartTime": 875.0, + "Position": 217.0 + }, { + "StartTime": 937.0, + "Position": 234.84 + }, { + "StartTime": 1000.0, + "Position": 256.0 + }, { + "StartTime": 1062.0, + "Position": 267.84 + }, { + "StartTime": 1125.0, + "Position": 284.0 + }, { + "StartTime": 1187.0, + "Position": 311.84 + }, { + "StartTime": 1250.0, + "Position": 350.0 + }, { + "StartTime": 1312.0, + "Position": 359.84 + }, { + "StartTime": 1375.0, + "Position": 367.0 + }, { + "StartTime": 1437.0, + "Position": 400.84 + }, { + "StartTime": 1500.0, + "Position": 416.0 + }, { + "StartTime": 1562.0, + "Position": 377.159973 + }, { + "StartTime": 1625.0, + "Position": 367.0 + }, { + "StartTime": 1687.0, + "Position": 374.159973 + }, { + "StartTime": 1750.0, + "Position": 353.0 + }, { + "StartTime": 1812.0, + "Position": 329.159973 + }, { + "StartTime": 1875.0, + "Position": 288.0 + }, { + "StartTime": 1937.0, + "Position": 259.159973 + }, { + "StartTime": 2000.0, + "Position": 256.0 + }, { + "StartTime": 2058.0, + "Position": 232.44 + }, { + "StartTime": 2116.0, + "Position": 222.879974 + }, { + "StartTime": 2174.0, + "Position": 185.319992 + }, { + "StartTime": 2232.0, + "Position": 177.76001 + }, { + "StartTime": 2290.0, + "Position": 162.200012 + }, { + "StartTime": 2348.0, + "Position": 158.639984 + }, { + "StartTime": 2406.0, + "Position": 111.079994 + }, { + "StartTime": 2500.0, + "Position": 96.0 + }] + }, { + "StartTime": 3000.0, + "Objects": [{ + "StartTime": 3000.0, + "Position": 18.0 + }, { + "StartTime": 3062.0, + "Position": 482.0 + }, { + "StartTime": 3125.0, + "Position": 243.0 + }, { + "StartTime": 3187.0, + "Position": 332.0 + }, { + "StartTime": 3250.0, + "Position": 477.0 + }, { + "StartTime": 3312.0, + "Position": 376.0 + }, { + "StartTime": 3375.0, + "Position": 104.0 + }, { + "StartTime": 3437.0, + "Position": 156.0 + }, { + "StartTime": 3500.0, + "Position": 135.0 + }, { + "StartTime": 3562.0, + "Position": 256.0 + }, { + "StartTime": 3625.0, + "Position": 360.0 + }, { + "StartTime": 3687.0, + "Position": 199.0 + }, { + "StartTime": 3750.0, + "Position": 239.0 + }, { + "StartTime": 3812.0, + "Position": 326.0 + }, { + "StartTime": 3875.0, + "Position": 393.0 + }, { + "StartTime": 3937.0, + "Position": 470.0 + }, { + "StartTime": 4000.0, + "Position": 136.0 + }] + }, { + "StartTime": 4500.0, + "Objects": [{ + "StartTime": 4500.0, + "Position": 317.0 + }, { + "StartTime": 4562.0, + "Position": 354.0 + }, { + "StartTime": 4625.0, + "Position": 414.0 + }, { + "StartTime": 4687.0, + "Position": 39.0 + }, { + "StartTime": 4750.0, + "Position": 172.0 + }, { + "StartTime": 4812.0, + "Position": 479.0 + }, { + "StartTime": 4875.0, + "Position": 18.0 + }, { + "StartTime": 4937.0, + "Position": 151.0 + }, { + "StartTime": 5000.0, + "Position": 342.0 + }, { + "StartTime": 5062.0, + "Position": 400.0 + }, { + "StartTime": 5125.0, + "Position": 420.0 + }, { + "StartTime": 5187.0, + "Position": 90.0 + }, { + "StartTime": 5250.0, + "Position": 220.0 + }, { + "StartTime": 5312.0, + "Position": 80.0 + }, { + "StartTime": 5375.0, + "Position": 421.0 + }, { + "StartTime": 5437.0, + "Position": 473.0 + }, { + "StartTime": 5500.0, + "Position": 97.0 + }] + }, { + "StartTime": 6000.0, + "Objects": [{ + "StartTime": 6000.0, + "Position": 105.0 + }, { + "StartTime": 6062.0, + "Position": 249.0 + }, { + "StartTime": 6125.0, + "Position": 163.0 + }, { + "StartTime": 6187.0, + "Position": 194.0 + }, { + "StartTime": 6250.0, + "Position": 106.0 + }, { + "StartTime": 6312.0, + "Position": 212.0 + }, { + "StartTime": 6375.0, + "Position": 257.0 + }, { + "StartTime": 6437.0, + "Position": 461.0 + }, { + "StartTime": 6500.0, + "Position": 79.0 + }] + }, { + "StartTime": 7000.0, + "Objects": [{ + "StartTime": 7000.0, + "Position": 256.0 + }, { + "StartTime": 7062.0, + "Position": 294.84 + }, { + "StartTime": 7125.0, + "Position": 279.0 + }, { + "StartTime": 7187.0, + "Position": 309.84 + }, { + "StartTime": 7250.0, + "Position": 336.0 + }, { + "StartTime": 7312.0, + "Position": 322.16 + }, { + "StartTime": 7375.0, + "Position": 308.0 + }, { + "StartTime": 7437.0, + "Position": 263.16 + }, { + "StartTime": 7500.0, + "Position": 256.0 + }, { + "StartTime": 7562.0, + "Position": 261.84 + }, { + "StartTime": 7625.0, + "Position": 277.0 + }, { + "StartTime": 7687.0, + "Position": 318.84 + }, { + "StartTime": 7750.0, + "Position": 336.0 + }, { + "StartTime": 7803.0, + "Position": 305.04 + }, { + "StartTime": 7857.0, + "Position": 307.76 + }, { + "StartTime": 7910.0, + "Position": 297.8 + }, { + "StartTime": 8000.0, + "Position": 256.0 + }] + }, { + "StartTime": 8500.0, + "Objects": [{ + "StartTime": 8500.0, + "Position": 32.0 + }, { + "StartTime": 8562.0, + "Position": 22.8515015 + }, { + "StartTime": 8625.0, + "Position": 28.5659637 + }, { + "StartTime": 8687.0, + "Position": 50.3433228 + }, { + "StartTime": 8750.0, + "Position": 56.58974 + }, { + "StartTime": 8812.0, + "Position": 64.23422 + }, { + "StartTime": 8875.0, + "Position": 67.7117844 + }, { + "StartTime": 8937.0, + "Position": 90.52607 + }, { + "StartTime": 9000.0, + "Position": 101.81015 + }, { + "StartTime": 9062.0, + "Position": 113.478188 + }, { + "StartTime": 9125.0, + "Position": 159.414444 + }, { + "StartTime": 9187.0, + "Position": 155.1861 + }, { + "StartTime": 9250.0, + "Position": 179.600418 + }, { + "StartTime": 9312.0, + "Position": 212.293015 + }, { + "StartTime": 9375.0, + "Position": 197.2076 + }, { + "StartTime": 9437.0, + "Position": 243.438324 + }, { + "StartTime": 9500.0, + "Position": 237.2304 + }, { + "StartTime": 9562.0, + "Position": 241.253983 + }, { + "StartTime": 9625.0, + "Position": 258.950623 + }, { + "StartTime": 9687.0, + "Position": 253.3786 + }, { + "StartTime": 9750.0, + "Position": 270.8865 + }, { + "StartTime": 9812.0, + "Position": 244.38974 + }, { + "StartTime": 9875.0, + "Position": 242.701874 + }, { + "StartTime": 9937.0, + "Position": 256.2331 + }, { + "StartTime": 10000.0, + "Position": 270.339874 + }, { + "StartTime": 10062.0, + "Position": 275.9349 + }, { + "StartTime": 10125.0, + "Position": 297.2969 + }, { + "StartTime": 10187.0, + "Position": 307.834137 + }, { + "StartTime": 10250.0, + "Position": 321.6449 + }, { + "StartTime": 10312.0, + "Position": 357.746338 + }, { + "StartTime": 10375.0, + "Position": 358.21875 + }, { + "StartTime": 10437.0, + "Position": 394.943 + }, { + "StartTime": 10500.0, + "Position": 401.0588 + }, { + "StartTime": 10558.0, + "Position": 418.21347 + }, { + "StartTime": 10616.0, + "Position": 424.6034 + }, { + "StartTime": 10674.0, + "Position": 455.835754 + }, { + "StartTime": 10732.0, + "Position": 477.5042 + }, { + "StartTime": 10790.0, + "Position": 476.290955 + }, { + "StartTime": 10848.0, + "Position": 470.943237 + }, { + "StartTime": 10906.0, + "Position": 503.3372 + }, { + "StartTime": 10999.0, + "Position": 508.166229 + }] + }, { + "StartTime": 11500.0, + "Objects": [{ + "StartTime": 11500.0, + "Position": 321.0 + }, { + "StartTime": 11562.0, + "Position": 17.0 + }, { + "StartTime": 11625.0, + "Position": 173.0 + }, { + "StartTime": 11687.0, + "Position": 170.0 + }, { + "StartTime": 11750.0, + "Position": 447.0 + }, { + "StartTime": 11812.0, + "Position": 218.0 + }, { + "StartTime": 11875.0, + "Position": 394.0 + }, { + "StartTime": 11937.0, + "Position": 46.0 + }, { + "StartTime": 12000.0, + "Position": 480.0 + }] + }, { + "StartTime": 12500.0, + "Objects": [{ + "StartTime": 12500.0, + "Position": 512.0 + }, { + "StartTime": 12562.0, + "Position": 491.3132 + }, { + "StartTime": 12625.0, + "Position": 484.3089 + }, { + "StartTime": 12687.0, + "Position": 454.6221 + }, { + "StartTime": 12750.0, + "Position": 433.617767 + }, { + "StartTime": 12812.0, + "Position": 399.930969 + }, { + "StartTime": 12875.0, + "Position": 395.926666 + }, { + "StartTime": 12937.0, + "Position": 361.239868 + }, { + "StartTime": 13000.0, + "Position": 353.235535 + }, { + "StartTime": 13062.0, + "Position": 314.548767 + }, { + "StartTime": 13125.0, + "Position": 315.544434 + }, { + "StartTime": 13187.0, + "Position": 288.857635 + }, { + "StartTime": 13250.0, + "Position": 254.853333 + }, { + "StartTime": 13312.0, + "Position": 239.166534 + }, { + "StartTime": 13375.0, + "Position": 240.1622 + }, { + "StartTime": 13437.0, + "Position": 212.4754 + }, { + "StartTime": 13500.0, + "Position": 194.471069 + }, { + "StartTime": 13562.0, + "Position": 161.784271 + }, { + "StartTime": 13625.0, + "Position": 145.779968 + }, { + "StartTime": 13687.0, + "Position": 129.09314 + }, { + "StartTime": 13750.0, + "Position": 104.088837 + }, { + "StartTime": 13812.0, + "Position": 95.40204 + }, { + "StartTime": 13875.0, + "Position": 61.3977356 + }, { + "StartTime": 13937.0, + "Position": 56.710907 + }, { + "StartTime": 14000.0, + "Position": 35.7066345 + }, { + "StartTime": 14062.0, + "Position": 5.019806 + }, { + "StartTime": 14125.0, + "Position": 0.0 + }, { + "StartTime": 14187.0, + "Position": 39.7696266 + }, { + "StartTime": 14250.0, + "Position": 23.0119171 + }, { + "StartTime": 14312.0, + "Position": 75.94882 + }, { + "StartTime": 14375.0, + "Position": 98.19112 + }, { + "StartTime": 14437.0, + "Position": 82.12803 + }, { + "StartTime": 14500.0, + "Position": 118.370323 + }, { + "StartTime": 14562.0, + "Position": 149.307236 + }, { + "StartTime": 14625.0, + "Position": 168.549515 + }, { + "StartTime": 14687.0, + "Position": 190.486435 + }, { + "StartTime": 14750.0, + "Position": 186.728714 + }, { + "StartTime": 14812.0, + "Position": 199.665634 + }, { + "StartTime": 14875.0, + "Position": 228.907928 + }, { + "StartTime": 14937.0, + "Position": 264.844849 + }, { + "StartTime": 15000.0, + "Position": 271.087128 + }, { + "StartTime": 15062.0, + "Position": 290.024017 + }, { + "StartTime": 15125.0, + "Position": 302.266327 + }, { + "StartTime": 15187.0, + "Position": 344.203247 + }, { + "StartTime": 15250.0, + "Position": 356.445526 + }, { + "StartTime": 15312.0, + "Position": 359.382446 + }, { + "StartTime": 15375.0, + "Position": 401.624725 + }, { + "StartTime": 15437.0, + "Position": 388.561646 + }, { + "StartTime": 15500.0, + "Position": 423.803925 + }, { + "StartTime": 15562.0, + "Position": 425.740845 + }, { + "StartTime": 15625.0, + "Position": 449.983124 + }, { + "StartTime": 15687.0, + "Position": 468.920044 + }, { + "StartTime": 15750.0, + "Position": 492.162323 + }, { + "StartTime": 15812.0, + "Position": 506.784332 + }, { + "StartTime": 15875.0, + "Position": 474.226227 + }, { + "StartTime": 15937.0, + "Position": 482.978638 + }, { + "StartTime": 16000.0, + "Position": 446.420532 + }, { + "StartTime": 16058.0, + "Position": 418.4146 + }, { + "StartTime": 16116.0, + "Position": 425.408844 + }, { + "StartTime": 16174.0, + "Position": 383.402924 + }, { + "StartTime": 16232.0, + "Position": 363.397156 + }, { + "StartTime": 16290.0, + "Position": 343.391235 + }, { + "StartTime": 16348.0, + "Position": 328.385468 + }, { + "StartTime": 16406.0, + "Position": 322.3797 + }, { + "StartTime": 16500.0, + "Position": 291.1977 + }] + }, { + "StartTime": 17000.0, + "Objects": [{ + "StartTime": 17000.0, + "Position": 256.0 + }, { + "StartTime": 17062.0, + "Position": 228.16 + }, { + "StartTime": 17125.0, + "Position": 234.0 + }, { + "StartTime": 17187.0, + "Position": 202.16 + }, { + "StartTime": 17250.0, + "Position": 176.0 + }, { + "StartTime": 17312.0, + "Position": 210.84 + }, { + "StartTime": 17375.0, + "Position": 221.0 + }, { + "StartTime": 17437.0, + "Position": 219.84 + }, { + "StartTime": 17500.0, + "Position": 256.0 + }, { + "StartTime": 17562.0, + "Position": 219.16 + }, { + "StartTime": 17625.0, + "Position": 228.0 + }, { + "StartTime": 17687.0, + "Position": 203.16 + }, { + "StartTime": 17750.0, + "Position": 176.0 + }, { + "StartTime": 17803.0, + "Position": 174.959991 + }, { + "StartTime": 17857.0, + "Position": 214.23999 + }, { + "StartTime": 17910.0, + "Position": 228.200012 + }, { + "StartTime": 18000.0, + "Position": 256.0 + }] + }, { + "StartTime": 18500.0, + "Objects": [{ + "StartTime": 18500.0, + "Position": 362.0 + }, { + "StartTime": 18559.0, + "Position": 249.0 + }, { + "StartTime": 18618.0, + "Position": 357.0 + }, { + "StartTime": 18678.0, + "Position": 167.0 + }, { + "StartTime": 18737.0, + "Position": 477.0 + }, { + "StartTime": 18796.0, + "Position": 411.0 + }, { + "StartTime": 18856.0, + "Position": 254.0 + }, { + "StartTime": 18915.0, + "Position": 308.0 + }, { + "StartTime": 18975.0, + "Position": 399.0 + }, { + "StartTime": 19034.0, + "Position": 176.0 + }, { + "StartTime": 19093.0, + "Position": 14.0 + }, { + "StartTime": 19153.0, + "Position": 258.0 + }, { + "StartTime": 19212.0, + "Position": 221.0 + }, { + "StartTime": 19271.0, + "Position": 481.0 + }, { + "StartTime": 19331.0, + "Position": 92.0 + }, { + "StartTime": 19390.0, + "Position": 211.0 + }, { + "StartTime": 19450.0, + "Position": 135.0 + }] + }, { + "StartTime": 19875.0, + "Objects": [{ + "StartTime": 19875.0, + "Position": 216.0 + }, { + "StartTime": 19937.0, + "Position": 215.307053 + }, { + "StartTime": 20000.0, + "Position": 236.036865 + }, { + "StartTime": 20062.0, + "Position": 236.312088 + }, { + "StartTime": 20125.0, + "Position": 235.838928 + }, { + "StartTime": 20187.0, + "Position": 269.9743 + }, { + "StartTime": 20250.0, + "Position": 285.999146 + }, { + "StartTime": 20312.0, + "Position": 283.669067 + }, { + "StartTime": 20375.0, + "Position": 317.446747 + }, { + "StartTime": 20437.0, + "Position": 330.750275 + }, { + "StartTime": 20500.0, + "Position": 344.0156 + }, { + "StartTime": 20562.0, + "Position": 318.472168 + }, { + "StartTime": 20625.0, + "Position": 309.165466 + }, { + "StartTime": 20687.0, + "Position": 317.044617 + }, { + "StartTime": 20750.0, + "Position": 280.457367 + }, { + "StartTime": 20812.0, + "Position": 272.220581 + }, { + "StartTime": 20875.0, + "Position": 270.3294 + }, { + "StartTime": 20937.0, + "Position": 262.57605 + }, { + "StartTime": 21000.0, + "Position": 244.803329 + }, { + "StartTime": 21062.0, + "Position": 215.958359 + }, { + "StartTime": 21125.0, + "Position": 177.79332 + }, { + "StartTime": 21187.0, + "Position": 190.948349 + }, { + "StartTime": 21250.0, + "Position": 158.78334 + }, { + "StartTime": 21312.0, + "Position": 136.93837 + }, { + "StartTime": 21375.0, + "Position": 119.121056 + }, { + "StartTime": 21437.0, + "Position": 132.387573 + }, { + "StartTime": 21500.0, + "Position": 124.503014 + }, { + "StartTime": 21562.0, + "Position": 118.749374 + }, { + "StartTime": 21625.0, + "Position": 123.165535 + }, { + "StartTime": 21687.0, + "Position": 96.02999 + }, { + "StartTime": 21750.0, + "Position": 118.547928 + }, { + "StartTime": 21812.0, + "Position": 128.856232 + }, { + "StartTime": 21875.0, + "Position": 124.28746 + }, { + "StartTime": 21937.0, + "Position": 150.754929 + }, { + "StartTime": 22000.0, + "Position": 149.528732 + }, { + "StartTime": 22062.0, + "Position": 145.1691 + }, { + "StartTime": 22125.0, + "Position": 182.802155 + }, { + "StartTime": 22187.0, + "Position": 178.6452 + }, { + "StartTime": 22250.0, + "Position": 213.892181 + }, { + "StartTime": 22312.0, + "Position": 218.713028 + }, { + "StartTime": 22375.0, + "Position": 240.4715 + }, { + "StartTime": 22437.0, + "Position": 239.371887 + }, { + "StartTime": 22500.0, + "Position": 261.907257 + }, { + "StartTime": 22562.0, + "Position": 314.353119 + }, { + "StartTime": 22625.0, + "Position": 299.273376 + }, { + "StartTime": 22687.0, + "Position": 356.98288 + }, { + "StartTime": 22750.0, + "Position": 339.078552 + }, { + "StartTime": 22812.0, + "Position": 377.8958 + }, { + "StartTime": 22875.0, + "Position": 398.054047 + }, { + "StartTime": 22937.0, + "Position": 398.739441 + }, { + "StartTime": 23000.0, + "Position": 407.178467 + }, { + "StartTime": 23062.0, + "Position": 444.8687 + }, { + "StartTime": 23125.0, + "Position": 417.069977 + }, { + "StartTime": 23187.0, + "Position": 454.688477 + }, { + "StartTime": 23250.0, + "Position": 428.9612 + }, { + "StartTime": 23312.0, + "Position": 441.92807 + }, { + "StartTime": 23375.0, + "Position": 439.749878 + }, { + "StartTime": 23433.0, + "Position": 455.644684 + }, { + "StartTime": 23491.0, + "Position": 440.7359 + }, { + "StartTime": 23549.0, + "Position": 430.0944 + }, { + "StartTime": 23607.0, + "Position": 420.796173 + }, { + "StartTime": 23665.0, + "Position": 435.897461 + }, { + "StartTime": 23723.0, + "Position": 418.462555 + }, { + "StartTime": 23781.0, + "Position": 405.53775 + }, { + "StartTime": 23874.0, + "Position": 408.720825 + }] + }] +} \ No newline at end of file diff --git a/osu.Game.Rulesets.Mania/Resources/Testing/Beatmaps/basic-expected-conversion.json b/osu.Game.Rulesets.Mania/Resources/Testing/Beatmaps/basic-expected-conversion.json index 30beea3512..d593b2b052 100644 --- a/osu.Game.Rulesets.Mania/Resources/Testing/Beatmaps/basic-expected-conversion.json +++ b/osu.Game.Rulesets.Mania/Resources/Testing/Beatmaps/basic-expected-conversion.json @@ -1 +1,103 @@ -{"Mappings":[{"StartTime":500.0,"Objects":[{"StartTime":500.0,"EndTime":2500.0,"Column":0},{"StartTime":1500.0,"EndTime":2500.0,"Column":1}]},{"StartTime":3000.0,"Objects":[{"StartTime":3000.0,"EndTime":4000.0,"Column":2}]},{"StartTime":4500.0,"Objects":[{"StartTime":4500.0,"EndTime":5500.0,"Column":4}]},{"StartTime":6000.0,"Objects":[{"StartTime":6000.0,"EndTime":6500.0,"Column":2}]},{"StartTime":7000.0,"Objects":[{"StartTime":7000.0,"EndTime":8000.0,"Column":2}]},{"StartTime":8500.0,"Objects":[{"StartTime":8500.0,"EndTime":11000.0,"Column":0}]},{"StartTime":11500.0,"Objects":[{"StartTime":11500.0,"EndTime":12000.0,"Column":1}]},{"StartTime":12500.0,"Objects":[{"StartTime":12500.0,"EndTime":16500.0,"Column":4}]},{"StartTime":17000.0,"Objects":[{"StartTime":17000.0,"EndTime":18000.0,"Column":2}]},{"StartTime":18500.0,"Objects":[{"StartTime":18500.0,"EndTime":19450.0,"Column":0}]},{"StartTime":19875.0,"Objects":[{"StartTime":19875.0,"EndTime":23875.0,"Column":1},{"StartTime":19875.0,"EndTime":23875.0,"Column":0}]}]} \ No newline at end of file +{ + "Mappings": [{ + "StartTime": 500, + "Objects": [{ + "StartTime": 500, + "EndTime": 2500, + "Column": 0 + }, + { + "StartTime": 1500, + "EndTime": 2500, + "Column": 1 + } + ] + }, + { + "StartTime": 3000, + "Objects": [{ + "StartTime": 3000, + "EndTime": 4000, + "Column": 2 + }] + }, + { + "StartTime": 4500, + "Objects": [{ + "StartTime": 4500, + "EndTime": 5500, + "Column": 4 + }] + }, + { + "StartTime": 6000, + "Objects": [{ + "StartTime": 6000, + "EndTime": 6500, + "Column": 2 + }] + }, + { + "StartTime": 7000, + "Objects": [{ + "StartTime": 7000, + "EndTime": 8000, + "Column": 2 + }] + }, + { + "StartTime": 8500, + "Objects": [{ + "StartTime": 8500, + "EndTime": 11000, + "Column": 0 + }] + }, + { + "StartTime": 11500, + "Objects": [{ + "StartTime": 11500, + "EndTime": 12000, + "Column": 1 + }] + }, + { + "StartTime": 12500, + "Objects": [{ + "StartTime": 12500, + "EndTime": 16500, + "Column": 4 + }] + }, + { + "StartTime": 17000, + "Objects": [{ + "StartTime": 17000, + "EndTime": 18000, + "Column": 2 + }] + }, + { + "StartTime": 18500, + "Objects": [{ + "StartTime": 18500, + "EndTime": 19450, + "Column": 0 + }] + }, + { + "StartTime": 19875, + "Objects": [{ + "StartTime": 19875, + "EndTime": 23875, + "Column": 1 + }, + { + "StartTime": 19875, + "EndTime": 23875, + "Column": 0 + } + ] + } + ] +} \ No newline at end of file diff --git a/osu.Game.Rulesets.Osu/Resources/Testing/Beatmaps/basic-expected-conversion.json b/osu.Game.Rulesets.Osu/Resources/Testing/Beatmaps/basic-expected-conversion.json index a9432772c5..b82fddbe79 100644 --- a/osu.Game.Rulesets.Osu/Resources/Testing/Beatmaps/basic-expected-conversion.json +++ b/osu.Game.Rulesets.Osu/Resources/Testing/Beatmaps/basic-expected-conversion.json @@ -1 +1,124 @@ -{"Mappings":[{"StartTime":500.0,"Objects":[{"StartTime":500.0,"EndTime":2500.0,"StartX":96.0,"StartY":192.0,"EndX":96.0,"EndY":192.0}]},{"StartTime":3000.0,"Objects":[{"StartTime":3000.0,"EndTime":4000.0,"StartX":256.0,"StartY":192.0,"EndX":256.0,"EndY":192.0}]},{"StartTime":4500.0,"Objects":[{"StartTime":4500.0,"EndTime":5500.0,"StartX":256.0,"StartY":192.0,"EndX":256.0,"EndY":192.0}]},{"StartTime":6000.0,"Objects":[{"StartTime":6000.0,"EndTime":6500.0,"StartX":256.0,"StartY":192.0,"EndX":256.0,"EndY":192.0}]},{"StartTime":7000.0,"Objects":[{"StartTime":7000.0,"EndTime":8000.0,"StartX":256.0,"StartY":128.0,"EndX":256.0,"EndY":128.0}]},{"StartTime":8500.0,"Objects":[{"StartTime":8500.0,"EndTime":10999.0,"StartX":32.0,"StartY":192.0,"EndX":508.166229,"EndY":153.299271}]},{"StartTime":11500.0,"Objects":[{"StartTime":11500.0,"EndTime":12000.0,"StartX":256.0,"StartY":192.0,"EndX":256.0,"EndY":192.0}]},{"StartTime":12500.0,"Objects":[{"StartTime":12500.0,"EndTime":16500.0,"StartX":512.0,"StartY":320.0,"EndX":291.1977,"EndY":40.799427}]},{"StartTime":17000.0,"Objects":[{"StartTime":17000.0,"EndTime":18000.0,"StartX":256.0,"StartY":256.0,"EndX":256.0,"EndY":256.0}]},{"StartTime":18500.0,"Objects":[{"StartTime":18500.0,"EndTime":19450.0,"StartX":256.0,"StartY":192.0,"EndX":256.0,"EndY":192.0}]},{"StartTime":19875.0,"Objects":[{"StartTime":19875.0,"EndTime":23874.0,"StartX":216.0,"StartY":231.0,"EndX":408.720825,"EndY":339.810455}]}]} \ No newline at end of file +{ + "Mappings": [{ + "StartTime": 500, + "Objects": [{ + "StartTime": 500, + "EndTime": 2500, + "StartX": 96, + "StartY": 192, + "EndX": 96, + "EndY": 192 + }] + }, + { + "StartTime": 3000, + "Objects": [{ + "StartTime": 3000, + "EndTime": 4000, + "StartX": 256, + "StartY": 192, + "EndX": 256, + "EndY": 192 + }] + }, + { + "StartTime": 4500, + "Objects": [{ + "StartTime": 4500, + "EndTime": 5500, + "StartX": 256, + "StartY": 192, + "EndX": 256, + "EndY": 192 + }] + }, + { + "StartTime": 6000, + "Objects": [{ + "StartTime": 6000, + "EndTime": 6500, + "StartX": 256, + "StartY": 192, + "EndX": 256, + "EndY": 192 + }] + }, + { + "StartTime": 7000, + "Objects": [{ + "StartTime": 7000, + "EndTime": 8000, + "StartX": 256, + "StartY": 128, + "EndX": 256, + "EndY": 128 + }] + }, + { + "StartTime": 8500, + "Objects": [{ + "StartTime": 8500, + "EndTime": 10999, + "StartX": 32, + "StartY": 192, + "EndX": 508.166229, + "EndY": 153.299271 + }] + }, + { + "StartTime": 11500, + "Objects": [{ + "StartTime": 11500, + "EndTime": 12000, + "StartX": 256, + "StartY": 192, + "EndX": 256, + "EndY": 192 + }] + }, + { + "StartTime": 12500, + "Objects": [{ + "StartTime": 12500, + "EndTime": 16500, + "StartX": 512, + "StartY": 320, + "EndX": 291.1977, + "EndY": 40.799427 + }] + }, + { + "StartTime": 17000, + "Objects": [{ + "StartTime": 17000, + "EndTime": 18000, + "StartX": 256, + "StartY": 256, + "EndX": 256, + "EndY": 256 + }] + }, + { + "StartTime": 18500, + "Objects": [{ + "StartTime": 18500, + "EndTime": 19450, + "StartX": 256, + "StartY": 192, + "EndX": 256, + "EndY": 192 + }] + }, + { + "StartTime": 19875, + "Objects": [{ + "StartTime": 19875, + "EndTime": 23874, + "StartX": 216, + "StartY": 231, + "EndX": 408.720825, + "EndY": 339.810455 + }] + } + ] +} \ No newline at end of file diff --git a/osu.Game.Rulesets.Taiko/Resources/Testing/Beatmaps/basic-expected-conversion.json b/osu.Game.Rulesets.Taiko/Resources/Testing/Beatmaps/basic-expected-conversion.json index 7fa7c8b386..5c9310fec7 100644 --- a/osu.Game.Rulesets.Taiko/Resources/Testing/Beatmaps/basic-expected-conversion.json +++ b/osu.Game.Rulesets.Taiko/Resources/Testing/Beatmaps/basic-expected-conversion.json @@ -1 +1,209 @@ -{"Mappings":[{"StartTime":500.0,"Objects":[{"StartTime":500.0,"EndTime":2499.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":3000.0,"Objects":[{"StartTime":3000.0,"EndTime":4000.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":false,"IsSwell":true,"IsStrong":false}]},{"StartTime":4500.0,"Objects":[{"StartTime":4500.0,"EndTime":5500.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":false,"IsSwell":true,"IsStrong":false}]},{"StartTime":6000.0,"Objects":[{"StartTime":6000.0,"EndTime":6500.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":false,"IsSwell":true,"IsStrong":false}]},{"StartTime":7000.0,"Objects":[{"StartTime":7000.0,"EndTime":7000.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":7249.0,"EndTime":7249.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":7499.0,"EndTime":7499.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":7749.0,"EndTime":7749.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":7999.0,"EndTime":7999.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":8500.0,"Objects":[{"StartTime":8500.0,"EndTime":10999.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":11500.0,"Objects":[{"StartTime":11500.0,"EndTime":12000.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":false,"IsSwell":true,"IsStrong":false}]},{"StartTime":12500.0,"Objects":[{"StartTime":12500.0,"EndTime":16499.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]},{"StartTime":17000.0,"Objects":[{"StartTime":17000.0,"EndTime":17000.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":17249.0,"EndTime":17249.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":17499.0,"EndTime":17499.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":17749.0,"EndTime":17749.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false},{"StartTime":17999.0,"EndTime":17999.0,"IsRim":false,"IsCentre":true,"IsDrumRoll":false,"IsSwell":false,"IsStrong":false}]},{"StartTime":18500.0,"Objects":[{"StartTime":18500.0,"EndTime":19450.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":false,"IsSwell":true,"IsStrong":false}]},{"StartTime":19875.0,"Objects":[{"StartTime":19875.0,"EndTime":23874.0,"IsRim":false,"IsCentre":false,"IsDrumRoll":true,"IsSwell":false,"IsStrong":false}]}]} \ No newline at end of file +{ + "Mappings": [{ + "StartTime": 500, + "Objects": [{ + "StartTime": 500, + "EndTime": 2499, + "IsRim": false, + "IsCentre": false, + "IsDrumRoll": true, + "IsSwell": false, + "IsStrong": false + }] + }, + { + "StartTime": 3000, + "Objects": [{ + "StartTime": 3000, + "EndTime": 4000, + "IsRim": false, + "IsCentre": false, + "IsDrumRoll": false, + "IsSwell": true, + "IsStrong": false + }] + }, + { + "StartTime": 4500, + "Objects": [{ + "StartTime": 4500, + "EndTime": 5500, + "IsRim": false, + "IsCentre": false, + "IsDrumRoll": false, + "IsSwell": true, + "IsStrong": false + }] + }, + { + "StartTime": 6000, + "Objects": [{ + "StartTime": 6000, + "EndTime": 6500, + "IsRim": false, + "IsCentre": false, + "IsDrumRoll": false, + "IsSwell": true, + "IsStrong": false + }] + }, + { + "StartTime": 7000, + "Objects": [{ + "StartTime": 7000, + "EndTime": 7000, + "IsRim": false, + "IsCentre": true, + "IsDrumRoll": false, + "IsSwell": false, + "IsStrong": false + }, + { + "StartTime": 7249, + "EndTime": 7249, + "IsRim": false, + "IsCentre": true, + "IsDrumRoll": false, + "IsSwell": false, + "IsStrong": false + }, + { + "StartTime": 7499, + "EndTime": 7499, + "IsRim": false, + "IsCentre": true, + "IsDrumRoll": false, + "IsSwell": false, + "IsStrong": false + }, + { + "StartTime": 7749, + "EndTime": 7749, + "IsRim": false, + "IsCentre": true, + "IsDrumRoll": false, + "IsSwell": false, + "IsStrong": false + }, + { + "StartTime": 7999, + "EndTime": 7999, + "IsRim": false, + "IsCentre": true, + "IsDrumRoll": false, + "IsSwell": false, + "IsStrong": false + } + ] + }, + { + "StartTime": 8500, + "Objects": [{ + "StartTime": 8500, + "EndTime": 10999, + "IsRim": false, + "IsCentre": false, + "IsDrumRoll": true, + "IsSwell": false, + "IsStrong": false + }] + }, + { + "StartTime": 11500, + "Objects": [{ + "StartTime": 11500, + "EndTime": 12000, + "IsRim": false, + "IsCentre": false, + "IsDrumRoll": false, + "IsSwell": true, + "IsStrong": false + }] + }, + { + "StartTime": 12500, + "Objects": [{ + "StartTime": 12500, + "EndTime": 16499, + "IsRim": false, + "IsCentre": false, + "IsDrumRoll": true, + "IsSwell": false, + "IsStrong": false + }] + }, + { + "StartTime": 17000, + "Objects": [{ + "StartTime": 17000, + "EndTime": 17000, + "IsRim": false, + "IsCentre": true, + "IsDrumRoll": false, + "IsSwell": false, + "IsStrong": false + }, + { + "StartTime": 17249, + "EndTime": 17249, + "IsRim": false, + "IsCentre": true, + "IsDrumRoll": false, + "IsSwell": false, + "IsStrong": false + }, + { + "StartTime": 17499, + "EndTime": 17499, + "IsRim": false, + "IsCentre": true, + "IsDrumRoll": false, + "IsSwell": false, + "IsStrong": false + }, + { + "StartTime": 17749, + "EndTime": 17749, + "IsRim": false, + "IsCentre": true, + "IsDrumRoll": false, + "IsSwell": false, + "IsStrong": false + }, + { + "StartTime": 17999, + "EndTime": 17999, + "IsRim": false, + "IsCentre": true, + "IsDrumRoll": false, + "IsSwell": false, + "IsStrong": false + } + ] + }, + { + "StartTime": 18500, + "Objects": [{ + "StartTime": 18500, + "EndTime": 19450, + "IsRim": false, + "IsCentre": false, + "IsDrumRoll": false, + "IsSwell": true, + "IsStrong": false + }] + }, + { + "StartTime": 19875, + "Objects": [{ + "StartTime": 19875, + "EndTime": 23874, + "IsRim": false, + "IsCentre": false, + "IsDrumRoll": true, + "IsSwell": false, + "IsStrong": false + }] + } + ] +} \ No newline at end of file From 9fef8a3977ff98ba5958d0dba79933b06c1d6cb5 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Fri, 2 Mar 2018 20:13:48 +0900 Subject: [PATCH 256/544] Prettify json --- ...ear-perfect-curve-expected-conversion.json | 24 ++++++++----------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Resources/Testing/Beatmaps/colinear-perfect-curve-expected-conversion.json b/osu.Game.Rulesets.Osu/Resources/Testing/Beatmaps/colinear-perfect-curve-expected-conversion.json index 8a97f36b01..7fe038658c 100644 --- a/osu.Game.Rulesets.Osu/Resources/Testing/Beatmaps/colinear-perfect-curve-expected-conversion.json +++ b/osu.Game.Rulesets.Osu/Resources/Testing/Beatmaps/colinear-perfect-curve-expected-conversion.json @@ -1,17 +1,13 @@ { - "Mappings": [ - { + "Mappings": [{ + "StartTime": 118858, + "Objects": [{ "StartTime": 118858, - "Objects": [ - { - "StartTime": 118858, - "EndTime": 119088, - "StartX": 219, - "StartY": 215, - "EndX": 239.6507, - "EndY": 29.1437378 - } - ] - } - ] + "EndTime": 119088, + "StartX": 219, + "StartY": 215, + "EndX": 239.6507, + "EndY": 29.1437378 + }] + }] } \ No newline at end of file From a2c239d5e3ffc4e1603e048fb24824f4a8e2295f Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Fri, 2 Mar 2018 20:19:47 +0900 Subject: [PATCH 257/544] Rename to IBeatmapConverter, move to separate file --- .../Tests/CatchBeatmapConversionTest.cs | 2 +- .../Tests/ManiaBeatmapConversionTest.cs | 2 +- .../Tests/OsuBeatmapConversionTest.cs | 2 +- .../Tests/TaikoBeatmapConversionTest.cs | 2 +- osu.Game/Beatmaps/BeatmapConverter.cs | 22 +++------------- osu.Game/Beatmaps/IBeatmapConverter.cs | 25 +++++++++++++++++++ .../Tests/Beatmaps/BeatmapConversionTest.cs | 2 +- osu.Game/osu.Game.csproj | 1 + 8 files changed, 34 insertions(+), 24 deletions(-) create mode 100644 osu.Game/Beatmaps/IBeatmapConverter.cs diff --git a/osu.Game.Rulesets.Catch/Tests/CatchBeatmapConversionTest.cs b/osu.Game.Rulesets.Catch/Tests/CatchBeatmapConversionTest.cs index 31d1e9768f..a660545765 100644 --- a/osu.Game.Rulesets.Catch/Tests/CatchBeatmapConversionTest.cs +++ b/osu.Game.Rulesets.Catch/Tests/CatchBeatmapConversionTest.cs @@ -47,7 +47,7 @@ namespace osu.Game.Rulesets.Catch.Tests } } - protected override ITestableBeatmapConverter CreateConverter(Beatmap beatmap) => new CatchBeatmapConverter(); + protected override IBeatmapConverter CreateConverter(Beatmap beatmap) => new CatchBeatmapConverter(); } public struct ConvertValue : IEquatable diff --git a/osu.Game.Rulesets.Mania/Tests/ManiaBeatmapConversionTest.cs b/osu.Game.Rulesets.Mania/Tests/ManiaBeatmapConversionTest.cs index 8d2280c853..2095addc72 100644 --- a/osu.Game.Rulesets.Mania/Tests/ManiaBeatmapConversionTest.cs +++ b/osu.Game.Rulesets.Mania/Tests/ManiaBeatmapConversionTest.cs @@ -38,7 +38,7 @@ namespace osu.Game.Rulesets.Mania.Tests }; } - protected override ITestableBeatmapConverter CreateConverter(Beatmap beatmap) => new ManiaBeatmapConverter(isForCurrentRuleset, beatmap); + protected override IBeatmapConverter CreateConverter(Beatmap beatmap) => new ManiaBeatmapConverter(isForCurrentRuleset, beatmap); } public struct ConvertValue : IEquatable diff --git a/osu.Game.Rulesets.Osu/Tests/OsuBeatmapConversionTest.cs b/osu.Game.Rulesets.Osu/Tests/OsuBeatmapConversionTest.cs index 8f7a486569..18b87b715b 100644 --- a/osu.Game.Rulesets.Osu/Tests/OsuBeatmapConversionTest.cs +++ b/osu.Game.Rulesets.Osu/Tests/OsuBeatmapConversionTest.cs @@ -41,7 +41,7 @@ namespace osu.Game.Rulesets.Osu.Tests }; } - protected override ITestableBeatmapConverter CreateConverter(Beatmap beatmap) => new OsuBeatmapConverter(); + protected override ITestableBeatmapConverter CreateConverter(BeaIBeatmapConvertereatmapConverter(); } public struct ConvertValue : IEquatable diff --git a/osu.Game.Rulesets.Taiko/Tests/TaikoBeatmapConversionTest.cs b/osu.Game.Rulesets.Taiko/Tests/TaikoBeatmapConversionTest.cs index dc7d9dd98c..64f728a018 100644 --- a/osu.Game.Rulesets.Taiko/Tests/TaikoBeatmapConversionTest.cs +++ b/osu.Game.Rulesets.Taiko/Tests/TaikoBeatmapConversionTest.cs @@ -42,7 +42,7 @@ namespace osu.Game.Rulesets.Taiko.Tests }; } - protected override ITestableBeatmapConverter CreateConverter(Beatmap beatmap) => new TaikoBeatmapConverter(isForCurrentRuleset); + protected override IBeatmapConverter CreateConverter(Beatmap beatmap) => new TaikoBeatmapConverter(isForCurrentRuleset); } public struct ConvertValue : IEquatable diff --git a/osu.Game/Beatmaps/BeatmapConverter.cs b/osu.Game/Beatmaps/BeatmapConverter.cs index 0094bd9116..711e220b88 100644 --- a/osu.Game/Beatmaps/BeatmapConverter.cs +++ b/osu.Game/Beatmaps/BeatmapConverter.cs @@ -8,31 +8,15 @@ using osu.Game.Rulesets.Objects; namespace osu.Game.Beatmaps { - public interface ITestableBeatmapConverter - { - /// - /// Invoked when a has been converted. - /// The first argument contains the that was converted. - /// The second argument contains the s that were output from the conversion process. - /// - event Action> ObjectConverted; - - /// - /// Converts a Beatmap using this Beatmap Converter. - /// - /// The un-converted Beatmap. - void Convert(Beatmap beatmap); - } - /// /// Converts a Beatmap for another mode. /// /// The type of HitObject stored in the Beatmap. - public abstract class BeatmapConverter : ITestableBeatmapConverter + public abstract class BeatmapConverter : IBeatmapConverter where T : HitObject { private event Action> ObjectConverted; - event Action> ITestableBeatmapConverter.ObjectConverted + event Action> IBeatmapConverter.ObjectConverted { add => ObjectConverted += value; remove => ObjectConverted -= value; @@ -56,7 +40,7 @@ namespace osu.Game.Beatmaps return ConvertBeatmap(new Beatmap(original)); } - void ITestableBeatmapConverter.Convert(Beatmap original) => Convert(original); + void IBeatmapConverter.Convert(Beatmap original) => Convert(original); /// /// Performs the conversion of a Beatmap using this Beatmap Converter. diff --git a/osu.Game/Beatmaps/IBeatmapConverter.cs b/osu.Game/Beatmaps/IBeatmapConverter.cs new file mode 100644 index 0000000000..ebd900b97e --- /dev/null +++ b/osu.Game/Beatmaps/IBeatmapConverter.cs @@ -0,0 +1,25 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using System; +using System.Collections.Generic; +using osu.Game.Rulesets.Objects; + +namespace osu.Game.Beatmaps +{ + public interface IBeatmapConverter + { + /// + /// Invoked when a has been converted. + /// The first argument contains the that was converted. + /// The second argument contains the s that were output from the conversion process. + /// + event Action> ObjectConverted; + + /// + /// Converts a Beatmap using this Beatmap Converter. + /// + /// The un-converted Beatmap. + void Convert(Beatmap beatmap); + } +} diff --git a/osu.Game/Tests/Beatmaps/BeatmapConversionTest.cs b/osu.Game/Tests/Beatmaps/BeatmapConversionTest.cs index 66d6a0b951..596dbe84ba 100644 --- a/osu.Game/Tests/Beatmaps/BeatmapConversionTest.cs +++ b/osu.Game/Tests/Beatmaps/BeatmapConversionTest.cs @@ -122,7 +122,7 @@ namespace osu.Game.Tests.Beatmaps } protected abstract IEnumerable CreateConvertValue(HitObject hitObject); - protected abstract ITestableBeatmapConverter CreateConverter(Beatmap beatmap); + protected abstract IBeatmapConverter CreateConverter(Beatmap beatmap); private class ConvertMapping { diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index 2ed8e3a9a5..ff365ad93e 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -270,6 +270,7 @@ + From bd9d26921a6e19f28b760ca0c3bc3b34c618b81e Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Fri, 2 Mar 2018 20:39:43 +0900 Subject: [PATCH 258/544] Less BeaIBeatmapConvertereatmapConverters --- osu.Game.Rulesets.Osu/Tests/OsuBeatmapConversionTest.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game.Rulesets.Osu/Tests/OsuBeatmapConversionTest.cs b/osu.Game.Rulesets.Osu/Tests/OsuBeatmapConversionTest.cs index 18b87b715b..a98f002a4b 100644 --- a/osu.Game.Rulesets.Osu/Tests/OsuBeatmapConversionTest.cs +++ b/osu.Game.Rulesets.Osu/Tests/OsuBeatmapConversionTest.cs @@ -41,7 +41,7 @@ namespace osu.Game.Rulesets.Osu.Tests }; } - protected override ITestableBeatmapConverter CreateConverter(BeaIBeatmapConvertereatmapConverter(); + protected override IBeatmapConverter CreateConverter(Beatmap beatmap) => new OsuBeatmapConverter(); } public struct ConvertValue : IEquatable From 46d018922eb06d85a6bac945bc7e5482dc2b2d51 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Fri, 2 Mar 2018 20:50:12 +0900 Subject: [PATCH 259/544] Ignore catch conversion failures --- osu.Game.Rulesets.Catch/Tests/CatchBeatmapConversionTest.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game.Rulesets.Catch/Tests/CatchBeatmapConversionTest.cs b/osu.Game.Rulesets.Catch/Tests/CatchBeatmapConversionTest.cs index a660545765..826c900140 100644 --- a/osu.Game.Rulesets.Catch/Tests/CatchBeatmapConversionTest.cs +++ b/osu.Game.Rulesets.Catch/Tests/CatchBeatmapConversionTest.cs @@ -18,7 +18,7 @@ namespace osu.Game.Rulesets.Catch.Tests { protected override string ResourceAssembly => "osu.Game.Rulesets.Catch"; - [TestCase("basic")] + [TestCase("basic"), Ignore("See: https://github.com/ppy/osu/issues/2149")] public new void Test(string name) { base.Test(name); From a71dacc58acc4ce372d652809b1726f7ffeaa8c9 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Fri, 2 Mar 2018 21:02:10 +0900 Subject: [PATCH 260/544] Update framework --- osu-framework | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu-framework b/osu-framework index e8ae207769..71900dc350 160000 --- a/osu-framework +++ b/osu-framework @@ -1 +1 @@ -Subproject commit e8ae207769ec26fb7ddd67a2433514fcda354ecd +Subproject commit 71900dc350bcebbb60d912d4023a1d2a6bbbc3c1 From fb724ca8a705ac6f093be9c96c7e2f30c41b5a07 Mon Sep 17 00:00:00 2001 From: naoey Date: Wed, 28 Feb 2018 08:32:30 +0530 Subject: [PATCH 261/544] Make song select ensure current beatmap is always playable in the active ruleset. - Add a to TestCasePlaySongSelect testing this scenario --- .../Visual/TestCasePlaySongSelect.cs | 38 ++++++++++++++--- osu.Game/Screens/Select/SongSelect.cs | 41 ++++++++++++++++++- 2 files changed, 72 insertions(+), 7 deletions(-) diff --git a/osu.Game.Tests/Visual/TestCasePlaySongSelect.cs b/osu.Game.Tests/Visual/TestCasePlaySongSelect.cs index 13b2be9fdb..a4086ea2cd 100644 --- a/osu.Game.Tests/Visual/TestCasePlaySongSelect.cs +++ b/osu.Game.Tests/Visual/TestCasePlaySongSelect.cs @@ -10,6 +10,7 @@ using osu.Framework.Allocation; using osu.Framework.Extensions; using osu.Framework.MathUtils; using osu.Game.Beatmaps; +using osu.Game.Configuration; using osu.Game.Database; using osu.Game.Rulesets; using osu.Game.Screens.Select; @@ -53,10 +54,14 @@ namespace osu.Game.Tests.Visual public WorkingBeatmap CurrentBeatmap => Beatmap.Value; public WorkingBeatmap CurrentBeatmapDetailsBeatmap => BeatmapDetails.Beatmap; public new BeatmapCarousel Carousel => base.Carousel; + + public void SetRuleset(RulesetInfo ruleset) => Ruleset.Value = ruleset; + + public int? RulesetID => Ruleset.Value.ID; } [BackgroundDependencyLoader] - private void load(OsuGameBase game) + private void load(OsuGameBase game, OsuConfigManager config) { TestSongSelect songSelect = null; @@ -113,6 +118,24 @@ namespace osu.Game.Tests.Visual AddStep(@"Sort by Title", delegate { songSelect.FilterControl.Sort = SortMode.Title; }); AddStep(@"Sort by Author", delegate { songSelect.FilterControl.Sort = SortMode.Author; }); AddStep(@"Sort by Difficulty", delegate { songSelect.FilterControl.Sort = SortMode.Difficulty; }); + + AddWaitStep(5); + + AddStep(@"Set unplayable WorkingBeatmap", () => + { + var testMap = manager.GetAllUsableBeatmapSets().First().Beatmaps.First(b => b.RulesetID != 0); + songSelect.SetRuleset(rulesets.AvailableRulesets.First()); + game.Beatmap.Value = manager.GetWorkingBeatmap(testMap); + }); + AddAssert(@"WorkingBeatmap changed to playable ruleset", () => songSelect.RulesetID == 0 && game.Beatmap.Value.BeatmapInfo.RulesetID == 0); + AddStep(@"Disallow beatmap conversion", () => + { + config.GetBindable(OsuSetting.ShowConvertedBeatmaps).Value = false; + game.Beatmap.Value = manager.GetWorkingBeatmap(manager.GetAllUsableBeatmapSets().First().Beatmaps.First()); + }); + loadNewSongSelect(); + AddWaitStep(3); + AddAssert(@"Ruleset matches beatmap", () => songSelect.RulesetID == game.Beatmap.Value.BeatmapInfo.RulesetID); } private BeatmapSetInfo createTestBeatmapSet(int i) @@ -134,7 +157,8 @@ namespace osu.Game.Tests.Visual new BeatmapInfo { OnlineBeatmapID = 1234 + i, - Ruleset = rulesets.AvailableRulesets.First(), + Ruleset = rulesets.AvailableRulesets.ElementAt(0), + RulesetID = 0, Path = "normal.osu", Version = "Normal", BaseDifficulty = new BeatmapDifficulty @@ -145,8 +169,9 @@ namespace osu.Game.Tests.Visual new BeatmapInfo { OnlineBeatmapID = 1235 + i, - Ruleset = rulesets.AvailableRulesets.First(), - Path = "hard.osu", + Ruleset = rulesets.AvailableRulesets.First(r => r.ID != 0), + RulesetID = 1, + Path = "hard.taiko", Version = "Hard", BaseDifficulty = new BeatmapDifficulty { @@ -156,8 +181,9 @@ namespace osu.Game.Tests.Visual new BeatmapInfo { OnlineBeatmapID = 1236 + i, - Ruleset = rulesets.AvailableRulesets.First(), - Path = "insane.osu", + Ruleset = rulesets.AvailableRulesets.ElementAt(2), + RulesetID = 2, + Path = "insane.fruits", Version = "Insane", BaseDifficulty = new BeatmapDifficulty { diff --git a/osu.Game/Screens/Select/SongSelect.cs b/osu.Game/Screens/Select/SongSelect.cs index de6847d866..6e1d95d42e 100644 --- a/osu.Game/Screens/Select/SongSelect.cs +++ b/osu.Game/Screens/Select/SongSelect.cs @@ -2,6 +2,7 @@ // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using System; +using System.Linq; using System.Threading; using OpenTK; using OpenTK.Input; @@ -9,12 +10,14 @@ using osu.Framework.Allocation; using osu.Framework.Audio; using osu.Framework.Audio.Sample; using osu.Framework.Audio.Track; +using osu.Framework.Configuration; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Framework.Input; using osu.Framework.Screens; using osu.Framework.Threading; using osu.Game.Beatmaps; +using osu.Game.Configuration; using osu.Game.Graphics; using osu.Game.Graphics.Containers; using osu.Game.Overlays; @@ -63,6 +66,8 @@ namespace osu.Game.Screens.Select private SampleChannel sampleChangeDifficulty; private SampleChannel sampleChangeBeatmap; + private Bindable rulesetConversionAllowed; + private CancellationTokenSource initialAddSetsTask; private DependencyContainer dependencies; @@ -179,7 +184,7 @@ namespace osu.Game.Screens.Select } [BackgroundDependencyLoader(permitNulls: true)] - private void load(BeatmapManager beatmaps, AudioManager audio, DialogOverlay dialog, OsuGame osu, OsuColour colours) + private void load(BeatmapManager beatmaps, AudioManager audio, DialogOverlay dialog, OsuGame osu, OsuColour colours, OsuConfigManager config) { dependencies.CacheAs(this); @@ -194,6 +199,8 @@ namespace osu.Game.Screens.Select if (this.beatmaps == null) this.beatmaps = beatmaps; + rulesetConversionAllowed = config.GetBindable(OsuSetting.ShowConvertedBeatmaps); + if (osu != null) Ruleset.BindTo(osu.Ruleset); @@ -217,7 +224,10 @@ namespace osu.Game.Screens.Select Beatmap.ValueChanged += b => { if (IsCurrentScreen) + { Carousel.SelectBeatmap(b?.BeatmapInfo); + ensurePlayableRuleset(); + } }; } @@ -316,6 +326,7 @@ namespace osu.Game.Screens.Select { base.OnEntering(last); + ensurePlayableRuleset(); Content.FadeInFromZero(250); FilterControl.Activate(); } @@ -441,6 +452,34 @@ namespace osu.Game.Screens.Select } } + private void ensurePlayableRuleset() + { + if (Beatmap.IsDefault) + // DummyBeatmap won't be playable anyway + return; + + bool conversionAllowed = rulesetConversionAllowed.Value; + int? currentRuleset = Ruleset.Value.ID; + int beatmapRuleset = Beatmap.Value.BeatmapInfo.RulesetID; + + if (currentRuleset == beatmapRuleset || conversionAllowed && beatmapRuleset == 0) + // Current beatmap is playable, nothing more to do + return; + + // Otherwise, first check if the current beatmapset has any playable beatmaps + BeatmapInfo beatmap = Beatmap.Value.BeatmapSetInfo.Beatmaps?.FirstOrDefault(b => b.RulesetID == currentRuleset || conversionAllowed && b.RulesetID == 0); + + // If it does then update the WorkingBeatmap + if (beatmap != null) + { + Beatmap.Value = beatmaps.GetWorkingBeatmap(beatmap); + return; + } + + // If it doesn't, then update the current ruleset so that the current beatmap is playable + Ruleset.Value = Beatmap.Value.BeatmapInfo.Ruleset; + } + private void onBeatmapSetAdded(BeatmapSetInfo s) => Carousel.UpdateBeatmapSet(s); private void onBeatmapSetRemoved(BeatmapSetInfo s) => Carousel.RemoveBeatmapSet(s); private void onBeatmapRestored(BeatmapInfo b) => Carousel.UpdateBeatmapSet(beatmaps.QueryBeatmapSet(s => s.ID == b.BeatmapSetInfoID)); From a57dc154f9aa323c6ab367442c417b7bb48363ae Mon Sep 17 00:00:00 2001 From: naoey Date: Sat, 3 Mar 2018 19:54:54 +0530 Subject: [PATCH 262/544] More specific tests. --- .../Visual/TestCasePlaySongSelect.cs | 80 ++++++++++++++++--- osu.Game/Screens/Select/SongSelect.cs | 18 +++-- 2 files changed, 81 insertions(+), 17 deletions(-) diff --git a/osu.Game.Tests/Visual/TestCasePlaySongSelect.cs b/osu.Game.Tests/Visual/TestCasePlaySongSelect.cs index d895080afe..8532962389 100644 --- a/osu.Game.Tests/Visual/TestCasePlaySongSelect.cs +++ b/osu.Game.Tests/Visual/TestCasePlaySongSelect.cs @@ -60,6 +60,14 @@ namespace osu.Game.Tests.Visual public void SetRuleset(RulesetInfo ruleset) => Ruleset.Value = ruleset; public int? RulesetID => Ruleset.Value.ID; + + protected override void Dispose(bool isDisposing) + { + base.Dispose(isDisposing); + + // Necessary while running tests because gc is moody and uncollected object interferes with OnEntering test + Beatmap.ValueChanged -= WorkingBeatmapChanged; + } } [BackgroundDependencyLoader] @@ -82,6 +90,7 @@ namespace osu.Game.Tests.Visual { if (deleteMaps) { + // TODO: check why this alone doesn't allow import test to run twice in the same session, probably because the delete op is not saved? manager.Delete(manager.GetAllUsableBeatmapSets()); game.Beatmap.SetDefault(); } @@ -93,6 +102,8 @@ namespace osu.Game.Tests.Visual } Add(songSelect = new TestSongSelect()); + + songSelect?.SetRuleset(rulesets.AvailableRulesets.First()); }); loadNewSongSelect(true); @@ -107,6 +118,36 @@ namespace osu.Game.Tests.Visual { for (int i = 0; i < 100; i += 10) manager.Import(createTestBeatmapSet(i)); + + // also import a set which has a single non - osu ruleset beatmap + manager.Import(new BeatmapSetInfo + { + OnlineBeatmapSetID = 1993, + Hash = new MemoryStream(Encoding.UTF8.GetBytes(Guid.NewGuid().ToString())).ComputeMD5Hash(), + Metadata = new BeatmapMetadata + { + OnlineBeatmapSetID = 1993, + // Create random metadata, then we can check if sorting works based on these + Artist = "MONACA " + RNG.Next(0, 9), + Title = "Black Song " + RNG.Next(0, 9), + AuthorString = "Some Guy " + RNG.Next(0, 9), + }, + Beatmaps = new List + { + new BeatmapInfo + { + OnlineBeatmapID = 1994, + Ruleset = rulesets.AvailableRulesets.ElementAt(3), + RulesetID = 3, + Path = "normal.fruits", + Version = "Normal", + BaseDifficulty = new BeatmapDifficulty + { + OverallDifficulty = 3.5f, + } + }, + } + }); }); AddWaitStep(3); @@ -121,23 +162,44 @@ namespace osu.Game.Tests.Visual AddStep(@"Sort by Author", delegate { songSelect.FilterControl.Sort = SortMode.Author; }); AddStep(@"Sort by Difficulty", delegate { songSelect.FilterControl.Sort = SortMode.Difficulty; }); - AddWaitStep(5); + // Test that song select sets a playable beatmap while entering + AddStep(@"Remove song select", () => + { + Remove(songSelect); + songSelect.Dispose(); + songSelect = null; + }); + AddStep(@"Set non-osu beatmap", () => game.Beatmap.Value = manager.GetWorkingBeatmap(manager.GetAllUsableBeatmapSets().First().Beatmaps.First(b => b.RulesetID != 0))); + AddAssert(@"Non-osu beatmap set", () => game.Beatmap.Value.BeatmapInfo.RulesetID != 0); + loadNewSongSelect(); + AddWaitStep(3); + AddAssert(@"osu beatmap set", () => game.Beatmap.Value.BeatmapInfo.RulesetID == 0); - AddStep(@"Set unplayable WorkingBeatmap", () => + // Test that song select changes WorkingBeatmap to be playable in current ruleset when updated externally + AddStep(@"Try set non-osu beatmap", () => { var testMap = manager.GetAllUsableBeatmapSets().First().Beatmaps.First(b => b.RulesetID != 0); songSelect.SetRuleset(rulesets.AvailableRulesets.First()); game.Beatmap.Value = manager.GetWorkingBeatmap(testMap); }); - AddAssert(@"WorkingBeatmap changed to playable ruleset", () => songSelect.RulesetID == 0 && game.Beatmap.Value.BeatmapInfo.RulesetID == 0); - AddStep(@"Disallow beatmap conversion", () => + AddAssert(@"Beatmap changed to osu", () => songSelect.RulesetID == 0 && game.Beatmap.Value.BeatmapInfo.RulesetID == 0); + + // Test that song select updates WorkingBeatmap when ruleset conversion is disabled + AddStep(@"Disable beatmap conversion", () => config.Set(OsuSetting.ShowConvertedBeatmaps, false)); + AddStep(@"Set osu beatmap taiko rs", () => { - config.GetBindable(OsuSetting.ShowConvertedBeatmaps).Value = false; - game.Beatmap.Value = manager.GetWorkingBeatmap(manager.GetAllUsableBeatmapSets().First().Beatmaps.First()); + game.Beatmap.Value = manager.GetWorkingBeatmap(manager.GetAllUsableBeatmapSets().First().Beatmaps.First(b => b.RulesetID == 0)); + songSelect.SetRuleset(rulesets.AvailableRulesets.First(r => r.ID == 1)); }); - loadNewSongSelect(); - AddWaitStep(3); - AddAssert(@"Ruleset matches beatmap", () => songSelect.RulesetID == game.Beatmap.Value.BeatmapInfo.RulesetID); + AddAssert(@"taiko beatmap set", () => songSelect.RulesetID == 1); + + // Test that song select changes the active ruleset when externally set beatmapset has no playable beatmaps + AddStep(@"Set fruits only beatmapset", () => + { + songSelect.SetRuleset(rulesets.AvailableRulesets.First()); + game.Beatmap.Value = manager.GetWorkingBeatmap(manager.QueryBeatmapSet(b => b.OnlineBeatmapSetID == 1993).Beatmaps.First()); + }); + AddAssert(@"Ruleset changed to fruits", () => songSelect.RulesetID == game.Beatmap.Value.BeatmapInfo.RulesetID); } private BeatmapSetInfo createTestBeatmapSet(int i) diff --git a/osu.Game/Screens/Select/SongSelect.cs b/osu.Game/Screens/Select/SongSelect.cs index 8033f8da8b..d4fd64dcd9 100644 --- a/osu.Game/Screens/Select/SongSelect.cs +++ b/osu.Game/Screens/Select/SongSelect.cs @@ -221,14 +221,7 @@ namespace osu.Game.Screens.Select Beatmap.DisabledChanged += disabled => Carousel.AllowSelection = !disabled; Beatmap.TriggerChange(); - Beatmap.ValueChanged += b => - { - if (IsCurrentScreen) - { - Carousel.SelectBeatmap(b?.BeatmapInfo); - ensurePlayableRuleset(); - } - }; + Beatmap.ValueChanged += WorkingBeatmapChanged; } public void Edit(BeatmapInfo beatmap) @@ -271,6 +264,15 @@ namespace osu.Game.Screens.Select // We need to keep track of the last selected beatmap ignoring debounce to play the correct selection sounds. private BeatmapInfo beatmapNoDebounce; + protected void WorkingBeatmapChanged(WorkingBeatmap beatmap) + { + if (IsCurrentScreen) + { + Carousel.SelectBeatmap(beatmap?.BeatmapInfo); + ensurePlayableRuleset(); + } + } + /// /// selection has been changed as the result of interaction with the carousel. /// From c6c55c40edf51afef87b5b1531e7da02ebccdfaa Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Sun, 4 Mar 2018 00:50:41 +0900 Subject: [PATCH 263/544] Rewrite BreakOverlay No longer relies on Schedule calls (could not be rewound). Also no longer sucks. --- osu.Game.Tests/Visual/TestCaseBreakOverlay.cs | 2 +- .../{BreaksOverlay => Break}/BlurredIcon.cs | 10 +- .../ArrowsOverlay.cs => Break/BreakArrows.cs} | 35 ++--- .../InfoContainer.cs => Break/BreakInfo.cs} | 26 ++-- .../InfoLine.cs => Break/BreakInfoLine.cs} | 10 +- .../Play/{BreaksOverlay => Break}/GlowIcon.cs | 12 +- .../LetterboxOverlay.cs | 13 +- .../RemainingTimeCounter.cs | 14 +- .../Play/{BreaksOverlay => }/BreakOverlay.cs | 142 +++++++++--------- osu.Game/Screens/Play/Player.cs | 1 - osu.Game/osu.Game.csproj | 16 +- 11 files changed, 125 insertions(+), 156 deletions(-) rename osu.Game/Screens/Play/{BreaksOverlay => Break}/BlurredIcon.cs (92%) rename osu.Game/Screens/Play/{BreaksOverlay/ArrowsOverlay.cs => Break/BreakArrows.cs} (78%) rename osu.Game/Screens/Play/{BreaksOverlay/InfoContainer.cs => Break/BreakInfo.cs} (62%) rename osu.Game/Screens/Play/{BreaksOverlay/InfoLine.cs => Break/BreakInfoLine.cs} (84%) rename osu.Game/Screens/Play/{BreaksOverlay => Break}/GlowIcon.cs (93%) rename osu.Game/Screens/Play/{BreaksOverlay => Break}/LetterboxOverlay.cs (77%) rename osu.Game/Screens/Play/{BreaksOverlay => Break}/RemainingTimeCounter.cs (70%) rename osu.Game/Screens/Play/{BreaksOverlay => }/BreakOverlay.cs (51%) diff --git a/osu.Game.Tests/Visual/TestCaseBreakOverlay.cs b/osu.Game.Tests/Visual/TestCaseBreakOverlay.cs index ae24d86325..51b8c61963 100644 --- a/osu.Game.Tests/Visual/TestCaseBreakOverlay.cs +++ b/osu.Game.Tests/Visual/TestCaseBreakOverlay.cs @@ -3,9 +3,9 @@ using osu.Framework.Timing; using osu.Game.Beatmaps.Timing; -using osu.Game.Screens.Play.BreaksOverlay; using System.Collections.Generic; using NUnit.Framework; +using osu.Game.Screens.Play; namespace osu.Game.Tests.Visual { diff --git a/osu.Game/Screens/Play/BreaksOverlay/BlurredIcon.cs b/osu.Game/Screens/Play/Break/BlurredIcon.cs similarity index 92% rename from osu.Game/Screens/Play/BreaksOverlay/BlurredIcon.cs rename to osu.Game/Screens/Play/Break/BlurredIcon.cs index 5395d7688e..6f47c97f89 100644 --- a/osu.Game/Screens/Play/BreaksOverlay/BlurredIcon.cs +++ b/osu.Game/Screens/Play/Break/BlurredIcon.cs @@ -1,13 +1,13 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE -using OpenTK; -using osu.Framework.Graphics.Containers; -using osu.Framework.Graphics; -using osu.Game.Graphics; using osu.Framework.Allocation; +using osu.Framework.Graphics; +using osu.Framework.Graphics.Containers; +using osu.Game.Graphics; +using OpenTK; -namespace osu.Game.Screens.Play.BreaksOverlay +namespace osu.Game.Screens.Play.Break { public class BlurredIcon : BufferedContainer { diff --git a/osu.Game/Screens/Play/BreaksOverlay/ArrowsOverlay.cs b/osu.Game/Screens/Play/Break/BreakArrows.cs similarity index 78% rename from osu.Game/Screens/Play/BreaksOverlay/ArrowsOverlay.cs rename to osu.Game/Screens/Play/Break/BreakArrows.cs index 9fdf90bd28..f2a60cdddf 100644 --- a/osu.Game/Screens/Play/BreaksOverlay/ArrowsOverlay.cs +++ b/osu.Game/Screens/Play/Break/BreakArrows.cs @@ -1,18 +1,15 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE -using osu.Framework.Graphics.Containers; using osu.Framework.Graphics; -using OpenTK; +using osu.Framework.Graphics.Containers; using osu.Game.Graphics.Containers; -using osu.Game.Beatmaps.Timing; +using OpenTK; -namespace osu.Game.Screens.Play.BreaksOverlay +namespace osu.Game.Screens.Play.Break { - public class ArrowsOverlay : VisibilityContainer + public class BreakArrows : CompositeDrawable { - private const double fade_duration = BreakPeriod.MIN_BREAK_DURATION / 2; - private const int glow_icon_size = 60; private const int glow_icon_blur_sigma = 10; private const float glow_icon_final_offset = 0.22f; @@ -29,10 +26,10 @@ namespace osu.Game.Screens.Play.BreaksOverlay private readonly BlurredIcon leftBlurredIcon; private readonly BlurredIcon rightBlurredIcon; - public ArrowsOverlay() + public BreakArrows() { RelativeSizeAxes = Axes.Both; - Children = new Drawable[] + InternalChildren = new Drawable[] { leftGlowIcon = new GlowIcon { @@ -82,22 +79,22 @@ namespace osu.Game.Screens.Play.BreaksOverlay }; } - protected override void PopIn() + public void Show(double duration) { - leftGlowIcon.MoveToX(-glow_icon_final_offset, fade_duration, Easing.OutQuint); - rightGlowIcon.MoveToX(glow_icon_final_offset, fade_duration, Easing.OutQuint); + leftGlowIcon.MoveToX(-glow_icon_final_offset, duration, Easing.OutQuint); + rightGlowIcon.MoveToX(glow_icon_final_offset, duration, Easing.OutQuint); - leftBlurredIcon.MoveToX(-blurred_icon_final_offset, fade_duration, Easing.OutQuint); - rightBlurredIcon.MoveToX(blurred_icon_final_offset, fade_duration, Easing.OutQuint); + leftBlurredIcon.MoveToX(-blurred_icon_final_offset, duration, Easing.OutQuint); + rightBlurredIcon.MoveToX(blurred_icon_final_offset, duration, Easing.OutQuint); } - protected override void PopOut() + public void Hide(double duration) { - leftGlowIcon.MoveToX(-glow_icon_offscreen_offset, fade_duration, Easing.OutQuint); - rightGlowIcon.MoveToX(glow_icon_offscreen_offset, fade_duration, Easing.OutQuint); + leftGlowIcon.MoveToX(-glow_icon_offscreen_offset, duration, Easing.OutQuint); + rightGlowIcon.MoveToX(glow_icon_offscreen_offset, duration, Easing.OutQuint); - leftBlurredIcon.MoveToX(-blurred_icon_offscreen_offset, fade_duration, Easing.OutQuint); - rightBlurredIcon.MoveToX(blurred_icon_offscreen_offset, fade_duration, Easing.OutQuint); + leftBlurredIcon.MoveToX(-blurred_icon_offscreen_offset, duration, Easing.OutQuint); + rightBlurredIcon.MoveToX(blurred_icon_offscreen_offset, duration, Easing.OutQuint); } } } diff --git a/osu.Game/Screens/Play/BreaksOverlay/InfoContainer.cs b/osu.Game/Screens/Play/Break/BreakInfo.cs similarity index 62% rename from osu.Game/Screens/Play/BreaksOverlay/InfoContainer.cs rename to osu.Game/Screens/Play/Break/BreakInfo.cs index d7ab4ff2e5..5e011903fe 100644 --- a/osu.Game/Screens/Play/BreaksOverlay/InfoContainer.cs +++ b/osu.Game/Screens/Play/Break/BreakInfo.cs @@ -1,24 +1,21 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE -using OpenTK; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Game.Graphics.Sprites; using osu.Game.Rulesets.Scoring; -using osu.Game.Beatmaps.Timing; +using OpenTK; -namespace osu.Game.Screens.Play.BreaksOverlay +namespace osu.Game.Screens.Play.Break { - public class InfoContainer : VisibilityContainer + public class BreakInfo : Container { - private const double fade_duration = BreakPeriod.MIN_BREAK_DURATION / 2; + public PercentageBreakInfoLine AccuracyDisplay; + public BreakInfoLine RankDisplay; + public BreakInfoLine GradeDisplay; - public PercentageInfoLine AccuracyDisplay; - public InfoLine RankDisplay; - public InfoLine GradeDisplay; - - public InfoContainer() + public BreakInfo() { AutoSizeAxes = Axes.Both; Child = new FillFlowContainer @@ -43,16 +40,13 @@ namespace osu.Game.Screens.Play.BreaksOverlay Direction = FillDirection.Vertical, Children = new Drawable[] { - AccuracyDisplay = new PercentageInfoLine("Accuracy"), - RankDisplay = new InfoLine("Rank"), - GradeDisplay = new InfoLine("Grade"), + AccuracyDisplay = new PercentageBreakInfoLine("Accuracy"), + RankDisplay = new BreakInfoLine("Rank"), + GradeDisplay = new BreakInfoLine("Grade"), }, } }, }; } - - protected override void PopIn() => this.FadeIn(fade_duration); - protected override void PopOut() => this.FadeOut(fade_duration); } } diff --git a/osu.Game/Screens/Play/BreaksOverlay/InfoLine.cs b/osu.Game/Screens/Play/Break/BreakInfoLine.cs similarity index 84% rename from osu.Game/Screens/Play/BreaksOverlay/InfoLine.cs rename to osu.Game/Screens/Play/Break/BreakInfoLine.cs index b39eaf1c22..3d96bca1fa 100644 --- a/osu.Game/Screens/Play/BreaksOverlay/InfoLine.cs +++ b/osu.Game/Screens/Play/Break/BreakInfoLine.cs @@ -8,9 +8,9 @@ using osu.Framework.Graphics.Containers; using osu.Game.Graphics; using osu.Game.Graphics.Sprites; -namespace osu.Game.Screens.Play.BreaksOverlay +namespace osu.Game.Screens.Play.Break { - public class InfoLine : Container + public class BreakInfoLine : Container where T : struct { private const int margin = 2; @@ -22,7 +22,7 @@ namespace osu.Game.Screens.Play.BreaksOverlay private readonly string prefix; - public InfoLine(string name, string prefix = @"") + public BreakInfoLine(string name, string prefix = @"") { this.prefix = prefix; @@ -71,9 +71,9 @@ namespace osu.Game.Screens.Play.BreaksOverlay } } - public class PercentageInfoLine : InfoLine + public class PercentageBreakInfoLine : BreakInfoLine { - public PercentageInfoLine(string name, string prefix = "") : base(name, prefix) + public PercentageBreakInfoLine(string name, string prefix = "") : base(name, prefix) { } diff --git a/osu.Game/Screens/Play/BreaksOverlay/GlowIcon.cs b/osu.Game/Screens/Play/Break/GlowIcon.cs similarity index 93% rename from osu.Game/Screens/Play/BreaksOverlay/GlowIcon.cs rename to osu.Game/Screens/Play/Break/GlowIcon.cs index bad9df2093..79b39a873a 100644 --- a/osu.Game/Screens/Play/BreaksOverlay/GlowIcon.cs +++ b/osu.Game/Screens/Play/Break/GlowIcon.cs @@ -1,13 +1,13 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE -using osu.Framework.Graphics.Containers; +using osu.Framework.Allocation; using osu.Framework.Graphics; +using osu.Framework.Graphics.Containers; using osu.Game.Graphics; using OpenTK; -using osu.Framework.Allocation; -namespace osu.Game.Screens.Play.BreaksOverlay +namespace osu.Game.Screens.Play.Break { public class GlowIcon : Container { @@ -16,24 +16,24 @@ namespace osu.Game.Screens.Play.BreaksOverlay public override Vector2 Size { + get { return base.Size; } set { blurredIcon.Size = spriteIcon.Size = value; blurredIcon.ForceRedraw(); } - get { return base.Size; } } public Vector2 BlurSigma { - set { blurredIcon.BlurSigma = value; } get { return blurredIcon.BlurSigma; } + set { blurredIcon.BlurSigma = value; } } public FontAwesome Icon { - set { spriteIcon.Icon = blurredIcon.Icon = value; } get { return spriteIcon.Icon; } + set { spriteIcon.Icon = blurredIcon.Icon = value; } } public GlowIcon() diff --git a/osu.Game/Screens/Play/BreaksOverlay/LetterboxOverlay.cs b/osu.Game/Screens/Play/Break/LetterboxOverlay.cs similarity index 77% rename from osu.Game/Screens/Play/BreaksOverlay/LetterboxOverlay.cs rename to osu.Game/Screens/Play/Break/LetterboxOverlay.cs index f4c9362fff..21eb5ebea0 100644 --- a/osu.Game/Screens/Play/BreaksOverlay/LetterboxOverlay.cs +++ b/osu.Game/Screens/Play/Break/LetterboxOverlay.cs @@ -1,18 +1,16 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE -using OpenTK.Graphics; using osu.Framework.Graphics; using osu.Framework.Graphics.Colour; using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Shapes; -using osu.Game.Beatmaps.Timing; +using OpenTK.Graphics; -namespace osu.Game.Screens.Play.BreaksOverlay +namespace osu.Game.Screens.Play.Break { - public class LetterboxOverlay : VisibilityContainer + public class LetterboxOverlay : CompositeDrawable { - private const double fade_duration = BreakPeriod.MIN_BREAK_DURATION / 2; private const int height = 350; private static readonly Color4 transparent_black = new Color4(0, 0, 0, 0); @@ -20,7 +18,7 @@ namespace osu.Game.Screens.Play.BreaksOverlay public LetterboxOverlay() { RelativeSizeAxes = Axes.Both; - Children = new Drawable[] + InternalChildren = new Drawable[] { new Container { @@ -48,8 +46,5 @@ namespace osu.Game.Screens.Play.BreaksOverlay } }; } - - protected override void PopIn() => this.FadeIn(fade_duration); - protected override void PopOut() => this.FadeOut(fade_duration); } } diff --git a/osu.Game/Screens/Play/BreaksOverlay/RemainingTimeCounter.cs b/osu.Game/Screens/Play/Break/RemainingTimeCounter.cs similarity index 70% rename from osu.Game/Screens/Play/BreaksOverlay/RemainingTimeCounter.cs rename to osu.Game/Screens/Play/Break/RemainingTimeCounter.cs index 015fefb423..f6e683f519 100644 --- a/osu.Game/Screens/Play/BreaksOverlay/RemainingTimeCounter.cs +++ b/osu.Game/Screens/Play/Break/RemainingTimeCounter.cs @@ -1,18 +1,15 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE -using osu.Game.Graphics.Sprites; -using osu.Framework.Graphics; using System; -using osu.Game.Beatmaps.Timing; +using osu.Framework.Graphics; using osu.Framework.Graphics.UserInterface; +using osu.Game.Graphics.Sprites; -namespace osu.Game.Screens.Play.BreaksOverlay +namespace osu.Game.Screens.Play.Break { public class RemainingTimeCounter : Counter { - private const double fade_duration = BreakPeriod.MIN_BREAK_DURATION / 2; - private readonly OsuSpriteText counter; public RemainingTimeCounter() @@ -25,13 +22,8 @@ namespace osu.Game.Screens.Play.BreaksOverlay TextSize = 33, Font = "Venera", }; - - Alpha = 0; } protected override void OnCountChanged(double count) => counter.Text = ((int)Math.Ceiling(count / 1000)).ToString(); - - public override void Show() => this.FadeIn(fade_duration); - public override void Hide() => this.FadeOut(fade_duration); } } diff --git a/osu.Game/Screens/Play/BreaksOverlay/BreakOverlay.cs b/osu.Game/Screens/Play/BreakOverlay.cs similarity index 51% rename from osu.Game/Screens/Play/BreaksOverlay/BreakOverlay.cs rename to osu.Game/Screens/Play/BreakOverlay.cs index af7c1ef5aa..6c7ee596a1 100644 --- a/osu.Game/Screens/Play/BreaksOverlay/BreakOverlay.cs +++ b/osu.Game/Screens/Play/BreakOverlay.cs @@ -1,15 +1,16 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using System.Collections.Generic; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Shapes; +using osu.Framework.Graphics.UserInterface; using osu.Game.Beatmaps.Timing; using osu.Game.Rulesets.Scoring; -using System.Collections.Generic; -using osu.Framework.Graphics.UserInterface; +using osu.Game.Screens.Play.Break; -namespace osu.Game.Screens.Play.BreaksOverlay +namespace osu.Game.Screens.Play { public class BreakOverlay : Container { @@ -18,28 +19,26 @@ namespace osu.Game.Screens.Play.BreaksOverlay private const int vertical_margin = 25; private List breaks; + + private readonly Container fadeContainer; + public List Breaks { + get => breaks; set { breaks = value; initializeBreaks(); } - get - { - return breaks; - } } public override bool RemoveCompletedTransforms => false; - private readonly bool letterboxing; - private readonly LetterboxOverlay letterboxOverlay; private readonly Container remainingTimeAdjustmentBox; private readonly Container remainingTimeBox; private readonly RemainingTimeCounter remainingTimeCounter; - private readonly InfoContainer info; - private readonly ArrowsOverlay arrowsOverlay; + private readonly BreakInfo info; + private readonly BreakArrows breakArrows; public BreakOverlay(bool letterboxing, ScoreProcessor scoreProcessor) : this(letterboxing) @@ -49,61 +48,72 @@ namespace osu.Game.Screens.Play.BreaksOverlay public BreakOverlay(bool letterboxing) { - this.letterboxing = letterboxing; - RelativeSizeAxes = Axes.Both; - Children = new Drawable[] + Child = fadeContainer = new Container { - letterboxOverlay = new LetterboxOverlay + Alpha = 0, + RelativeSizeAxes = Axes.Both, + Children = new Drawable[] { - Anchor = Anchor.Centre, - Origin = Anchor.Centre, - }, - remainingTimeAdjustmentBox = new Container - { - Anchor = Anchor.Centre, - Origin = Anchor.Centre, - AutoSizeAxes = Axes.Y, - RelativeSizeAxes = Axes.X, - Width = 0, - Child = remainingTimeBox = new Container + new LetterboxOverlay + { + Alpha = letterboxing ? 1 : 0, + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + }, + remainingTimeAdjustmentBox = new Container { Anchor = Anchor.Centre, Origin = Anchor.Centre, + AutoSizeAxes = Axes.Y, RelativeSizeAxes = Axes.X, - Height = 8, - CornerRadius = 4, - Masking = true, - Child = new Box { RelativeSizeAxes = Axes.Both } + Width = 0, + Child = remainingTimeBox = new Container + { + Anchor = Anchor.Centre, + Origin = Anchor.Centre, + RelativeSizeAxes = Axes.X, + Height = 8, + CornerRadius = 4, + Masking = true, + Child = new Box { RelativeSizeAxes = Axes.Both } + } + }, + remainingTimeCounter = new RemainingTimeCounter + { + Anchor = Anchor.Centre, + Origin = Anchor.BottomCentre, + Margin = new MarginPadding { Bottom = vertical_margin }, + }, + info = new BreakInfo + { + Anchor = Anchor.Centre, + Origin = Anchor.TopCentre, + Margin = new MarginPadding { Top = vertical_margin }, + }, + breakArrows = new BreakArrows + { + Anchor = Anchor.Centre, + Origin = Anchor.Centre, } - }, - remainingTimeCounter = new RemainingTimeCounter - { - Anchor = Anchor.Centre, - Origin = Anchor.BottomCentre, - Margin = new MarginPadding { Bottom = vertical_margin }, - }, - info = new InfoContainer - { - Anchor = Anchor.Centre, - Origin = Anchor.TopCentre, - Margin = new MarginPadding { Top = vertical_margin }, - }, - arrowsOverlay = new ArrowsOverlay - { - Anchor = Anchor.Centre, - Origin = Anchor.Centre, } }; } + protected override void LoadComplete() + { + base.LoadComplete(); + initializeBreaks(); + } + private void initializeBreaks() { + if (!IsLoaded) return; // we need a clock. + FinishTransforms(true); Scheduler.CancelDelayedTasks(); - if (breaks == null) - return; + if (breaks == null) return; //we need breaks. foreach (var b in breaks) { @@ -112,6 +122,9 @@ namespace osu.Game.Screens.Play.BreaksOverlay using (BeginAbsoluteSequence(b.StartTime, true)) { + fadeContainer.FadeIn(fade_duration); + breakArrows.Show(fade_duration); + remainingTimeAdjustmentBox .ResizeWidthTo(remaining_time_container_max_size, fade_duration, Easing.OutQuint) .Delay(b.Duration - fade_duration) @@ -123,37 +136,16 @@ namespace osu.Game.Screens.Play.BreaksOverlay .ResizeWidthTo(1); remainingTimeCounter.CountTo(b.Duration).CountTo(0, b.Duration); - } - using (BeginAbsoluteSequence(b.StartTime)) - { - Schedule(showBreak); - using (BeginDelayedSequence(b.Duration - fade_duration)) - Schedule(hideBreak); + using (BeginDelayedSequence(b.Duration - fade_duration, true)) + { + fadeContainer.FadeOut(fade_duration); + breakArrows.Hide(fade_duration); + } } } } - private void showBreak() - { - if (letterboxing) - letterboxOverlay.Show(); - - remainingTimeCounter.Show(); - info.Show(); - arrowsOverlay.Show(); - } - - private void hideBreak() - { - if (letterboxing) - letterboxOverlay.Hide(); - - remainingTimeCounter.Hide(); - info.Hide(); - arrowsOverlay.Hide(); - } - private void bindProcessor(ScoreProcessor processor) { info.AccuracyDisplay.Current.BindTo(processor.Accuracy); diff --git a/osu.Game/Screens/Play/Player.cs b/osu.Game/Screens/Play/Player.cs index 7a0c723ab5..84f6cd606a 100644 --- a/osu.Game/Screens/Play/Player.cs +++ b/osu.Game/Screens/Play/Player.cs @@ -26,7 +26,6 @@ using osu.Game.Rulesets.Mods; using osu.Game.Rulesets.Scoring; using osu.Game.Rulesets.UI; using osu.Game.Screens.Backgrounds; -using osu.Game.Screens.Play.BreaksOverlay; using osu.Game.Screens.Ranking; using osu.Game.Storyboards.Drawables; using OpenTK; diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index ff365ad93e..429e7c7b27 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -395,14 +395,14 @@ - - - - - - - - + + + + + + + + From 26e50043b70a0c13eb769638fcccf08a7600529d Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Sat, 3 Mar 2018 14:07:15 +0900 Subject: [PATCH 264/544] Fix parallax container during rewinds --- osu.Game/Graphics/Containers/ParallaxContainer.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game/Graphics/Containers/ParallaxContainer.cs b/osu.Game/Graphics/Containers/ParallaxContainer.cs index f4400b7df2..febe52d775 100644 --- a/osu.Game/Graphics/Containers/ParallaxContainer.cs +++ b/osu.Game/Graphics/Containers/ParallaxContainer.cs @@ -66,7 +66,7 @@ namespace osu.Game.Graphics.Containers { Vector2 offset = (input.CurrentState.Mouse == null ? Vector2.Zero : ToLocalSpace(input.CurrentState.Mouse.NativeState.Position) - DrawSize / 2) * ParallaxAmount; - content.Position = Interpolation.ValueAt(Clock.ElapsedFrameTime, content.Position, offset, 0, 1000, Easing.OutQuint); + content.Position = Interpolation.ValueAt(MathHelper.Clamp(Clock.ElapsedFrameTime, 0, 1000), content.Position, offset, 0, 1000, Easing.OutQuint); content.Scale = new Vector2(1 + ParallaxAmount); } From 659578e8fa8563b58ddda9e632f65ce443dafa70 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Sun, 4 Mar 2018 01:48:00 +0900 Subject: [PATCH 265/544] Add rewind support for storyboards --- osu.Game/Storyboards/Drawables/DrawableStoryboard.cs | 2 ++ osu.Game/Storyboards/Drawables/DrawableStoryboardAnimation.cs | 2 ++ osu.Game/Storyboards/Drawables/DrawableStoryboardSprite.cs | 2 ++ 3 files changed, 6 insertions(+) diff --git a/osu.Game/Storyboards/Drawables/DrawableStoryboard.cs b/osu.Game/Storyboards/Drawables/DrawableStoryboard.cs index aaeaaabd55..9da92d8cb4 100644 --- a/osu.Game/Storyboards/Drawables/DrawableStoryboard.cs +++ b/osu.Game/Storyboards/Drawables/DrawableStoryboard.cs @@ -33,6 +33,8 @@ namespace osu.Game.Storyboards.Drawables } } + public override bool RemoveCompletedTransforms => false; + private DependencyContainer dependencies; protected override IReadOnlyDependencyContainer CreateLocalDependencies(IReadOnlyDependencyContainer parent) => dependencies = new DependencyContainer(base.CreateLocalDependencies(parent)); diff --git a/osu.Game/Storyboards/Drawables/DrawableStoryboardAnimation.cs b/osu.Game/Storyboards/Drawables/DrawableStoryboardAnimation.cs index ef782abbe5..0b84ff3297 100644 --- a/osu.Game/Storyboards/Drawables/DrawableStoryboardAnimation.cs +++ b/osu.Game/Storyboards/Drawables/DrawableStoryboardAnimation.cs @@ -17,6 +17,8 @@ namespace osu.Game.Storyboards.Drawables public bool FlipH { get; set; } public bool FlipV { get; set; } + public override bool RemoveWhenNotAlive => false; + protected override Vector2 DrawScale => new Vector2(FlipH ? -base.DrawScale.X : base.DrawScale.X, FlipV ? -base.DrawScale.Y : base.DrawScale.Y); diff --git a/osu.Game/Storyboards/Drawables/DrawableStoryboardSprite.cs b/osu.Game/Storyboards/Drawables/DrawableStoryboardSprite.cs index a39805f74e..c4b9a3d47e 100644 --- a/osu.Game/Storyboards/Drawables/DrawableStoryboardSprite.cs +++ b/osu.Game/Storyboards/Drawables/DrawableStoryboardSprite.cs @@ -17,6 +17,8 @@ namespace osu.Game.Storyboards.Drawables public bool FlipH { get; set; } public bool FlipV { get; set; } + public override bool RemoveWhenNotAlive => false; + protected override Vector2 DrawScale => new Vector2(FlipH ? -base.DrawScale.X : base.DrawScale.X, FlipV ? -base.DrawScale.Y : base.DrawScale.Y); From 8273288048b6e45375d933f5b244a7eae9397b45 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Sun, 4 Mar 2018 02:12:45 +0900 Subject: [PATCH 266/544] Add xmldoc --- osu.Game/Rulesets/Ruleset.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/osu.Game/Rulesets/Ruleset.cs b/osu.Game/Rulesets/Ruleset.cs index 7b6219da9a..f9b64995f9 100644 --- a/osu.Game/Rulesets/Ruleset.cs +++ b/osu.Game/Rulesets/Ruleset.cs @@ -90,6 +90,11 @@ namespace osu.Game.Rulesets /// A descriptive name of the variant. public virtual string GetVariantName(int variant) => string.Empty; + /// + /// For rulesets which support legacy (osu-stable) replay conversion, this method will create an empty replay frame + /// for conversion use. + /// + /// An empty frame for the current ruleset, or null if unsupported. public virtual IConvertibleReplayFrame CreateConvertibleReplayFrame() => null; /// From ea6e3938c039a27d29a13b17404fd8a582b197e7 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Sun, 4 Mar 2018 03:00:13 +0900 Subject: [PATCH 267/544] Fix hard crash due to spinner spin requirement being zero Resolves #2133. --- osu.Game.Rulesets.Osu/Objects/Spinner.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/osu.Game.Rulesets.Osu/Objects/Spinner.cs b/osu.Game.Rulesets.Osu/Objects/Spinner.cs index 2f238bb74b..b30e4cb932 100644 --- a/osu.Game.Rulesets.Osu/Objects/Spinner.cs +++ b/osu.Game.Rulesets.Osu/Objects/Spinner.cs @@ -1,6 +1,7 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using System; using osu.Game.Beatmaps; using osu.Game.Rulesets.Objects.Types; using osu.Game.Beatmaps.ControlPoints; @@ -26,7 +27,7 @@ namespace osu.Game.Rulesets.Osu.Objects SpinsRequired = (int)(Duration / 1000 * BeatmapDifficulty.DifficultyRange(difficulty.OverallDifficulty, 3, 5, 7.5)); // spinning doesn't match 1:1 with stable, so let's fudge them easier for the time being. - SpinsRequired = (int)(SpinsRequired * 0.6); + SpinsRequired = (int)Math.Max(1, SpinsRequired * 0.6); } } } From 3a420ba8269920c45ba166076a14a82f6f6815da Mon Sep 17 00:00:00 2001 From: jorolf Date: Sat, 3 Mar 2018 19:08:35 +0100 Subject: [PATCH 268/544] add the volume overlay --- ...lumeControl.cs => TestCaseVolumePieces.cs} | 3 +- osu.Game.Tests/osu.Game.Tests.csproj | 2 +- .../UserInterface/Volume/VolumeMeter.cs | 108 ------------- osu.Game/OsuGame.cs | 6 +- osu.Game/Overlays/Volume/MuteButton.cs | 27 +++- .../Volume/VolumeControlReceptor.cs | 2 +- osu.Game/Overlays/Volume/VolumeMeter.cs | 4 +- .../VolumeOverlay.cs} | 145 +++++++++--------- osu.Game/osu.Game.csproj | 5 +- 9 files changed, 109 insertions(+), 193 deletions(-) rename osu.Game.Tests/Visual/{TestCaseVolumeControl.cs => TestCaseVolumePieces.cs} (90%) delete mode 100644 osu.Game/Graphics/UserInterface/Volume/VolumeMeter.cs rename osu.Game/{Graphics/UserInterface => Overlays}/Volume/VolumeControlReceptor.cs (90%) rename osu.Game/{Graphics/UserInterface/Volume/VolumeControl.cs => Overlays/VolumeOverlay.cs} (54%) diff --git a/osu.Game.Tests/Visual/TestCaseVolumeControl.cs b/osu.Game.Tests/Visual/TestCaseVolumePieces.cs similarity index 90% rename from osu.Game.Tests/Visual/TestCaseVolumeControl.cs rename to osu.Game.Tests/Visual/TestCaseVolumePieces.cs index 04390d6d19..5a43574a9d 100644 --- a/osu.Game.Tests/Visual/TestCaseVolumeControl.cs +++ b/osu.Game.Tests/Visual/TestCaseVolumePieces.cs @@ -9,7 +9,7 @@ using osu.Game.Overlays.Volume; namespace osu.Game.Tests.Visual { - public class TestCaseVolumeControl : TestCase + public class TestCaseVolumePieces : TestCase { public override IReadOnlyList RequiredTypes => new[] { typeof(VolumeMeter), typeof(MuteButton) }; @@ -24,6 +24,7 @@ namespace osu.Game.Tests.Visual }); meter.Bindable.BindTo(audio.Volume); + } } } diff --git a/osu.Game.Tests/osu.Game.Tests.csproj b/osu.Game.Tests/osu.Game.Tests.csproj index dde04201f2..8cbeb6aab6 100644 --- a/osu.Game.Tests/osu.Game.Tests.csproj +++ b/osu.Game.Tests/osu.Game.Tests.csproj @@ -174,7 +174,7 @@ - + diff --git a/osu.Game/Graphics/UserInterface/Volume/VolumeMeter.cs b/osu.Game/Graphics/UserInterface/Volume/VolumeMeter.cs deleted file mode 100644 index ef3702fdf3..0000000000 --- a/osu.Game/Graphics/UserInterface/Volume/VolumeMeter.cs +++ /dev/null @@ -1,108 +0,0 @@ -// Copyright (c) 2007-2018 ppy Pty Ltd . -// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE - -using osu.Framework.Configuration; -using osu.Framework.Graphics; -using osu.Framework.Graphics.Containers; -using osu.Game.Graphics.Sprites; -using OpenTK; -using OpenTK.Graphics; -using osu.Framework.Graphics.Shapes; -using osu.Framework.Input.Bindings; -using osu.Game.Input.Bindings; - -namespace osu.Game.Graphics.UserInterface.Volume -{ - public class VolumeMeter : Container, IKeyBindingHandler - { - private readonly Box meterFill; - public BindableDouble Bindable { get; } = new BindableDouble(); - - public VolumeMeter(string meterName) - { - Size = new Vector2(40, 180); - Children = new Drawable[] - { - new Box - { - Colour = Color4.Black, - RelativeSizeAxes = Axes.Both - }, - new Container - { - RelativeSizeAxes = Axes.Both, - Size = new Vector2(0.5f, 0.9f), - Anchor = Anchor.Centre, - Origin = Anchor.Centre, - Children = new Drawable[] - { - new Box - { - Colour = Color4.DarkGray, - RelativeSizeAxes = Axes.Both - }, - meterFill = new Box - { - Colour = Color4.White, - Scale = new Vector2(1, 0), - RelativeSizeAxes = Axes.Both, - Origin = Anchor.BottomCentre, - Anchor = Anchor.BottomCentre - } - } - }, - new OsuSpriteText - { - Text = meterName, - Anchor = Anchor.BottomCentre, - Origin = Anchor.TopCentre - } - }; - - Bindable.ValueChanged += delegate { updateFill(); }; - } - - protected override void LoadComplete() - { - base.LoadComplete(); - updateFill(); - } - - public double Volume - { - get => Bindable.Value; - private set => Bindable.Value = value; - } - - public void Increase() - { - Volume += 0.05f; - } - - public void Decrease() - { - Volume -= 0.05f; - } - - private void updateFill() => meterFill.ScaleTo(new Vector2(1, (float)Volume), 300, Easing.OutQuint); - - public bool OnPressed(GlobalAction action) - { - if (!IsHovered) return false; - - switch (action) - { - case GlobalAction.DecreaseVolume: - Decrease(); - return true; - case GlobalAction.IncreaseVolume: - Increase(); - return true; - } - - return false; - } - - public bool OnReleased(GlobalAction action) => false; - } -} diff --git a/osu.Game/OsuGame.cs b/osu.Game/OsuGame.cs index aeb23dccd7..a6f650d23d 100644 --- a/osu.Game/OsuGame.cs +++ b/osu.Game/OsuGame.cs @@ -10,7 +10,6 @@ using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Game.Overlays; using osu.Framework.Logging; -using osu.Game.Graphics.UserInterface.Volume; using osu.Framework.Allocation; using osu.Game.Overlays.Toolbar; using osu.Game.Screens; @@ -33,6 +32,7 @@ using osu.Game.Input.Bindings; using osu.Game.Rulesets.Mods; using osu.Game.Skinning; using OpenTK.Graphics; +using osu.Game.Overlays.Volume; namespace osu.Game { @@ -75,7 +75,7 @@ namespace osu.Game private OsuScreen screenStack; - private VolumeControl volume; + private VolumeOverlay volume; private OnScreenDisplay onscreenDisplay; private Bindable configRuleset; @@ -232,7 +232,7 @@ namespace osu.Game }, }, overlayContent.Add); - loadComponentSingleFile(volume = new VolumeControl(), Add); + loadComponentSingleFile(volume = new VolumeOverlay(), Add); loadComponentSingleFile(onscreenDisplay = new OnScreenDisplay(), Add); //overlay elements diff --git a/osu.Game/Overlays/Volume/MuteButton.cs b/osu.Game/Overlays/Volume/MuteButton.cs index b45034c166..82e61c8f0b 100644 --- a/osu.Game/Overlays/Volume/MuteButton.cs +++ b/osu.Game/Overlays/Volume/MuteButton.cs @@ -18,13 +18,15 @@ namespace osu.Game.Overlays.Volume public Bindable Current { get; } = new Bindable(); private Color4 hoveredColour, unhoveredColour; + private const float width = 100; + public const float HEIGHT = 35; public MuteButton() { Masking = true; BorderThickness = 3; - CornerRadius = 20; - Size = new Vector2(100, 40); + CornerRadius = HEIGHT / 2; + Size = new Vector2(width, HEIGHT); } [BackgroundDependencyLoader] @@ -33,6 +35,8 @@ namespace osu.Game.Overlays.Volume hoveredColour = colours.YellowDark; BorderColour = unhoveredColour = colours.Gray1.Opacity(0.9f); + + SpriteIcon icon; AddRange(new Drawable[] { new Box @@ -41,7 +45,20 @@ namespace osu.Game.Overlays.Volume Colour = colours.Gray1, Alpha = 0.9f, }, + icon = new SpriteIcon + { + Anchor = Anchor.CentreLeft, + Origin = Anchor.CentreLeft, + Size = new Vector2(20), + } }); + + Current.ValueChanged += newValue => + { + icon.Icon = newValue ? FontAwesome.fa_volume_off : FontAwesome.fa_volume_up; + icon.Margin = new MarginPadding { Left = newValue ? width / 2 - 15 : width / 2 - 10 }; //Magic numbers to line up both icons because they're different widths + }; + Current.TriggerChange(); } protected override bool OnHover(InputState state) @@ -54,5 +71,11 @@ namespace osu.Game.Overlays.Volume { this.TransformTo("BorderColour", unhoveredColour, 500, Easing.OutQuint); } + + protected override bool OnClick(InputState state) + { + Current.Value = !Current.Value; + return true; + } } } diff --git a/osu.Game/Graphics/UserInterface/Volume/VolumeControlReceptor.cs b/osu.Game/Overlays/Volume/VolumeControlReceptor.cs similarity index 90% rename from osu.Game/Graphics/UserInterface/Volume/VolumeControlReceptor.cs rename to osu.Game/Overlays/Volume/VolumeControlReceptor.cs index 2328533665..a5be7dc445 100644 --- a/osu.Game/Graphics/UserInterface/Volume/VolumeControlReceptor.cs +++ b/osu.Game/Overlays/Volume/VolumeControlReceptor.cs @@ -7,7 +7,7 @@ using osu.Framework.Input; using osu.Framework.Input.Bindings; using osu.Game.Input.Bindings; -namespace osu.Game.Graphics.UserInterface.Volume +namespace osu.Game.Overlays.Volume { public class VolumeControlReceptor : Container, IKeyBindingHandler, IHandleGlobalInput { diff --git a/osu.Game/Overlays/Volume/VolumeMeter.cs b/osu.Game/Overlays/Volume/VolumeMeter.cs index 3351dbed9a..92b5c3f0bd 100644 --- a/osu.Game/Overlays/Volume/VolumeMeter.cs +++ b/osu.Game/Overlays/Volume/VolumeMeter.cs @@ -128,9 +128,9 @@ namespace osu.Game.Overlays.Volume }); Bindable.ValueChanged += newVolume => this.TransformTo("circleBindable", newVolume * 0.75, 250, Easing.OutQuint); - volumeCircle.Current.ValueChanged += newVolume => + volumeCircle.Current.ValueChanged += newVolume => //by using this event we sync the meter with the text. newValue has to be divided by 0.75 to give the actual percentage { - if (newVolume > 0.745) + if (Precision.DefinitelyBigger(newVolume, 0.74)) { text.Alpha = 0; maxGlow.Alpha = 1; //show "MAX" diff --git a/osu.Game/Graphics/UserInterface/Volume/VolumeControl.cs b/osu.Game/Overlays/VolumeOverlay.cs similarity index 54% rename from osu.Game/Graphics/UserInterface/Volume/VolumeControl.cs rename to osu.Game/Overlays/VolumeOverlay.cs index ccf70af6ed..aa94667901 100644 --- a/osu.Game/Graphics/UserInterface/Volume/VolumeControl.cs +++ b/osu.Game/Overlays/VolumeOverlay.cs @@ -1,57 +1,87 @@ -// Copyright (c) 2007-2018 ppy Pty Ltd . -// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE - -using osu.Framework.Graphics; -using osu.Framework.Graphics.Containers; -using osu.Framework.Threading; -using OpenTK; +using osu.Framework.Allocation; using osu.Framework.Audio; -using osu.Framework.Allocation; using osu.Framework.Configuration; +using osu.Framework.Extensions.Color4Extensions; +using osu.Framework.Graphics; +using osu.Framework.Graphics.Colour; +using osu.Framework.Graphics.Containers; +using osu.Framework.Graphics.Shapes; +using osu.Framework.Threading; +using osu.Game.Graphics; using osu.Game.Input.Bindings; +using osu.Game.Overlays.Volume; +using OpenTK; +using OpenTK.Graphics; -namespace osu.Game.Graphics.UserInterface.Volume +namespace osu.Game.Overlays { - public class VolumeControl : OverlayContainer + public class VolumeOverlay : OverlayContainer { - private readonly VolumeMeter volumeMeterMaster; - private readonly IconButton muteIcon; + private const float offset = 10; + + private VolumeMeter volumeMeterMaster; + private VolumeMeter volumeMeterEffect; + private VolumeMeter volumeMeterMusic; + private MuteButton muteButton; protected override bool BlockPassThroughMouse => false; - public VolumeControl() - { - AutoSizeAxes = Axes.Both; - Anchor = Anchor.BottomRight; - Origin = Anchor.BottomRight; + private readonly BindableDouble muteAdjustment = new BindableDouble(); - Children = new Drawable[] + [BackgroundDependencyLoader] + private void load(AudioManager audio, OsuColour colours) + { + RelativeSizeAxes = Axes.Both; + + AddRange(new Drawable[] { + new Box + { + RelativeSizeAxes = Axes.Y, + Width = 300, + Colour = new ColourInfo + { + TopLeft = Color4.Black.Opacity(0.5f), + BottomLeft = Color4.Black.Opacity(0.5f), + TopRight = Color4.Black.Opacity(0), + BottomRight = Color4.Black.Opacity(0), + } + }, new FillFlowContainer { + Direction = FillDirection.Vertical, AutoSizeAxes = Axes.Both, - Anchor = Anchor.BottomRight, - Origin = Anchor.BottomRight, - Margin = new MarginPadding { Left = 10, Right = 10, Top = 30, Bottom = 30 }, - Spacing = new Vector2(15, 0), + Anchor = Anchor.CentreLeft, + Origin = Anchor.CentreLeft, + Spacing = new Vector2(0, offset), + Margin = new MarginPadding { Left = offset }, Children = new Drawable[] { - new Container + volumeMeterEffect = new VolumeMeter("EFFECTS", 125, colours.Blue) { - Size = new Vector2(IconButton.BUTTON_SIZE), - Child = muteIcon = new IconButton - { - Anchor = Anchor.Centre, - Origin = Anchor.Centre, - Icon = FontAwesome.fa_volume_up, - Action = () => Adjust(GlobalAction.ToggleMute), - } + Margin = new MarginPadding { Top = 100 + MuteButton.HEIGHT } //to counter the mute button and re-center the volume meters }, - volumeMeterMaster = new VolumeMeter("Master"), - volumeMeterEffect = new VolumeMeter("Effects"), - volumeMeterMusic = new VolumeMeter("Music") + volumeMeterMaster = new VolumeMeter("MASTER", 150, colours.Pink), + volumeMeterMusic = new VolumeMeter("MUSIC", 125, colours.Blue), + muteButton = new MuteButton + { + Margin = new MarginPadding { Top = 100 } + } } - } + }, + }); + + + volumeMeterMaster.Bindable.BindTo(audio.Volume); + volumeMeterEffect.Bindable.BindTo(audio.VolumeSample); + volumeMeterMusic.Bindable.BindTo(audio.VolumeTrack); + + muteButton.Current.ValueChanged += mute => + { + if (mute) + audio.AddAdjustment(AdjustableProperty.Volume, muteAdjustment); + else + audio.RemoveAdjustment(AdjustableProperty.Volume, muteAdjustment); }; } @@ -62,7 +92,13 @@ namespace osu.Game.Graphics.UserInterface.Volume volumeMeterMaster.Bindable.ValueChanged += _ => settingChanged(); volumeMeterEffect.Bindable.ValueChanged += _ => settingChanged(); volumeMeterMusic.Bindable.ValueChanged += _ => settingChanged(); - muted.ValueChanged += _ => settingChanged(); + muteButton.Current.ValueChanged += _ => settingChanged(); + } + + private void settingChanged() + { + Show(); + schedulePopOut(); } public bool Adjust(GlobalAction action) @@ -83,50 +119,15 @@ namespace osu.Game.Graphics.UserInterface.Volume return true; case GlobalAction.ToggleMute: Show(); - muted.Toggle(); + muteButton.Current.Value = !muteButton.Current; return true; } return false; } - private void settingChanged() - { - Show(); - schedulePopOut(); - } - - private readonly BindableDouble muteAdjustment = new BindableDouble(); - - private readonly BindableBool muted = new BindableBool(); - - [BackgroundDependencyLoader] - private void load(AudioManager audio) - { - volumeMeterMaster.Bindable.BindTo(audio.Volume); - volumeMeterEffect.Bindable.BindTo(audio.VolumeSample); - volumeMeterMusic.Bindable.BindTo(audio.VolumeTrack); - - muted.ValueChanged += mute => - { - if (mute) - { - audio.AddAdjustment(AdjustableProperty.Volume, muteAdjustment); - muteIcon.Icon = FontAwesome.fa_volume_off; - } - else - { - audio.RemoveAdjustment(AdjustableProperty.Volume, muteAdjustment); - muteIcon.Icon = FontAwesome.fa_volume_up; - } - }; - } - private ScheduledDelegate popOutDelegate; - private readonly VolumeMeter volumeMeterEffect; - private readonly VolumeMeter volumeMeterMusic; - protected override void PopIn() { ClearTransforms(); diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index 847b4469e5..e99fd16aef 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -351,7 +351,9 @@ + + @@ -471,9 +473,6 @@ - - - From 30b14473181fe3eb11f2207c61949c3f99b70731 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Sun, 4 Mar 2018 03:17:11 +0900 Subject: [PATCH 269/544] Fix skin file path lookup performance Move path mapping to the resource store, so caching can happen against the component's name rather than the skin path. Fixes regression of beatmap load time when a custom skin is selected. --- osu.Game/Skinning/LegacySkin.cs | 11 +++------- osu.Game/Skinning/SkinResourceStore.cs | 29 ++++++++++++++++++++++++++ osu.Game/osu.Game.csproj | 1 + 3 files changed, 33 insertions(+), 8 deletions(-) create mode 100644 osu.Game/Skinning/SkinResourceStore.cs diff --git a/osu.Game/Skinning/LegacySkin.cs b/osu.Game/Skinning/LegacySkin.cs index 5f34ddc2b5..97e0bdb942 100644 --- a/osu.Game/Skinning/LegacySkin.cs +++ b/osu.Game/Skinning/LegacySkin.cs @@ -1,9 +1,6 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE -using System; -using System.IO; -using System.Linq; using osu.Framework.Audio; using osu.Framework.Audio.Sample; using osu.Framework.Graphics; @@ -22,16 +19,14 @@ namespace osu.Game.Skinning public LegacySkin(SkinInfo skin, IResourceStore storage, AudioManager audioManager) : base(skin) { + storage = new SkinResourceStore(skin, storage); samples = audioManager.GetSampleManager(storage); textures = new TextureStore(new RawTextureLoaderStore(storage)); } - private string getPathForFile(string filename) => - SkinInfo.Files.FirstOrDefault(f => string.Equals(Path.GetFileNameWithoutExtension(f.Filename), filename, StringComparison.InvariantCultureIgnoreCase))?.FileInfo.StoragePath; - public override Drawable GetDrawableComponent(string componentName) { - var texture = textures.Get(getPathForFile(componentName.Split('/').Last())); + var texture = textures.Get(componentName); if (texture == null) return null; return new Sprite @@ -42,6 +37,6 @@ namespace osu.Game.Skinning }; } - public override SampleChannel GetSample(string sampleName) => samples.Get(getPathForFile(sampleName.Split('/').Last())); + public override SampleChannel GetSample(string sampleName) => samples.Get(sampleName); } } diff --git a/osu.Game/Skinning/SkinResourceStore.cs b/osu.Game/Skinning/SkinResourceStore.cs new file mode 100644 index 0000000000..58da8ad19a --- /dev/null +++ b/osu.Game/Skinning/SkinResourceStore.cs @@ -0,0 +1,29 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using System; +using System.IO; +using System.Linq; +using osu.Framework.IO.Stores; + +namespace osu.Game.Skinning +{ + public class SkinResourceStore : IResourceStore + { + private readonly SkinInfo skin; + private readonly IResourceStore underlyingStore; + + private string getPathForFile(string filename) => + skin.Files.FirstOrDefault(f => string.Equals(Path.GetFileNameWithoutExtension(f.Filename), filename.Split('/').Last(), StringComparison.InvariantCultureIgnoreCase))?.FileInfo.StoragePath; + + public SkinResourceStore(SkinInfo skin, IResourceStore underlyingStore) + { + this.skin = skin; + this.underlyingStore = underlyingStore; + } + + public Stream GetStream(string name) => underlyingStore.GetStream(getPathForFile(name)); + + byte[] IResourceStore.Get(string name) => underlyingStore.Get(getPathForFile(name)); + } +} diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index 37e304d62d..d4bd5a0013 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -870,6 +870,7 @@ + From ef63366d91028c93f1478618793abff7de97e29c Mon Sep 17 00:00:00 2001 From: jorolf Date: Sat, 3 Mar 2018 19:25:34 +0100 Subject: [PATCH 270/544] simplify VolumeMeter --- osu.Game/Overlays/Volume/VolumeMeter.cs | 30 ++++++++++--------------- osu.Game/Overlays/VolumeOverlay.cs | 3 ++- 2 files changed, 14 insertions(+), 19 deletions(-) diff --git a/osu.Game/Overlays/Volume/VolumeMeter.cs b/osu.Game/Overlays/Volume/VolumeMeter.cs index 92b5c3f0bd..525b4e315a 100644 --- a/osu.Game/Overlays/Volume/VolumeMeter.cs +++ b/osu.Game/Overlays/Volume/VolumeMeter.cs @@ -1,7 +1,9 @@ using System; using System.Globalization; +using JetBrains.Annotations; using osu.Framework.Allocation; using osu.Framework.Configuration; +using osu.Framework.Extensions.Color4Extensions; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Effects; @@ -65,7 +67,7 @@ namespace osu.Game.Overlays.Volume }); - OsuSpriteText text, maxText; + OsuSpriteText text; CircularProgress bgProgress; BufferedContainer maxGlow; @@ -104,26 +106,17 @@ namespace osu.Game.Overlays.Volume Colour = meterColour, Strength = 2 }), - maxGlow = new OsuSpriteText + maxGlow = (text = new OsuSpriteText { Anchor = Anchor.Centre, Origin = Anchor.Centre, Font = "Venera", - Text = "MAX", TextSize = 0.16f * circleSize - }.WithEffect(new GlowEffect + }).WithEffect(new GlowEffect { - Colour = meterColour, + Colour = Color4.Transparent, PadExtent = true, - Strength = 2, - }), - text = new OsuSpriteText - { - Anchor = Anchor.Centre, - Origin = Anchor.Centre, - Font = "Venera", - TextSize = 0.16f * circleSize - } + }) } }); @@ -132,14 +125,14 @@ namespace osu.Game.Overlays.Volume { if (Precision.DefinitelyBigger(newVolume, 0.74)) { - text.Alpha = 0; - maxGlow.Alpha = 1; //show "MAX" + text.Text = "MAX"; + maxGlow.EffectColour = meterColour.Opacity(2f); } else { + if (text.Text == "MAX") + maxGlow.EffectColour = Color4.Transparent; text.Text = Math.Round(newVolume / 0.0075).ToString(CultureInfo.CurrentCulture); - text.Alpha = 1; - maxGlow.Alpha = 0; } }; @@ -149,6 +142,7 @@ namespace osu.Game.Overlays.Volume /// /// This is needed because doesn't support /// + [UsedImplicitly] private double circleBindable { get => volumeCircle.Current; diff --git a/osu.Game/Overlays/VolumeOverlay.cs b/osu.Game/Overlays/VolumeOverlay.cs index aa94667901..a8be219fc4 100644 --- a/osu.Game/Overlays/VolumeOverlay.cs +++ b/osu.Game/Overlays/VolumeOverlay.cs @@ -31,7 +31,8 @@ namespace osu.Game.Overlays [BackgroundDependencyLoader] private void load(AudioManager audio, OsuColour colours) { - RelativeSizeAxes = Axes.Both; + AutoSizeAxes = Axes.X; + RelativeSizeAxes = Axes.Y; AddRange(new Drawable[] { From 8e0a524c4d6368469fe11072c0465409cf766b6b Mon Sep 17 00:00:00 2001 From: jorolf Date: Sat, 3 Mar 2018 19:31:29 +0100 Subject: [PATCH 271/544] change colours --- osu.Game/Overlays/VolumeOverlay.cs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/osu.Game/Overlays/VolumeOverlay.cs b/osu.Game/Overlays/VolumeOverlay.cs index a8be219fc4..cc57b468fb 100644 --- a/osu.Game/Overlays/VolumeOverlay.cs +++ b/osu.Game/Overlays/VolumeOverlay.cs @@ -42,8 +42,8 @@ namespace osu.Game.Overlays Width = 300, Colour = new ColourInfo { - TopLeft = Color4.Black.Opacity(0.5f), - BottomLeft = Color4.Black.Opacity(0.5f), + TopLeft = Color4.Black.Opacity(0.75f), + BottomLeft = Color4.Black.Opacity(0.75f), TopRight = Color4.Black.Opacity(0), BottomRight = Color4.Black.Opacity(0), } @@ -58,12 +58,12 @@ namespace osu.Game.Overlays Margin = new MarginPadding { Left = offset }, Children = new Drawable[] { - volumeMeterEffect = new VolumeMeter("EFFECTS", 125, colours.Blue) + volumeMeterEffect = new VolumeMeter("EFFECTS", 125, colours.BlueDarker) { Margin = new MarginPadding { Top = 100 + MuteButton.HEIGHT } //to counter the mute button and re-center the volume meters }, - volumeMeterMaster = new VolumeMeter("MASTER", 150, colours.Pink), - volumeMeterMusic = new VolumeMeter("MUSIC", 125, colours.Blue), + volumeMeterMaster = new VolumeMeter("MASTER", 150, colours.PinkDarker), + volumeMeterMusic = new VolumeMeter("MUSIC", 125, colours.BlueDarker), muteButton = new MuteButton { Margin = new MarginPadding { Top = 100 } From 9293ec635a44b4ca679fcea02048b5315f9ee8f5 Mon Sep 17 00:00:00 2001 From: jorolf Date: Sat, 3 Mar 2018 19:49:38 +0100 Subject: [PATCH 272/544] add license headers and remove blank line --- osu.Game.Tests/Visual/TestCaseVolumePieces.cs | 5 ++++- osu.Game/Overlays/Volume/MuteButton.cs | 5 ++++- osu.Game/Overlays/Volume/VolumeMeter.cs | 6 ++++-- osu.Game/Overlays/VolumeOverlay.cs | 5 ++++- 4 files changed, 16 insertions(+), 5 deletions(-) diff --git a/osu.Game.Tests/Visual/TestCaseVolumePieces.cs b/osu.Game.Tests/Visual/TestCaseVolumePieces.cs index 5a43574a9d..1894470df9 100644 --- a/osu.Game.Tests/Visual/TestCaseVolumePieces.cs +++ b/osu.Game.Tests/Visual/TestCaseVolumePieces.cs @@ -1,4 +1,7 @@ -using System; +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using System; using System.Collections.Generic; using osu.Framework.Allocation; using osu.Framework.Audio; diff --git a/osu.Game/Overlays/Volume/MuteButton.cs b/osu.Game/Overlays/Volume/MuteButton.cs index 82e61c8f0b..f056bf62ba 100644 --- a/osu.Game/Overlays/Volume/MuteButton.cs +++ b/osu.Game/Overlays/Volume/MuteButton.cs @@ -1,4 +1,7 @@ -using osu.Framework.Allocation; +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using osu.Framework.Allocation; using osu.Framework.Configuration; using osu.Framework.Extensions.Color4Extensions; using osu.Framework.Graphics; diff --git a/osu.Game/Overlays/Volume/VolumeMeter.cs b/osu.Game/Overlays/Volume/VolumeMeter.cs index 525b4e315a..984ade9de0 100644 --- a/osu.Game/Overlays/Volume/VolumeMeter.cs +++ b/osu.Game/Overlays/Volume/VolumeMeter.cs @@ -1,4 +1,7 @@ -using System; +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using System; using System.Globalization; using JetBrains.Annotations; using osu.Framework.Allocation; @@ -66,7 +69,6 @@ namespace osu.Game.Overlays.Volume } }); - OsuSpriteText text; CircularProgress bgProgress; BufferedContainer maxGlow; diff --git a/osu.Game/Overlays/VolumeOverlay.cs b/osu.Game/Overlays/VolumeOverlay.cs index cc57b468fb..27c699e365 100644 --- a/osu.Game/Overlays/VolumeOverlay.cs +++ b/osu.Game/Overlays/VolumeOverlay.cs @@ -1,4 +1,7 @@ -using osu.Framework.Allocation; +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using osu.Framework.Allocation; using osu.Framework.Audio; using osu.Framework.Configuration; using osu.Framework.Extensions.Color4Extensions; From 1cda58fe29b16dfb624fc2895bc0cc2772032f16 Mon Sep 17 00:00:00 2001 From: jorolf Date: Sat, 3 Mar 2018 19:51:11 +0100 Subject: [PATCH 273/544] another blank line --- osu.Game/Overlays/Volume/MuteButton.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/osu.Game/Overlays/Volume/MuteButton.cs b/osu.Game/Overlays/Volume/MuteButton.cs index f056bf62ba..adfc9c610f 100644 --- a/osu.Game/Overlays/Volume/MuteButton.cs +++ b/osu.Game/Overlays/Volume/MuteButton.cs @@ -38,7 +38,6 @@ namespace osu.Game.Overlays.Volume hoveredColour = colours.YellowDark; BorderColour = unhoveredColour = colours.Gray1.Opacity(0.9f); - SpriteIcon icon; AddRange(new Drawable[] { From ba80cd5f34823a8048928ea4d5eedd2caa4573c9 Mon Sep 17 00:00:00 2001 From: jorolf Date: Sat, 3 Mar 2018 20:01:39 +0100 Subject: [PATCH 274/544] OsuColour can't be used in TestCases..? --- osu.Game.Tests/Visual/TestCaseVolumePieces.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/osu.Game.Tests/Visual/TestCaseVolumePieces.cs b/osu.Game.Tests/Visual/TestCaseVolumePieces.cs index 1894470df9..5c97c3e368 100644 --- a/osu.Game.Tests/Visual/TestCaseVolumePieces.cs +++ b/osu.Game.Tests/Visual/TestCaseVolumePieces.cs @@ -7,8 +7,8 @@ using osu.Framework.Allocation; using osu.Framework.Audio; using osu.Framework.Graphics; using osu.Framework.Testing; -using osu.Game.Graphics; using osu.Game.Overlays.Volume; +using OpenTK.Graphics; namespace osu.Game.Tests.Visual { @@ -17,10 +17,10 @@ namespace osu.Game.Tests.Visual public override IReadOnlyList RequiredTypes => new[] { typeof(VolumeMeter), typeof(MuteButton) }; [BackgroundDependencyLoader] - private void load(AudioManager audio, OsuColour colours) + private void load(AudioManager audio) { VolumeMeter meter; - Add(meter = new VolumeMeter("MASTER", 125, colours.PinkDarker)); + Add(meter = new VolumeMeter("MASTER", 125, Color4.Blue)); Add(new MuteButton { Margin = new MarginPadding { Top = 200 } From 033d06652095019b39c4c84b85b2183255e07129 Mon Sep 17 00:00:00 2001 From: jorolf Date: Sat, 3 Mar 2018 20:03:24 +0100 Subject: [PATCH 275/544] blank line --- osu.Game.Tests/Visual/TestCaseVolumePieces.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/osu.Game.Tests/Visual/TestCaseVolumePieces.cs b/osu.Game.Tests/Visual/TestCaseVolumePieces.cs index 5c97c3e368..db868c00d7 100644 --- a/osu.Game.Tests/Visual/TestCaseVolumePieces.cs +++ b/osu.Game.Tests/Visual/TestCaseVolumePieces.cs @@ -27,7 +27,6 @@ namespace osu.Game.Tests.Visual }); meter.Bindable.BindTo(audio.Volume); - } } } From bafcab1349266a40e8c4c36a2aaddebc05bb0e36 Mon Sep 17 00:00:00 2001 From: jorolf Date: Sat, 3 Mar 2018 20:20:07 +0100 Subject: [PATCH 276/544] redo the test case --- osu.Game.Tests/Visual/TestCaseVolumePieces.cs | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/osu.Game.Tests/Visual/TestCaseVolumePieces.cs b/osu.Game.Tests/Visual/TestCaseVolumePieces.cs index db868c00d7..7bfdca82c3 100644 --- a/osu.Game.Tests/Visual/TestCaseVolumePieces.cs +++ b/osu.Game.Tests/Visual/TestCaseVolumePieces.cs @@ -3,8 +3,6 @@ using System; using System.Collections.Generic; -using osu.Framework.Allocation; -using osu.Framework.Audio; using osu.Framework.Graphics; using osu.Framework.Testing; using osu.Game.Overlays.Volume; @@ -16,17 +14,18 @@ namespace osu.Game.Tests.Visual { public override IReadOnlyList RequiredTypes => new[] { typeof(VolumeMeter), typeof(MuteButton) }; - [BackgroundDependencyLoader] - private void load(AudioManager audio) + protected override void LoadComplete() { VolumeMeter meter; + MuteButton mute; Add(meter = new VolumeMeter("MASTER", 125, Color4.Blue)); - Add(new MuteButton + Add(mute = new MuteButton { Margin = new MarginPadding { Top = 200 } }); - meter.Bindable.BindTo(audio.Volume); + AddSliderStep("master volume", 0, 10, 0, i => meter.Bindable.Value = i * 0.1); + AddToggleStep("mute", b => mute.Current.Value = b); } } } From ec013dbee860fdd170889f81103adfdbd0c00241 Mon Sep 17 00:00:00 2001 From: jorolf Date: Sat, 3 Mar 2018 21:55:19 +0100 Subject: [PATCH 277/544] remove blank line and try to get test case working --- osu.Game.Tests/Visual/TestCaseVolumePieces.cs | 6 +++--- osu.Game/Overlays/VolumeOverlay.cs | 1 - 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/osu.Game.Tests/Visual/TestCaseVolumePieces.cs b/osu.Game.Tests/Visual/TestCaseVolumePieces.cs index 7bfdca82c3..5bacdf1f58 100644 --- a/osu.Game.Tests/Visual/TestCaseVolumePieces.cs +++ b/osu.Game.Tests/Visual/TestCaseVolumePieces.cs @@ -18,11 +18,11 @@ namespace osu.Game.Tests.Visual { VolumeMeter meter; MuteButton mute; - Add(meter = new VolumeMeter("MASTER", 125, Color4.Blue)); - Add(mute = new MuteButton + LoadComponentAsync(meter = new VolumeMeter("MASTER", 125, Color4.Blue), Add); + LoadComponentAsync(mute = new MuteButton { Margin = new MarginPadding { Top = 200 } - }); + }, Add); AddSliderStep("master volume", 0, 10, 0, i => meter.Bindable.Value = i * 0.1); AddToggleStep("mute", b => mute.Current.Value = b); diff --git a/osu.Game/Overlays/VolumeOverlay.cs b/osu.Game/Overlays/VolumeOverlay.cs index 27c699e365..f764a83c7a 100644 --- a/osu.Game/Overlays/VolumeOverlay.cs +++ b/osu.Game/Overlays/VolumeOverlay.cs @@ -75,7 +75,6 @@ namespace osu.Game.Overlays }, }); - volumeMeterMaster.Bindable.BindTo(audio.Volume); volumeMeterEffect.Bindable.BindTo(audio.VolumeSample); volumeMeterMusic.Bindable.BindTo(audio.VolumeTrack); From bc0bc8d459dc3f38098527fef9794b5326424036 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Sun, 4 Mar 2018 21:57:24 +0900 Subject: [PATCH 278/544] Add legacy timing offsets These have been in release builds since January, but implemented in a hacky way. This brings them with a sane implementation. --- .../Beatmaps/Formats/LegacyBeatmapDecoder.cs | 26 ++++++++++++++++--- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/osu.Game/Beatmaps/Formats/LegacyBeatmapDecoder.cs b/osu.Game/Beatmaps/Formats/LegacyBeatmapDecoder.cs index 3e7b36f324..7273fe999f 100644 --- a/osu.Game/Beatmaps/Formats/LegacyBeatmapDecoder.cs +++ b/osu.Game/Beatmaps/Formats/LegacyBeatmapDecoder.cs @@ -8,6 +8,7 @@ using OpenTK.Graphics; using osu.Game.Beatmaps.Timing; using osu.Game.Rulesets.Objects.Legacy; using osu.Game.Beatmaps.ControlPoints; +using osu.Framework; namespace osu.Game.Beatmaps.Formats { @@ -21,6 +22,8 @@ namespace osu.Game.Beatmaps.Formats private LegacySampleBank defaultSampleBank; private int defaultSampleVolume = 100; + private readonly int timeOffset; + public LegacyBeatmapDecoder() { } @@ -28,6 +31,14 @@ namespace osu.Game.Beatmaps.Formats public LegacyBeatmapDecoder(string header) { BeatmapVersion = int.Parse(header.Substring(17)); + + // BeatmapVersion 4 and lower had an incorrect offset (stable has this set as 24ms off) + timeOffset += BeatmapVersion < 5 ? 24 : 0; + + // lazer in general doesn't match stable. this is the result of user testing, albeit limited. + // only seems to be required on windows. + if (RuntimeInfo.OS == RuntimeInfo.Platform.Windows) + timeOffset += -22; } protected override void ParseBeatmap(StreamReader stream, Beatmap beatmap) @@ -102,7 +113,7 @@ namespace osu.Game.Beatmaps.Formats beatmap.BeatmapInfo.AudioLeadIn = int.Parse(pair.Value); break; case @"PreviewTime": - metadata.PreviewTime = int.Parse(pair.Value); + metadata.PreviewTime = getOffsetTime(int.Parse(pair.Value)); break; case @"Countdown": beatmap.BeatmapInfo.Countdown = int.Parse(pair.Value) == 1; @@ -257,8 +268,8 @@ namespace osu.Game.Beatmaps.Formats case EventType.Break: var breakEvent = new BreakPeriod { - StartTime = double.Parse(split[1], NumberFormatInfo.InvariantInfo), - EndTime = double.Parse(split[2], NumberFormatInfo.InvariantInfo) + StartTime = getOffsetTime(double.Parse(split[1], NumberFormatInfo.InvariantInfo)), + EndTime = getOffsetTime(double.Parse(split[2], NumberFormatInfo.InvariantInfo)) }; if (!breakEvent.HasEffect) @@ -273,7 +284,7 @@ namespace osu.Game.Beatmaps.Formats { string[] split = line.Split(','); - double time = double.Parse(split[0].Trim(), NumberFormatInfo.InvariantInfo); + double time = getOffsetTime(double.Parse(split[0].Trim(), NumberFormatInfo.InvariantInfo)); double beatLength = double.Parse(split[1].Trim(), NumberFormatInfo.InvariantInfo); double speedMultiplier = beatLength < 0 ? 100.0 / -beatLength : 1; @@ -396,7 +407,14 @@ namespace osu.Game.Beatmaps.Formats var obj = parser.Parse(line); if (obj != null) + { + obj.StartTime = getOffsetTime(obj.StartTime); beatmap.HitObjects.Add(obj); + } } + + private int getOffsetTime(int time) => time + timeOffset; + + private double getOffsetTime(double time) => time + timeOffset; } } From 0a571278c975c3f496b928afed9f576d88c52769 Mon Sep 17 00:00:00 2001 From: jorolf Date: Sun, 4 Mar 2018 14:03:53 +0100 Subject: [PATCH 279/544] change TestCase to OsuTestCase --- osu.Game.Tests/Visual/TestCaseVolumePieces.cs | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/osu.Game.Tests/Visual/TestCaseVolumePieces.cs b/osu.Game.Tests/Visual/TestCaseVolumePieces.cs index 5bacdf1f58..cfbf7fdb4d 100644 --- a/osu.Game.Tests/Visual/TestCaseVolumePieces.cs +++ b/osu.Game.Tests/Visual/TestCaseVolumePieces.cs @@ -4,13 +4,12 @@ using System; using System.Collections.Generic; using osu.Framework.Graphics; -using osu.Framework.Testing; using osu.Game.Overlays.Volume; using OpenTK.Graphics; namespace osu.Game.Tests.Visual { - public class TestCaseVolumePieces : TestCase + public class TestCaseVolumePieces : OsuTestCase { public override IReadOnlyList RequiredTypes => new[] { typeof(VolumeMeter), typeof(MuteButton) }; @@ -18,11 +17,11 @@ namespace osu.Game.Tests.Visual { VolumeMeter meter; MuteButton mute; - LoadComponentAsync(meter = new VolumeMeter("MASTER", 125, Color4.Blue), Add); - LoadComponentAsync(mute = new MuteButton + Add(meter = new VolumeMeter("MASTER", 125, Color4.Blue)); + Add(mute = new MuteButton { Margin = new MarginPadding { Top = 200 } - }, Add); + }); AddSliderStep("master volume", 0, 10, 0, i => meter.Bindable.Value = i * 0.1); AddToggleStep("mute", b => mute.Current.Value = b); From e46f363fdc3ca492d8a0d1f4e68053276a49b491 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Sun, 4 Mar 2018 22:13:43 +0900 Subject: [PATCH 280/544] Fix failing unit test --- .../Formats/LegacyBeatmapDecoderTest.cs | 8 +++---- .../Beatmaps/Formats/OsuJsonDecoderTest.cs | 2 +- .../Beatmaps/IO/OszArchiveReaderTest.cs | 2 +- .../Beatmaps/Formats/LegacyBeatmapDecoder.cs | 24 ++++++++++++------- .../Tests/Beatmaps/BeatmapConversionTest.cs | 2 +- 5 files changed, 22 insertions(+), 16 deletions(-) diff --git a/osu.Game.Tests/Beatmaps/Formats/LegacyBeatmapDecoderTest.cs b/osu.Game.Tests/Beatmaps/Formats/LegacyBeatmapDecoderTest.cs index 21bbc4993c..2e774e0924 100644 --- a/osu.Game.Tests/Beatmaps/Formats/LegacyBeatmapDecoderTest.cs +++ b/osu.Game.Tests/Beatmaps/Formats/LegacyBeatmapDecoderTest.cs @@ -20,7 +20,7 @@ namespace osu.Game.Tests.Beatmaps.Formats [Test] public void TestDecodeBeatmapGeneral() { - var decoder = new LegacyBeatmapDecoder(); + var decoder = new LegacyBeatmapDecoder { ApplyOffsets = false }; using (var resStream = Resource.OpenResource("Soleily - Renatus (Gamu) [Insane].osu")) using (var stream = new StreamReader(resStream)) { @@ -110,7 +110,7 @@ namespace osu.Game.Tests.Beatmaps.Formats [Test] public void TestDecodeBeatmapEvents() { - var decoder = new LegacyBeatmapDecoder(); + var decoder = new LegacyBeatmapDecoder { ApplyOffsets = false }; using (var resStream = Resource.OpenResource("Soleily - Renatus (Gamu) [Insane].osu")) using (var stream = new StreamReader(resStream)) { @@ -128,7 +128,7 @@ namespace osu.Game.Tests.Beatmaps.Formats [Test] public void TestDecodeBeatmapTimingPoints() { - var decoder = new LegacyBeatmapDecoder(); + var decoder = new LegacyBeatmapDecoder { ApplyOffsets = false }; using (var resStream = Resource.OpenResource("Soleily - Renatus (Gamu) [Insane].osu")) using (var stream = new StreamReader(resStream)) { @@ -187,7 +187,7 @@ namespace osu.Game.Tests.Beatmaps.Formats [Test] public void TestDecodeBeatmapHitObjects() { - var decoder = new LegacyBeatmapDecoder(); + var decoder = new LegacyBeatmapDecoder { ApplyOffsets = false }; using (var resStream = Resource.OpenResource("Soleily - Renatus (Gamu) [Insane].osu")) using (var stream = new StreamReader(resStream)) { diff --git a/osu.Game.Tests/Beatmaps/Formats/OsuJsonDecoderTest.cs b/osu.Game.Tests/Beatmaps/Formats/OsuJsonDecoderTest.cs index 186bd44640..8168de091e 100644 --- a/osu.Game.Tests/Beatmaps/Formats/OsuJsonDecoderTest.cs +++ b/osu.Game.Tests/Beatmaps/Formats/OsuJsonDecoderTest.cs @@ -159,7 +159,7 @@ namespace osu.Game.Tests.Beatmaps.Formats using (var sr = new StreamReader(stream)) { - var legacyDecoded = new LegacyBeatmapDecoder().DecodeBeatmap(sr); + var legacyDecoded = new LegacyBeatmapDecoder { ApplyOffsets = false }.DecodeBeatmap(sr); using (var ms = new MemoryStream()) using (var sw = new StreamWriter(ms)) using (var sr2 = new StreamReader(ms)) diff --git a/osu.Game.Tests/Beatmaps/IO/OszArchiveReaderTest.cs b/osu.Game.Tests/Beatmaps/IO/OszArchiveReaderTest.cs index 7a1c6d9b89..1f7246a119 100644 --- a/osu.Game.Tests/Beatmaps/IO/OszArchiveReaderTest.cs +++ b/osu.Game.Tests/Beatmaps/IO/OszArchiveReaderTest.cs @@ -58,7 +58,7 @@ namespace osu.Game.Tests.Beatmaps.IO Assert.AreEqual("03. Renatus - Soleily 192kbps.mp3", meta.AudioFile); Assert.AreEqual("Deif", meta.AuthorString); Assert.AreEqual("machinetop_background.jpg", meta.BackgroundFile); - Assert.AreEqual(164471, meta.PreviewTime); + Assert.AreEqual(164471 + LegacyBeatmapDecoder.UniversalOffset, meta.PreviewTime); Assert.AreEqual(string.Empty, meta.Source); Assert.AreEqual("MBC7 Unisphere 地球ヤバイEP Chikyu Yabai", meta.Tags); Assert.AreEqual("Renatus", meta.Title); diff --git a/osu.Game/Beatmaps/Formats/LegacyBeatmapDecoder.cs b/osu.Game/Beatmaps/Formats/LegacyBeatmapDecoder.cs index 7273fe999f..1d54bc4b0c 100644 --- a/osu.Game/Beatmaps/Formats/LegacyBeatmapDecoder.cs +++ b/osu.Game/Beatmaps/Formats/LegacyBeatmapDecoder.cs @@ -22,7 +22,18 @@ namespace osu.Game.Beatmaps.Formats private LegacySampleBank defaultSampleBank; private int defaultSampleVolume = 100; - private readonly int timeOffset; + /// + /// lazer's audio timings in general doesn't match stable. this is the result of user testing, albeit limited. + /// This only seems to be required on windows. We need to eventually figure out why, with a bit of luck. + /// + public static int UniversalOffset => RuntimeInfo.OS == RuntimeInfo.Platform.Windows ? -22 : 0; + + /// + /// Whether or not beatmap or runtime offsets should be applied. Defaults on; only disable for testing purposes. + /// + public bool ApplyOffsets = true; + + private readonly int offset = UniversalOffset; public LegacyBeatmapDecoder() { @@ -33,12 +44,7 @@ namespace osu.Game.Beatmaps.Formats BeatmapVersion = int.Parse(header.Substring(17)); // BeatmapVersion 4 and lower had an incorrect offset (stable has this set as 24ms off) - timeOffset += BeatmapVersion < 5 ? 24 : 0; - - // lazer in general doesn't match stable. this is the result of user testing, albeit limited. - // only seems to be required on windows. - if (RuntimeInfo.OS == RuntimeInfo.Platform.Windows) - timeOffset += -22; + offset += BeatmapVersion < 5 ? 24 : 0; } protected override void ParseBeatmap(StreamReader stream, Beatmap beatmap) @@ -413,8 +419,8 @@ namespace osu.Game.Beatmaps.Formats } } - private int getOffsetTime(int time) => time + timeOffset; + private int getOffsetTime(int time) => time + (ApplyOffsets ? offset : 0); - private double getOffsetTime(double time) => time + timeOffset; + private double getOffsetTime(double time) => time + (ApplyOffsets ? offset : 0); } } diff --git a/osu.Game/Tests/Beatmaps/BeatmapConversionTest.cs b/osu.Game/Tests/Beatmaps/BeatmapConversionTest.cs index 596dbe84ba..a9b13e87bf 100644 --- a/osu.Game/Tests/Beatmaps/BeatmapConversionTest.cs +++ b/osu.Game/Tests/Beatmaps/BeatmapConversionTest.cs @@ -109,7 +109,7 @@ namespace osu.Game.Tests.Beatmaps private Beatmap getBeatmap(string name) { - var decoder = new LegacyBeatmapDecoder(); + var decoder = new LegacyBeatmapDecoder { ApplyOffsets = false }; using (var resStream = openResource($"{resource_namespace}.{name}.osu")) using (var stream = new StreamReader(resStream)) return decoder.DecodeBeatmap(stream); From 49b8670dfc917f261a770308ec268d2c8203a8c4 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 5 Mar 2018 14:53:57 +0900 Subject: [PATCH 281/544] Fix beatmap conversion tests not properly constructing decoder --- osu.Game/Tests/Beatmaps/BeatmapConversionTest.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/osu.Game/Tests/Beatmaps/BeatmapConversionTest.cs b/osu.Game/Tests/Beatmaps/BeatmapConversionTest.cs index 596dbe84ba..7423005850 100644 --- a/osu.Game/Tests/Beatmaps/BeatmapConversionTest.cs +++ b/osu.Game/Tests/Beatmaps/BeatmapConversionTest.cs @@ -109,10 +109,9 @@ namespace osu.Game.Tests.Beatmaps private Beatmap getBeatmap(string name) { - var decoder = new LegacyBeatmapDecoder(); using (var resStream = openResource($"{resource_namespace}.{name}.osu")) using (var stream = new StreamReader(resStream)) - return decoder.DecodeBeatmap(stream); + return Decoder.GetDecoder(stream).DecodeBeatmap(stream); } private Stream openResource(string name) From 63155f169e500c5f92c9f46f167c0236d800da5f Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 5 Mar 2018 15:11:50 +0900 Subject: [PATCH 282/544] Fix incorrect taiko slider conversions due to beatlength adjustments Fixes ppy/osu#2152 . --- .../Beatmaps/TaikoBeatmapConverter.cs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/osu.Game.Rulesets.Taiko/Beatmaps/TaikoBeatmapConverter.cs b/osu.Game.Rulesets.Taiko/Beatmaps/TaikoBeatmapConverter.cs index e5fe288f20..9d6b5b5ce4 100644 --- a/osu.Game.Rulesets.Taiko/Beatmaps/TaikoBeatmapConverter.cs +++ b/osu.Game.Rulesets.Taiko/Beatmaps/TaikoBeatmapConverter.cs @@ -101,16 +101,16 @@ namespace osu.Game.Rulesets.Taiko.Beatmaps // The duration of the taiko hit object double taikoDuration = distance / taikoVelocity; - // For some reason, old osu! always uses speedAdjustment to determine the taiko velocity, but - // only uses it to determine osu! velocity if beatmap version < 8. Let's account for that here. - if (beatmap.BeatmapInfo.BeatmapVersion >= 8) - speedAdjustedBeatLength *= speedAdjustment; - // The velocity of the osu! hit object - calculated as the velocity of a slider double osuVelocity = osu_base_scoring_distance * beatmap.BeatmapInfo.BaseDifficulty.SliderMultiplier * legacy_velocity_multiplier / speedAdjustedBeatLength; // The duration of the osu! hit object double osuDuration = distance / osuVelocity; + // osu-stable always uses the speed-adjusted beatlength to determine the velocities, but + // only uses it for tick rate if beatmap version < 8 + if (beatmap.BeatmapInfo.BeatmapVersion >= 8) + speedAdjustedBeatLength *= speedAdjustment; + // If the drum roll is to be split into hit circles, assume the ticks are 1/8 spaced within the duration of one beat double tickSpacing = Math.Min(speedAdjustedBeatLength / beatmap.BeatmapInfo.BaseDifficulty.SliderTickRate, taikoDuration / spans); From d44dc1a4f928c3a64dc685789e9d21c4a5d680ec Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 5 Mar 2018 16:01:05 +0900 Subject: [PATCH 283/544] Fix SliderMultiplier/SliderTickRate parsing inaccuracy --- osu.Game/Beatmaps/BeatmapDifficulty.cs | 4 ++-- osu.Game/Beatmaps/Formats/LegacyBeatmapDecoder.cs | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/osu.Game/Beatmaps/BeatmapDifficulty.cs b/osu.Game/Beatmaps/BeatmapDifficulty.cs index 16e6692887..38b84b4b03 100644 --- a/osu.Game/Beatmaps/BeatmapDifficulty.cs +++ b/osu.Game/Beatmaps/BeatmapDifficulty.cs @@ -29,8 +29,8 @@ namespace osu.Game.Beatmaps set => approachRate = value; } - public float SliderMultiplier { get; set; } = 1; - public float SliderTickRate { get; set; } = 1; + public double SliderMultiplier { get; set; } = 1; + public double SliderTickRate { get; set; } = 1; /// /// Maps a difficulty value [0, 10] to a two-piece linear range of values. diff --git a/osu.Game/Beatmaps/Formats/LegacyBeatmapDecoder.cs b/osu.Game/Beatmaps/Formats/LegacyBeatmapDecoder.cs index 3e7b36f324..6ca74ebedb 100644 --- a/osu.Game/Beatmaps/Formats/LegacyBeatmapDecoder.cs +++ b/osu.Game/Beatmaps/Formats/LegacyBeatmapDecoder.cs @@ -232,10 +232,10 @@ namespace osu.Game.Beatmaps.Formats difficulty.ApproachRate = float.Parse(pair.Value, NumberFormatInfo.InvariantInfo); break; case @"SliderMultiplier": - difficulty.SliderMultiplier = float.Parse(pair.Value, NumberFormatInfo.InvariantInfo); + difficulty.SliderMultiplier = double.Parse(pair.Value, NumberFormatInfo.InvariantInfo); break; case @"SliderTickRate": - difficulty.SliderTickRate = float.Parse(pair.Value, NumberFormatInfo.InvariantInfo); + difficulty.SliderTickRate = double.Parse(pair.Value, NumberFormatInfo.InvariantInfo); break; } } From 88c33e31e853f33a90dc80061bd2765aa676c130 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 5 Mar 2018 16:01:45 +0900 Subject: [PATCH 284/544] Add slider conversion testcases --- ...nerating-drumroll-expected-conversion.json | 87 +++++++++++++++++++ .../Beatmaps/slider-generating-drumroll.osu | 25 ++++++ .../Tests/TaikoBeatmapConversionTest.cs | 3 +- .../osu.Game.Rulesets.Taiko.csproj | 2 + 4 files changed, 116 insertions(+), 1 deletion(-) create mode 100644 osu.Game.Rulesets.Taiko/Resources/Testing/Beatmaps/slider-generating-drumroll-expected-conversion.json create mode 100644 osu.Game.Rulesets.Taiko/Resources/Testing/Beatmaps/slider-generating-drumroll.osu diff --git a/osu.Game.Rulesets.Taiko/Resources/Testing/Beatmaps/slider-generating-drumroll-expected-conversion.json b/osu.Game.Rulesets.Taiko/Resources/Testing/Beatmaps/slider-generating-drumroll-expected-conversion.json new file mode 100644 index 0000000000..fc7d466c1b --- /dev/null +++ b/osu.Game.Rulesets.Taiko/Resources/Testing/Beatmaps/slider-generating-drumroll-expected-conversion.json @@ -0,0 +1,87 @@ +{ + "Mappings": [{ + "StartTime": 6590, + "Objects": [{ + "StartTime": 6590, + "EndTime": 8320, + "IsRim": false, + "IsCentre": false, + "IsDrumRoll": true, + "IsSwell": false, + "IsStrong": false + }] + }, + { + "StartTime": 8436, + "Objects": [{ + "StartTime": 8436, + "EndTime": 10166, + "IsRim": false, + "IsCentre": false, + "IsDrumRoll": true, + "IsSwell": false, + "IsStrong": false + }] + }, + { + "StartTime": 10282, + "Objects": [{ + "StartTime": 10282, + "EndTime": 12012, + "IsRim": false, + "IsCentre": false, + "IsDrumRoll": true, + "IsSwell": false, + "IsStrong": false + }] + }, + { + "StartTime": 12128, + "Objects": [{ + "StartTime": 12128, + "EndTime": 13858, + "IsRim": false, + "IsCentre": false, + "IsDrumRoll": true, + "IsSwell": false, + "IsStrong": false + }] + }, + { + "StartTime": 41666, + "Objects": [{ + "StartTime": 41666, + "EndTime": 42589, + "IsRim": false, + "IsCentre": false, + "IsDrumRoll": true, + "IsSwell": false, + "IsStrong": false + }] + }, + { + "StartTime": 62666, + "Objects": [{ + "StartTime": 62666, + "EndTime": 63127, + "IsRim": false, + "IsCentre": false, + "IsDrumRoll": true, + "IsSwell": false, + "IsStrong": false + }] + }, + { + "StartTime": 208743, + "Objects": [{ + "StartTime": 208743, + "EndTime": 209204, + "IsRim": false, + "IsCentre": false, + "IsDrumRoll": true, + "IsSwell": false, + "IsStrong": false + }] + } + ] +} \ No newline at end of file diff --git a/osu.Game.Rulesets.Taiko/Resources/Testing/Beatmaps/slider-generating-drumroll.osu b/osu.Game.Rulesets.Taiko/Resources/Testing/Beatmaps/slider-generating-drumroll.osu new file mode 100644 index 0000000000..4c493b47d4 --- /dev/null +++ b/osu.Game.Rulesets.Taiko/Resources/Testing/Beatmaps/slider-generating-drumroll.osu @@ -0,0 +1,25 @@ +osu file format v14 + +[Difficulty] +HPDrainRate:6 +CircleSize:4.2 +OverallDifficulty:9 +ApproachRate:9.8 +SliderMultiplier:1.87 +SliderTickRate:1 + +[TimingPoints] +6590,461.538461538462,4,2,2,15,1,0 +6590,-200,4,2,2,15,0,0 +49051,230.769230769231,4,2,1,15,1,0 +62666,-200,4,2,1,60,0,0 +197666,-100,4,2,1,85,0,1 + +[HitObjects] +88,104,6590,6,0,B|176:156|256:108|256:108|336:60|423:112,1,350.625,6|0,0:0|0:0,0:0:0:0: +396,213,8436,2,0,P|277:247|376:172,1,350.625,6|0,0:0|0:0,0:0:0:0: +472,220,10282,2,0,P|456:288|220:300,1,350.625,6|0,0:0|0:0,0:0:0:0: +277,200,12128,2,0,P|398:225|276:244,1,350.625,6|0,0:0|0:0,0:0:0:0: +268,229,41666,2,0,L|473:210,1,187,2|2,0:0|0:0,0:0:0:0: +133,342,62666,2,0,B|132:316|132:316|128:316|128:316|130:295|130:295|126:296|126:296|129:275|129:275|125:275|125:275|127:254|127:254|123:255|123:255|125:234|125:234|121:234|121:234|123:213|123:213|119:214|119:214|121:193|121:193|118:193|118:193|118:172,1,187,8|8,0:0|0:0,0:0:0:0: +481,338,208743,6,0,P|492:262|383:195,2,187,2|8|2,0:0|0:0|0:0,0:0:0:0: diff --git a/osu.Game.Rulesets.Taiko/Tests/TaikoBeatmapConversionTest.cs b/osu.Game.Rulesets.Taiko/Tests/TaikoBeatmapConversionTest.cs index 64f728a018..dd93c7df6a 100644 --- a/osu.Game.Rulesets.Taiko/Tests/TaikoBeatmapConversionTest.cs +++ b/osu.Game.Rulesets.Taiko/Tests/TaikoBeatmapConversionTest.cs @@ -21,7 +21,8 @@ namespace osu.Game.Rulesets.Taiko.Tests private bool isForCurrentRuleset; [NonParallelizable] - [TestCase("basic", false), Ignore("See: https://github.com/ppy/osu/issues/2152")] + [TestCase("basic", false)] + [TestCase("slider-generating-drumroll", false)] public void Test(string name, bool isForCurrentRuleset) { this.isForCurrentRuleset = isForCurrentRuleset; diff --git a/osu.Game.Rulesets.Taiko/osu.Game.Rulesets.Taiko.csproj b/osu.Game.Rulesets.Taiko/osu.Game.Rulesets.Taiko.csproj index 07d27455b8..8f0aa88e62 100644 --- a/osu.Game.Rulesets.Taiko/osu.Game.Rulesets.Taiko.csproj +++ b/osu.Game.Rulesets.Taiko/osu.Game.Rulesets.Taiko.csproj @@ -149,6 +149,8 @@ + + From a6b6c016d63ca0aa8f38f94e61ee814026460018 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 5 Mar 2018 16:14:36 +0900 Subject: [PATCH 285/544] Fix beatmap decoder tests --- osu.Game.Tests/Beatmaps/Formats/LegacyBeatmapDecoderTest.cs | 2 +- osu.Game.Tests/Beatmaps/Formats/OsuJsonDecoderTest.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/osu.Game.Tests/Beatmaps/Formats/LegacyBeatmapDecoderTest.cs b/osu.Game.Tests/Beatmaps/Formats/LegacyBeatmapDecoderTest.cs index 21bbc4993c..d1797e3a7d 100644 --- a/osu.Game.Tests/Beatmaps/Formats/LegacyBeatmapDecoderTest.cs +++ b/osu.Game.Tests/Beatmaps/Formats/LegacyBeatmapDecoderTest.cs @@ -102,7 +102,7 @@ namespace osu.Game.Tests.Beatmaps.Formats Assert.AreEqual(4, difficulty.CircleSize); Assert.AreEqual(8, difficulty.OverallDifficulty); Assert.AreEqual(9, difficulty.ApproachRate); - Assert.AreEqual(1.8f, difficulty.SliderMultiplier); + Assert.AreEqual(1.8, difficulty.SliderMultiplier); Assert.AreEqual(2, difficulty.SliderTickRate); } } diff --git a/osu.Game.Tests/Beatmaps/Formats/OsuJsonDecoderTest.cs b/osu.Game.Tests/Beatmaps/Formats/OsuJsonDecoderTest.cs index 186bd44640..fc47aff91e 100644 --- a/osu.Game.Tests/Beatmaps/Formats/OsuJsonDecoderTest.cs +++ b/osu.Game.Tests/Beatmaps/Formats/OsuJsonDecoderTest.cs @@ -85,7 +85,7 @@ namespace osu.Game.Tests.Beatmaps.Formats Assert.AreEqual(4, difficulty.CircleSize); Assert.AreEqual(8, difficulty.OverallDifficulty); Assert.AreEqual(9, difficulty.ApproachRate); - Assert.AreEqual(1.8f, difficulty.SliderMultiplier); + Assert.AreEqual(1.8, difficulty.SliderMultiplier); Assert.AreEqual(2, difficulty.SliderTickRate); } From c013f8326786bcedb9019c1cdf5cd6bef9d8b559 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 5 Mar 2018 17:01:27 +0900 Subject: [PATCH 286/544] Restore IgnoreAttribute --- osu.Game.Rulesets.Taiko/Tests/TaikoBeatmapConversionTest.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game.Rulesets.Taiko/Tests/TaikoBeatmapConversionTest.cs b/osu.Game.Rulesets.Taiko/Tests/TaikoBeatmapConversionTest.cs index dd93c7df6a..385e041ace 100644 --- a/osu.Game.Rulesets.Taiko/Tests/TaikoBeatmapConversionTest.cs +++ b/osu.Game.Rulesets.Taiko/Tests/TaikoBeatmapConversionTest.cs @@ -21,7 +21,7 @@ namespace osu.Game.Rulesets.Taiko.Tests private bool isForCurrentRuleset; [NonParallelizable] - [TestCase("basic", false)] + [TestCase("basic", false), Ignore("See: https://github.com/ppy/osu/issues/2152")] [TestCase("slider-generating-drumroll", false)] public void Test(string name, bool isForCurrentRuleset) { From 7d11e55d0610c1999072f05c837dca74cb68b910 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Mon, 5 Mar 2018 19:43:33 +0900 Subject: [PATCH 287/544] Only block mouse input when the shaded portion of the SkipButton is hovered --- osu.Game/Screens/Play/SkipButton.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/osu.Game/Screens/Play/SkipButton.cs b/osu.Game/Screens/Play/SkipButton.cs index 08bb26c72b..c77061e5d9 100644 --- a/osu.Game/Screens/Play/SkipButton.cs +++ b/osu.Game/Screens/Play/SkipButton.cs @@ -36,6 +36,8 @@ namespace osu.Game.Screens.Play public override bool ReceiveMouseInputAt(Vector2 screenSpacePos) => true; + protected override bool BlockPassThroughMouse => fadeContainer.IsHovered; + public SkipButton(double startTime) { this.startTime = startTime; From 53edfedfc8e86a9ebd3fb2723ec2cbab5fd60a40 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Mon, 5 Mar 2018 19:43:57 +0900 Subject: [PATCH 288/544] Remove unneeded HighFrequencyMousePosition from GameplayMenuOverlay --- osu.Game/Screens/Play/GameplayMenuOverlay.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game/Screens/Play/GameplayMenuOverlay.cs b/osu.Game/Screens/Play/GameplayMenuOverlay.cs index 615c124ea7..29b68abc21 100644 --- a/osu.Game/Screens/Play/GameplayMenuOverlay.cs +++ b/osu.Game/Screens/Play/GameplayMenuOverlay.cs @@ -18,7 +18,7 @@ using System.Collections.Generic; namespace osu.Game.Screens.Play { - public abstract class GameplayMenuOverlay : OverlayContainer, IRequireHighFrequencyMousePosition + public abstract class GameplayMenuOverlay : OverlayContainer { private const int transition_duration = 200; private const int button_height = 70; From 60f851df3e092f74e596753b9e6d8eb385dbf4e6 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Mon, 5 Mar 2018 19:45:49 +0900 Subject: [PATCH 289/544] Add support for DrawInfo alpha when drawing CursorTrail --- .../UI/Cursor/CursorTrail.cs | 50 ++++++++++++++----- 1 file changed, 38 insertions(+), 12 deletions(-) diff --git a/osu.Game.Rulesets.Osu/UI/Cursor/CursorTrail.cs b/osu.Game.Rulesets.Osu/UI/Cursor/CursorTrail.cs index 37ca0c021b..c56cd46131 100644 --- a/osu.Game.Rulesets.Osu/UI/Cursor/CursorTrail.cs +++ b/osu.Game.Rulesets.Osu/UI/Cursor/CursorTrail.cs @@ -3,9 +3,9 @@ using System; using System.Diagnostics; +using System.Runtime.InteropServices; using osu.Framework.Allocation; using osu.Framework.Graphics; -using osu.Framework.Graphics.Colour; using osu.Framework.Graphics.OpenGL.Buffers; using osu.Framework.Graphics.OpenGL.Vertices; using osu.Framework.Graphics.Primitives; @@ -14,6 +14,7 @@ using osu.Framework.Graphics.Textures; using osu.Framework.Input; using osu.Framework.Timing; using OpenTK; +using OpenTK.Graphics; using OpenTK.Graphics.ES30; namespace osu.Game.Rulesets.Osu.UI.Cursor @@ -115,14 +116,16 @@ namespace osu.Game.Rulesets.Osu.UI.Cursor protected override bool OnMouseMove(InputState state) { + Vector2 pos = state.Mouse.NativeState.Position; + if (lastPosition == null) { - lastPosition = state.Mouse.NativeState.Position; + lastPosition = pos; resampler.AddPosition(lastPosition.Value); return base.OnMouseMove(state); } - foreach (Vector2 pos2 in resampler.AddPosition(state.Mouse.NativeState.Position)) + foreach (Vector2 pos2 in resampler.AddPosition(pos)) { Trace.Assert(lastPosition.HasValue); @@ -162,7 +165,7 @@ namespace osu.Game.Rulesets.Osu.UI.Cursor private class TrailDrawNodeSharedData { - public VertexBuffer VertexBuffer; + public VertexBuffer VertexBuffer; } private class TrailDrawNode : DrawNode @@ -188,7 +191,7 @@ namespace osu.Game.Rulesets.Osu.UI.Cursor public override void Draw(Action vertexAction) { if (Shared.VertexBuffer == null) - Shared.VertexBuffer = new QuadVertexBuffer(max_sprites, BufferUsageHint.DynamicDraw); + Shared.VertexBuffer = new QuadVertexBuffer(max_sprites, BufferUsageHint.DynamicDraw); Shader.GetUniform("g_FadeClock").Value = Time; @@ -205,17 +208,19 @@ namespace osu.Game.Rulesets.Osu.UI.Cursor int end = start; Vector2 pos = Parts[i].Position; - ColourInfo colour = DrawInfo.Colour; - colour.TopLeft.Linear.A = Parts[i].Time + colour.TopLeft.Linear.A; - colour.TopRight.Linear.A = Parts[i].Time + colour.TopRight.Linear.A; - colour.BottomLeft.Linear.A = Parts[i].Time + colour.BottomLeft.Linear.A; - colour.BottomRight.Linear.A = Parts[i].Time + colour.BottomRight.Linear.A; + float time = Parts[i].Time; Texture.DrawQuad( new Quad(pos.X - Size.X / 2, pos.Y - Size.Y / 2, Size.X, Size.Y), - colour, + DrawInfo.Colour, null, - v => Shared.VertexBuffer.Vertices[end++] = v); + v => Shared.VertexBuffer.Vertices[end++] = new TexturedTrailVertex + { + Position = v.Position, + TexturePosition = v.TexturePosition, + Time = time + 1, + Colour = v.Colour, + }); Parts[i].WasUpdated = false; } @@ -240,5 +245,26 @@ namespace osu.Game.Rulesets.Osu.UI.Cursor Shader.Unbind(); } } + + [StructLayout(LayoutKind.Sequential)] + public struct TexturedTrailVertex : IEquatable, IVertex + { + [VertexMember(2, VertexAttribPointerType.Float)] + public Vector2 Position; + [VertexMember(4, VertexAttribPointerType.Float)] + public Color4 Colour; + [VertexMember(2, VertexAttribPointerType.Float)] + public Vector2 TexturePosition; + [VertexMember(1, VertexAttribPointerType.Float)] + public float Time; + + public bool Equals(TexturedTrailVertex other) + { + return Position.Equals(other.Position) + && TexturePosition.Equals(other.TexturePosition) + && Colour.Equals(other.Colour) + && Time.Equals(other.Time); + } + } } } From 4da30c6940a279b45ea4dd86ecf781793fb54618 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 5 Mar 2018 19:05:30 +0900 Subject: [PATCH 290/544] Fix missing conversion case --- .../Patterns/Legacy/DistanceObjectPatternGenerator.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/osu.Game.Rulesets.Mania/Beatmaps/Patterns/Legacy/DistanceObjectPatternGenerator.cs b/osu.Game.Rulesets.Mania/Beatmaps/Patterns/Legacy/DistanceObjectPatternGenerator.cs index a102781e70..29b8aaa51b 100644 --- a/osu.Game.Rulesets.Mania/Beatmaps/Patterns/Legacy/DistanceObjectPatternGenerator.cs +++ b/osu.Game.Rulesets.Mania/Beatmaps/Patterns/Legacy/DistanceObjectPatternGenerator.cs @@ -396,13 +396,15 @@ namespace osu.Game.Rulesets.Mania.Beatmaps.Patterns.Legacy // Create the hold note addToPattern(pattern, holdColumn, startTime, endTime); - int noteCount = 1; + int noteCount; if (ConversionDifficulty > 6.5) noteCount = GetRandomNoteCount(0.63, 0); else if (ConversionDifficulty > 4) noteCount = GetRandomNoteCount(TotalColumns < 6 ? 0.12 : 0.45, 0); else if (ConversionDifficulty > 2.5) noteCount = GetRandomNoteCount(TotalColumns < 6 ? 0 : 0.24, 0); + else + noteCount = 0; noteCount = Math.Min(TotalColumns - 1, noteCount); bool ignoreHead = !sampleInfoListAt(startTime).Any(s => s.Name == SampleInfo.HIT_WHISTLE || s.Name == SampleInfo.HIT_FINISH || s.Name == SampleInfo.HIT_CLAP); From 69c0e95d9d987de074b3bb95e45b53fe422c56ab Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Mon, 5 Mar 2018 20:06:08 +0900 Subject: [PATCH 291/544] Use a better fade effect for the gameplay cursor --- .../UI/Cursor/GameplayCursor.cs | 95 +++++++++++-------- 1 file changed, 54 insertions(+), 41 deletions(-) diff --git a/osu.Game.Rulesets.Osu/UI/Cursor/GameplayCursor.cs b/osu.Game.Rulesets.Osu/UI/Cursor/GameplayCursor.cs index 0aeb14514d..34940a084a 100644 --- a/osu.Game.Rulesets.Osu/UI/Cursor/GameplayCursor.cs +++ b/osu.Game.Rulesets.Osu/UI/Cursor/GameplayCursor.cs @@ -20,13 +20,66 @@ namespace osu.Game.Rulesets.Osu.UI.Cursor { protected override Drawable CreateCursor() => new OsuCursor(); + protected override Container Content => fadeContainer; + + private readonly Container fadeContainer; + public GameplayCursor() { - Add(new CursorTrail { Depth = 1 }); + InternalChild = fadeContainer = new Container + { + RelativeSizeAxes = Axes.Both, + Children = new Drawable[] + { + new CursorTrail { Depth = 1 } + } + }; } private int downCount; + public bool OnPressed(OsuAction action) + { + switch (action) + { + case OsuAction.LeftButton: + case OsuAction.RightButton: + downCount++; + ActiveCursor.ScaleTo(1).ScaleTo(1.2f, 100, Easing.OutQuad); + break; + } + + return false; + } + + public bool OnReleased(OsuAction action) + { + switch (action) + { + case OsuAction.LeftButton: + case OsuAction.RightButton: + if (--downCount == 0) + ActiveCursor.ScaleTo(1, 200, Easing.OutQuad); + break; + } + + return false; + } + + public override bool HandleMouseInput => true; // OverlayContainer will set this false when we go hidden, but we always want to receive input. + + protected override void PopIn() + { + fadeContainer.FadeTo(1, 300, Easing.OutQuint); + ActiveCursor.ScaleTo(1, 400, Easing.OutQuint); + } + + protected override void PopOut() + { + fadeContainer.FadeTo(0.05f, 450, Easing.OutQuint); + ActiveCursor.ScaleTo(0.8f, 450, Easing.OutQuint); + } + public class OsuCursor : Container { private Container cursorContainer; @@ -131,45 +184,5 @@ namespace osu.Game.Rulesets.Osu.UI.Cursor cursorContainer.Scale = new Vector2(scale); } } - - public bool OnPressed(OsuAction action) - { - switch (action) - { - case OsuAction.LeftButton: - case OsuAction.RightButton: - downCount++; - ActiveCursor.ScaleTo(1).ScaleTo(1.2f, 100, Easing.OutQuad); - break; - } - - return false; - } - - public bool OnReleased(OsuAction action) - { - switch (action) - { - case OsuAction.LeftButton: - case OsuAction.RightButton: - if (--downCount == 0) - ActiveCursor.ScaleTo(1, 200, Easing.OutQuad); - break; - } - - return false; - } - - protected override void PopIn() - { - ActiveCursor.FadeTo(1, 250, Easing.OutQuint); - ActiveCursor.ScaleTo(1, 400, Easing.OutQuint); - } - - protected override void PopOut() - { - ActiveCursor.FadeTo(0, 250, Easing.OutQuint); - ActiveCursor.ScaleTo(0.6f, 250, Easing.In); - } } } From f4965ee7d6d4c72a4f2a6ee24fb7fb6916b1990e Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Mon, 5 Mar 2018 20:06:25 +0900 Subject: [PATCH 292/544] Use high precision updating on CursorTrail Avoids bloackage --- osu.Game.Rulesets.Osu/UI/Cursor/CursorTrail.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game.Rulesets.Osu/UI/Cursor/CursorTrail.cs b/osu.Game.Rulesets.Osu/UI/Cursor/CursorTrail.cs index c56cd46131..d9a6b81f6b 100644 --- a/osu.Game.Rulesets.Osu/UI/Cursor/CursorTrail.cs +++ b/osu.Game.Rulesets.Osu/UI/Cursor/CursorTrail.cs @@ -19,7 +19,7 @@ using OpenTK.Graphics.ES30; namespace osu.Game.Rulesets.Osu.UI.Cursor { - internal class CursorTrail : Drawable + internal class CursorTrail : Drawable, IRequireHighFrequencyMousePosition { private int currentIndex; From 2bd58e54213e89088fba3754feb8b0b9c2814c58 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 5 Mar 2018 19:06:43 +0900 Subject: [PATCH 293/544] Re-order RNG call to match osu-stable --- .../Beatmaps/Patterns/Legacy/DistanceObjectPatternGenerator.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game.Rulesets.Mania/Beatmaps/Patterns/Legacy/DistanceObjectPatternGenerator.cs b/osu.Game.Rulesets.Mania/Beatmaps/Patterns/Legacy/DistanceObjectPatternGenerator.cs index 29b8aaa51b..ce2c679bf3 100644 --- a/osu.Game.Rulesets.Mania/Beatmaps/Patterns/Legacy/DistanceObjectPatternGenerator.cs +++ b/osu.Game.Rulesets.Mania/Beatmaps/Patterns/Legacy/DistanceObjectPatternGenerator.cs @@ -396,6 +396,7 @@ namespace osu.Game.Rulesets.Mania.Beatmaps.Patterns.Legacy // Create the hold note addToPattern(pattern, holdColumn, startTime, endTime); + int nextColumn = Random.Next(RandomStart, TotalColumns); int noteCount; if (ConversionDifficulty > 6.5) noteCount = GetRandomNoteCount(0.63, 0); @@ -408,7 +409,6 @@ namespace osu.Game.Rulesets.Mania.Beatmaps.Patterns.Legacy noteCount = Math.Min(TotalColumns - 1, noteCount); bool ignoreHead = !sampleInfoListAt(startTime).Any(s => s.Name == SampleInfo.HIT_WHISTLE || s.Name == SampleInfo.HIT_FINISH || s.Name == SampleInfo.HIT_CLAP); - int nextColumn = Random.Next(RandomStart, TotalColumns); var rowPattern = new Pattern(); for (int i = 0; i <= spanCount; i++) From 3ddaf1879d56a208834b36a1b9dd9ca6994760ec Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Mon, 5 Mar 2018 20:11:27 +0900 Subject: [PATCH 294/544] CursorTrail always present, just to be safe --- osu.Game.Rulesets.Osu/UI/Cursor/CursorTrail.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/osu.Game.Rulesets.Osu/UI/Cursor/CursorTrail.cs b/osu.Game.Rulesets.Osu/UI/Cursor/CursorTrail.cs index d9a6b81f6b..fed2105f21 100644 --- a/osu.Game.Rulesets.Osu/UI/Cursor/CursorTrail.cs +++ b/osu.Game.Rulesets.Osu/UI/Cursor/CursorTrail.cs @@ -32,6 +32,8 @@ namespace osu.Game.Rulesets.Osu.UI.Cursor private float time; + public override bool IsPresent => true; + private readonly TrailDrawNodeSharedData trailDrawNodeSharedData = new TrailDrawNodeSharedData(); private const int max_sprites = 2048; From dfeee79a249a2b4c9df4abefd562d92314ac96e3 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 5 Mar 2018 19:35:35 +0900 Subject: [PATCH 295/544] Fix incorrect probability --- .../Beatmaps/Patterns/Legacy/HitObjectPatternGenerator.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game.Rulesets.Mania/Beatmaps/Patterns/Legacy/HitObjectPatternGenerator.cs b/osu.Game.Rulesets.Mania/Beatmaps/Patterns/Legacy/HitObjectPatternGenerator.cs index c4ef23a982..98d79d3f5c 100644 --- a/osu.Game.Rulesets.Mania/Beatmaps/Patterns/Legacy/HitObjectPatternGenerator.cs +++ b/osu.Game.Rulesets.Mania/Beatmaps/Patterns/Legacy/HitObjectPatternGenerator.cs @@ -356,7 +356,7 @@ namespace osu.Game.Rulesets.Mania.Beatmaps.Patterns.Legacy break; case 3: centreProbability = Math.Max(centreProbability, 0.03); - p2 = Math.Max(p2, 0.1); + p2 = 0; p3 = 0; break; case 4: From 675c7d0dfd301bcb2b8500541cb3f21c0d5777d0 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 5 Mar 2018 19:35:57 +0900 Subject: [PATCH 296/544] Invert Max/Mins --- .../Legacy/DistanceObjectPatternGenerator.cs | 12 +++++------ .../Legacy/HitObjectPatternGenerator.cs | 20 +++++++++---------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/osu.Game.Rulesets.Mania/Beatmaps/Patterns/Legacy/DistanceObjectPatternGenerator.cs b/osu.Game.Rulesets.Mania/Beatmaps/Patterns/Legacy/DistanceObjectPatternGenerator.cs index ce2c679bf3..c7d7fc9a07 100644 --- a/osu.Game.Rulesets.Mania/Beatmaps/Patterns/Legacy/DistanceObjectPatternGenerator.cs +++ b/osu.Game.Rulesets.Mania/Beatmaps/Patterns/Legacy/DistanceObjectPatternGenerator.cs @@ -305,19 +305,19 @@ namespace osu.Game.Rulesets.Mania.Beatmaps.Patterns.Legacy p4 = 0; break; case 3: - p2 = Math.Max(p2, 0.1); + p2 = Math.Min(p2, 0.1); p3 = 0; p4 = 0; break; case 4: - p2 = Math.Max(p2, 0.3); - p3 = Math.Max(p3, 0.04); + p2 = Math.Min(p2, 0.3); + p3 = Math.Min(p3, 0.04); p4 = 0; break; case 5: - p2 = Math.Max(p2, 0.34); - p3 = Math.Max(p3, 0.1); - p4 = Math.Max(p4, 0.03); + p2 = Math.Min(p2, 0.34); + p3 = Math.Min(p3, 0.1); + p4 = Math.Min(p4, 0.03); break; } diff --git a/osu.Game.Rulesets.Mania/Beatmaps/Patterns/Legacy/HitObjectPatternGenerator.cs b/osu.Game.Rulesets.Mania/Beatmaps/Patterns/Legacy/HitObjectPatternGenerator.cs index 98d79d3f5c..c2ec4d9645 100644 --- a/osu.Game.Rulesets.Mania/Beatmaps/Patterns/Legacy/HitObjectPatternGenerator.cs +++ b/osu.Game.Rulesets.Mania/Beatmaps/Patterns/Legacy/HitObjectPatternGenerator.cs @@ -308,20 +308,20 @@ namespace osu.Game.Rulesets.Mania.Beatmaps.Patterns.Legacy p5 = 0; break; case 3: - p2 = Math.Max(p2, 0.1); + p2 = Math.Min(p2, 0.1); p3 = 0; p4 = 0; p5 = 0; break; case 4: - p2 = Math.Max(p2, 0.23); - p3 = Math.Max(p3, 0.04); + p2 = Math.Min(p2, 0.23); + p3 = Math.Min(p3, 0.04); p4 = 0; p5 = 0; break; case 5: - p3 = Math.Max(p3, 0.15); - p4 = Math.Max(p4, 0.03); + p3 = Math.Min(p3, 0.15); + p4 = Math.Min(p4, 0.03); p5 = 0; break; } @@ -355,23 +355,23 @@ namespace osu.Game.Rulesets.Mania.Beatmaps.Patterns.Legacy p3 = 0; break; case 3: - centreProbability = Math.Max(centreProbability, 0.03); + centreProbability = Math.Min(centreProbability, 0.03); p2 = 0; p3 = 0; break; case 4: centreProbability = 0; - p2 = Math.Max(p2 * 2, 0.2); + p2 = Math.Min(p2 * 2, 0.2); p3 = 0; break; case 5: - centreProbability = Math.Max(centreProbability, 0.03); + centreProbability = Math.Min(centreProbability, 0.03); p3 = 0; break; case 6: centreProbability = 0; - p2 = Math.Max(p2 * 2, 0.5); - p3 = Math.Max(p3 * 2, 0.15); + p2 = Math.Min(p2 * 2, 0.5); + p3 = Math.Min(p3 * 2, 0.15); break; } From 356d353cead3f2568bba01f68a2fcd3ba72d11ce Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 5 Mar 2018 20:14:06 +0900 Subject: [PATCH 297/544] Fix ConversionDifficulty never actually being calculated --- .../Beatmaps/ManiaBeatmapConverter.cs | 15 +++++------ .../Legacy/DistanceObjectPatternGenerator.cs | 5 ++-- .../Legacy/EndTimeObjectPatternGenerator.cs | 5 ++-- .../Legacy/HitObjectPatternGenerator.cs | 5 ++-- .../Patterns/Legacy/PatternGenerator.cs | 27 ++++++++++++------- 5 files changed, 34 insertions(+), 23 deletions(-) diff --git a/osu.Game.Rulesets.Mania/Beatmaps/ManiaBeatmapConverter.cs b/osu.Game.Rulesets.Mania/Beatmaps/ManiaBeatmapConverter.cs index 9922d4c8ad..595027f3ca 100644 --- a/osu.Game.Rulesets.Mania/Beatmaps/ManiaBeatmapConverter.cs +++ b/osu.Game.Rulesets.Mania/Beatmaps/ManiaBeatmapConverter.cs @@ -77,7 +77,7 @@ namespace osu.Game.Rulesets.Mania.Beatmaps yield break; } - var objects = IsForCurrentRuleset ? generateSpecific(original) : generateConverted(original); + var objects = IsForCurrentRuleset ? generateSpecific(original) : generateConverted(original, beatmap); if (objects == null) yield break; @@ -125,26 +125,25 @@ namespace osu.Game.Rulesets.Mania.Beatmaps /// Method that generates hit objects for non-osu!mania beatmaps. /// /// The original hit object. + /// The original beatmap. This is used /// The hit objects generated. - private IEnumerable generateConverted(HitObject original) + private IEnumerable generateConverted(HitObject original, Beatmap originalBeatmap) { var endTimeData = original as IHasEndTime; var distanceData = original as IHasDistance; var positionData = original as IHasPosition; - // Following lines currently commented out to appease resharper - Patterns.PatternGenerator conversion = null; if (distanceData != null) - conversion = new DistanceObjectPatternGenerator(random, original, beatmap, lastPattern); + conversion = new DistanceObjectPatternGenerator(random, original, beatmap, lastPattern, originalBeatmap); else if (endTimeData != null) - conversion = new EndTimeObjectPatternGenerator(random, original, beatmap); + conversion = new EndTimeObjectPatternGenerator(random, original, beatmap, originalBeatmap); else if (positionData != null) { computeDensity(original.StartTime); - conversion = new HitObjectPatternGenerator(random, original, beatmap, lastPattern, lastTime, lastPosition, density, lastStair); + conversion = new HitObjectPatternGenerator(random, original, beatmap, lastPattern, lastTime, lastPosition, density, lastStair, originalBeatmap); recordNote(original.StartTime, positionData.Position); } @@ -167,7 +166,7 @@ namespace osu.Game.Rulesets.Mania.Beatmaps private class SpecificBeatmapPatternGenerator : Patterns.Legacy.PatternGenerator { public SpecificBeatmapPatternGenerator(FastRandom random, HitObject hitObject, ManiaBeatmap beatmap, Pattern previousPattern) - : base(random, hitObject, beatmap, previousPattern) + : base(random, hitObject, beatmap, previousPattern, null) { } diff --git a/osu.Game.Rulesets.Mania/Beatmaps/Patterns/Legacy/DistanceObjectPatternGenerator.cs b/osu.Game.Rulesets.Mania/Beatmaps/Patterns/Legacy/DistanceObjectPatternGenerator.cs index c7d7fc9a07..a3d784b28a 100644 --- a/osu.Game.Rulesets.Mania/Beatmaps/Patterns/Legacy/DistanceObjectPatternGenerator.cs +++ b/osu.Game.Rulesets.Mania/Beatmaps/Patterns/Legacy/DistanceObjectPatternGenerator.cs @@ -5,6 +5,7 @@ using System; using System.Collections.Generic; using System.Linq; using osu.Game.Audio; +using osu.Game.Beatmaps; using osu.Game.Rulesets.Mania.MathUtils; using osu.Game.Rulesets.Objects; using osu.Game.Rulesets.Objects.Types; @@ -29,8 +30,8 @@ namespace osu.Game.Rulesets.Mania.Beatmaps.Patterns.Legacy private PatternType convertType; - public DistanceObjectPatternGenerator(FastRandom random, HitObject hitObject, ManiaBeatmap beatmap, Pattern previousPattern) - : base(random, hitObject, beatmap, previousPattern) + public DistanceObjectPatternGenerator(FastRandom random, HitObject hitObject, ManiaBeatmap beatmap, Pattern previousPattern, Beatmap originalBeatmap) + : base(random, hitObject, beatmap, previousPattern, originalBeatmap) { convertType = PatternType.None; if (Beatmap.ControlPointInfo.EffectPointAt(hitObject.StartTime).KiaiMode) diff --git a/osu.Game.Rulesets.Mania/Beatmaps/Patterns/Legacy/EndTimeObjectPatternGenerator.cs b/osu.Game.Rulesets.Mania/Beatmaps/Patterns/Legacy/EndTimeObjectPatternGenerator.cs index 278a4c4aab..ffbabba75a 100644 --- a/osu.Game.Rulesets.Mania/Beatmaps/Patterns/Legacy/EndTimeObjectPatternGenerator.cs +++ b/osu.Game.Rulesets.Mania/Beatmaps/Patterns/Legacy/EndTimeObjectPatternGenerator.cs @@ -7,6 +7,7 @@ using osu.Game.Rulesets.Objects; using osu.Game.Rulesets.Objects.Types; using System.Linq; using osu.Game.Audio; +using osu.Game.Beatmaps; using osu.Game.Rulesets.Mania.Objects; namespace osu.Game.Rulesets.Mania.Beatmaps.Patterns.Legacy @@ -15,8 +16,8 @@ namespace osu.Game.Rulesets.Mania.Beatmaps.Patterns.Legacy { private readonly double endTime; - public EndTimeObjectPatternGenerator(FastRandom random, HitObject hitObject, ManiaBeatmap beatmap) - : base(random, hitObject, beatmap, new Pattern()) + public EndTimeObjectPatternGenerator(FastRandom random, HitObject hitObject, ManiaBeatmap beatmap, Beatmap originalBeatmap) + : base(random, hitObject, beatmap, new Pattern(), originalBeatmap) { var endtimeData = HitObject as IHasEndTime; diff --git a/osu.Game.Rulesets.Mania/Beatmaps/Patterns/Legacy/HitObjectPatternGenerator.cs b/osu.Game.Rulesets.Mania/Beatmaps/Patterns/Legacy/HitObjectPatternGenerator.cs index c2ec4d9645..e126534c54 100644 --- a/osu.Game.Rulesets.Mania/Beatmaps/Patterns/Legacy/HitObjectPatternGenerator.cs +++ b/osu.Game.Rulesets.Mania/Beatmaps/Patterns/Legacy/HitObjectPatternGenerator.cs @@ -5,6 +5,7 @@ using System; using System.Linq; using OpenTK; using osu.Game.Audio; +using osu.Game.Beatmaps; using osu.Game.Beatmaps.ControlPoints; using osu.Game.Rulesets.Mania.MathUtils; using osu.Game.Rulesets.Mania.Objects; @@ -19,8 +20,8 @@ namespace osu.Game.Rulesets.Mania.Beatmaps.Patterns.Legacy private readonly PatternType convertType; - public HitObjectPatternGenerator(FastRandom random, HitObject hitObject, ManiaBeatmap beatmap, Pattern previousPattern, double previousTime, Vector2 previousPosition, double density, PatternType lastStair) - : base(random, hitObject, beatmap, previousPattern) + public HitObjectPatternGenerator(FastRandom random, HitObject hitObject, ManiaBeatmap beatmap, Pattern previousPattern, double previousTime, Vector2 previousPosition, double density, PatternType lastStair, Beatmap originalBeatmap) + : base(random, hitObject, beatmap, previousPattern, originalBeatmap) { if (previousTime > hitObject.StartTime) throw new ArgumentOutOfRangeException(nameof(previousTime)); if (density < 0) throw new ArgumentOutOfRangeException(nameof(density)); diff --git a/osu.Game.Rulesets.Mania/Beatmaps/Patterns/Legacy/PatternGenerator.cs b/osu.Game.Rulesets.Mania/Beatmaps/Patterns/Legacy/PatternGenerator.cs index 5f98749f0c..501950cdcd 100644 --- a/osu.Game.Rulesets.Mania/Beatmaps/Patterns/Legacy/PatternGenerator.cs +++ b/osu.Game.Rulesets.Mania/Beatmaps/Patterns/Legacy/PatternGenerator.cs @@ -25,14 +25,20 @@ namespace osu.Game.Rulesets.Mania.Beatmaps.Patterns.Legacy /// protected readonly FastRandom Random; - protected PatternGenerator(FastRandom random, HitObject hitObject, ManiaBeatmap beatmap, Pattern previousPattern) + /// + /// The beatmap which is being converted from. + /// + protected readonly Beatmap OriginalBeatmap; + + protected PatternGenerator(FastRandom random, HitObject hitObject, ManiaBeatmap beatmap, Pattern previousPattern, Beatmap originalBeatmap) : base(hitObject, beatmap, previousPattern) { if (random == null) throw new ArgumentNullException(nameof(random)); - if (beatmap == null) throw new ArgumentNullException(nameof(beatmap)); - if (previousPattern == null) throw new ArgumentNullException(nameof(previousPattern)); + if (originalBeatmap == null) throw new ArgumentNullException(nameof(originalBeatmap)); Random = random; + OriginalBeatmap = originalBeatmap; + RandomStart = TotalColumns == 8 ? 1 : 0; } @@ -94,17 +100,20 @@ namespace osu.Game.Rulesets.Mania.Beatmaps.Patterns.Legacy if (conversionDifficulty != null) return conversionDifficulty.Value; - HitObject lastObject = Beatmap.HitObjects.LastOrDefault(); - HitObject firstObject = Beatmap.HitObjects.FirstOrDefault(); + HitObject lastObject = OriginalBeatmap.HitObjects.LastOrDefault(); + HitObject firstObject = OriginalBeatmap.HitObjects.FirstOrDefault(); double drainTime = (lastObject?.StartTime ?? 0) - (firstObject?.StartTime ?? 0); - drainTime -= Beatmap.TotalBreakTime; + drainTime -= OriginalBeatmap.TotalBreakTime; if (drainTime == 0) - drainTime = 10000; + drainTime = 10000000; - BeatmapDifficulty difficulty = Beatmap.BeatmapInfo.BaseDifficulty; - conversionDifficulty = ((difficulty.DrainRate + MathHelper.Clamp(difficulty.ApproachRate, 4, 7)) / 1.5 + Beatmap.HitObjects.Count / drainTime * 9f) / 38f * 5f / 1.15; + // We need this in seconds + drainTime /= 1000; + + BeatmapDifficulty difficulty = OriginalBeatmap.BeatmapInfo.BaseDifficulty; + conversionDifficulty = ((difficulty.DrainRate + MathHelper.Clamp(difficulty.ApproachRate, 4, 7)) / 1.5 + OriginalBeatmap.HitObjects.Count / drainTime * 9f) / 38f * 5f / 1.15; conversionDifficulty = Math.Min(conversionDifficulty.Value, 12); return conversionDifficulty.Value; From 4be478d38eccc878596b46771ba78ca90fd8671c Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 5 Mar 2018 20:14:34 +0900 Subject: [PATCH 298/544] Fix LowProbability conversions happening during kiai time --- .../Beatmaps/Patterns/Legacy/DistanceObjectPatternGenerator.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game.Rulesets.Mania/Beatmaps/Patterns/Legacy/DistanceObjectPatternGenerator.cs b/osu.Game.Rulesets.Mania/Beatmaps/Patterns/Legacy/DistanceObjectPatternGenerator.cs index a3d784b28a..28cf119833 100644 --- a/osu.Game.Rulesets.Mania/Beatmaps/Patterns/Legacy/DistanceObjectPatternGenerator.cs +++ b/osu.Game.Rulesets.Mania/Beatmaps/Patterns/Legacy/DistanceObjectPatternGenerator.cs @@ -34,7 +34,7 @@ namespace osu.Game.Rulesets.Mania.Beatmaps.Patterns.Legacy : base(random, hitObject, beatmap, previousPattern, originalBeatmap) { convertType = PatternType.None; - if (Beatmap.ControlPointInfo.EffectPointAt(hitObject.StartTime).KiaiMode) + if (!Beatmap.ControlPointInfo.EffectPointAt(hitObject.StartTime).KiaiMode) convertType = PatternType.LowProbability; var distanceData = hitObject as IHasDistance; From 27a510aad8bf7715e59a29cb2df4c351787f4cfb Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 5 Mar 2018 20:16:11 +0900 Subject: [PATCH 299/544] The endtime-object pattern is never checked against --- osu.Game.Rulesets.Mania/Beatmaps/ManiaBeatmapConverter.cs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/osu.Game.Rulesets.Mania/Beatmaps/ManiaBeatmapConverter.cs b/osu.Game.Rulesets.Mania/Beatmaps/ManiaBeatmapConverter.cs index 595027f3ca..2dd3468df0 100644 --- a/osu.Game.Rulesets.Mania/Beatmaps/ManiaBeatmapConverter.cs +++ b/osu.Game.Rulesets.Mania/Beatmaps/ManiaBeatmapConverter.cs @@ -152,10 +152,9 @@ namespace osu.Game.Rulesets.Mania.Beatmaps return null; Pattern newPattern = conversion.Generate(); - lastPattern = newPattern; - var stairPatternGenerator = conversion as HitObjectPatternGenerator; - lastStair = stairPatternGenerator?.StairType ?? lastStair; + lastPattern = conversion is EndTimeObjectPatternGenerator ? lastPattern : newPattern; + lastStair = (conversion as HitObjectPatternGenerator)?.StairType ?? lastStair; return newPattern.HitObjects; } From 02265ad686625583982e19142bcd4f82ae31955b Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 5 Mar 2018 20:16:54 +0900 Subject: [PATCH 300/544] Enable mania's basic conversion testcase --- osu.Game.Rulesets.Mania/Tests/ManiaBeatmapConversionTest.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game.Rulesets.Mania/Tests/ManiaBeatmapConversionTest.cs b/osu.Game.Rulesets.Mania/Tests/ManiaBeatmapConversionTest.cs index 2095addc72..9d55ab643d 100644 --- a/osu.Game.Rulesets.Mania/Tests/ManiaBeatmapConversionTest.cs +++ b/osu.Game.Rulesets.Mania/Tests/ManiaBeatmapConversionTest.cs @@ -21,7 +21,7 @@ namespace osu.Game.Rulesets.Mania.Tests private bool isForCurrentRuleset; [NonParallelizable] - [TestCase("basic", false), Ignore("See: https://github.com/ppy/osu/issues/2150")] + [TestCase("basic", false)] public void Test(string name, bool isForCurrentRuleset) { this.isForCurrentRuleset = isForCurrentRuleset; From 7ce3e607224bcf981a4433154413e2975d9b923e Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 5 Mar 2018 21:17:26 +0900 Subject: [PATCH 301/544] Fix drumrolls giving GOOD judgements too one tick too late --- osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableDrumRoll.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableDrumRoll.cs b/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableDrumRoll.cs index 29d464f614..f98e6b936e 100644 --- a/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableDrumRoll.cs +++ b/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableDrumRoll.cs @@ -82,8 +82,7 @@ namespace osu.Game.Rulesets.Taiko.Objects.Drawables return; int countHit = NestedHitObjects.Count(o => o.IsHit); - - if (countHit > HitObject.RequiredGoodHits) + if (countHit >= HitObject.RequiredGoodHits) { AddJudgement(new TaikoJudgement { Result = countHit >= HitObject.RequiredGreatHits ? HitResult.Great : HitResult.Good }); if (HitObject.IsStrong) From df84b238478bc354139e72303b56359fd339d9ab Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 5 Mar 2018 21:19:04 +0900 Subject: [PATCH 302/544] Fix possible nullref when there are 0 drumroll ticks --- osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableDrumRoll.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableDrumRoll.cs b/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableDrumRoll.cs index f98e6b936e..2735d28769 100644 --- a/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableDrumRoll.cs +++ b/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableDrumRoll.cs @@ -81,7 +81,7 @@ namespace osu.Game.Rulesets.Taiko.Objects.Drawables if (timeOffset < 0) return; - int countHit = NestedHitObjects.Count(o => o.IsHit); + int countHit = NestedHitObjects?.Count(o => o.IsHit) ?? 0; if (countHit >= HitObject.RequiredGoodHits) { AddJudgement(new TaikoJudgement { Result = countHit >= HitObject.RequiredGreatHits ? HitResult.Great : HitResult.Good }); From 02690e5f25135cbecfac4a1e65990d95f6f9ac0b Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Mon, 5 Mar 2018 21:27:37 +0900 Subject: [PATCH 303/544] Move to private implementation --- osu.Game/Skinning/LegacySkin.cs | 24 ++++++++++++++++++++- osu.Game/Skinning/SkinResourceStore.cs | 29 -------------------------- osu.Game/osu.Game.csproj | 1 - 3 files changed, 23 insertions(+), 31 deletions(-) delete mode 100644 osu.Game/Skinning/SkinResourceStore.cs diff --git a/osu.Game/Skinning/LegacySkin.cs b/osu.Game/Skinning/LegacySkin.cs index 97e0bdb942..17fe6369a7 100644 --- a/osu.Game/Skinning/LegacySkin.cs +++ b/osu.Game/Skinning/LegacySkin.cs @@ -1,6 +1,9 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using System; +using System.IO; +using System.Linq; using osu.Framework.Audio; using osu.Framework.Audio.Sample; using osu.Framework.Graphics; @@ -19,7 +22,7 @@ namespace osu.Game.Skinning public LegacySkin(SkinInfo skin, IResourceStore storage, AudioManager audioManager) : base(skin) { - storage = new SkinResourceStore(skin, storage); + storage = new LegacySkinResourceStore(skin, storage); samples = audioManager.GetSampleManager(storage); textures = new TextureStore(new RawTextureLoaderStore(storage)); } @@ -38,5 +41,24 @@ namespace osu.Game.Skinning } public override SampleChannel GetSample(string sampleName) => samples.Get(sampleName); + + private class LegacySkinResourceStore : IResourceStore + { + private readonly SkinInfo skin; + private readonly IResourceStore underlyingStore; + + private string getPathForFile(string filename) => + skin.Files.FirstOrDefault(f => string.Equals(Path.GetFileNameWithoutExtension(f.Filename), filename.Split('/').Last(), StringComparison.InvariantCultureIgnoreCase))?.FileInfo.StoragePath; + + public LegacySkinResourceStore(SkinInfo skin, IResourceStore underlyingStore) + { + this.skin = skin; + this.underlyingStore = underlyingStore; + } + + public Stream GetStream(string name) => underlyingStore.GetStream(getPathForFile(name)); + + byte[] IResourceStore.Get(string name) => underlyingStore.Get(getPathForFile(name)); + } } } diff --git a/osu.Game/Skinning/SkinResourceStore.cs b/osu.Game/Skinning/SkinResourceStore.cs deleted file mode 100644 index 58da8ad19a..0000000000 --- a/osu.Game/Skinning/SkinResourceStore.cs +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright (c) 2007-2018 ppy Pty Ltd . -// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE - -using System; -using System.IO; -using System.Linq; -using osu.Framework.IO.Stores; - -namespace osu.Game.Skinning -{ - public class SkinResourceStore : IResourceStore - { - private readonly SkinInfo skin; - private readonly IResourceStore underlyingStore; - - private string getPathForFile(string filename) => - skin.Files.FirstOrDefault(f => string.Equals(Path.GetFileNameWithoutExtension(f.Filename), filename.Split('/').Last(), StringComparison.InvariantCultureIgnoreCase))?.FileInfo.StoragePath; - - public SkinResourceStore(SkinInfo skin, IResourceStore underlyingStore) - { - this.skin = skin; - this.underlyingStore = underlyingStore; - } - - public Stream GetStream(string name) => underlyingStore.GetStream(getPathForFile(name)); - - byte[] IResourceStore.Get(string name) => underlyingStore.Get(getPathForFile(name)); - } -} diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index d4bd5a0013..37e304d62d 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -870,7 +870,6 @@ - From 2a9fb2c2c60966fd64333abffdf3e7bea79e9d49 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 5 Mar 2018 21:40:26 +0900 Subject: [PATCH 304/544] Make NestedHitObjects lazily-constructed --- .../Objects/Drawables/DrawableDrumRoll.cs | 2 +- .../Objects/Drawables/DrawableHitObject.cs | 16 +++++++--------- .../OverlappingSpeedChangeVisualiser.cs | 2 +- .../SequentialSpeedChangeVisualiser.cs | 2 +- 4 files changed, 10 insertions(+), 12 deletions(-) diff --git a/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableDrumRoll.cs b/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableDrumRoll.cs index 2735d28769..f98e6b936e 100644 --- a/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableDrumRoll.cs +++ b/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableDrumRoll.cs @@ -81,7 +81,7 @@ namespace osu.Game.Rulesets.Taiko.Objects.Drawables if (timeOffset < 0) return; - int countHit = NestedHitObjects?.Count(o => o.IsHit) ?? 0; + int countHit = NestedHitObjects.Count(o => o.IsHit); if (countHit >= HitObject.RequiredGoodHits) { AddJudgement(new TaikoJudgement { Result = countHit >= HitObject.RequiredGreatHits ? HitResult.Great : HitResult.Good }); diff --git a/osu.Game/Rulesets/Objects/Drawables/DrawableHitObject.cs b/osu.Game/Rulesets/Objects/Drawables/DrawableHitObject.cs index 4c2683b389..394b6fa9fd 100644 --- a/osu.Game/Rulesets/Objects/Drawables/DrawableHitObject.cs +++ b/osu.Game/Rulesets/Objects/Drawables/DrawableHitObject.cs @@ -35,8 +35,9 @@ namespace osu.Game.Rulesets.Objects.Drawables protected virtual IEnumerable GetSamples() => HitObject.Samples; - private List nestedHitObjects; - public IReadOnlyList NestedHitObjects => nestedHitObjects; + private readonly Lazy> nestedHitObjects = new Lazy>(); + public bool HasNestedHitObjects => nestedHitObjects.IsValueCreated; + public IReadOnlyList NestedHitObjects => nestedHitObjects.Value; public event Action OnJudgement; public event Action OnJudgementRemoved; @@ -52,12 +53,12 @@ namespace osu.Game.Rulesets.Objects.Drawables /// /// Whether this and all of its nested s have been hit. /// - public bool IsHit => Judgements.Any(j => j.Final && j.IsHit) && (NestedHitObjects?.All(n => n.IsHit) ?? true); + public bool IsHit => Judgements.Any(j => j.Final && j.IsHit) && (!HasNestedHitObjects || NestedHitObjects.All(n => n.IsHit)); /// /// Whether this and all of its nested s have been judged. /// - public bool AllJudged => (!ProvidesJudgement || judgementFinalized) && (NestedHitObjects?.All(h => h.AllJudged) ?? true); + public bool AllJudged => (!ProvidesJudgement || judgementFinalized) && (!HasNestedHitObjects || NestedHitObjects.All(h => h.AllJudged)); /// /// Whether this can be judged. @@ -160,14 +161,11 @@ namespace osu.Game.Rulesets.Objects.Drawables protected virtual void AddNested(DrawableHitObject h) { - if (nestedHitObjects == null) - nestedHitObjects = new List(); - h.OnJudgement += (d, j) => OnJudgement?.Invoke(d, j); h.OnJudgementRemoved += (d, j) => OnJudgementRemoved?.Invoke(d, j); h.ApplyCustomUpdateState += (d, j) => ApplyCustomUpdateState?.Invoke(d, j); - nestedHitObjects.Add(h); + nestedHitObjects.Value.Add(h); } /// @@ -211,7 +209,7 @@ namespace osu.Game.Rulesets.Objects.Drawables if (AllJudged) return false; - if (NestedHitObjects != null) + if (HasNestedHitObjects) foreach (var d in NestedHitObjects) judgementOccurred |= d.UpdateJudgement(userTriggered); diff --git a/osu.Game/Rulesets/UI/Scrolling/Visualisers/OverlappingSpeedChangeVisualiser.cs b/osu.Game/Rulesets/UI/Scrolling/Visualisers/OverlappingSpeedChangeVisualiser.cs index 4cce90ee94..48c212efa7 100644 --- a/osu.Game/Rulesets/UI/Scrolling/Visualisers/OverlappingSpeedChangeVisualiser.cs +++ b/osu.Game/Rulesets/UI/Scrolling/Visualisers/OverlappingSpeedChangeVisualiser.cs @@ -25,7 +25,7 @@ namespace osu.Game.Rulesets.UI.Scrolling.Visualisers var controlPoint = controlPointAt(obj.HitObject.StartTime); obj.LifetimeStart = obj.HitObject.StartTime - timeRange / controlPoint.Multiplier; - if (obj.NestedHitObjects != null) + if (obj.HasNestedHitObjects) { ComputeInitialStates(obj.NestedHitObjects, direction, timeRange, length); ComputePositions(obj.NestedHitObjects, direction, obj.HitObject.StartTime, timeRange, length); diff --git a/osu.Game/Rulesets/UI/Scrolling/Visualisers/SequentialSpeedChangeVisualiser.cs b/osu.Game/Rulesets/UI/Scrolling/Visualisers/SequentialSpeedChangeVisualiser.cs index 94705426f8..1b7c3714d6 100644 --- a/osu.Game/Rulesets/UI/Scrolling/Visualisers/SequentialSpeedChangeVisualiser.cs +++ b/osu.Game/Rulesets/UI/Scrolling/Visualisers/SequentialSpeedChangeVisualiser.cs @@ -46,7 +46,7 @@ namespace osu.Game.Rulesets.UI.Scrolling.Visualisers } } - if (obj.NestedHitObjects != null) + if (obj.HasNestedHitObjects) { ComputeInitialStates(obj.NestedHitObjects, direction, timeRange, length); ComputePositions(obj.NestedHitObjects, direction, obj.HitObject.StartTime, timeRange, length); From 792a3ac469f758f37df40177a90599082ad859b4 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 6 Mar 2018 00:10:53 +0900 Subject: [PATCH 305/544] SkipButton -> SkipOverlay --- osu.Game.Tests/Visual/TestCaseSkipButton.cs | 2 +- osu.Game/Screens/Play/Player.cs | 2 +- osu.Game/Screens/Play/{SkipButton.cs => SkipOverlay.cs} | 4 ++-- osu.Game/osu.Game.csproj | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) rename osu.Game/Screens/Play/{SkipButton.cs => SkipOverlay.cs} (95%) diff --git a/osu.Game.Tests/Visual/TestCaseSkipButton.cs b/osu.Game.Tests/Visual/TestCaseSkipButton.cs index a4d2019cd7..df94d5147f 100644 --- a/osu.Game.Tests/Visual/TestCaseSkipButton.cs +++ b/osu.Game.Tests/Visual/TestCaseSkipButton.cs @@ -13,7 +13,7 @@ namespace osu.Game.Tests.Visual { base.LoadComplete(); - Add(new SkipButton(Clock.CurrentTime + 5000)); + Add(new SkipOverlay(Clock.CurrentTime + 5000)); } } } diff --git a/osu.Game/Screens/Play/Player.cs b/osu.Game/Screens/Play/Player.cs index ad803ebc44..7f8881f463 100644 --- a/osu.Game/Screens/Play/Player.cs +++ b/osu.Game/Screens/Play/Player.cs @@ -183,7 +183,7 @@ namespace osu.Game.Screens.Play Alpha = 0, }, RulesetContainer, - new SkipButton(firstObjectTime) + new SkipOverlay(firstObjectTime) { Clock = Clock, // skip button doesn't want to use the audio clock directly ProcessCustomClock = false, diff --git a/osu.Game/Screens/Play/SkipButton.cs b/osu.Game/Screens/Play/SkipOverlay.cs similarity index 95% rename from osu.Game/Screens/Play/SkipButton.cs rename to osu.Game/Screens/Play/SkipOverlay.cs index c77061e5d9..5418a6c416 100644 --- a/osu.Game/Screens/Play/SkipButton.cs +++ b/osu.Game/Screens/Play/SkipOverlay.cs @@ -21,7 +21,7 @@ using osu.Game.Input.Bindings; namespace osu.Game.Screens.Play { - public class SkipButton : OverlayContainer, IKeyBindingHandler + public class SkipOverlay : OverlayContainer, IKeyBindingHandler { private readonly double startTime; @@ -38,7 +38,7 @@ namespace osu.Game.Screens.Play protected override bool BlockPassThroughMouse => fadeContainer.IsHovered; - public SkipButton(double startTime) + public SkipOverlay(double startTime) { this.startTime = startTime; diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index 37e304d62d..406e251899 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -801,7 +801,7 @@ - + From d115c56742927401a82802bb0a21e5549e86f059 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 6 Mar 2018 00:27:55 +0900 Subject: [PATCH 306/544] Avoid using input blocking --- osu.Game/Screens/Play/SkipOverlay.cs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/osu.Game/Screens/Play/SkipOverlay.cs b/osu.Game/Screens/Play/SkipOverlay.cs index 5418a6c416..923084c9e7 100644 --- a/osu.Game/Screens/Play/SkipOverlay.cs +++ b/osu.Game/Screens/Play/SkipOverlay.cs @@ -35,8 +35,7 @@ namespace osu.Game.Screens.Play private double displayTime; public override bool ReceiveMouseInputAt(Vector2 screenSpacePos) => true; - - protected override bool BlockPassThroughMouse => fadeContainer.IsHovered; + protected override bool BlockPassThroughMouse => false; public SkipOverlay(double startTime) { @@ -276,7 +275,7 @@ namespace osu.Game.Screens.Play flow.TransformSpacingTo(new Vector2(5), 500, Easing.OutQuint); box.FadeColour(colourHover, 500, Easing.OutQuint); background.FadeTo(0.4f, 500, Easing.OutQuint); - return base.OnHover(state); + return true; } protected override void OnHoverLost(InputState state) From 4aafc2228ecacf89b477f90bcbc7d60e0c192f3c Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 6 Mar 2018 00:53:40 +0900 Subject: [PATCH 307/544] Improve skip button behaviour when mouse buttons are down --- osu.Game/Screens/Play/SkipOverlay.cs | 37 +++++++++++++++++----------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/osu.Game/Screens/Play/SkipOverlay.cs b/osu.Game/Screens/Play/SkipOverlay.cs index 923084c9e7..19ee0cb989 100644 --- a/osu.Game/Screens/Play/SkipOverlay.cs +++ b/osu.Game/Screens/Play/SkipOverlay.cs @@ -52,12 +52,6 @@ namespace osu.Game.Screens.Play Origin = Anchor.Centre; } - protected override bool OnMouseMove(InputState state) - { - fadeContainer.State = Visibility.Visible; - return base.OnMouseMove(state); - } - [BackgroundDependencyLoader] private void load(OsuColour colours) { @@ -122,15 +116,9 @@ namespace osu.Game.Screens.Play Expire(); } - protected override void PopIn() - { - this.FadeIn(); - } + protected override void PopIn() => this.FadeIn(); - protected override void PopOut() - { - this.FadeOut(); - } + protected override void PopOut() => this.FadeOut(); protected override void Update() { @@ -138,6 +126,13 @@ namespace osu.Game.Screens.Play remainingTimeBox.ResizeWidthTo((float)Math.Max(0, 1 - (Time.Current - displayTime) / (beginFadeTime - displayTime)), 120, Easing.OutQuint); } + protected override bool OnMouseMove(InputState state) + { + if (!state.Mouse.HasAnyButtonPressed) + fadeContainer.State = Visibility.Visible; + return base.OnMouseMove(state); + } + public bool OnPressed(GlobalAction action) { switch (action) @@ -177,7 +172,7 @@ namespace osu.Game.Screens.Play if (stateChanged) this.FadeIn(500, Easing.OutExpo); - if (!IsHovered) + if (!IsHovered && !IsDragged) using (BeginDelayedSequence(1000)) scheduledHide = Schedule(() => State = Visibility.Hidden); break; @@ -195,6 +190,18 @@ namespace osu.Game.Screens.Play base.LoadComplete(); State = Visibility.Visible; } + + protected override bool OnMouseDown(InputState state, MouseDownEventArgs args) + { + scheduledHide?.Cancel(); + return base.OnMouseDown(state, args); + } + + protected override bool OnMouseUp(InputState state, MouseUpEventArgs args) + { + State = Visibility.Visible; + return base.OnMouseUp(state, args); + } } private class Button : OsuClickableContainer From c4c1b0b6ffb7d366e7d786d5ebb209b5e093f3c0 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 6 Mar 2018 01:39:01 +0900 Subject: [PATCH 308/544] Fix merge regression --- osu.Game/Tests/Beatmaps/BeatmapConversionTest.cs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/osu.Game/Tests/Beatmaps/BeatmapConversionTest.cs b/osu.Game/Tests/Beatmaps/BeatmapConversionTest.cs index 7423005850..219d805bc1 100644 --- a/osu.Game/Tests/Beatmaps/BeatmapConversionTest.cs +++ b/osu.Game/Tests/Beatmaps/BeatmapConversionTest.cs @@ -111,7 +111,11 @@ namespace osu.Game.Tests.Beatmaps { using (var resStream = openResource($"{resource_namespace}.{name}.osu")) using (var stream = new StreamReader(resStream)) - return Decoder.GetDecoder(stream).DecodeBeatmap(stream); + { + var decoder = Decoder.GetDecoder(stream); + ((LegacyBeatmapDecoder)decoder).ApplyOffsets = false; + return decoder.DecodeBeatmap(stream); + } } private Stream openResource(string name) From 90828cca8fcf5b692564eafa5b43203165567bdb Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 6 Mar 2018 08:59:02 +0900 Subject: [PATCH 309/544] Fix left and right arrows keys in chat overlay not working Misplaced override. Resolves ppy/osu-framework#1444 --- osu.Game/Graphics/UserInterface/FocusedTextBox.cs | 2 -- osu.Game/Graphics/UserInterface/SearchTextBox.cs | 2 ++ 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/osu.Game/Graphics/UserInterface/FocusedTextBox.cs b/osu.Game/Graphics/UserInterface/FocusedTextBox.cs index 43a3f06236..6d9bf231c3 100644 --- a/osu.Game/Graphics/UserInterface/FocusedTextBox.cs +++ b/osu.Game/Graphics/UserInterface/FocusedTextBox.cs @@ -18,8 +18,6 @@ namespace osu.Game.Graphics.UserInterface public Action Exit; - public override bool HandleLeftRightArrows => false; - private bool focus; public bool HoldFocus { diff --git a/osu.Game/Graphics/UserInterface/SearchTextBox.cs b/osu.Game/Graphics/UserInterface/SearchTextBox.cs index 9398eb55f3..28d33bbacd 100644 --- a/osu.Game/Graphics/UserInterface/SearchTextBox.cs +++ b/osu.Game/Graphics/UserInterface/SearchTextBox.cs @@ -12,6 +12,8 @@ namespace osu.Game.Graphics.UserInterface { protected virtual bool AllowCommit => false; + public override bool HandleLeftRightArrows => false; + public SearchTextBox() { Height = 35; From e187c6453d841aa393dda610938e858b786951bf Mon Sep 17 00:00:00 2001 From: Poyo Date: Mon, 5 Mar 2018 18:19:06 -0800 Subject: [PATCH 310/544] Added mania-difficulty mod support --- .../ManiaDifficultyCalculator.cs | 15 ++++++++------- osu.Game.Rulesets.Mania/ManiaRuleset.cs | 2 +- .../Objects/ManiaHitObjectDifficulty.cs | 6 +++--- 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/osu.Game.Rulesets.Mania/ManiaDifficultyCalculator.cs b/osu.Game.Rulesets.Mania/ManiaDifficultyCalculator.cs index e1d3b6212f..02560c8141 100644 --- a/osu.Game.Rulesets.Mania/ManiaDifficultyCalculator.cs +++ b/osu.Game.Rulesets.Mania/ManiaDifficultyCalculator.cs @@ -4,6 +4,7 @@ using osu.Game.Beatmaps; using osu.Game.Rulesets.Mania.Beatmaps; using osu.Game.Rulesets.Mania.Objects; +using osu.Game.Rulesets.Mods; using System; using System.Collections.Generic; @@ -31,8 +32,11 @@ namespace osu.Game.Rulesets.Mania private readonly List difficultyHitObjects = new List(); public ManiaDifficultyCalculator(Beatmap beatmap) - : base(beatmap) - { + : base(beatmap) { + } + + public ManiaDifficultyCalculator(Beatmap beatmap, Mod[] mods) + : base(beatmap, mods) { } public override double Calculate(Dictionary categoryDifficulty = null) @@ -53,11 +57,8 @@ namespace osu.Game.Rulesets.Mania double starRating = calculateDifficulty() * star_scaling_factor; - if (categoryDifficulty != null) - { - categoryDifficulty.Add("Strain", starRating); - // categoryDifficulty.Add("Hit window 300", 35 /*HitObjectManager.HitWindow300*/ / TimeRate); - } + categoryDifficulty?.Add("Strain", starRating); + // categoryDifficulty.Add("Hit window 300", 35 /*HitObjectManager.HitWindow300*/ / TimeRate); return starRating; } diff --git a/osu.Game.Rulesets.Mania/ManiaRuleset.cs b/osu.Game.Rulesets.Mania/ManiaRuleset.cs index 3bfb4d3e44..ac815e0e2f 100644 --- a/osu.Game.Rulesets.Mania/ManiaRuleset.cs +++ b/osu.Game.Rulesets.Mania/ManiaRuleset.cs @@ -110,7 +110,7 @@ namespace osu.Game.Rulesets.Mania public override Drawable CreateIcon() => new SpriteIcon { Icon = FontAwesome.fa_osu_mania_o }; - public override DifficultyCalculator CreateDifficultyCalculator(Beatmap beatmap, Mod[] mods = null) => new ManiaDifficultyCalculator(beatmap); + public override DifficultyCalculator CreateDifficultyCalculator(Beatmap beatmap, Mod[] mods = null) => new ManiaDifficultyCalculator(beatmap, mods); public override int LegacyID => 3; diff --git a/osu.Game.Rulesets.Mania/Objects/ManiaHitObjectDifficulty.cs b/osu.Game.Rulesets.Mania/Objects/ManiaHitObjectDifficulty.cs index 0b5e7d7e4c..2b59279972 100644 --- a/osu.Game.Rulesets.Mania/Objects/ManiaHitObjectDifficulty.cs +++ b/osu.Game.Rulesets.Mania/Objects/ManiaHitObjectDifficulty.cs @@ -22,13 +22,13 @@ namespace osu.Game.Rulesets.Mania.Objects private readonly int beatmapColumnCount; - private double endTime; - private double[] heldUntil; + private readonly double endTime; + private readonly double[] heldUntil; /// /// Measures jacks or more generally: repeated presses of the same button /// - private double[] individualStrains; + private readonly double[] individualStrains; internal double IndividualStrain { From 9669c5aee3fa3770bb9639fe3d600087fb0b90c0 Mon Sep 17 00:00:00 2001 From: naoey Date: Sun, 4 Mar 2018 00:01:47 +0530 Subject: [PATCH 311/544] Make locally used things local and rename method. --- .../Sections/Recent/DrawableRecentActivity.cs | 65 ++++++++++++------- 1 file changed, 40 insertions(+), 25 deletions(-) diff --git a/osu.Game/Overlays/Profile/Sections/Recent/DrawableRecentActivity.cs b/osu.Game/Overlays/Profile/Sections/Recent/DrawableRecentActivity.cs index 4785b1e8d3..2dde8a3d54 100644 --- a/osu.Game/Overlays/Profile/Sections/Recent/DrawableRecentActivity.cs +++ b/osu.Game/Overlays/Profile/Sections/Recent/DrawableRecentActivity.cs @@ -20,10 +20,6 @@ namespace osu.Game.Overlays.Profile.Sections.Recent private readonly RecentActivity activity; - private string userLinkTemplate; - private string beatmapLinkTemplate; - private string beatmapsetLinkTemplate; - private LinkFlowContainer content; public DrawableRecentActivity(RecentActivity activity) @@ -36,10 +32,6 @@ namespace osu.Game.Overlays.Profile.Sections.Recent { this.api = api; - userLinkTemplate = $"[{toAbsoluteUrl(activity.User?.Url)} {activity.User?.Username}]"; - beatmapLinkTemplate = $"[{toAbsoluteUrl(activity.Beatmap?.Url)} {activity.Beatmap?.Title}]"; - beatmapsetLinkTemplate = $"[{toAbsoluteUrl(activity.Beatmapset?.Url)} {activity.Beatmapset?.Title}]"; - LeftFlowContainer.Padding = new MarginPadding { Left = 10, Right = 160 }; LeftFlowContainer.Add(content = new LinkFlowContainer @@ -58,7 +50,7 @@ namespace osu.Game.Overlays.Profile.Sections.Recent Colour = OsuColour.Gray(0xAA), }); - var formatted = MessageFormatter.FormatText(activityToString()); + var formatted = createMessage(); content.AddLinks(formatted.Text, formatted.Links); } @@ -95,56 +87,79 @@ namespace osu.Game.Overlays.Profile.Sections.Recent private string toAbsoluteUrl(string url) => $"{api.Endpoint}{url}"; - private string activityToString() + private MessageFormatter.MessageFormatterResult createMessage() { + string userLinkTemplate() => $"[{toAbsoluteUrl(activity.User?.Url)} {activity.User?.Username}]"; + string beatmapLinkTemplate() => $"[{toAbsoluteUrl(activity.Beatmap?.Url)} {activity.Beatmap?.Title}]"; + string beatmapsetLinkTemplate() => $"[{toAbsoluteUrl(activity.Beatmapset?.Url)} {activity.Beatmapset?.Title}]"; + + string message; + switch (activity.Type) { case RecentActivityType.Achievement: - return $"{userLinkTemplate} unlocked the {activity.Achievement.Name} medal!"; + message = $"{userLinkTemplate()} unlocked the {activity.Achievement.Name} medal!"; + break; case RecentActivityType.BeatmapPlaycount: - return $"{beatmapLinkTemplate} has been played {activity.Count} times!"; + message = $"{beatmapLinkTemplate()} has been played {activity.Count} times!"; + break; case RecentActivityType.BeatmapsetApprove: - return $"{beatmapsetLinkTemplate} has been {activity.Approval.ToString().ToLowerInvariant()}!"; + message = $"{beatmapsetLinkTemplate()} has been {activity.Approval.ToString().ToLowerInvariant()}!"; + break; case RecentActivityType.BeatmapsetDelete: - return $"{beatmapsetLinkTemplate} has been deleted."; + message = $"{beatmapsetLinkTemplate()} has been deleted."; + break; case RecentActivityType.BeatmapsetRevive: - return $"{beatmapsetLinkTemplate} has been revived from eternal slumber by {userLinkTemplate}."; + message = $"{beatmapsetLinkTemplate()} has been revived from eternal slumber by {userLinkTemplate()}."; + break; case RecentActivityType.BeatmapsetUpdate: - return $"{userLinkTemplate} has updated the beatmap {beatmapsetLinkTemplate}!"; + message = $"{userLinkTemplate()} has updated the beatmap {beatmapsetLinkTemplate()}!"; + break; case RecentActivityType.BeatmapsetUpload: - return $"{userLinkTemplate} has submitted a new beatmap {beatmapsetLinkTemplate}!"; + message = $"{userLinkTemplate()} has submitted a new beatmap {beatmapsetLinkTemplate()}!"; + break; case RecentActivityType.Medal: // apparently this shouldn't exist look at achievement instead (https://github.com/ppy/osu-web/blob/master/resources/assets/coffee/react/profile-page/recent-activity.coffee#L111) - return string.Empty; + message = string.Empty; + break; case RecentActivityType.Rank: - return $"{userLinkTemplate} achieved rank #{activity.Rank} on {beatmapLinkTemplate} ({activity.Mode}!)"; + message = $"{userLinkTemplate()} achieved rank #{activity.Rank} on {beatmapLinkTemplate()} ({activity.Mode}!)"; + break; case RecentActivityType.RankLost: - return $"{userLinkTemplate} has lost first place on {beatmapLinkTemplate} ({activity.Mode}!)"; + message = $"{userLinkTemplate()} has lost first place on {beatmapLinkTemplate()} ({activity.Mode}!)"; + break; case RecentActivityType.UserSupportAgain: - return $"{userLinkTemplate} has once again chosen to support osu! - thanks for your generosity!"; + message = $"{userLinkTemplate()} has once again chosen to support osu! - thanks for your generosity!"; + break; case RecentActivityType.UserSupportFirst: - return $"{userLinkTemplate} has become an osu! supporter - thanks for your generosity!"; + message = $"{userLinkTemplate()} has become an osu! supporter - thanks for your generosity!"; + break; case RecentActivityType.UserSupportGift: - return $"{userLinkTemplate} has received the gift of osu! supporter!"; + message = $"{userLinkTemplate()} has received the gift of osu! supporter!"; + break; case RecentActivityType.UsernameChange: - return $"{activity.User.PreviousUsername} has changed their username to {userLinkTemplate}!"; + message = $"{activity.User?.PreviousUsername} has changed their username to {userLinkTemplate()}!"; + break; default: - return string.Empty; + message = string.Empty; + break; } + + return MessageFormatter.FormatText(message); } } } From 148551afa2874088f34319a20c0ed967d377a526 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Tue, 6 Mar 2018 14:12:37 +0900 Subject: [PATCH 312/544] osu!-side changes in-line with framework layout changes --- osu.Game/Graphics/Containers/ReverseChildIDFillFlowContainer.cs | 2 +- osu.Game/Screens/Menu/FlowContainerWithOrigin.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/osu.Game/Graphics/Containers/ReverseChildIDFillFlowContainer.cs b/osu.Game/Graphics/Containers/ReverseChildIDFillFlowContainer.cs index 9f028490ef..5e92eead46 100644 --- a/osu.Game/Graphics/Containers/ReverseChildIDFillFlowContainer.cs +++ b/osu.Game/Graphics/Containers/ReverseChildIDFillFlowContainer.cs @@ -12,6 +12,6 @@ namespace osu.Game.Graphics.Containers { protected override int Compare(Drawable x, Drawable y) => CompareReverseChildID(x, y); - protected override IEnumerable FlowingChildren => base.FlowingChildren.Reverse(); + public override IEnumerable FlowingChildren => base.FlowingChildren.Reverse(); } } diff --git a/osu.Game/Screens/Menu/FlowContainerWithOrigin.cs b/osu.Game/Screens/Menu/FlowContainerWithOrigin.cs index 29ae35fca4..e61c309931 100644 --- a/osu.Game/Screens/Menu/FlowContainerWithOrigin.cs +++ b/osu.Game/Screens/Menu/FlowContainerWithOrigin.cs @@ -22,7 +22,7 @@ namespace osu.Game.Screens.Menu protected override int Compare(Drawable x, Drawable y) => CompareReverseChildID(x, y); - protected override IEnumerable FlowingChildren => base.FlowingChildren.Reverse(); + public override IEnumerable FlowingChildren => base.FlowingChildren.Reverse(); public override Anchor Origin => Anchor.Custom; From 27e0ed4ea8fb6299ddc8b8c54949fbd9bbf6dccc Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Tue, 6 Mar 2018 14:16:17 +0900 Subject: [PATCH 313/544] Update framework --- osu-framework | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu-framework b/osu-framework index 71900dc350..adf1e9548d 160000 --- a/osu-framework +++ b/osu-framework @@ -1 +1 @@ -Subproject commit 71900dc350bcebbb60d912d4023a1d2a6bbbc3c1 +Subproject commit adf1e9548d1fff8717c87eedb358a3c2517358a8 From 78d73d4c11c40772221a75a9dd859a5e92aec1b9 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Tue, 6 Mar 2018 17:20:58 +0900 Subject: [PATCH 314/544] Additional fixes for flow ordering after framework changes --- .../ReverseChildIDFillFlowContainer.cs | 4 --- .../Graphics/UserInterface/OsuTabControl.cs | 14 +++++++++ osu.Game/Overlays/Chat/ChatTabControl.cs | 4 +-- osu.Game/Overlays/Music/PlaylistList.cs | 20 +++++-------- osu.Game/Overlays/NotificationOverlay.cs | 5 ++-- .../Notifications/NotificationSection.cs | 7 +++-- .../Sections/Ranks/DrawableProfileScore.cs | 10 ++++--- osu.Game/Overlays/Settings/SettingsItem.cs | 3 +- .../Screens/Menu/FlowContainerWithOrigin.cs | 4 --- osu.Game/Screens/Select/Footer.cs | 30 +++++++++++-------- .../Select/Options/BeatmapOptionsOverlay.cs | 7 +++-- 11 files changed, 63 insertions(+), 45 deletions(-) diff --git a/osu.Game/Graphics/Containers/ReverseChildIDFillFlowContainer.cs b/osu.Game/Graphics/Containers/ReverseChildIDFillFlowContainer.cs index 5e92eead46..5803c8a5db 100644 --- a/osu.Game/Graphics/Containers/ReverseChildIDFillFlowContainer.cs +++ b/osu.Game/Graphics/Containers/ReverseChildIDFillFlowContainer.cs @@ -1,8 +1,6 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE -using System.Collections.Generic; -using System.Linq; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; @@ -11,7 +9,5 @@ namespace osu.Game.Graphics.Containers public class ReverseChildIDFillFlowContainer : FillFlowContainer where T : Drawable { protected override int Compare(Drawable x, Drawable y) => CompareReverseChildID(x, y); - - public override IEnumerable FlowingChildren => base.FlowingChildren.Reverse(); } } diff --git a/osu.Game/Graphics/UserInterface/OsuTabControl.cs b/osu.Game/Graphics/UserInterface/OsuTabControl.cs index 7ad9bc73a8..20385a7dae 100644 --- a/osu.Game/Graphics/UserInterface/OsuTabControl.cs +++ b/osu.Game/Graphics/UserInterface/OsuTabControl.cs @@ -9,6 +9,7 @@ using osu.Framework.Allocation; using osu.Framework.Extensions; using osu.Framework.Extensions.Color4Extensions; using osu.Framework.Graphics; +using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Shapes; using osu.Framework.Graphics.Sprites; using osu.Framework.Graphics.UserInterface; @@ -56,6 +57,14 @@ namespace osu.Game.Graphics.UserInterface } } + protected override TabFillFlowContainer CreateTabFlow() => new OsuTabFillFlowContainer + { + Direction = FillDirection.Full, + RelativeSizeAxes = Axes.Both, + Depth = -1, + Masking = true + }; + public class OsuTabItem : TabItem, IHasAccentColour { protected readonly SpriteText Text; @@ -239,5 +248,10 @@ namespace osu.Game.Graphics.UserInterface } } } + + private class OsuTabFillFlowContainer : TabFillFlowContainer + { + protected override int Compare(Drawable x, Drawable y) => CompareReverseChildID(x, y); + } } } diff --git a/osu.Game/Overlays/Chat/ChatTabControl.cs b/osu.Game/Overlays/Chat/ChatTabControl.cs index f028590bb4..1d3dab249d 100644 --- a/osu.Game/Overlays/Chat/ChatTabControl.cs +++ b/osu.Game/Overlays/Chat/ChatTabControl.cs @@ -53,9 +53,9 @@ namespace osu.Game.Overlays.Chat protected override void AddTabItem(TabItem item, bool addToDropdown = true) { - if (selectorTab.Depth < float.MaxValue) + if (item != selectorTab && TabContainer.GetLayoutPosition(selectorTab) < float.MaxValue) // performTabSort might've made selectorTab's position wonky, fix it - TabContainer.ChangeChildDepth(selectorTab, float.MaxValue); + TabContainer.SetLayoutPosition(selectorTab, float.MaxValue); base.AddTabItem(item, addToDropdown); diff --git a/osu.Game/Overlays/Music/PlaylistList.cs b/osu.Game/Overlays/Music/PlaylistList.cs index 31b7d0f9aa..03ce7fd88f 100644 --- a/osu.Game/Overlays/Music/PlaylistList.cs +++ b/osu.Game/Overlays/Music/PlaylistList.cs @@ -101,11 +101,10 @@ namespace osu.Game.Overlays.Music public void AddBeatmapSet(BeatmapSetInfo beatmapSet) { - items.Add(new PlaylistItem(beatmapSet) - { - OnSelect = set => OnSelect?.Invoke(set), - Depth = items.Count - }); + var newItem = new PlaylistItem(beatmapSet) { OnSelect = set => OnSelect?.Invoke(set) }; + + items.Add(newItem); + items.SetLayoutPosition(newItem, items.Count); } public void RemoveBeatmapSet(BeatmapSetInfo beatmapSet) @@ -197,7 +196,7 @@ namespace osu.Game.Overlays.Music { var itemsPos = items.ToLocalSpace(nativeDragPosition); - int srcIndex = (int)draggedItem.Depth; + int srcIndex = (int)items.GetLayoutPosition(draggedItem); // Find the last item with position < mouse position. Note we can't directly use // the item positions as they are being transformed @@ -219,15 +218,15 @@ namespace osu.Game.Overlays.Music if (srcIndex < dstIndex) { for (int i = srcIndex + 1; i <= dstIndex; i++) - items.ChangeChildDepth(items[i], i - 1); + items.SetLayoutPosition(items[i], i - 1); } else { for (int i = dstIndex; i < srcIndex; i++) - items.ChangeChildDepth(items[i], i + 1); + items.SetLayoutPosition(items[i], i + 1); } - items.ChangeChildDepth(draggedItem, dstIndex); + items.SetLayoutPosition(draggedItem, dstIndex); } private class ItemSearchContainer : FillFlowContainer, IHasFilterableChildren @@ -243,9 +242,6 @@ namespace osu.Game.Overlays.Music } } - // Compare with reversed ChildID and Depth - protected override int Compare(Drawable x, Drawable y) => base.Compare(y, x); - public IEnumerable FilterableChildren => Children; public ItemSearchContainer() diff --git a/osu.Game/Overlays/NotificationOverlay.cs b/osu.Game/Overlays/NotificationOverlay.cs index 2f46bb4a71..48ad507d88 100644 --- a/osu.Game/Overlays/NotificationOverlay.cs +++ b/osu.Game/Overlays/NotificationOverlay.cs @@ -129,7 +129,6 @@ namespace osu.Game.Overlays public void Post(Notification notification) => postScheduler.Add(() => { ++runningDepth; - notification.Depth = notification.DisplayOnTop ? runningDepth : -runningDepth; notification.Closed += notificationClosed; @@ -138,7 +137,9 @@ namespace osu.Game.Overlays hasCompletionTarget.CompletionTarget = Post; var ourType = notification.GetType(); - sections.Children.FirstOrDefault(s => s.AcceptTypes.Any(accept => accept.IsAssignableFrom(ourType)))?.Add(notification); + + var section = sections.Children.FirstOrDefault(s => s.AcceptTypes.Any(accept => accept.IsAssignableFrom(ourType))); + section?.Add(notification, notification.DisplayOnTop ? -runningDepth : runningDepth); updateCounts(); }); diff --git a/osu.Game/Overlays/Notifications/NotificationSection.cs b/osu.Game/Overlays/Notifications/NotificationSection.cs index 13a69fbe3a..533f5326e3 100644 --- a/osu.Game/Overlays/Notifications/NotificationSection.cs +++ b/osu.Game/Overlays/Notifications/NotificationSection.cs @@ -25,10 +25,13 @@ namespace osu.Game.Overlays.Notifications private FlowContainer notifications; public int DisplayedCount => notifications.Count(n => !n.WasClosed); - public int UnreadCount => notifications.Count(n => !n.WasClosed && !n.Read); - public void Add(Notification notification) => notifications.Add(notification); + public void Add(Notification notification, float position) + { + notifications.Add(notification); + notifications.SetLayoutPosition(notification, position); + } public IEnumerable AcceptTypes; diff --git a/osu.Game/Overlays/Profile/Sections/Ranks/DrawableProfileScore.cs b/osu.Game/Overlays/Profile/Sections/Ranks/DrawableProfileScore.cs index 51b202844a..bb1a409f2e 100644 --- a/osu.Game/Overlays/Profile/Sections/Ranks/DrawableProfileScore.cs +++ b/osu.Game/Overlays/Profile/Sections/Ranks/DrawableProfileScore.cs @@ -40,16 +40,18 @@ namespace osu.Game.Overlays.Profile.Sections.Ranks [BackgroundDependencyLoader(true)] private void load(OsuColour colour) { - RightFlowContainer.Add(new OsuSpriteText + var text = new OsuSpriteText { Text = $"accuracy: {Score.Accuracy:P2}", Anchor = Anchor.TopRight, Origin = Anchor.TopRight, Colour = colour.GrayA, TextSize = 11, - Font = "Exo2.0-RegularItalic", - Depth = -1, - }); + Font = "Exo2.0-RegularItalic" + }; + + RightFlowContainer.Add(text); + RightFlowContainer.SetLayoutPosition(text, 1); LeftFlowContainer.Add(new BeatmapMetadataContainer(Score.Beatmap)); LeftFlowContainer.Add(new OsuSpriteText diff --git a/osu.Game/Overlays/Settings/SettingsItem.cs b/osu.Game/Overlays/Settings/SettingsItem.cs index 5afc415d83..cc290fe1bb 100644 --- a/osu.Game/Overlays/Settings/SettingsItem.cs +++ b/osu.Game/Overlays/Settings/SettingsItem.cs @@ -45,7 +45,8 @@ namespace osu.Game.Overlays.Settings if (text == null) { // construct lazily for cases where the label is not needed (may be provided by the Control). - Add(text = new OsuSpriteText { Depth = 1 }); + Add(text = new OsuSpriteText()); + FlowContent.SetLayoutPosition(text, -1); } text.Text = value; diff --git a/osu.Game/Screens/Menu/FlowContainerWithOrigin.cs b/osu.Game/Screens/Menu/FlowContainerWithOrigin.cs index e61c309931..ae1e995373 100644 --- a/osu.Game/Screens/Menu/FlowContainerWithOrigin.cs +++ b/osu.Game/Screens/Menu/FlowContainerWithOrigin.cs @@ -4,8 +4,6 @@ using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using OpenTK; -using System.Collections.Generic; -using System.Linq; namespace osu.Game.Screens.Menu { @@ -22,8 +20,6 @@ namespace osu.Game.Screens.Menu protected override int Compare(Drawable x, Drawable y) => CompareReverseChildID(x, y); - public override IEnumerable FlowingChildren => base.FlowingChildren.Reverse(); - public override Anchor Origin => Anchor.Custom; public override Vector2 OriginPosition diff --git a/osu.Game/Screens/Select/Footer.cs b/osu.Game/Screens/Select/Footer.cs index 21e6108489..be83d7b500 100644 --- a/osu.Game/Screens/Select/Footer.cs +++ b/osu.Game/Screens/Select/Footer.cs @@ -41,19 +41,25 @@ namespace osu.Game.Screens.Select /// Higher depth to be put on the left, and lower to be put on the right. /// Notice this is different to ! /// - public void AddButton(string text, Color4 colour, Action action, Key? hotkey = null, float depth = 0) => buttons.Add(new FooterButton + public void AddButton(string text, Color4 colour, Action action, Key? hotkey = null, float depth = 0) { - Text = text, - Height = play_song_select_button_height, - Width = play_song_select_button_width, - Depth = depth, - SelectedColour = colour, - DeselectedColour = colour.Opacity(0.5f), - Hotkey = hotkey, - Hovered = updateModeLight, - HoverLost = updateModeLight, - Action = action, - }); + var button = new FooterButton + { + Text = text, + Height = play_song_select_button_height, + Width = play_song_select_button_width, + Depth = depth, + SelectedColour = colour, + DeselectedColour = colour.Opacity(0.5f), + Hotkey = hotkey, + Hovered = updateModeLight, + HoverLost = updateModeLight, + Action = action, + }; + + buttons.Add(button); + buttons.SetLayoutPosition(button, -depth); + } private readonly List overlays = new List(); diff --git a/osu.Game/Screens/Select/Options/BeatmapOptionsOverlay.cs b/osu.Game/Screens/Select/Options/BeatmapOptionsOverlay.cs index 2e8b2f9014..dee1ec4511 100644 --- a/osu.Game/Screens/Select/Options/BeatmapOptionsOverlay.cs +++ b/osu.Game/Screens/Select/Options/BeatmapOptionsOverlay.cs @@ -95,7 +95,7 @@ namespace osu.Game.Screens.Select.Options /// public void AddButton(string firstLine, string secondLine, FontAwesome icon, Color4 colour, Action action, Key? hotkey = null, float depth = 0) { - buttonsContainer.Add(new BeatmapOptionsButton + var button = new BeatmapOptionsButton { FirstLineText = firstLine, SecondLineText = secondLine, @@ -108,7 +108,10 @@ namespace osu.Game.Screens.Select.Options action?.Invoke(); }, HotKey = hotkey - }); + }; + + buttonsContainer.Add(button); + buttonsContainer.SetLayoutPosition(button, depth); } } } From 07bf8549ebffabfd40fdce3f3db3a756e90a4037 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 6 Mar 2018 17:29:22 +0900 Subject: [PATCH 315/544] Fix arbitrary API request errors getting identified as timeouts --- osu.Game/Online/API/APIAccess.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game/Online/API/APIAccess.cs b/osu.Game/Online/API/APIAccess.cs index 90f3999ddd..1325179e0d 100644 --- a/osu.Game/Online/API/APIAccess.cs +++ b/osu.Game/Online/API/APIAccess.cs @@ -199,7 +199,7 @@ namespace osu.Game.Online.API } catch (WebException we) { - HttpStatusCode statusCode = (we.Response as HttpWebResponse)?.StatusCode ?? HttpStatusCode.RequestTimeout; + HttpStatusCode statusCode = (we.Response as HttpWebResponse)?.StatusCode ?? (we.Status == WebExceptionStatus.UnknownError ? HttpStatusCode.NotAcceptable : HttpStatusCode.RequestTimeout); switch (statusCode) { From e82cadc811de0413e6b566b2a6b8762c26f5ab55 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 6 Mar 2018 17:29:58 +0900 Subject: [PATCH 316/544] Make LegacyID nullable The -1 default was getting stored to the database. --- osu.Game.Rulesets.Catch/CatchRuleset.cs | 2 +- osu.Game.Rulesets.Mania/ManiaRuleset.cs | 2 +- osu.Game.Rulesets.Osu/OsuRuleset.cs | 2 +- osu.Game.Rulesets.Taiko/TaikoRuleset.cs | 2 +- osu.Game/Rulesets/Ruleset.cs | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/osu.Game.Rulesets.Catch/CatchRuleset.cs b/osu.Game.Rulesets.Catch/CatchRuleset.cs index d49e9c7c26..4dbe65b3ce 100644 --- a/osu.Game.Rulesets.Catch/CatchRuleset.cs +++ b/osu.Game.Rulesets.Catch/CatchRuleset.cs @@ -101,7 +101,7 @@ namespace osu.Game.Rulesets.Catch public override DifficultyCalculator CreateDifficultyCalculator(Beatmap beatmap, Mod[] mods = null) => new CatchDifficultyCalculator(beatmap); - public override int LegacyID => 2; + public override int? LegacyID => 2; public override IConvertibleReplayFrame CreateConvertibleReplayFrame() => new CatchReplayFrame(); diff --git a/osu.Game.Rulesets.Mania/ManiaRuleset.cs b/osu.Game.Rulesets.Mania/ManiaRuleset.cs index 3ad498e6ea..16b6888f2b 100644 --- a/osu.Game.Rulesets.Mania/ManiaRuleset.cs +++ b/osu.Game.Rulesets.Mania/ManiaRuleset.cs @@ -114,7 +114,7 @@ namespace osu.Game.Rulesets.Mania public override DifficultyCalculator CreateDifficultyCalculator(Beatmap beatmap, Mod[] mods = null) => new ManiaDifficultyCalculator(beatmap); - public override int LegacyID => 3; + public override int? LegacyID => 3; public override IConvertibleReplayFrame CreateConvertibleReplayFrame() => new ManiaReplayFrame(); diff --git a/osu.Game.Rulesets.Osu/OsuRuleset.cs b/osu.Game.Rulesets.Osu/OsuRuleset.cs index 3f0aea5cb2..d407835a96 100644 --- a/osu.Game.Rulesets.Osu/OsuRuleset.cs +++ b/osu.Game.Rulesets.Osu/OsuRuleset.cs @@ -145,7 +145,7 @@ namespace osu.Game.Rulesets.Osu public override SettingsSubsection CreateSettings() => new OsuSettings(); - public override int LegacyID => 0; + public override int? LegacyID => 0; public override IConvertibleReplayFrame CreateConvertibleReplayFrame() => new OsuReplayFrame(); diff --git a/osu.Game.Rulesets.Taiko/TaikoRuleset.cs b/osu.Game.Rulesets.Taiko/TaikoRuleset.cs index 713506e831..0a9719f27b 100644 --- a/osu.Game.Rulesets.Taiko/TaikoRuleset.cs +++ b/osu.Game.Rulesets.Taiko/TaikoRuleset.cs @@ -103,7 +103,7 @@ namespace osu.Game.Rulesets.Taiko public override DifficultyCalculator CreateDifficultyCalculator(Beatmap beatmap, Mod[] mods = null) => new TaikoDifficultyCalculator(beatmap); - public override int LegacyID => 1; + public override int? LegacyID => 1; public override IConvertibleReplayFrame CreateConvertibleReplayFrame() => new TaikoReplayFrame(); diff --git a/osu.Game/Rulesets/Ruleset.cs b/osu.Game/Rulesets/Ruleset.cs index f9b64995f9..cba849a491 100644 --- a/osu.Game/Rulesets/Ruleset.cs +++ b/osu.Game/Rulesets/Ruleset.cs @@ -64,7 +64,7 @@ namespace osu.Game.Rulesets /// /// Do not override this unless you are a legacy mode. /// - public virtual int LegacyID => -1; + public virtual int? LegacyID => null; /// /// A unique short name to reference this ruleset in online requests. From 7cf1d4450ac671f7c6a44e1d08b4c14ce7e0dbc6 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 6 Mar 2018 17:33:42 +0900 Subject: [PATCH 317/544] SliderTick transform improvements --- .../Objects/Drawables/DrawableSliderTick.cs | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSliderTick.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSliderTick.cs index baa9eac1a3..c2d13e4e08 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSliderTick.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSliderTick.cs @@ -31,6 +31,8 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables BorderThickness = 2; BorderColour = Color4.White; + Alpha = 0; + Children = new Drawable[] { new Box @@ -50,10 +52,8 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables protected override void UpdatePreemptState() { - this.Animate( - d => d.FadeIn(ANIM_DURATION), - d => d.ScaleTo(0.5f).ScaleTo(1f, ANIM_DURATION * 4, Easing.OutElasticHalf) - ); + this.FadeOut().FadeIn(ANIM_DURATION); + this.ScaleTo(0.5f).ScaleTo(1f, ANIM_DURATION * 4, Easing.OutElasticHalf); } protected override void UpdateCurrentState(ArmedState state) @@ -64,12 +64,12 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables this.Delay(HitObject.TimePreempt).FadeOut(); break; case ArmedState.Miss: - this.FadeOut(ANIM_DURATION) - .FadeColour(Color4.Red, ANIM_DURATION / 2); + this.FadeOut(ANIM_DURATION); + this.FadeColour(Color4.Red, ANIM_DURATION / 2); break; case ArmedState.Hit: - this.FadeOut(ANIM_DURATION, Easing.OutQuint) - .ScaleTo(Scale * 1.5f, ANIM_DURATION, Easing.Out); + this.FadeOut(ANIM_DURATION, Easing.OutQuint); + this.ScaleTo(Scale * 1.5f, ANIM_DURATION, Easing.Out); break; } } From 4dfd3a61ccd8b0fb6871d29ef1f1269bd47f9a2a Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 6 Mar 2018 18:40:39 +0900 Subject: [PATCH 318/544] Remove alpha setting --- osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSliderTick.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSliderTick.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSliderTick.cs index c2d13e4e08..058e3606f4 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSliderTick.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSliderTick.cs @@ -31,8 +31,6 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables BorderThickness = 2; BorderColour = Color4.White; - Alpha = 0; - Children = new Drawable[] { new Box From 08c469a8b3494446ea5d4d9e7294164a86cfc9f3 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 7 Mar 2018 13:22:08 +0900 Subject: [PATCH 319/544] Update framework --- osu-framework | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu-framework b/osu-framework index adf1e9548d..6372fb22c1 160000 --- a/osu-framework +++ b/osu-framework @@ -1 +1 @@ -Subproject commit adf1e9548d1fff8717c87eedb358a3c2517358a8 +Subproject commit 6372fb22c1c85f600921a139849b8dedf71026d5 From e2f9e237e8dc8e73174f62cf7fc35744041c86e6 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 7 Mar 2018 14:07:04 +0900 Subject: [PATCH 320/544] Use GradientHorizontal helper function --- osu.Game/Overlays/VolumeOverlay.cs | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/osu.Game/Overlays/VolumeOverlay.cs b/osu.Game/Overlays/VolumeOverlay.cs index f764a83c7a..17a4b139b0 100644 --- a/osu.Game/Overlays/VolumeOverlay.cs +++ b/osu.Game/Overlays/VolumeOverlay.cs @@ -43,13 +43,7 @@ namespace osu.Game.Overlays { RelativeSizeAxes = Axes.Y, Width = 300, - Colour = new ColourInfo - { - TopLeft = Color4.Black.Opacity(0.75f), - BottomLeft = Color4.Black.Opacity(0.75f), - TopRight = Color4.Black.Opacity(0), - BottomRight = Color4.Black.Opacity(0), - } + Colour = ColourInfo.GradientHorizontal(Color4.Black.Opacity(0.75f), Color4.Black.Opacity(0)) }, new FillFlowContainer { From fac4cd6a32b63463163c6a91bd5490bf6149c525 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 7 Mar 2018 14:19:31 +0900 Subject: [PATCH 321/544] Move to overlayContent --- osu.Game/OsuGame.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game/OsuGame.cs b/osu.Game/OsuGame.cs index a6f650d23d..e2bc240e8c 100644 --- a/osu.Game/OsuGame.cs +++ b/osu.Game/OsuGame.cs @@ -232,7 +232,7 @@ namespace osu.Game }, }, overlayContent.Add); - loadComponentSingleFile(volume = new VolumeOverlay(), Add); + loadComponentSingleFile(volume = new VolumeOverlay(), overlayContent.Add); loadComponentSingleFile(onscreenDisplay = new OnScreenDisplay(), Add); //overlay elements From 51a9dd038ee5c09b429706e71710c85bfb0e3b71 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 7 Mar 2018 14:38:41 +0900 Subject: [PATCH 322/544] Add default bindable values --- osu.Game/Overlays/Volume/VolumeMeter.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game/Overlays/Volume/VolumeMeter.cs b/osu.Game/Overlays/Volume/VolumeMeter.cs index 984ade9de0..c840eb790d 100644 --- a/osu.Game/Overlays/Volume/VolumeMeter.cs +++ b/osu.Game/Overlays/Volume/VolumeMeter.cs @@ -26,7 +26,7 @@ namespace osu.Game.Overlays.Volume public class VolumeMeter : Container, IKeyBindingHandler { private CircularProgress volumeCircle; - public BindableDouble Bindable { get; } = new BindableDouble(); + public BindableDouble Bindable { get; } = new BindableDouble { MinValue = 0, MaxValue = 1 }; private readonly float circleSize; private readonly Color4 meterColour; private readonly string name; From 05a13d4d393e10cdd87e06ebb9ef7c89cf8b7de8 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 7 Mar 2018 14:50:50 +0900 Subject: [PATCH 323/544] Improve the way bindings are done --- osu.Game/Overlays/Volume/VolumeMeter.cs | 46 +++++++++++++------------ 1 file changed, 24 insertions(+), 22 deletions(-) diff --git a/osu.Game/Overlays/Volume/VolumeMeter.cs b/osu.Game/Overlays/Volume/VolumeMeter.cs index c840eb790d..99ac4d3a79 100644 --- a/osu.Game/Overlays/Volume/VolumeMeter.cs +++ b/osu.Game/Overlays/Volume/VolumeMeter.cs @@ -3,7 +3,6 @@ using System; using System.Globalization; -using JetBrains.Annotations; using osu.Framework.Allocation; using osu.Framework.Configuration; using osu.Framework.Extensions.Color4Extensions; @@ -14,7 +13,6 @@ using osu.Framework.Graphics.Shapes; using osu.Framework.Graphics.Transforms; using osu.Framework.Graphics.UserInterface; using osu.Framework.Input.Bindings; -using osu.Framework.MathUtils; using osu.Game.Graphics; using osu.Game.Graphics.Sprites; using osu.Game.Input.Bindings; @@ -31,6 +29,9 @@ namespace osu.Game.Overlays.Volume private readonly Color4 meterColour; private readonly string name; + private OsuSpriteText text; + private BufferedContainer maxGlow; + public VolumeMeter(string name, float circleSize, Color4 meterColour) { this.circleSize = circleSize; @@ -69,9 +70,7 @@ namespace osu.Game.Overlays.Volume } }); - OsuSpriteText text; CircularProgress bgProgress; - BufferedContainer maxGlow; Add(new CircularContainer { @@ -122,33 +121,36 @@ namespace osu.Game.Overlays.Volume } }); - Bindable.ValueChanged += newVolume => this.TransformTo("circleBindable", newVolume * 0.75, 250, Easing.OutQuint); - volumeCircle.Current.ValueChanged += newVolume => //by using this event we sync the meter with the text. newValue has to be divided by 0.75 to give the actual percentage + Bindable.ValueChanged += newVolume => { this.TransformTo("DisplayVolume", newVolume, 400, Easing.OutQuint); }; + + bgProgress.Current.Value = 0.75f; + } + + private double displayVolume; + + /// + /// This is needed because doesn't support + /// + protected double DisplayVolume + { + get => displayVolume; + set { - if (Precision.DefinitelyBigger(newVolume, 0.74)) + displayVolume = value; + + if (displayVolume > 0.99f) { text.Text = "MAX"; maxGlow.EffectColour = meterColour.Opacity(2f); } else { - if (text.Text == "MAX") - maxGlow.EffectColour = Color4.Transparent; - text.Text = Math.Round(newVolume / 0.0075).ToString(CultureInfo.CurrentCulture); + maxGlow.EffectColour = Color4.Transparent; + text.Text = Math.Round(displayVolume * 100).ToString(CultureInfo.CurrentCulture); } - }; - bgProgress.Current.Value = 0.75f; - } - - /// - /// This is needed because doesn't support - /// - [UsedImplicitly] - private double circleBindable - { - get => volumeCircle.Current; - set => volumeCircle.Current.Value = value; + volumeCircle.Current.Value = displayVolume * 0.75f; + } } public double Volume From 96ea42d3ba8353c2b812108ce610e2322fe5298a Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 7 Mar 2018 14:51:34 +0900 Subject: [PATCH 324/544] Ensure initial value is set even if that value is zero --- osu.Game/Overlays/Volume/VolumeMeter.cs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/osu.Game/Overlays/Volume/VolumeMeter.cs b/osu.Game/Overlays/Volume/VolumeMeter.cs index 99ac4d3a79..b9bd39163a 100644 --- a/osu.Game/Overlays/Volume/VolumeMeter.cs +++ b/osu.Game/Overlays/Volume/VolumeMeter.cs @@ -122,10 +122,15 @@ namespace osu.Game.Overlays.Volume }); Bindable.ValueChanged += newVolume => { this.TransformTo("DisplayVolume", newVolume, 400, Easing.OutQuint); }; - bgProgress.Current.Value = 0.75f; } + protected override void LoadComplete() + { + base.LoadComplete(); + Bindable.TriggerChange(); + } + private double displayVolume; /// From 4094ffbddd141ced057da4a9283931ac37ecf271 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 7 Mar 2018 14:54:15 +0900 Subject: [PATCH 325/544] Remove unnecessary comment --- osu.Game/Overlays/Volume/VolumeMeter.cs | 3 --- 1 file changed, 3 deletions(-) diff --git a/osu.Game/Overlays/Volume/VolumeMeter.cs b/osu.Game/Overlays/Volume/VolumeMeter.cs index b9bd39163a..056ba6aa8d 100644 --- a/osu.Game/Overlays/Volume/VolumeMeter.cs +++ b/osu.Game/Overlays/Volume/VolumeMeter.cs @@ -133,9 +133,6 @@ namespace osu.Game.Overlays.Volume private double displayVolume; - /// - /// This is needed because doesn't support - /// protected double DisplayVolume { get => displayVolume; From a71e5ce19c1f42eb2d0dc18e40d925644dad63d8 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 7 Mar 2018 14:54:54 +0900 Subject: [PATCH 326/544] Tidy up --- osu.Game/Overlays/Volume/VolumeMeter.cs | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/osu.Game/Overlays/Volume/VolumeMeter.cs b/osu.Game/Overlays/Volume/VolumeMeter.cs index 056ba6aa8d..64b9e513c4 100644 --- a/osu.Game/Overlays/Volume/VolumeMeter.cs +++ b/osu.Game/Overlays/Volume/VolumeMeter.cs @@ -10,7 +10,6 @@ using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Effects; using osu.Framework.Graphics.Shapes; -using osu.Framework.Graphics.Transforms; using osu.Framework.Graphics.UserInterface; using osu.Framework.Input.Bindings; using osu.Game.Graphics; @@ -161,15 +160,9 @@ namespace osu.Game.Overlays.Volume private set => Bindable.Value = value; } - public void Increase() - { - Volume += 0.05f; - } + public void Increase() => Volume += 0.05f; - public void Decrease() - { - Volume -= 0.05f; - } + public void Decrease() => Volume -= 0.05f; public bool OnPressed(GlobalAction action) { From bd952ce370453f7e63ae18153dc56f9098db5c7e Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 7 Mar 2018 18:20:20 +0900 Subject: [PATCH 327/544] Allow skinnable drawables to be of non-restricted size --- osu.Game/Skinning/LegacySkin.cs | 10 +++------ osu.Game/Skinning/SkinnableDrawable.cs | 29 ++++++++++++++++++++++---- 2 files changed, 28 insertions(+), 11 deletions(-) diff --git a/osu.Game/Skinning/LegacySkin.cs b/osu.Game/Skinning/LegacySkin.cs index 17fe6369a7..f03d1ce632 100644 --- a/osu.Game/Skinning/LegacySkin.cs +++ b/osu.Game/Skinning/LegacySkin.cs @@ -32,12 +32,7 @@ namespace osu.Game.Skinning var texture = textures.Get(componentName); if (texture == null) return null; - return new Sprite - { - RelativeSizeAxes = Axes.Both, - FillMode = FillMode.Fit, - Texture = texture, - }; + return new Sprite { Texture = texture }; } public override SampleChannel GetSample(string sampleName) => samples.Get(sampleName); @@ -48,7 +43,8 @@ namespace osu.Game.Skinning private readonly IResourceStore underlyingStore; private string getPathForFile(string filename) => - skin.Files.FirstOrDefault(f => string.Equals(Path.GetFileNameWithoutExtension(f.Filename), filename.Split('/').Last(), StringComparison.InvariantCultureIgnoreCase))?.FileInfo.StoragePath; + skin.Files.FirstOrDefault(f => string.Equals(Path.GetFileNameWithoutExtension(f.Filename), filename.Split('/').Last(), StringComparison.InvariantCultureIgnoreCase))?.FileInfo + .StoragePath; public LegacySkinResourceStore(SkinInfo skin, IResourceStore underlyingStore) { diff --git a/osu.Game/Skinning/SkinnableDrawable.cs b/osu.Game/Skinning/SkinnableDrawable.cs index cd669778a6..a5f22f60a2 100644 --- a/osu.Game/Skinning/SkinnableDrawable.cs +++ b/osu.Game/Skinning/SkinnableDrawable.cs @@ -3,13 +3,14 @@ using System; using osu.Framework.Graphics; +using OpenTK; namespace osu.Game.Skinning { public class SkinnableDrawable : SkinnableDrawable { - public SkinnableDrawable(string name, Func defaultImplementation, bool fallback = true) - : base(name, defaultImplementation, fallback) + public SkinnableDrawable(string name, Func defaultImplementation, bool fallback = true, bool restrictSize = true) + : base(name, defaultImplementation, fallback, restrictSize) { } } @@ -21,10 +22,16 @@ namespace osu.Game.Skinning private readonly string componentName; - public SkinnableDrawable(string name, Func defaultImplementation, bool fallback = true) : base(fallback) + /// + /// Whether a user-skin drawable should be limited to the size of our parent. + /// + public readonly bool RestrictSize; + + public SkinnableDrawable(string name, Func defaultImplementation, bool fallback = true, bool restrictSize = true) : base(fallback) { componentName = name; createDefault = defaultImplementation; + RestrictSize = restrictSize; RelativeSizeAxes = Axes.Both; } @@ -32,11 +39,25 @@ namespace osu.Game.Skinning protected override void SkinChanged(Skin skin, bool allowFallback) { var drawable = skin.GetDrawableComponent(componentName); - if (drawable == null && allowFallback) + if (drawable != null) + { + if (RestrictSize) + { + drawable.RelativeSizeAxes = Axes.Both; + drawable.Size = Vector2.One; + drawable.FillMode = FillMode.Fit; + } + } + else if (allowFallback) drawable = createDefault(componentName); if (drawable != null) + { + drawable.Origin = Anchor.Centre; + drawable.Anchor = Anchor.Centre; + InternalChild = drawable; + } else ClearInternal(); } From 05eb6786548780dd2231f24c466ba84411de1fa2 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 7 Mar 2018 18:20:35 +0900 Subject: [PATCH 328/544] Add skin support for judgements --- .../Objects/Drawables/DrawableOsuJudgement.cs | 2 +- .../Rulesets/Judgements/DrawableJudgement.cs | 42 ++++++++++++------- 2 files changed, 27 insertions(+), 17 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableOsuJudgement.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableOsuJudgement.cs index 716f4b629b..6d6cae9ca5 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableOsuJudgement.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableOsuJudgement.cs @@ -19,7 +19,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables protected override void LoadComplete() { if (Judgement.Result != HitResult.Miss) - JudgementText.TransformSpacingTo(new Vector2(14, 0), 1800, Easing.OutQuint); + JudgementText?.TransformSpacingTo(new Vector2(14, 0), 1800, Easing.OutQuint); base.LoadComplete(); } diff --git a/osu.Game/Rulesets/Judgements/DrawableJudgement.cs b/osu.Game/Rulesets/Judgements/DrawableJudgement.cs index c1bf55b214..4664517312 100644 --- a/osu.Game/Rulesets/Judgements/DrawableJudgement.cs +++ b/osu.Game/Rulesets/Judgements/DrawableJudgement.cs @@ -10,6 +10,8 @@ using osu.Framework.Graphics.Sprites; using osu.Game.Graphics; using osu.Game.Graphics.Sprites; using osu.Game.Rulesets.Scoring; +using osu.Game.Skinning; +using OpenTK.Graphics; namespace osu.Game.Rulesets.Judgements { @@ -18,9 +20,11 @@ namespace osu.Game.Rulesets.Judgements /// public class DrawableJudgement : Container { + private const float judgement_size = 80; + protected readonly Judgement Judgement; - protected readonly SpriteText JudgementText; + protected SpriteText JudgementText; /// /// Creates a drawable which visualises a . @@ -30,31 +34,37 @@ namespace osu.Game.Rulesets.Judgements { Judgement = judgement; - AutoSizeAxes = Axes.Both; - - Children = new[] - { - JudgementText = new OsuSpriteText - { - Origin = Anchor.Centre, - Anchor = Anchor.Centre, - Text = judgement.Result.GetDescription().ToUpper(), - Font = @"Venera", - Scale = new Vector2(0.85f, 1), - TextSize = 12 - } - }; + Size = new Vector2(judgement_size); } [BackgroundDependencyLoader] private void load(OsuColour colours) { + string legacyName = string.Empty; switch (Judgement.Result) { case HitResult.Miss: - Colour = colours.Red; + legacyName = "hit0"; + break; + case HitResult.Meh: + legacyName = "hit50"; + break; + case HitResult.Good: + legacyName = "hit100"; + break; + case HitResult.Great: + legacyName = "hit300"; break; } + + Child = new SkinnableDrawable($"Play/osu/{legacyName}", _ => JudgementText = new OsuSpriteText + { + Text = Judgement.Result.GetDescription().ToUpper(), + Font = @"Venera", + Colour = Judgement.Result == HitResult.Miss ? colours.Red : Color4.White, + Scale = new Vector2(0.85f, 1), + TextSize = 12 + }, restrictSize: false); } protected override void LoadComplete() From f2d7621df3a05a662819a4c83c7c5a598f6cff0f Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 7 Mar 2018 18:20:52 +0900 Subject: [PATCH 329/544] Add skin support for explode/flash layers Basically to hide them for legacy skins, though. --- .../Objects/Drawables/Pieces/ExplodePiece.cs | 14 ++++++-------- .../Objects/Drawables/Pieces/FlashPiece.cs | 12 ++++++------ 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/ExplodePiece.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/ExplodePiece.cs index 9be951e29c..76ed89be67 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/ExplodePiece.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/ExplodePiece.cs @@ -3,6 +3,7 @@ using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; +using osu.Game.Skinning; using OpenTK; namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces @@ -19,15 +20,12 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces Blending = BlendingMode.Additive; Alpha = 0; - Children = new Drawable[] + Child = new SkinnableDrawable("Play/osu/hitcircle-explode", _ => new TrianglesPiece { - new TrianglesPiece - { - Blending = BlendingMode.Additive, - RelativeSizeAxes = Axes.Both, - Alpha = 0.2f, - } - }; + Blending = BlendingMode.Additive, + RelativeSizeAxes = Axes.Both, + Alpha = 0.2f, + }, false); } } } diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/FlashPiece.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/FlashPiece.cs index 56faa335b1..921d24f69d 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/FlashPiece.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/FlashPiece.cs @@ -5,6 +5,7 @@ using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using OpenTK; using osu.Framework.Graphics.Shapes; +using osu.Game.Skinning; namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces { @@ -14,22 +15,21 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces { Size = new Vector2(128); - Masking = true; - CornerRadius = Size.X / 2; - Anchor = Anchor.Centre; Origin = Anchor.Centre; Blending = BlendingMode.Additive; Alpha = 0; - Children = new Drawable[] + Child = new SkinnableDrawable("Play/osu/hitcircle-flash", name => new CircularContainer { - new Box + Masking = true, + RelativeSizeAxes = Axes.Both, + Child = new Box { RelativeSizeAxes = Axes.Both } - }; + }, false); } } } From b62ed004f274b3bf25704d2d8dfb6ebe909a715a Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 7 Mar 2018 19:14:42 +0900 Subject: [PATCH 330/544] Remove judgements when deciding a new judgement for a HitObject Generally happens when rewinding. --- .../UI/DrawableManiaJudgement.cs | 5 ++-- osu.Game.Rulesets.Mania/UI/ManiaStage.cs | 7 +++--- .../Objects/Drawables/DrawableOsuJudgement.cs | 6 ++--- osu.Game.Rulesets.Osu/UI/OsuPlayfield.cs | 11 ++++----- .../UI/DrawableTaikoJudgement.cs | 7 ++---- osu.Game.Rulesets.Taiko/UI/TaikoPlayfield.cs | 7 +++--- .../Rulesets/Judgements/DrawableJudgement.cs | 6 ++++- osu.Game/Rulesets/UI/JudgementContainer.cs | 24 +++++++++++++++++++ osu.Game/osu.Game.csproj | 1 + 9 files changed, 50 insertions(+), 24 deletions(-) create mode 100644 osu.Game/Rulesets/UI/JudgementContainer.cs diff --git a/osu.Game.Rulesets.Mania/UI/DrawableManiaJudgement.cs b/osu.Game.Rulesets.Mania/UI/DrawableManiaJudgement.cs index 8a03f5a785..b8ae09c4a0 100644 --- a/osu.Game.Rulesets.Mania/UI/DrawableManiaJudgement.cs +++ b/osu.Game.Rulesets.Mania/UI/DrawableManiaJudgement.cs @@ -3,13 +3,14 @@ using osu.Framework.Graphics; using osu.Game.Rulesets.Judgements; +using osu.Game.Rulesets.Objects.Drawables; namespace osu.Game.Rulesets.Mania.UI { internal class DrawableManiaJudgement : DrawableJudgement { - public DrawableManiaJudgement(Judgement judgement) - : base(judgement) + public DrawableManiaJudgement(Judgement judgement, DrawableHitObject judgedObject) + : base(judgement, judgedObject) { JudgementText.TextSize = 25; } diff --git a/osu.Game.Rulesets.Mania/UI/ManiaStage.cs b/osu.Game.Rulesets.Mania/UI/ManiaStage.cs index 2b8039f5df..d4ca704829 100644 --- a/osu.Game.Rulesets.Mania/UI/ManiaStage.cs +++ b/osu.Game.Rulesets.Mania/UI/ManiaStage.cs @@ -15,6 +15,7 @@ using osu.Game.Rulesets.Mania.Beatmaps; using osu.Game.Rulesets.Mania.Objects; using osu.Game.Rulesets.Mania.Objects.Drawables; using osu.Game.Rulesets.Objects.Drawables; +using osu.Game.Rulesets.UI; using osu.Game.Rulesets.UI.Scrolling; using OpenTK; using OpenTK.Graphics; @@ -40,7 +41,7 @@ namespace osu.Game.Rulesets.Mania.UI private readonly Container content; public Container Judgements => judgements; - private readonly Container judgements; + private readonly JudgementContainer judgements; private readonly Container topLevelContainer; @@ -114,7 +115,7 @@ namespace osu.Game.Rulesets.Mania.UI Padding = new MarginPadding { Top = HIT_TARGET_POSITION } } }, - judgements = new Container + judgements = new JudgementContainer { Anchor = Anchor.TopCentre, Origin = Anchor.Centre, @@ -171,7 +172,7 @@ namespace osu.Game.Rulesets.Mania.UI internal void OnJudgement(DrawableHitObject judgedObject, Judgement judgement) { judgements.Clear(); - judgements.Add(new DrawableManiaJudgement(judgement) + judgements.Add(new DrawableManiaJudgement(judgement, judgedObject) { Anchor = Anchor.Centre, Origin = Anchor.Centre, diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableOsuJudgement.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableOsuJudgement.cs index 716f4b629b..0b1df4bdf5 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableOsuJudgement.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableOsuJudgement.cs @@ -2,17 +2,17 @@ // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using osu.Framework.Graphics; -using osu.Game.Rulesets.Osu.Judgements; using OpenTK; using osu.Game.Rulesets.Judgements; +using osu.Game.Rulesets.Objects.Drawables; using osu.Game.Rulesets.Scoring; namespace osu.Game.Rulesets.Osu.Objects.Drawables { public class DrawableOsuJudgement : DrawableJudgement { - public DrawableOsuJudgement(OsuJudgement judgement) - : base(judgement) + public DrawableOsuJudgement(Judgement judgement, DrawableHitObject judgedObject) + : base(judgement, judgedObject) { } diff --git a/osu.Game.Rulesets.Osu/UI/OsuPlayfield.cs b/osu.Game.Rulesets.Osu/UI/OsuPlayfield.cs index 7f8cbce78e..98a8096678 100644 --- a/osu.Game.Rulesets.Osu/UI/OsuPlayfield.cs +++ b/osu.Game.Rulesets.Osu/UI/OsuPlayfield.cs @@ -18,7 +18,7 @@ namespace osu.Game.Rulesets.Osu.UI public class OsuPlayfield : Playfield { private readonly Container approachCircles; - private readonly Container judgementLayer; + private readonly JudgementContainer judgementLayer; private readonly ConnectionRenderer connectionLayer; // Todo: This should not be a thing, but is currently required for the editor @@ -40,7 +40,7 @@ namespace osu.Game.Rulesets.Osu.UI RelativeSizeAxes = Axes.Both, Depth = 2, }, - judgementLayer = new Container + judgementLayer = new JudgementContainer { RelativeSizeAxes = Axes.Both, Depth = 1, @@ -75,16 +75,13 @@ namespace osu.Game.Rulesets.Osu.UI private void onJudgement(DrawableHitObject judgedObject, Judgement judgement) { - var osuJudgement = (OsuJudgement)judgement; - var osuObject = (OsuHitObject)judgedObject.HitObject; - if (!judgedObject.DisplayJudgement) return; - DrawableOsuJudgement explosion = new DrawableOsuJudgement(osuJudgement) + DrawableOsuJudgement explosion = new DrawableOsuJudgement(judgement, judgedObject) { Origin = Anchor.Centre, - Position = osuObject.StackedEndPosition + osuJudgement.PositionOffset + Position = ((OsuHitObject)judgedObject.HitObject).StackedEndPosition + ((OsuJudgement)judgement).PositionOffset }; judgementLayer.Add(explosion); diff --git a/osu.Game.Rulesets.Taiko/UI/DrawableTaikoJudgement.cs b/osu.Game.Rulesets.Taiko/UI/DrawableTaikoJudgement.cs index c0e8bd1b5a..6274232ffd 100644 --- a/osu.Game.Rulesets.Taiko/UI/DrawableTaikoJudgement.cs +++ b/osu.Game.Rulesets.Taiko/UI/DrawableTaikoJudgement.cs @@ -15,17 +15,14 @@ namespace osu.Game.Rulesets.Taiko.UI /// public class DrawableTaikoJudgement : DrawableJudgement { - public readonly DrawableHitObject JudgedObject; - /// /// Creates a new judgement text. /// /// The object which is being judged. /// The judgement to visualise. - public DrawableTaikoJudgement(DrawableHitObject judgedObject, Judgement judgement) - : base(judgement) + public DrawableTaikoJudgement(Judgement judgement, DrawableHitObject judgedObject) + : base(judgement, judgedObject) { - JudgedObject = judgedObject; } [BackgroundDependencyLoader] diff --git a/osu.Game.Rulesets.Taiko/UI/TaikoPlayfield.cs b/osu.Game.Rulesets.Taiko/UI/TaikoPlayfield.cs index 49c87f7480..75aaceaecb 100644 --- a/osu.Game.Rulesets.Taiko/UI/TaikoPlayfield.cs +++ b/osu.Game.Rulesets.Taiko/UI/TaikoPlayfield.cs @@ -16,6 +16,7 @@ using System.Linq; using osu.Game.Rulesets.Judgements; using osu.Game.Rulesets.Taiko.Objects.Drawables; using osu.Game.Beatmaps.ControlPoints; +using osu.Game.Rulesets.UI; using osu.Game.Rulesets.UI.Scrolling; namespace osu.Game.Rulesets.Taiko.UI @@ -41,7 +42,7 @@ namespace osu.Game.Rulesets.Taiko.UI private readonly Container hitExplosionContainer; private readonly Container kiaiExplosionContainer; - private readonly Container judgementContainer; + private readonly JudgementContainer judgementContainer; protected override Container Content => content; private readonly Container content; @@ -131,7 +132,7 @@ namespace osu.Game.Rulesets.Taiko.UI Margin = new MarginPadding { Left = HIT_TARGET_OFFSET }, Blending = BlendingMode.Additive }, - judgementContainer = new Container + judgementContainer = new JudgementContainer { Name = "Judgements", RelativeSizeAxes = Axes.Y, @@ -227,7 +228,7 @@ namespace osu.Game.Rulesets.Taiko.UI { if (judgedObject.DisplayJudgement && judgementContainer.FirstOrDefault(j => j.JudgedObject == judgedObject) == null) { - judgementContainer.Add(new DrawableTaikoJudgement(judgedObject, judgement) + judgementContainer.Add(new DrawableTaikoJudgement(judgement, judgedObject) { Anchor = judgement.IsHit ? Anchor.TopLeft : Anchor.CentreLeft, Origin = judgement.IsHit ? Anchor.BottomCentre : Anchor.Centre, diff --git a/osu.Game/Rulesets/Judgements/DrawableJudgement.cs b/osu.Game/Rulesets/Judgements/DrawableJudgement.cs index c1bf55b214..a3811654f2 100644 --- a/osu.Game/Rulesets/Judgements/DrawableJudgement.cs +++ b/osu.Game/Rulesets/Judgements/DrawableJudgement.cs @@ -9,6 +9,7 @@ using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Sprites; using osu.Game.Graphics; using osu.Game.Graphics.Sprites; +using osu.Game.Rulesets.Objects.Drawables; using osu.Game.Rulesets.Scoring; namespace osu.Game.Rulesets.Judgements @@ -20,15 +21,18 @@ namespace osu.Game.Rulesets.Judgements { protected readonly Judgement Judgement; + public readonly DrawableHitObject JudgedObject; + protected readonly SpriteText JudgementText; /// /// Creates a drawable which visualises a . /// /// The judgement to visualise. - public DrawableJudgement(Judgement judgement) + public DrawableJudgement(Judgement judgement, DrawableHitObject judgedObject) { Judgement = judgement; + JudgedObject = judgedObject; AutoSizeAxes = Axes.Both; diff --git a/osu.Game/Rulesets/UI/JudgementContainer.cs b/osu.Game/Rulesets/UI/JudgementContainer.cs new file mode 100644 index 0000000000..1291b9fc98 --- /dev/null +++ b/osu.Game/Rulesets/UI/JudgementContainer.cs @@ -0,0 +1,24 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using System; +using osu.Framework.Graphics.Containers; +using osu.Game.Rulesets.Judgements; + +namespace osu.Game.Rulesets.UI +{ + public class JudgementContainer : Container + where T : DrawableJudgement + { + public override void Add(T judgement) + { + if (judgement == null) throw new ArgumentNullException(nameof(judgement)); + + // remove any existing judgements for the judged object. + // this can be the case when rewinding. + RemoveAll(c => c.JudgedObject == judgement.JudgedObject); + + base.Add(judgement); + } + } +} diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index b8ada7c017..2a72023e74 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -374,6 +374,7 @@ + From fe3ab94afbfc84665e28fa8df731a507d6a3656c Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 7 Mar 2018 19:19:56 +0900 Subject: [PATCH 331/544] Fix mania judgement regression --- osu.Game.Rulesets.Mania/UI/DrawableManiaJudgement.cs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/osu.Game.Rulesets.Mania/UI/DrawableManiaJudgement.cs b/osu.Game.Rulesets.Mania/UI/DrawableManiaJudgement.cs index 8a03f5a785..ab3c5bcbb8 100644 --- a/osu.Game.Rulesets.Mania/UI/DrawableManiaJudgement.cs +++ b/osu.Game.Rulesets.Mania/UI/DrawableManiaJudgement.cs @@ -1,6 +1,7 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using osu.Framework.Allocation; using osu.Framework.Graphics; using osu.Game.Rulesets.Judgements; @@ -11,7 +12,13 @@ namespace osu.Game.Rulesets.Mania.UI public DrawableManiaJudgement(Judgement judgement) : base(judgement) { - JudgementText.TextSize = 25; + } + + [BackgroundDependencyLoader] + private void load() + { + if (JudgementText != null) + JudgementText.TextSize = 25; } protected override void LoadComplete() From 04f5563238d874c585d4414951300532eb602c8f Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 7 Mar 2018 19:37:26 +0900 Subject: [PATCH 332/544] Match HP drain harshness closer to stable Based on number of misses before fail on two arbitrary tests. Obviously not final, just making the game more playable for the time being. --- osu.Game.Rulesets.Osu/Scoring/OsuScoreProcessor.cs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Scoring/OsuScoreProcessor.cs b/osu.Game.Rulesets.Osu/Scoring/OsuScoreProcessor.cs index 67b96f1fd9..d41331e3bd 100644 --- a/osu.Game.Rulesets.Osu/Scoring/OsuScoreProcessor.cs +++ b/osu.Game.Rulesets.Osu/Scoring/OsuScoreProcessor.cs @@ -68,6 +68,8 @@ namespace osu.Game.Rulesets.Osu.Scoring score.Statistics[HitResult.Miss] = scoreResultCounts.GetOrDefault(HitResult.Miss); } + private const double harshness = 0.01; + protected override void OnNewJudgement(Judgement judgement) { base.OnNewJudgement(judgement); @@ -83,15 +85,15 @@ namespace osu.Game.Rulesets.Osu.Scoring switch (judgement.Result) { case HitResult.Great: - Health.Value += (10.2 - hpDrainRate) * 0.02; + Health.Value += (10.2 - hpDrainRate) * harshness; break; case HitResult.Good: - Health.Value += (8 - hpDrainRate) * 0.02; + Health.Value += (8 - hpDrainRate) * harshness; break; case HitResult.Meh: - Health.Value += (4 - hpDrainRate) * 0.02; + Health.Value += (4 - hpDrainRate) * harshness; break; /*case HitResult.SliderTick: @@ -99,7 +101,7 @@ namespace osu.Game.Rulesets.Osu.Scoring break;*/ case HitResult.Miss: - Health.Value -= hpDrainRate * 0.04; + Health.Value -= hpDrainRate * (harshness * 2); break; } } From 3731cbe5eba7c729209d10bf38e272b51a9769bc Mon Sep 17 00:00:00 2001 From: pdrapoport Date: Wed, 7 Mar 2018 14:20:59 +0100 Subject: [PATCH 333/544] Removing "mouse wheel disabled" checkbox from visual settings gameplay menu --- osu.Game/Screens/Play/PlayerSettings/VisualSettings.cs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/osu.Game/Screens/Play/PlayerSettings/VisualSettings.cs b/osu.Game/Screens/Play/PlayerSettings/VisualSettings.cs index 1a7b80ec9a..6c4d929c71 100644 --- a/osu.Game/Screens/Play/PlayerSettings/VisualSettings.cs +++ b/osu.Game/Screens/Play/PlayerSettings/VisualSettings.cs @@ -15,7 +15,6 @@ namespace osu.Game.Screens.Play.PlayerSettings private readonly PlayerSliderBar dimSliderBar; private readonly PlayerSliderBar blurSliderBar; private readonly PlayerCheckbox showStoryboardToggle; - private readonly PlayerCheckbox mouseWheelDisabledToggle; public VisualSettings() { @@ -35,8 +34,7 @@ namespace osu.Game.Screens.Play.PlayerSettings { Text = "Toggles:" }, - showStoryboardToggle = new PlayerCheckbox { LabelText = "Storyboards" }, - mouseWheelDisabledToggle = new PlayerCheckbox { LabelText = "Disable mouse wheel" } + showStoryboardToggle = new PlayerCheckbox { LabelText = "Storyboards" } }; } @@ -46,7 +44,6 @@ namespace osu.Game.Screens.Play.PlayerSettings dimSliderBar.Bindable = config.GetBindable(OsuSetting.DimLevel); blurSliderBar.Bindable = config.GetBindable(OsuSetting.BlurLevel); showStoryboardToggle.Bindable = config.GetBindable(OsuSetting.ShowStoryboard); - mouseWheelDisabledToggle.Bindable = config.GetBindable(OsuSetting.MouseDisableWheel); } } } From 983cefbe40b651961a9566a4fc22a651e611e6fa Mon Sep 17 00:00:00 2001 From: naoey Date: Wed, 7 Mar 2018 17:33:21 +0530 Subject: [PATCH 334/544] Add VisualTest. --- .../TestCaseUserProfileRecentSection.cs | 162 ++++++++++++++++++ osu.Game.Tests/osu.Game.Tests.csproj | 1 + .../Profile/Sections/Recent/MedalIcon.cs | 2 +- .../PaginatedRecentActivityContainer.cs | 2 +- 4 files changed, 165 insertions(+), 2 deletions(-) create mode 100644 osu.Game.Tests/Visual/TestCaseUserProfileRecentSection.cs diff --git a/osu.Game.Tests/Visual/TestCaseUserProfileRecentSection.cs b/osu.Game.Tests/Visual/TestCaseUserProfileRecentSection.cs new file mode 100644 index 0000000000..23eb7f68f9 --- /dev/null +++ b/osu.Game.Tests/Visual/TestCaseUserProfileRecentSection.cs @@ -0,0 +1,162 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using NUnit.Framework; +using osu.Framework.Graphics; +using osu.Framework.Graphics.Containers; +using osu.Framework.Graphics.Shapes; +using osu.Game.Graphics; +using osu.Game.Online.API.Requests; +using osu.Game.Overlays.Profile.Sections; +using osu.Game.Overlays.Profile.Sections.Recent; +using System; +using System.Collections.Generic; +using System.Linq; + +namespace osu.Game.Tests.Visual +{ + [TestFixture] + public class TestCaseUserProfileRecentSection : OsuTestCase + { + public override IReadOnlyList RequiredTypes => new[] + { + typeof(RecentSection), + typeof(DrawableRecentActivity), + typeof(PaginatedRecentActivityContainer), + typeof(MedalIcon) + }; + + public TestCaseUserProfileRecentSection() + { + var flow = new FillFlowContainer + { + RelativeSizeAxes = Axes.X, + AutoSizeAxes = Axes.Y, + Direction = FillDirection.Vertical, + }; + + flow.AddRange(createDummyActivities().Select(a => new DrawableRecentActivity(a))); + + Add(new Box + { + RelativeSizeAxes = Axes.Both, + Colour = OsuColour.Gray(0.2f) + }); + + Add(new ScrollContainer + { + RelativeSizeAxes = Axes.Both, + Child = flow, + }); + } + + private IEnumerable createDummyActivities() + { + var dummyBeatmap = new RecentActivity.RecentActivityBeatmap + { + Title = @"Dummy beatmap", + Url = "/b/1337", + }; + + var dummyUser = new RecentActivity.RecentActivityUser + { + Username = "DummyReborn", + Url = "/u/666", + PreviousUsername = "Dummy", + }; + + return new[] + { + new RecentActivity + { + User = dummyUser, + Type = RecentActivityType.Achievement, + Achievement = new RecentActivity.RecentActivityAchievement + { + Name = @"Feelin' It", + Slug = @"all-secret-feelinit", + }, + }, + new RecentActivity + { + User = dummyUser, + Type = RecentActivityType.BeatmapPlaycount, + Count = 1337, + Beatmap = dummyBeatmap, + }, + new RecentActivity + { + User = dummyUser, + Type = RecentActivityType.BeatmapsetApprove, + Approval = BeatmapApproval.Qualified, + Beatmapset = dummyBeatmap, + }, + new RecentActivity + { + User = dummyUser, + Type = RecentActivityType.BeatmapsetDelete, + Beatmapset = dummyBeatmap, + }, + new RecentActivity + { + User = dummyUser, + Type = RecentActivityType.BeatmapsetRevive, + Beatmapset = dummyBeatmap, + }, + new RecentActivity + { + User = dummyUser, + Type = RecentActivityType.BeatmapsetRevive, + Beatmapset = dummyBeatmap, + }, + new RecentActivity + { + User = dummyUser, + Type = RecentActivityType.BeatmapsetUpdate, + Beatmapset = dummyBeatmap, + }, + new RecentActivity + { + User = dummyUser, + Type = RecentActivityType.BeatmapsetUpload, + Beatmapset = dummyBeatmap, + }, + new RecentActivity + { + User = dummyUser, + Type = RecentActivityType.Rank, + Rank = 1, + Mode = "osu!", + Beatmap = dummyBeatmap, + }, + new RecentActivity + { + User = dummyUser, + Type = RecentActivityType.RankLost, + Mode = "osu!", + Beatmap = dummyBeatmap, + }, + new RecentActivity + { + User = dummyUser, + Type = RecentActivityType.UsernameChange, + }, + new RecentActivity + { + User = dummyUser, + Type = RecentActivityType.UserSupportAgain, + }, + new RecentActivity + { + User = dummyUser, + Type = RecentActivityType.UserSupportFirst, + }, + new RecentActivity + { + User = dummyUser, + Type = RecentActivityType.UserSupportGift, + }, + }; + } + } +} diff --git a/osu.Game.Tests/osu.Game.Tests.csproj b/osu.Game.Tests/osu.Game.Tests.csproj index 8cbeb6aab6..1cfa7bc111 100644 --- a/osu.Game.Tests/osu.Game.Tests.csproj +++ b/osu.Game.Tests/osu.Game.Tests.csproj @@ -173,6 +173,7 @@ + diff --git a/osu.Game/Overlays/Profile/Sections/Recent/MedalIcon.cs b/osu.Game/Overlays/Profile/Sections/Recent/MedalIcon.cs index 9ef2b89269..6ffbe7193f 100644 --- a/osu.Game/Overlays/Profile/Sections/Recent/MedalIcon.cs +++ b/osu.Game/Overlays/Profile/Sections/Recent/MedalIcon.cs @@ -9,7 +9,7 @@ using osu.Framework.Graphics.Textures; namespace osu.Game.Overlays.Profile.Sections.Recent { - internal class MedalIcon : Container + public class MedalIcon : Container { private readonly string slug; private readonly Sprite sprite; diff --git a/osu.Game/Overlays/Profile/Sections/Recent/PaginatedRecentActivityContainer.cs b/osu.Game/Overlays/Profile/Sections/Recent/PaginatedRecentActivityContainer.cs index 3de005cf9b..d479627cde 100644 --- a/osu.Game/Overlays/Profile/Sections/Recent/PaginatedRecentActivityContainer.cs +++ b/osu.Game/Overlays/Profile/Sections/Recent/PaginatedRecentActivityContainer.cs @@ -9,7 +9,7 @@ using System.Linq; namespace osu.Game.Overlays.Profile.Sections.Recent { - internal class PaginatedRecentActivityContainer : PaginatedContainer + public class PaginatedRecentActivityContainer : PaginatedContainer { public PaginatedRecentActivityContainer(Bindable user, string header, string missing) : base(user, header, missing) From e55a503f79735df4abd83d867fb5db21db18fccb Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 8 Mar 2018 00:58:16 +0900 Subject: [PATCH 335/544] Tidy up test case --- .../TestCaseUserProfileRecentSection.cs | 35 +++++++++---------- 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/osu.Game.Tests/Visual/TestCaseUserProfileRecentSection.cs b/osu.Game.Tests/Visual/TestCaseUserProfileRecentSection.cs index 23eb7f68f9..1f7a7e7165 100644 --- a/osu.Game.Tests/Visual/TestCaseUserProfileRecentSection.cs +++ b/osu.Game.Tests/Visual/TestCaseUserProfileRecentSection.cs @@ -28,26 +28,25 @@ namespace osu.Game.Tests.Visual public TestCaseUserProfileRecentSection() { - var flow = new FillFlowContainer + Children = new Drawable[] { - RelativeSizeAxes = Axes.X, - AutoSizeAxes = Axes.Y, - Direction = FillDirection.Vertical, + new Box + { + RelativeSizeAxes = Axes.Both, + Colour = OsuColour.Gray(0.2f) + }, + new ScrollContainer + { + RelativeSizeAxes = Axes.Both, + Child = new FillFlowContainer + { + RelativeSizeAxes = Axes.X, + AutoSizeAxes = Axes.Y, + Direction = FillDirection.Vertical, + ChildrenEnumerable = createDummyActivities().Select(a => new DrawableRecentActivity(a)) + }, + } }; - - flow.AddRange(createDummyActivities().Select(a => new DrawableRecentActivity(a))); - - Add(new Box - { - RelativeSizeAxes = Axes.Both, - Colour = OsuColour.Gray(0.2f) - }); - - Add(new ScrollContainer - { - RelativeSizeAxes = Axes.Both, - Child = flow, - }); } private IEnumerable createDummyActivities() From ee96e974a89b81d22d12ce86560d4bf02097819d Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 8 Mar 2018 09:43:31 +0900 Subject: [PATCH 336/544] Update framework --- osu-framework | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu-framework b/osu-framework index 6372fb22c1..865b0df18b 160000 --- a/osu-framework +++ b/osu-framework @@ -1 +1 @@ -Subproject commit 6372fb22c1c85f600921a139849b8dedf71026d5 +Subproject commit 865b0df18bb240190cdf7a7f60d44c0b28c84c5f From 70a16667b69b329f901a54f4ef5e8d3a2a5bbc25 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 8 Mar 2018 12:46:23 +0900 Subject: [PATCH 337/544] Fix difficulty calculator regression when applying mods --- osu.Game/Beatmaps/DifficultyCalculator.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/osu.Game/Beatmaps/DifficultyCalculator.cs b/osu.Game/Beatmaps/DifficultyCalculator.cs index 798268d05f..39817df6a6 100644 --- a/osu.Game/Beatmaps/DifficultyCalculator.cs +++ b/osu.Game/Beatmaps/DifficultyCalculator.cs @@ -41,12 +41,12 @@ namespace osu.Game.Beatmaps foreach (var mod in Mods.OfType()) mod.ApplyToDifficulty(Beatmap.BeatmapInfo.BaseDifficulty); + foreach (var h in Beatmap.HitObjects) + h.ApplyDefaults(Beatmap.ControlPointInfo, Beatmap.BeatmapInfo.BaseDifficulty); + foreach (var mod in mods.OfType>()) foreach (var obj in Beatmap.HitObjects) mod.ApplyToHitObject(obj); - - foreach (var h in Beatmap.HitObjects) - h.ApplyDefaults(Beatmap.ControlPointInfo, Beatmap.BeatmapInfo.BaseDifficulty); } protected virtual void PreprocessHitObjects() From 3b5699911808e7796de3dc40d9d556e097d4e665 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 8 Mar 2018 12:57:12 +0900 Subject: [PATCH 338/544] Add drawable to display (and update) relative dates --- osu.Game/Graphics/DrawableDate.cs | 64 +++++++++++++++++++ osu.Game/Overlays/Profile/ProfileHeader.cs | 59 ++++++++--------- .../Sections/Ranks/DrawableProfileScore.cs | 7 +- .../Sections/Recent/DrawableRecentActivity.cs | 9 +-- osu.Game/osu.Game.csproj | 1 + 5 files changed, 95 insertions(+), 45 deletions(-) create mode 100644 osu.Game/Graphics/DrawableDate.cs diff --git a/osu.Game/Graphics/DrawableDate.cs b/osu.Game/Graphics/DrawableDate.cs new file mode 100644 index 0000000000..452443f9d0 --- /dev/null +++ b/osu.Game/Graphics/DrawableDate.cs @@ -0,0 +1,64 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using System; +using Humanizer; +using osu.Framework.Allocation; +using osu.Framework.Graphics; +using osu.Framework.Graphics.Cursor; +using osu.Framework.Threading; +using osu.Game.Graphics.Sprites; + +namespace osu.Game.Graphics +{ + public class DrawableDate : OsuSpriteText, IHasTooltip + { + private readonly DateTimeOffset date; + private ScheduledDelegate updateTask; + + public DrawableDate(DateTimeOffset date) + { + AutoSizeAxes = Axes.Both; + Font = "Exo2.0-RegularItalic"; + + this.date = date.ToLocalTime(); + } + + [BackgroundDependencyLoader] + private void load() + { + updateTime(); + } + + protected override void LoadComplete() + { + base.LoadComplete(); + Scheduler.Add(updateTimeWithReschedule); + } + + private void updateTimeWithReschedule() + { + updateTime(); + + var diffToNow = DateTimeOffset.Now.Subtract(date); + + double timeUntilNextUpdate = 1000; + if (diffToNow.TotalSeconds > 60) + { + timeUntilNextUpdate *= 60; + if (diffToNow.TotalMinutes > 60) + { + timeUntilNextUpdate *= 60; + + if (diffToNow.TotalHours > 24) + timeUntilNextUpdate *= 24; + } + } + + Scheduler.AddDelayed(updateTimeWithReschedule, timeUntilNextUpdate); + } + + private void updateTime() => Text = date.Humanize(); + public string TooltipText => date.ToString(); + } +} diff --git a/osu.Game/Overlays/Profile/ProfileHeader.cs b/osu.Game/Overlays/Profile/ProfileHeader.cs index d085800f41..f4b363cd91 100644 --- a/osu.Game/Overlays/Profile/ProfileHeader.cs +++ b/osu.Game/Overlays/Profile/ProfileHeader.cs @@ -130,11 +130,7 @@ namespace osu.Game.Overlays.Profile } } }, - infoTextLeft = new OsuTextFlowContainer(t => - { - t.TextSize = 14; - t.Alpha = 0.8f; - }) + infoTextLeft = new OsuTextFlowContainer(t => t.TextSize = 14) { X = UserProfileOverlay.CONTENT_X_MARGIN, Y = cover_height + 20, @@ -318,11 +314,23 @@ namespace osu.Game.Overlays.Profile colourBar.Show(); } - void boldItalic(SpriteText t) + void boldItalic(SpriteText t) => t.Font = @"Exo2.0-BoldItalic"; + void lightText(SpriteText t) => t.Alpha = 0.8f; + + OsuSpriteText createScoreText(string text) => new OsuSpriteText { - t.Font = @"Exo2.0-BoldItalic"; - t.Alpha = 1; - } + TextSize = 14, + Text = text + }; + + OsuSpriteText createScoreNumberText(string text) => new OsuSpriteText + { + TextSize = 14, + Font = @"Exo2.0-Bold", + Anchor = Anchor.TopRight, + Origin = Anchor.TopRight, + Text = text + }; if (user.Age != null) { @@ -331,7 +339,7 @@ namespace osu.Game.Overlays.Profile if (user.Country != null) { - infoTextLeft.AddText("from "); + infoTextLeft.AddText("from ", lightText); infoTextLeft.AddText(user.Country.FullName, boldItalic); countryFlag.Country = user.Country; } @@ -344,18 +352,18 @@ namespace osu.Game.Overlays.Profile } else { - infoTextLeft.AddText("Joined "); - infoTextLeft.AddText(user.JoinDate.LocalDateTime.ToShortDateString(), boldItalic); + infoTextLeft.AddText("Joined ", lightText); + infoTextLeft.AddText(new DrawableDate(user.JoinDate), boldItalic); } infoTextLeft.NewLine(); - infoTextLeft.AddText("Last seen "); - infoTextLeft.AddText(user.LastVisit.LocalDateTime.ToShortDateString(), boldItalic); + infoTextLeft.AddText("Last seen ", lightText); + infoTextLeft.AddText(new DrawableDate(user.LastVisit), boldItalic); infoTextLeft.NewParagraph(); if (user.PlayStyle?.Length > 0) { - infoTextLeft.AddText("Plays with "); + infoTextLeft.AddText("Plays with ", lightText); infoTextLeft.AddText(string.Join(", ", user.PlayStyle), boldItalic); } @@ -411,23 +419,6 @@ namespace osu.Game.Overlays.Profile } } - // These could be local functions when C# 7 enabled - - private OsuSpriteText createScoreText(string text) => new OsuSpriteText - { - TextSize = 14, - Text = text - }; - - private OsuSpriteText createScoreNumberText(string text) => new OsuSpriteText - { - TextSize = 14, - Font = @"Exo2.0-Bold", - Anchor = Anchor.TopRight, - Origin = Anchor.TopRight, - Text = text - }; - private void tryAddInfoRightLine(FontAwesome icon, string str, string url = null) { if (string.IsNullOrEmpty(str)) return; @@ -436,10 +427,12 @@ namespace osu.Game.Overlays.Profile if (url != null) { infoTextRight.AddLink(" " + str, url); - } else + } + else { infoTextRight.AddText(" " + str); } + infoTextRight.NewLine(); } diff --git a/osu.Game/Overlays/Profile/Sections/Ranks/DrawableProfileScore.cs b/osu.Game/Overlays/Profile/Sections/Ranks/DrawableProfileScore.cs index bb1a409f2e..509356ae04 100644 --- a/osu.Game/Overlays/Profile/Sections/Ranks/DrawableProfileScore.cs +++ b/osu.Game/Overlays/Profile/Sections/Ranks/DrawableProfileScore.cs @@ -54,12 +54,7 @@ namespace osu.Game.Overlays.Profile.Sections.Ranks RightFlowContainer.SetLayoutPosition(text, 1); LeftFlowContainer.Add(new BeatmapMetadataContainer(Score.Beatmap)); - LeftFlowContainer.Add(new OsuSpriteText - { - Text = Score.Date.LocalDateTime.ToShortDateString(), - TextSize = 11, - Colour = OsuColour.Gray(0xAA), - }); + LeftFlowContainer.Add(new DrawableDate(Score.Date)); foreach (Mod mod in Score.Mods) modsContainer.Add(new ModIcon(mod) { Scale = new Vector2(0.5f) }); diff --git a/osu.Game/Overlays/Profile/Sections/Recent/DrawableRecentActivity.cs b/osu.Game/Overlays/Profile/Sections/Recent/DrawableRecentActivity.cs index 2dde8a3d54..e8be8d1e44 100644 --- a/osu.Game/Overlays/Profile/Sections/Recent/DrawableRecentActivity.cs +++ b/osu.Game/Overlays/Profile/Sections/Recent/DrawableRecentActivity.cs @@ -6,7 +6,6 @@ using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Game.Graphics; using osu.Game.Graphics.Containers; -using osu.Game.Graphics.Sprites; using osu.Game.Online.API; using osu.Game.Online.API.Requests; using osu.Game.Online.Chat; @@ -40,14 +39,12 @@ namespace osu.Game.Overlays.Profile.Sections.Recent RelativeSizeAxes = Axes.X, }); - RightFlowContainer.Add(new OsuSpriteText + RightFlowContainer.Add(new DrawableDate(activity.CreatedAt) { - Text = activity.CreatedAt.LocalDateTime.ToShortDateString(), + TextSize = 13, + Colour = OsuColour.Gray(0xAA), Anchor = Anchor.TopRight, Origin = Anchor.TopRight, - Font = "Exo2.0-RegularItalic", - TextSize = 12, - Colour = OsuColour.Gray(0xAA), }); var formatted = createMessage(); diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index 6f7c92ab5a..01074318cd 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -287,6 +287,7 @@ + From 2cb197d0c452d27139eb3dd6e29d3193c40a6f62 Mon Sep 17 00:00:00 2001 From: TocoToucan Date: Thu, 8 Mar 2018 11:35:00 +0300 Subject: [PATCH 339/544] Replace ConfigureBackgroundUpdate with OnEntering --- osu.Game/Screens/Play/Player.cs | 2 -- osu.Game/Screens/Play/PlayerLoader.cs | 2 -- osu.Game/Screens/Play/ScreenWithBeatmapBackground.cs | 4 +++- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/osu.Game/Screens/Play/Player.cs b/osu.Game/Screens/Play/Player.cs index 7ec72a0e0e..9b341fbfe5 100644 --- a/osu.Game/Screens/Play/Player.cs +++ b/osu.Game/Screens/Play/Player.cs @@ -277,8 +277,6 @@ namespace osu.Game.Screens.Play if (!loadedSuccessfully) return; - ConfigureBackgroundUpdate(); - Content.Alpha = 0; Content .ScaleTo(0.7f) diff --git a/osu.Game/Screens/Play/PlayerLoader.cs b/osu.Game/Screens/Play/PlayerLoader.cs index 042b4fc744..784dcf7657 100644 --- a/osu.Game/Screens/Play/PlayerLoader.cs +++ b/osu.Game/Screens/Play/PlayerLoader.cs @@ -88,8 +88,6 @@ namespace osu.Game.Screens.Play { base.OnEntering(last); - ConfigureBackgroundUpdate(); - Content.ScaleTo(0.7f); contentIn(); diff --git a/osu.Game/Screens/Play/ScreenWithBeatmapBackground.cs b/osu.Game/Screens/Play/ScreenWithBeatmapBackground.cs index d83f7e087d..9942bf4ef5 100644 --- a/osu.Game/Screens/Play/ScreenWithBeatmapBackground.cs +++ b/osu.Game/Screens/Play/ScreenWithBeatmapBackground.cs @@ -4,6 +4,7 @@ using osu.Framework.Allocation; using osu.Framework.Configuration; using osu.Framework.Graphics; +using osu.Framework.Screens; using osu.Game.Configuration; using osu.Game.Screens.Backgrounds; using OpenTK; @@ -42,8 +43,9 @@ namespace osu.Game.Screens.Play UserAudioOffset = config.GetBindable(OsuSetting.AudioOffset); } - protected void ConfigureBackgroundUpdate() + protected override void OnEntering(Screen last) { + base.OnEntering(last); DimLevel.ValueChanged += _ => UpdateBackgroundElements(); BlurLevel.ValueChanged += _ => UpdateBackgroundElements(); ShowStoryboard.ValueChanged += _ => UpdateBackgroundElements(); From d3e91024a7cb9dd52185b5f067e304ffa8df3bd9 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 8 Mar 2018 18:16:23 +0900 Subject: [PATCH 340/544] Block player enter when a drag initiates from an overlaying container --- osu.Game/Screens/Play/PlayerLoader.cs | 19 ++++++++++++++++--- .../PlayerSettings/PlayerSettingsGroup.cs | 4 ++++ 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/osu.Game/Screens/Play/PlayerLoader.cs b/osu.Game/Screens/Play/PlayerLoader.cs index 2950990779..e082e3f8de 100644 --- a/osu.Game/Screens/Play/PlayerLoader.cs +++ b/osu.Game/Screens/Play/PlayerLoader.cs @@ -5,6 +5,7 @@ using osu.Framework.Allocation; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Sprites; +using osu.Framework.Input; using osu.Framework.Screens; using osu.Game.Beatmaps; using osu.Game.Graphics; @@ -22,7 +23,6 @@ namespace osu.Game.Screens.Play private Player player; private BeatmapMetadataDisplay info; - private VisualSettings visualSettings; private bool showOverlays = true; public override bool ShowOverlaysOnEnter => showOverlays; @@ -51,7 +51,7 @@ namespace osu.Game.Screens.Play Anchor = Anchor.Centre, Origin = Anchor.Centre, }); - Add(visualSettings = new VisualSettings + Add(new VisualSettings { Anchor = Anchor.TopRight, Origin = Anchor.TopRight, @@ -116,9 +116,22 @@ namespace osu.Game.Screens.Play logo.Delay(resuming ? 0 : 500).MoveToOffset(new Vector2(0, -0.24f), 500, Easing.InOutExpo); } + private bool weHandledMouseDown; + protected override bool OnMouseDown(InputState state, MouseDownEventArgs args) + { + weHandledMouseDown = true; + return base.OnMouseDown(state, args); + } + + protected override bool OnMouseUp(InputState state, MouseUpEventArgs args) + { + weHandledMouseDown = false; + return base.OnMouseUp(state, args); + } + private void pushWhenLoaded() { - if (player.LoadState != LoadState.Ready || visualSettings.IsHovered) + if (player.LoadState != LoadState.Ready || !IsHovered || GetContainingInputManager().CurrentState.Mouse.HasAnyButtonPressed && !weHandledMouseDown) { Schedule(pushWhenLoaded); return; diff --git a/osu.Game/Screens/Play/PlayerSettings/PlayerSettingsGroup.cs b/osu.Game/Screens/Play/PlayerSettings/PlayerSettingsGroup.cs index 95b464154a..e0de89535e 100644 --- a/osu.Game/Screens/Play/PlayerSettings/PlayerSettingsGroup.cs +++ b/osu.Game/Screens/Play/PlayerSettings/PlayerSettingsGroup.cs @@ -5,6 +5,7 @@ using osu.Framework.Allocation; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Shapes; +using osu.Framework.Input; using osu.Game.Graphics; using osu.Game.Graphics.Sprites; using osu.Game.Graphics.UserInterface; @@ -133,5 +134,8 @@ namespace osu.Game.Screens.Play.PlayerSettings } protected override Container Content => content; + + protected override bool OnHover(InputState state) => true; + protected override bool OnMouseDown(InputState state, MouseDownEventArgs args) => true; } } From 94ed4ab01b3748a7df6c58925b5f68bb35278943 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 8 Mar 2018 20:28:55 +0900 Subject: [PATCH 341/544] Add debouncing to player loading Allows the mouse to temporarily exit and re-enter overlay elements without triggering a load --- osu.Game/Screens/Play/PlayerLoader.cs | 42 +++++++++++++++++---------- 1 file changed, 27 insertions(+), 15 deletions(-) diff --git a/osu.Game/Screens/Play/PlayerLoader.cs b/osu.Game/Screens/Play/PlayerLoader.cs index e082e3f8de..b91272de75 100644 --- a/osu.Game/Screens/Play/PlayerLoader.cs +++ b/osu.Game/Screens/Play/PlayerLoader.cs @@ -13,6 +13,7 @@ using osu.Game.Graphics.Sprites; using osu.Game.Screens.Backgrounds; using OpenTK; using osu.Framework.Localisation; +using osu.Framework.Threading; using osu.Game.Screens.Menu; using osu.Game.Screens.Play.PlayerSettings; @@ -51,6 +52,7 @@ namespace osu.Game.Screens.Play Anchor = Anchor.Centre, Origin = Anchor.Centre, }); + Add(new VisualSettings { Anchor = Anchor.TopRight, @@ -100,7 +102,7 @@ namespace osu.Game.Screens.Play contentIn(); info.Delay(750).FadeIn(500); - this.Delay(2150).Schedule(pushWhenLoaded); + this.Delay(1800).Schedule(pushWhenLoaded); } protected override void LogoArriving(OsuLogo logo, bool resuming) @@ -129,29 +131,39 @@ namespace osu.Game.Screens.Play return base.OnMouseUp(state, args); } + private ScheduledDelegate pushDebounce; + + private bool readyForPush => player.LoadState == LoadState.Ready && IsHovered && (!GetContainingInputManager().CurrentState.Mouse.HasAnyButtonPressed || weHandledMouseDown); + private void pushWhenLoaded() { - if (player.LoadState != LoadState.Ready || !IsHovered || GetContainingInputManager().CurrentState.Mouse.HasAnyButtonPressed && !weHandledMouseDown) + Schedule(pushWhenLoaded); + + if (!readyForPush) { - Schedule(pushWhenLoaded); + pushDebounce?.Cancel(); + pushDebounce = null; return; } - contentOut(); - - this.Delay(250).Schedule(() => + if (pushDebounce == null) pushDebounce = Scheduler.AddDelayed(() => { - if (!IsCurrentScreen) return; + contentOut(); - if (!Push(player)) - Exit(); - else + this.Delay(250).Schedule(() => { - //By default, we want to load the player and never be returned to. - //Note that this may change if the player we load requested a re-run. - ValidForResume = false; - } - }); + if (!IsCurrentScreen) return; + + if (!Push(player)) + Exit(); + else + { + //By default, we want to load the player and never be returned to. + //Note that this may change if the player we load requested a re-run. + ValidForResume = false; + } + }); + }, 500); } protected override bool OnExiting(Screen next) From 6d91889ca641258a9706c932d16d2aa836a8ba80 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 8 Mar 2018 22:16:47 +0900 Subject: [PATCH 342/544] Move player-specific configuration bindables back to player --- osu.Game/Screens/Play/Player.cs | 16 ++++++++++++---- .../Screens/Play/ScreenWithBeatmapBackground.cs | 6 ------ 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/osu.Game/Screens/Play/Player.cs b/osu.Game/Screens/Play/Player.cs index 9b341fbfe5..d24ed53518 100644 --- a/osu.Game/Screens/Play/Player.cs +++ b/osu.Game/Screens/Play/Player.cs @@ -7,6 +7,7 @@ using System.Threading.Tasks; using osu.Framework.Allocation; using osu.Framework.Audio; using osu.Framework.Audio.Sample; +using osu.Framework.Configuration; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Cursor; @@ -16,6 +17,7 @@ using osu.Framework.Screens; using osu.Framework.Threading; using osu.Framework.Timing; using osu.Game.Beatmaps; +using osu.Game.Configuration; using osu.Game.Graphics; using osu.Game.Graphics.Cursor; using osu.Game.Online.API; @@ -43,6 +45,9 @@ namespace osu.Game.Screens.Play public bool AllowLeadIn { get; set; } = true; public bool AllowResults { get; set; } = true; + private Bindable mouseWheelDisabled; + private Bindable userAudioOffset; + public int RestartCount; public CursorContainer Cursor => RulesetContainer.Cursor; @@ -75,11 +80,14 @@ namespace osu.Game.Screens.Play private bool loadedSuccessfully => RulesetContainer?.Objects.Any() == true; [BackgroundDependencyLoader] - private void load(AudioManager audio, APIAccess api) + private void load(AudioManager audio, APIAccess api, OsuConfigManager config) { this.api = api; sampleRestart = audio.Sample.Get(@"Gameplay/restart"); + mouseWheelDisabled = config.GetBindable(OsuSetting.MouseDisableWheel); + userAudioOffset = config.GetBindable(OsuSetting.AudioOffset); + WorkingBeatmap working = Beatmap.Value; Beatmap beatmap; @@ -131,8 +139,8 @@ namespace osu.Game.Screens.Play // the final usable gameplay clock with user-set offsets applied. var offsetClock = new FramedOffsetClock(adjustableClock); - UserAudioOffset.ValueChanged += v => offsetClock.Offset = v; - UserAudioOffset.TriggerChange(); + userAudioOffset.ValueChanged += v => offsetClock.Offset = v; + userAudioOffset.TriggerChange(); scoreProcessor = RulesetContainer.CreateScoreProcessor(); @@ -342,7 +350,7 @@ namespace osu.Game.Screens.Play Background?.FadeTo(1f, fade_out_duration); } - protected override bool OnWheel(InputState state) => MouseWheelDisabled.Value && !pauseContainer.IsPaused; + protected override bool OnWheel(InputState state) => mouseWheelDisabled.Value && !pauseContainer.IsPaused; private void initializeStoryboard(bool asyncLoad) { diff --git a/osu.Game/Screens/Play/ScreenWithBeatmapBackground.cs b/osu.Game/Screens/Play/ScreenWithBeatmapBackground.cs index 9942bf4ef5..8e963a94a8 100644 --- a/osu.Game/Screens/Play/ScreenWithBeatmapBackground.cs +++ b/osu.Game/Screens/Play/ScreenWithBeatmapBackground.cs @@ -26,8 +26,6 @@ namespace osu.Game.Screens.Play protected Bindable DimLevel; protected Bindable BlurLevel; protected Bindable ShowStoryboard; - protected Bindable MouseWheelDisabled; - protected Bindable UserAudioOffset; #endregion @@ -37,10 +35,6 @@ namespace osu.Game.Screens.Play DimLevel = config.GetBindable(OsuSetting.DimLevel); BlurLevel = config.GetBindable(OsuSetting.BlurLevel); ShowStoryboard = config.GetBindable(OsuSetting.ShowStoryboard); - - MouseWheelDisabled = config.GetBindable(OsuSetting.MouseDisableWheel); - - UserAudioOffset = config.GetBindable(OsuSetting.AudioOffset); } protected override void OnEntering(Screen last) From 1f48cfb79af0a821832b5c92750e13470a71d4ec Mon Sep 17 00:00:00 2001 From: tgi74000 Date: Thu, 8 Mar 2018 17:35:20 +0100 Subject: [PATCH 343/544] Added Mirror Mod for Mania --- osu.Game.Rulesets.Mania/ManiaRuleset.cs | 1 + .../Mods/ManiaMirrorMod.cs | 28 +++++++++++++++++++ .../osu.Game.Rulesets.Mania.csproj | 1 + 3 files changed, 30 insertions(+) create mode 100644 osu.Game.Rulesets.Mania/Mods/ManiaMirrorMod.cs diff --git a/osu.Game.Rulesets.Mania/ManiaRuleset.cs b/osu.Game.Rulesets.Mania/ManiaRuleset.cs index 16b6888f2b..7c257bf719 100644 --- a/osu.Game.Rulesets.Mania/ManiaRuleset.cs +++ b/osu.Game.Rulesets.Mania/ManiaRuleset.cs @@ -91,6 +91,7 @@ namespace osu.Game.Rulesets.Mania }, new ManiaModRandom(), new ManiaModDualStages(), + new ManiaMirrorMod(), new MultiMod { Mods = new Mod[] diff --git a/osu.Game.Rulesets.Mania/Mods/ManiaMirrorMod.cs b/osu.Game.Rulesets.Mania/Mods/ManiaMirrorMod.cs new file mode 100644 index 0000000000..cbcbd9f329 --- /dev/null +++ b/osu.Game.Rulesets.Mania/Mods/ManiaMirrorMod.cs @@ -0,0 +1,28 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using osu.Framework.Extensions.IEnumerableExtensions; +using osu.Game.Rulesets.Mania.Objects; +using osu.Game.Rulesets.Mania.UI; +using osu.Game.Rulesets.Mods; +using osu.Game.Rulesets.UI; +using System.Linq; + +namespace osu.Game.Rulesets.Mania.Mods +{ + public class ManiaMirrorMod : Mod, IApplicableToRulesetContainer + { + public override string Name => "Mirror"; + public override string ShortenedName => "MR"; + public override ModType Type => ModType.Special; + public override double ScoreMultiplier => 1; + public override bool Ranked => true; + + public void ApplyToRulesetContainer(RulesetContainer rulesetContainer) + { + var availableColumns = ((ManiaRulesetContainer)rulesetContainer).Beatmap.TotalColumns; + + rulesetContainer.Objects.OfType().ForEach(h => h.Column = -(h.Column) + (availableColumns)-1); + } + } +} diff --git a/osu.Game.Rulesets.Mania/osu.Game.Rulesets.Mania.csproj b/osu.Game.Rulesets.Mania/osu.Game.Rulesets.Mania.csproj index a09b3e93a7..3c80e21ff2 100644 --- a/osu.Game.Rulesets.Mania/osu.Game.Rulesets.Mania.csproj +++ b/osu.Game.Rulesets.Mania/osu.Game.Rulesets.Mania.csproj @@ -81,6 +81,7 @@ + From 6ad962fc8b7ec6e7390be778012d17988cb81777 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Fri, 9 Mar 2018 14:34:05 +0900 Subject: [PATCH 344/544] Interpolate ParallaxContainer's scale Things were a bit jumpy when a screen was adjusting `ParallaxAmount`. This smoothes the applied scale changes to look great again. Most noticeable when hitting the retry hotkey (`~`) from gameplay. --- osu.Game/Graphics/Containers/ParallaxContainer.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/osu.Game/Graphics/Containers/ParallaxContainer.cs b/osu.Game/Graphics/Containers/ParallaxContainer.cs index febe52d775..97d6225534 100644 --- a/osu.Game/Graphics/Containers/ParallaxContainer.cs +++ b/osu.Game/Graphics/Containers/ParallaxContainer.cs @@ -66,8 +66,10 @@ namespace osu.Game.Graphics.Containers { Vector2 offset = (input.CurrentState.Mouse == null ? Vector2.Zero : ToLocalSpace(input.CurrentState.Mouse.NativeState.Position) - DrawSize / 2) * ParallaxAmount; - content.Position = Interpolation.ValueAt(MathHelper.Clamp(Clock.ElapsedFrameTime, 0, 1000), content.Position, offset, 0, 1000, Easing.OutQuint); - content.Scale = new Vector2(1 + ParallaxAmount); + double elapsed = MathHelper.Clamp(Clock.ElapsedFrameTime, 0, 1000); + + content.Position = Interpolation.ValueAt(elapsed, content.Position, offset, 0, 1000, Easing.OutQuint); + content.Scale = Interpolation.ValueAt(elapsed, content.Scale, new Vector2(1 + ParallaxAmount), 0, 1000, Easing.OutQuint); } firstUpdate = false; From 25fb527cc7bd7f1d1c3a855db9ca2281ee3175a3 Mon Sep 17 00:00:00 2001 From: naoey Date: Fri, 9 Mar 2018 15:51:00 +0530 Subject: [PATCH 345/544] Remove previous fix and move filtered logic to carousel. - Add an optional bool parameter to SelectBeatmap to skip selecting filtered maps --- osu.Game/Screens/Select/BeatmapCarousel.cs | 31 +++++++++++++-------- osu.Game/Screens/Select/SongSelect.cs | 32 ---------------------- 2 files changed, 20 insertions(+), 43 deletions(-) diff --git a/osu.Game/Screens/Select/BeatmapCarousel.cs b/osu.Game/Screens/Select/BeatmapCarousel.cs index 9793440348..02bad82ca9 100644 --- a/osu.Game/Screens/Select/BeatmapCarousel.cs +++ b/osu.Game/Screens/Select/BeatmapCarousel.cs @@ -169,20 +169,29 @@ namespace osu.Game.Screens.Select }); } - public void SelectBeatmap(BeatmapInfo beatmap) + /// + /// Selects a given beatmap on the carousel. + /// + /// The beatmap to select. + /// Whether to skip selecting filtered beatmaps. + /// True if a selection was made, false if it was skipped. + public bool SelectBeatmap(BeatmapInfo beatmap, bool skipFiltered = false) { if (beatmap?.Hidden != false) - return; + return false; - foreach (CarouselBeatmapSet group in beatmapSets) - { - var item = group.Beatmaps.FirstOrDefault(p => p.Beatmap.Equals(beatmap)); - if (item != null) - { - select(item); - return; - } - } + var group = beatmapSets.FirstOrDefault(s => s.BeatmapSet.OnlineBeatmapSetID == beatmap.BeatmapSet.OnlineBeatmapSetID); + + if (group == null || !skipFiltered && group.Filtered) + return false; + + var item = group.Beatmaps.FirstOrDefault(p => p.Beatmap.Equals(beatmap)); + + if (item == null || !skipFiltered && item.Filtered) + return false; + + select(item); + return true; } /// diff --git a/osu.Game/Screens/Select/SongSelect.cs b/osu.Game/Screens/Select/SongSelect.cs index d4fd64dcd9..2c8dcae3cf 100644 --- a/osu.Game/Screens/Select/SongSelect.cs +++ b/osu.Game/Screens/Select/SongSelect.cs @@ -267,10 +267,7 @@ namespace osu.Game.Screens.Select protected void WorkingBeatmapChanged(WorkingBeatmap beatmap) { if (IsCurrentScreen) - { Carousel.SelectBeatmap(beatmap?.BeatmapInfo); - ensurePlayableRuleset(); - } } /// @@ -328,7 +325,6 @@ namespace osu.Game.Screens.Select { base.OnEntering(last); - ensurePlayableRuleset(); Content.FadeInFromZero(250); FilterControl.Activate(); } @@ -456,34 +452,6 @@ namespace osu.Game.Screens.Select } } - private void ensurePlayableRuleset() - { - if (Beatmap.IsDefault) - // DummyBeatmap won't be playable anyway - return; - - bool conversionAllowed = rulesetConversionAllowed.Value; - int? currentRuleset = Ruleset.Value.ID; - int beatmapRuleset = Beatmap.Value.BeatmapInfo.RulesetID; - - if (currentRuleset == beatmapRuleset || conversionAllowed && beatmapRuleset == 0) - // Current beatmap is playable, nothing more to do - return; - - // Otherwise, first check if the current beatmapset has any playable beatmaps - BeatmapInfo beatmap = Beatmap.Value.BeatmapSetInfo.Beatmaps?.FirstOrDefault(b => b.RulesetID == currentRuleset || conversionAllowed && b.RulesetID == 0); - - // If it does then update the WorkingBeatmap - if (beatmap != null) - { - Beatmap.Value = beatmaps.GetWorkingBeatmap(beatmap); - return; - } - - // If it doesn't, then update the current ruleset so that the current beatmap is playable - Ruleset.Value = Beatmap.Value.BeatmapInfo.Ruleset; - } - private void onBeatmapSetAdded(BeatmapSetInfo s) => Carousel.UpdateBeatmapSet(s); private void onBeatmapSetRemoved(BeatmapSetInfo s) => Carousel.RemoveBeatmapSet(s); private void onBeatmapRestored(BeatmapInfo b) => Carousel.UpdateBeatmapSet(beatmaps.QueryBeatmapSet(s => s.ID == b.BeatmapSetInfoID)); From d04f47718fa73622a6610897357dd3c9de8acdfb Mon Sep 17 00:00:00 2001 From: naoey Date: Fri, 9 Mar 2018 16:22:59 +0530 Subject: [PATCH 346/544] Make song select choose random when initial selection fails. - Revert TestCasePlaySongSelect to master --- .../Visual/TestCasePlaySongSelect.cs | 100 ++---------------- osu.Game/Screens/Select/BeatmapCarousel.cs | 32 ++++-- osu.Game/Screens/Select/SongSelect.cs | 25 ++--- 3 files changed, 37 insertions(+), 120 deletions(-) diff --git a/osu.Game.Tests/Visual/TestCasePlaySongSelect.cs b/osu.Game.Tests/Visual/TestCasePlaySongSelect.cs index 8532962389..cede0160bc 100644 --- a/osu.Game.Tests/Visual/TestCasePlaySongSelect.cs +++ b/osu.Game.Tests/Visual/TestCasePlaySongSelect.cs @@ -11,7 +11,6 @@ using osu.Framework.Allocation; using osu.Framework.Extensions; using osu.Framework.MathUtils; using osu.Game.Beatmaps; -using osu.Game.Configuration; using osu.Game.Database; using osu.Game.Rulesets; using osu.Game.Screens.Select; @@ -56,22 +55,10 @@ namespace osu.Game.Tests.Visual public WorkingBeatmap CurrentBeatmap => Beatmap.Value; public WorkingBeatmap CurrentBeatmapDetailsBeatmap => BeatmapDetails.Beatmap; public new BeatmapCarousel Carousel => base.Carousel; - - public void SetRuleset(RulesetInfo ruleset) => Ruleset.Value = ruleset; - - public int? RulesetID => Ruleset.Value.ID; - - protected override void Dispose(bool isDisposing) - { - base.Dispose(isDisposing); - - // Necessary while running tests because gc is moody and uncollected object interferes with OnEntering test - Beatmap.ValueChanged -= WorkingBeatmapChanged; - } } [BackgroundDependencyLoader] - private void load(OsuGameBase game, OsuConfigManager config) + private void load(OsuGameBase game) { TestSongSelect songSelect = null; @@ -90,7 +77,6 @@ namespace osu.Game.Tests.Visual { if (deleteMaps) { - // TODO: check why this alone doesn't allow import test to run twice in the same session, probably because the delete op is not saved? manager.Delete(manager.GetAllUsableBeatmapSets()); game.Beatmap.SetDefault(); } @@ -102,8 +88,6 @@ namespace osu.Game.Tests.Visual } Add(songSelect = new TestSongSelect()); - - songSelect?.SetRuleset(rulesets.AvailableRulesets.First()); }); loadNewSongSelect(true); @@ -118,36 +102,6 @@ namespace osu.Game.Tests.Visual { for (int i = 0; i < 100; i += 10) manager.Import(createTestBeatmapSet(i)); - - // also import a set which has a single non - osu ruleset beatmap - manager.Import(new BeatmapSetInfo - { - OnlineBeatmapSetID = 1993, - Hash = new MemoryStream(Encoding.UTF8.GetBytes(Guid.NewGuid().ToString())).ComputeMD5Hash(), - Metadata = new BeatmapMetadata - { - OnlineBeatmapSetID = 1993, - // Create random metadata, then we can check if sorting works based on these - Artist = "MONACA " + RNG.Next(0, 9), - Title = "Black Song " + RNG.Next(0, 9), - AuthorString = "Some Guy " + RNG.Next(0, 9), - }, - Beatmaps = new List - { - new BeatmapInfo - { - OnlineBeatmapID = 1994, - Ruleset = rulesets.AvailableRulesets.ElementAt(3), - RulesetID = 3, - Path = "normal.fruits", - Version = "Normal", - BaseDifficulty = new BeatmapDifficulty - { - OverallDifficulty = 3.5f, - } - }, - } - }); }); AddWaitStep(3); @@ -161,45 +115,6 @@ namespace osu.Game.Tests.Visual AddStep(@"Sort by Title", delegate { songSelect.FilterControl.Sort = SortMode.Title; }); AddStep(@"Sort by Author", delegate { songSelect.FilterControl.Sort = SortMode.Author; }); AddStep(@"Sort by Difficulty", delegate { songSelect.FilterControl.Sort = SortMode.Difficulty; }); - - // Test that song select sets a playable beatmap while entering - AddStep(@"Remove song select", () => - { - Remove(songSelect); - songSelect.Dispose(); - songSelect = null; - }); - AddStep(@"Set non-osu beatmap", () => game.Beatmap.Value = manager.GetWorkingBeatmap(manager.GetAllUsableBeatmapSets().First().Beatmaps.First(b => b.RulesetID != 0))); - AddAssert(@"Non-osu beatmap set", () => game.Beatmap.Value.BeatmapInfo.RulesetID != 0); - loadNewSongSelect(); - AddWaitStep(3); - AddAssert(@"osu beatmap set", () => game.Beatmap.Value.BeatmapInfo.RulesetID == 0); - - // Test that song select changes WorkingBeatmap to be playable in current ruleset when updated externally - AddStep(@"Try set non-osu beatmap", () => - { - var testMap = manager.GetAllUsableBeatmapSets().First().Beatmaps.First(b => b.RulesetID != 0); - songSelect.SetRuleset(rulesets.AvailableRulesets.First()); - game.Beatmap.Value = manager.GetWorkingBeatmap(testMap); - }); - AddAssert(@"Beatmap changed to osu", () => songSelect.RulesetID == 0 && game.Beatmap.Value.BeatmapInfo.RulesetID == 0); - - // Test that song select updates WorkingBeatmap when ruleset conversion is disabled - AddStep(@"Disable beatmap conversion", () => config.Set(OsuSetting.ShowConvertedBeatmaps, false)); - AddStep(@"Set osu beatmap taiko rs", () => - { - game.Beatmap.Value = manager.GetWorkingBeatmap(manager.GetAllUsableBeatmapSets().First().Beatmaps.First(b => b.RulesetID == 0)); - songSelect.SetRuleset(rulesets.AvailableRulesets.First(r => r.ID == 1)); - }); - AddAssert(@"taiko beatmap set", () => songSelect.RulesetID == 1); - - // Test that song select changes the active ruleset when externally set beatmapset has no playable beatmaps - AddStep(@"Set fruits only beatmapset", () => - { - songSelect.SetRuleset(rulesets.AvailableRulesets.First()); - game.Beatmap.Value = manager.GetWorkingBeatmap(manager.QueryBeatmapSet(b => b.OnlineBeatmapSetID == 1993).Beatmaps.First()); - }); - AddAssert(@"Ruleset changed to fruits", () => songSelect.RulesetID == game.Beatmap.Value.BeatmapInfo.RulesetID); } private BeatmapSetInfo createTestBeatmapSet(int i) @@ -221,8 +136,7 @@ namespace osu.Game.Tests.Visual new BeatmapInfo { OnlineBeatmapID = 1234 + i, - Ruleset = rulesets.AvailableRulesets.ElementAt(0), - RulesetID = 0, + Ruleset = rulesets.AvailableRulesets.First(), Path = "normal.osu", Version = "Normal", BaseDifficulty = new BeatmapDifficulty @@ -233,9 +147,8 @@ namespace osu.Game.Tests.Visual new BeatmapInfo { OnlineBeatmapID = 1235 + i, - Ruleset = rulesets.AvailableRulesets.First(r => r.ID != 0), - RulesetID = 1, - Path = "hard.taiko", + Ruleset = rulesets.AvailableRulesets.First(), + Path = "hard.osu", Version = "Hard", BaseDifficulty = new BeatmapDifficulty { @@ -245,9 +158,8 @@ namespace osu.Game.Tests.Visual new BeatmapInfo { OnlineBeatmapID = 1236 + i, - Ruleset = rulesets.AvailableRulesets.ElementAt(2), - RulesetID = 2, - Path = "insane.fruits", + Ruleset = rulesets.AvailableRulesets.First(), + Path = "insane.osu", Version = "Insane", BaseDifficulty = new BeatmapDifficulty { diff --git a/osu.Game/Screens/Select/BeatmapCarousel.cs b/osu.Game/Screens/Select/BeatmapCarousel.cs index 02bad82ca9..287584bf2f 100644 --- a/osu.Game/Screens/Select/BeatmapCarousel.cs +++ b/osu.Game/Screens/Select/BeatmapCarousel.cs @@ -171,27 +171,41 @@ namespace osu.Game.Screens.Select /// /// Selects a given beatmap on the carousel. + /// + /// If skipFiltered is true, we will try to select another unfiltered beatmap in the same set. If the + /// entire set is filtered, no selection is made. /// /// The beatmap to select. /// Whether to skip selecting filtered beatmaps. - /// True if a selection was made, false if it was skipped. + /// True if a selection was made, False if it wasn't. public bool SelectBeatmap(BeatmapInfo beatmap, bool skipFiltered = false) { if (beatmap?.Hidden != false) return false; - var group = beatmapSets.FirstOrDefault(s => s.BeatmapSet.OnlineBeatmapSetID == beatmap.BeatmapSet.OnlineBeatmapSetID); + foreach (CarouselBeatmapSet set in beatmapSets) + { + if (skipFiltered && set.Filtered) + continue; - if (group == null || !skipFiltered && group.Filtered) - return false; + var item = set.Beatmaps.FirstOrDefault(p => p.Beatmap.Equals(beatmap)); - var item = group.Beatmaps.FirstOrDefault(p => p.Beatmap.Equals(beatmap)); + if (item == null) + // The beatmap that needs to be selected doesn't exist in this set + continue; - if (item == null || !skipFiltered && item.Filtered) - return false; + if (skipFiltered && item.Filtered) + // The beatmap exists in this set but is filtered, so look for the first unfiltered map in the set + item = set.Beatmaps.FirstOrDefault(b => !b.Filtered); - select(item); - return true; + if (item != null) + { + select(item); + return true; + } + } + + return false; } /// diff --git a/osu.Game/Screens/Select/SongSelect.cs b/osu.Game/Screens/Select/SongSelect.cs index 2c8dcae3cf..461b17338d 100644 --- a/osu.Game/Screens/Select/SongSelect.cs +++ b/osu.Game/Screens/Select/SongSelect.cs @@ -2,7 +2,6 @@ // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using System; -using System.Linq; using System.Threading; using OpenTK; using OpenTK.Input; @@ -10,14 +9,12 @@ using osu.Framework.Allocation; using osu.Framework.Audio; using osu.Framework.Audio.Sample; using osu.Framework.Audio.Track; -using osu.Framework.Configuration; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Framework.Input; using osu.Framework.Screens; using osu.Framework.Threading; using osu.Game.Beatmaps; -using osu.Game.Configuration; using osu.Game.Graphics; using osu.Game.Graphics.Containers; using osu.Game.Overlays; @@ -66,8 +63,6 @@ namespace osu.Game.Screens.Select private SampleChannel sampleChangeDifficulty; private SampleChannel sampleChangeBeatmap; - private Bindable rulesetConversionAllowed; - private CancellationTokenSource initialAddSetsTask; private DependencyContainer dependencies; @@ -184,7 +179,7 @@ namespace osu.Game.Screens.Select } [BackgroundDependencyLoader(permitNulls: true)] - private void load(BeatmapManager beatmaps, AudioManager audio, DialogOverlay dialog, OsuGame osu, OsuColour colours, OsuConfigManager config) + private void load(BeatmapManager beatmaps, AudioManager audio, DialogOverlay dialog, OsuGame osu, OsuColour colours) { dependencies.CacheAs(this); @@ -199,8 +194,6 @@ namespace osu.Game.Screens.Select if (this.beatmaps == null) this.beatmaps = beatmaps; - rulesetConversionAllowed = config.GetBindable(OsuSetting.ShowConvertedBeatmaps); - if (osu != null) Ruleset.BindTo(osu.Ruleset); @@ -459,16 +452,14 @@ namespace osu.Game.Screens.Select private void carouselBeatmapsLoaded() { - if (!Beatmap.IsDefault && Beatmap.Value.BeatmapSetInfo?.DeletePending == false && Beatmap.Value.BeatmapSetInfo?.Protected == false) + if (!Beatmap.IsDefault && Beatmap.Value.BeatmapSetInfo?.DeletePending == false && Beatmap.Value.BeatmapSetInfo?.Protected == false && Carousel.SelectBeatmap(Beatmap.Value.BeatmapInfo, true)) + return; + + if (Carousel.SelectedBeatmapSet == null && !Carousel.SelectNextRandom()) { - Carousel.SelectBeatmap(Beatmap.Value.BeatmapInfo); - } - else if (Carousel.SelectedBeatmapSet == null) - { - if (!Carousel.SelectNextRandom()) - // in the case random selection failed, we want to trigger selectionChanged - // to show the dummy beatmap (we have nothing else to display). - carouselSelectionChanged(null); + // in the case random selection failed, we want to trigger selectionChanged + // to show the dummy beatmap (we have nothing else to display). + carouselSelectionChanged(null); } } From 217dd2ecdc273af42124b89fa2c902828d545c95 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Fri, 9 Mar 2018 21:23:03 +0900 Subject: [PATCH 347/544] Initial push for better decoders --- .../Formats/LegacyBeatmapDecoderTest.cs | 16 +- .../Formats/LegacyStoryboardDecoderTest.cs | 4 +- .../Beatmaps/Formats/OsuJsonDecoderTest.cs | 4 +- .../Beatmaps/IO/OszArchiveReaderTest.cs | 2 +- osu.Game/Beatmaps/Beatmap.cs | 7 +- osu.Game/Beatmaps/BeatmapManager.cs | 6 +- .../Beatmaps/BeatmapManager_WorkingBeatmap.cs | 20 +- osu.Game/Beatmaps/Formats/Decoder.cs | 81 +++-- .../Beatmaps/Formats/JsonBeatmapDecoder.cs | 14 +- .../Beatmaps/Formats/LegacyBeatmapDecoder.cs | 40 +-- osu.Game/Beatmaps/Formats/LegacyDecoder.cs | 59 +--- .../Formats/LegacyStoryboardDecoder.cs | 296 +++++++++--------- .../Objects/Legacy/ConvertHitObjectParser.cs | 4 +- .../Tests/Beatmaps/BeatmapConversionTest.cs | 4 +- osu.Game/Tests/Visual/TestCasePlayer.cs | 2 +- 15 files changed, 250 insertions(+), 309 deletions(-) diff --git a/osu.Game.Tests/Beatmaps/Formats/LegacyBeatmapDecoderTest.cs b/osu.Game.Tests/Beatmaps/Formats/LegacyBeatmapDecoderTest.cs index ab10da2cd1..b74be134c1 100644 --- a/osu.Game.Tests/Beatmaps/Formats/LegacyBeatmapDecoderTest.cs +++ b/osu.Game.Tests/Beatmaps/Formats/LegacyBeatmapDecoderTest.cs @@ -24,7 +24,7 @@ namespace osu.Game.Tests.Beatmaps.Formats using (var resStream = Resource.OpenResource("Soleily - Renatus (Gamu) [Insane].osu")) using (var stream = new StreamReader(resStream)) { - var beatmap = decoder.DecodeBeatmap(stream); + var beatmap = decoder.Decode(stream); var beatmapInfo = beatmap.BeatmapInfo; var metadata = beatmap.Metadata; @@ -47,7 +47,7 @@ namespace osu.Game.Tests.Beatmaps.Formats using (var resStream = Resource.OpenResource("Soleily - Renatus (Gamu) [Insane].osu")) using (var stream = new StreamReader(resStream)) { - var beatmapInfo = decoder.DecodeBeatmap(stream).BeatmapInfo; + var beatmapInfo = decoder.Decode(stream).BeatmapInfo; int[] expectedBookmarks = { @@ -72,7 +72,7 @@ namespace osu.Game.Tests.Beatmaps.Formats using (var resStream = Resource.OpenResource("Soleily - Renatus (Gamu) [Insane].osu")) using (var stream = new StreamReader(resStream)) { - var beatmap = decoder.DecodeBeatmap(stream); + var beatmap = decoder.Decode(stream); var beatmapInfo = beatmap.BeatmapInfo; var metadata = beatmap.Metadata; @@ -96,7 +96,7 @@ namespace osu.Game.Tests.Beatmaps.Formats using (var resStream = Resource.OpenResource("Soleily - Renatus (Gamu) [Insane].osu")) using (var stream = new StreamReader(resStream)) { - var difficulty = decoder.DecodeBeatmap(stream).BeatmapInfo.BaseDifficulty; + var difficulty = decoder.Decode(stream).BeatmapInfo.BaseDifficulty; Assert.AreEqual(6.5f, difficulty.DrainRate); Assert.AreEqual(4, difficulty.CircleSize); @@ -114,7 +114,7 @@ namespace osu.Game.Tests.Beatmaps.Formats using (var resStream = Resource.OpenResource("Soleily - Renatus (Gamu) [Insane].osu")) using (var stream = new StreamReader(resStream)) { - var beatmap = decoder.DecodeBeatmap(stream); + var beatmap = decoder.Decode(stream); var metadata = beatmap.Metadata; var breakPoint = beatmap.Breaks[0]; @@ -132,7 +132,7 @@ namespace osu.Game.Tests.Beatmaps.Formats using (var resStream = Resource.OpenResource("Soleily - Renatus (Gamu) [Insane].osu")) using (var stream = new StreamReader(resStream)) { - var beatmap = decoder.DecodeBeatmap(stream); + var beatmap = decoder.Decode(stream); var controlPoints = beatmap.ControlPointInfo; Assert.AreEqual(4, controlPoints.TimingPoints.Count); @@ -167,7 +167,7 @@ namespace osu.Game.Tests.Beatmaps.Formats using (var resStream = Resource.OpenResource("Soleily - Renatus (Gamu) [Insane].osu")) using (var stream = new StreamReader(resStream)) { - var comboColors = decoder.DecodeBeatmap(stream).ComboColors; + var comboColors = decoder.Decode(stream).ComboColors; Color4[] expectedColors = { @@ -191,7 +191,7 @@ namespace osu.Game.Tests.Beatmaps.Formats using (var resStream = Resource.OpenResource("Soleily - Renatus (Gamu) [Insane].osu")) using (var stream = new StreamReader(resStream)) { - var hitObjects = decoder.DecodeBeatmap(stream).HitObjects; + var hitObjects = decoder.Decode(stream).HitObjects; var curveData = hitObjects[0] as IHasCurve; var positionData = hitObjects[0] as IHasPosition; diff --git a/osu.Game.Tests/Beatmaps/Formats/LegacyStoryboardDecoderTest.cs b/osu.Game.Tests/Beatmaps/Formats/LegacyStoryboardDecoderTest.cs index dce6c0f55b..1c0801c634 100644 --- a/osu.Game.Tests/Beatmaps/Formats/LegacyStoryboardDecoderTest.cs +++ b/osu.Game.Tests/Beatmaps/Formats/LegacyStoryboardDecoderTest.cs @@ -18,11 +18,11 @@ namespace osu.Game.Tests.Beatmaps.Formats [Test] public void TestDecodeStoryboardEvents() { - var decoder = new LegacyBeatmapDecoder(); + var decoder = new LegacyStoryboardDecoder(); using (var resStream = Resource.OpenResource("Himeringo - Yotsuya-san ni Yoroshiku (RLC) [Winber1's Extreme].osu")) using (var stream = new StreamReader(resStream)) { - var storyboard = decoder.GetStoryboardDecoder().DecodeStoryboard(stream); + var storyboard = decoder.Decode(stream); Assert.IsTrue(storyboard.HasDrawable); Assert.AreEqual(4, storyboard.Layers.Count()); diff --git a/osu.Game.Tests/Beatmaps/Formats/OsuJsonDecoderTest.cs b/osu.Game.Tests/Beatmaps/Formats/OsuJsonDecoderTest.cs index 89d96c774e..80dea9d01d 100644 --- a/osu.Game.Tests/Beatmaps/Formats/OsuJsonDecoderTest.cs +++ b/osu.Game.Tests/Beatmaps/Formats/OsuJsonDecoderTest.cs @@ -159,7 +159,7 @@ namespace osu.Game.Tests.Beatmaps.Formats using (var sr = new StreamReader(stream)) { - var legacyDecoded = new LegacyBeatmapDecoder { ApplyOffsets = false }.DecodeBeatmap(sr); + var legacyDecoded = new LegacyBeatmapDecoder { ApplyOffsets = false }.Decode(sr); using (var ms = new MemoryStream()) using (var sw = new StreamWriter(ms)) using (var sr2 = new StreamReader(ms)) @@ -168,7 +168,7 @@ namespace osu.Game.Tests.Beatmaps.Formats sw.Flush(); ms.Position = 0; - return (legacyDecoded, new JsonBeatmapDecoder().DecodeBeatmap(sr2)); + return (legacyDecoded, new JsonBeatmapDecoder().Decode(sr2)); } } } diff --git a/osu.Game.Tests/Beatmaps/IO/OszArchiveReaderTest.cs b/osu.Game.Tests/Beatmaps/IO/OszArchiveReaderTest.cs index 1f7246a119..29d25accbb 100644 --- a/osu.Game.Tests/Beatmaps/IO/OszArchiveReaderTest.cs +++ b/osu.Game.Tests/Beatmaps/IO/OszArchiveReaderTest.cs @@ -50,7 +50,7 @@ namespace osu.Game.Tests.Beatmaps.IO BeatmapMetadata meta; using (var stream = new StreamReader(reader.GetStream("Soleily - Renatus (Deif) [Platter].osu"))) - meta = Decoder.GetDecoder(stream).DecodeBeatmap(stream).Metadata; + meta = Decoder.GetDecoder(stream).Decode(stream).Metadata; Assert.AreEqual(241526, meta.OnlineBeatmapSetID); Assert.AreEqual("Soleily", meta.Artist); diff --git a/osu.Game/Beatmaps/Beatmap.cs b/osu.Game/Beatmaps/Beatmap.cs index 4fd54e4364..9b00993b6e 100644 --- a/osu.Game/Beatmaps/Beatmap.cs +++ b/osu.Game/Beatmaps/Beatmap.cs @@ -22,6 +22,7 @@ namespace osu.Game.Beatmaps public BeatmapInfo BeatmapInfo = new BeatmapInfo(); public ControlPointInfo ControlPointInfo = new ControlPointInfo(); public List Breaks = new List(); + public List ComboColors = new List { new Color4(17, 136, 170, 255), @@ -85,9 +86,13 @@ namespace osu.Game.Beatmaps /// Constructs a new beatmap. /// /// The original beatmap to use the parameters of. - public Beatmap(Beatmap original = null) + public Beatmap(Beatmap original) : base(original) { } + + public Beatmap() + { + } } } diff --git a/osu.Game/Beatmaps/BeatmapManager.cs b/osu.Game/Beatmaps/BeatmapManager.cs index 1d6d8b6726..817a3388e2 100644 --- a/osu.Game/Beatmaps/BeatmapManager.cs +++ b/osu.Game/Beatmaps/BeatmapManager.cs @@ -301,7 +301,7 @@ namespace osu.Game.Beatmaps BeatmapMetadata metadata; using (var stream = new StreamReader(reader.GetStream(mapName))) - metadata = Decoder.GetDecoder(stream).DecodeBeatmap(stream).Metadata; + metadata = Decoder.GetDecoder(stream).Decode(stream).Metadata; return new BeatmapSetInfo { @@ -328,8 +328,8 @@ namespace osu.Game.Beatmaps raw.CopyTo(ms); ms.Position = 0; - var decoder = Decoder.GetDecoder(sr); - Beatmap beatmap = decoder.DecodeBeatmap(sr); + var decoder = Decoder.GetDecoder(sr); + Beatmap beatmap = decoder.Decode(sr); beatmap.BeatmapInfo.Path = name; beatmap.BeatmapInfo.Hash = ms.ComputeSHA2Hash(); diff --git a/osu.Game/Beatmaps/BeatmapManager_WorkingBeatmap.cs b/osu.Game/Beatmaps/BeatmapManager_WorkingBeatmap.cs index a72c1adfcd..fb11684309 100644 --- a/osu.Game/Beatmaps/BeatmapManager_WorkingBeatmap.cs +++ b/osu.Game/Beatmaps/BeatmapManager_WorkingBeatmap.cs @@ -7,6 +7,7 @@ using System.Linq; using osu.Framework.Audio.Track; using osu.Framework.Graphics.Textures; using osu.Framework.IO.Stores; +using osu.Framework.Logging; using osu.Game.Beatmaps.Formats; using osu.Game.Graphics.Textures; using osu.Game.Storyboards; @@ -30,10 +31,7 @@ namespace osu.Game.Beatmaps try { using (var stream = new StreamReader(store.GetStream(getPathForFile(BeatmapInfo.Path)))) - { - Decoder decoder = Decoder.GetDecoder(stream); - return decoder.DecodeBeatmap(stream); - } + return Decoder.GetDecoder(stream).Decode(stream); } catch { @@ -78,23 +76,23 @@ namespace osu.Game.Beatmaps Storyboard storyboard; try { - using (var beatmap = new StreamReader(store.GetStream(getPathForFile(BeatmapInfo.Path)))) + using (var stream = new StreamReader(store.GetStream(getPathForFile(BeatmapInfo.Path)))) { - Decoder decoder = Decoder.GetDecoder(beatmap); + var decoder = Decoder.GetDecoder(stream); // todo: support loading from both set-wide storyboard *and* beatmap specific. - if (BeatmapSetInfo?.StoryboardFile == null) - storyboard = decoder.GetStoryboardDecoder().DecodeStoryboard(beatmap); + storyboard = decoder.Decode(stream); else { - using (var reader = new StreamReader(store.GetStream(getPathForFile(BeatmapSetInfo.StoryboardFile)))) - storyboard = decoder.GetStoryboardDecoder().DecodeStoryboard(beatmap, reader); + using (var secondaryStream = new StreamReader(store.GetStream(getPathForFile(BeatmapSetInfo.StoryboardFile)))) + storyboard = decoder.Decode(stream, secondaryStream); } } } - catch + catch (Exception e) { + Logger.Error(e, "Storyboard failed to load"); storyboard = new Storyboard(); } diff --git a/osu.Game/Beatmaps/Formats/Decoder.cs b/osu.Game/Beatmaps/Formats/Decoder.cs index 1aae52208a..9f10485c5f 100644 --- a/osu.Game/Beatmaps/Formats/Decoder.cs +++ b/osu.Game/Beatmaps/Formats/Decoder.cs @@ -4,38 +4,64 @@ using System; using System.Collections.Generic; using System.IO; -using osu.Game.Storyboards; +using System.Linq; namespace osu.Game.Beatmaps.Formats { + public abstract class Decoder : Decoder + where TOutput : new() + { + protected virtual TOutput CreateTemplateObject() => new TOutput(); + + public TOutput Decode(StreamReader primaryStream, params StreamReader[] otherStreams) + { + var output = CreateTemplateObject(); + foreach (StreamReader stream in new[] { primaryStream }.Concat(otherStreams)) + ParseStreamInto(stream, output); + return output; + } + + protected abstract void ParseStreamInto(StreamReader stream, TOutput beatmap); + } + public abstract class Decoder { - private static readonly Dictionary> decoders = new Dictionary>(); + private static readonly Dictionary>> decoders = new Dictionary>>(); static Decoder() { - LegacyDecoder.Register(); + LegacyBeatmapDecoder.Register(); JsonBeatmapDecoder.Register(); + LegacyStoryboardDecoder.Register(); } /// /// Retrieves a to parse a . /// /// A stream pointing to the . - public static Decoder GetDecoder(StreamReader stream) + public static Decoder GetDecoder(StreamReader stream) + where T : new() { if (stream == null) throw new ArgumentNullException(nameof(stream)); + if (!decoders.TryGetValue(typeof(T), out var typedDecoders)) + throw new IOException(@"Unknown decoder type"); + string line; do - { line = stream.ReadLine()?.Trim(); } - while (line != null && line.Length == 0); + { + line = stream.ReadLine()?.Trim(); + } while (line != null && line.Length == 0); - if (line == null || !decoders.ContainsKey(line)) + if (line == null) throw new IOException(@"Unknown file format"); - return decoders[line](line); + var decoder = typedDecoders.Select(d => line.StartsWith(d.Key) ? d.Value : null).FirstOrDefault(); + if (decoder == null) + throw new IOException(@"Unknown file format"); + + return (Decoder)decoder.Invoke(line); } /// @@ -43,41 +69,12 @@ namespace osu.Game.Beatmaps.Formats /// /// A string in the file which triggers this decoder to be used. /// A function which constructs the given . - protected static void AddDecoder(string magic, Func constructor) + protected static void AddDecoder(string magic, Func constructor) { - decoders[magic] = constructor; + if (!decoders.TryGetValue(typeof(T), out var typedDecoders)) + decoders.Add(typeof(T), typedDecoders = new Dictionary>()); + + typedDecoders[magic] = constructor; } - - /// - /// Retrieves a to parse a - /// - public abstract Decoder GetStoryboardDecoder(); - - public virtual Beatmap DecodeBeatmap(StreamReader stream) - { - var beatmap = new Beatmap - { - BeatmapInfo = new BeatmapInfo - { - Metadata = new BeatmapMetadata(), - BaseDifficulty = new BeatmapDifficulty(), - }, - }; - - ParseBeatmap(stream, beatmap); - return beatmap; - } - - protected abstract void ParseBeatmap(StreamReader stream, Beatmap beatmap); - - public virtual Storyboard DecodeStoryboard(params StreamReader[] streams) - { - var storyboard = new Storyboard(); - foreach (StreamReader stream in streams) - ParseStoryboard(stream, storyboard); - return storyboard; - } - - protected abstract void ParseStoryboard(StreamReader stream, Storyboard storyboard); } } diff --git a/osu.Game/Beatmaps/Formats/JsonBeatmapDecoder.cs b/osu.Game/Beatmaps/Formats/JsonBeatmapDecoder.cs index b0798e5a87..add0f39280 100644 --- a/osu.Game/Beatmaps/Formats/JsonBeatmapDecoder.cs +++ b/osu.Game/Beatmaps/Formats/JsonBeatmapDecoder.cs @@ -3,20 +3,17 @@ using System.IO; using osu.Game.IO.Serialization; -using osu.Game.Storyboards; namespace osu.Game.Beatmaps.Formats { - public class JsonBeatmapDecoder : Decoder + public class JsonBeatmapDecoder : Decoder { public static void Register() { - AddDecoder("{", m => new JsonBeatmapDecoder()); + AddDecoder("{", m => new JsonBeatmapDecoder()); } - public override Decoder GetStoryboardDecoder() => this; - - protected override void ParseBeatmap(StreamReader stream, Beatmap beatmap) + protected override void ParseStreamInto(StreamReader stream, Beatmap beatmap) { stream.BaseStream.Position = 0; stream.DiscardBufferedData(); @@ -26,10 +23,5 @@ namespace osu.Game.Beatmaps.Formats foreach (var hitObject in beatmap.HitObjects) hitObject.ApplyDefaults(beatmap.ControlPointInfo, beatmap.BeatmapInfo.BaseDifficulty); } - - protected override void ParseStoryboard(StreamReader stream, Storyboard storyboard) - { - // throw new System.NotImplementedException(); - } } } diff --git a/osu.Game/Beatmaps/Formats/LegacyBeatmapDecoder.cs b/osu.Game/Beatmaps/Formats/LegacyBeatmapDecoder.cs index 7d4f8b5bf5..c54d81aa2b 100644 --- a/osu.Game/Beatmaps/Formats/LegacyBeatmapDecoder.cs +++ b/osu.Game/Beatmaps/Formats/LegacyBeatmapDecoder.cs @@ -4,6 +4,7 @@ using System; using System.Globalization; using System.IO; +using System.Linq; using OpenTK.Graphics; using osu.Game.Beatmaps.Timing; using osu.Game.Rulesets.Objects.Legacy; @@ -12,8 +13,10 @@ using osu.Framework; namespace osu.Game.Beatmaps.Formats { - public class LegacyBeatmapDecoder : LegacyDecoder + public class LegacyBeatmapDecoder : LegacyDecoder { + public const int LATEST_VERSION = 14; + private Beatmap beatmap; private bool hasCustomColours; @@ -22,6 +25,11 @@ namespace osu.Game.Beatmaps.Formats private LegacySampleBank defaultSampleBank; private int defaultSampleVolume = 100; + public static void Register() + { + AddDecoder(@"osu file format v", m => new LegacyBeatmapDecoder(int.Parse(m.Split('v').Last()))); + } + /// /// lazer's audio timings in general doesn't match stable. this is the result of user testing, albeit limited. /// This only seems to be required on windows. We need to eventually figure out why, with a bit of luck. @@ -35,29 +43,16 @@ namespace osu.Game.Beatmaps.Formats private readonly int offset = UniversalOffset; - public LegacyBeatmapDecoder() + public LegacyBeatmapDecoder(int version = LATEST_VERSION) : base(version) { - } - - public LegacyBeatmapDecoder(string header) - { - BeatmapVersion = int.Parse(header.Substring(17)); - // BeatmapVersion 4 and lower had an incorrect offset (stable has this set as 24ms off) - offset += BeatmapVersion < 5 ? 24 : 0; + offset += FormatVersion < 5 ? 24 : 0; } - protected override void ParseBeatmap(StreamReader stream, Beatmap beatmap) + protected override void ParseStreamInto(StreamReader stream, Beatmap beatmap) { - if (stream == null) - throw new ArgumentNullException(nameof(stream)); - if (beatmap == null) - throw new ArgumentNullException(nameof(beatmap)); - this.beatmap = beatmap; - this.beatmap.BeatmapInfo.BeatmapVersion = BeatmapVersion; - - ParseContent(stream); + base.ParseStreamInto(stream, beatmap); // objects may be out of order *only* if a user has manually edited an .osu file. // unfortunately there are ranked maps in this state (example: https://osu.ppy.sh/s/594828). @@ -67,14 +62,9 @@ namespace osu.Game.Beatmaps.Formats hitObject.ApplyDefaults(this.beatmap.ControlPointInfo, this.beatmap.BeatmapInfo.BaseDifficulty); } - protected override bool ShouldSkipLine(string line) - { - if (base.ShouldSkipLine(line) || line.StartsWith(" ") || line.StartsWith("_")) - return true; - return false; - } + protected override bool ShouldSkipLine(string line) => base.ShouldSkipLine(line) || line.StartsWith(" ") || line.StartsWith("_"); - protected override void ProcessSection(Section section, string line) + protected override void ParseLine(Beatmap beatmap, Section section, string line) { switch (section) { diff --git a/osu.Game/Beatmaps/Formats/LegacyDecoder.cs b/osu.Game/Beatmaps/Formats/LegacyDecoder.cs index e0fc439924..6a3fb82586 100644 --- a/osu.Game/Beatmaps/Formats/LegacyDecoder.cs +++ b/osu.Game/Beatmaps/Formats/LegacyDecoder.cs @@ -4,47 +4,20 @@ using System; using System.Collections.Generic; using System.IO; -using osu.Game.Beatmaps.Legacy; -using osu.Game.Storyboards; namespace osu.Game.Beatmaps.Formats { - public abstract class LegacyDecoder : Decoder + public abstract class LegacyDecoder : Decoder + where T : new() { - public static void Register() + protected readonly int FormatVersion; + + protected LegacyDecoder(int version) { - AddDecoder(@"osu file format v14", m => new LegacyBeatmapDecoder(m)); - AddDecoder(@"osu file format v13", m => new LegacyBeatmapDecoder(m)); - AddDecoder(@"osu file format v12", m => new LegacyBeatmapDecoder(m)); - AddDecoder(@"osu file format v11", m => new LegacyBeatmapDecoder(m)); - AddDecoder(@"osu file format v10", m => new LegacyBeatmapDecoder(m)); - AddDecoder(@"osu file format v9", m => new LegacyBeatmapDecoder(m)); - AddDecoder(@"osu file format v8", m => new LegacyBeatmapDecoder(m)); - AddDecoder(@"osu file format v7", m => new LegacyBeatmapDecoder(m)); - AddDecoder(@"osu file format v6", m => new LegacyBeatmapDecoder(m)); - AddDecoder(@"osu file format v5", m => new LegacyBeatmapDecoder(m)); - AddDecoder(@"osu file format v4", m => new LegacyBeatmapDecoder(m)); - AddDecoder(@"osu file format v3", m => new LegacyBeatmapDecoder(m)); - // TODO: differences between versions + FormatVersion = version; } - protected int BeatmapVersion; - - public override Decoder GetStoryboardDecoder() => new LegacyStoryboardDecoder(BeatmapVersion); - - public override Beatmap DecodeBeatmap(StreamReader stream) => new LegacyBeatmap(base.DecodeBeatmap(stream)); - - protected override void ParseBeatmap(StreamReader stream, Beatmap beatmap) - { - throw new NotImplementedException(); - } - - protected override void ParseStoryboard(StreamReader stream, Storyboard storyboard) - { - throw new NotImplementedException(); - } - - protected void ParseContent(StreamReader stream) + protected override void ParseStreamInto(StreamReader stream, T beatmap) { Section section = Section.None; @@ -54,13 +27,6 @@ namespace osu.Game.Beatmaps.Formats if (ShouldSkipLine(line)) continue; - // It's already set in ParseBeatmap... why do it again? - //if (line.StartsWith(@"osu file format v")) - //{ - // Beatmap.BeatmapInfo.BeatmapVersion = int.Parse(line.Substring(17)); - // continue; - //} - if (line.StartsWith(@"[") && line.EndsWith(@"]")) { if (!Enum.TryParse(line.Substring(1, line.Length - 2), out section)) @@ -68,18 +34,13 @@ namespace osu.Game.Beatmaps.Formats continue; } - ProcessSection(section, line); + ParseLine(beatmap, section, line); } } - protected virtual bool ShouldSkipLine(string line) - { - if (string.IsNullOrWhiteSpace(line) || line.StartsWith("//")) - return true; - return false; - } + protected virtual bool ShouldSkipLine(string line) => string.IsNullOrWhiteSpace(line) || line.StartsWith("//"); - protected abstract void ProcessSection(Section section, string line); + protected abstract void ParseLine(T output, Section section, string line); protected KeyValuePair SplitKeyVal(string line, char separator) { diff --git a/osu.Game/Beatmaps/Formats/LegacyStoryboardDecoder.cs b/osu.Game/Beatmaps/Formats/LegacyStoryboardDecoder.cs index a4ff060c83..e35276ae1a 100644 --- a/osu.Game/Beatmaps/Formats/LegacyStoryboardDecoder.cs +++ b/osu.Game/Beatmaps/Formats/LegacyStoryboardDecoder.cs @@ -2,7 +2,7 @@ // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Globalization; using System.IO; using OpenTK; @@ -13,37 +13,34 @@ using osu.Game.Storyboards; namespace osu.Game.Beatmaps.Formats { - public class LegacyStoryboardDecoder : LegacyDecoder + public class LegacyStoryboardDecoder : LegacyDecoder { - private Storyboard storyboard; - private StoryboardSprite storyboardSprite; private CommandTimelineGroup timelineGroup; + private Storyboard storyboard; + private readonly Dictionary variables = new Dictionary(); public LegacyStoryboardDecoder() + : base(0) { } - public LegacyStoryboardDecoder(int beatmapVersion) + public static void Register() { - BeatmapVersion = beatmapVersion; + // note that this isn't completely correct + AddDecoder(@"osu file format v", m => new LegacyStoryboardDecoder()); + AddDecoder(@"[Events]", m => new LegacyStoryboardDecoder()); } - protected override void ParseStoryboard(StreamReader stream, Storyboard storyboard) + protected override void ParseStreamInto(StreamReader stream, Storyboard storyboard) { - if (stream == null) - throw new ArgumentNullException(nameof(stream)); - if (storyboard == null) - throw new ArgumentNullException(nameof(storyboard)); - this.storyboard = storyboard; - - ParseContent(stream); + base.ParseStreamInto(stream, storyboard); } - protected override void ProcessSection(Section section, string line) + protected override void ParseLine(Storyboard storyboard, Section section, string line) { switch (section) { @@ -80,38 +77,38 @@ namespace osu.Game.Beatmaps.Formats switch (type) { case EventType.Sprite: - { - var layer = parseLayer(split[1]); - var origin = parseOrigin(split[2]); - var path = cleanFilename(split[3]); - var x = float.Parse(split[4], NumberFormatInfo.InvariantInfo); - var y = float.Parse(split[5], NumberFormatInfo.InvariantInfo); - storyboardSprite = new StoryboardSprite(path, origin, new Vector2(x, y)); - storyboard.GetLayer(layer).Add(storyboardSprite); - } + { + var layer = parseLayer(split[1]); + var origin = parseOrigin(split[2]); + var path = cleanFilename(split[3]); + var x = float.Parse(split[4], NumberFormatInfo.InvariantInfo); + var y = float.Parse(split[5], NumberFormatInfo.InvariantInfo); + storyboardSprite = new StoryboardSprite(path, origin, new Vector2(x, y)); + storyboard.GetLayer(layer).Add(storyboardSprite); + } break; case EventType.Animation: - { - var layer = parseLayer(split[1]); - var origin = parseOrigin(split[2]); - var path = cleanFilename(split[3]); - var x = float.Parse(split[4], NumberFormatInfo.InvariantInfo); - var y = float.Parse(split[5], NumberFormatInfo.InvariantInfo); - var frameCount = int.Parse(split[6]); - var frameDelay = double.Parse(split[7], NumberFormatInfo.InvariantInfo); - var loopType = split.Length > 8 ? (AnimationLoopType)Enum.Parse(typeof(AnimationLoopType), split[8]) : AnimationLoopType.LoopForever; - storyboardSprite = new StoryboardAnimation(path, origin, new Vector2(x, y), frameCount, frameDelay, loopType); - storyboard.GetLayer(layer).Add(storyboardSprite); - } + { + var layer = parseLayer(split[1]); + var origin = parseOrigin(split[2]); + var path = cleanFilename(split[3]); + var x = float.Parse(split[4], NumberFormatInfo.InvariantInfo); + var y = float.Parse(split[5], NumberFormatInfo.InvariantInfo); + var frameCount = int.Parse(split[6]); + var frameDelay = double.Parse(split[7], NumberFormatInfo.InvariantInfo); + var loopType = split.Length > 8 ? (AnimationLoopType)Enum.Parse(typeof(AnimationLoopType), split[8]) : AnimationLoopType.LoopForever; + storyboardSprite = new StoryboardAnimation(path, origin, new Vector2(x, y), frameCount, frameDelay, loopType); + storyboard.GetLayer(layer).Add(storyboardSprite); + } break; case EventType.Sample: - { - var time = double.Parse(split[1], CultureInfo.InvariantCulture); - var layer = parseLayer(split[2]); - var path = cleanFilename(split[3]); - var volume = split.Length > 4 ? float.Parse(split[4], CultureInfo.InvariantCulture) : 100; - storyboard.GetLayer(layer).Add(new StoryboardSample(path, time, volume)); - } + { + var time = double.Parse(split[1], CultureInfo.InvariantCulture); + var layer = parseLayer(split[2]); + var path = cleanFilename(split[3]); + var volume = split.Length > 4 ? float.Parse(split[4], CultureInfo.InvariantCulture) : 100; + storyboard.GetLayer(layer).Add(new StoryboardSample(path, time, volume)); + } break; } } @@ -124,120 +121,120 @@ namespace osu.Game.Beatmaps.Formats switch (commandType) { case "T": - { - var triggerName = split[1]; - var startTime = split.Length > 2 ? double.Parse(split[2], CultureInfo.InvariantCulture) : double.MinValue; - var endTime = split.Length > 3 ? double.Parse(split[3], CultureInfo.InvariantCulture) : double.MaxValue; - var groupNumber = split.Length > 4 ? int.Parse(split[4]) : 0; - timelineGroup = storyboardSprite?.AddTrigger(triggerName, startTime, endTime, groupNumber); - } + { + var triggerName = split[1]; + var startTime = split.Length > 2 ? double.Parse(split[2], CultureInfo.InvariantCulture) : double.MinValue; + var endTime = split.Length > 3 ? double.Parse(split[3], CultureInfo.InvariantCulture) : double.MaxValue; + var groupNumber = split.Length > 4 ? int.Parse(split[4]) : 0; + timelineGroup = storyboardSprite?.AddTrigger(triggerName, startTime, endTime, groupNumber); + } break; case "L": - { - var startTime = double.Parse(split[1], CultureInfo.InvariantCulture); - var loopCount = int.Parse(split[2]); - timelineGroup = storyboardSprite?.AddLoop(startTime, loopCount); - } + { + var startTime = double.Parse(split[1], CultureInfo.InvariantCulture); + var loopCount = int.Parse(split[2]); + timelineGroup = storyboardSprite?.AddLoop(startTime, loopCount); + } break; default: + { + if (string.IsNullOrEmpty(split[3])) + split[3] = split[2]; + + var easing = (Easing)int.Parse(split[1]); + var startTime = double.Parse(split[2], CultureInfo.InvariantCulture); + var endTime = double.Parse(split[3], CultureInfo.InvariantCulture); + + switch (commandType) { - if (string.IsNullOrEmpty(split[3])) - split[3] = split[2]; - - var easing = (Easing)int.Parse(split[1]); - var startTime = double.Parse(split[2], CultureInfo.InvariantCulture); - var endTime = double.Parse(split[3], CultureInfo.InvariantCulture); - - switch (commandType) + case "F": { - case "F": - { - var startValue = float.Parse(split[4], CultureInfo.InvariantCulture); - var endValue = split.Length > 5 ? float.Parse(split[5], CultureInfo.InvariantCulture) : startValue; - timelineGroup?.Alpha.Add(easing, startTime, endTime, startValue, endValue); - } - break; - case "S": - { - var startValue = float.Parse(split[4], CultureInfo.InvariantCulture); - var endValue = split.Length > 5 ? float.Parse(split[5], CultureInfo.InvariantCulture) : startValue; - timelineGroup?.Scale.Add(easing, startTime, endTime, new Vector2(startValue), new Vector2(endValue)); - } - break; - case "V": - { - var startX = float.Parse(split[4], CultureInfo.InvariantCulture); - var startY = float.Parse(split[5], CultureInfo.InvariantCulture); - var endX = split.Length > 6 ? float.Parse(split[6], CultureInfo.InvariantCulture) : startX; - var endY = split.Length > 7 ? float.Parse(split[7], CultureInfo.InvariantCulture) : startY; - timelineGroup?.Scale.Add(easing, startTime, endTime, new Vector2(startX, startY), new Vector2(endX, endY)); - } - break; - case "R": - { - var startValue = float.Parse(split[4], CultureInfo.InvariantCulture); - var endValue = split.Length > 5 ? float.Parse(split[5], CultureInfo.InvariantCulture) : startValue; - timelineGroup?.Rotation.Add(easing, startTime, endTime, MathHelper.RadiansToDegrees(startValue), MathHelper.RadiansToDegrees(endValue)); - } - break; - case "M": - { - var startX = float.Parse(split[4], CultureInfo.InvariantCulture); - var startY = float.Parse(split[5], CultureInfo.InvariantCulture); - var endX = split.Length > 6 ? float.Parse(split[6], CultureInfo.InvariantCulture) : startX; - var endY = split.Length > 7 ? float.Parse(split[7], CultureInfo.InvariantCulture) : startY; - timelineGroup?.X.Add(easing, startTime, endTime, startX, endX); - timelineGroup?.Y.Add(easing, startTime, endTime, startY, endY); - } - break; - case "MX": - { - var startValue = float.Parse(split[4], CultureInfo.InvariantCulture); - var endValue = split.Length > 5 ? float.Parse(split[5], CultureInfo.InvariantCulture) : startValue; - timelineGroup?.X.Add(easing, startTime, endTime, startValue, endValue); - } - break; - case "MY": - { - var startValue = float.Parse(split[4], CultureInfo.InvariantCulture); - var endValue = split.Length > 5 ? float.Parse(split[5], CultureInfo.InvariantCulture) : startValue; - timelineGroup?.Y.Add(easing, startTime, endTime, startValue, endValue); - } - break; - case "C": - { - var startRed = float.Parse(split[4], CultureInfo.InvariantCulture); - var startGreen = float.Parse(split[5], CultureInfo.InvariantCulture); - var startBlue = float.Parse(split[6], CultureInfo.InvariantCulture); - var endRed = split.Length > 7 ? float.Parse(split[7], CultureInfo.InvariantCulture) : startRed; - var endGreen = split.Length > 8 ? float.Parse(split[8], CultureInfo.InvariantCulture) : startGreen; - var endBlue = split.Length > 9 ? float.Parse(split[9], CultureInfo.InvariantCulture) : startBlue; - timelineGroup?.Colour.Add(easing, startTime, endTime, - new Color4(startRed / 255f, startGreen / 255f, startBlue / 255f, 1), - new Color4(endRed / 255f, endGreen / 255f, endBlue / 255f, 1)); - } - break; - case "P": - { - var type = split[4]; - switch (type) - { - case "A": - timelineGroup?.BlendingMode.Add(easing, startTime, endTime, BlendingMode.Additive, startTime == endTime ? BlendingMode.Additive : BlendingMode.Inherit); - break; - case "H": - timelineGroup?.FlipH.Add(easing, startTime, endTime, true, startTime == endTime); - break; - case "V": - timelineGroup?.FlipV.Add(easing, startTime, endTime, true, startTime == endTime); - break; - } - } - break; - default: - throw new InvalidDataException($@"Unknown command type: {commandType}"); + var startValue = float.Parse(split[4], CultureInfo.InvariantCulture); + var endValue = split.Length > 5 ? float.Parse(split[5], CultureInfo.InvariantCulture) : startValue; + timelineGroup?.Alpha.Add(easing, startTime, endTime, startValue, endValue); } + break; + case "S": + { + var startValue = float.Parse(split[4], CultureInfo.InvariantCulture); + var endValue = split.Length > 5 ? float.Parse(split[5], CultureInfo.InvariantCulture) : startValue; + timelineGroup?.Scale.Add(easing, startTime, endTime, new Vector2(startValue), new Vector2(endValue)); + } + break; + case "V": + { + var startX = float.Parse(split[4], CultureInfo.InvariantCulture); + var startY = float.Parse(split[5], CultureInfo.InvariantCulture); + var endX = split.Length > 6 ? float.Parse(split[6], CultureInfo.InvariantCulture) : startX; + var endY = split.Length > 7 ? float.Parse(split[7], CultureInfo.InvariantCulture) : startY; + timelineGroup?.Scale.Add(easing, startTime, endTime, new Vector2(startX, startY), new Vector2(endX, endY)); + } + break; + case "R": + { + var startValue = float.Parse(split[4], CultureInfo.InvariantCulture); + var endValue = split.Length > 5 ? float.Parse(split[5], CultureInfo.InvariantCulture) : startValue; + timelineGroup?.Rotation.Add(easing, startTime, endTime, MathHelper.RadiansToDegrees(startValue), MathHelper.RadiansToDegrees(endValue)); + } + break; + case "M": + { + var startX = float.Parse(split[4], CultureInfo.InvariantCulture); + var startY = float.Parse(split[5], CultureInfo.InvariantCulture); + var endX = split.Length > 6 ? float.Parse(split[6], CultureInfo.InvariantCulture) : startX; + var endY = split.Length > 7 ? float.Parse(split[7], CultureInfo.InvariantCulture) : startY; + timelineGroup?.X.Add(easing, startTime, endTime, startX, endX); + timelineGroup?.Y.Add(easing, startTime, endTime, startY, endY); + } + break; + case "MX": + { + var startValue = float.Parse(split[4], CultureInfo.InvariantCulture); + var endValue = split.Length > 5 ? float.Parse(split[5], CultureInfo.InvariantCulture) : startValue; + timelineGroup?.X.Add(easing, startTime, endTime, startValue, endValue); + } + break; + case "MY": + { + var startValue = float.Parse(split[4], CultureInfo.InvariantCulture); + var endValue = split.Length > 5 ? float.Parse(split[5], CultureInfo.InvariantCulture) : startValue; + timelineGroup?.Y.Add(easing, startTime, endTime, startValue, endValue); + } + break; + case "C": + { + var startRed = float.Parse(split[4], CultureInfo.InvariantCulture); + var startGreen = float.Parse(split[5], CultureInfo.InvariantCulture); + var startBlue = float.Parse(split[6], CultureInfo.InvariantCulture); + var endRed = split.Length > 7 ? float.Parse(split[7], CultureInfo.InvariantCulture) : startRed; + var endGreen = split.Length > 8 ? float.Parse(split[8], CultureInfo.InvariantCulture) : startGreen; + var endBlue = split.Length > 9 ? float.Parse(split[9], CultureInfo.InvariantCulture) : startBlue; + timelineGroup?.Colour.Add(easing, startTime, endTime, + new Color4(startRed / 255f, startGreen / 255f, startBlue / 255f, 1), + new Color4(endRed / 255f, endGreen / 255f, endBlue / 255f, 1)); + } + break; + case "P": + { + var type = split[4]; + switch (type) + { + case "A": + timelineGroup?.BlendingMode.Add(easing, startTime, endTime, BlendingMode.Additive, startTime == endTime ? BlendingMode.Additive : BlendingMode.Inherit); + break; + case "H": + timelineGroup?.FlipH.Add(easing, startTime, endTime, true, startTime == endTime); + break; + case "V": + timelineGroup?.FlipV.Add(easing, startTime, endTime, true, startTime == endTime); + break; + } + } + break; + default: + throw new InvalidDataException($@"Unknown command type: {commandType}"); } + } break; } } @@ -269,6 +266,7 @@ namespace osu.Game.Beatmaps.Formats case LegacyOrigins.BottomRight: return Anchor.BottomRight; } + throw new InvalidDataException($@"Unknown origin: {value}"); } diff --git a/osu.Game/Rulesets/Objects/Legacy/ConvertHitObjectParser.cs b/osu.Game/Rulesets/Objects/Legacy/ConvertHitObjectParser.cs index ce292ef223..5084b28cf2 100644 --- a/osu.Game/Rulesets/Objects/Legacy/ConvertHitObjectParser.cs +++ b/osu.Game/Rulesets/Objects/Legacy/ConvertHitObjectParser.cs @@ -188,8 +188,8 @@ namespace osu.Game.Rulesets.Objects.Legacy string[] split = str.Split(':'); - var bank = (LegacyDecoder.LegacySampleBank)Convert.ToInt32(split[0]); - var addbank = (LegacyDecoder.LegacySampleBank)Convert.ToInt32(split[1]); + var bank = (LegacyBeatmapDecoder.LegacySampleBank)Convert.ToInt32(split[0]); + var addbank = (LegacyBeatmapDecoder.LegacySampleBank)Convert.ToInt32(split[1]); // Let's not implement this for now, because this doesn't fit nicely into the bank structure //string sampleFile = split2.Length > 4 ? split2[4] : string.Empty; diff --git a/osu.Game/Tests/Beatmaps/BeatmapConversionTest.cs b/osu.Game/Tests/Beatmaps/BeatmapConversionTest.cs index 219d805bc1..8505498e4f 100644 --- a/osu.Game/Tests/Beatmaps/BeatmapConversionTest.cs +++ b/osu.Game/Tests/Beatmaps/BeatmapConversionTest.cs @@ -112,9 +112,9 @@ namespace osu.Game.Tests.Beatmaps using (var resStream = openResource($"{resource_namespace}.{name}.osu")) using (var stream = new StreamReader(resStream)) { - var decoder = Decoder.GetDecoder(stream); + var decoder = Decoder.GetDecoder(stream); ((LegacyBeatmapDecoder)decoder).ApplyOffsets = false; - return decoder.DecodeBeatmap(stream); + return decoder.Decode(stream); } } diff --git a/osu.Game/Tests/Visual/TestCasePlayer.cs b/osu.Game/Tests/Visual/TestCasePlayer.cs index 181ed5e0e6..d835adb54f 100644 --- a/osu.Game/Tests/Visual/TestCasePlayer.cs +++ b/osu.Game/Tests/Visual/TestCasePlayer.cs @@ -65,7 +65,7 @@ namespace osu.Game.Tests.Visual using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(test_beatmap_data))) using (var reader = new StreamReader(stream)) - beatmap = Game.Beatmaps.Formats.Decoder.GetDecoder(reader).DecodeBeatmap(reader); + beatmap = Game.Beatmaps.Formats.Decoder.GetDecoder(reader).Decode(reader); return beatmap; } From 2b0309b26d905a2c5a1448d6bdf4f74863374e15 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Fri, 9 Mar 2018 21:29:13 +0900 Subject: [PATCH 348/544] Update framework --- osu-framework | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu-framework b/osu-framework index 6372fb22c1..214035c3d4 160000 --- a/osu-framework +++ b/osu-framework @@ -1 +1 @@ -Subproject commit 6372fb22c1c85f600921a139849b8dedf71026d5 +Subproject commit 214035c3d4974a9507fef8670000cef8326f1f5e From 2c0488b1f17ac169632cc6e575318ddfd9d360e6 Mon Sep 17 00:00:00 2001 From: naoey Date: Fri, 9 Mar 2018 19:39:28 +0530 Subject: [PATCH 349/544] Invert bool, add test, and handle ruleset change. --- .../Visual/TestCaseBeatmapCarousel.cs | 42 ++++++++++++++++++- osu.Game/Screens/Select/BeatmapCarousel.cs | 10 ++--- osu.Game/Screens/Select/SongSelect.cs | 11 +++-- 3 files changed, 54 insertions(+), 9 deletions(-) diff --git a/osu.Game.Tests/Visual/TestCaseBeatmapCarousel.cs b/osu.Game.Tests/Visual/TestCaseBeatmapCarousel.cs index fe26366362..c68e548f44 100644 --- a/osu.Game.Tests/Visual/TestCaseBeatmapCarousel.cs +++ b/osu.Game.Tests/Visual/TestCaseBeatmapCarousel.cs @@ -12,6 +12,7 @@ using osu.Framework.Extensions; using osu.Framework.Graphics; using osu.Game.Beatmaps; using osu.Game.Configuration; +using osu.Game.Rulesets; using osu.Game.Screens.Select; using osu.Game.Screens.Select.Carousel; using osu.Game.Screens.Select.Filter; @@ -22,6 +23,7 @@ namespace osu.Game.Tests.Visual public class TestCaseBeatmapCarousel : OsuTestCase { private TestBeatmapCarousel carousel; + private RulesetStore rulesets; public override IReadOnlyList RequiredTypes => new[] { @@ -46,8 +48,10 @@ namespace osu.Game.Tests.Visual private const int set_count = 5; [BackgroundDependencyLoader] - private void load() + private void load(RulesetStore rulesets) { + this.rulesets = rulesets; + Add(carousel = new TestBeatmapCarousel { RelativeSizeAxes = Axes.Both, @@ -75,6 +79,7 @@ namespace osu.Game.Tests.Visual testRemoveAll(); testEmptyTraversal(); testHiding(); + testSelectingFilteredRuleset(); } private void ensureRandomFetchSuccess() => @@ -363,6 +368,41 @@ namespace osu.Game.Tests.Visual } } + private void testSelectingFilteredRuleset() + { + var testMixed = createTestBeatmapSet(set_count + 1); + AddStep("add mixed ruleset beatmapset", () => + { + for (int i = 0; i <= 2; i++) + { + testMixed.Beatmaps[i].Ruleset = rulesets.AvailableRulesets.ElementAt(i); + testMixed.Beatmaps[i].RulesetID = i; + } + + carousel.UpdateBeatmapSet(testMixed); + }); + AddStep("filter to ruleset 0", () => + carousel.Filter(new FilterCriteria { Ruleset = rulesets.AvailableRulesets.ElementAt(0) }, false)); + AddStep("select filtered map skipping filtered", () => carousel.SelectBeatmap(testMixed.Beatmaps[1], false)); + AddAssert("unfiltered beatmap selected", () => carousel.SelectedBeatmap.Equals(testMixed.Beatmaps[0])); + + AddStep("remove mixed set", () => + { + carousel.RemoveBeatmapSet(testMixed); + testMixed = null; + }); + var testSingle = createTestBeatmapSet(set_count + 2); + testSingle.Beatmaps.ForEach(b => + { + b.Ruleset = rulesets.AvailableRulesets.ElementAt(1); + b.RulesetID = b.Ruleset.ID ?? 1; + }); + AddStep("add single ruleset beatmapset", () => carousel.UpdateBeatmapSet(testSingle)); + AddStep("select filtered map skipping filtered", () => carousel.SelectBeatmap(testSingle.Beatmaps[0], false)); + checkNoSelection(); + AddStep("remove single ruleset set", () => carousel.RemoveBeatmapSet(testSingle)); + } + private BeatmapSetInfo createTestBeatmapSet(int id) { return new BeatmapSetInfo diff --git a/osu.Game/Screens/Select/BeatmapCarousel.cs b/osu.Game/Screens/Select/BeatmapCarousel.cs index 287584bf2f..c2bb155753 100644 --- a/osu.Game/Screens/Select/BeatmapCarousel.cs +++ b/osu.Game/Screens/Select/BeatmapCarousel.cs @@ -172,20 +172,20 @@ namespace osu.Game.Screens.Select /// /// Selects a given beatmap on the carousel. /// - /// If skipFiltered is true, we will try to select another unfiltered beatmap in the same set. If the + /// If bypassFilters is false, we will try to select another unfiltered beatmap in the same set. If the /// entire set is filtered, no selection is made. /// /// The beatmap to select. - /// Whether to skip selecting filtered beatmaps. + /// Whether to select the beatmap even if it is filtered (i.e., not visible on carousel). /// True if a selection was made, False if it wasn't. - public bool SelectBeatmap(BeatmapInfo beatmap, bool skipFiltered = false) + public bool SelectBeatmap(BeatmapInfo beatmap, bool bypassFilters = true) { if (beatmap?.Hidden != false) return false; foreach (CarouselBeatmapSet set in beatmapSets) { - if (skipFiltered && set.Filtered) + if (!bypassFilters && set.Filtered) continue; var item = set.Beatmaps.FirstOrDefault(p => p.Beatmap.Equals(beatmap)); @@ -194,7 +194,7 @@ namespace osu.Game.Screens.Select // The beatmap that needs to be selected doesn't exist in this set continue; - if (skipFiltered && item.Filtered) + if (!bypassFilters && item.Filtered) // The beatmap exists in this set but is filtered, so look for the first unfiltered map in the set item = set.Beatmaps.FirstOrDefault(b => !b.Filtered); diff --git a/osu.Game/Screens/Select/SongSelect.cs b/osu.Game/Screens/Select/SongSelect.cs index 461b17338d..b12ab69edd 100644 --- a/osu.Game/Screens/Select/SongSelect.cs +++ b/osu.Game/Screens/Select/SongSelect.cs @@ -259,8 +259,13 @@ namespace osu.Game.Screens.Select protected void WorkingBeatmapChanged(WorkingBeatmap beatmap) { - if (IsCurrentScreen) - Carousel.SelectBeatmap(beatmap?.BeatmapInfo); + if (IsCurrentScreen && !Carousel.SelectBeatmap(beatmap?.BeatmapInfo, false)) + // If selecting new beatmap without bypassing filters failed, there's possibly a ruleset mismatch + if (beatmap?.BeatmapInfo?.Ruleset != null && beatmap.BeatmapInfo.Ruleset != Ruleset.Value) + { + Ruleset.Value = beatmap.BeatmapInfo.Ruleset; + Carousel.SelectBeatmap(beatmap.BeatmapInfo); + } } /// @@ -452,7 +457,7 @@ namespace osu.Game.Screens.Select private void carouselBeatmapsLoaded() { - if (!Beatmap.IsDefault && Beatmap.Value.BeatmapSetInfo?.DeletePending == false && Beatmap.Value.BeatmapSetInfo?.Protected == false && Carousel.SelectBeatmap(Beatmap.Value.BeatmapInfo, true)) + if (!Beatmap.IsDefault && Beatmap.Value.BeatmapSetInfo?.DeletePending == false && Beatmap.Value.BeatmapSetInfo?.Protected == false && Carousel.SelectBeatmap(Beatmap.Value.BeatmapInfo, false)) return; if (Carousel.SelectedBeatmapSet == null && !Carousel.SelectNextRandom()) From 3b766b8ec869c7503ea79c130c09a4608d58785d Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Fri, 9 Mar 2018 23:11:48 +0900 Subject: [PATCH 350/544] Make CaptureBox account for changes in hitobject states --- osu.Game/Rulesets/Edit/Layers/Selection/CaptureBox.cs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/osu.Game/Rulesets/Edit/Layers/Selection/CaptureBox.cs b/osu.Game/Rulesets/Edit/Layers/Selection/CaptureBox.cs index 269dd79bf7..6702678448 100644 --- a/osu.Game/Rulesets/Edit/Layers/Selection/CaptureBox.cs +++ b/osu.Game/Rulesets/Edit/Layers/Selection/CaptureBox.cs @@ -42,6 +42,13 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection private void load(OsuColour colours) { BorderColour = colours.Yellow; + } + + protected override void Update() + { + base.Update(); + + // Todo: We might need to optimise this // Move the rectangle to cover the hitobjects var topLeft = new Vector2(float.MaxValue, float.MaxValue); From 4a48136e4f558ca4cba581534de4c256be5e434b Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Fri, 9 Mar 2018 23:12:34 +0900 Subject: [PATCH 351/544] Make hitobject positions adjustable --- .../Selection/Overlays/HitCircleOverlay.cs | 2 ++ .../Selection/Overlays/SliderOverlay.cs | 11 +++++---- .../Objects/Drawables/DrawableHitCircle.cs | 2 ++ .../Objects/Drawables/DrawableSlider.cs | 6 +++-- .../Objects/Drawables/DrawableSliderHead.cs | 14 +++++++++++ .../Objects/Drawables/DrawableSliderTail.cs | 4 +++- osu.Game.Rulesets.Osu/Objects/OsuHitObject.cs | 24 +++++++++++++++++-- osu.Game.Rulesets.Osu/Objects/Slider.cs | 4 ++-- osu.Game.Rulesets.Osu/Objects/SliderCircle.cs | 19 +++++++++++++++ .../osu.Game.Rulesets.Osu.csproj | 2 ++ .../Edit/Layers/Selection/HitObjectOverlay.cs | 18 ++++++++++++++ .../Edit/Types/IHasEditablePosition.cs | 12 ++++++++++ osu.Game/osu.Game.csproj | 1 + 13 files changed, 108 insertions(+), 11 deletions(-) create mode 100644 osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSliderHead.cs create mode 100644 osu.Game.Rulesets.Osu/Objects/SliderCircle.cs create mode 100644 osu.Game/Rulesets/Edit/Types/IHasEditablePosition.cs diff --git a/osu.Game.Rulesets.Osu/Edit/Layers/Selection/Overlays/HitCircleOverlay.cs b/osu.Game.Rulesets.Osu/Edit/Layers/Selection/Overlays/HitCircleOverlay.cs index 4e64783840..ea5104af18 100644 --- a/osu.Game.Rulesets.Osu/Edit/Layers/Selection/Overlays/HitCircleOverlay.cs +++ b/osu.Game.Rulesets.Osu/Edit/Layers/Selection/Overlays/HitCircleOverlay.cs @@ -22,6 +22,8 @@ namespace osu.Game.Rulesets.Osu.Edit.Layers.Selection.Overlays Scale = hitCircle.Scale; AddInternal(new RingPiece()); + + hitCircle.HitObject.PositionChanged += _ => Position = hitCircle.Position; } [BackgroundDependencyLoader] diff --git a/osu.Game.Rulesets.Osu/Edit/Layers/Selection/Overlays/SliderOverlay.cs b/osu.Game.Rulesets.Osu/Edit/Layers/Selection/Overlays/SliderOverlay.cs index a035a683e9..f63d8f0c62 100644 --- a/osu.Game.Rulesets.Osu/Edit/Layers/Selection/Overlays/SliderOverlay.cs +++ b/osu.Game.Rulesets.Osu/Edit/Layers/Selection/Overlays/SliderOverlay.cs @@ -22,18 +22,22 @@ namespace osu.Game.Rulesets.Osu.Edit.Layers.Selection.Overlays { this.slider = slider; - var obj = (Slider)slider.HitObject; + Position = slider.Position; + + var sliderObject = (Slider)slider.HitObject; InternalChildren = new Drawable[] { - body = new SliderBody(obj) + body = new SliderBody(sliderObject) { AccentColour = Color4.Transparent, - PathWidth = obj.Scale * 64 + PathWidth = sliderObject.Scale * 64 }, new SliderCircleOverlay(slider.HeadCircle, slider), new SliderCircleOverlay(slider.TailCircle, slider), }; + + sliderObject.PositionChanged += _ => Position = slider.Position; } [BackgroundDependencyLoader] @@ -46,7 +50,6 @@ namespace osu.Game.Rulesets.Osu.Edit.Layers.Selection.Overlays { base.Update(); - Position = slider.Position; Size = slider.Size; OriginPosition = slider.OriginPosition; diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableHitCircle.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableHitCircle.cs index 959c87bbba..d70b26e181 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableHitCircle.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableHitCircle.cs @@ -66,6 +66,8 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables //may not be so correct Size = circle.DrawSize; + + HitObject.PositionChanged += _ => Position = HitObject.StackedPosition; } protected override void CheckForJudgements(bool userTriggered, double timeOffset) diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs index f715ed075c..3fa047a780 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs @@ -55,8 +55,8 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables AlwaysPresent = true, Alpha = 0 }, - HeadCircle = new DrawableHitCircle(s.HeadCircle) { Position = s.TailCircle.Position - s.Position }, - TailCircle = new DrawableSliderTail(s.TailCircle) { Position = s.TailCircle.Position - s.Position } + HeadCircle = new DrawableSliderHead(s, s.HeadCircle), + TailCircle = new DrawableSliderTail(s, s.TailCircle) }; components.Add(Body); @@ -84,6 +84,8 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables components.Add(drawableRepeatPoint); AddNested(drawableRepeatPoint); } + + HitObject.PositionChanged += _ => Position = HitObject.StackedPosition; } [BackgroundDependencyLoader] diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSliderHead.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSliderHead.cs new file mode 100644 index 0000000000..dd31790ee0 --- /dev/null +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSliderHead.cs @@ -0,0 +1,14 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +namespace osu.Game.Rulesets.Osu.Objects.Drawables +{ + public class DrawableSliderHead : DrawableHitCircle + { + public DrawableSliderHead(Slider slider, HitCircle h) + : base(h) + { + Position = HitObject.Position - slider.Position; + } + } +} diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSliderTail.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSliderTail.cs index b907aea8c3..b277e7df7a 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSliderTail.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSliderTail.cs @@ -16,7 +16,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables public bool Tracking { get; set; } - public DrawableSliderTail(HitCircle hitCircle) + public DrawableSliderTail(Slider slider, HitCircle hitCircle) : base(hitCircle) { Origin = Anchor.Centre; @@ -25,6 +25,8 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables FillMode = FillMode.Fit; AlwaysPresent = true; + + Position = HitObject.Position - slider.Position; } protected override void CheckForJudgements(bool userTriggered, double timeOffset) diff --git a/osu.Game.Rulesets.Osu/Objects/OsuHitObject.cs b/osu.Game.Rulesets.Osu/Objects/OsuHitObject.cs index 9b9d88f0f6..93eaf70589 100644 --- a/osu.Game.Rulesets.Osu/Objects/OsuHitObject.cs +++ b/osu.Game.Rulesets.Osu/Objects/OsuHitObject.cs @@ -1,23 +1,41 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using System; using osu.Game.Beatmaps; using osu.Game.Rulesets.Objects; using OpenTK; using osu.Game.Rulesets.Objects.Types; using OpenTK.Graphics; using osu.Game.Beatmaps.ControlPoints; +using osu.Game.Rulesets.Edit.Types; namespace osu.Game.Rulesets.Osu.Objects { - public abstract class OsuHitObject : HitObject, IHasCombo, IHasPosition + public abstract class OsuHitObject : HitObject, IHasCombo, IHasPosition, IHasEditablePosition { public const double OBJECT_RADIUS = 64; + public event Action PositionChanged; + public double TimePreempt = 600; public double TimeFadein = 400; - public Vector2 Position { get; set; } + private Vector2 position; + + public Vector2 Position + { + get => position; + set + { + if (position == value) + return; + position = value; + + PositionChanged?.Invoke(value); + } + } + public float X => Position.X; public float Y => Position.Y; @@ -48,5 +66,7 @@ namespace osu.Game.Rulesets.Osu.Objects Scale = (1.0f - 0.7f * (difficulty.CircleSize - 5) / 5) / 2; } + + public virtual void SetPosition(Vector2 offset) => Position += offset; } } diff --git a/osu.Game.Rulesets.Osu/Objects/Slider.cs b/osu.Game.Rulesets.Osu/Objects/Slider.cs index 76439ca530..a633e3957e 100644 --- a/osu.Game.Rulesets.Osu/Objects/Slider.cs +++ b/osu.Game.Rulesets.Osu/Objects/Slider.cs @@ -95,7 +95,7 @@ namespace osu.Game.Rulesets.Osu.Objects private void createSliderEnds() { - HeadCircle = new HitCircle + HeadCircle = new SliderCircle(this) { StartTime = StartTime, Position = Position, @@ -105,7 +105,7 @@ namespace osu.Game.Rulesets.Osu.Objects SampleControlPoint = SampleControlPoint }; - TailCircle = new HitCircle + TailCircle = new SliderCircle(this) { StartTime = EndTime, Position = EndPosition, diff --git a/osu.Game.Rulesets.Osu/Objects/SliderCircle.cs b/osu.Game.Rulesets.Osu/Objects/SliderCircle.cs new file mode 100644 index 0000000000..31ea67bbe0 --- /dev/null +++ b/osu.Game.Rulesets.Osu/Objects/SliderCircle.cs @@ -0,0 +1,19 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using OpenTK; + +namespace osu.Game.Rulesets.Osu.Objects +{ + public class SliderCircle : HitCircle + { + private readonly Slider slider; + + public SliderCircle(Slider slider) + { + this.slider = slider; + } + + public override void SetPosition(Vector2 offset) => slider.SetPosition(offset); + } +} diff --git a/osu.Game.Rulesets.Osu/osu.Game.Rulesets.Osu.csproj b/osu.Game.Rulesets.Osu/osu.Game.Rulesets.Osu.csproj index 8e8a01b009..d6fe87660f 100644 --- a/osu.Game.Rulesets.Osu/osu.Game.Rulesets.Osu.csproj +++ b/osu.Game.Rulesets.Osu/osu.Game.Rulesets.Osu.csproj @@ -87,6 +87,7 @@ + @@ -117,6 +118,7 @@ + diff --git a/osu.Game/Rulesets/Edit/Layers/Selection/HitObjectOverlay.cs b/osu.Game/Rulesets/Edit/Layers/Selection/HitObjectOverlay.cs index 543dd2cc54..803e86ae77 100644 --- a/osu.Game/Rulesets/Edit/Layers/Selection/HitObjectOverlay.cs +++ b/osu.Game/Rulesets/Edit/Layers/Selection/HitObjectOverlay.cs @@ -2,6 +2,8 @@ // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using osu.Framework.Graphics.Containers; +using osu.Framework.Input; +using osu.Game.Rulesets.Edit.Types; using osu.Game.Rulesets.Objects.Drawables; namespace osu.Game.Rulesets.Edit.Layers.Selection @@ -19,6 +21,22 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection State = Visibility.Visible; } + protected override bool OnDragStart(InputState state) => hitObject.HitObject is IHasEditablePosition; + + protected override bool OnDrag(InputState state) + { + switch (hitObject.HitObject) + { + case IHasEditablePosition editablePosition: + editablePosition.SetPosition(state.Mouse.Delta); + break; + } + + return true; + } + + protected override bool OnDragEnd(InputState state) => true; + protected override void PopIn() => Alpha = 1; protected override void PopOut() => Alpha = 0; } diff --git a/osu.Game/Rulesets/Edit/Types/IHasEditablePosition.cs b/osu.Game/Rulesets/Edit/Types/IHasEditablePosition.cs new file mode 100644 index 0000000000..79694e37a7 --- /dev/null +++ b/osu.Game/Rulesets/Edit/Types/IHasEditablePosition.cs @@ -0,0 +1,12 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using OpenTK; + +namespace osu.Game.Rulesets.Edit.Types +{ + public interface IHasEditablePosition + { + void SetPosition(Vector2 offset); + } +} diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index d10f0085cc..aee38d85bc 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -365,6 +365,7 @@ + From ad72d3816b7e90f648ff1509b1ebf1446e44b3d2 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Fri, 9 Mar 2018 23:43:50 +0900 Subject: [PATCH 352/544] Allow dragging anywhere in a capture box to move objects --- osu.Game/Rulesets/Edit/HitObjectComposer.cs | 1 + .../Edit/Layers/Selection/CaptureBox.cs | 19 ++++++++++++ .../Edit/Layers/Selection/HitObjectOverlay.cs | 31 ++----------------- .../Layers/Selection/HitObjectOverlayLayer.cs | 29 ++++++++++++++--- .../Edit/Layers/Selection/SelectionLayer.cs | 6 ++++ 5 files changed, 53 insertions(+), 33 deletions(-) diff --git a/osu.Game/Rulesets/Edit/HitObjectComposer.cs b/osu.Game/Rulesets/Edit/HitObjectComposer.cs index e6a51cc39b..383adca136 100644 --- a/osu.Game/Rulesets/Edit/HitObjectComposer.cs +++ b/osu.Game/Rulesets/Edit/HitObjectComposer.cs @@ -108,6 +108,7 @@ namespace osu.Game.Rulesets.Edit selectionLayer.ObjectSelected += hitObjectOverlayLayer.AddOverlay; selectionLayer.ObjectDeselected += hitObjectOverlayLayer.RemoveOverlay; + selectionLayer.SelectionMovementRequested += hitObjectOverlayLayer.MoveObjects; toolboxCollection.Items = new[] { new RadioButton("Select", () => setCompositionTool(null)) } diff --git a/osu.Game/Rulesets/Edit/Layers/Selection/CaptureBox.cs b/osu.Game/Rulesets/Edit/Layers/Selection/CaptureBox.cs index 6702678448..1454c78014 100644 --- a/osu.Game/Rulesets/Edit/Layers/Selection/CaptureBox.cs +++ b/osu.Game/Rulesets/Edit/Layers/Selection/CaptureBox.cs @@ -1,11 +1,13 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using System; using System.Collections.Generic; using osu.Framework.Allocation; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Shapes; +using osu.Framework.Input; using osu.Game.Graphics; using osu.Game.Rulesets.Objects.Drawables; using OpenTK; @@ -17,6 +19,11 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection /// public class CaptureBox : VisibilityContainer { + /// + /// Invoked when the captured s should be moved. + /// + public event Action MovementRequested; + private readonly IDrawable captureArea; private readonly IReadOnlyList capturedObjects; @@ -67,6 +74,18 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection Position = topLeft; } + protected override bool OnMouseDown(InputState state, MouseDownEventArgs args) => true; + + protected override bool OnDragStart(InputState state) => true; + + protected override bool OnDrag(InputState state) + { + MovementRequested?.Invoke(state.Mouse.Delta); + return true; + } + + protected override bool OnDragEnd(InputState state) => true; + public override bool DisposeOnDeathRemoval => true; protected override void PopIn() => this.FadeIn(); diff --git a/osu.Game/Rulesets/Edit/Layers/Selection/HitObjectOverlay.cs b/osu.Game/Rulesets/Edit/Layers/Selection/HitObjectOverlay.cs index 803e86ae77..8c58275943 100644 --- a/osu.Game/Rulesets/Edit/Layers/Selection/HitObjectOverlay.cs +++ b/osu.Game/Rulesets/Edit/Layers/Selection/HitObjectOverlay.cs @@ -2,42 +2,17 @@ // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using osu.Framework.Graphics.Containers; -using osu.Framework.Input; -using osu.Game.Rulesets.Edit.Types; using osu.Game.Rulesets.Objects.Drawables; namespace osu.Game.Rulesets.Edit.Layers.Selection { - public class HitObjectOverlay : OverlayContainer + public class HitObjectOverlay : Container { - // ReSharper disable once NotAccessedField.Local - // This will be used later to handle drag movement, etc - private readonly DrawableHitObject hitObject; + public readonly DrawableHitObject HitObject; public HitObjectOverlay(DrawableHitObject hitObject) { - this.hitObject = hitObject; - - State = Visibility.Visible; + HitObject = hitObject; } - - protected override bool OnDragStart(InputState state) => hitObject.HitObject is IHasEditablePosition; - - protected override bool OnDrag(InputState state) - { - switch (hitObject.HitObject) - { - case IHasEditablePosition editablePosition: - editablePosition.SetPosition(state.Mouse.Delta); - break; - } - - return true; - } - - protected override bool OnDragEnd(InputState state) => true; - - protected override void PopIn() => Alpha = 1; - protected override void PopOut() => Alpha = 0; } } diff --git a/osu.Game/Rulesets/Edit/Layers/Selection/HitObjectOverlayLayer.cs b/osu.Game/Rulesets/Edit/Layers/Selection/HitObjectOverlayLayer.cs index 0b6e63d1fe..bb8496e9c6 100644 --- a/osu.Game/Rulesets/Edit/Layers/Selection/HitObjectOverlayLayer.cs +++ b/osu.Game/Rulesets/Edit/Layers/Selection/HitObjectOverlayLayer.cs @@ -1,20 +1,25 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE -using System.Collections.Generic; +using System.Linq; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; +using osu.Framework.Input; +using osu.Game.Rulesets.Edit.Types; using osu.Game.Rulesets.Objects.Drawables; +using OpenTK; namespace osu.Game.Rulesets.Edit.Layers.Selection { public class HitObjectOverlayLayer : CompositeDrawable { - private readonly Dictionary existingOverlays = new Dictionary(); + private readonly Container overlayContainer; public HitObjectOverlayLayer() { RelativeSizeAxes = Axes.Both; + + InternalChild = overlayContainer = new Container { RelativeSizeAxes = Axes.Both }; } /// @@ -27,8 +32,7 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection if (overlay == null) return; - existingOverlays[hitObject] = overlay; - AddInternal(overlay); + overlayContainer.Add(overlay); } /// @@ -37,13 +41,28 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection /// The to remove the overlay for. public void RemoveOverlay(DrawableHitObject hitObject) { - if (!existingOverlays.TryGetValue(hitObject, out var existing)) + var existing = overlayContainer.FirstOrDefault(h => h.HitObject == hitObject); + if (existing == null) return; existing.Hide(); existing.Expire(); } + public void MoveObjects(Vector2 offset) + { + // Todo: Various forms of snapping + foreach (var hitObject in overlayContainer.Select(o => o.HitObject.HitObject)) + { + switch (hitObject) + { + case IHasEditablePosition editablePosition: + editablePosition.SetPosition(offset); + break; + } + } + } + /// /// Creates a for a specific . /// diff --git a/osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs b/osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs index 3895d34d7f..0383b933ab 100644 --- a/osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs +++ b/osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs @@ -27,6 +27,11 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection /// public event Action ObjectDeselected; + /// + /// Invoked when the selected s should be moved. + /// + public event Action SelectionMovementRequested; + private readonly Playfield playfield; public SelectionLayer(Playfield playfield) @@ -192,6 +197,7 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection return; AddInternal(captureBox = new CaptureBox(this, selectedHitObjects.ToList())); + captureBox.MovementRequested += v => SelectionMovementRequested?.Invoke(v); } } } From 376f6eec58afb79c510ad46ed0e7e8d0c9bd9955 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Sat, 10 Mar 2018 00:02:13 +0900 Subject: [PATCH 353/544] SetPosition -> OffsetPosition --- osu.Game.Rulesets.Osu/Objects/OsuHitObject.cs | 2 +- osu.Game.Rulesets.Osu/Objects/SliderCircle.cs | 2 +- .../Rulesets/Edit/Layers/Selection/HitObjectOverlayLayer.cs | 2 +- osu.Game/Rulesets/Edit/Types/IHasEditablePosition.cs | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Objects/OsuHitObject.cs b/osu.Game.Rulesets.Osu/Objects/OsuHitObject.cs index 93eaf70589..339ad61b17 100644 --- a/osu.Game.Rulesets.Osu/Objects/OsuHitObject.cs +++ b/osu.Game.Rulesets.Osu/Objects/OsuHitObject.cs @@ -67,6 +67,6 @@ namespace osu.Game.Rulesets.Osu.Objects Scale = (1.0f - 0.7f * (difficulty.CircleSize - 5) / 5) / 2; } - public virtual void SetPosition(Vector2 offset) => Position += offset; + public virtual void OffsetPosition(Vector2 offset) => Position += offset; } } diff --git a/osu.Game.Rulesets.Osu/Objects/SliderCircle.cs b/osu.Game.Rulesets.Osu/Objects/SliderCircle.cs index 31ea67bbe0..1e83d02735 100644 --- a/osu.Game.Rulesets.Osu/Objects/SliderCircle.cs +++ b/osu.Game.Rulesets.Osu/Objects/SliderCircle.cs @@ -14,6 +14,6 @@ namespace osu.Game.Rulesets.Osu.Objects this.slider = slider; } - public override void SetPosition(Vector2 offset) => slider.SetPosition(offset); + public override void OffsetPosition(Vector2 offset) => slider.OffsetPosition(offset); } } diff --git a/osu.Game/Rulesets/Edit/Layers/Selection/HitObjectOverlayLayer.cs b/osu.Game/Rulesets/Edit/Layers/Selection/HitObjectOverlayLayer.cs index bb8496e9c6..d391855f7a 100644 --- a/osu.Game/Rulesets/Edit/Layers/Selection/HitObjectOverlayLayer.cs +++ b/osu.Game/Rulesets/Edit/Layers/Selection/HitObjectOverlayLayer.cs @@ -57,7 +57,7 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection switch (hitObject) { case IHasEditablePosition editablePosition: - editablePosition.SetPosition(offset); + editablePosition.OffsetPosition(state.Mouse.Delta); break; } } diff --git a/osu.Game/Rulesets/Edit/Types/IHasEditablePosition.cs b/osu.Game/Rulesets/Edit/Types/IHasEditablePosition.cs index 79694e37a7..3530dba8f4 100644 --- a/osu.Game/Rulesets/Edit/Types/IHasEditablePosition.cs +++ b/osu.Game/Rulesets/Edit/Types/IHasEditablePosition.cs @@ -7,6 +7,6 @@ namespace osu.Game.Rulesets.Edit.Types { public interface IHasEditablePosition { - void SetPosition(Vector2 offset); + void OffsetPosition(Vector2 offset); } } From 0e8fbc47b7610a8fc2f69e2a3aa47372c63d9b1f Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Sat, 10 Mar 2018 00:02:51 +0900 Subject: [PATCH 354/544] Give HitObjectOverlayLayer full input state information --- osu.Game/Rulesets/Edit/Layers/Selection/CaptureBox.cs | 4 ++-- .../Rulesets/Edit/Layers/Selection/HitObjectOverlayLayer.cs | 3 +-- osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs | 2 +- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/osu.Game/Rulesets/Edit/Layers/Selection/CaptureBox.cs b/osu.Game/Rulesets/Edit/Layers/Selection/CaptureBox.cs index 1454c78014..970481032b 100644 --- a/osu.Game/Rulesets/Edit/Layers/Selection/CaptureBox.cs +++ b/osu.Game/Rulesets/Edit/Layers/Selection/CaptureBox.cs @@ -22,7 +22,7 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection /// /// Invoked when the captured s should be moved. /// - public event Action MovementRequested; + public event Action MovementRequested; private readonly IDrawable captureArea; private readonly IReadOnlyList capturedObjects; @@ -80,7 +80,7 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection protected override bool OnDrag(InputState state) { - MovementRequested?.Invoke(state.Mouse.Delta); + MovementRequested?.Invoke(state); return true; } diff --git a/osu.Game/Rulesets/Edit/Layers/Selection/HitObjectOverlayLayer.cs b/osu.Game/Rulesets/Edit/Layers/Selection/HitObjectOverlayLayer.cs index d391855f7a..438ba5e76d 100644 --- a/osu.Game/Rulesets/Edit/Layers/Selection/HitObjectOverlayLayer.cs +++ b/osu.Game/Rulesets/Edit/Layers/Selection/HitObjectOverlayLayer.cs @@ -7,7 +7,6 @@ using osu.Framework.Graphics.Containers; using osu.Framework.Input; using osu.Game.Rulesets.Edit.Types; using osu.Game.Rulesets.Objects.Drawables; -using OpenTK; namespace osu.Game.Rulesets.Edit.Layers.Selection { @@ -49,7 +48,7 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection existing.Expire(); } - public void MoveObjects(Vector2 offset) + public void MoveObjects(InputState state) { // Todo: Various forms of snapping foreach (var hitObject in overlayContainer.Select(o => o.HitObject.HitObject)) diff --git a/osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs b/osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs index 0383b933ab..ca6c1c122a 100644 --- a/osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs +++ b/osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs @@ -30,7 +30,7 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection /// /// Invoked when the selected s should be moved. /// - public event Action SelectionMovementRequested; + public event Action SelectionMovementRequested; private readonly Playfield playfield; From 7cabc54f646094964bc8220e6d7cd094cf37cfaf Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Sat, 10 Mar 2018 00:48:48 +0900 Subject: [PATCH 355/544] Fix major regression (framework revert) --- osu-framework | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu-framework b/osu-framework index 214035c3d4..6915954abd 160000 --- a/osu-framework +++ b/osu-framework @@ -1 +1 @@ -Subproject commit 214035c3d4974a9507fef8670000cef8326f1f5e +Subproject commit 6915954abdba64e72f698aa58698b00159f3678d From 4103c66cff25829c6acc0f9feb5ce5cff4060daa Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Sat, 10 Mar 2018 00:48:57 +0900 Subject: [PATCH 356/544] Move selection overlay to HitObjectOverlayLayer for extensibility --- .../Visual/TestCaseEditorSelectionLayer.cs | 2 +- osu.Game/Rulesets/Edit/HitObjectComposer.cs | 3 +- .../Layers/Selection/HitObjectOverlayLayer.cs | 28 ++++++++------- .../Edit/Layers/Selection/SelectionLayer.cs | 26 +++++++------- .../{CaptureBox.cs => SelectionOverlay.cs} | 35 ++++++++++--------- osu.Game/osu.Game.csproj | 2 +- 6 files changed, 50 insertions(+), 46 deletions(-) rename osu.Game/Rulesets/Edit/Layers/Selection/{CaptureBox.cs => SelectionOverlay.cs} (68%) diff --git a/osu.Game.Tests/Visual/TestCaseEditorSelectionLayer.cs b/osu.Game.Tests/Visual/TestCaseEditorSelectionLayer.cs index 8d12dfc517..dc8a13d044 100644 --- a/osu.Game.Tests/Visual/TestCaseEditorSelectionLayer.cs +++ b/osu.Game.Tests/Visual/TestCaseEditorSelectionLayer.cs @@ -26,7 +26,7 @@ namespace osu.Game.Tests.Visual { typeof(SelectionBox), typeof(SelectionLayer), - typeof(CaptureBox), + typeof(SelectionOverlay), typeof(HitObjectComposer), typeof(OsuHitObjectComposer), typeof(HitObjectOverlayLayer), diff --git a/osu.Game/Rulesets/Edit/HitObjectComposer.cs b/osu.Game/Rulesets/Edit/HitObjectComposer.cs index 383adca136..914640622b 100644 --- a/osu.Game/Rulesets/Edit/HitObjectComposer.cs +++ b/osu.Game/Rulesets/Edit/HitObjectComposer.cs @@ -108,7 +108,8 @@ namespace osu.Game.Rulesets.Edit selectionLayer.ObjectSelected += hitObjectOverlayLayer.AddOverlay; selectionLayer.ObjectDeselected += hitObjectOverlayLayer.RemoveOverlay; - selectionLayer.SelectionMovementRequested += hitObjectOverlayLayer.MoveObjects; + selectionLayer.SelectionCleared += hitObjectOverlayLayer.RemoveSelectionOverlay; + selectionLayer.SelectionFinished += hitObjectOverlayLayer.AddSelectionOverlay; toolboxCollection.Items = new[] { new RadioButton("Select", () => setCompositionTool(null)) } diff --git a/osu.Game/Rulesets/Edit/Layers/Selection/HitObjectOverlayLayer.cs b/osu.Game/Rulesets/Edit/Layers/Selection/HitObjectOverlayLayer.cs index 438ba5e76d..24d594f59a 100644 --- a/osu.Game/Rulesets/Edit/Layers/Selection/HitObjectOverlayLayer.cs +++ b/osu.Game/Rulesets/Edit/Layers/Selection/HitObjectOverlayLayer.cs @@ -1,11 +1,10 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using System.Collections.Generic; using System.Linq; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; -using osu.Framework.Input; -using osu.Game.Rulesets.Edit.Types; using osu.Game.Rulesets.Objects.Drawables; namespace osu.Game.Rulesets.Edit.Layers.Selection @@ -48,18 +47,14 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection existing.Expire(); } - public void MoveObjects(InputState state) + private SelectionOverlay currentSelectionOverlay; + + public void AddSelectionOverlay() => AddInternal(currentSelectionOverlay = CreateSelectionOverlay(overlayContainer)); + + public void RemoveSelectionOverlay() { - // Todo: Various forms of snapping - foreach (var hitObject in overlayContainer.Select(o => o.HitObject.HitObject)) - { - switch (hitObject) - { - case IHasEditablePosition editablePosition: - editablePosition.OffsetPosition(state.Mouse.Delta); - break; - } - } + currentSelectionOverlay?.Hide(); + currentSelectionOverlay?.Expire(); } /// @@ -67,5 +62,12 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection /// /// The to create the overlay for. protected virtual HitObjectOverlay CreateOverlayFor(DrawableHitObject hitObject) => null; + + /// + /// Creates a which outlines s + /// and handles all hitobject movement/pattern adjustments. + /// + /// The overlays. + protected virtual SelectionOverlay CreateSelectionOverlay(IReadOnlyList overlays) => new SelectionOverlay(overlays); } } diff --git a/osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs b/osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs index ca6c1c122a..2f8b9165c4 100644 --- a/osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs +++ b/osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs @@ -28,9 +28,14 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection public event Action ObjectDeselected; /// - /// Invoked when the selected s should be moved. + /// Invoked when the selection has been cleared. /// - public event Action SelectionMovementRequested; + public event Action SelectionCleared; + + /// + /// Invoked when the user has finished selecting all s. + /// + public event Action SelectionFinished; private readonly Playfield playfield; @@ -42,7 +47,6 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection } private SelectionBox selectionBox; - private CaptureBox captureBox; private readonly HashSet selectedHitObjects = new HashSet(); @@ -100,7 +104,7 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection if (!select(hitObject)) return; - clearCapture(); + clearSelection(); finishSelection(); } @@ -127,7 +131,7 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection if (!deselect(hitObject)) return; - clearCapture(); + clearSelection(); finishSelection(); } @@ -153,7 +157,7 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection selectedHitObjects.ForEach(h => ObjectDeselected?.Invoke(h)); selectedHitObjects.Clear(); - clearCapture(); + clearSelection(); } /// @@ -185,19 +189,13 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection select(target); } - private void clearCapture() - { - captureBox?.Hide(); - captureBox?.Expire(); - } + private void clearSelection() => SelectionCleared?.Invoke(); private void finishSelection() { if (selectedHitObjects.Count == 0) return; - - AddInternal(captureBox = new CaptureBox(this, selectedHitObjects.ToList())); - captureBox.MovementRequested += v => SelectionMovementRequested?.Invoke(v); + SelectionFinished?.Invoke(); } } } diff --git a/osu.Game/Rulesets/Edit/Layers/Selection/CaptureBox.cs b/osu.Game/Rulesets/Edit/Layers/Selection/SelectionOverlay.cs similarity index 68% rename from osu.Game/Rulesets/Edit/Layers/Selection/CaptureBox.cs rename to osu.Game/Rulesets/Edit/Layers/Selection/SelectionOverlay.cs index 970481032b..c20769a912 100644 --- a/osu.Game/Rulesets/Edit/Layers/Selection/CaptureBox.cs +++ b/osu.Game/Rulesets/Edit/Layers/Selection/SelectionOverlay.cs @@ -1,14 +1,15 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE -using System; using System.Collections.Generic; +using System.Linq; using osu.Framework.Allocation; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Shapes; using osu.Framework.Input; using osu.Game.Graphics; +using osu.Game.Rulesets.Edit.Types; using osu.Game.Rulesets.Objects.Drawables; using OpenTK; @@ -17,20 +18,13 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection /// /// A box which encloses s. /// - public class CaptureBox : VisibilityContainer + public class SelectionOverlay : VisibilityContainer { - /// - /// Invoked when the captured s should be moved. - /// - public event Action MovementRequested; + private readonly IReadOnlyList overlays; - private readonly IDrawable captureArea; - private readonly IReadOnlyList capturedObjects; - - public CaptureBox(IDrawable captureArea, IReadOnlyList capturedObjects) + public SelectionOverlay(IReadOnlyList overlays) { - this.captureArea = captureArea; - this.capturedObjects = capturedObjects; + this.overlays = overlays; Masking = true; BorderThickness = SelectionBox.BORDER_RADIUS; @@ -61,10 +55,10 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection var topLeft = new Vector2(float.MaxValue, float.MaxValue); var bottomRight = new Vector2(float.MinValue, float.MinValue); - foreach (var obj in capturedObjects) + foreach (var obj in overlays) { - topLeft = Vector2.ComponentMin(topLeft, captureArea.ToLocalSpace(obj.SelectionQuad.TopLeft)); - bottomRight = Vector2.ComponentMax(bottomRight, captureArea.ToLocalSpace(obj.SelectionQuad.BottomRight)); + topLeft = Vector2.ComponentMin(topLeft, Parent.ToLocalSpace(obj.HitObject.SelectionQuad.TopLeft)); + bottomRight = Vector2.ComponentMax(bottomRight, Parent.ToLocalSpace(obj.HitObject.SelectionQuad.BottomRight)); } topLeft -= new Vector2(5); @@ -80,7 +74,16 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection protected override bool OnDrag(InputState state) { - MovementRequested?.Invoke(state); + // Todo: Various forms of snapping + foreach (var hitObject in overlays.Select(o => o.HitObject.HitObject)) + { + switch (hitObject) + { + case IHasEditablePosition editablePosition: + editablePosition.OffsetPosition(state.Mouse.Delta); + break; + } + } return true; } diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index aee38d85bc..fa99ae616a 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -362,7 +362,7 @@ - + From 8ed5fce43a46b3c0f97fb939e6c24c371b2740dd Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Sat, 10 Mar 2018 01:11:56 +0900 Subject: [PATCH 357/544] Split out the slider head into a separate drawable hitobject --- .../Objects/Drawables/DrawableSlider.cs | 9 ++---- .../Objects/Drawables/DrawableSliderHead.cs | 32 +++++++++++++++++++ .../Objects/Drawables/DrawableSliderTail.cs | 4 ++- .../osu.Game.Rulesets.Osu.csproj | 1 + 4 files changed, 38 insertions(+), 8 deletions(-) create mode 100644 osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSliderHead.cs diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs index f715ed075c..5b9ed4d259 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs @@ -12,7 +12,6 @@ using osu.Framework.Graphics.Containers; using osu.Game.Rulesets.Osu.Judgements; using osu.Framework.Graphics.Primitives; using osu.Game.Configuration; -using osu.Game.Rulesets.Objects.Types; using osu.Game.Rulesets.Scoring; namespace osu.Game.Rulesets.Osu.Objects.Drawables @@ -55,8 +54,8 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables AlwaysPresent = true, Alpha = 0 }, - HeadCircle = new DrawableHitCircle(s.HeadCircle) { Position = s.TailCircle.Position - s.Position }, - TailCircle = new DrawableSliderTail(s.TailCircle) { Position = s.TailCircle.Position - s.Position } + HeadCircle = new DrawableSliderHead(s, s.HeadCircle), + TailCircle = new DrawableSliderTail(s, s.TailCircle) }; components.Add(Body); @@ -103,10 +102,6 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables double completionProgress = MathHelper.Clamp((Time.Current - slider.StartTime) / slider.Duration, 0, 1); - //todo: we probably want to reconsider this before adding scoring, but it looks and feels nice. - if (!HeadCircle.IsHit) - HeadCircle.Position = slider.CurvePositionAt(completionProgress); - foreach (var c in components.OfType()) c.UpdateProgress(completionProgress); foreach (var c in components.OfType()) c.UpdateSnakingPosition(slider.Curve.PositionAt(Body.SnakedStart ?? 0), slider.Curve.PositionAt(Body.SnakedEnd ?? 0)); foreach (var t in components.OfType()) t.Tracking = Ball.Tracking; diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSliderHead.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSliderHead.cs new file mode 100644 index 0000000000..cf36d5fc14 --- /dev/null +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSliderHead.cs @@ -0,0 +1,32 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using osu.Game.Rulesets.Objects.Types; +using OpenTK; + +namespace osu.Game.Rulesets.Osu.Objects.Drawables +{ + public class DrawableSliderHead : DrawableHitCircle + { + private readonly Slider slider; + + public DrawableSliderHead(Slider slider, HitCircle h) + : base(h) + { + this.slider = slider; + + Position = HitObject.Position - slider.Position; + } + + protected override void Update() + { + base.Update(); + + double completionProgress = MathHelper.Clamp((Time.Current - slider.StartTime) / slider.Duration, 0, 1); + + //todo: we probably want to reconsider this before adding scoring, but it looks and feels nice. + if (!IsHit) + Position = slider.CurvePositionAt(completionProgress); + } + } +} diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSliderTail.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSliderTail.cs index b907aea8c3..b277e7df7a 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSliderTail.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSliderTail.cs @@ -16,7 +16,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables public bool Tracking { get; set; } - public DrawableSliderTail(HitCircle hitCircle) + public DrawableSliderTail(Slider slider, HitCircle hitCircle) : base(hitCircle) { Origin = Anchor.Centre; @@ -25,6 +25,8 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables FillMode = FillMode.Fit; AlwaysPresent = true; + + Position = HitObject.Position - slider.Position; } protected override void CheckForJudgements(bool userTriggered, double timeOffset) diff --git a/osu.Game.Rulesets.Osu/osu.Game.Rulesets.Osu.csproj b/osu.Game.Rulesets.Osu/osu.Game.Rulesets.Osu.csproj index 8e8a01b009..92cac71ad3 100644 --- a/osu.Game.Rulesets.Osu/osu.Game.Rulesets.Osu.csproj +++ b/osu.Game.Rulesets.Osu/osu.Game.Rulesets.Osu.csproj @@ -87,6 +87,7 @@ + From 92b302971f3f04ef3a852aab3098dca1a49563ab Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Sat, 10 Mar 2018 01:23:53 +0900 Subject: [PATCH 358/544] Trim whitespace --- osu.Game.Rulesets.Osu/Objects/OsuHitObject.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game.Rulesets.Osu/Objects/OsuHitObject.cs b/osu.Game.Rulesets.Osu/Objects/OsuHitObject.cs index 339ad61b17..574063d4a5 100644 --- a/osu.Game.Rulesets.Osu/Objects/OsuHitObject.cs +++ b/osu.Game.Rulesets.Osu/Objects/OsuHitObject.cs @@ -31,7 +31,7 @@ namespace osu.Game.Rulesets.Osu.Objects if (position == value) return; position = value; - + PositionChanged?.Invoke(value); } } From ed20e31bbe1e95ee642d6357fb08e278ede68bad Mon Sep 17 00:00:00 2001 From: tgi74000 Date: Sat, 10 Mar 2018 08:39:11 +0100 Subject: [PATCH 359/544] Removed redundant parentheses --- osu.Game.Rulesets.Mania/Mods/ManiaMirrorMod.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game.Rulesets.Mania/Mods/ManiaMirrorMod.cs b/osu.Game.Rulesets.Mania/Mods/ManiaMirrorMod.cs index cbcbd9f329..e7f0e27733 100644 --- a/osu.Game.Rulesets.Mania/Mods/ManiaMirrorMod.cs +++ b/osu.Game.Rulesets.Mania/Mods/ManiaMirrorMod.cs @@ -22,7 +22,7 @@ namespace osu.Game.Rulesets.Mania.Mods { var availableColumns = ((ManiaRulesetContainer)rulesetContainer).Beatmap.TotalColumns; - rulesetContainer.Objects.OfType().ForEach(h => h.Column = -(h.Column) + (availableColumns)-1); + rulesetContainer.Objects.OfType().ForEach(h => h.Column = -h.Column + availableColumns - 1); } } } From a4dfeff2d775e018407c45eded431b33a9ec1a62 Mon Sep 17 00:00:00 2001 From: tgi74000 Date: Sat, 10 Mar 2018 08:44:46 +0100 Subject: [PATCH 360/544] Renamed ManiaMirrorMod to ManiaModMirror --- osu.Game.Rulesets.Mania/ManiaRuleset.cs | 2 +- .../Mods/{ManiaMirrorMod.cs => ManiaModMirror.cs} | 2 +- osu.Game.Rulesets.Mania/osu.Game.Rulesets.Mania.csproj | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) rename osu.Game.Rulesets.Mania/Mods/{ManiaMirrorMod.cs => ManiaModMirror.cs} (91%) diff --git a/osu.Game.Rulesets.Mania/ManiaRuleset.cs b/osu.Game.Rulesets.Mania/ManiaRuleset.cs index 7c257bf719..268bc23640 100644 --- a/osu.Game.Rulesets.Mania/ManiaRuleset.cs +++ b/osu.Game.Rulesets.Mania/ManiaRuleset.cs @@ -91,7 +91,7 @@ namespace osu.Game.Rulesets.Mania }, new ManiaModRandom(), new ManiaModDualStages(), - new ManiaMirrorMod(), + new ManiaModMirror(), new MultiMod { Mods = new Mod[] diff --git a/osu.Game.Rulesets.Mania/Mods/ManiaMirrorMod.cs b/osu.Game.Rulesets.Mania/Mods/ManiaModMirror.cs similarity index 91% rename from osu.Game.Rulesets.Mania/Mods/ManiaMirrorMod.cs rename to osu.Game.Rulesets.Mania/Mods/ManiaModMirror.cs index e7f0e27733..be3a0e02db 100644 --- a/osu.Game.Rulesets.Mania/Mods/ManiaMirrorMod.cs +++ b/osu.Game.Rulesets.Mania/Mods/ManiaModMirror.cs @@ -10,7 +10,7 @@ using System.Linq; namespace osu.Game.Rulesets.Mania.Mods { - public class ManiaMirrorMod : Mod, IApplicableToRulesetContainer + public class ManiaModMirror : Mod, IApplicableToRulesetContainer { public override string Name => "Mirror"; public override string ShortenedName => "MR"; diff --git a/osu.Game.Rulesets.Mania/osu.Game.Rulesets.Mania.csproj b/osu.Game.Rulesets.Mania/osu.Game.Rulesets.Mania.csproj index 3c80e21ff2..52d8f66717 100644 --- a/osu.Game.Rulesets.Mania/osu.Game.Rulesets.Mania.csproj +++ b/osu.Game.Rulesets.Mania/osu.Game.Rulesets.Mania.csproj @@ -81,7 +81,7 @@ - + From 709fcf955239e89aa178614bfd72766dce32c76a Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Sat, 10 Mar 2018 20:01:36 +0900 Subject: [PATCH 361/544] Update ISSUE_TEMPLATE --- ISSUE_TEMPLATE.md | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/ISSUE_TEMPLATE.md b/ISSUE_TEMPLATE.md index ff930b07a3..2bff304fba 100644 --- a/ISSUE_TEMPLATE.md +++ b/ISSUE_TEMPLATE.md @@ -1,9 +1,11 @@ -osu!lazer is currently in early stages of development and is not yet ready for end users. Please avoid creating issues or bugs if you do not personally intend to fix them. Some acceptable topics include: +osu!lazer is currently still under heavy development! +Please ensure that you are making an issue for one of the following: + +- A bug with currently implemented features (not features that don't exist) +- A feature you are considering adding, so we can collaborate on feedback and design. - Discussions about technical design decisions -- Bugs that you have found and are personally willing and able to fix -- TODO lists of smaller tasks around larger features - -Basically, issues are not a place for you to get help. They are a place for developers to collaborate on the game. If your issue qualifies, replace this text with a detailed description of your issue with as much relevant information as you can provide. + +Screenshots and log files are highly welcomed. \ No newline at end of file From 9233266fe1311be39a71b826b652515f5398c743 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Sun, 11 Mar 2018 00:44:00 +0900 Subject: [PATCH 362/544] Fix login failure for users with no country rank Closes #2148. --- osu.Game.Tests/Visual/TestCaseUserProfile.cs | 6 ++++++ osu.Game/Overlays/Profile/RankGraph.cs | 4 ++-- osu.Game/Overlays/UserProfileOverlay.cs | 15 +++++++++------ osu.Game/Users/UserStatistics.cs | 4 ++-- 4 files changed, 19 insertions(+), 10 deletions(-) diff --git a/osu.Game.Tests/Visual/TestCaseUserProfile.cs b/osu.Game.Tests/Visual/TestCaseUserProfile.cs index 3caef777e7..1fc6c6f224 100644 --- a/osu.Game.Tests/Visual/TestCaseUserProfile.cs +++ b/osu.Game.Tests/Visual/TestCaseUserProfile.cs @@ -58,6 +58,12 @@ namespace osu.Game.Tests.Visual checkSupporterTag(false); + AddStep("Show null dummy", () => profile.ShowUser(new User + { + Username = @"Null", + Id = 1, + }, false)); + AddStep("Show ppy", () => profile.ShowUser(new User { Username = @"peppy", diff --git a/osu.Game/Overlays/Profile/RankGraph.cs b/osu.Game/Overlays/Profile/RankGraph.cs index 429049c7bc..369bdee65f 100644 --- a/osu.Game/Overlays/Profile/RankGraph.cs +++ b/osu.Game/Overlays/Profile/RankGraph.cs @@ -95,7 +95,7 @@ namespace osu.Game.Overlays.Profile { placeholder.FadeIn(fade_duration, Easing.Out); - if (user == null) + if (user?.Statistics?.Ranks.Global == null) { rankText.Text = string.Empty; performanceText.Text = string.Empty; @@ -105,7 +105,7 @@ namespace osu.Game.Overlays.Profile return; } - int[] userRanks = user.RankHistory?.Data ?? new[] { user.Statistics.Ranks.Global }; + int[] userRanks = user.RankHistory?.Data ?? new[] { user.Statistics.Ranks.Global.Value }; ranks = userRanks.Select((x, index) => new KeyValuePair(index, x)).Where(x => x.Value != 0).ToArray(); if (ranks.Length > 1) diff --git a/osu.Game/Overlays/UserProfileOverlay.cs b/osu.Game/Overlays/UserProfileOverlay.cs index f3fd7aeac5..aed0a6d7c6 100644 --- a/osu.Game/Overlays/UserProfileOverlay.cs +++ b/osu.Game/Overlays/UserProfileOverlay.cs @@ -169,15 +169,18 @@ namespace osu.Game.Overlays { Header.User = user; - foreach (string id in user.ProfileOrder) + if (user.ProfileOrder != null) { - var sec = sections.FirstOrDefault(s => s.Identifier == id); - if (sec != null) + foreach (string id in user.ProfileOrder) { - sec.User.Value = user; + var sec = sections.FirstOrDefault(s => s.Identifier == id); + if (sec != null) + { + sec.User.Value = user; - sectionsContainer.Add(sec); - tabs.AddItem(sec); + sectionsContainer.Add(sec); + tabs.AddItem(sec); + } } } } diff --git a/osu.Game/Users/UserStatistics.cs b/osu.Game/Users/UserStatistics.cs index c29bc91d17..2504c9c62c 100644 --- a/osu.Game/Users/UserStatistics.cs +++ b/osu.Game/Users/UserStatistics.cs @@ -73,10 +73,10 @@ namespace osu.Game.Users public struct UserRanks { [JsonProperty(@"global")] - public int Global; + public int? Global; [JsonProperty(@"country")] - public int Country; + public int? Country; } } From db2a663234aea7180f577a807fb879c00f4d4908 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Sun, 11 Mar 2018 01:26:03 +0900 Subject: [PATCH 363/544] Use private instead of protected --- osu.Game/Screens/Select/SongSelect.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/osu.Game/Screens/Select/SongSelect.cs b/osu.Game/Screens/Select/SongSelect.cs index b12ab69edd..ca8a1cae41 100644 --- a/osu.Game/Screens/Select/SongSelect.cs +++ b/osu.Game/Screens/Select/SongSelect.cs @@ -214,7 +214,7 @@ namespace osu.Game.Screens.Select Beatmap.DisabledChanged += disabled => Carousel.AllowSelection = !disabled; Beatmap.TriggerChange(); - Beatmap.ValueChanged += WorkingBeatmapChanged; + Beatmap.ValueChanged += workingBeatmapChanged; } public void Edit(BeatmapInfo beatmap) @@ -257,7 +257,7 @@ namespace osu.Game.Screens.Select // We need to keep track of the last selected beatmap ignoring debounce to play the correct selection sounds. private BeatmapInfo beatmapNoDebounce; - protected void WorkingBeatmapChanged(WorkingBeatmap beatmap) + private void workingBeatmapChanged(WorkingBeatmap beatmap) { if (IsCurrentScreen && !Carousel.SelectBeatmap(beatmap?.BeatmapInfo, false)) // If selecting new beatmap without bypassing filters failed, there's possibly a ruleset mismatch From df2815f19e658326d8197f642e6fde4a257679ad Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Sun, 11 Mar 2018 02:11:25 +0900 Subject: [PATCH 364/544] Add TestCase for GameplayCursor --- .../Tests/TestCaseGameplayCursor.cs | 33 +++++++++++++++++++ .../osu.Game.Rulesets.Osu.csproj | 1 + 2 files changed, 34 insertions(+) create mode 100644 osu.Game.Rulesets.Osu/Tests/TestCaseGameplayCursor.cs diff --git a/osu.Game.Rulesets.Osu/Tests/TestCaseGameplayCursor.cs b/osu.Game.Rulesets.Osu/Tests/TestCaseGameplayCursor.cs new file mode 100644 index 0000000000..0504c47123 --- /dev/null +++ b/osu.Game.Rulesets.Osu/Tests/TestCaseGameplayCursor.cs @@ -0,0 +1,33 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using System; +using System.Collections.Generic; +using NUnit.Framework; +using osu.Framework.Allocation; +using osu.Framework.Graphics; +using osu.Framework.Graphics.Cursor; +using osu.Game.Graphics.Cursor; +using osu.Game.Rulesets.Osu.UI.Cursor; +using osu.Game.Tests.Visual; + +namespace osu.Game.Rulesets.Osu.Tests +{ + [TestFixture] + public class TestCaseGameplayCursor : OsuTestCase, IProvideCursor + { + private GameplayCursor cursor; + + public override IReadOnlyList RequiredTypes => new [] { typeof(CursorTrail) }; + + public CursorContainer Cursor => cursor; + + public bool ProvidingUserCursor => true; + + [BackgroundDependencyLoader] + private void load() + { + Add(cursor = new GameplayCursor() { RelativeSizeAxes = Axes.Both }); + } + } +} diff --git a/osu.Game.Rulesets.Osu/osu.Game.Rulesets.Osu.csproj b/osu.Game.Rulesets.Osu/osu.Game.Rulesets.Osu.csproj index 92cac71ad3..a7c060cd79 100644 --- a/osu.Game.Rulesets.Osu/osu.Game.Rulesets.Osu.csproj +++ b/osu.Game.Rulesets.Osu/osu.Game.Rulesets.Osu.csproj @@ -130,6 +130,7 @@ + From 5092fe5596c36e65c62be0cc453e7858d6a88a4e Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Sun, 11 Mar 2018 02:11:56 +0900 Subject: [PATCH 365/544] Adjust cursor trail display length In line with shader change at https://github.com/ppy/osu-resources/pull/41/commits/ad5ddec7b2a2b989bd67eaa38919fb0619ed8a6f --- osu.Game.Rulesets.Osu/UI/Cursor/CursorTrail.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game.Rulesets.Osu/UI/Cursor/CursorTrail.cs b/osu.Game.Rulesets.Osu/UI/Cursor/CursorTrail.cs index fed2105f21..dedfa28b7b 100644 --- a/osu.Game.Rulesets.Osu/UI/Cursor/CursorTrail.cs +++ b/osu.Game.Rulesets.Osu/UI/Cursor/CursorTrail.cs @@ -99,7 +99,7 @@ namespace osu.Game.Rulesets.Osu.UI.Cursor const int fade_clock_reset_threshold = 1000000; - time = (float)(Time.Current - timeOffset) / 500f; + time = (float)(Time.Current - timeOffset) / 300f; if (time > fade_clock_reset_threshold) resetTime(); } From ccc3c573abd6e1ae018947db37f5f27d7475b483 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Sun, 11 Mar 2018 02:20:00 +0900 Subject: [PATCH 366/544] Fix resharper not fixing --- osu.Game.Rulesets.Osu/Tests/TestCaseGameplayCursor.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game.Rulesets.Osu/Tests/TestCaseGameplayCursor.cs b/osu.Game.Rulesets.Osu/Tests/TestCaseGameplayCursor.cs index 0504c47123..273422f2e9 100644 --- a/osu.Game.Rulesets.Osu/Tests/TestCaseGameplayCursor.cs +++ b/osu.Game.Rulesets.Osu/Tests/TestCaseGameplayCursor.cs @@ -27,7 +27,7 @@ namespace osu.Game.Rulesets.Osu.Tests [BackgroundDependencyLoader] private void load() { - Add(cursor = new GameplayCursor() { RelativeSizeAxes = Axes.Both }); + Add(cursor = new GameplayCursor { RelativeSizeAxes = Axes.Both }); } } } From e6c22e2287c842711f4c76005882544468243b7b Mon Sep 17 00:00:00 2001 From: TocoToucan Date: Sat, 10 Mar 2018 21:59:20 +0300 Subject: [PATCH 367/544] Taking screenshot support initial commit --- osu.Game/Configuration/OsuConfigManager.cs | 5 ++- .../Input/Bindings/GlobalActionContainer.cs | 4 ++ osu.Game/OsuGame.cs | 42 +++++++++++++++++++ .../Sections/Graphics/DetailSettings.cs | 8 +++- osu.Game/osu.Game.csproj | 1 + 5 files changed, 58 insertions(+), 2 deletions(-) diff --git a/osu.Game/Configuration/OsuConfigManager.cs b/osu.Game/Configuration/OsuConfigManager.cs index 3d927ef67c..dd17f2c4aa 100644 --- a/osu.Game/Configuration/OsuConfigManager.cs +++ b/osu.Game/Configuration/OsuConfigManager.cs @@ -82,6 +82,8 @@ namespace osu.Game.Configuration Set(OsuSetting.ReleaseStream, ReleaseStream.Lazer); Set(OsuSetting.Version, string.Empty); + + Set(OsuSetting.ScreenshotFormat, ScreenshotFormat.Png); } public OsuConfigManager(Storage storage) : base(storage) @@ -125,6 +127,7 @@ namespace osu.Game.Configuration Version, ShowConvertedBeatmaps, SpeedChangeVisualisation, - Skin + Skin, + ScreenshotFormat } } diff --git a/osu.Game/Input/Bindings/GlobalActionContainer.cs b/osu.Game/Input/Bindings/GlobalActionContainer.cs index 17ec2af4b9..f6263a05c2 100644 --- a/osu.Game/Input/Bindings/GlobalActionContainer.cs +++ b/osu.Game/Input/Bindings/GlobalActionContainer.cs @@ -26,6 +26,8 @@ namespace osu.Game.Input.Bindings { new KeyBinding(InputKey.F8, GlobalAction.ToggleChat), new KeyBinding(InputKey.F9, GlobalAction.ToggleSocial), + new KeyBinding(InputKey.F12,GlobalAction.TakeScreenshot), + new KeyBinding(new[] { InputKey.Control, InputKey.Alt, InputKey.R }, GlobalAction.ResetInputSettings), new KeyBinding(new[] { InputKey.Control, InputKey.T }, GlobalAction.ToggleToolbar), new KeyBinding(new[] { InputKey.Control, InputKey.O }, GlobalAction.ToggleSettings), @@ -66,6 +68,8 @@ namespace osu.Game.Input.Bindings DecreaseVolume, [Description("Toggle mute")] ToggleMute, + [Description("Take screenshot")] + TakeScreenshot, // In-Game Keybindings [Description("Skip Cutscene")] diff --git a/osu.Game/OsuGame.cs b/osu.Game/OsuGame.cs index e656c7256e..1078548bef 100644 --- a/osu.Game/OsuGame.cs +++ b/osu.Game/OsuGame.cs @@ -3,6 +3,8 @@ using System; using System.Collections.Generic; +using System.Drawing.Imaging; +using System.IO; using osu.Framework.Configuration; using osu.Framework.Screens; using osu.Game.Configuration; @@ -83,6 +85,8 @@ namespace osu.Game private Bindable configSkin; + private Bindable screenshotFormat; + private readonly string[] args; private SettingsOverlay settings; @@ -134,6 +138,8 @@ namespace osu.Game // bind config int to database SkinInfo configSkin = LocalConfig.GetBindable(OsuSetting.Skin); + screenshotFormat = LocalConfig.GetBindable(OsuSetting.ScreenshotFormat); + SkinManager.CurrentSkinInfo.ValueChanged += s => configSkin.Value = s.ID; configSkin.ValueChanged += id => SkinManager.CurrentSkinInfo.Value = SkinManager.Query(s => s.ID == id) ?? SkinInfo.Default; configSkin.TriggerChange(); @@ -432,11 +438,47 @@ namespace osu.Game case GlobalAction.ToggleDirect: direct.ToggleVisibility(); return true; + case GlobalAction.TakeScreenshot: + if (Window.ScreenshotTakenAction == null) + Window.ScreenshotTakenAction = (screenshotBitmap) => + { + var fileName = getScreenshotFileName(screenshotFormat); + + switch (screenshotFormat.Value) + { + case ScreenshotFormat.Bmp: + screenshotBitmap.Save(fileName, ImageFormat.Bmp); + break; + case ScreenshotFormat.Png: + screenshotBitmap.Save(fileName, ImageFormat.Png); + break; + case ScreenshotFormat.Jpg: + screenshotBitmap.Save(fileName, ImageFormat.Jpeg); + break; + default: + throw new ArgumentOutOfRangeException(nameof(screenshotFormat)); + } + }; + + RequestScreenshot(); + return true; } return false; } + private string getScreenshotFileName(ScreenshotFormat screenshotFormat) + { + // TODO Change screenshots location + var baseDirectory = new DirectoryInfo(AppDomain.CurrentDomain.BaseDirectory); + var screenshotsDirectory = baseDirectory.CreateSubdirectory("Screenshots"); + + var screenshotExtension = screenshotFormat.ToString().ToLower(); + var screenshots = screenshotsDirectory.GetFiles($"*.{screenshotExtension}"); + + return Path.Combine(screenshotsDirectory.FullName, $"screenshot{screenshots.Length + 1}.{screenshotExtension}"); + } + private readonly BindableDouble inactiveVolumeAdjust = new BindableDouble(); protected override void OnDeactivated() diff --git a/osu.Game/Overlays/Settings/Sections/Graphics/DetailSettings.cs b/osu.Game/Overlays/Settings/Sections/Graphics/DetailSettings.cs index b9d76c05f0..3f4fc96d31 100644 --- a/osu.Game/Overlays/Settings/Sections/Graphics/DetailSettings.cs +++ b/osu.Game/Overlays/Settings/Sections/Graphics/DetailSettings.cs @@ -1,6 +1,7 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using osu.Framework.Allocation; +using osu.Framework.Graphics; using osu.Game.Configuration; namespace osu.Game.Overlays.Settings.Sections.Graphics @@ -12,7 +13,7 @@ namespace osu.Game.Overlays.Settings.Sections.Graphics [BackgroundDependencyLoader] private void load(OsuConfigManager config) { - Children = new[] + Children = new Drawable[] { new SettingsCheckbox { @@ -24,6 +25,11 @@ namespace osu.Game.Overlays.Settings.Sections.Graphics LabelText = "Rotate cursor when dragging", Bindable = config.GetBindable(OsuSetting.CursorRotation) }, + new SettingsEnumDropdown() + { + LabelText = "Screenshot format", + Bindable = config.GetBindable(OsuSetting.ScreenshotFormat) + } }; } } diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index d10f0085cc..fdda575a6c 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -187,6 +187,7 @@ $(SolutionDir)\packages\System.Diagnostics.DiagnosticSource.4.4.1\lib\net46\System.Diagnostics.DiagnosticSource.dll + $(SolutionDir)\packages\System.Interactive.Async.3.1.1\lib\net46\System.Interactive.Async.dll From a321bcf3af990a07a97369f7ee1158f06c329a8f Mon Sep 17 00:00:00 2001 From: HoLLy Date: Sun, 11 Mar 2018 20:19:03 +0100 Subject: [PATCH 368/544] Fix check against LegacyID for non-default rulesets --- osu.Game/Rulesets/RulesetStore.cs | 2 +- osu.Game/Tests/Visual/TestCasePerformancePoints.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/osu.Game/Rulesets/RulesetStore.cs b/osu.Game/Rulesets/RulesetStore.cs index 92fbf25f04..4891b46c9d 100644 --- a/osu.Game/Rulesets/RulesetStore.cs +++ b/osu.Game/Rulesets/RulesetStore.cs @@ -72,7 +72,7 @@ namespace osu.Game.Rulesets context.SaveChanges(); //add any other modes - foreach (var r in instances.Where(r => r.LegacyID < 0)) + foreach (var r in instances.Where(r => r.LegacyID == null || r.LegacyID < 0)) if (context.RulesetInfo.FirstOrDefault(ri => ri.InstantiationInfo == r.RulesetInfo.InstantiationInfo) == null) context.RulesetInfo.Add(r.RulesetInfo); diff --git a/osu.Game/Tests/Visual/TestCasePerformancePoints.cs b/osu.Game/Tests/Visual/TestCasePerformancePoints.cs index 5b32433467..c35c0308f9 100644 --- a/osu.Game/Tests/Visual/TestCasePerformancePoints.cs +++ b/osu.Game/Tests/Visual/TestCasePerformancePoints.cs @@ -128,7 +128,7 @@ namespace osu.Game.Tests.Visual private void load(BeatmapManager beatmaps) { var sets = beatmaps.GetAllUsableBeatmapSets(); - var allBeatmaps = sets.SelectMany(s => s.Beatmaps).Where(b => ruleset.LegacyID < 0 || b.RulesetID == ruleset.LegacyID); + var allBeatmaps = sets.SelectMany(s => s.Beatmaps).Where(b => ruleset.LegacyID == null || ruleset.LegacyID < 0 || b.RulesetID == ruleset.LegacyID); allBeatmaps.ForEach(b => beatmapDisplays.Add(new BeatmapDisplay(b))); } From 9c75c392f2edb4452f48a2e7ab9bb4e2b40de47e Mon Sep 17 00:00:00 2001 From: HoLLy Date: Sun, 11 Mar 2018 21:27:49 +0100 Subject: [PATCH 369/544] Only check by null instead of sign --- osu.Game/Rulesets/RulesetStore.cs | 4 ++-- osu.Game/Tests/Visual/TestCasePerformancePoints.cs | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/osu.Game/Rulesets/RulesetStore.cs b/osu.Game/Rulesets/RulesetStore.cs index 4891b46c9d..e621c3cf2b 100644 --- a/osu.Game/Rulesets/RulesetStore.cs +++ b/osu.Game/Rulesets/RulesetStore.cs @@ -63,7 +63,7 @@ namespace osu.Game.Rulesets var instances = loaded_assemblies.Values.Select(r => (Ruleset)Activator.CreateInstance(r, (RulesetInfo)null)).ToList(); //add all legacy modes in correct order - foreach (var r in instances.Where(r => r.LegacyID >= 0).OrderBy(r => r.LegacyID)) + foreach (var r in instances.Where(r => r.LegacyID != null).OrderBy(r => r.LegacyID)) { if (context.RulesetInfo.SingleOrDefault(rsi => rsi.ID == r.RulesetInfo.ID) == null) context.RulesetInfo.Add(r.RulesetInfo); @@ -72,7 +72,7 @@ namespace osu.Game.Rulesets context.SaveChanges(); //add any other modes - foreach (var r in instances.Where(r => r.LegacyID == null || r.LegacyID < 0)) + foreach (var r in instances.Where(r => r.LegacyID == null)) if (context.RulesetInfo.FirstOrDefault(ri => ri.InstantiationInfo == r.RulesetInfo.InstantiationInfo) == null) context.RulesetInfo.Add(r.RulesetInfo); diff --git a/osu.Game/Tests/Visual/TestCasePerformancePoints.cs b/osu.Game/Tests/Visual/TestCasePerformancePoints.cs index c35c0308f9..7ca69c14b8 100644 --- a/osu.Game/Tests/Visual/TestCasePerformancePoints.cs +++ b/osu.Game/Tests/Visual/TestCasePerformancePoints.cs @@ -128,7 +128,7 @@ namespace osu.Game.Tests.Visual private void load(BeatmapManager beatmaps) { var sets = beatmaps.GetAllUsableBeatmapSets(); - var allBeatmaps = sets.SelectMany(s => s.Beatmaps).Where(b => ruleset.LegacyID == null || ruleset.LegacyID < 0 || b.RulesetID == ruleset.LegacyID); + var allBeatmaps = sets.SelectMany(s => s.Beatmaps).Where(b => ruleset.LegacyID == null || b.RulesetID == ruleset.LegacyID); allBeatmaps.ForEach(b => beatmapDisplays.Add(new BeatmapDisplay(b))); } From 33c721bcbb51d50f9d60d656208eb31538f7b6b2 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 12 Mar 2018 09:51:32 +0900 Subject: [PATCH 370/544] Fix post-merge errors --- osu-framework | 2 +- osu.Game/Screens/Play/Player.cs | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/osu-framework b/osu-framework index 865b0df18b..59004b46f2 160000 --- a/osu-framework +++ b/osu-framework @@ -1 +1 @@ -Subproject commit 865b0df18bb240190cdf7a7f60d44c0b28c84c5f +Subproject commit 59004b46f2c96ac02fec712e66f9f96fe252f2fa diff --git a/osu.Game/Screens/Play/Player.cs b/osu.Game/Screens/Play/Player.cs index 6453a72fc3..c8ff261a93 100644 --- a/osu.Game/Screens/Play/Player.cs +++ b/osu.Game/Screens/Play/Player.cs @@ -25,7 +25,6 @@ using osu.Game.Rulesets; using osu.Game.Rulesets.Mods; using osu.Game.Rulesets.Scoring; using osu.Game.Rulesets.UI; -using osu.Game.Screens.Backgrounds; using osu.Game.Screens.Ranking; using osu.Game.Storyboards.Drawables; From 209d91fe2131a8a9c8fd62f5be117bd6b2a69331 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 12 Mar 2018 10:35:37 +0900 Subject: [PATCH 371/544] Fix duplicate item in csproj --- osu.Game/osu.Game.csproj | 1 - 1 file changed, 1 deletion(-) diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index 562f0ff788..4943db6852 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -379,7 +379,6 @@ - From 86d93ffe3c59a3b1fa57d4a8855298ac3ecc39b9 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 12 Mar 2018 10:49:50 +0900 Subject: [PATCH 372/544] Fix tooltip not working due to not handling input --- osu.Game/Graphics/DrawableDate.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/osu.Game/Graphics/DrawableDate.cs b/osu.Game/Graphics/DrawableDate.cs index 452443f9d0..a912f989e0 100644 --- a/osu.Game/Graphics/DrawableDate.cs +++ b/osu.Game/Graphics/DrawableDate.cs @@ -58,6 +58,8 @@ namespace osu.Game.Graphics Scheduler.AddDelayed(updateTimeWithReschedule, timeUntilNextUpdate); } + public override bool HandleMouseInput => true; + private void updateTime() => Text = date.Humanize(); public string TooltipText => date.ToString(); } From 1447ca55a3a128a3adb0fee0206178893640e256 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Mon, 12 Mar 2018 11:02:02 +0900 Subject: [PATCH 373/544] Add xmldoc, make restrictSize private --- osu.Game/Skinning/SkinnableDrawable.cs | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/osu.Game/Skinning/SkinnableDrawable.cs b/osu.Game/Skinning/SkinnableDrawable.cs index a5f22f60a2..81abc9e80c 100644 --- a/osu.Game/Skinning/SkinnableDrawable.cs +++ b/osu.Game/Skinning/SkinnableDrawable.cs @@ -22,16 +22,20 @@ namespace osu.Game.Skinning private readonly string componentName; - /// - /// Whether a user-skin drawable should be limited to the size of our parent. - /// - public readonly bool RestrictSize; + private readonly bool restrictSize; + /// + /// + /// + /// The namespace-complete resource name for this skinnable element. + /// A function to create the default skin implementation of this element. + /// Whther to fallback to the default implementation when a custom skin is specified but not implementation is present. + /// Whether a user-skin drawable should be limited to the size of our parent. public SkinnableDrawable(string name, Func defaultImplementation, bool fallback = true, bool restrictSize = true) : base(fallback) { componentName = name; createDefault = defaultImplementation; - RestrictSize = restrictSize; + this.restrictSize = restrictSize; RelativeSizeAxes = Axes.Both; } @@ -41,7 +45,7 @@ namespace osu.Game.Skinning var drawable = skin.GetDrawableComponent(componentName); if (drawable != null) { - if (RestrictSize) + if (restrictSize) { drawable.RelativeSizeAxes = Axes.Both; drawable.Size = Vector2.One; From c70be29edacbdebb10dd874d15cd6dda145ef5ca Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Mon, 12 Mar 2018 11:30:13 +0900 Subject: [PATCH 374/544] Move legacy conversion to LegacySkin --- .../Rulesets/Judgements/DrawableJudgement.cs | 19 +------------------ osu.Game/Skinning/LegacySkin.cs | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 18 deletions(-) diff --git a/osu.Game/Rulesets/Judgements/DrawableJudgement.cs b/osu.Game/Rulesets/Judgements/DrawableJudgement.cs index 4664517312..8639812aff 100644 --- a/osu.Game/Rulesets/Judgements/DrawableJudgement.cs +++ b/osu.Game/Rulesets/Judgements/DrawableJudgement.cs @@ -40,24 +40,7 @@ namespace osu.Game.Rulesets.Judgements [BackgroundDependencyLoader] private void load(OsuColour colours) { - string legacyName = string.Empty; - switch (Judgement.Result) - { - case HitResult.Miss: - legacyName = "hit0"; - break; - case HitResult.Meh: - legacyName = "hit50"; - break; - case HitResult.Good: - legacyName = "hit100"; - break; - case HitResult.Great: - legacyName = "hit300"; - break; - } - - Child = new SkinnableDrawable($"Play/osu/{legacyName}", _ => JudgementText = new OsuSpriteText + Child = new SkinnableDrawable($"Play/{Judgement.Result}", _ => JudgementText = new OsuSpriteText { Text = Judgement.Result.GetDescription().ToUpper(), Font = @"Venera", diff --git a/osu.Game/Skinning/LegacySkin.cs b/osu.Game/Skinning/LegacySkin.cs index f03d1ce632..2caeed8480 100644 --- a/osu.Game/Skinning/LegacySkin.cs +++ b/osu.Game/Skinning/LegacySkin.cs @@ -29,6 +29,22 @@ namespace osu.Game.Skinning public override Drawable GetDrawableComponent(string componentName) { + switch (componentName) + { + case "Play/Miss": + componentName = "hit0"; + break; + case "Play/Meh": + componentName = "hit50"; + break; + case "Play/Good": + componentName = "hit100"; + break; + case "Play/Great": + componentName = "hit300"; + break; + } + var texture = textures.Get(componentName); if (texture == null) return null; From 1bcda4930ebc6736a239b4e6e4710525b03d3d4d Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Mon, 12 Mar 2018 11:33:12 +0900 Subject: [PATCH 375/544] Add back beatmap version set --- osu.Game/Beatmaps/Formats/LegacyBeatmapDecoder.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/osu.Game/Beatmaps/Formats/LegacyBeatmapDecoder.cs b/osu.Game/Beatmaps/Formats/LegacyBeatmapDecoder.cs index c54d81aa2b..915ea9b587 100644 --- a/osu.Game/Beatmaps/Formats/LegacyBeatmapDecoder.cs +++ b/osu.Game/Beatmaps/Formats/LegacyBeatmapDecoder.cs @@ -52,6 +52,8 @@ namespace osu.Game.Beatmaps.Formats protected override void ParseStreamInto(StreamReader stream, Beatmap beatmap) { this.beatmap = beatmap; + this.beatmap.BeatmapInfo.BeatmapVersion = FormatVersion; + base.ParseStreamInto(stream, beatmap); // objects may be out of order *only* if a user has manually edited an .osu file. From 46caab6310d74a0b3d7ba36a3edea53aca6b17b0 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 12 Mar 2018 11:56:49 +0900 Subject: [PATCH 376/544] Reorder arithmetic operation --- osu.Game.Rulesets.Mania/Mods/ManiaModMirror.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game.Rulesets.Mania/Mods/ManiaModMirror.cs b/osu.Game.Rulesets.Mania/Mods/ManiaModMirror.cs index be3a0e02db..cfa5ef88b8 100644 --- a/osu.Game.Rulesets.Mania/Mods/ManiaModMirror.cs +++ b/osu.Game.Rulesets.Mania/Mods/ManiaModMirror.cs @@ -22,7 +22,7 @@ namespace osu.Game.Rulesets.Mania.Mods { var availableColumns = ((ManiaRulesetContainer)rulesetContainer).Beatmap.TotalColumns; - rulesetContainer.Objects.OfType().ForEach(h => h.Column = -h.Column + availableColumns - 1); + rulesetContainer.Objects.OfType().ForEach(h => h.Column = availableColumns - 1 - h.Column); } } } From fbb80edde1888523ff730d31d186a5d1466e3849 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 12 Mar 2018 13:01:29 +0900 Subject: [PATCH 377/544] Minor cleanups --- osu.Game.Rulesets.Mania/ManiaDifficultyCalculator.cs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/osu.Game.Rulesets.Mania/ManiaDifficultyCalculator.cs b/osu.Game.Rulesets.Mania/ManiaDifficultyCalculator.cs index 02560c8141..f4e3d54a3d 100644 --- a/osu.Game.Rulesets.Mania/ManiaDifficultyCalculator.cs +++ b/osu.Game.Rulesets.Mania/ManiaDifficultyCalculator.cs @@ -32,11 +32,13 @@ namespace osu.Game.Rulesets.Mania private readonly List difficultyHitObjects = new List(); public ManiaDifficultyCalculator(Beatmap beatmap) - : base(beatmap) { + : base(beatmap) + { } public ManiaDifficultyCalculator(Beatmap beatmap, Mod[] mods) - : base(beatmap, mods) { + : base(beatmap, mods) + { } public override double Calculate(Dictionary categoryDifficulty = null) @@ -58,7 +60,6 @@ namespace osu.Game.Rulesets.Mania double starRating = calculateDifficulty() * star_scaling_factor; categoryDifficulty?.Add("Strain", starRating); - // categoryDifficulty.Add("Hit window 300", 35 /*HitObjectManager.HitWindow300*/ / TimeRate); return starRating; } From 81186f8423198b76a97a2d9846281d4a612cbe56 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 12 Mar 2018 13:06:42 +0900 Subject: [PATCH 378/544] Apply beatmap converter mods in DifficultyCalculator --- osu.Game/Beatmaps/DifficultyCalculator.cs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/osu.Game/Beatmaps/DifficultyCalculator.cs b/osu.Game/Beatmaps/DifficultyCalculator.cs index 798268d05f..d61c62a30b 100644 --- a/osu.Game/Beatmaps/DifficultyCalculator.cs +++ b/osu.Game/Beatmaps/DifficultyCalculator.cs @@ -24,9 +24,15 @@ namespace osu.Game.Beatmaps protected DifficultyCalculator(Beatmap beatmap, Mod[] mods = null) { - Beatmap = CreateBeatmapConverter(beatmap).Convert(beatmap); Mods = mods ?? new Mod[0]; + var converter = CreateBeatmapConverter(beatmap); + + foreach (var mod in Mods.OfType>()) + mod.ApplyToBeatmapConverter(converter); + + Beatmap = converter.Convert(beatmap); + ApplyMods(Mods); PreprocessHitObjects(); From 3cd203699b485067d79eed122e27fd822895e695 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 12 Mar 2018 13:09:19 +0900 Subject: [PATCH 379/544] Apply beatmap converter mods in PerformanceCalculator --- osu.Game/Rulesets/Scoring/PerformanceCalculator.cs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/osu.Game/Rulesets/Scoring/PerformanceCalculator.cs b/osu.Game/Rulesets/Scoring/PerformanceCalculator.cs index ba16d78b37..c047a421fd 100644 --- a/osu.Game/Rulesets/Scoring/PerformanceCalculator.cs +++ b/osu.Game/Rulesets/Scoring/PerformanceCalculator.cs @@ -2,7 +2,9 @@ // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using System.Collections.Generic; +using System.Linq; using osu.Game.Beatmaps; +using osu.Game.Rulesets.Mods; using osu.Game.Rulesets.Objects; namespace osu.Game.Rulesets.Scoring @@ -23,9 +25,15 @@ namespace osu.Game.Rulesets.Scoring protected PerformanceCalculator(Ruleset ruleset, Beatmap beatmap, Score score) { - Beatmap = CreateBeatmapConverter().Convert(beatmap); Score = score; + var converter = CreateBeatmapConverter(); + + foreach (var mod in score.Mods.OfType>()) + mod.ApplyToBeatmapConverter(converter); + + Beatmap = converter.Convert(beatmap); + var diffCalc = ruleset.CreateDifficultyCalculator(beatmap, score.Mods); diffCalc.Calculate(attributes); } From 2d9fcdcbd02c3f92c608d5f63ab0a7ab8705ff94 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 12 Mar 2018 17:18:50 +0900 Subject: [PATCH 380/544] Fix slider circle overlays moving with the endpoints --- .../Edit/Layers/Selection/Overlays/SliderCircleOverlay.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Edit/Layers/Selection/Overlays/SliderCircleOverlay.cs b/osu.Game.Rulesets.Osu/Edit/Layers/Selection/Overlays/SliderCircleOverlay.cs index 3c7f8a067b..50a325d6cc 100644 --- a/osu.Game.Rulesets.Osu/Edit/Layers/Selection/Overlays/SliderCircleOverlay.cs +++ b/osu.Game.Rulesets.Osu/Edit/Layers/Selection/Overlays/SliderCircleOverlay.cs @@ -5,6 +5,7 @@ using osu.Framework.Allocation; using osu.Framework.Graphics; using osu.Game.Graphics; using osu.Game.Rulesets.Edit.Layers.Selection; +using osu.Game.Rulesets.Osu.Objects; using osu.Game.Rulesets.Osu.Objects.Drawables; using osu.Game.Rulesets.Osu.Objects.Drawables.Pieces; using OpenTK; @@ -14,12 +15,12 @@ namespace osu.Game.Rulesets.Osu.Edit.Layers.Selection.Overlays public class SliderCircleOverlay : HitObjectOverlay { public SliderCircleOverlay(DrawableHitCircle sliderHead, DrawableSlider slider) - : this(sliderHead, sliderHead.Position, slider) + : this(sliderHead, Vector2.Zero, slider) { } public SliderCircleOverlay(DrawableSliderTail sliderTail, DrawableSlider slider) - : this(sliderTail, sliderTail.Position, slider) + : this(sliderTail, ((Slider)slider.HitObject).Curve.PositionAt(1), slider) { } From 212142429f7ff0e6322c8b404a1ff90114458022 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 12 Mar 2018 17:25:34 +0900 Subject: [PATCH 381/544] Derive from IHasPosition --- osu.Game.Rulesets.Osu/Objects/OsuHitObject.cs | 2 +- osu.Game/Rulesets/Edit/Types/IHasEditablePosition.cs | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Objects/OsuHitObject.cs b/osu.Game.Rulesets.Osu/Objects/OsuHitObject.cs index 574063d4a5..d9aed23414 100644 --- a/osu.Game.Rulesets.Osu/Objects/OsuHitObject.cs +++ b/osu.Game.Rulesets.Osu/Objects/OsuHitObject.cs @@ -12,7 +12,7 @@ using osu.Game.Rulesets.Edit.Types; namespace osu.Game.Rulesets.Osu.Objects { - public abstract class OsuHitObject : HitObject, IHasCombo, IHasPosition, IHasEditablePosition + public abstract class OsuHitObject : HitObject, IHasCombo, IHasEditablePosition { public const double OBJECT_RADIUS = 64; diff --git a/osu.Game/Rulesets/Edit/Types/IHasEditablePosition.cs b/osu.Game/Rulesets/Edit/Types/IHasEditablePosition.cs index 3530dba8f4..fa101ed835 100644 --- a/osu.Game/Rulesets/Edit/Types/IHasEditablePosition.cs +++ b/osu.Game/Rulesets/Edit/Types/IHasEditablePosition.cs @@ -1,11 +1,12 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using osu.Game.Rulesets.Objects.Types; using OpenTK; namespace osu.Game.Rulesets.Edit.Types { - public interface IHasEditablePosition + public interface IHasEditablePosition : IHasPosition { void OffsetPosition(Vector2 offset); } From 8c4bcb4a04a8c45598c92c56f5ee65e6f7a2f761 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 12 Mar 2018 17:33:10 +0900 Subject: [PATCH 382/544] Only accept drag movement on the overlays --- .../Edit/Layers/Selection/Overlays/SliderOverlay.cs | 3 +++ osu.Game/Rulesets/Edit/Layers/Selection/SelectionOverlay.cs | 2 ++ 2 files changed, 5 insertions(+) diff --git a/osu.Game.Rulesets.Osu/Edit/Layers/Selection/Overlays/SliderOverlay.cs b/osu.Game.Rulesets.Osu/Edit/Layers/Selection/Overlays/SliderOverlay.cs index f63d8f0c62..d478130868 100644 --- a/osu.Game.Rulesets.Osu/Edit/Layers/Selection/Overlays/SliderOverlay.cs +++ b/osu.Game.Rulesets.Osu/Edit/Layers/Selection/Overlays/SliderOverlay.cs @@ -8,6 +8,7 @@ using osu.Game.Rulesets.Edit.Layers.Selection; using osu.Game.Rulesets.Osu.Objects; using osu.Game.Rulesets.Osu.Objects.Drawables; using osu.Game.Rulesets.Osu.Objects.Drawables.Pieces; +using OpenTK; using OpenTK.Graphics; namespace osu.Game.Rulesets.Osu.Edit.Layers.Selection.Overlays @@ -56,5 +57,7 @@ namespace osu.Game.Rulesets.Osu.Edit.Layers.Selection.Overlays // Need to cause one update body.UpdateProgress(0); } + + public override bool ReceiveMouseInputAt(Vector2 screenSpacePos) => body.ReceiveMouseInputAt(screenSpacePos); } } diff --git a/osu.Game/Rulesets/Edit/Layers/Selection/SelectionOverlay.cs b/osu.Game/Rulesets/Edit/Layers/Selection/SelectionOverlay.cs index c20769a912..c3bb5911f8 100644 --- a/osu.Game/Rulesets/Edit/Layers/Selection/SelectionOverlay.cs +++ b/osu.Game/Rulesets/Edit/Layers/Selection/SelectionOverlay.cs @@ -68,6 +68,8 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection Position = topLeft; } + public override bool ReceiveMouseInputAt(Vector2 screenSpacePos) => overlays.Any(o => o.ReceiveMouseInputAt(screenSpacePos)); + protected override bool OnMouseDown(InputState state, MouseDownEventArgs args) => true; protected override bool OnDragStart(InputState state) => true; From 7406cb290f655bb4953549fb6510eb13241df94e Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 12 Mar 2018 19:41:09 +0900 Subject: [PATCH 383/544] Split out test beatmap from TestCasePlayer into instantiable class --- .../Tests/TestCaseBananaShower.cs | 8 +- .../Tests/TestCaseCatchStacker.cs | 9 +- .../Tests/TestCaseHyperdash.cs | 5 +- osu.Game/Tests/Beatmaps/TestBeatmap.cs | 725 ++++++++++++++++++ osu.Game/Tests/Beatmaps/TestWorkingBeatmap.cs | 7 +- osu.Game/Tests/Visual/TestCasePlayer.cs | 711 +---------------- osu.Game/osu.Game.csproj | 1 + 7 files changed, 744 insertions(+), 722 deletions(-) create mode 100644 osu.Game/Tests/Beatmaps/TestBeatmap.cs diff --git a/osu.Game.Rulesets.Catch/Tests/TestCaseBananaShower.cs b/osu.Game.Rulesets.Catch/Tests/TestCaseBananaShower.cs index ecae154075..ec9dd15673 100644 --- a/osu.Game.Rulesets.Catch/Tests/TestCaseBananaShower.cs +++ b/osu.Game.Rulesets.Catch/Tests/TestCaseBananaShower.cs @@ -28,16 +28,14 @@ namespace osu.Game.Rulesets.Catch.Tests { } - protected override Beatmap CreateBeatmap() + protected override Beatmap CreateBeatmap(Ruleset ruleset) { var beatmap = new Beatmap { BeatmapInfo = new BeatmapInfo { - BaseDifficulty = new BeatmapDifficulty - { - CircleSize = 6, - } + BaseDifficulty = new BeatmapDifficulty { CircleSize = 6 }, + Ruleset = ruleset.RulesetInfo } }; diff --git a/osu.Game.Rulesets.Catch/Tests/TestCaseCatchStacker.cs b/osu.Game.Rulesets.Catch/Tests/TestCaseCatchStacker.cs index 518845208c..8e5843f40a 100644 --- a/osu.Game.Rulesets.Catch/Tests/TestCaseCatchStacker.cs +++ b/osu.Game.Rulesets.Catch/Tests/TestCaseCatchStacker.cs @@ -15,19 +15,18 @@ namespace osu.Game.Rulesets.Catch.Tests { } - protected override Beatmap CreateBeatmap() + protected override Beatmap CreateBeatmap(Ruleset ruleset) { var beatmap = new Beatmap { BeatmapInfo = new BeatmapInfo { - BaseDifficulty = new BeatmapDifficulty - { - CircleSize = 6, - } + BaseDifficulty = new BeatmapDifficulty { CircleSize = 6 }, + Ruleset = ruleset.RulesetInfo } }; + for (int i = 0; i < 512; i++) beatmap.HitObjects.Add(new Fruit { X = 0.5f + i / 2048f * (i % 10 - 5), StartTime = i * 100, NewCombo = i % 8 == 0 }); diff --git a/osu.Game.Rulesets.Catch/Tests/TestCaseHyperdash.cs b/osu.Game.Rulesets.Catch/Tests/TestCaseHyperdash.cs index c01791a923..7564adea8c 100644 --- a/osu.Game.Rulesets.Catch/Tests/TestCaseHyperdash.cs +++ b/osu.Game.Rulesets.Catch/Tests/TestCaseHyperdash.cs @@ -15,9 +15,10 @@ namespace osu.Game.Rulesets.Catch.Tests { } - protected override Beatmap CreateBeatmap() + protected override Beatmap CreateBeatmap(Ruleset ruleset) { - var beatmap = new Beatmap(); + var beatmap = new Beatmap { BeatmapInfo = { Ruleset = ruleset.RulesetInfo } }; + for (int i = 0; i < 512; i++) if (i % 5 < 3) diff --git a/osu.Game/Tests/Beatmaps/TestBeatmap.cs b/osu.Game/Tests/Beatmaps/TestBeatmap.cs new file mode 100644 index 0000000000..a29ee03975 --- /dev/null +++ b/osu.Game/Tests/Beatmaps/TestBeatmap.cs @@ -0,0 +1,725 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using System.IO; +using System.Text; +using osu.Game.Beatmaps; +using osu.Game.Rulesets; +using Decoder = osu.Game.Beatmaps.Formats.Decoder; + +namespace osu.Game.Tests.Beatmaps +{ + public class TestBeatmap : Beatmap + { + public TestBeatmap(RulesetInfo ruleset) + : base(createTestBeatmap()) + { + BeatmapInfo.Ruleset = ruleset; + } + + private static Beatmap testBeatmapCache; + private static Beatmap createTestBeatmap() + { + if (testBeatmapCache != null) + return testBeatmapCache; + + using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(test_beatmap_data))) + using (var reader = new StreamReader(stream)) + return testBeatmapCache = Decoder.GetDecoder(reader).DecodeBeatmap(reader); + } + + private const string test_beatmap_data = +@"osu file format v14 + +[General] +AudioLeadIn: 500 +PreviewTime: 53498 +Countdown: 0 +SampleSet: Soft +StackLeniency: 0.7 +Mode: 0 +LetterboxInBreaks: 0 +WidescreenStoryboard: 1 + +[Editor] +DistanceSpacing: 1.2 +BeatDivisor: 4 +GridSize: 4 +TimelineZoom: 1 + +[Metadata] +Title:My Love +TitleUnicode:My Love +Artist:Kuba Oms +ArtistUnicode:Kuba Oms +Creator:W h i t e +Version:Hard +Source:ADHD +Tags:Monthly Beatmapping Contest Electronic folk pop w_h_i_t_e +BeatmapID:397534 +BeatmapSetID:163112 + +[Difficulty] +HPDrainRate:5 +CircleSize:4 +OverallDifficulty:6 +ApproachRate:7 +SliderMultiplier:1.44 +SliderTickRate:2 + +[Events] +//Break Periods +2,69870,83770 +2,152170,158770 +//Storyboard Layer 0 (Background) +//Storyboard Layer 1 (Fail) +//Storyboard Layer 2 (Pass) +//Storyboard Layer 3 (Foreground) +//Storyboard Sound Samples + +[TimingPoints] +2170,468.75,4,2,0,40,1,0 +4045,-100,4,2,0,30,0,0 +4162,-100,4,2,0,40,0,0 +5920,-100,4,2,0,30,0,0 +6037,-100,4,2,0,40,0,0 +7795,-100,4,2,0,30,0,0 +7912,-100,4,2,0,40,0,0 +9670,-100,4,2,0,40,0,0 +9787,-100,4,2,0,50,0,0 +11545,-100,4,2,0,40,0,0 +11662,-100,4,2,0,50,0,0 +13420,-100,4,2,0,40,0,0 +13537,-100,4,2,0,50,0,0 +15295,-100,4,2,0,40,0,0 +15412,-100,4,2,0,50,0,0 +17170,-100,4,2,0,40,0,0 +17287,-100,4,2,0,50,0,0 +19045,-100,4,2,0,40,0,0 +19162,-100,4,2,0,50,0,0 +20920,-100,4,2,0,40,0,0 +21037,-100,4,2,0,50,0,0 +22795,-100,4,2,0,40,0,0 +22912,-100,4,2,0,50,0,0 +24670,-100,4,2,0,70,0,0 +37560,-200,4,2,0,30,0,0 +38263,-200,4,2,0,5,0,0 +38966,-100,4,2,0,30,0,0 +39670,-100,4,2,0,70,0,0 +53732,-100,4,2,0,40,0,0 +54670,-100,4,2,0,80,0,1 +55138,-100,4,2,0,60,0,1 +55255,-100,4,2,0,80,0,1 +56076,-100,4,2,0,60,0,1 +56193,-100,4,2,0,80,0,1 +57013,-100,4,2,0,60,0,1 +57130,-100,4,2,0,80,0,1 +57951,-100,4,2,0,60,0,1 +58068,-100,4,2,0,80,0,1 +58888,-100,4,2,0,60,0,1 +59005,-100,4,2,0,80,0,1 +59826,-100,4,2,0,60,0,1 +59943,-100,4,2,0,80,0,1 +60763,-100,4,2,0,60,0,1 +60880,-100,4,2,0,80,0,1 +61701,-100,4,2,0,60,0,1 +61818,-100,4,2,0,80,0,1 +62638,-100,4,2,0,60,0,1 +62755,-100,4,2,0,80,0,1 +63576,-100,4,2,0,60,0,1 +63693,-100,4,2,0,80,0,1 +64513,-100,4,2,0,60,0,1 +64630,-100,4,2,0,80,0,1 +65451,-100,4,2,0,60,0,1 +65568,-100,4,2,0,80,0,1 +66388,-100,4,2,0,60,0,1 +66505,-100,4,2,0,80,0,1 +67326,-100,4,2,0,60,0,1 +67443,-100,4,2,0,80,0,1 +68263,-100,4,2,0,60,0,1 +68380,-100,4,2,0,80,0,1 +69201,-100,4,2,0,60,0,1 +69318,-100,4,2,0,80,0,1 +69670,-100,4,2,0,70,0,0 +84670,-100,4,2,0,70,0,0 +97560,-200,4,2,0,70,0,0 +97795,-200,4,2,0,30,0,0 +98966,-100,4,2,0,30,0,0 +99670,-100,4,2,0,70,0,0 +113732,-100,4,2,0,40,0,0 +114670,-100,4,2,0,80,0,1 +115138,-100,4,2,0,60,0,1 +115255,-100,4,2,0,80,0,1 +116076,-100,4,2,0,60,0,1 +116193,-100,4,2,0,80,0,1 +117013,-100,4,2,0,60,0,1 +117130,-100,4,2,0,80,0,1 +117951,-100,4,2,0,60,0,1 +118068,-100,4,2,0,80,0,1 +118888,-100,4,2,0,60,0,1 +119005,-100,4,2,0,80,0,1 +119826,-100,4,2,0,60,0,1 +119943,-100,4,2,0,80,0,1 +120763,-100,4,2,0,60,0,1 +120880,-100,4,2,0,80,0,1 +121701,-100,4,2,0,60,0,1 +121818,-100,4,2,0,80,0,1 +122638,-100,4,2,0,60,0,1 +122755,-100,4,2,0,80,0,1 +123576,-100,4,2,0,60,0,1 +123693,-100,4,2,0,80,0,1 +124513,-100,4,2,0,60,0,1 +124630,-100,4,2,0,80,0,1 +125451,-100,4,2,0,60,0,1 +125568,-100,4,2,0,80,0,1 +126388,-100,4,2,0,60,0,1 +126505,-100,4,2,0,80,0,1 +127326,-100,4,2,0,60,0,1 +127443,-100,4,2,0,80,0,1 +128263,-100,4,2,0,60,0,1 +128380,-100,4,2,0,80,0,1 +129201,-100,4,2,0,60,0,1 +129318,-100,4,2,0,80,0,1 +129670,-200,4,2,0,40,0,0 +144670,-133.333333333333,4,2,0,40,0,0 +159670,-133.333333333333,4,2,0,40,0,0 +163420,-133.333333333333,4,2,0,45,0,0 +163888,-125,4,2,0,50,0,0 +164357,-117.647058823529,4,2,0,55,0,0 +164826,-111.111111111111,4,2,0,60,0,0 +165295,-105.263157894737,4,2,0,65,0,0 +165763,-100,4,2,0,70,0,0 +166232,-100,4,2,0,40,0,0 +167170,-100,4,2,0,80,0,1 +167638,-100,4,2,0,60,0,1 +167755,-100,4,2,0,80,0,1 +168576,-100,4,2,0,60,0,1 +168693,-100,4,2,0,80,0,1 +169513,-100,4,2,0,60,0,1 +169630,-100,4,2,0,80,0,1 +170451,-100,4,2,0,60,0,1 +170568,-100,4,2,0,80,0,1 +171388,-100,4,2,0,60,0,1 +171505,-100,4,2,0,80,0,1 +172326,-100,4,2,0,60,0,1 +172443,-100,4,2,0,80,0,1 +173263,-100,4,2,0,60,0,1 +173380,-100,4,2,0,80,0,1 +174201,-100,4,2,0,60,0,1 +174318,-100,4,2,0,80,0,1 +175138,-100,4,2,0,60,0,1 +175255,-100,4,2,0,80,0,1 +176076,-100,4,2,0,60,0,1 +176193,-100,4,2,0,80,0,1 +177013,-100,4,2,0,60,0,1 +177130,-100,4,2,0,80,0,1 +177951,-100,4,2,0,60,0,1 +178068,-100,4,2,0,80,0,1 +178888,-100,4,2,0,60,0,1 +179005,-100,4,2,0,80,0,1 +179826,-100,4,2,0,60,0,1 +179943,-100,4,2,0,80,0,1 +180763,-100,4,2,0,60,0,1 +180880,-100,4,2,0,80,0,1 +180998,-100,4,2,0,80,0,0 +181466,-100,4,2,0,60,0,0 +181584,-100,4,2,0,80,0,0 +181935,-100,4,2,0,80,0,0 +182170,-100,4,2,0,80,0,1 +182638,-100,4,2,0,60,0,1 +182755,-100,4,2,0,80,0,1 +183576,-100,4,2,0,60,0,1 +183693,-100,4,2,0,80,0,1 +184513,-100,4,2,0,60,0,1 +184630,-100,4,2,0,80,0,1 +185451,-100,4,2,0,60,0,1 +185568,-100,4,2,0,80,0,1 +186388,-100,4,2,0,60,0,1 +186505,-100,4,2,0,80,0,1 +187326,-100,4,2,0,60,0,1 +187443,-100,4,2,0,80,0,1 +188263,-100,4,2,0,60,0,1 +188380,-100,4,2,0,80,0,1 +189201,-100,4,2,0,60,0,1 +189318,-100,4,2,0,80,0,1 +190138,-100,4,2,0,60,0,1 +190255,-100,4,2,0,80,0,1 +191076,-100,4,2,0,60,0,1 +191193,-100,4,2,0,80,0,1 +192013,-100,4,2,0,60,0,1 +192130,-100,4,2,0,80,0,1 +192951,-100,4,2,0,60,0,1 +193068,-100,4,2,0,80,0,1 +193888,-100,4,2,0,60,0,1 +194005,-100,4,2,0,80,0,1 +194826,-100,4,2,0,60,0,1 +194943,-100,4,2,0,80,0,1 +195295,-100,4,2,0,50,0,1 +195529,-100,4,2,0,52,0,1 +195646,-100,4,2,0,54,0,1 +195763,-100,4,2,0,56,0,1 +195880,-100,4,2,0,58,0,1 +195998,-100,4,2,0,60,0,1 +196115,-100,4,2,0,62,0,1 +196232,-100,4,2,0,64,0,1 +196349,-100,4,2,0,68,0,1 +196466,-100,4,2,0,70,0,1 +196584,-100,4,2,0,72,0,1 +196701,-100,4,2,0,74,0,1 +196818,-100,4,2,0,76,0,1 +196935,-100,4,2,0,78,0,1 +197052,-100,4,2,0,80,0,1 +197170,-100,4,2,0,80,0,0 +197873,-100,4,2,0,60,0,0 +197990,-100,4,2,0,80,0,0 +198341,-100,4,2,0,60,0,0 +199045,-100,4,2,0,80,0,0 +199279,-100,4,2,0,60,0,0 +199630,-100,4,2,0,80,0,0 +200216,-100,4,2,0,60,0,0 +200334,-100,4,2,0,80,0,0 +201623,-100,4,2,0,60,0,0 +201740,-100,4,2,0,80,0,0 +202326,-100,4,2,0,60,0,0 +202443,-100,4,2,0,80,0,0 +203029,-100,4,2,0,60,0,0 +203498,-100,4,2,0,80,0,0 +203966,-100,4,2,0,60,0,0 +204201,-100,4,2,0,80,0,0 +205373,-100,4,2,0,60,0,0 +205490,-100,4,2,0,80,0,0 +205841,-100,4,2,0,60,0,0 +206076,-100,4,2,0,60,0,0 +206545,-100,4,2,0,80,0,0 +206779,-100,4,2,0,60,0,0 +207130,-100,4,2,0,80,0,0 +207716,-100,4,2,0,60,0,0 +207951,-100,4,2,0,80,0,0 +209123,-100,4,2,0,60,0,0 +209240,-100,4,2,0,80,0,0 +209826,-100,4,2,0,60,0,0 +209943,-100,4,2,0,80,0,0 +210529,-100,4,2,0,60,0,0 +210880,-100,4,2,0,80,0,0 +211232,-100,4,2,0,60,0,0 +211701,-100,4,2,0,70,0,0 +212170,-100,4,2,0,80,0,0 +212873,-100,4,2,0,60,0,0 +212990,-100,4,2,0,80,0,0 +213341,-100,4,2,0,60,0,0 +213576,-100,4,2,0,60,0,0 +214045,-100,4,2,0,80,0,0 +214279,-100,4,2,0,60,0,0 +214630,-100,4,2,0,80,0,0 +215216,-100,4,2,0,60,0,0 +215451,-100,4,2,0,80,0,0 +216623,-100,4,2,0,60,0,0 +216740,-100,4,2,0,80,0,0 +217326,-100,4,2,0,60,0,0 +217443,-100,4,2,0,80,0,0 +218029,-100,4,2,0,60,0,0 +218498,-100,4,2,0,80,0,0 +218732,-100,4,2,0,50,0,0 +219670,-100,4,2,0,70,0,0 +220138,-100,4,2,0,65,0,0 +220373,-100,4,2,0,45,0,0 +220490,-100,4,2,0,65,0,0 +220607,-100,4,2,0,60,0,0 +220841,-100,4,2,0,35,0,0 +221076,-100,4,2,0,35,0,0 +221545,-100,4,2,0,50,0,0 +221779,-100,4,2,0,30,0,0 +222013,-111.111111111111,4,2,0,25,0,0 +222130,-111.111111111111,4,2,0,40,0,0 +222482,-125,4,2,0,40,0,0 +222716,-125,4,2,0,20,0,0 +222951,-100,4,2,0,15,0,0 +223420,-100,4,2,0,30,0,0 +224357,-100,4,2,0,25,0,0 +225295,-100,4,2,0,20,0,0 +226232,-100,4,2,0,15,0,0 +226701,-100,4,2,0,10,0,0 +227170,-100,4,2,0,5,0,0 + + +[Colours] + Combo1 : 17,254,176 +Combo2 : 173,255,95 +Combo3 : 255,88,100 +Combo4 : 255,94,55 + +[HitObjects] +320,256,2170,6,0,P|256:284|192:256,1,144,4|0,0:0|0:0,0:0:0:0: +144,184,2873,1,0,0:0:0:0: +108,260,3107,2,0,P|112:296|100:336,1,72 +28,288,3576,2,0,P|24:252|36:212,1,72,0|0,0:0|0:0,0:0:0:0: +76,140,4045,6,0,L|220:136,1,144,4|0,0:0|0:0,0:0:0:0: +292,88,4748,1,0,0:0:0:0: +292,88,4982,2,0,P|304:120|300:168,1,72 +388,168,5451,2,0,P|396:133|416:103,1,72,0|0,0:0|0:0,0:0:0:0: +472,172,5920,6,0,B|470:200|457:222|457:222|488:256|476:308,1,144,4|0,0:0|0:0,0:0:0:0: +396,280,6623,1,0,0:0:0:0: +324,328,6857,2,0,P|288:332|252:324,1,72 +180,280,7326,2,0,L|108:284,1,72,0|0,0:0|0:0,0:0:0:0: +256,192,7795,12,0,9670,0:0:0:0: +428,212,10138,1,0,0:0:0:0: +292,320,10607,1,0,0:0:0:0: +184,184,11076,2,0,L|112:180,1,72,0|0,0:0|0:0,0:0:0:0: +24,172,11545,5,6,0:0:0:0: +160,280,12013,1,0,0:0:0:0: +268,144,12482,1,0,0:0:0:0: +132,36,12951,2,0,L|204:32,1,72,0|0,0:0|0:0,0:0:0:0: +284,60,13420,6,0,P|340:100|344:180,2,144,6|0|0,0:0|0:0|0:0,0:0:0:0: +268,144,14591,1,0,0:0:0:0: +284,228,14826,2,0,P|316:248|364:252,1,72,0|0,0:0|0:0,0:0:0:0: +436,248,15295,6,0,P|372:272|344:340,1,144,6|2,0:0|0:0,0:0:0:0: +168,338,16232,2,0,P|141:273|76:248,1,144,2|2,0:0|0:0,0:0:0:0: +4,296,16935,1,0,0:0:0:0: +80,336,17170,5,6,0:0:0:0: +44,168,17638,1,0,0:0:0:0: +212,128,18107,1,0,0:0:0:0: +248,296,18576,2,0,P|284:288|320:292,1,72,0|0,0:0|0:0,0:0:0:0: +400,324,19045,5,6,0:0:0:0: +280,200,19513,1,0,0:0:0:0: +368,52,19982,1,0,0:0:0:0: +488,176,20451,2,0,P|452:168|416:172,1,72,0|0,0:0|0:0,0:0:0:0: +336,200,20920,6,0,P|284:216|200:192,1,144,6|0,0:0|0:0,0:0:0:0: +200,192,21857,2,0,L|204:264,1,72,0|0,0:3|0:0,0:0:0:0: +117,244,22326,2,0,L|120:172,1,72,0|0,0:0|0:0,0:0:0:0: +40,152,22795,6,0,L|28:296,2,144,6|0|0,0:0|0:0|0:0,0:0:0:0: +152,24,24201,1,0,0:0:0:0: +220,76,24435,1,0,3:0:0:0: +304,56,24670,6,0,P|288:120|296:196,1,144,4|2,0:3|0:3,0:0:0:0: +344,268,25373,1,0,0:0:0:0: +416,316,25607,2,0,P|452:312|508:316,2,72,0|0|2,0:0|0:0|0:3,0:0:0:0: +244,344,26545,6,0,P|176:356|108:328,1,144,4|2,0:3|0:3,0:0:0:0: +60,256,27248,1,0,0:0:0:0: +36,172,27482,2,0,L|40:100,2,72,0|0|2,0:0|0:0|0:3,0:0:0:0: +188,252,28420,6,0,P|192:184|196:100,1,144,4|2,0:3|0:3,0:0:0:0: +140,40,29123,1,0,0:0:0:0: +140,40,29357,2,0,B|172:16|220:24|220:24|288:36,1,144,0|2,0:0|0:3,0:0:0:0: +364,52,30060,1,0,0:0:0:0: +308,116,30295,6,0,B|300:168|300:168|328:256,1,144,4|2,0:3|0:3,0:0:0:0: +340,340,30998,1,0,0:0:0:0: +260,308,31232,2,0,L|188:304,1,72,0|2,0:0|0:3,0:0:0:0: +100,296,31701,1,2,0:3:0:0: +136,374,31935,1,0,0:0:0:0: +152,224,32170,6,0,P|160:152|132:88,1,144,4|2,0:3|0:3,0:0:0:0: +56,48,32873,1,0,0:0:0:0: +60,136,33107,2,0,L|56:208,2,72,0|0|2,0:0|0:0|0:3,0:0:0:0: +224,76,34045,6,0,P|289:104|360:96,1,144,4|2,0:3|0:3,0:0:0:0: +432,48,34748,1,0,0:0:0:0: +440,132,34982,2,0,B|432:156|432:156|436:204,2,72,0|0|2,0:0|0:0|0:3,0:0:0:0: +448,304,35920,6,0,B|412:315|380:292|380:292|348:269|312:280,1,144,4|2,0:3|0:3,0:0:0:0: +332,364,36623,1,0,0:0:0:0: +247,339,36857,2,0,P|230:308|225:273,2,72,0|0|2,0:0|0:0|0:3,0:0:0:0: +312,280,37560,6,0,L|316:172,1,108 +134,35,38966,5,0,0:0:0:0: +72,96,39201,2,0,P|119:119|171:111,1,108,0|0,0:0|0:0,0:0:0:0: +192,100,39670,6,0,L|200:172,1,72,4|2,0:0|0:0,0:0:0:0: +147,240,40138,2,0,P|133:272|132:308,1,72,0|2,1:0|0:0,0:0:0:0: +216,292,40607,2,0,B|260:308|260:308|356:292,1,144,4|0,2:3|1:0,1:0:0:0: +356,292,41310,1,2,0:0:0:0: +436,327,41545,6,0,P|441:292|435:257,1,72,4|2,0:3|0:0,0:0:0:0: +364,204,42013,2,0,P|336:144|352:68,1,144,0|4,1:0|2:3,1:0:0:0: +404,0,42716,1,2,0:0:0:0: +440,80,42951,2,0,B|464:84|464:84|512:80,1,72,0|2,1:0|0:0,0:0:0:0: +351,71,43420,6,0,B|296:68|296:68|268:76|268:76|196:72,1,144,4|0,2:3|1:0,1:0:0:0: +120,68,44123,1,2,0:0:0:0: +160,144,44357,2,0,P|172:180|168:232,1,72,4|2,0:3|0:0,0:0:0:0: +76,264,44826,2,0,P|76:228|88:194,1,72,0|2,1:0|0:0,0:0:0:0: +160,144,45295,5,4,0:3:0:0: +244,164,45529,1,2,0:0:0:0: +268,248,45763,2,0,L|344:252,1,72,0|2,1:0|0:0,0:0:0:0: +408,156,46232,2,0,L|336:159,1,72,4|2,0:3|0:0,0:0:0:0: +212,72,46701,2,0,L|288:76,1,72,0|2,1:0|0:0,0:0:0:0: +400,72,47170,6,0,P|464:96|488:172,1,144,4|0,2:0|1:0,1:0:0:0: +476,248,47873,1,2,0:0:0:0: +436,324,48107,2,0,L|284:320,1,144,4|0,2:3|1:0,1:0:0:0: +204,316,48810,1,2,0:0:0:0: +127,355,49045,6,0,P|120:321|124:285,1,72,4|2,0:3|0:0,0:0:0:0: +192,232,49513,2,0,L|335:228,1,144,0|4,1:0|2:3,1:0:0:0: +412,188,50216,1,2,0:0:0:0: +444,108,50451,2,0,P|452:72|448:36,1,72,0|2,1:0|0:0,0:0:0:0: +368,68,50920,6,0,B|332:79|300:56|300:56|268:33|232:44,1,144,4|0,2:3|1:0,1:0:0:0: +152,76,51623,1,2,0:0:0:0: +76,116,51857,2,0,L|80:268,1,144,4|0,2:3|1:0,1:0:0:0: +80,260,52560,1,2,0:0:0:0: +8,308,52795,6,0,P|34:334|69:346,1,72,4|2,0:3|0:0,0:0:0:0: +148,312,53263,2,0,P|163:278|162:241,1,72,0|2,1:0|0:0,0:0:0:0: +156,156,53732,5,0,3:0:0:0: +156,156,53966,1,2,0:0:0:0: +236,196,54201,2,0,L|312:192,1,72,8|0,0:3|0:0,0:0:0:0: +368,256,54670,6,0,P|392:216|352:116,1,144,4|2,0:0|1:2,0:0:0:0: +288,92,55373,1,0,0:0:0:0: +360,40,55607,2,0,L|432:36,1,72,4|0,0:3|3:0,0:0:0:0: +288,92,56076,2,0,L|216:88,1,72,2|0,1:2|0:0,0:0:0:0: +132,72,56545,6,0,P|172:88|200:184,1,144,4|2,0:3|1:2,0:0:0:0: +143,241,57248,1,0,0:0:0:0: +65,202,57482,2,0,P|87:174|119:157,1,72,4|0,0:3|3:0,0:0:0:0: +132,324,57951,2,0,P|98:312|72:288,1,72,2|0,1:2|0:0,0:0:0:0: +143,241,58420,6,0,L|288:240,1,144,4|2,0:3|1:2,0:0:0:0: +372,240,59123,1,0,0:0:0:0: +330,314,59357,2,0,P|318:350|322:390,1,72,4|0,0:3|3:0,0:0:0:0: +452,264,59826,2,0,P|453:228|442:194,1,72,2|0,1:2|0:0,0:0:0:0: +384,128,60295,6,0,B|336:144|336:144|244:128,1,144,4|2,0:3|1:2,0:0:0:0: +164,160,60998,2,0,P|160:116|168:88,1,72,0|4,0:0|0:3,0:0:0:0: +244,128,61466,2,0,P|248:172|240:200,1,72,0|2,3:0|1:2,0:0:0:0: +168,248,61935,1,0,0:0:0:0: +120,320,62170,6,0,P|196:328|252:272,2,144,4|2|4,0:3|1:2|0:3,0:0:0:0: +80,244,63341,1,0,3:0:0:0: +100,160,63576,2,0,L|24:156,1,72,2|0,1:2|0:0,0:0:0:0: +180,128,64045,6,0,P|249:138|304:94,1,144,4|2,0:3|1:2,0:0:0:0: +226,57,64748,1,0,0:0:0:0: +304,94,64982,2,0,L|300:166,1,72,4|0,0:3|3:0,0:0:0:0: +377,203,65451,2,0,L|388:132,1,72,2|0,1:2|0:0,0:0:0:0: +468,180,65920,6,0,L|432:328,1,144,4|2,0:3|1:2,0:0:0:0: +276,252,66857,2,0,P|208:248|140:280,1,144,4|2,0:3|1:2,0:0:0:0: +84,344,67560,1,0,0:0:0:0: +56,260,67795,6,0,L|52:188,2,72,4|2|2,0:3|0:0|1:2,0:0:0:0: +168,128,68732,2,0,L|172:56,2,72,4|2|2,0:3|0:0|1:2,0:0:0:0: +244,168,69435,1,0,0:0:0:0: +332,164,69670,1,4,0:3:0:0: +208,328,84670,6,0,P|224:264|216:188,1,144,4|2,0:3|0:3,0:0:0:0: +168,116,85373,1,0,0:0:0:0: +96,68,85607,2,0,P|60:72|4:68,2,72,0|0|2,0:0|0:0|0:3,0:0:0:0: +268,40,86545,6,0,P|336:28|404:56,1,144,4|2,0:3|0:3,0:0:0:0: +452,128,87248,1,0,0:0:0:0: +476,212,87482,2,0,L|472:284,2,72,0|0|2,0:0|0:0|0:3,0:0:0:0: +324,132,88420,6,0,P|320:200|316:284,1,144,4|2,0:3|0:3,0:0:0:0: +372,344,89123,1,0,0:0:0:0: +372,344,89357,2,0,B|340:368|292:360|292:360|224:348,1,144,0|2,0:0|0:3,0:0:0:0: +148,332,90060,1,0,0:0:0:0: +204,268,90295,6,0,B|212:216|212:216|184:128,1,144,4|2,0:3|0:3,0:0:0:0: +172,44,90998,1,0,0:0:0:0: +252,76,91232,2,0,L|324:80,1,72,0|2,0:0|0:3,0:0:0:0: +412,88,91701,1,2,0:3:0:0: +377,9,91935,1,0,0:0:0:0: +360,160,92170,6,0,P|352:232|380:296,1,144,4|2,0:3|0:3,0:0:0:0: +456,336,92873,1,0,0:0:0:0: +452,248,93107,2,0,L|456:176,2,72,0|0|2,0:0|0:0|0:3,0:0:0:0: +288,308,94045,6,0,P|223:280|152:288,1,144,4|2,0:3|0:3,0:0:0:0: +80,336,94748,1,0,0:0:0:0: +72,252,94982,2,0,B|80:228|80:228|76:180,2,72,0|0|2,0:0|0:0|0:3,0:0:0:0: +64,80,95920,6,0,B|100:69|132:92|132:92|164:115|200:104,1,144,4|2,0:3|0:3,0:0:0:0: +180,20,96623,1,0,0:0:0:0: +265,45,96857,2,0,P|282:76|287:111,2,72,0|0|2,0:0|0:0|0:3,0:0:0:0: +200,104,97560,1,0,0:0:0:0: +200,104,97677,1,0,0:0:0:0: +200,104,97795,6,0,B|196:142|217:166|217:166|176:180|160:220,1,144,4|0,0:3|0:0,0:0:0:0: +240,248,98966,5,0,0:0:0:0: +202,325,99201,2,0,P|254:333|301:309,1,108,0|0,0:0|0:0,0:0:0:0: +315,292,99670,6,0,L|323:220,1,72,4|2,0:0|0:0,0:0:0:0: +365,144,100138,2,0,P|379:112|380:76,1,72,0|2,1:0|0:0,0:0:0:0: +296,92,100607,2,0,B|252:76|252:76|156:92,1,144,4|0,2:3|1:0,1:0:0:0: +156,92,101310,1,2,0:0:0:0: +76,57,101545,6,0,P|71:92|77:127,1,72,4|2,0:3|0:0,0:0:0:0: +148,180,102013,2,0,P|176:240|160:316,1,144,0|4,1:0|2:3,1:0:0:0: +108,384,102716,1,2,0:0:0:0: +72,304,102951,2,0,B|48:300|48:300|0:304,1,72,0|2,1:0|0:0,0:0:0:0: +161,313,103420,6,0,B|216:316|216:316|244:308|244:308|316:312,1,144,4|0,2:3|1:0,1:0:0:0: +392,316,104123,1,2,0:0:0:0: +352,240,104357,2,0,P|340:204|344:152,1,72,4|2,0:3|0:0,0:0:0:0: +436,120,104826,2,0,P|436:156|424:190,1,72,0|2,1:0|0:0,0:0:0:0: +352,240,105295,5,4,0:3:0:0: +268,220,105529,1,2,0:0:0:0: +244,136,105763,2,0,L|168:132,1,72,0|2,1:0|0:0,0:0:0:0: +104,228,106232,2,0,L|176:225,1,72,4|2,0:3|0:0,0:0:0:0: +300,312,106701,2,0,L|224:308,1,72,0|2,1:0|0:0,0:0:0:0: +112,312,107170,6,0,P|48:288|24:212,1,144,4|0,2:0|1:0,1:0:0:0: +36,136,107873,1,2,0:0:0:0: +76,60,108107,2,0,L|228:64,1,144,4|0,2:3|1:0,1:0:0:0: +308,68,108810,1,2,0:0:0:0: +385,29,109045,6,0,P|392:63|388:99,1,72,4|2,0:3|0:0,0:0:0:0: +320,152,109513,2,0,L|177:156,1,144,0|4,1:0|2:3,1:0:0:0: +100,196,110216,1,2,0:0:0:0: +68,276,110451,2,0,P|60:312|64:348,1,72,0|2,1:0|0:0,0:0:0:0: +144,316,110920,6,0,B|180:305|212:328|212:328|244:351|280:340,1,144,4|0,2:3|1:0,1:0:0:0: +360,308,111623,1,2,0:0:0:0: +436,268,111857,2,0,L|432:116,1,144,4|0,2:3|1:0,1:0:0:0: +432,124,112560,1,2,0:0:0:0: +504,76,112795,6,0,P|478:50|443:38,1,72,4|2,0:3|0:0,0:0:0:0: +364,72,113263,2,0,P|349:106|350:143,1,72,0|2,1:0|0:0,0:0:0:0: +356,228,113732,5,0,3:0:0:0: +356,228,113966,1,2,0:0:0:0: +276,188,114201,2,0,L|200:192,1,72,8|0,0:3|0:0,0:0:0:0: +144,128,114670,6,0,P|120:168|160:268,1,144,4|2,0:0|1:2,0:0:0:0: +224,292,115373,1,0,0:0:0:0: +152,344,115607,2,0,L|80:348,1,72,4|0,0:3|3:0,0:0:0:0: +224,292,116076,2,0,L|296:296,1,72,2|0,1:2|0:0,0:0:0:0: +380,312,116545,6,0,P|340:296|312:200,1,144,4|2,0:3|1:2,0:0:0:0: +369,143,117248,1,0,0:0:0:0: +447,182,117482,2,0,P|425:210|393:227,1,72,4|0,0:3|3:0,0:0:0:0: +380,60,117951,2,0,P|414:72|440:96,1,72,2|0,1:2|0:0,0:0:0:0: +369,143,118420,6,0,L|224:144,1,144,4|2,0:3|1:2,0:0:0:0: +140,144,119123,1,0,0:0:0:0: +182,70,119357,2,0,P|194:34|190:-6,1,72,4|0,0:3|3:0,0:0:0:0: +60,120,119826,2,0,P|59:156|70:190,1,72,2|0,1:2|0:0,0:0:0:0: +128,256,120295,6,0,B|176:240|176:240|268:256,1,144,4|2,0:3|1:2,0:0:0:0: +348,224,120998,2,0,P|352:268|344:296,1,72,0|4,0:0|0:3,0:0:0:0: +268,256,121466,2,0,P|264:212|272:184,1,72,0|2,3:0|1:2,0:0:0:0: +344,136,121935,1,0,0:0:0:0: +392,64,122170,6,0,P|316:56|260:112,2,144,4|2|4,0:3|1:2|0:3,0:0:0:0: +432,140,123341,1,0,3:0:0:0: +412,224,123576,2,0,L|488:228,1,72,2|0,1:2|0:0,0:0:0:0: +332,256,124045,6,0,P|263:246|208:290,1,144,4|2,0:3|1:2,0:0:0:0: +286,327,124748,1,0,0:0:0:0: +208,290,124982,2,0,L|212:218,1,72,4|0,0:3|3:0,0:0:0:0: +135,181,125451,2,0,L|124:252,1,72,2|0,1:2|0:0,0:0:0:0: +44,204,125920,6,0,L|80:56,1,144,4|2,0:3|1:2,0:0:0:0: +236,132,126857,2,0,P|304:136|372:104,1,144,4|2,0:3|1:2,0:0:0:0: +428,40,127560,1,0,0:0:0:0: +456,124,127795,6,0,L|460:196,2,72,4|2|2,0:3|0:0|1:2,0:0:0:0: +344,256,128732,2,0,L|340:328,2,72,4|2|2,0:3|0:0|1:2,0:0:0:0: +268,216,129435,1,0,0:0:0:0: +180,220,129670,5,4,2:0:0:0: +256,40,130373,1,2,0:0:0:0: +64,68,131076,1,2,0:0:0:0: +92,136,131310,1,0,0:0:0:0: +64,204,131545,6,0,L|60:288,1,72 +31,343,132248,2,0,P|86:345|127:309,1,108 +332,220,133420,5,2,0:0:0:0: +256,40,134123,1,2,0:0:0:0: +448,68,134826,1,2,0:0:0:0: +420,136,135060,1,0,0:0:0:0: +448,204,135295,6,0,L|452:288,1,72,2|0,0:0|0:0,0:0:0:0: +480,343,135998,2,0,P|426:345|385:309,1,108 +256,192,137170,5,2,0:0:0:0: +156,360,137873,1,2,0:0:0:0: +356,360,138576,2,0,L|352:308,1,36,2|0,0:0|0:0,0:0:0:0: +304,268,139045,6,0,P|336:253|372:252,1,72 +448,260,139748,2,0,L|444:152,1,108 +256,192,140920,5,2,0:0:0:0: +356,24,141623,1,2,0:0:0:0: +156,24,142326,2,0,L|160:72,1,36,2|0,0:0|0:0,0:0:0:0: +208,116,142795,6,0,P|176:131|140:132,1,72,2|0,0:0|0:0,0:0:0:0: +64,124,143498,2,0,L|68:232,1,108 +68,232,144670,5,4,0:3:0:0: +216,320,145138,1,4,0:3:0:0: +304,172,145607,1,4,0:3:0:0: +156,84,146075,1,4,0:3:0:0: +296,320,146545,5,4,0:3:0:0: +208,172,147013,1,4,0:3:0:0: +356,84,147482,1,4,0:3:0:0: +444,232,147950,1,4,0:3:0:0: +296,320,148420,6,0,P|252:328|192:296,2,108.000004119873,4|4|4,0:3|0:3|0:3,0:0:0:0: +260,248,149591,1,0,0:0:0:0: +320,196,149826,2,0,L|316:140,1,54.0000020599366,4|0,0:3|0:0,0:0:0:0: +120,236,159670,6,0,L|176:232,1,54.0000020599366,4|0,0:3|0:0,0:0:0:0: +160,152,160138,2,0,L|104:156,1,54.0000020599366,2|0,0:0|0:0,0:0:0:0: +240,180,160607,2,0,P|292:188|344:172,1,108.000004119873,4|2,0:3|0:0,3:0:0:0: +408,120,161310,1,0,3:0:0:0: +424,200,161545,6,0,L|420:256,1,54.0000020599366,4|0,0:3|0:0,0:0:0:0: +376,320,162013,2,0,P|396:328|480:304,2,108.000004119873,2|6|2,2:0|0:3|2:0,3:0:0:0: +312,268,163185,1,0,0:0:0:0: +296,348,163420,6,0,L|240:344,1,54.0000020599366,4|0,3:0|3:0,0:0:0:0: +160,320,163888,2,0,L|100:316,1,57.6,4|0,3:0|3:0,0:0:0:0: +64,232,164357,6,0,L|128:228,1,61.2000011672974,4|0,3:0|3:0,0:0:0:0: +204,200,164825,2,0,L|268:196,1,61.2000011672974,4|0,3:0|3:0,0:0:0:0: +232,108,165295,6,0,L|164:104,1,68.399998173523,4|0,3:0|3:0,0:0:0:0: +80,84,165763,2,0,L|4:80,1,72,4|0,3:0|3:0,0:0:0:0: +324,120,167170,6,0,P|388:128|456:92,1,144,4|2,0:0|1:2,0:0:0:0: +496,168,167873,1,0,0:0:0:0: +496,168,168107,2,0,P|484:204|488:256,1,72,4|0,0:3|3:0,0:0:0:0: +408,296,168576,2,0,P|398:261|378:231,1,72,2|0,1:2|0:0,0:0:0:0: +296,200,169045,6,0,B|228:228|156:204,1,144,4|2,0:3|1:2,0:0:0:0: +84,156,169748,1,0,0:0:0:0: +80,244,169982,2,0,L|76:316,1,72,4|0,0:3|3:0,0:0:0:0: +170,274,170451,2,0,L|156:204,1,72,2|0,1:2|0:0,0:0:0:0: +216,140,170920,6,0,L|284:276,1,144,4|2,0:3|1:2,0:0:0:0: +320,344,171623,1,0,0:0:0:0: +372,276,171857,2,0,P|366:240|349:207,1,72,4|0,0:3|3:0,0:0:0:0: +312,132,172326,2,0,L|276:60,1,72,2|0,1:2|0:0,0:0:0:0: +208,20,172795,6,0,P|272:36|348:12,1,144,4|2,0:3|1:2,0:0:0:0: +424,48,173498,2,0,L|412:132,1,72,0|4,0:0|0:3,0:0:0:0: +484,168,173966,2,0,L|472:252,1,72,0|2,3:0|1:2,0:0:0:0: +400,280,174435,1,0,0:0:0:0: +346,348,174670,6,0,P|414:363|472:324,2,144,4|2|4,0:3|1:2|0:3,0:0:0:0: +312,268,175841,1,0,3:0:0:0: +256,336,176076,2,0,L|184:332,1,72,2|0,1:2|0:0,0:0:0:0: +80,244,176545,6,0,B|140:248|140:248|164:244|164:244|223:247,1,144,4|2,0:3|1:2,0:0:0:0: +312,268,177248,1,0,0:0:0:0: +224,247,177482,2,0,P|240:215|272:187,1,72,4|0,0:3|3:0,0:0:0:0: +204,131,177951,2,0,P|233:111|275:103,1,72,2|0,1:2|0:0,0:0:0:0: +240,23,178420,6,0,B|280:15|316:35|316:35|376:71,1,144,4|2,0:3|1:2,0:0:0:0: +399,236,179357,2,0,B|359:244|323:224|323:224|263:188,1,144,4|2,0:3|1:2,0:0:0:0: +204,132,180060,1,0,0:0:0:0: +184,216,180295,6,0,L|188:288,2,72,4|2|2,0:3|0:0|1:2,0:0:0:0: +120,156,180998,1,0,0:0:0:0: +56,96,181232,2,0,L|60:24,2,72,4|2|0,0:3|0:0|1:0,0:0:0:0: +36,180,181935,1,0,0:0:0:0: +100,240,182170,6,0,P|144:300|116:380,2,144,4|2|4,0:0|1:2|0:3,0:0:0:0: +60,316,183341,1,0,0:0:0:0: +220,352,183576,2,0,L|308:348,1,72,2|0,1:2|0:0,0:0:0:0: +396,264,184045,6,0,B|336:268|336:268|312:264|312:264|253:267,1,144,4|2,0:3|1:2,0:0:0:0: +253,267,184748,1,0,0:0:0:0: +268,180,184982,2,0,L|339:177,1,72,4|0,0:3|0:0,0:0:0:0: +164,280,185451,2,0,L|92:282,1,72,2|0,1:2|0:0,0:0:0:0: +52,208,185920,6,0,P|8:268|32:344,2,144,4|2|4,0:3|1:2|0:3,0:0:0:0: +140,212,187091,1,0,0:0:0:0: +92,284,187326,2,0,P|104:316|100:368,1,72,2|0,1:2|0:0,0:0:0:0: +52,208,187795,6,0,P|48:136|76:72,1,144,4|2,0:3|1:2,0:0:0:0: +160,52,188498,2,0,P|188:28|220:16,1,72,0|4,0:0|0:3,0:0:0:0: +232,100,188966,2,0,P|268:93|301:98,1,72,0|2,0:0|1:2,0:0:0:0: +372,152,189435,1,0,0:0:0:0: +420,224,189670,6,0,P|428:296|400:360,2,144,4|2|4,0:3|1:2|0:3,0:0:0:0: +372,152,190841,1,0,0:0:0:0: +392,68,191076,2,0,L|465:64,1,72,2|0,1:2|0:0,0:0:0:0: +304,92,191545,6,0,P|236:104|168:76,1,144,4|2,0:3|1:2,0:0:0:0: +108,12,192248,1,0,0:0:0:0: +168,76,192482,2,0,L|172:152,1,72,4|0,0:3|0:0,0:0:0:0: +80,136,192951,2,0,L|101:204,1,72,2|0,1:2|0:0,0:0:0:0: +12,220,193420,6,0,B|50:279|50:279|80:300|120:292,1,144,4|2,0:3|1:2,0:0:0:0: +284,232,194357,2,0,B|320:221|352:244|352:244|384:267|420:256,1,144,4|2,0:3|1:2,0:0:0:0: +488,200,195060,1,0,0:0:0:0: +507,284,195295,6,0,P|492:315|464:338,1,72,4|0,0:0|0:0,0:0:0:0: +380,356,195763,2,0,L|236:352,1,144,0|4,1:0|0:3,0:0:0:0: +152,328,196466,1,0,3:0:0:0: +64,336,196701,2,0,P|29:325|4:300,1,72,0|0,1:0|0:0,0:0:0:0: +76,252,197170,6,0,P|108:188|96:116,1,144,4|0,0:0|1:0,0:0:0:0: +36,56,197873,1,2,0:0:0:0: +120,32,198107,2,0,L|192:28,2,72,4|2|2,0:3|0:0|1:2,0:0:0:0: +248,152,199045,6,0,P|280:168|304:196,1,72,4|2,0:3|0:0,0:0:0:0: +336,277,199513,2,0,P|306:296|269:303,1,72,2|0,1:2|0:0,0:0:0:0: +183,290,199982,2,0,P|180:254|193:219,2,72,4|2|0,0:3|0:0|1:0,0:0:0:0: +436,252,200920,6,0,P|404:188|416:116,1,144,4|0,0:3|1:0,0:0:0:0: +476,56,201623,1,2,0:0:0:0: +392,32,201857,2,0,L|320:28,2,72,4|0|2,0:3|0:0|1:2,0:0:0:0: +264,152,202795,6,0,P|232:168|208:196,1,72,4|2,0:3|0:0,0:0:0:0: +176,277,203263,2,0,P|205:296|242:303,1,72,2|0,1:2|0:0,0:0:0:0: +329,290,203732,2,0,P|331:254|318:219,2,72,4|2|0,0:3|0:0|1:0,0:0:0:0: +72,324,204670,6,0,B|60:272|60:272|76:180,1,144,4|0,0:0|1:0,0:0:0:0: +92,96,205373,1,2,0:0:0:0: +8,124,205607,2,0,P|5:88|14:53,2,72,4|2|2,0:3|0:0|1:2,0:0:0:0: +168,192,206545,6,0,P|200:174|237:173,1,72,4|2,0:3|0:0,0:0:0:0: +320,160,207013,2,0,P|318:196|301:229,1,72,2|0,1:2|0:0,0:0:0:0: +272,307,207482,2,0,P|240:287|221:256,2,72,4|2|0,0:3|0:0|1:0,0:0:0:0: +440,324,208420,6,0,B|452:272|452:272|436:180,1,144,4|0,0:3|1:0,0:0:0:0: +420,96,209123,1,2,0:0:0:0: +504,124,209357,2,0,P|507:88|498:53,2,72,4|0|2,0:3|0:0|1:2,0:0:0:0: +344,192,210295,6,0,P|311:174|274:173,1,72,4|2,0:3|0:0,0:0:0:0: +190,156,210763,2,0,P|191:192|208:225,1,72,2|0,1:2|0:0,0:0:0:0: +288,256,211232,1,4,0:3:0:0: +132,332,211701,1,0,1:0:0:0: +28,192,212170,6,0,P|16:120|44:56,1,144,4|0,0:0|1:0,0:0:0:0: +120,16,212873,1,2,0:0:0:0: +204,32,213107,2,0,L|304:28,2,72,4|2|2,0:3|0:0|1:2,0:0:0:0: +192,204,214045,6,0,P|196:240|216:272,1,72,4|2,0:3|0:0,0:0:0:0: +298,241,214513,2,0,P|327:219|345:186,1,72,6|0,1:2|0:0,0:0:0:0: +280,132,214982,2,0,P|246:117|209:118,2,72,4|2|0,0:3|0:0|1:0,0:0:0:0: +484,192,215920,6,0,P|496:120|468:56,1,144,4|0,0:3|1:0,0:0:0:0: +392,16,216623,1,2,0:0:0:0: +308,32,216857,2,0,L|208:28,2,72,4|0|2,0:3|0:0|1:2,0:0:0:0: +320,204,217795,6,0,P|316:240|296:272,1,72,4|2,0:3|0:0,0:0:0:0: +213,241,218263,2,0,P|184:219|166:186,1,72,2|0,1:2|0:0,0:0:0:0: +232,132,218732,2,0,B|260:112|300:116|300:116|384:128,1,144,4|0,0:3|1:0,0:0:0:0: +348,336,219670,6,0,B|320:356|280:352|280:352|196:340,1,144,4|0,0:0|1:0,0:0:0:0: +124,328,220373,1,2,0:0:0:0: +54,276,220607,2,0,P|41:308|39:345,2,72,4|2|2,0:3|0:0|1:2,0:0:0:0: +156,80,221545,6,0,L|251:94,1,72,4|2,0:3|0:0,0:0:0:0: +212,169,222013,2,0,L|148:160,1,64.799998022461,2|0,1:2|0:0,0:0:0:0: +140,240,222482,2,0,L|216:252,2,57.6,4|2|0,0:3|0:0|1:0,0:0:0:0: +256,192,223420,12,0,227170,0:0:0:0: +"; + } +} diff --git a/osu.Game/Tests/Beatmaps/TestWorkingBeatmap.cs b/osu.Game/Tests/Beatmaps/TestWorkingBeatmap.cs index af482dc250..68bb3f6dd9 100644 --- a/osu.Game/Tests/Beatmaps/TestWorkingBeatmap.cs +++ b/osu.Game/Tests/Beatmaps/TestWorkingBeatmap.cs @@ -4,11 +4,17 @@ using osu.Framework.Audio.Track; using osu.Framework.Graphics.Textures; using osu.Game.Beatmaps; +using osu.Game.Rulesets; namespace osu.Game.Tests.Beatmaps { public class TestWorkingBeatmap : WorkingBeatmap { + public TestWorkingBeatmap(RulesetInfo ruleset) + : this(new TestBeatmap(ruleset)) + { + } + public TestWorkingBeatmap(Beatmap beatmap) : base(beatmap.BeatmapInfo) { @@ -16,7 +22,6 @@ namespace osu.Game.Tests.Beatmaps } private readonly Beatmap beatmap; - protected override Beatmap GetBeatmap() => beatmap; protected override Texture GetBackground() => null; protected override Track GetTrack() => new TrackVirtual(); diff --git a/osu.Game/Tests/Visual/TestCasePlayer.cs b/osu.Game/Tests/Visual/TestCasePlayer.cs index d835adb54f..b7c66a37e5 100644 --- a/osu.Game/Tests/Visual/TestCasePlayer.cs +++ b/osu.Game/Tests/Visual/TestCasePlayer.cs @@ -1,9 +1,7 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE -using System.IO; using System.Linq; -using System.Text; using osu.Framework.Allocation; using osu.Framework.Graphics.Shapes; using osu.Game.Beatmaps; @@ -59,24 +57,13 @@ namespace osu.Game.Tests.Visual } } - protected virtual Beatmap CreateBeatmap() - { - Beatmap beatmap; - - using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(test_beatmap_data))) - using (var reader = new StreamReader(stream)) - beatmap = Game.Beatmaps.Formats.Decoder.GetDecoder(reader).Decode(reader); - - return beatmap; - } + protected virtual Beatmap CreateBeatmap(Ruleset ruleset) => new TestBeatmap(ruleset.RulesetInfo); private Player loadPlayerFor(RulesetInfo ri) => loadPlayerFor(ri.CreateInstance()); private Player loadPlayerFor(Ruleset r) { - var beatmap = CreateBeatmap(); - - beatmap.BeatmapInfo.Ruleset = r.RulesetInfo; + var beatmap = CreateBeatmap(r); working = new TestWorkingBeatmap(beatmap); working.Mods.Value = new[] { r.GetAllMods().First(m => m is ModNoFail) }; @@ -107,699 +94,5 @@ namespace osu.Game.Tests.Visual AllowLeadIn = false, AllowResults = false, }; - - private const string test_beatmap_data = - @"osu file format v14 - -[General] -AudioLeadIn: 500 -PreviewTime: 53498 -Countdown: 0 -SampleSet: Soft -StackLeniency: 0.7 -Mode: 0 -LetterboxInBreaks: 0 -WidescreenStoryboard: 1 - -[Editor] -DistanceSpacing: 1.2 -BeatDivisor: 4 -GridSize: 4 -TimelineZoom: 1 - -[Metadata] -Title:My Love -TitleUnicode:My Love -Artist:Kuba Oms -ArtistUnicode:Kuba Oms -Creator:W h i t e -Version:Hard -Source:ADHD -Tags:Monthly Beatmapping Contest Electronic folk pop w_h_i_t_e -BeatmapID:397534 -BeatmapSetID:163112 - -[Difficulty] -HPDrainRate:5 -CircleSize:4 -OverallDifficulty:6 -ApproachRate:7 -SliderMultiplier:1.44 -SliderTickRate:2 - -[Events] -//Break Periods -2,69870,83770 -2,152170,158770 -//Storyboard Layer 0 (Background) -//Storyboard Layer 1 (Fail) -//Storyboard Layer 2 (Pass) -//Storyboard Layer 3 (Foreground) -//Storyboard Sound Samples - -[TimingPoints] -2170,468.75,4,2,0,40,1,0 -4045,-100,4,2,0,30,0,0 -4162,-100,4,2,0,40,0,0 -5920,-100,4,2,0,30,0,0 -6037,-100,4,2,0,40,0,0 -7795,-100,4,2,0,30,0,0 -7912,-100,4,2,0,40,0,0 -9670,-100,4,2,0,40,0,0 -9787,-100,4,2,0,50,0,0 -11545,-100,4,2,0,40,0,0 -11662,-100,4,2,0,50,0,0 -13420,-100,4,2,0,40,0,0 -13537,-100,4,2,0,50,0,0 -15295,-100,4,2,0,40,0,0 -15412,-100,4,2,0,50,0,0 -17170,-100,4,2,0,40,0,0 -17287,-100,4,2,0,50,0,0 -19045,-100,4,2,0,40,0,0 -19162,-100,4,2,0,50,0,0 -20920,-100,4,2,0,40,0,0 -21037,-100,4,2,0,50,0,0 -22795,-100,4,2,0,40,0,0 -22912,-100,4,2,0,50,0,0 -24670,-100,4,2,0,70,0,0 -37560,-200,4,2,0,30,0,0 -38263,-200,4,2,0,5,0,0 -38966,-100,4,2,0,30,0,0 -39670,-100,4,2,0,70,0,0 -53732,-100,4,2,0,40,0,0 -54670,-100,4,2,0,80,0,1 -55138,-100,4,2,0,60,0,1 -55255,-100,4,2,0,80,0,1 -56076,-100,4,2,0,60,0,1 -56193,-100,4,2,0,80,0,1 -57013,-100,4,2,0,60,0,1 -57130,-100,4,2,0,80,0,1 -57951,-100,4,2,0,60,0,1 -58068,-100,4,2,0,80,0,1 -58888,-100,4,2,0,60,0,1 -59005,-100,4,2,0,80,0,1 -59826,-100,4,2,0,60,0,1 -59943,-100,4,2,0,80,0,1 -60763,-100,4,2,0,60,0,1 -60880,-100,4,2,0,80,0,1 -61701,-100,4,2,0,60,0,1 -61818,-100,4,2,0,80,0,1 -62638,-100,4,2,0,60,0,1 -62755,-100,4,2,0,80,0,1 -63576,-100,4,2,0,60,0,1 -63693,-100,4,2,0,80,0,1 -64513,-100,4,2,0,60,0,1 -64630,-100,4,2,0,80,0,1 -65451,-100,4,2,0,60,0,1 -65568,-100,4,2,0,80,0,1 -66388,-100,4,2,0,60,0,1 -66505,-100,4,2,0,80,0,1 -67326,-100,4,2,0,60,0,1 -67443,-100,4,2,0,80,0,1 -68263,-100,4,2,0,60,0,1 -68380,-100,4,2,0,80,0,1 -69201,-100,4,2,0,60,0,1 -69318,-100,4,2,0,80,0,1 -69670,-100,4,2,0,70,0,0 -84670,-100,4,2,0,70,0,0 -97560,-200,4,2,0,70,0,0 -97795,-200,4,2,0,30,0,0 -98966,-100,4,2,0,30,0,0 -99670,-100,4,2,0,70,0,0 -113732,-100,4,2,0,40,0,0 -114670,-100,4,2,0,80,0,1 -115138,-100,4,2,0,60,0,1 -115255,-100,4,2,0,80,0,1 -116076,-100,4,2,0,60,0,1 -116193,-100,4,2,0,80,0,1 -117013,-100,4,2,0,60,0,1 -117130,-100,4,2,0,80,0,1 -117951,-100,4,2,0,60,0,1 -118068,-100,4,2,0,80,0,1 -118888,-100,4,2,0,60,0,1 -119005,-100,4,2,0,80,0,1 -119826,-100,4,2,0,60,0,1 -119943,-100,4,2,0,80,0,1 -120763,-100,4,2,0,60,0,1 -120880,-100,4,2,0,80,0,1 -121701,-100,4,2,0,60,0,1 -121818,-100,4,2,0,80,0,1 -122638,-100,4,2,0,60,0,1 -122755,-100,4,2,0,80,0,1 -123576,-100,4,2,0,60,0,1 -123693,-100,4,2,0,80,0,1 -124513,-100,4,2,0,60,0,1 -124630,-100,4,2,0,80,0,1 -125451,-100,4,2,0,60,0,1 -125568,-100,4,2,0,80,0,1 -126388,-100,4,2,0,60,0,1 -126505,-100,4,2,0,80,0,1 -127326,-100,4,2,0,60,0,1 -127443,-100,4,2,0,80,0,1 -128263,-100,4,2,0,60,0,1 -128380,-100,4,2,0,80,0,1 -129201,-100,4,2,0,60,0,1 -129318,-100,4,2,0,80,0,1 -129670,-200,4,2,0,40,0,0 -144670,-133.333333333333,4,2,0,40,0,0 -159670,-133.333333333333,4,2,0,40,0,0 -163420,-133.333333333333,4,2,0,45,0,0 -163888,-125,4,2,0,50,0,0 -164357,-117.647058823529,4,2,0,55,0,0 -164826,-111.111111111111,4,2,0,60,0,0 -165295,-105.263157894737,4,2,0,65,0,0 -165763,-100,4,2,0,70,0,0 -166232,-100,4,2,0,40,0,0 -167170,-100,4,2,0,80,0,1 -167638,-100,4,2,0,60,0,1 -167755,-100,4,2,0,80,0,1 -168576,-100,4,2,0,60,0,1 -168693,-100,4,2,0,80,0,1 -169513,-100,4,2,0,60,0,1 -169630,-100,4,2,0,80,0,1 -170451,-100,4,2,0,60,0,1 -170568,-100,4,2,0,80,0,1 -171388,-100,4,2,0,60,0,1 -171505,-100,4,2,0,80,0,1 -172326,-100,4,2,0,60,0,1 -172443,-100,4,2,0,80,0,1 -173263,-100,4,2,0,60,0,1 -173380,-100,4,2,0,80,0,1 -174201,-100,4,2,0,60,0,1 -174318,-100,4,2,0,80,0,1 -175138,-100,4,2,0,60,0,1 -175255,-100,4,2,0,80,0,1 -176076,-100,4,2,0,60,0,1 -176193,-100,4,2,0,80,0,1 -177013,-100,4,2,0,60,0,1 -177130,-100,4,2,0,80,0,1 -177951,-100,4,2,0,60,0,1 -178068,-100,4,2,0,80,0,1 -178888,-100,4,2,0,60,0,1 -179005,-100,4,2,0,80,0,1 -179826,-100,4,2,0,60,0,1 -179943,-100,4,2,0,80,0,1 -180763,-100,4,2,0,60,0,1 -180880,-100,4,2,0,80,0,1 -180998,-100,4,2,0,80,0,0 -181466,-100,4,2,0,60,0,0 -181584,-100,4,2,0,80,0,0 -181935,-100,4,2,0,80,0,0 -182170,-100,4,2,0,80,0,1 -182638,-100,4,2,0,60,0,1 -182755,-100,4,2,0,80,0,1 -183576,-100,4,2,0,60,0,1 -183693,-100,4,2,0,80,0,1 -184513,-100,4,2,0,60,0,1 -184630,-100,4,2,0,80,0,1 -185451,-100,4,2,0,60,0,1 -185568,-100,4,2,0,80,0,1 -186388,-100,4,2,0,60,0,1 -186505,-100,4,2,0,80,0,1 -187326,-100,4,2,0,60,0,1 -187443,-100,4,2,0,80,0,1 -188263,-100,4,2,0,60,0,1 -188380,-100,4,2,0,80,0,1 -189201,-100,4,2,0,60,0,1 -189318,-100,4,2,0,80,0,1 -190138,-100,4,2,0,60,0,1 -190255,-100,4,2,0,80,0,1 -191076,-100,4,2,0,60,0,1 -191193,-100,4,2,0,80,0,1 -192013,-100,4,2,0,60,0,1 -192130,-100,4,2,0,80,0,1 -192951,-100,4,2,0,60,0,1 -193068,-100,4,2,0,80,0,1 -193888,-100,4,2,0,60,0,1 -194005,-100,4,2,0,80,0,1 -194826,-100,4,2,0,60,0,1 -194943,-100,4,2,0,80,0,1 -195295,-100,4,2,0,50,0,1 -195529,-100,4,2,0,52,0,1 -195646,-100,4,2,0,54,0,1 -195763,-100,4,2,0,56,0,1 -195880,-100,4,2,0,58,0,1 -195998,-100,4,2,0,60,0,1 -196115,-100,4,2,0,62,0,1 -196232,-100,4,2,0,64,0,1 -196349,-100,4,2,0,68,0,1 -196466,-100,4,2,0,70,0,1 -196584,-100,4,2,0,72,0,1 -196701,-100,4,2,0,74,0,1 -196818,-100,4,2,0,76,0,1 -196935,-100,4,2,0,78,0,1 -197052,-100,4,2,0,80,0,1 -197170,-100,4,2,0,80,0,0 -197873,-100,4,2,0,60,0,0 -197990,-100,4,2,0,80,0,0 -198341,-100,4,2,0,60,0,0 -199045,-100,4,2,0,80,0,0 -199279,-100,4,2,0,60,0,0 -199630,-100,4,2,0,80,0,0 -200216,-100,4,2,0,60,0,0 -200334,-100,4,2,0,80,0,0 -201623,-100,4,2,0,60,0,0 -201740,-100,4,2,0,80,0,0 -202326,-100,4,2,0,60,0,0 -202443,-100,4,2,0,80,0,0 -203029,-100,4,2,0,60,0,0 -203498,-100,4,2,0,80,0,0 -203966,-100,4,2,0,60,0,0 -204201,-100,4,2,0,80,0,0 -205373,-100,4,2,0,60,0,0 -205490,-100,4,2,0,80,0,0 -205841,-100,4,2,0,60,0,0 -206076,-100,4,2,0,60,0,0 -206545,-100,4,2,0,80,0,0 -206779,-100,4,2,0,60,0,0 -207130,-100,4,2,0,80,0,0 -207716,-100,4,2,0,60,0,0 -207951,-100,4,2,0,80,0,0 -209123,-100,4,2,0,60,0,0 -209240,-100,4,2,0,80,0,0 -209826,-100,4,2,0,60,0,0 -209943,-100,4,2,0,80,0,0 -210529,-100,4,2,0,60,0,0 -210880,-100,4,2,0,80,0,0 -211232,-100,4,2,0,60,0,0 -211701,-100,4,2,0,70,0,0 -212170,-100,4,2,0,80,0,0 -212873,-100,4,2,0,60,0,0 -212990,-100,4,2,0,80,0,0 -213341,-100,4,2,0,60,0,0 -213576,-100,4,2,0,60,0,0 -214045,-100,4,2,0,80,0,0 -214279,-100,4,2,0,60,0,0 -214630,-100,4,2,0,80,0,0 -215216,-100,4,2,0,60,0,0 -215451,-100,4,2,0,80,0,0 -216623,-100,4,2,0,60,0,0 -216740,-100,4,2,0,80,0,0 -217326,-100,4,2,0,60,0,0 -217443,-100,4,2,0,80,0,0 -218029,-100,4,2,0,60,0,0 -218498,-100,4,2,0,80,0,0 -218732,-100,4,2,0,50,0,0 -219670,-100,4,2,0,70,0,0 -220138,-100,4,2,0,65,0,0 -220373,-100,4,2,0,45,0,0 -220490,-100,4,2,0,65,0,0 -220607,-100,4,2,0,60,0,0 -220841,-100,4,2,0,35,0,0 -221076,-100,4,2,0,35,0,0 -221545,-100,4,2,0,50,0,0 -221779,-100,4,2,0,30,0,0 -222013,-111.111111111111,4,2,0,25,0,0 -222130,-111.111111111111,4,2,0,40,0,0 -222482,-125,4,2,0,40,0,0 -222716,-125,4,2,0,20,0,0 -222951,-100,4,2,0,15,0,0 -223420,-100,4,2,0,30,0,0 -224357,-100,4,2,0,25,0,0 -225295,-100,4,2,0,20,0,0 -226232,-100,4,2,0,15,0,0 -226701,-100,4,2,0,10,0,0 -227170,-100,4,2,0,5,0,0 - - -[Colours] - Combo1 : 17,254,176 -Combo2 : 173,255,95 -Combo3 : 255,88,100 -Combo4 : 255,94,55 - -[HitObjects] -320,256,2170,6,0,P|256:284|192:256,1,144,4|0,0:0|0:0,0:0:0:0: -144,184,2873,1,0,0:0:0:0: -108,260,3107,2,0,P|112:296|100:336,1,72 -28,288,3576,2,0,P|24:252|36:212,1,72,0|0,0:0|0:0,0:0:0:0: -76,140,4045,6,0,L|220:136,1,144,4|0,0:0|0:0,0:0:0:0: -292,88,4748,1,0,0:0:0:0: -292,88,4982,2,0,P|304:120|300:168,1,72 -388,168,5451,2,0,P|396:133|416:103,1,72,0|0,0:0|0:0,0:0:0:0: -472,172,5920,6,0,B|470:200|457:222|457:222|488:256|476:308,1,144,4|0,0:0|0:0,0:0:0:0: -396,280,6623,1,0,0:0:0:0: -324,328,6857,2,0,P|288:332|252:324,1,72 -180,280,7326,2,0,L|108:284,1,72,0|0,0:0|0:0,0:0:0:0: -256,192,7795,12,0,9670,0:0:0:0: -428,212,10138,1,0,0:0:0:0: -292,320,10607,1,0,0:0:0:0: -184,184,11076,2,0,L|112:180,1,72,0|0,0:0|0:0,0:0:0:0: -24,172,11545,5,6,0:0:0:0: -160,280,12013,1,0,0:0:0:0: -268,144,12482,1,0,0:0:0:0: -132,36,12951,2,0,L|204:32,1,72,0|0,0:0|0:0,0:0:0:0: -284,60,13420,6,0,P|340:100|344:180,2,144,6|0|0,0:0|0:0|0:0,0:0:0:0: -268,144,14591,1,0,0:0:0:0: -284,228,14826,2,0,P|316:248|364:252,1,72,0|0,0:0|0:0,0:0:0:0: -436,248,15295,6,0,P|372:272|344:340,1,144,6|2,0:0|0:0,0:0:0:0: -168,338,16232,2,0,P|141:273|76:248,1,144,2|2,0:0|0:0,0:0:0:0: -4,296,16935,1,0,0:0:0:0: -80,336,17170,5,6,0:0:0:0: -44,168,17638,1,0,0:0:0:0: -212,128,18107,1,0,0:0:0:0: -248,296,18576,2,0,P|284:288|320:292,1,72,0|0,0:0|0:0,0:0:0:0: -400,324,19045,5,6,0:0:0:0: -280,200,19513,1,0,0:0:0:0: -368,52,19982,1,0,0:0:0:0: -488,176,20451,2,0,P|452:168|416:172,1,72,0|0,0:0|0:0,0:0:0:0: -336,200,20920,6,0,P|284:216|200:192,1,144,6|0,0:0|0:0,0:0:0:0: -200,192,21857,2,0,L|204:264,1,72,0|0,0:3|0:0,0:0:0:0: -117,244,22326,2,0,L|120:172,1,72,0|0,0:0|0:0,0:0:0:0: -40,152,22795,6,0,L|28:296,2,144,6|0|0,0:0|0:0|0:0,0:0:0:0: -152,24,24201,1,0,0:0:0:0: -220,76,24435,1,0,3:0:0:0: -304,56,24670,6,0,P|288:120|296:196,1,144,4|2,0:3|0:3,0:0:0:0: -344,268,25373,1,0,0:0:0:0: -416,316,25607,2,0,P|452:312|508:316,2,72,0|0|2,0:0|0:0|0:3,0:0:0:0: -244,344,26545,6,0,P|176:356|108:328,1,144,4|2,0:3|0:3,0:0:0:0: -60,256,27248,1,0,0:0:0:0: -36,172,27482,2,0,L|40:100,2,72,0|0|2,0:0|0:0|0:3,0:0:0:0: -188,252,28420,6,0,P|192:184|196:100,1,144,4|2,0:3|0:3,0:0:0:0: -140,40,29123,1,0,0:0:0:0: -140,40,29357,2,0,B|172:16|220:24|220:24|288:36,1,144,0|2,0:0|0:3,0:0:0:0: -364,52,30060,1,0,0:0:0:0: -308,116,30295,6,0,B|300:168|300:168|328:256,1,144,4|2,0:3|0:3,0:0:0:0: -340,340,30998,1,0,0:0:0:0: -260,308,31232,2,0,L|188:304,1,72,0|2,0:0|0:3,0:0:0:0: -100,296,31701,1,2,0:3:0:0: -136,374,31935,1,0,0:0:0:0: -152,224,32170,6,0,P|160:152|132:88,1,144,4|2,0:3|0:3,0:0:0:0: -56,48,32873,1,0,0:0:0:0: -60,136,33107,2,0,L|56:208,2,72,0|0|2,0:0|0:0|0:3,0:0:0:0: -224,76,34045,6,0,P|289:104|360:96,1,144,4|2,0:3|0:3,0:0:0:0: -432,48,34748,1,0,0:0:0:0: -440,132,34982,2,0,B|432:156|432:156|436:204,2,72,0|0|2,0:0|0:0|0:3,0:0:0:0: -448,304,35920,6,0,B|412:315|380:292|380:292|348:269|312:280,1,144,4|2,0:3|0:3,0:0:0:0: -332,364,36623,1,0,0:0:0:0: -247,339,36857,2,0,P|230:308|225:273,2,72,0|0|2,0:0|0:0|0:3,0:0:0:0: -312,280,37560,6,0,L|316:172,1,108 -134,35,38966,5,0,0:0:0:0: -72,96,39201,2,0,P|119:119|171:111,1,108,0|0,0:0|0:0,0:0:0:0: -192,100,39670,6,0,L|200:172,1,72,4|2,0:0|0:0,0:0:0:0: -147,240,40138,2,0,P|133:272|132:308,1,72,0|2,1:0|0:0,0:0:0:0: -216,292,40607,2,0,B|260:308|260:308|356:292,1,144,4|0,2:3|1:0,1:0:0:0: -356,292,41310,1,2,0:0:0:0: -436,327,41545,6,0,P|441:292|435:257,1,72,4|2,0:3|0:0,0:0:0:0: -364,204,42013,2,0,P|336:144|352:68,1,144,0|4,1:0|2:3,1:0:0:0: -404,0,42716,1,2,0:0:0:0: -440,80,42951,2,0,B|464:84|464:84|512:80,1,72,0|2,1:0|0:0,0:0:0:0: -351,71,43420,6,0,B|296:68|296:68|268:76|268:76|196:72,1,144,4|0,2:3|1:0,1:0:0:0: -120,68,44123,1,2,0:0:0:0: -160,144,44357,2,0,P|172:180|168:232,1,72,4|2,0:3|0:0,0:0:0:0: -76,264,44826,2,0,P|76:228|88:194,1,72,0|2,1:0|0:0,0:0:0:0: -160,144,45295,5,4,0:3:0:0: -244,164,45529,1,2,0:0:0:0: -268,248,45763,2,0,L|344:252,1,72,0|2,1:0|0:0,0:0:0:0: -408,156,46232,2,0,L|336:159,1,72,4|2,0:3|0:0,0:0:0:0: -212,72,46701,2,0,L|288:76,1,72,0|2,1:0|0:0,0:0:0:0: -400,72,47170,6,0,P|464:96|488:172,1,144,4|0,2:0|1:0,1:0:0:0: -476,248,47873,1,2,0:0:0:0: -436,324,48107,2,0,L|284:320,1,144,4|0,2:3|1:0,1:0:0:0: -204,316,48810,1,2,0:0:0:0: -127,355,49045,6,0,P|120:321|124:285,1,72,4|2,0:3|0:0,0:0:0:0: -192,232,49513,2,0,L|335:228,1,144,0|4,1:0|2:3,1:0:0:0: -412,188,50216,1,2,0:0:0:0: -444,108,50451,2,0,P|452:72|448:36,1,72,0|2,1:0|0:0,0:0:0:0: -368,68,50920,6,0,B|332:79|300:56|300:56|268:33|232:44,1,144,4|0,2:3|1:0,1:0:0:0: -152,76,51623,1,2,0:0:0:0: -76,116,51857,2,0,L|80:268,1,144,4|0,2:3|1:0,1:0:0:0: -80,260,52560,1,2,0:0:0:0: -8,308,52795,6,0,P|34:334|69:346,1,72,4|2,0:3|0:0,0:0:0:0: -148,312,53263,2,0,P|163:278|162:241,1,72,0|2,1:0|0:0,0:0:0:0: -156,156,53732,5,0,3:0:0:0: -156,156,53966,1,2,0:0:0:0: -236,196,54201,2,0,L|312:192,1,72,8|0,0:3|0:0,0:0:0:0: -368,256,54670,6,0,P|392:216|352:116,1,144,4|2,0:0|1:2,0:0:0:0: -288,92,55373,1,0,0:0:0:0: -360,40,55607,2,0,L|432:36,1,72,4|0,0:3|3:0,0:0:0:0: -288,92,56076,2,0,L|216:88,1,72,2|0,1:2|0:0,0:0:0:0: -132,72,56545,6,0,P|172:88|200:184,1,144,4|2,0:3|1:2,0:0:0:0: -143,241,57248,1,0,0:0:0:0: -65,202,57482,2,0,P|87:174|119:157,1,72,4|0,0:3|3:0,0:0:0:0: -132,324,57951,2,0,P|98:312|72:288,1,72,2|0,1:2|0:0,0:0:0:0: -143,241,58420,6,0,L|288:240,1,144,4|2,0:3|1:2,0:0:0:0: -372,240,59123,1,0,0:0:0:0: -330,314,59357,2,0,P|318:350|322:390,1,72,4|0,0:3|3:0,0:0:0:0: -452,264,59826,2,0,P|453:228|442:194,1,72,2|0,1:2|0:0,0:0:0:0: -384,128,60295,6,0,B|336:144|336:144|244:128,1,144,4|2,0:3|1:2,0:0:0:0: -164,160,60998,2,0,P|160:116|168:88,1,72,0|4,0:0|0:3,0:0:0:0: -244,128,61466,2,0,P|248:172|240:200,1,72,0|2,3:0|1:2,0:0:0:0: -168,248,61935,1,0,0:0:0:0: -120,320,62170,6,0,P|196:328|252:272,2,144,4|2|4,0:3|1:2|0:3,0:0:0:0: -80,244,63341,1,0,3:0:0:0: -100,160,63576,2,0,L|24:156,1,72,2|0,1:2|0:0,0:0:0:0: -180,128,64045,6,0,P|249:138|304:94,1,144,4|2,0:3|1:2,0:0:0:0: -226,57,64748,1,0,0:0:0:0: -304,94,64982,2,0,L|300:166,1,72,4|0,0:3|3:0,0:0:0:0: -377,203,65451,2,0,L|388:132,1,72,2|0,1:2|0:0,0:0:0:0: -468,180,65920,6,0,L|432:328,1,144,4|2,0:3|1:2,0:0:0:0: -276,252,66857,2,0,P|208:248|140:280,1,144,4|2,0:3|1:2,0:0:0:0: -84,344,67560,1,0,0:0:0:0: -56,260,67795,6,0,L|52:188,2,72,4|2|2,0:3|0:0|1:2,0:0:0:0: -168,128,68732,2,0,L|172:56,2,72,4|2|2,0:3|0:0|1:2,0:0:0:0: -244,168,69435,1,0,0:0:0:0: -332,164,69670,1,4,0:3:0:0: -208,328,84670,6,0,P|224:264|216:188,1,144,4|2,0:3|0:3,0:0:0:0: -168,116,85373,1,0,0:0:0:0: -96,68,85607,2,0,P|60:72|4:68,2,72,0|0|2,0:0|0:0|0:3,0:0:0:0: -268,40,86545,6,0,P|336:28|404:56,1,144,4|2,0:3|0:3,0:0:0:0: -452,128,87248,1,0,0:0:0:0: -476,212,87482,2,0,L|472:284,2,72,0|0|2,0:0|0:0|0:3,0:0:0:0: -324,132,88420,6,0,P|320:200|316:284,1,144,4|2,0:3|0:3,0:0:0:0: -372,344,89123,1,0,0:0:0:0: -372,344,89357,2,0,B|340:368|292:360|292:360|224:348,1,144,0|2,0:0|0:3,0:0:0:0: -148,332,90060,1,0,0:0:0:0: -204,268,90295,6,0,B|212:216|212:216|184:128,1,144,4|2,0:3|0:3,0:0:0:0: -172,44,90998,1,0,0:0:0:0: -252,76,91232,2,0,L|324:80,1,72,0|2,0:0|0:3,0:0:0:0: -412,88,91701,1,2,0:3:0:0: -377,9,91935,1,0,0:0:0:0: -360,160,92170,6,0,P|352:232|380:296,1,144,4|2,0:3|0:3,0:0:0:0: -456,336,92873,1,0,0:0:0:0: -452,248,93107,2,0,L|456:176,2,72,0|0|2,0:0|0:0|0:3,0:0:0:0: -288,308,94045,6,0,P|223:280|152:288,1,144,4|2,0:3|0:3,0:0:0:0: -80,336,94748,1,0,0:0:0:0: -72,252,94982,2,0,B|80:228|80:228|76:180,2,72,0|0|2,0:0|0:0|0:3,0:0:0:0: -64,80,95920,6,0,B|100:69|132:92|132:92|164:115|200:104,1,144,4|2,0:3|0:3,0:0:0:0: -180,20,96623,1,0,0:0:0:0: -265,45,96857,2,0,P|282:76|287:111,2,72,0|0|2,0:0|0:0|0:3,0:0:0:0: -200,104,97560,1,0,0:0:0:0: -200,104,97677,1,0,0:0:0:0: -200,104,97795,6,0,B|196:142|217:166|217:166|176:180|160:220,1,144,4|0,0:3|0:0,0:0:0:0: -240,248,98966,5,0,0:0:0:0: -202,325,99201,2,0,P|254:333|301:309,1,108,0|0,0:0|0:0,0:0:0:0: -315,292,99670,6,0,L|323:220,1,72,4|2,0:0|0:0,0:0:0:0: -365,144,100138,2,0,P|379:112|380:76,1,72,0|2,1:0|0:0,0:0:0:0: -296,92,100607,2,0,B|252:76|252:76|156:92,1,144,4|0,2:3|1:0,1:0:0:0: -156,92,101310,1,2,0:0:0:0: -76,57,101545,6,0,P|71:92|77:127,1,72,4|2,0:3|0:0,0:0:0:0: -148,180,102013,2,0,P|176:240|160:316,1,144,0|4,1:0|2:3,1:0:0:0: -108,384,102716,1,2,0:0:0:0: -72,304,102951,2,0,B|48:300|48:300|0:304,1,72,0|2,1:0|0:0,0:0:0:0: -161,313,103420,6,0,B|216:316|216:316|244:308|244:308|316:312,1,144,4|0,2:3|1:0,1:0:0:0: -392,316,104123,1,2,0:0:0:0: -352,240,104357,2,0,P|340:204|344:152,1,72,4|2,0:3|0:0,0:0:0:0: -436,120,104826,2,0,P|436:156|424:190,1,72,0|2,1:0|0:0,0:0:0:0: -352,240,105295,5,4,0:3:0:0: -268,220,105529,1,2,0:0:0:0: -244,136,105763,2,0,L|168:132,1,72,0|2,1:0|0:0,0:0:0:0: -104,228,106232,2,0,L|176:225,1,72,4|2,0:3|0:0,0:0:0:0: -300,312,106701,2,0,L|224:308,1,72,0|2,1:0|0:0,0:0:0:0: -112,312,107170,6,0,P|48:288|24:212,1,144,4|0,2:0|1:0,1:0:0:0: -36,136,107873,1,2,0:0:0:0: -76,60,108107,2,0,L|228:64,1,144,4|0,2:3|1:0,1:0:0:0: -308,68,108810,1,2,0:0:0:0: -385,29,109045,6,0,P|392:63|388:99,1,72,4|2,0:3|0:0,0:0:0:0: -320,152,109513,2,0,L|177:156,1,144,0|4,1:0|2:3,1:0:0:0: -100,196,110216,1,2,0:0:0:0: -68,276,110451,2,0,P|60:312|64:348,1,72,0|2,1:0|0:0,0:0:0:0: -144,316,110920,6,0,B|180:305|212:328|212:328|244:351|280:340,1,144,4|0,2:3|1:0,1:0:0:0: -360,308,111623,1,2,0:0:0:0: -436,268,111857,2,0,L|432:116,1,144,4|0,2:3|1:0,1:0:0:0: -432,124,112560,1,2,0:0:0:0: -504,76,112795,6,0,P|478:50|443:38,1,72,4|2,0:3|0:0,0:0:0:0: -364,72,113263,2,0,P|349:106|350:143,1,72,0|2,1:0|0:0,0:0:0:0: -356,228,113732,5,0,3:0:0:0: -356,228,113966,1,2,0:0:0:0: -276,188,114201,2,0,L|200:192,1,72,8|0,0:3|0:0,0:0:0:0: -144,128,114670,6,0,P|120:168|160:268,1,144,4|2,0:0|1:2,0:0:0:0: -224,292,115373,1,0,0:0:0:0: -152,344,115607,2,0,L|80:348,1,72,4|0,0:3|3:0,0:0:0:0: -224,292,116076,2,0,L|296:296,1,72,2|0,1:2|0:0,0:0:0:0: -380,312,116545,6,0,P|340:296|312:200,1,144,4|2,0:3|1:2,0:0:0:0: -369,143,117248,1,0,0:0:0:0: -447,182,117482,2,0,P|425:210|393:227,1,72,4|0,0:3|3:0,0:0:0:0: -380,60,117951,2,0,P|414:72|440:96,1,72,2|0,1:2|0:0,0:0:0:0: -369,143,118420,6,0,L|224:144,1,144,4|2,0:3|1:2,0:0:0:0: -140,144,119123,1,0,0:0:0:0: -182,70,119357,2,0,P|194:34|190:-6,1,72,4|0,0:3|3:0,0:0:0:0: -60,120,119826,2,0,P|59:156|70:190,1,72,2|0,1:2|0:0,0:0:0:0: -128,256,120295,6,0,B|176:240|176:240|268:256,1,144,4|2,0:3|1:2,0:0:0:0: -348,224,120998,2,0,P|352:268|344:296,1,72,0|4,0:0|0:3,0:0:0:0: -268,256,121466,2,0,P|264:212|272:184,1,72,0|2,3:0|1:2,0:0:0:0: -344,136,121935,1,0,0:0:0:0: -392,64,122170,6,0,P|316:56|260:112,2,144,4|2|4,0:3|1:2|0:3,0:0:0:0: -432,140,123341,1,0,3:0:0:0: -412,224,123576,2,0,L|488:228,1,72,2|0,1:2|0:0,0:0:0:0: -332,256,124045,6,0,P|263:246|208:290,1,144,4|2,0:3|1:2,0:0:0:0: -286,327,124748,1,0,0:0:0:0: -208,290,124982,2,0,L|212:218,1,72,4|0,0:3|3:0,0:0:0:0: -135,181,125451,2,0,L|124:252,1,72,2|0,1:2|0:0,0:0:0:0: -44,204,125920,6,0,L|80:56,1,144,4|2,0:3|1:2,0:0:0:0: -236,132,126857,2,0,P|304:136|372:104,1,144,4|2,0:3|1:2,0:0:0:0: -428,40,127560,1,0,0:0:0:0: -456,124,127795,6,0,L|460:196,2,72,4|2|2,0:3|0:0|1:2,0:0:0:0: -344,256,128732,2,0,L|340:328,2,72,4|2|2,0:3|0:0|1:2,0:0:0:0: -268,216,129435,1,0,0:0:0:0: -180,220,129670,5,4,2:0:0:0: -256,40,130373,1,2,0:0:0:0: -64,68,131076,1,2,0:0:0:0: -92,136,131310,1,0,0:0:0:0: -64,204,131545,6,0,L|60:288,1,72 -31,343,132248,2,0,P|86:345|127:309,1,108 -332,220,133420,5,2,0:0:0:0: -256,40,134123,1,2,0:0:0:0: -448,68,134826,1,2,0:0:0:0: -420,136,135060,1,0,0:0:0:0: -448,204,135295,6,0,L|452:288,1,72,2|0,0:0|0:0,0:0:0:0: -480,343,135998,2,0,P|426:345|385:309,1,108 -256,192,137170,5,2,0:0:0:0: -156,360,137873,1,2,0:0:0:0: -356,360,138576,2,0,L|352:308,1,36,2|0,0:0|0:0,0:0:0:0: -304,268,139045,6,0,P|336:253|372:252,1,72 -448,260,139748,2,0,L|444:152,1,108 -256,192,140920,5,2,0:0:0:0: -356,24,141623,1,2,0:0:0:0: -156,24,142326,2,0,L|160:72,1,36,2|0,0:0|0:0,0:0:0:0: -208,116,142795,6,0,P|176:131|140:132,1,72,2|0,0:0|0:0,0:0:0:0: -64,124,143498,2,0,L|68:232,1,108 -68,232,144670,5,4,0:3:0:0: -216,320,145138,1,4,0:3:0:0: -304,172,145607,1,4,0:3:0:0: -156,84,146075,1,4,0:3:0:0: -296,320,146545,5,4,0:3:0:0: -208,172,147013,1,4,0:3:0:0: -356,84,147482,1,4,0:3:0:0: -444,232,147950,1,4,0:3:0:0: -296,320,148420,6,0,P|252:328|192:296,2,108.000004119873,4|4|4,0:3|0:3|0:3,0:0:0:0: -260,248,149591,1,0,0:0:0:0: -320,196,149826,2,0,L|316:140,1,54.0000020599366,4|0,0:3|0:0,0:0:0:0: -120,236,159670,6,0,L|176:232,1,54.0000020599366,4|0,0:3|0:0,0:0:0:0: -160,152,160138,2,0,L|104:156,1,54.0000020599366,2|0,0:0|0:0,0:0:0:0: -240,180,160607,2,0,P|292:188|344:172,1,108.000004119873,4|2,0:3|0:0,3:0:0:0: -408,120,161310,1,0,3:0:0:0: -424,200,161545,6,0,L|420:256,1,54.0000020599366,4|0,0:3|0:0,0:0:0:0: -376,320,162013,2,0,P|396:328|480:304,2,108.000004119873,2|6|2,2:0|0:3|2:0,3:0:0:0: -312,268,163185,1,0,0:0:0:0: -296,348,163420,6,0,L|240:344,1,54.0000020599366,4|0,3:0|3:0,0:0:0:0: -160,320,163888,2,0,L|100:316,1,57.6,4|0,3:0|3:0,0:0:0:0: -64,232,164357,6,0,L|128:228,1,61.2000011672974,4|0,3:0|3:0,0:0:0:0: -204,200,164825,2,0,L|268:196,1,61.2000011672974,4|0,3:0|3:0,0:0:0:0: -232,108,165295,6,0,L|164:104,1,68.399998173523,4|0,3:0|3:0,0:0:0:0: -80,84,165763,2,0,L|4:80,1,72,4|0,3:0|3:0,0:0:0:0: -324,120,167170,6,0,P|388:128|456:92,1,144,4|2,0:0|1:2,0:0:0:0: -496,168,167873,1,0,0:0:0:0: -496,168,168107,2,0,P|484:204|488:256,1,72,4|0,0:3|3:0,0:0:0:0: -408,296,168576,2,0,P|398:261|378:231,1,72,2|0,1:2|0:0,0:0:0:0: -296,200,169045,6,0,B|228:228|156:204,1,144,4|2,0:3|1:2,0:0:0:0: -84,156,169748,1,0,0:0:0:0: -80,244,169982,2,0,L|76:316,1,72,4|0,0:3|3:0,0:0:0:0: -170,274,170451,2,0,L|156:204,1,72,2|0,1:2|0:0,0:0:0:0: -216,140,170920,6,0,L|284:276,1,144,4|2,0:3|1:2,0:0:0:0: -320,344,171623,1,0,0:0:0:0: -372,276,171857,2,0,P|366:240|349:207,1,72,4|0,0:3|3:0,0:0:0:0: -312,132,172326,2,0,L|276:60,1,72,2|0,1:2|0:0,0:0:0:0: -208,20,172795,6,0,P|272:36|348:12,1,144,4|2,0:3|1:2,0:0:0:0: -424,48,173498,2,0,L|412:132,1,72,0|4,0:0|0:3,0:0:0:0: -484,168,173966,2,0,L|472:252,1,72,0|2,3:0|1:2,0:0:0:0: -400,280,174435,1,0,0:0:0:0: -346,348,174670,6,0,P|414:363|472:324,2,144,4|2|4,0:3|1:2|0:3,0:0:0:0: -312,268,175841,1,0,3:0:0:0: -256,336,176076,2,0,L|184:332,1,72,2|0,1:2|0:0,0:0:0:0: -80,244,176545,6,0,B|140:248|140:248|164:244|164:244|223:247,1,144,4|2,0:3|1:2,0:0:0:0: -312,268,177248,1,0,0:0:0:0: -224,247,177482,2,0,P|240:215|272:187,1,72,4|0,0:3|3:0,0:0:0:0: -204,131,177951,2,0,P|233:111|275:103,1,72,2|0,1:2|0:0,0:0:0:0: -240,23,178420,6,0,B|280:15|316:35|316:35|376:71,1,144,4|2,0:3|1:2,0:0:0:0: -399,236,179357,2,0,B|359:244|323:224|323:224|263:188,1,144,4|2,0:3|1:2,0:0:0:0: -204,132,180060,1,0,0:0:0:0: -184,216,180295,6,0,L|188:288,2,72,4|2|2,0:3|0:0|1:2,0:0:0:0: -120,156,180998,1,0,0:0:0:0: -56,96,181232,2,0,L|60:24,2,72,4|2|0,0:3|0:0|1:0,0:0:0:0: -36,180,181935,1,0,0:0:0:0: -100,240,182170,6,0,P|144:300|116:380,2,144,4|2|4,0:0|1:2|0:3,0:0:0:0: -60,316,183341,1,0,0:0:0:0: -220,352,183576,2,0,L|308:348,1,72,2|0,1:2|0:0,0:0:0:0: -396,264,184045,6,0,B|336:268|336:268|312:264|312:264|253:267,1,144,4|2,0:3|1:2,0:0:0:0: -253,267,184748,1,0,0:0:0:0: -268,180,184982,2,0,L|339:177,1,72,4|0,0:3|0:0,0:0:0:0: -164,280,185451,2,0,L|92:282,1,72,2|0,1:2|0:0,0:0:0:0: -52,208,185920,6,0,P|8:268|32:344,2,144,4|2|4,0:3|1:2|0:3,0:0:0:0: -140,212,187091,1,0,0:0:0:0: -92,284,187326,2,0,P|104:316|100:368,1,72,2|0,1:2|0:0,0:0:0:0: -52,208,187795,6,0,P|48:136|76:72,1,144,4|2,0:3|1:2,0:0:0:0: -160,52,188498,2,0,P|188:28|220:16,1,72,0|4,0:0|0:3,0:0:0:0: -232,100,188966,2,0,P|268:93|301:98,1,72,0|2,0:0|1:2,0:0:0:0: -372,152,189435,1,0,0:0:0:0: -420,224,189670,6,0,P|428:296|400:360,2,144,4|2|4,0:3|1:2|0:3,0:0:0:0: -372,152,190841,1,0,0:0:0:0: -392,68,191076,2,0,L|465:64,1,72,2|0,1:2|0:0,0:0:0:0: -304,92,191545,6,0,P|236:104|168:76,1,144,4|2,0:3|1:2,0:0:0:0: -108,12,192248,1,0,0:0:0:0: -168,76,192482,2,0,L|172:152,1,72,4|0,0:3|0:0,0:0:0:0: -80,136,192951,2,0,L|101:204,1,72,2|0,1:2|0:0,0:0:0:0: -12,220,193420,6,0,B|50:279|50:279|80:300|120:292,1,144,4|2,0:3|1:2,0:0:0:0: -284,232,194357,2,0,B|320:221|352:244|352:244|384:267|420:256,1,144,4|2,0:3|1:2,0:0:0:0: -488,200,195060,1,0,0:0:0:0: -507,284,195295,6,0,P|492:315|464:338,1,72,4|0,0:0|0:0,0:0:0:0: -380,356,195763,2,0,L|236:352,1,144,0|4,1:0|0:3,0:0:0:0: -152,328,196466,1,0,3:0:0:0: -64,336,196701,2,0,P|29:325|4:300,1,72,0|0,1:0|0:0,0:0:0:0: -76,252,197170,6,0,P|108:188|96:116,1,144,4|0,0:0|1:0,0:0:0:0: -36,56,197873,1,2,0:0:0:0: -120,32,198107,2,0,L|192:28,2,72,4|2|2,0:3|0:0|1:2,0:0:0:0: -248,152,199045,6,0,P|280:168|304:196,1,72,4|2,0:3|0:0,0:0:0:0: -336,277,199513,2,0,P|306:296|269:303,1,72,2|0,1:2|0:0,0:0:0:0: -183,290,199982,2,0,P|180:254|193:219,2,72,4|2|0,0:3|0:0|1:0,0:0:0:0: -436,252,200920,6,0,P|404:188|416:116,1,144,4|0,0:3|1:0,0:0:0:0: -476,56,201623,1,2,0:0:0:0: -392,32,201857,2,0,L|320:28,2,72,4|0|2,0:3|0:0|1:2,0:0:0:0: -264,152,202795,6,0,P|232:168|208:196,1,72,4|2,0:3|0:0,0:0:0:0: -176,277,203263,2,0,P|205:296|242:303,1,72,2|0,1:2|0:0,0:0:0:0: -329,290,203732,2,0,P|331:254|318:219,2,72,4|2|0,0:3|0:0|1:0,0:0:0:0: -72,324,204670,6,0,B|60:272|60:272|76:180,1,144,4|0,0:0|1:0,0:0:0:0: -92,96,205373,1,2,0:0:0:0: -8,124,205607,2,0,P|5:88|14:53,2,72,4|2|2,0:3|0:0|1:2,0:0:0:0: -168,192,206545,6,0,P|200:174|237:173,1,72,4|2,0:3|0:0,0:0:0:0: -320,160,207013,2,0,P|318:196|301:229,1,72,2|0,1:2|0:0,0:0:0:0: -272,307,207482,2,0,P|240:287|221:256,2,72,4|2|0,0:3|0:0|1:0,0:0:0:0: -440,324,208420,6,0,B|452:272|452:272|436:180,1,144,4|0,0:3|1:0,0:0:0:0: -420,96,209123,1,2,0:0:0:0: -504,124,209357,2,0,P|507:88|498:53,2,72,4|0|2,0:3|0:0|1:2,0:0:0:0: -344,192,210295,6,0,P|311:174|274:173,1,72,4|2,0:3|0:0,0:0:0:0: -190,156,210763,2,0,P|191:192|208:225,1,72,2|0,1:2|0:0,0:0:0:0: -288,256,211232,1,4,0:3:0:0: -132,332,211701,1,0,1:0:0:0: -28,192,212170,6,0,P|16:120|44:56,1,144,4|0,0:0|1:0,0:0:0:0: -120,16,212873,1,2,0:0:0:0: -204,32,213107,2,0,L|304:28,2,72,4|2|2,0:3|0:0|1:2,0:0:0:0: -192,204,214045,6,0,P|196:240|216:272,1,72,4|2,0:3|0:0,0:0:0:0: -298,241,214513,2,0,P|327:219|345:186,1,72,6|0,1:2|0:0,0:0:0:0: -280,132,214982,2,0,P|246:117|209:118,2,72,4|2|0,0:3|0:0|1:0,0:0:0:0: -484,192,215920,6,0,P|496:120|468:56,1,144,4|0,0:3|1:0,0:0:0:0: -392,16,216623,1,2,0:0:0:0: -308,32,216857,2,0,L|208:28,2,72,4|0|2,0:3|0:0|1:2,0:0:0:0: -320,204,217795,6,0,P|316:240|296:272,1,72,4|2,0:3|0:0,0:0:0:0: -213,241,218263,2,0,P|184:219|166:186,1,72,2|0,1:2|0:0,0:0:0:0: -232,132,218732,2,0,B|260:112|300:116|300:116|384:128,1,144,4|0,0:3|1:0,0:0:0:0: -348,336,219670,6,0,B|320:356|280:352|280:352|196:340,1,144,4|0,0:0|1:0,0:0:0:0: -124,328,220373,1,2,0:0:0:0: -54,276,220607,2,0,P|41:308|39:345,2,72,4|2|2,0:3|0:0|1:2,0:0:0:0: -156,80,221545,6,0,L|251:94,1,72,4|2,0:3|0:0,0:0:0:0: -212,169,222013,2,0,L|148:160,1,64.799998022461,2|0,1:2|0:0,0:0:0:0: -140,240,222482,2,0,L|216:252,2,57.6,4|2|0,0:3|0:0|1:0,0:0:0:0: -256,192,223420,12,0,227170,0:0:0:0: -"; } } diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index 1d3baa6c0d..3d89c859c4 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -896,6 +896,7 @@ + From b91524dbba0bdbfc1436dd1d1a140e296f518137 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 12 Mar 2018 18:32:58 +0900 Subject: [PATCH 384/544] Give TestWorkingBeatmap's track a valid length --- osu.Game/Tests/Beatmaps/TestWorkingBeatmap.cs | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/osu.Game/Tests/Beatmaps/TestWorkingBeatmap.cs b/osu.Game/Tests/Beatmaps/TestWorkingBeatmap.cs index 68bb3f6dd9..02a5c8a5fc 100644 --- a/osu.Game/Tests/Beatmaps/TestWorkingBeatmap.cs +++ b/osu.Game/Tests/Beatmaps/TestWorkingBeatmap.cs @@ -1,10 +1,12 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using System.Linq; using osu.Framework.Audio.Track; using osu.Framework.Graphics.Textures; using osu.Game.Beatmaps; using osu.Game.Rulesets; +using osu.Game.Rulesets.Objects.Types; namespace osu.Game.Tests.Beatmaps { @@ -24,6 +26,21 @@ namespace osu.Game.Tests.Beatmaps private readonly Beatmap beatmap; protected override Beatmap GetBeatmap() => beatmap; protected override Texture GetBackground() => null; - protected override Track GetTrack() => new TrackVirtual(); + + protected override Track GetTrack() + { + var lastObject = beatmap.HitObjects.LastOrDefault(); + if (lastObject != null) + return new TestTrack(((lastObject as IHasEndTime)?.EndTime ?? lastObject.StartTime) + 1000); + return new TrackVirtual(); + } + + private class TestTrack : TrackVirtual + { + public TestTrack(double length) + { + Length = length; + } + } } } From 13c20438ef93cd225005dcc47eef687b5556915e Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 12 Mar 2018 19:41:51 +0900 Subject: [PATCH 385/544] Fix build issues --- osu.Game/Tests/Beatmaps/TestBeatmap.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game/Tests/Beatmaps/TestBeatmap.cs b/osu.Game/Tests/Beatmaps/TestBeatmap.cs index a29ee03975..3b43459428 100644 --- a/osu.Game/Tests/Beatmaps/TestBeatmap.cs +++ b/osu.Game/Tests/Beatmaps/TestBeatmap.cs @@ -25,7 +25,7 @@ namespace osu.Game.Tests.Beatmaps using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(test_beatmap_data))) using (var reader = new StreamReader(stream)) - return testBeatmapCache = Decoder.GetDecoder(reader).DecodeBeatmap(reader); + return testBeatmapCache = Decoder.GetDecoder(reader).Decode(reader); } private const string test_beatmap_data = From d2859d779d1de3b51cbb35edec81b98e2dea492e Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 12 Mar 2018 19:38:23 +0900 Subject: [PATCH 386/544] Create a base TestCaseEditor for rulests to derive --- osu.Game.Rulesets.Osu/Tests/TestCaseEditor.cs | 16 ++++++ .../osu.Game.Rulesets.Osu.csproj | 1 + osu.Game.Tests/Visual/TestCaseEditor.cs | 49 ------------------- osu.Game.Tests/osu.Game.Tests.csproj | 1 - osu.Game/Tests/Visual/TestCaseEditor.cs | 33 +++++++++++++ osu.Game/osu.Game.csproj | 1 + 6 files changed, 51 insertions(+), 50 deletions(-) create mode 100644 osu.Game.Rulesets.Osu/Tests/TestCaseEditor.cs delete mode 100644 osu.Game.Tests/Visual/TestCaseEditor.cs create mode 100644 osu.Game/Tests/Visual/TestCaseEditor.cs diff --git a/osu.Game.Rulesets.Osu/Tests/TestCaseEditor.cs b/osu.Game.Rulesets.Osu/Tests/TestCaseEditor.cs new file mode 100644 index 0000000000..501992def3 --- /dev/null +++ b/osu.Game.Rulesets.Osu/Tests/TestCaseEditor.cs @@ -0,0 +1,16 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using NUnit.Framework; + +namespace osu.Game.Rulesets.Osu.Tests +{ + [TestFixture] + public class TestCaseEditor : Game.Tests.Visual.TestCaseEditor + { + public TestCaseEditor() + : base(new OsuRuleset()) + { + } + } +} diff --git a/osu.Game.Rulesets.Osu/osu.Game.Rulesets.Osu.csproj b/osu.Game.Rulesets.Osu/osu.Game.Rulesets.Osu.csproj index 92cac71ad3..b4c5654de4 100644 --- a/osu.Game.Rulesets.Osu/osu.Game.Rulesets.Osu.csproj +++ b/osu.Game.Rulesets.Osu/osu.Game.Rulesets.Osu.csproj @@ -130,6 +130,7 @@ + diff --git a/osu.Game.Tests/Visual/TestCaseEditor.cs b/osu.Game.Tests/Visual/TestCaseEditor.cs deleted file mode 100644 index c626ca8e7f..0000000000 --- a/osu.Game.Tests/Visual/TestCaseEditor.cs +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright (c) 2007-2018 ppy Pty Ltd . -// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE - -using System; -using System.Collections.Generic; -using NUnit.Framework; -using osu.Framework.Allocation; -using osu.Game.Beatmaps; -using osu.Game.Screens.Edit; -using osu.Game.Screens.Edit.Screens; - -namespace osu.Game.Tests.Visual -{ - [TestFixture] - public class TestCaseEditor : OsuTestCase - { - public override IReadOnlyList RequiredTypes => new[] { typeof(Editor), typeof(EditorScreen) }; - - private readonly Random rng; - - private BeatmapManager beatmaps; - private OsuGameBase osuGame; - - public TestCaseEditor() - { - rng = new Random(1337); - - Add(new Editor()); - AddStep("Next beatmap", nextBeatmap); - } - - [BackgroundDependencyLoader] - private void load(OsuGameBase osuGame, BeatmapManager beatmaps) - { - this.osuGame = osuGame; - this.beatmaps = beatmaps; - } - - private void nextBeatmap() - { - var sets = beatmaps.GetAllUsableBeatmapSets(); - if (sets.Count == 0) - return; - - BeatmapInfo info = sets[rng.Next(0, sets.Count)].Beatmaps[0]; - osuGame.Beatmap.Value = beatmaps.GetWorkingBeatmap(info); - } - } -} diff --git a/osu.Game.Tests/osu.Game.Tests.csproj b/osu.Game.Tests/osu.Game.Tests.csproj index 1cfa7bc111..ed9580211b 100644 --- a/osu.Game.Tests/osu.Game.Tests.csproj +++ b/osu.Game.Tests/osu.Game.Tests.csproj @@ -126,7 +126,6 @@ - diff --git a/osu.Game/Tests/Visual/TestCaseEditor.cs b/osu.Game/Tests/Visual/TestCaseEditor.cs new file mode 100644 index 0000000000..76eae7acea --- /dev/null +++ b/osu.Game/Tests/Visual/TestCaseEditor.cs @@ -0,0 +1,33 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using System; +using System.Collections.Generic; +using osu.Framework.Allocation; +using osu.Game.Rulesets; +using osu.Game.Screens.Edit; +using osu.Game.Screens.Edit.Screens; +using osu.Game.Tests.Beatmaps; + +namespace osu.Game.Tests.Visual +{ + public abstract class TestCaseEditor : OsuTestCase + { + public override IReadOnlyList RequiredTypes => new[] { typeof(Editor), typeof(EditorScreen) }; + + private readonly Ruleset ruleset; + + protected TestCaseEditor(Ruleset ruleset) + { + this.ruleset = ruleset; + } + + [BackgroundDependencyLoader] + private void load(OsuGameBase osuGame) + { + osuGame.Beatmap.Value = new TestWorkingBeatmap(ruleset.RulesetInfo); + + Child = new Editor(); + } + } +} diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index 3d89c859c4..c99ccd6945 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -902,6 +902,7 @@ + From 3354849cc9c05eb47d58abf570935f1fbf36865a Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Mon, 12 Mar 2018 22:01:18 +0900 Subject: [PATCH 387/544] Fix code formatting regression --- osu.Game/Skinning/LegacySkin.cs | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/osu.Game/Skinning/LegacySkin.cs b/osu.Game/Skinning/LegacySkin.cs index 2caeed8480..5525cc483e 100644 --- a/osu.Game/Skinning/LegacySkin.cs +++ b/osu.Game/Skinning/LegacySkin.cs @@ -58,9 +58,14 @@ namespace osu.Game.Skinning private readonly SkinInfo skin; private readonly IResourceStore underlyingStore; - private string getPathForFile(string filename) => - skin.Files.FirstOrDefault(f => string.Equals(Path.GetFileNameWithoutExtension(f.Filename), filename.Split('/').Last(), StringComparison.InvariantCultureIgnoreCase))?.FileInfo - .StoragePath; + private string getPathForFile(string filename) + { + string lastPiece = filename.Split('/').Last(); + + var file = skin.Files.FirstOrDefault(f => + string.Equals(Path.GetFileNameWithoutExtension(f.Filename), lastPiece, StringComparison.InvariantCultureIgnoreCase)); + return file?.FileInfo.StoragePath; + } public LegacySkinResourceStore(SkinInfo skin, IResourceStore underlyingStore) { From ddc1f03a96c40b17095cbdd97151d746fe74d70b Mon Sep 17 00:00:00 2001 From: FreezyLemon Date: Mon, 12 Mar 2018 22:35:45 +0100 Subject: [PATCH 388/544] deselect autoplay button after ctrl-enter play before, the mod was removed, but the button was still active --- osu.Game/Screens/Select/PlaySongSelect.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/osu.Game/Screens/Select/PlaySongSelect.cs b/osu.Game/Screens/Select/PlaySongSelect.cs index c347bfe70f..495292a154 100644 --- a/osu.Game/Screens/Select/PlaySongSelect.cs +++ b/osu.Game/Screens/Select/PlaySongSelect.cs @@ -100,6 +100,7 @@ namespace osu.Game.Screens.Select { var autoType = Ruleset.Value.CreateInstance().GetAutoplayMod().GetType(); SelectedMods.Value = SelectedMods.Value.Where(m => m.GetType() != autoType).ToArray(); + modSelect.DeselectTypes(new[] { autoType }, true); removeAutoModOnResume = false; } From 95c84ea7feb596e45e8cdf721c45c9cfe5515d4d Mon Sep 17 00:00:00 2001 From: FreezyLemon Date: Mon, 12 Mar 2018 23:00:06 +0100 Subject: [PATCH 389/544] remove (now) unnecessary line --- osu.Game/Screens/Select/PlaySongSelect.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/osu.Game/Screens/Select/PlaySongSelect.cs b/osu.Game/Screens/Select/PlaySongSelect.cs index 495292a154..09524d2eac 100644 --- a/osu.Game/Screens/Select/PlaySongSelect.cs +++ b/osu.Game/Screens/Select/PlaySongSelect.cs @@ -99,7 +99,6 @@ namespace osu.Game.Screens.Select if (removeAutoModOnResume) { var autoType = Ruleset.Value.CreateInstance().GetAutoplayMod().GetType(); - SelectedMods.Value = SelectedMods.Value.Where(m => m.GetType() != autoType).ToArray(); modSelect.DeselectTypes(new[] { autoType }, true); removeAutoModOnResume = false; } From 706c26c32b1f4a1912b119b7804a6f6a57b32c64 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Tue, 13 Mar 2018 09:27:28 +0900 Subject: [PATCH 390/544] Remove extra whitespace --- osu.Game/Tests/Beatmaps/TestBeatmap.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/osu.Game/Tests/Beatmaps/TestBeatmap.cs b/osu.Game/Tests/Beatmaps/TestBeatmap.cs index 3b43459428..6d80ebffd4 100644 --- a/osu.Game/Tests/Beatmaps/TestBeatmap.cs +++ b/osu.Game/Tests/Beatmaps/TestBeatmap.cs @@ -341,9 +341,8 @@ SliderTickRate:2 226701,-100,4,2,0,10,0,0 227170,-100,4,2,0,5,0,0 - [Colours] - Combo1 : 17,254,176 +Combo1 : 17,254,176 Combo2 : 173,255,95 Combo3 : 255,88,100 Combo4 : 255,94,55 From 8acba47a2b77ec6a92f51b7e187401a0b96f4f3b Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Tue, 13 Mar 2018 11:23:44 +0900 Subject: [PATCH 391/544] Implement mouse wheel movement in the editor --- osu.Game/Rulesets/Edit/HitObjectComposer.cs | 30 +++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/osu.Game/Rulesets/Edit/HitObjectComposer.cs b/osu.Game/Rulesets/Edit/HitObjectComposer.cs index e6a51cc39b..3f01c2bd33 100644 --- a/osu.Game/Rulesets/Edit/HitObjectComposer.cs +++ b/osu.Game/Rulesets/Edit/HitObjectComposer.cs @@ -5,8 +5,10 @@ using System; using System.Collections.Generic; using System.Linq; using osu.Framework.Allocation; +using osu.Framework.Configuration; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; +using osu.Framework.Input; using osu.Framework.Logging; using osu.Framework.Timing; using osu.Game.Beatmaps; @@ -27,6 +29,9 @@ namespace osu.Game.Rulesets.Edit private RulesetContainer rulesetContainer; private readonly List layerContainers = new List(); + private readonly Bindable beatmap = new Bindable(); + private IAdjustableClock adjustableClock; + protected HitObjectComposer(Ruleset ruleset) { this.ruleset = ruleset; @@ -36,12 +41,15 @@ namespace osu.Game.Rulesets.Edit [BackgroundDependencyLoader] private void load(OsuGameBase osuGame) { + beatmap.BindTo(osuGame.Beatmap); + try { - rulesetContainer = CreateRulesetContainer(ruleset, osuGame.Beatmap.Value); + rulesetContainer = CreateRulesetContainer(ruleset, beatmap.Value); // TODO: should probably be done at a RulesetContainer level to share logic with Player. - rulesetContainer.Clock = new InterpolatingFramedClock((IAdjustableClock)osuGame.Beatmap.Value.Track ?? new StopwatchClock()); + adjustableClock = (IAdjustableClock)beatmap.Value.Track ?? new StopwatchClock(); + rulesetContainer.Clock = new InterpolatingFramedClock(adjustableClock); } catch (Exception e) { @@ -132,6 +140,24 @@ namespace osu.Game.Rulesets.Edit }); } + protected override bool OnWheel(InputState state) + { + var timingPoint = beatmap.Value.Beatmap.ControlPointInfo.TimingPointAt(adjustableClock.CurrentTime); + + const int beat_snap_divisor = 4; // Todo: This should not be a constant + double beatLength = timingPoint.BeatLength / beat_snap_divisor; + int direction = state.Mouse.WheelDelta > 0 ? 1 : -1; + + double unsnappedTime = adjustableClock.CurrentTime + beatLength * direction; + + // Unsnapped time may be between two beats, so we need to snap it to the closest beat + int closestBeat = (int)Math.Round(unsnappedTime / beatLength); + double snappedTime = closestBeat * beatLength; + + adjustableClock.Seek(snappedTime); + return true; + } + private void setCompositionTool(ICompositionTool tool) => CurrentTool = tool; protected virtual RulesetContainer CreateRulesetContainer(Ruleset ruleset, WorkingBeatmap beatmap) => ruleset.CreateRulesetContainerWith(beatmap, true); From 6ecd2afd2420cea1b11e7b704eb13a4ba68ed9d6 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 13 Mar 2018 12:59:41 +0900 Subject: [PATCH 392/544] Update framework --- osu-framework | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu-framework b/osu-framework index 59004b46f2..d29c8365ba 160000 --- a/osu-framework +++ b/osu-framework @@ -1 +1 @@ -Subproject commit 59004b46f2c96ac02fec712e66f9f96fe252f2fa +Subproject commit d29c8365ba3cf7924b57cf22341f4af55658764c From 6c148930b5d2ad601dba56bb87c402e988cdbfad Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Tue, 13 Mar 2018 14:02:37 +0900 Subject: [PATCH 393/544] Don't skip beats when scrolling in the direction of the closest beat --- osu.Game/Rulesets/Edit/HitObjectComposer.cs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/osu.Game/Rulesets/Edit/HitObjectComposer.cs b/osu.Game/Rulesets/Edit/HitObjectComposer.cs index 3f01c2bd33..ba31e61397 100644 --- a/osu.Game/Rulesets/Edit/HitObjectComposer.cs +++ b/osu.Game/Rulesets/Edit/HitObjectComposer.cs @@ -148,10 +148,16 @@ namespace osu.Game.Rulesets.Edit double beatLength = timingPoint.BeatLength / beat_snap_divisor; int direction = state.Mouse.WheelDelta > 0 ? 1 : -1; - double unsnappedTime = adjustableClock.CurrentTime + beatLength * direction; + // The direction is added to prevent rounding issues by enforcing that abs(unsnappedTime - currentTime) > beatLength + double unsnappedTime = adjustableClock.CurrentTime + beatLength * direction + direction; // Unsnapped time may be between two beats, so we need to snap it to the closest beat - int closestBeat = (int)Math.Round(unsnappedTime / beatLength); + int closestBeat; + if (direction > 0) + closestBeat = (int)Math.Floor(unsnappedTime / beatLength); + else + closestBeat = (int)Math.Ceiling(unsnappedTime / beatLength); + double snappedTime = closestBeat * beatLength; adjustableClock.Seek(snappedTime); From e5808196212c72ed81add684f5c4b866ba90da2e Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Tue, 13 Mar 2018 14:08:43 +0900 Subject: [PATCH 394/544] Rename to seekAmount --- osu.Game/Rulesets/Edit/HitObjectComposer.cs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/osu.Game/Rulesets/Edit/HitObjectComposer.cs b/osu.Game/Rulesets/Edit/HitObjectComposer.cs index ba31e61397..e691335353 100644 --- a/osu.Game/Rulesets/Edit/HitObjectComposer.cs +++ b/osu.Game/Rulesets/Edit/HitObjectComposer.cs @@ -145,20 +145,20 @@ namespace osu.Game.Rulesets.Edit var timingPoint = beatmap.Value.Beatmap.ControlPointInfo.TimingPointAt(adjustableClock.CurrentTime); const int beat_snap_divisor = 4; // Todo: This should not be a constant - double beatLength = timingPoint.BeatLength / beat_snap_divisor; + double seekAmount = timingPoint.BeatLength / beat_snap_divisor; int direction = state.Mouse.WheelDelta > 0 ? 1 : -1; // The direction is added to prevent rounding issues by enforcing that abs(unsnappedTime - currentTime) > beatLength - double unsnappedTime = adjustableClock.CurrentTime + beatLength * direction + direction; + double unsnappedTime = adjustableClock.CurrentTime + seekAmount * direction + direction; // Unsnapped time may be between two beats, so we need to snap it to the closest beat int closestBeat; if (direction > 0) - closestBeat = (int)Math.Floor(unsnappedTime / beatLength); + closestBeat = (int)Math.Floor(unsnappedTime / seekAmount); else - closestBeat = (int)Math.Ceiling(unsnappedTime / beatLength); + closestBeat = (int)Math.Ceiling(unsnappedTime / seekAmount); - double snappedTime = closestBeat * beatLength; + double snappedTime = closestBeat * seekAmount; adjustableClock.Seek(snappedTime); return true; From df352c98d6a22cfa1b527ed1e68925be0d2d8741 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Tue, 13 Mar 2018 14:30:50 +0900 Subject: [PATCH 395/544] Change wheel direction to match stable --- osu.Game/Rulesets/Edit/HitObjectComposer.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game/Rulesets/Edit/HitObjectComposer.cs b/osu.Game/Rulesets/Edit/HitObjectComposer.cs index e691335353..bcf0b5f1e7 100644 --- a/osu.Game/Rulesets/Edit/HitObjectComposer.cs +++ b/osu.Game/Rulesets/Edit/HitObjectComposer.cs @@ -146,7 +146,7 @@ namespace osu.Game.Rulesets.Edit const int beat_snap_divisor = 4; // Todo: This should not be a constant double seekAmount = timingPoint.BeatLength / beat_snap_divisor; - int direction = state.Mouse.WheelDelta > 0 ? 1 : -1; + int direction = state.Mouse.WheelDelta > 0 ? -1 : 1; // The direction is added to prevent rounding issues by enforcing that abs(unsnappedTime - currentTime) > beatLength double unsnappedTime = adjustableClock.CurrentTime + seekAmount * direction + direction; From e32eec9259ae7d463070e1e8da06402b50afa173 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Tue, 13 Mar 2018 15:22:46 +0900 Subject: [PATCH 396/544] No more caching --- osu.Game/Tests/Beatmaps/TestBeatmap.cs | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/osu.Game/Tests/Beatmaps/TestBeatmap.cs b/osu.Game/Tests/Beatmaps/TestBeatmap.cs index 6d80ebffd4..7dc6079959 100644 --- a/osu.Game/Tests/Beatmaps/TestBeatmap.cs +++ b/osu.Game/Tests/Beatmaps/TestBeatmap.cs @@ -17,15 +17,11 @@ namespace osu.Game.Tests.Beatmaps BeatmapInfo.Ruleset = ruleset; } - private static Beatmap testBeatmapCache; private static Beatmap createTestBeatmap() { - if (testBeatmapCache != null) - return testBeatmapCache; - using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(test_beatmap_data))) using (var reader = new StreamReader(stream)) - return testBeatmapCache = Decoder.GetDecoder(reader).Decode(reader); + return Decoder.GetDecoder(reader).Decode(reader); } private const string test_beatmap_data = From 0c705b0397d192b4ee7ca2e6242dc26c9db4fae5 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Tue, 13 Mar 2018 15:57:05 +0900 Subject: [PATCH 397/544] Rename to EditorTestCase --- osu.Game.Rulesets.Osu/Tests/TestCaseEditor.cs | 3 ++- .../Tests/Visual/{TestCaseEditor.cs => EditorTestCase.cs} | 4 ++-- osu.Game/osu.Game.csproj | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) rename osu.Game/Tests/Visual/{TestCaseEditor.cs => EditorTestCase.cs} (85%) diff --git a/osu.Game.Rulesets.Osu/Tests/TestCaseEditor.cs b/osu.Game.Rulesets.Osu/Tests/TestCaseEditor.cs index 501992def3..a11f32935e 100644 --- a/osu.Game.Rulesets.Osu/Tests/TestCaseEditor.cs +++ b/osu.Game.Rulesets.Osu/Tests/TestCaseEditor.cs @@ -2,11 +2,12 @@ // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using NUnit.Framework; +using osu.Game.Tests.Visual; namespace osu.Game.Rulesets.Osu.Tests { [TestFixture] - public class TestCaseEditor : Game.Tests.Visual.TestCaseEditor + public class TestCaseEditor : EditorTestCase { public TestCaseEditor() : base(new OsuRuleset()) diff --git a/osu.Game/Tests/Visual/TestCaseEditor.cs b/osu.Game/Tests/Visual/EditorTestCase.cs similarity index 85% rename from osu.Game/Tests/Visual/TestCaseEditor.cs rename to osu.Game/Tests/Visual/EditorTestCase.cs index 76eae7acea..ed2b47ae39 100644 --- a/osu.Game/Tests/Visual/TestCaseEditor.cs +++ b/osu.Game/Tests/Visual/EditorTestCase.cs @@ -11,13 +11,13 @@ using osu.Game.Tests.Beatmaps; namespace osu.Game.Tests.Visual { - public abstract class TestCaseEditor : OsuTestCase + public abstract class EditorTestCase : OsuTestCase { public override IReadOnlyList RequiredTypes => new[] { typeof(Editor), typeof(EditorScreen) }; private readonly Ruleset ruleset; - protected TestCaseEditor(Ruleset ruleset) + protected EditorTestCase(Ruleset ruleset) { this.ruleset = ruleset; } diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index c99ccd6945..7214a31639 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -902,7 +902,7 @@ - + From e97349fd63a96c26a36b0d7fe239ecf6ad51baa1 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Tue, 13 Mar 2018 16:00:56 +0900 Subject: [PATCH 398/544] Derive ScreenTestCase + use LoadComponentAsync --- osu.Game/Tests/Visual/EditorTestCase.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/osu.Game/Tests/Visual/EditorTestCase.cs b/osu.Game/Tests/Visual/EditorTestCase.cs index ed2b47ae39..982a3c5d73 100644 --- a/osu.Game/Tests/Visual/EditorTestCase.cs +++ b/osu.Game/Tests/Visual/EditorTestCase.cs @@ -11,7 +11,7 @@ using osu.Game.Tests.Beatmaps; namespace osu.Game.Tests.Visual { - public abstract class EditorTestCase : OsuTestCase + public abstract class EditorTestCase : ScreenTestCase { public override IReadOnlyList RequiredTypes => new[] { typeof(Editor), typeof(EditorScreen) }; @@ -27,7 +27,7 @@ namespace osu.Game.Tests.Visual { osuGame.Beatmap.Value = new TestWorkingBeatmap(ruleset.RulesetInfo); - Child = new Editor(); + LoadComponentAsync(new Editor(), LoadScreen); } } } From d6fa7d69d7969d2f21516ad69d736acb38da1fdd Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 13 Mar 2018 16:13:07 +0900 Subject: [PATCH 399/544] Add missing fonts section --- osu.Game/Beatmaps/Formats/LegacyDecoder.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/osu.Game/Beatmaps/Formats/LegacyDecoder.cs b/osu.Game/Beatmaps/Formats/LegacyDecoder.cs index 6a3fb82586..cfa0c28de0 100644 --- a/osu.Game/Beatmaps/Formats/LegacyDecoder.cs +++ b/osu.Game/Beatmaps/Formats/LegacyDecoder.cs @@ -65,6 +65,7 @@ namespace osu.Game.Beatmaps.Formats Colours, HitObjects, Variables, + Fonts } internal enum LegacySampleBank From 299de4b8666eb1cbe3615981025b12e89885d26c Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Tue, 13 Mar 2018 16:54:34 +0900 Subject: [PATCH 400/544] Rewrite seeking to better handle timing point boundaries --- osu.Game/Rulesets/Edit/HitObjectComposer.cs | 78 ++++++++++++++++----- 1 file changed, 60 insertions(+), 18 deletions(-) diff --git a/osu.Game/Rulesets/Edit/HitObjectComposer.cs b/osu.Game/Rulesets/Edit/HitObjectComposer.cs index bcf0b5f1e7..be4fb2f1a1 100644 --- a/osu.Game/Rulesets/Edit/HitObjectComposer.cs +++ b/osu.Game/Rulesets/Edit/HitObjectComposer.cs @@ -142,28 +142,70 @@ namespace osu.Game.Rulesets.Edit protected override bool OnWheel(InputState state) { - var timingPoint = beatmap.Value.Beatmap.ControlPointInfo.TimingPointAt(adjustableClock.CurrentTime); - - const int beat_snap_divisor = 4; // Todo: This should not be a constant - double seekAmount = timingPoint.BeatLength / beat_snap_divisor; - int direction = state.Mouse.WheelDelta > 0 ? -1 : 1; - - // The direction is added to prevent rounding issues by enforcing that abs(unsnappedTime - currentTime) > beatLength - double unsnappedTime = adjustableClock.CurrentTime + seekAmount * direction + direction; - - // Unsnapped time may be between two beats, so we need to snap it to the closest beat - int closestBeat; - if (direction > 0) - closestBeat = (int)Math.Floor(unsnappedTime / seekAmount); + if (state.Mouse.WheelDelta > 0) + SeekBackward(true); else - closestBeat = (int)Math.Ceiling(unsnappedTime / seekAmount); - - double snappedTime = closestBeat * seekAmount; - - adjustableClock.Seek(snappedTime); + SeekForward(true); return true; } + /// + /// Seeks the current time one beat-snapped beat-length backwards. + /// + /// Whether to snap to the closest beat. + public void SeekBackward(bool snapped) => seek(-1, snapped); + + /// + /// Seeks the current time one beat-snapped beat-length forwards. + /// + /// Whether to snap to the closest beat. + public void SeekForward(bool snapped) => seek(1, snapped); + + private void seek(int direction, bool snapped) + { + // Todo: This should not be a constant, but feels good for now + const int beat_snap_divisor = 4; + + var currentTimingPoint = beatmap.Value.Beatmap.ControlPointInfo.TimingPointAt(adjustableClock.CurrentTime); + double seekAmount = currentTimingPoint.BeatLength / beat_snap_divisor; + + double seekTime = adjustableClock.CurrentTime + seekAmount * direction; + + if (!snapped) + { + adjustableClock.Seek(seekTime); + return; + } + + var nextTimingPoint = beatmap.Value.Beatmap.ControlPointInfo.TimingPoints.FirstOrDefault(t => t.Time > currentTimingPoint.Time); + var firstTimingPoint = beatmap.Value.Beatmap.ControlPointInfo.TimingPoints.First(); + + if (currentTimingPoint != firstTimingPoint && seekTime < currentTimingPoint.Time) + seekTime = currentTimingPoint.Time - 1; // -1 to be in the prior timing point's boundary + else if (nextTimingPoint != null && seekTime >= nextTimingPoint.Time) + seekTime = nextTimingPoint.Time + 1; // +1 to be in the next timing point's boundary + else + { + // We will be snapping to beats within the current timing point + seekTime -= currentTimingPoint.Time; + + // When rounding below, we need to ensure that abs(seekTime - currentTime) > seekAmount + // This is done by adding direction - a small offset, to seekTime + seekTime += direction; + + // Determine the index from the current timing point of the closest beat to seekTime, accounting for scrolling direction + int closestBeat; + if (direction > 0) + closestBeat = (int)Math.Floor(seekTime / seekAmount); + else + closestBeat = (int)Math.Ceiling(seekTime / seekAmount); + + seekTime = currentTimingPoint.Time + closestBeat * seekAmount; + } + + adjustableClock.Seek(seekTime); + } + private void setCompositionTool(ICompositionTool tool) => CurrentTool = tool; protected virtual RulesetContainer CreateRulesetContainer(Ruleset ruleset, WorkingBeatmap beatmap) => ruleset.CreateRulesetContainerWith(beatmap, true); From ba44813c0007ac4d0099fc2466a40d1b3c8d1534 Mon Sep 17 00:00:00 2001 From: vperus Date: Tue, 13 Mar 2018 12:05:52 +0200 Subject: [PATCH 401/544] Fixed exit from game save username instead of email. Resolve #2156 --- osu.Game/Online/API/APIAccess.cs | 1 - osu.Game/Overlays/Toolbar/ToolbarUserButton.cs | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/osu.Game/Online/API/APIAccess.cs b/osu.Game/Online/API/APIAccess.cs index 1325179e0d..bab53cb462 100644 --- a/osu.Game/Online/API/APIAccess.cs +++ b/osu.Game/Online/API/APIAccess.cs @@ -125,7 +125,6 @@ namespace osu.Game.Online.API userReq.Success += u => { LocalUser.Value = u; - Username = LocalUser.Value.Username; failureCount = 0; //we're connected! diff --git a/osu.Game/Overlays/Toolbar/ToolbarUserButton.cs b/osu.Game/Overlays/Toolbar/ToolbarUserButton.cs index c2dfea9a08..16586adc0c 100644 --- a/osu.Game/Overlays/Toolbar/ToolbarUserButton.cs +++ b/osu.Game/Overlays/Toolbar/ToolbarUserButton.cs @@ -55,7 +55,7 @@ namespace osu.Game.Overlays.Toolbar avatar.User = new User(); break; case APIState.Online: - Text = api.Username; + Text = api.LocalUser.Value.Username; avatar.User = api.LocalUser; break; } From e43de68ad3b17fb1d2de61a87cb7876839bab884 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 13 Mar 2018 19:13:50 +0900 Subject: [PATCH 402/544] Move colour parsing to LegacyDecoder --- .../Beatmaps/CatchBeatmapProcessor.cs | 6 +-- .../Beatmaps/OsuBeatmapProcessor.cs | 6 +-- .../Formats/LegacyBeatmapDecoderTest.cs | 2 +- .../Beatmaps/Formats/OsuJsonDecoderTest.cs | 4 +- osu.Game/Beatmaps/Beatmap.cs | 7 +-- osu.Game/Beatmaps/Formats/IHasComboColours.cs | 10 ++++ .../Beatmaps/Formats/IHasCustomColours.cs | 10 ++++ .../Beatmaps/Formats/LegacyBeatmapDecoder.cs | 53 ++++--------------- osu.Game/Beatmaps/Formats/LegacyDecoder.cs | 49 ++++++++++++++++- .../Formats/LegacyStoryboardDecoder.cs | 6 ++- osu.Game/osu.Game.csproj | 2 + 11 files changed, 96 insertions(+), 59 deletions(-) create mode 100644 osu.Game/Beatmaps/Formats/IHasComboColours.cs create mode 100644 osu.Game/Beatmaps/Formats/IHasCustomColours.cs diff --git a/osu.Game.Rulesets.Catch/Beatmaps/CatchBeatmapProcessor.cs b/osu.Game.Rulesets.Catch/Beatmaps/CatchBeatmapProcessor.cs index d3012b1981..0cdc1694f4 100644 --- a/osu.Game.Rulesets.Catch/Beatmaps/CatchBeatmapProcessor.cs +++ b/osu.Game.Rulesets.Catch/Beatmaps/CatchBeatmapProcessor.cs @@ -16,7 +16,7 @@ namespace osu.Game.Rulesets.Catch.Beatmaps { public override void PostProcess(Beatmap beatmap) { - if (beatmap.ComboColors.Count == 0) + if (beatmap.ComboColours.Count == 0) return; int index = 0; @@ -31,11 +31,11 @@ namespace osu.Game.Rulesets.Catch.Beatmaps if (obj.NewCombo) { if (lastObj != null) lastObj.LastInCombo = true; - colourIndex = (colourIndex + 1) % beatmap.ComboColors.Count; + colourIndex = (colourIndex + 1) % beatmap.ComboColours.Count; } obj.IndexInBeatmap = index++; - obj.ComboColour = beatmap.ComboColors[colourIndex]; + obj.ComboColour = beatmap.ComboColours[colourIndex]; lastObj = obj; } diff --git a/osu.Game.Rulesets.Osu/Beatmaps/OsuBeatmapProcessor.cs b/osu.Game.Rulesets.Osu/Beatmaps/OsuBeatmapProcessor.cs index 3dad5b508c..bfcdec9321 100644 --- a/osu.Game.Rulesets.Osu/Beatmaps/OsuBeatmapProcessor.cs +++ b/osu.Game.Rulesets.Osu/Beatmaps/OsuBeatmapProcessor.cs @@ -14,7 +14,7 @@ namespace osu.Game.Rulesets.Osu.Beatmaps { applyStacking(beatmap); - if (beatmap.ComboColors.Count == 0) + if (beatmap.ComboColours.Count == 0) return; int comboIndex = 0; @@ -25,11 +25,11 @@ namespace osu.Game.Rulesets.Osu.Beatmaps if (obj.NewCombo) { comboIndex = 0; - colourIndex = (colourIndex + 1) % beatmap.ComboColors.Count; + colourIndex = (colourIndex + 1) % beatmap.ComboColours.Count; } obj.IndexInCurrentCombo = comboIndex++; - obj.ComboColour = beatmap.ComboColors[colourIndex]; + obj.ComboColour = beatmap.ComboColours[colourIndex]; } } diff --git a/osu.Game.Tests/Beatmaps/Formats/LegacyBeatmapDecoderTest.cs b/osu.Game.Tests/Beatmaps/Formats/LegacyBeatmapDecoderTest.cs index b74be134c1..2c46a124d8 100644 --- a/osu.Game.Tests/Beatmaps/Formats/LegacyBeatmapDecoderTest.cs +++ b/osu.Game.Tests/Beatmaps/Formats/LegacyBeatmapDecoderTest.cs @@ -167,7 +167,7 @@ namespace osu.Game.Tests.Beatmaps.Formats using (var resStream = Resource.OpenResource("Soleily - Renatus (Gamu) [Insane].osu")) using (var stream = new StreamReader(resStream)) { - var comboColors = decoder.Decode(stream).ComboColors; + var comboColors = decoder.Decode(stream).ComboColours; Color4[] expectedColors = { diff --git a/osu.Game.Tests/Beatmaps/Formats/OsuJsonDecoderTest.cs b/osu.Game.Tests/Beatmaps/Formats/OsuJsonDecoderTest.cs index 80dea9d01d..c36e825252 100644 --- a/osu.Game.Tests/Beatmaps/Formats/OsuJsonDecoderTest.cs +++ b/osu.Game.Tests/Beatmaps/Formats/OsuJsonDecoderTest.cs @@ -102,9 +102,9 @@ namespace osu.Game.Tests.Beatmaps.Formats new Color4(255, 187, 255, 255), new Color4(255, 177, 140, 255), }; - Assert.AreEqual(expected.Length, beatmap.ComboColors.Count); + Assert.AreEqual(expected.Length, beatmap.ComboColours.Count); for (int i = 0; i < expected.Length; i++) - Assert.AreEqual(expected[i], beatmap.ComboColors[i]); + Assert.AreEqual(expected[i], beatmap.ComboColours[i]); } [Test] diff --git a/osu.Game/Beatmaps/Beatmap.cs b/osu.Game/Beatmaps/Beatmap.cs index 9b00993b6e..93817b9b8f 100644 --- a/osu.Game/Beatmaps/Beatmap.cs +++ b/osu.Game/Beatmaps/Beatmap.cs @@ -9,6 +9,7 @@ using System.Linq; using osu.Game.Beatmaps.ControlPoints; using osu.Game.IO.Serialization; using Newtonsoft.Json; +using osu.Game.Beatmaps.Formats; using osu.Game.IO.Serialization.Converters; namespace osu.Game.Beatmaps @@ -16,14 +17,14 @@ namespace osu.Game.Beatmaps /// /// A Beatmap containing converted HitObjects. /// - public class Beatmap : IJsonSerializable + public class Beatmap : IJsonSerializable, IHasComboColours where T : HitObject { public BeatmapInfo BeatmapInfo = new BeatmapInfo(); public ControlPointInfo ControlPointInfo = new ControlPointInfo(); public List Breaks = new List(); - public List ComboColors = new List + public List ComboColours { get; set; } = new List { new Color4(17, 136, 170, 255), new Color4(102, 136, 0, 255), @@ -55,7 +56,7 @@ namespace osu.Game.Beatmaps BeatmapInfo = original?.BeatmapInfo.DeepClone() ?? BeatmapInfo; ControlPointInfo = original?.ControlPointInfo ?? ControlPointInfo; Breaks = original?.Breaks ?? Breaks; - ComboColors = original?.ComboColors ?? ComboColors; + ComboColours = original?.ComboColours ?? ComboColours; HitObjects = original?.HitObjects ?? HitObjects; if (original == null && Metadata == null) diff --git a/osu.Game/Beatmaps/Formats/IHasComboColours.cs b/osu.Game/Beatmaps/Formats/IHasComboColours.cs new file mode 100644 index 0000000000..da0ed1693d --- /dev/null +++ b/osu.Game/Beatmaps/Formats/IHasComboColours.cs @@ -0,0 +1,10 @@ +using System.Collections.Generic; +using OpenTK.Graphics; + +namespace osu.Game.Beatmaps.Formats +{ + public interface IHasComboColours + { + List ComboColours { get; set; } + } +} diff --git a/osu.Game/Beatmaps/Formats/IHasCustomColours.cs b/osu.Game/Beatmaps/Formats/IHasCustomColours.cs new file mode 100644 index 0000000000..7de5625fe5 --- /dev/null +++ b/osu.Game/Beatmaps/Formats/IHasCustomColours.cs @@ -0,0 +1,10 @@ +using System.Collections.Generic; +using OpenTK.Graphics; + +namespace osu.Game.Beatmaps.Formats +{ + public interface IHasCustomColours + { + Dictionary CustomColours { get; set; } + } +} diff --git a/osu.Game/Beatmaps/Formats/LegacyBeatmapDecoder.cs b/osu.Game/Beatmaps/Formats/LegacyBeatmapDecoder.cs index 915ea9b587..1bb67f9e75 100644 --- a/osu.Game/Beatmaps/Formats/LegacyBeatmapDecoder.cs +++ b/osu.Game/Beatmaps/Formats/LegacyBeatmapDecoder.cs @@ -5,7 +5,6 @@ using System; using System.Globalization; using System.IO; using System.Linq; -using OpenTK.Graphics; using osu.Game.Beatmaps.Timing; using osu.Game.Rulesets.Objects.Legacy; using osu.Game.Beatmaps.ControlPoints; @@ -19,7 +18,6 @@ namespace osu.Game.Beatmaps.Formats private Beatmap beatmap; - private bool hasCustomColours; private ConvertHitObjectParser parser; private LegacySampleBank defaultSampleBank; @@ -72,29 +70,28 @@ namespace osu.Game.Beatmaps.Formats { case Section.General: handleGeneral(line); - break; + return; case Section.Editor: handleEditor(line); - break; + return; case Section.Metadata: handleMetadata(line); - break; + return; case Section.Difficulty: handleDifficulty(line); - break; + return; case Section.Events: handleEvents(line); - break; + return; case Section.TimingPoints: handleTimingPoints(line); - break; - case Section.Colours: - handleColours(line); - break; + return; case Section.HitObjects: handleHitObjects(line); - break; + return; } + + base.ParseLine(beatmap, section, line); } private void handleGeneral(string line) @@ -364,38 +361,6 @@ namespace osu.Game.Beatmaps.Formats } } - private void handleColours(string line) - { - var pair = SplitKeyVal(line, ':'); - - string[] split = pair.Value.Split(','); - - if (split.Length != 3) - throw new InvalidOperationException($@"Color specified in incorrect format (should be R,G,B): {pair.Value}"); - - byte r, g, b; - if (!byte.TryParse(split[0], out r) || !byte.TryParse(split[1], out g) || !byte.TryParse(split[2], out b)) - throw new InvalidOperationException(@"Color must be specified with 8-bit integer components"); - - if (!hasCustomColours) - { - beatmap.ComboColors.Clear(); - hasCustomColours = true; - } - - // Note: the combo index specified in the beatmap is discarded - if (pair.Key.StartsWith(@"Combo")) - { - beatmap.ComboColors.Add(new Color4 - { - R = r / 255f, - G = g / 255f, - B = b / 255f, - A = 1f, - }); - } - } - private void handleHitObjects(string line) { // If the ruleset wasn't specified, assume the osu!standard ruleset. diff --git a/osu.Game/Beatmaps/Formats/LegacyDecoder.cs b/osu.Game/Beatmaps/Formats/LegacyDecoder.cs index cfa0c28de0..b6634d0722 100644 --- a/osu.Game/Beatmaps/Formats/LegacyDecoder.cs +++ b/osu.Game/Beatmaps/Formats/LegacyDecoder.cs @@ -4,6 +4,7 @@ using System; using System.Collections.Generic; using System.IO; +using OpenTK.Graphics; namespace osu.Game.Beatmaps.Formats { @@ -40,7 +41,53 @@ namespace osu.Game.Beatmaps.Formats protected virtual bool ShouldSkipLine(string line) => string.IsNullOrWhiteSpace(line) || line.StartsWith("//"); - protected abstract void ParseLine(T output, Section section, string line); + protected virtual void ParseLine(T output, Section section, string line) + { + switch (section) + { + case Section.Colours: + handleColours(output, line); + return; + } + } + + private bool hasCustomColours; + + private void handleColours(T output, string line) + { + var pair = SplitKeyVal(line, ':'); + + bool isCombo = pair.Key.StartsWith(@"Combo"); + + string[] split = pair.Value.Split(','); + + if (split.Length != 3) + throw new InvalidOperationException($@"Color specified in incorrect format (should be R,G,B): {pair.Value}"); + + if (!byte.TryParse(split[0], out var r) || !byte.TryParse(split[1], out var g) || !byte.TryParse(split[2], out var b)) + throw new InvalidOperationException(@"Color must be specified with 8-bit integer components"); + + Color4 colour = new Color4(r, g, b, 255); + + if (isCombo) + { + if (!(output is IHasComboColours tHasComboColours)) return; + + if (!hasCustomColours) + { + // remove default colours. + tHasComboColours.ComboColours.Clear(); + hasCustomColours = true; + } + + tHasComboColours.ComboColours.Add(colour); + } + else + { + if (!(output is IHasCustomColours tHasCustomColours)) return; + tHasCustomColours.CustomColours[pair.Key] = colour; + } + } protected KeyValuePair SplitKeyVal(string line, char separator) { diff --git a/osu.Game/Beatmaps/Formats/LegacyStoryboardDecoder.cs b/osu.Game/Beatmaps/Formats/LegacyStoryboardDecoder.cs index e35276ae1a..85b0f8d42e 100644 --- a/osu.Game/Beatmaps/Formats/LegacyStoryboardDecoder.cs +++ b/osu.Game/Beatmaps/Formats/LegacyStoryboardDecoder.cs @@ -46,11 +46,13 @@ namespace osu.Game.Beatmaps.Formats { case Section.Events: handleEvents(line); - break; + return; case Section.Variables: handleVariables(line); - break; + return; } + + base.ParseLine(storyboard, section, line); } private void handleEvents(string line) diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index 1d3baa6c0d..4672cf7672 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -267,6 +267,8 @@ + + From 16eab2eebf1b11d3ac413339d20b85f37d4f391c Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 13 Mar 2018 19:14:01 +0900 Subject: [PATCH 403/544] Fix combo colours not working until now --- osu.Game/Beatmaps/BeatmapConverter.cs | 5 +++++ osu.Game/Beatmaps/Formats/IHasComboColours.cs | 3 +++ osu.Game/Beatmaps/Formats/IHasCustomColours.cs | 3 +++ 3 files changed, 11 insertions(+) diff --git a/osu.Game/Beatmaps/BeatmapConverter.cs b/osu.Game/Beatmaps/BeatmapConverter.cs index 711e220b88..c35c5df89b 100644 --- a/osu.Game/Beatmaps/BeatmapConverter.cs +++ b/osu.Game/Beatmaps/BeatmapConverter.cs @@ -50,9 +50,14 @@ namespace osu.Game.Beatmaps protected virtual Beatmap ConvertBeatmap(Beatmap original) { var beatmap = CreateBeatmap(); + + // todo: this *must* share logic (or directly use) Beatmap's constructor. + // right now this isn't easily possible due to generic entanglement. beatmap.BeatmapInfo = original.BeatmapInfo; beatmap.ControlPointInfo = original.ControlPointInfo; beatmap.HitObjects = original.HitObjects.SelectMany(h => convert(h, original)).ToList(); + beatmap.Breaks = original.Breaks; + beatmap.ComboColours = original.ComboColours; return beatmap; } diff --git a/osu.Game/Beatmaps/Formats/IHasComboColours.cs b/osu.Game/Beatmaps/Formats/IHasComboColours.cs index da0ed1693d..93c6c18eec 100644 --- a/osu.Game/Beatmaps/Formats/IHasComboColours.cs +++ b/osu.Game/Beatmaps/Formats/IHasComboColours.cs @@ -1,3 +1,6 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + using System.Collections.Generic; using OpenTK.Graphics; diff --git a/osu.Game/Beatmaps/Formats/IHasCustomColours.cs b/osu.Game/Beatmaps/Formats/IHasCustomColours.cs index 7de5625fe5..14614a6728 100644 --- a/osu.Game/Beatmaps/Formats/IHasCustomColours.cs +++ b/osu.Game/Beatmaps/Formats/IHasCustomColours.cs @@ -1,3 +1,6 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + using System.Collections.Generic; using OpenTK.Graphics; From 0e69ab161549dd32e0e2144bf49b11da21a4a165 Mon Sep 17 00:00:00 2001 From: TocoToucan Date: Wed, 14 Mar 2018 00:17:12 +0300 Subject: [PATCH 404/544] Introduce ScreenshotManager class --- osu.Game/Graphics/ScreenshotManager.cs | 50 ++++++++++++++++++++++++++ osu.Game/OsuGame.cs | 47 ++++-------------------- osu.Game/osu.Game.csproj | 1 + 3 files changed, 57 insertions(+), 41 deletions(-) create mode 100644 osu.Game/Graphics/ScreenshotManager.cs diff --git a/osu.Game/Graphics/ScreenshotManager.cs b/osu.Game/Graphics/ScreenshotManager.cs new file mode 100644 index 0000000000..7304d653cd --- /dev/null +++ b/osu.Game/Graphics/ScreenshotManager.cs @@ -0,0 +1,50 @@ +using System; +using System.Drawing.Imaging; +using System.IO; +using osu.Framework.Allocation; +using osu.Framework.Configuration; +using osu.Framework.Graphics; +using osu.Framework.Platform; +using osu.Game.Configuration; + +namespace osu.Game.Graphics +{ + public class ScreenshotManager : Drawable + { + private Bindable screenshotFormat; + private GameHost host; + private Storage storage; + + [BackgroundDependencyLoader] + private void load(GameHost host, OsuConfigManager config, Storage storage) + { + this.host = host; + this.storage = storage.GetStorageForDirectory(@"screenshots"); + + screenshotFormat = config.GetBindable(OsuSetting.ScreenshotFormat); + } + + public void TakeScreenshot() + { + host.TakeScreenshot(screenshotBitmap => + { + var stream = storage.GetStream($"{DateTime.Now:yyyyMMddTHHmmss}.{screenshotFormat.ToString().ToLower()}", FileAccess.Write); + + switch (screenshotFormat.Value) + { + case ScreenshotFormat.Bmp: + screenshotBitmap.Save(stream, ImageFormat.Bmp); + break; + case ScreenshotFormat.Png: + screenshotBitmap.Save(stream, ImageFormat.Png); + break; + case ScreenshotFormat.Jpg: + screenshotBitmap.Save(stream, ImageFormat.Jpeg); + break; + default: + throw new ArgumentOutOfRangeException(nameof(screenshotFormat)); + } + }); + } + } +} diff --git a/osu.Game/OsuGame.cs b/osu.Game/OsuGame.cs index 1078548bef..18ea093e97 100644 --- a/osu.Game/OsuGame.cs +++ b/osu.Game/OsuGame.cs @@ -3,8 +3,6 @@ using System; using System.Collections.Generic; -using System.Drawing.Imaging; -using System.IO; using osu.Framework.Configuration; using osu.Framework.Screens; using osu.Game.Configuration; @@ -83,9 +81,9 @@ namespace osu.Game private Bindable configRuleset; public Bindable Ruleset = new Bindable(); - private Bindable configSkin; + private ScreenshotManager screenshotManager; - private Bindable screenshotFormat; + private Bindable configSkin; private readonly string[] args; @@ -137,9 +135,6 @@ namespace osu.Game // bind config int to database SkinInfo configSkin = LocalConfig.GetBindable(OsuSetting.Skin); - - screenshotFormat = LocalConfig.GetBindable(OsuSetting.ScreenshotFormat); - SkinManager.CurrentSkinInfo.ValueChanged += s => configSkin.Value = s.ID; configSkin.ValueChanged += id => SkinManager.CurrentSkinInfo.Value = SkinManager.Query(s => s.ID == id) ?? SkinInfo.Default; configSkin.TriggerChange(); @@ -216,6 +211,9 @@ namespace osu.Game BeatmapManager.GetStableStorage = GetStorageForStableInstall; + screenshotManager = new ScreenshotManager(); + Add(screenshotManager); + AddRange(new Drawable[] { new VolumeControlReceptor @@ -439,46 +437,13 @@ namespace osu.Game direct.ToggleVisibility(); return true; case GlobalAction.TakeScreenshot: - if (Window.ScreenshotTakenAction == null) - Window.ScreenshotTakenAction = (screenshotBitmap) => - { - var fileName = getScreenshotFileName(screenshotFormat); - - switch (screenshotFormat.Value) - { - case ScreenshotFormat.Bmp: - screenshotBitmap.Save(fileName, ImageFormat.Bmp); - break; - case ScreenshotFormat.Png: - screenshotBitmap.Save(fileName, ImageFormat.Png); - break; - case ScreenshotFormat.Jpg: - screenshotBitmap.Save(fileName, ImageFormat.Jpeg); - break; - default: - throw new ArgumentOutOfRangeException(nameof(screenshotFormat)); - } - }; - - RequestScreenshot(); + screenshotManager.TakeScreenshot(); return true; } return false; } - private string getScreenshotFileName(ScreenshotFormat screenshotFormat) - { - // TODO Change screenshots location - var baseDirectory = new DirectoryInfo(AppDomain.CurrentDomain.BaseDirectory); - var screenshotsDirectory = baseDirectory.CreateSubdirectory("Screenshots"); - - var screenshotExtension = screenshotFormat.ToString().ToLower(); - var screenshots = screenshotsDirectory.GetFiles($"*.{screenshotExtension}"); - - return Path.Combine(screenshotsDirectory.FullName, $"screenshot{screenshots.Length + 1}.{screenshotExtension}"); - } - private readonly BindableDouble inactiveVolumeAdjust = new BindableDouble(); protected override void OnDeactivated() diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index fdda575a6c..7576dd6f0c 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -288,6 +288,7 @@ + From 1d7be2ad0b224f96dde1feb96b0dd112e722fc2b Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 14 Mar 2018 10:14:42 +0900 Subject: [PATCH 405/544] Fix incorrect variable name --- osu.Game/Beatmaps/Formats/LegacyDecoder.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/osu.Game/Beatmaps/Formats/LegacyDecoder.cs b/osu.Game/Beatmaps/Formats/LegacyDecoder.cs index b6634d0722..e4aa9f5091 100644 --- a/osu.Game/Beatmaps/Formats/LegacyDecoder.cs +++ b/osu.Game/Beatmaps/Formats/LegacyDecoder.cs @@ -51,7 +51,7 @@ namespace osu.Game.Beatmaps.Formats } } - private bool hasCustomColours; + private bool hasComboColours; private void handleColours(T output, string line) { @@ -73,11 +73,11 @@ namespace osu.Game.Beatmaps.Formats { if (!(output is IHasComboColours tHasComboColours)) return; - if (!hasCustomColours) + if (!hasComboColours) { // remove default colours. tHasComboColours.ComboColours.Clear(); - hasCustomColours = true; + hasComboColours = true; } tHasComboColours.ComboColours.Add(colour); From afc36464503dd10e5dab9a09e1872416ce01b312 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 14 Mar 2018 09:48:03 +0900 Subject: [PATCH 406/544] Move API configuration hooks out of OsuGameBase Also makes username more private, and password completely private. --- osu.Game/Online/API/APIAccess.cs | 35 ++++++++++++------- osu.Game/OsuGameBase.cs | 20 ++--------- .../Sections/General/LoginSettings.cs | 2 +- 3 files changed, 26 insertions(+), 31 deletions(-) diff --git a/osu.Game/Online/API/APIAccess.cs b/osu.Game/Online/API/APIAccess.cs index bab53cb462..40584006cd 100644 --- a/osu.Game/Online/API/APIAccess.cs +++ b/osu.Game/Online/API/APIAccess.cs @@ -10,6 +10,7 @@ using System.Threading; using osu.Framework.Configuration; using osu.Framework.Logging; using osu.Framework.Threading; +using osu.Game.Configuration; using osu.Game.Online.API.Requests; using osu.Game.Users; @@ -17,6 +18,7 @@ namespace osu.Game.Online.API { public class APIAccess : IAPIProvider { + private readonly OsuConfigManager config; private readonly OAuth authentication; public string Endpoint = @"https://osu.ppy.sh"; @@ -27,11 +29,12 @@ namespace osu.Game.Online.API public Scheduler Scheduler = new Scheduler(); - public string Username; + /// + /// The username/email provided by the user when initiating a login. + /// + public string ProvidedUsername { get; private set; } - //private SecurePassword password; - - public string Password; + private string password; public Bindable LocalUser { get; } = new Bindable(createGuestUser()); @@ -41,18 +44,23 @@ namespace osu.Game.Online.API set { authentication.Token = string.IsNullOrEmpty(value) ? null : OAuthToken.Parse(value); } } - protected bool HasLogin => Token != null || !string.IsNullOrEmpty(Username) && !string.IsNullOrEmpty(Password); + protected bool HasLogin => Token != null || !string.IsNullOrEmpty(ProvidedUsername) && !string.IsNullOrEmpty(password); // ReSharper disable once PrivateFieldCanBeConvertedToLocalVariable (should dispose of this or at very least keep a reference). private readonly Thread thread; private readonly Logger log; - public APIAccess() + public APIAccess(OsuConfigManager config) { + this.config = config; + authentication = new OAuth(client_id, client_secret, Endpoint); log = Logger.GetLogger(LoggingTarget.Network); + ProvidedUsername = config.Get(OsuSetting.Username); + Token = config.Get(OsuSetting.Token); + thread = new Thread(run) { IsBackground = true }; thread.Start(); } @@ -111,12 +119,15 @@ namespace osu.Game.Online.API State = APIState.Connecting; - if (!authentication.HasValidAccessToken && !authentication.AuthenticateWithLogin(Username, Password)) + // save the username at this point, if the user requested for it to be. + config.Set(OsuSetting.Username, config.Get(OsuSetting.SaveUsername) ? ProvidedUsername : string.Empty); + + if (!authentication.HasValidAccessToken && !authentication.AuthenticateWithLogin(ProvidedUsername, password)) { //todo: this fails even on network-related issues. we should probably handle those differently. //NotificationOverlay.ShowMessage("Login failed!"); log.Add(@"Login failed!"); - Password = null; + password = null; authentication.Clear(); continue; } @@ -173,8 +184,8 @@ namespace osu.Game.Online.API { Debug.Assert(State == APIState.Offline); - Username = username; - Password = password; + ProvidedUsername = username; + this.password = password; } /// @@ -283,8 +294,8 @@ namespace osu.Game.Online.API public void Logout(bool clearUsername = true) { flushQueue(); - if (clearUsername) Username = null; - Password = null; + if (clearUsername) ProvidedUsername = null; + password = null; authentication.Clear(); LocalUser.Value = createGuestUser(); } diff --git a/osu.Game/OsuGameBase.cs b/osu.Game/OsuGameBase.cs index f3c46269d5..2096318a32 100644 --- a/osu.Game/OsuGameBase.cs +++ b/osu.Game/OsuGameBase.cs @@ -34,7 +34,7 @@ using osu.Game.Skinning; namespace osu.Game { - public class OsuGameBase : Framework.Game, IOnlineComponent, ICanAcceptFiles + public class OsuGameBase : Framework.Game, ICanAcceptFiles { protected OsuConfigManager LocalConfig; @@ -108,11 +108,7 @@ namespace osu.Game dependencies.Cache(SkinManager = new SkinManager(Host.Storage, contextFactory, Host, Audio)); - dependencies.Cache(API = new APIAccess - { - Username = LocalConfig.Get(OsuSetting.Username), - Token = LocalConfig.Get(OsuSetting.Token) - }); + dependencies.Cache(API = new APIAccess(LocalConfig)); dependencies.CacheAs(API); dependencies.Cache(RulesetStore = new RulesetStore(contextFactory)); @@ -183,8 +179,6 @@ namespace osu.Game lastBeatmap = b; }; - API.Register(this); - FileStore.Cleanup(); } @@ -211,16 +205,6 @@ namespace osu.Game private WorkingBeatmap lastBeatmap; - public void APIStateChanged(APIAccess api, APIState state) - { - switch (state) - { - case APIState.Online: - LocalConfig.Set(OsuSetting.Username, LocalConfig.Get(OsuSetting.SaveUsername) ? API.Username : string.Empty); - break; - } - } - protected override void LoadComplete() { base.LoadComplete(); diff --git a/osu.Game/Overlays/Settings/Sections/General/LoginSettings.cs b/osu.Game/Overlays/Settings/Sections/General/LoginSettings.cs index a5d068adbd..4a4fc7363e 100644 --- a/osu.Game/Overlays/Settings/Sections/General/LoginSettings.cs +++ b/osu.Game/Overlays/Settings/Sections/General/LoginSettings.cs @@ -210,7 +210,7 @@ namespace osu.Game.Overlays.Settings.Sections.General { PlaceholderText = "Email address", RelativeSizeAxes = Axes.X, - Text = api?.Username ?? string.Empty, + Text = api?.ProvidedUsername ?? string.Empty, TabbableContentContainer = this }, password = new OsuPasswordTextBox From 83cd2fd31763a773bdf78c2e2f6119b09df5c1f3 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 14 Mar 2018 10:07:16 +0900 Subject: [PATCH 407/544] Move token saving logic to APIAccess --- osu.Game/Online/API/APIAccess.cs | 21 +++++++++++++++++++-- osu.Game/OsuGameBase.cs | 8 +------- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/osu.Game/Online/API/APIAccess.cs b/osu.Game/Online/API/APIAccess.cs index 40584006cd..91b77dcf1f 100644 --- a/osu.Game/Online/API/APIAccess.cs +++ b/osu.Game/Online/API/APIAccess.cs @@ -16,7 +16,7 @@ using osu.Game.Users; namespace osu.Game.Online.API { - public class APIAccess : IAPIProvider + public class APIAccess : IAPIProvider, IDisposable { private readonly OsuConfigManager config; private readonly OAuth authentication; @@ -27,7 +27,7 @@ namespace osu.Game.Online.API private ConcurrentQueue queue = new ConcurrentQueue(); - public Scheduler Scheduler = new Scheduler(); + public readonly Scheduler Scheduler = new Scheduler(); /// /// The username/email provided by the user when initiating a login. @@ -310,6 +310,23 @@ namespace osu.Game.Online.API { Scheduler.Update(); } + + private void dispose() + { + config.Set(OsuSetting.Token, config.Get(OsuSetting.SavePassword) ? Token : string.Empty); + config.Save(); + } + + public void Dispose() + { + dispose(); + GC.SuppressFinalize(this); + } + + ~APIAccess() + { + dispose(); + } } public enum APIState diff --git a/osu.Game/OsuGameBase.cs b/osu.Game/OsuGameBase.cs index 2096318a32..a3e4d34659 100644 --- a/osu.Game/OsuGameBase.cs +++ b/osu.Game/OsuGameBase.cs @@ -245,14 +245,8 @@ namespace osu.Game protected override void Dispose(bool isDisposing) { - //refresh token may have changed. - if (LocalConfig != null && API != null) - { - LocalConfig.Set(OsuSetting.Token, LocalConfig.Get(OsuSetting.SavePassword) ? API.Token : string.Empty); - LocalConfig.Save(); - } - base.Dispose(isDisposing); + API.Dispose(); } private readonly List fileImporters = new List(); From 9e09d434dd8088ec1f8f40f98a6de1c46d5d6c0d Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Wed, 14 Mar 2018 11:27:14 +0900 Subject: [PATCH 408/544] Fix argument null exception in ManiaBeatmapConverter --- .../Beatmaps/ManiaBeatmapConverter.cs | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/osu.Game.Rulesets.Mania/Beatmaps/ManiaBeatmapConverter.cs b/osu.Game.Rulesets.Mania/Beatmaps/ManiaBeatmapConverter.cs index 2dd3468df0..4734e40803 100644 --- a/osu.Game.Rulesets.Mania/Beatmaps/ManiaBeatmapConverter.cs +++ b/osu.Game.Rulesets.Mania/Beatmaps/ManiaBeatmapConverter.cs @@ -77,7 +77,7 @@ namespace osu.Game.Rulesets.Mania.Beatmaps yield break; } - var objects = IsForCurrentRuleset ? generateSpecific(original) : generateConverted(original, beatmap); + var objects = IsForCurrentRuleset ? generateSpecific(original, beatmap) : generateConverted(original, beatmap); if (objects == null) yield break; @@ -110,10 +110,11 @@ namespace osu.Game.Rulesets.Mania.Beatmaps /// Method that generates hit objects for osu!mania specific beatmaps. /// /// The original hit object. + /// The original beatmap. This is used to look-up any values dependent on a fully-loaded beatmap. /// The hit objects generated. - private IEnumerable generateSpecific(HitObject original) + private IEnumerable generateSpecific(HitObject original, Beatmap originalBeatmap) { - var generator = new SpecificBeatmapPatternGenerator(random, original, beatmap, lastPattern); + var generator = new SpecificBeatmapPatternGenerator(random, original, beatmap, lastPattern, originalBeatmap); Pattern newPattern = generator.Generate(); lastPattern = newPattern; @@ -125,7 +126,7 @@ namespace osu.Game.Rulesets.Mania.Beatmaps /// Method that generates hit objects for non-osu!mania beatmaps. /// /// The original hit object. - /// The original beatmap. This is used + /// The original beatmap. This is used to look-up any values dependent on a fully-loaded beatmap. /// The hit objects generated. private IEnumerable generateConverted(HitObject original, Beatmap originalBeatmap) { @@ -164,8 +165,8 @@ namespace osu.Game.Rulesets.Mania.Beatmaps /// private class SpecificBeatmapPatternGenerator : Patterns.Legacy.PatternGenerator { - public SpecificBeatmapPatternGenerator(FastRandom random, HitObject hitObject, ManiaBeatmap beatmap, Pattern previousPattern) - : base(random, hitObject, beatmap, previousPattern, null) + public SpecificBeatmapPatternGenerator(FastRandom random, HitObject hitObject, ManiaBeatmap beatmap, Pattern previousPattern, Beatmap originalBeatmap) + : base(random, hitObject, beatmap, previousPattern, originalBeatmap) { } From 07642546bbc47357a8adc6d3416824f2eaf88f39 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 14 Mar 2018 10:42:58 +0900 Subject: [PATCH 409/544] Make APIAccess a component --- osu.Game/Online/API/APIAccess.cs | 24 ++++------------------- osu.Game/Online/API/APIDownloadRequest.cs | 2 +- osu.Game/Online/API/IAPIProvider.cs | 3 +-- osu.Game/OsuGameBase.cs | 24 +++++++---------------- osu.Game/Overlays/Direct/DirectPanel.cs | 2 +- 5 files changed, 14 insertions(+), 41 deletions(-) diff --git a/osu.Game/Online/API/APIAccess.cs b/osu.Game/Online/API/APIAccess.cs index 91b77dcf1f..22498d229d 100644 --- a/osu.Game/Online/API/APIAccess.cs +++ b/osu.Game/Online/API/APIAccess.cs @@ -8,15 +8,15 @@ using System.Diagnostics; using System.Net; using System.Threading; using osu.Framework.Configuration; +using osu.Framework.Graphics; using osu.Framework.Logging; -using osu.Framework.Threading; using osu.Game.Configuration; using osu.Game.Online.API.Requests; using osu.Game.Users; namespace osu.Game.Online.API { - public class APIAccess : IAPIProvider, IDisposable + public class APIAccess : Component, IAPIProvider { private readonly OsuConfigManager config; private readonly OAuth authentication; @@ -27,8 +27,6 @@ namespace osu.Game.Online.API private ConcurrentQueue queue = new ConcurrentQueue(); - public readonly Scheduler Scheduler = new Scheduler(); - /// /// The username/email provided by the user when initiating a login. /// @@ -306,27 +304,13 @@ namespace osu.Game.Online.API Id = 1, }; - public void Update() + protected override void Dispose(bool isDisposing) { - Scheduler.Update(); - } + base.Dispose(isDisposing); - private void dispose() - { config.Set(OsuSetting.Token, config.Get(OsuSetting.SavePassword) ? Token : string.Empty); config.Save(); } - - public void Dispose() - { - dispose(); - GC.SuppressFinalize(this); - } - - ~APIAccess() - { - dispose(); - } } public enum APIState diff --git a/osu.Game/Online/API/APIDownloadRequest.cs b/osu.Game/Online/API/APIDownloadRequest.cs index 2dff07a847..2c6a4e02ba 100644 --- a/osu.Game/Online/API/APIDownloadRequest.cs +++ b/osu.Game/Online/API/APIDownloadRequest.cs @@ -14,7 +14,7 @@ namespace osu.Game.Online.API return request; } - private void request_Progress(long current, long total) => API.Scheduler.Add(delegate { Progress?.Invoke(current, total); }); + private void request_Progress(long current, long total) => Progress?.Invoke(current, total); protected APIDownloadRequest() { diff --git a/osu.Game/Online/API/IAPIProvider.cs b/osu.Game/Online/API/IAPIProvider.cs index b3c8774209..4119691c85 100644 --- a/osu.Game/Online/API/IAPIProvider.cs +++ b/osu.Game/Online/API/IAPIProvider.cs @@ -1,13 +1,12 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE -using osu.Framework; using osu.Framework.Configuration; using osu.Game.Users; namespace osu.Game.Online.API { - public interface IAPIProvider : IUpdateable + public interface IAPIProvider { /// /// The local user. diff --git a/osu.Game/OsuGameBase.cs b/osu.Game/OsuGameBase.cs index a3e4d34659..45fd45b4b5 100644 --- a/osu.Game/OsuGameBase.cs +++ b/osu.Game/OsuGameBase.cs @@ -56,8 +56,6 @@ namespace osu.Game protected override string MainResourceFile => @"osu.Game.Resources.dll"; - public APIAccess API; - private Container content; protected override Container Content => content; @@ -108,12 +106,14 @@ namespace osu.Game dependencies.Cache(SkinManager = new SkinManager(Host.Storage, contextFactory, Host, Audio)); - dependencies.Cache(API = new APIAccess(LocalConfig)); - dependencies.CacheAs(API); + var api = new APIAccess(LocalConfig); + + dependencies.Cache(api); + dependencies.CacheAs(api); dependencies.Cache(RulesetStore = new RulesetStore(contextFactory)); dependencies.Cache(FileStore = new FileStore(contextFactory, Host.Storage)); - dependencies.Cache(BeatmapManager = new BeatmapManager(Host.Storage, contextFactory, RulesetStore, API, Host)); + dependencies.Cache(BeatmapManager = new BeatmapManager(Host.Storage, contextFactory, RulesetStore, api, Host)); dependencies.Cache(ScoreStore = new ScoreStore(Host.Storage, contextFactory, Host, BeatmapManager, RulesetStore)); dependencies.Cache(KeyBindingStore = new KeyBindingStore(contextFactory, RulesetStore)); dependencies.Cache(SettingsStore = new SettingsStore(contextFactory)); @@ -180,6 +180,8 @@ namespace osu.Game }; FileStore.Cleanup(); + + AddInternal(api); } private void runMigrations() @@ -237,18 +239,6 @@ namespace osu.Game base.SetHost(host); } - protected override void Update() - { - base.Update(); - API.Update(); - } - - protected override void Dispose(bool isDisposing) - { - base.Dispose(isDisposing); - API.Dispose(); - } - private readonly List fileImporters = new List(); public void Import(params string[] paths) diff --git a/osu.Game/Overlays/Direct/DirectPanel.cs b/osu.Game/Overlays/Direct/DirectPanel.cs index e0d806c90f..cba63b4a49 100644 --- a/osu.Game/Overlays/Direct/DirectPanel.cs +++ b/osu.Game/Overlays/Direct/DirectPanel.cs @@ -186,7 +186,7 @@ namespace osu.Game.Overlays.Direct progressBar.FadeOut(500); }; - request.DownloadProgressed += progress => progressBar.Current.Value = progress; + request.DownloadProgressed += progress => Schedule(() => progressBar.Current.Value = progress); request.Success += data => { From ce2997419a8dc4e054755ad825ae6120a24543ab Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 14 Mar 2018 11:37:50 +0900 Subject: [PATCH 410/544] Expose API scheduling internally --- osu.Game/Online/API/APIAccess.cs | 2 ++ osu.Game/Online/API/APIDownloadRequest.cs | 2 +- osu.Game/Online/API/APIRequest.cs | 4 ++-- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/osu.Game/Online/API/APIAccess.cs b/osu.Game/Online/API/APIAccess.cs index 22498d229d..2cb8424bcc 100644 --- a/osu.Game/Online/API/APIAccess.cs +++ b/osu.Game/Online/API/APIAccess.cs @@ -65,6 +65,8 @@ namespace osu.Game.Online.API private readonly List components = new List(); + internal void Schedule(Action action) => base.Schedule(action); + public void Register(IOnlineComponent component) { Scheduler.Add(delegate diff --git a/osu.Game/Online/API/APIDownloadRequest.cs b/osu.Game/Online/API/APIDownloadRequest.cs index 2c6a4e02ba..0a5210723d 100644 --- a/osu.Game/Online/API/APIDownloadRequest.cs +++ b/osu.Game/Online/API/APIDownloadRequest.cs @@ -14,7 +14,7 @@ namespace osu.Game.Online.API return request; } - private void request_Progress(long current, long total) => Progress?.Invoke(current, total); + private void request_Progress(long current, long total) => API.Schedule(() => Progress?.Invoke(current, total)); protected APIDownloadRequest() { diff --git a/osu.Game/Online/API/APIRequest.cs b/osu.Game/Online/API/APIRequest.cs index 35af8eefd7..4b05df661b 100644 --- a/osu.Game/Online/API/APIRequest.cs +++ b/osu.Game/Online/API/APIRequest.cs @@ -85,7 +85,7 @@ namespace osu.Game.Online.API if (checkAndProcessFailure()) return; - api.Scheduler.Add(delegate { Success?.Invoke(); }); + api.Schedule(delegate { Success?.Invoke(); }); } public void Cancel() => Fail(new OperationCanceledException(@"Request cancelled")); @@ -108,7 +108,7 @@ namespace osu.Game.Online.API { if (API == null || pendingFailure == null) return cancelled; - API.Scheduler.Add(pendingFailure); + API.Schedule(pendingFailure); pendingFailure = null; return true; } From ef8d59591445d0f18cddb4003ab7aa5ce859cf47 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 14 Mar 2018 11:44:19 +0900 Subject: [PATCH 411/544] Apply formatting changes --- osu.Game/Screens/Play/PlayerLoader.cs | 32 ++++++++++++++------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/osu.Game/Screens/Play/PlayerLoader.cs b/osu.Game/Screens/Play/PlayerLoader.cs index 3f25ef8a5e..cdb6f36a6f 100644 --- a/osu.Game/Screens/Play/PlayerLoader.cs +++ b/osu.Game/Screens/Play/PlayerLoader.cs @@ -112,6 +112,7 @@ namespace osu.Game.Screens.Play } private bool weHandledMouseDown; + protected override bool OnMouseDown(InputState state, MouseDownEventArgs args) { weHandledMouseDown = true; @@ -139,24 +140,25 @@ namespace osu.Game.Screens.Play return; } - if (pushDebounce == null) pushDebounce = Scheduler.AddDelayed(() => - { - contentOut(); - - this.Delay(250).Schedule(() => + if (pushDebounce == null) + pushDebounce = Scheduler.AddDelayed(() => { - if (!IsCurrentScreen) return; + contentOut(); - if (!Push(player)) - Exit(); - else + this.Delay(250).Schedule(() => { - //By default, we want to load the player and never be returned to. - //Note that this may change if the player we load requested a re-run. - ValidForResume = false; - } - }); - }, 500); + if (!IsCurrentScreen) return; + + if (!Push(player)) + Exit(); + else + { + //By default, we want to load the player and never be returned to. + //Note that this may change if the player we load requested a re-run. + ValidForResume = false; + } + }); + }, 500); } protected override bool OnExiting(Screen next) From d122aa80e47dbc42cab0e66d0f7faade3bfa6383 Mon Sep 17 00:00:00 2001 From: Joseph Madamba <35318437+Joehuu@users.noreply.github.com> Date: Tue, 13 Mar 2018 20:07:03 -0700 Subject: [PATCH 412/544] Edit mods description, multiplier, and code --- osu.Game.Rulesets.Catch/Mods/CatchModDaycore.cs | 2 +- osu.Game.Rulesets.Catch/Mods/CatchModEasy.cs | 1 + osu.Game.Rulesets.Catch/Mods/CatchModHalfTime.cs | 2 +- osu.Game.Rulesets.Catch/Mods/CatchModHardRock.cs | 1 - osu.Game.Rulesets.Catch/Mods/CatchModHidden.cs | 2 +- osu.Game.Rulesets.Mania/Mods/ManiaModDaycore.cs | 2 +- osu.Game.Rulesets.Mania/Mods/ManiaModDoubleTime.cs | 2 +- osu.Game.Rulesets.Mania/Mods/ManiaModDualStages.cs | 3 +-- osu.Game.Rulesets.Mania/Mods/ManiaModEasy.cs | 1 + osu.Game.Rulesets.Mania/Mods/ManiaModFadeIn.cs | 3 ++- osu.Game.Rulesets.Mania/Mods/ManiaModFlashlight.cs | 2 +- osu.Game.Rulesets.Mania/Mods/ManiaModHalfTime.cs | 2 +- osu.Game.Rulesets.Mania/Mods/ManiaModHardRock.cs | 2 +- osu.Game.Rulesets.Mania/Mods/ManiaModHidden.cs | 4 ++-- osu.Game.Rulesets.Mania/Mods/ManiaModKey1.cs | 7 ++++++- osu.Game.Rulesets.Mania/Mods/ManiaModKey2.cs | 7 ++++++- osu.Game.Rulesets.Mania/Mods/ManiaModKey3.cs | 7 ++++++- osu.Game.Rulesets.Mania/Mods/ManiaModKey4.cs | 7 ++++++- osu.Game.Rulesets.Mania/Mods/ManiaModKey5.cs | 7 ++++++- osu.Game.Rulesets.Mania/Mods/ManiaModKey6.cs | 7 ++++++- osu.Game.Rulesets.Mania/Mods/ManiaModKey7.cs | 7 ++++++- osu.Game.Rulesets.Mania/Mods/ManiaModKey8.cs | 7 ++++++- osu.Game.Rulesets.Mania/Mods/ManiaModKey9.cs | 7 ++++++- osu.Game.Rulesets.Mania/Mods/ManiaModMirror.cs | 2 ++ osu.Game.Rulesets.Mania/Mods/ManiaModNightcore.cs | 2 +- osu.Game.Rulesets.Mania/Mods/ManiaModRandom.cs | 4 ++-- osu.Game.Rulesets.Osu/Mods/OsuModDaycore.cs | 2 +- osu.Game.Rulesets.Osu/Mods/OsuModEasy.cs | 1 + osu.Game.Rulesets.Osu/Mods/OsuModHalfTime.cs | 2 +- osu.Game.Rulesets.Osu/Mods/OsuModHardRock.cs | 1 - osu.Game.Rulesets.Osu/Mods/OsuModHidden.cs | 2 +- osu.Game.Rulesets.Osu/Mods/OsuModRelax.cs | 2 +- osu.Game.Rulesets.Osu/Mods/OsuModSpunOut.cs | 2 +- osu.Game.Rulesets.Osu/Mods/OsuModTarget.cs | 2 +- osu.Game.Rulesets.Taiko/Mods/TaikoModDaycore.cs | 2 +- osu.Game.Rulesets.Taiko/Mods/TaikoModEasy.cs | 1 + osu.Game.Rulesets.Taiko/Mods/TaikoModHalfTime.cs | 2 +- osu.Game.Rulesets.Taiko/Mods/TaikoModHardRock.cs | 1 - osu.Game.Rulesets.Taiko/Mods/TaikoModHidden.cs | 2 +- osu.Game.Rulesets.Taiko/Mods/TaikoModRelax.cs | 2 +- osu.Game/Overlays/Mods/AssistedSection.cs | 2 +- osu.Game/Overlays/Mods/DifficultyIncreaseSection.cs | 2 +- osu.Game/Overlays/Mods/DifficultyReductionSection.cs | 2 +- osu.Game/Rulesets/Mods/ModAutoplay.cs | 2 +- osu.Game/Rulesets/Mods/ModCinema.cs | 1 + osu.Game/Rulesets/Mods/ModDaycore.cs | 2 +- osu.Game/Rulesets/Mods/ModDoubleTime.cs | 4 +--- osu.Game/Rulesets/Mods/ModEasy.cs | 1 - osu.Game/Rulesets/Mods/ModHalfTime.cs | 4 +--- osu.Game/Rulesets/Mods/ModHardRock.cs | 1 + osu.Game/Rulesets/Mods/ModNoFail.cs | 2 +- osu.Game/Rulesets/Mods/ModPerfect.cs | 2 ++ osu.Game/Rulesets/Mods/ModSuddenDeath.cs | 2 +- osu.Game/Rulesets/Mods/MultiMod.cs | 2 +- 54 files changed, 100 insertions(+), 53 deletions(-) diff --git a/osu.Game.Rulesets.Catch/Mods/CatchModDaycore.cs b/osu.Game.Rulesets.Catch/Mods/CatchModDaycore.cs index 124af06d56..8eb8fd8435 100644 --- a/osu.Game.Rulesets.Catch/Mods/CatchModDaycore.cs +++ b/osu.Game.Rulesets.Catch/Mods/CatchModDaycore.cs @@ -7,6 +7,6 @@ namespace osu.Game.Rulesets.Catch.Mods { public class CatchModDaycore : ModDaycore { - public override double ScoreMultiplier => 0.5; + public override double ScoreMultiplier => 0.3; } } diff --git a/osu.Game.Rulesets.Catch/Mods/CatchModEasy.cs b/osu.Game.Rulesets.Catch/Mods/CatchModEasy.cs index 5c025bdea0..07bc8b825a 100644 --- a/osu.Game.Rulesets.Catch/Mods/CatchModEasy.cs +++ b/osu.Game.Rulesets.Catch/Mods/CatchModEasy.cs @@ -7,5 +7,6 @@ namespace osu.Game.Rulesets.Catch.Mods { public class CatchModEasy : ModEasy { + public override string Description => @"Larger fruits, more forgiving HP drain, less accuracy required, and three lives!"; } } diff --git a/osu.Game.Rulesets.Catch/Mods/CatchModHalfTime.cs b/osu.Game.Rulesets.Catch/Mods/CatchModHalfTime.cs index 303fa6011d..947990cce5 100644 --- a/osu.Game.Rulesets.Catch/Mods/CatchModHalfTime.cs +++ b/osu.Game.Rulesets.Catch/Mods/CatchModHalfTime.cs @@ -7,6 +7,6 @@ namespace osu.Game.Rulesets.Catch.Mods { public class CatchModHalfTime : ModHalfTime { - public override double ScoreMultiplier => 0.5; + public override double ScoreMultiplier => 0.3; } } diff --git a/osu.Game.Rulesets.Catch/Mods/CatchModHardRock.cs b/osu.Game.Rulesets.Catch/Mods/CatchModHardRock.cs index ed33bf7124..9479c9d9b0 100644 --- a/osu.Game.Rulesets.Catch/Mods/CatchModHardRock.cs +++ b/osu.Game.Rulesets.Catch/Mods/CatchModHardRock.cs @@ -8,6 +8,5 @@ namespace osu.Game.Rulesets.Catch.Mods public class CatchModHardRock : ModHardRock { public override double ScoreMultiplier => 1.12; - public override bool Ranked => true; } } diff --git a/osu.Game.Rulesets.Catch/Mods/CatchModHidden.cs b/osu.Game.Rulesets.Catch/Mods/CatchModHidden.cs index 981ebda9eb..14291f744c 100644 --- a/osu.Game.Rulesets.Catch/Mods/CatchModHidden.cs +++ b/osu.Game.Rulesets.Catch/Mods/CatchModHidden.cs @@ -7,7 +7,7 @@ namespace osu.Game.Rulesets.Catch.Mods { public class CatchModHidden : ModHidden { - public override string Description => @"Play with fading notes for a slight score advantage."; + public override string Description => @"Play with fading fruits."; public override double ScoreMultiplier => 1.06; } } diff --git a/osu.Game.Rulesets.Mania/Mods/ManiaModDaycore.cs b/osu.Game.Rulesets.Mania/Mods/ManiaModDaycore.cs index 7c7dc5e4f7..99f49e6620 100644 --- a/osu.Game.Rulesets.Mania/Mods/ManiaModDaycore.cs +++ b/osu.Game.Rulesets.Mania/Mods/ManiaModDaycore.cs @@ -7,6 +7,6 @@ namespace osu.Game.Rulesets.Mania.Mods { public class ManiaModDaycore : ModDaycore { - public override double ScoreMultiplier => 0.3; + public override double ScoreMultiplier => 0.5; } } diff --git a/osu.Game.Rulesets.Mania/Mods/ManiaModDoubleTime.cs b/osu.Game.Rulesets.Mania/Mods/ManiaModDoubleTime.cs index 64ce86e748..a9d77988c8 100644 --- a/osu.Game.Rulesets.Mania/Mods/ManiaModDoubleTime.cs +++ b/osu.Game.Rulesets.Mania/Mods/ManiaModDoubleTime.cs @@ -7,6 +7,6 @@ namespace osu.Game.Rulesets.Mania.Mods { public class ManiaModDoubleTime : ModDoubleTime { - public override double ScoreMultiplier => 1.0; + public override double ScoreMultiplier => 1; } } diff --git a/osu.Game.Rulesets.Mania/Mods/ManiaModDualStages.cs b/osu.Game.Rulesets.Mania/Mods/ManiaModDualStages.cs index 3330d87e88..a1f9e0290e 100644 --- a/osu.Game.Rulesets.Mania/Mods/ManiaModDualStages.cs +++ b/osu.Game.Rulesets.Mania/Mods/ManiaModDualStages.cs @@ -16,8 +16,7 @@ namespace osu.Game.Rulesets.Mania.Mods public override string Name => "Dual Stages"; public override string ShortenedName => "DS"; public override string Description => @"Double the stages, double the fun!"; - public override double ScoreMultiplier => 1; - public override bool Ranked => false; + public override double ScoreMultiplier => 0; public void ApplyToBeatmapConverter(BeatmapConverter beatmapConverter) { diff --git a/osu.Game.Rulesets.Mania/Mods/ManiaModEasy.cs b/osu.Game.Rulesets.Mania/Mods/ManiaModEasy.cs index 1faed5e1c0..0b3e851c64 100644 --- a/osu.Game.Rulesets.Mania/Mods/ManiaModEasy.cs +++ b/osu.Game.Rulesets.Mania/Mods/ManiaModEasy.cs @@ -7,5 +7,6 @@ namespace osu.Game.Rulesets.Mania.Mods { public class ManiaModEasy : ModEasy { + public override string Description => @"More forgiving HP drain, less accuracy required, and three lives!"; } } diff --git a/osu.Game.Rulesets.Mania/Mods/ManiaModFadeIn.cs b/osu.Game.Rulesets.Mania/Mods/ManiaModFadeIn.cs index 03442507d6..ca5667a400 100644 --- a/osu.Game.Rulesets.Mania/Mods/ManiaModFadeIn.cs +++ b/osu.Game.Rulesets.Mania/Mods/ManiaModFadeIn.cs @@ -9,10 +9,11 @@ namespace osu.Game.Rulesets.Mania.Mods { public class ManiaModFadeIn : Mod { - public override string Name => "FadeIn"; + public override string Name => "Fade In"; public override string ShortenedName => "FI"; public override FontAwesome Icon => FontAwesome.fa_osu_mod_hidden; public override ModType Type => ModType.DifficultyIncrease; + public override string Description => @"Keys appear out of nowhere!"; public override double ScoreMultiplier => 1; public override bool Ranked => true; public override Type[] IncompatibleMods => new[] { typeof(ModFlashlight) }; diff --git a/osu.Game.Rulesets.Mania/Mods/ManiaModFlashlight.cs b/osu.Game.Rulesets.Mania/Mods/ManiaModFlashlight.cs index 89eb02268e..8d8693d11f 100644 --- a/osu.Game.Rulesets.Mania/Mods/ManiaModFlashlight.cs +++ b/osu.Game.Rulesets.Mania/Mods/ManiaModFlashlight.cs @@ -8,7 +8,7 @@ namespace osu.Game.Rulesets.Mania.Mods { public class ManiaModFlashlight : ModFlashlight { - public override double ScoreMultiplier => 1.0; + public override double ScoreMultiplier => 1; public override Type[] IncompatibleMods => new[] { typeof(ModHidden) }; } } diff --git a/osu.Game.Rulesets.Mania/Mods/ManiaModHalfTime.cs b/osu.Game.Rulesets.Mania/Mods/ManiaModHalfTime.cs index 2f8404609f..c00bb4275a 100644 --- a/osu.Game.Rulesets.Mania/Mods/ManiaModHalfTime.cs +++ b/osu.Game.Rulesets.Mania/Mods/ManiaModHalfTime.cs @@ -7,6 +7,6 @@ namespace osu.Game.Rulesets.Mania.Mods { public class ManiaModHalfTime : ModHalfTime { - public override double ScoreMultiplier => 0.3; + public override double ScoreMultiplier => 0.5; } } diff --git a/osu.Game.Rulesets.Mania/Mods/ManiaModHardRock.cs b/osu.Game.Rulesets.Mania/Mods/ManiaModHardRock.cs index 91edbaf0cf..8b77ea4c25 100644 --- a/osu.Game.Rulesets.Mania/Mods/ManiaModHardRock.cs +++ b/osu.Game.Rulesets.Mania/Mods/ManiaModHardRock.cs @@ -7,6 +7,6 @@ namespace osu.Game.Rulesets.Mania.Mods { public class ManiaModHardRock : ModHardRock { - public override double ScoreMultiplier => 1.0; + public override double ScoreMultiplier => 1; } } diff --git a/osu.Game.Rulesets.Mania/Mods/ManiaModHidden.cs b/osu.Game.Rulesets.Mania/Mods/ManiaModHidden.cs index c2fc07da89..9317dba19f 100644 --- a/osu.Game.Rulesets.Mania/Mods/ManiaModHidden.cs +++ b/osu.Game.Rulesets.Mania/Mods/ManiaModHidden.cs @@ -8,8 +8,8 @@ namespace osu.Game.Rulesets.Mania.Mods { public class ManiaModHidden : ModHidden { - public override string Description => @"The notes fade out before you hit them!"; - public override double ScoreMultiplier => 1.0; + public override string Description => @"Keys fade out before you hit them!"; + public override double ScoreMultiplier => 1; public override Type[] IncompatibleMods => new[] { typeof(ModFlashlight) }; } } diff --git a/osu.Game.Rulesets.Mania/Mods/ManiaModKey1.cs b/osu.Game.Rulesets.Mania/Mods/ManiaModKey1.cs index 8a6943d99b..e1c565ff9d 100644 --- a/osu.Game.Rulesets.Mania/Mods/ManiaModKey1.cs +++ b/osu.Game.Rulesets.Mania/Mods/ManiaModKey1.cs @@ -1,11 +1,16 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using osu.Game.Graphics; + namespace osu.Game.Rulesets.Mania.Mods { public class ManiaModKey1 : ManiaKeyMod { public override int KeyCount => 1; - public override string Name => "1K"; + public override string Name => "One Key"; + public override string ShortenedName => "1K"; + public override FontAwesome Icon => FontAwesome.fa_question; + public override string Description => @"Play with one key."; } } diff --git a/osu.Game.Rulesets.Mania/Mods/ManiaModKey2.cs b/osu.Game.Rulesets.Mania/Mods/ManiaModKey2.cs index 553827ac1c..ebedd2dfdb 100644 --- a/osu.Game.Rulesets.Mania/Mods/ManiaModKey2.cs +++ b/osu.Game.Rulesets.Mania/Mods/ManiaModKey2.cs @@ -1,11 +1,16 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using osu.Game.Graphics; + namespace osu.Game.Rulesets.Mania.Mods { public class ManiaModKey2 : ManiaKeyMod { public override int KeyCount => 2; - public override string Name => "2K"; + public override string Name => "Two Keys"; + public override string ShortenedName => "2K"; + public override FontAwesome Icon => FontAwesome.fa_question; + public override string Description => @"Play with two keys."; } } diff --git a/osu.Game.Rulesets.Mania/Mods/ManiaModKey3.cs b/osu.Game.Rulesets.Mania/Mods/ManiaModKey3.cs index ef048c848e..f2e05d2607 100644 --- a/osu.Game.Rulesets.Mania/Mods/ManiaModKey3.cs +++ b/osu.Game.Rulesets.Mania/Mods/ManiaModKey3.cs @@ -1,11 +1,16 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using osu.Game.Graphics; + namespace osu.Game.Rulesets.Mania.Mods { public class ManiaModKey3 : ManiaKeyMod { public override int KeyCount => 3; - public override string Name => "3K"; + public override string Name => "Three Keys"; + public override string ShortenedName => "3K"; + public override FontAwesome Icon => FontAwesome.fa_question; + public override string Description => @"Play with three keys."; } } diff --git a/osu.Game.Rulesets.Mania/Mods/ManiaModKey4.cs b/osu.Game.Rulesets.Mania/Mods/ManiaModKey4.cs index 9c713d920f..cd77943f51 100644 --- a/osu.Game.Rulesets.Mania/Mods/ManiaModKey4.cs +++ b/osu.Game.Rulesets.Mania/Mods/ManiaModKey4.cs @@ -1,11 +1,16 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using osu.Game.Graphics; + namespace osu.Game.Rulesets.Mania.Mods { public class ManiaModKey4 : ManiaKeyMod { public override int KeyCount => 4; - public override string Name => "4K"; + public override string Name => "Four Keys"; + public override string ShortenedName => "4K"; + public override FontAwesome Icon => FontAwesome.fa_question; + public override string Description => @"Play with four keys."; } } diff --git a/osu.Game.Rulesets.Mania/Mods/ManiaModKey5.cs b/osu.Game.Rulesets.Mania/Mods/ManiaModKey5.cs index a83faf4627..4a0a8a472f 100644 --- a/osu.Game.Rulesets.Mania/Mods/ManiaModKey5.cs +++ b/osu.Game.Rulesets.Mania/Mods/ManiaModKey5.cs @@ -1,11 +1,16 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using osu.Game.Graphics; + namespace osu.Game.Rulesets.Mania.Mods { public class ManiaModKey5 : ManiaKeyMod { public override int KeyCount => 5; - public override string Name => "5K"; + public override string Name => "Five Keys"; + public override string ShortenedName => "5K"; + public override FontAwesome Icon => FontAwesome.fa_question; + public override string Description => @"Play with five keys."; } } diff --git a/osu.Game.Rulesets.Mania/Mods/ManiaModKey6.cs b/osu.Game.Rulesets.Mania/Mods/ManiaModKey6.cs index d7df901048..602f07a268 100644 --- a/osu.Game.Rulesets.Mania/Mods/ManiaModKey6.cs +++ b/osu.Game.Rulesets.Mania/Mods/ManiaModKey6.cs @@ -1,11 +1,16 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using osu.Game.Graphics; + namespace osu.Game.Rulesets.Mania.Mods { public class ManiaModKey6 : ManiaKeyMod { public override int KeyCount => 6; - public override string Name => "6K"; + public override string Name => "Six Keys"; + public override string ShortenedName => "6K"; + public override FontAwesome Icon => FontAwesome.fa_question; + public override string Description => @"Play with six keys."; } } diff --git a/osu.Game.Rulesets.Mania/Mods/ManiaModKey7.cs b/osu.Game.Rulesets.Mania/Mods/ManiaModKey7.cs index 4a3f9857e5..4535bafca3 100644 --- a/osu.Game.Rulesets.Mania/Mods/ManiaModKey7.cs +++ b/osu.Game.Rulesets.Mania/Mods/ManiaModKey7.cs @@ -1,11 +1,16 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using osu.Game.Graphics; + namespace osu.Game.Rulesets.Mania.Mods { public class ManiaModKey7 : ManiaKeyMod { public override int KeyCount => 7; - public override string Name => "7K"; + public override string Name => "Seven Keys"; + public override string ShortenedName => "7K"; + public override FontAwesome Icon => FontAwesome.fa_question; + public override string Description => @"Play with seven keys."; } } diff --git a/osu.Game.Rulesets.Mania/Mods/ManiaModKey8.cs b/osu.Game.Rulesets.Mania/Mods/ManiaModKey8.cs index 22c301fb7a..d99d3b1fd9 100644 --- a/osu.Game.Rulesets.Mania/Mods/ManiaModKey8.cs +++ b/osu.Game.Rulesets.Mania/Mods/ManiaModKey8.cs @@ -1,11 +1,16 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using osu.Game.Graphics; + namespace osu.Game.Rulesets.Mania.Mods { public class ManiaModKey8 : ManiaKeyMod { public override int KeyCount => 8; - public override string Name => "8K"; + public override string Name => "Eight Keys"; + public override string ShortenedName => "8K"; + public override FontAwesome Icon => FontAwesome.fa_question; + public override string Description => @"Play with eight keys."; } } diff --git a/osu.Game.Rulesets.Mania/Mods/ManiaModKey9.cs b/osu.Game.Rulesets.Mania/Mods/ManiaModKey9.cs index b2a0bc4ddf..16d70d7c86 100644 --- a/osu.Game.Rulesets.Mania/Mods/ManiaModKey9.cs +++ b/osu.Game.Rulesets.Mania/Mods/ManiaModKey9.cs @@ -1,11 +1,16 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using osu.Game.Graphics; + namespace osu.Game.Rulesets.Mania.Mods { public class ManiaModKey9 : ManiaKeyMod { public override int KeyCount => 9; - public override string Name => "9K"; + public override string Name => "Nine Keys"; + public override string ShortenedName => "9K"; + public override FontAwesome Icon => FontAwesome.fa_question; + public override string Description => @"Play with nine keys."; } } diff --git a/osu.Game.Rulesets.Mania/Mods/ManiaModMirror.cs b/osu.Game.Rulesets.Mania/Mods/ManiaModMirror.cs index cfa5ef88b8..49a47464c8 100644 --- a/osu.Game.Rulesets.Mania/Mods/ManiaModMirror.cs +++ b/osu.Game.Rulesets.Mania/Mods/ManiaModMirror.cs @@ -2,6 +2,7 @@ // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using osu.Framework.Extensions.IEnumerableExtensions; +using osu.Game.Graphics; using osu.Game.Rulesets.Mania.Objects; using osu.Game.Rulesets.Mania.UI; using osu.Game.Rulesets.Mods; @@ -14,6 +15,7 @@ namespace osu.Game.Rulesets.Mania.Mods { public override string Name => "Mirror"; public override string ShortenedName => "MR"; + public override FontAwesome Icon => FontAwesome.fa_question; public override ModType Type => ModType.Special; public override double ScoreMultiplier => 1; public override bool Ranked => true; diff --git a/osu.Game.Rulesets.Mania/Mods/ManiaModNightcore.cs b/osu.Game.Rulesets.Mania/Mods/ManiaModNightcore.cs index a977eef5e3..a007224b74 100644 --- a/osu.Game.Rulesets.Mania/Mods/ManiaModNightcore.cs +++ b/osu.Game.Rulesets.Mania/Mods/ManiaModNightcore.cs @@ -7,6 +7,6 @@ namespace osu.Game.Rulesets.Mania.Mods { public class ManiaModNightcore : ModNightcore { - public override double ScoreMultiplier => 1.0; + public override double ScoreMultiplier => 1; } } diff --git a/osu.Game.Rulesets.Mania/Mods/ManiaModRandom.cs b/osu.Game.Rulesets.Mania/Mods/ManiaModRandom.cs index a6cbad44d7..df0f9a5437 100644 --- a/osu.Game.Rulesets.Mania/Mods/ManiaModRandom.cs +++ b/osu.Game.Rulesets.Mania/Mods/ManiaModRandom.cs @@ -17,8 +17,8 @@ namespace osu.Game.Rulesets.Mania.Mods public override string Name => "Random"; public override string ShortenedName => "RD"; public override FontAwesome Icon => FontAwesome.fa_osu_dice; - public override string Description => @"Shuffle around the notes!"; - public override double ScoreMultiplier => 1; + public override string Description => @"Shuffle around the keys!"; + public override double ScoreMultiplier => 0; public void ApplyToRulesetContainer(RulesetContainer rulesetContainer) { diff --git a/osu.Game.Rulesets.Osu/Mods/OsuModDaycore.cs b/osu.Game.Rulesets.Osu/Mods/OsuModDaycore.cs index eb90338e2f..987bb28932 100644 --- a/osu.Game.Rulesets.Osu/Mods/OsuModDaycore.cs +++ b/osu.Game.Rulesets.Osu/Mods/OsuModDaycore.cs @@ -7,6 +7,6 @@ namespace osu.Game.Rulesets.Osu.Mods { public class OsuModDaycore : ModDaycore { - public override double ScoreMultiplier => 0.5; + public override double ScoreMultiplier => 0.3; } } diff --git a/osu.Game.Rulesets.Osu/Mods/OsuModEasy.cs b/osu.Game.Rulesets.Osu/Mods/OsuModEasy.cs index 80c83bf5d8..d842b607c6 100644 --- a/osu.Game.Rulesets.Osu/Mods/OsuModEasy.cs +++ b/osu.Game.Rulesets.Osu/Mods/OsuModEasy.cs @@ -7,5 +7,6 @@ namespace osu.Game.Rulesets.Osu.Mods { public class OsuModEasy : ModEasy { + public override string Description => @"Larger circles, more forgiving HP drain, less accuracy required, and three lives!"; } } diff --git a/osu.Game.Rulesets.Osu/Mods/OsuModHalfTime.cs b/osu.Game.Rulesets.Osu/Mods/OsuModHalfTime.cs index 7d009b0344..1b9291bcf3 100644 --- a/osu.Game.Rulesets.Osu/Mods/OsuModHalfTime.cs +++ b/osu.Game.Rulesets.Osu/Mods/OsuModHalfTime.cs @@ -7,6 +7,6 @@ namespace osu.Game.Rulesets.Osu.Mods { public class OsuModHalfTime : ModHalfTime { - public override double ScoreMultiplier => 0.5; + public override double ScoreMultiplier => 0.3; } } diff --git a/osu.Game.Rulesets.Osu/Mods/OsuModHardRock.cs b/osu.Game.Rulesets.Osu/Mods/OsuModHardRock.cs index 29bf3e248d..74c3585d3d 100644 --- a/osu.Game.Rulesets.Osu/Mods/OsuModHardRock.cs +++ b/osu.Game.Rulesets.Osu/Mods/OsuModHardRock.cs @@ -14,7 +14,6 @@ namespace osu.Game.Rulesets.Osu.Mods public class OsuModHardRock : ModHardRock, IApplicableToHitObject { public override double ScoreMultiplier => 1.06; - public override bool Ranked => true; public void ApplyToHitObject(OsuHitObject hitObject) { diff --git a/osu.Game.Rulesets.Osu/Mods/OsuModHidden.cs b/osu.Game.Rulesets.Osu/Mods/OsuModHidden.cs index 4aeb76121a..1117b5bbd5 100644 --- a/osu.Game.Rulesets.Osu/Mods/OsuModHidden.cs +++ b/osu.Game.Rulesets.Osu/Mods/OsuModHidden.cs @@ -15,7 +15,7 @@ namespace osu.Game.Rulesets.Osu.Mods { public class OsuModHidden : ModHidden, IApplicableToDrawableHitObjects { - public override string Description => @"Play with no approach circles and fading notes for a slight score advantage."; + public override string Description => @"Play with no approach circles and fading circles/sliders."; public override double ScoreMultiplier => 1.06; private const double fade_in_duration_multiplier = 0.4; diff --git a/osu.Game.Rulesets.Osu/Mods/OsuModRelax.cs b/osu.Game.Rulesets.Osu/Mods/OsuModRelax.cs index 057916c04b..c9def8c8cf 100644 --- a/osu.Game.Rulesets.Osu/Mods/OsuModRelax.cs +++ b/osu.Game.Rulesets.Osu/Mods/OsuModRelax.cs @@ -9,7 +9,7 @@ namespace osu.Game.Rulesets.Osu.Mods { public class OsuModRelax : ModRelax { - public override string Description => "You don't need to click.\nGive your clicking/tapping finger a break from the heat of things."; + public override string Description => @"You don't need to click. Give your clicking/tapping fingers a break from the heat of things."; public override Type[] IncompatibleMods => base.IncompatibleMods.Concat(new[] { typeof(OsuModAutopilot) }).ToArray(); } } diff --git a/osu.Game.Rulesets.Osu/Mods/OsuModSpunOut.cs b/osu.Game.Rulesets.Osu/Mods/OsuModSpunOut.cs index 18b212f781..401e56a3c8 100644 --- a/osu.Game.Rulesets.Osu/Mods/OsuModSpunOut.cs +++ b/osu.Game.Rulesets.Osu/Mods/OsuModSpunOut.cs @@ -12,7 +12,7 @@ namespace osu.Game.Rulesets.Osu.Mods public override string Name => "Spun Out"; public override string ShortenedName => "SO"; public override FontAwesome Icon => FontAwesome.fa_osu_mod_spunout; - public override string Description => @"Spinners will be automatically completed"; + public override string Description => @"Spinners will be automatically completed."; public override double ScoreMultiplier => 0.9; public override bool Ranked => true; public override Type[] IncompatibleMods => new[] { typeof(ModAutoplay), typeof(OsuModAutopilot) }; diff --git a/osu.Game.Rulesets.Osu/Mods/OsuModTarget.cs b/osu.Game.Rulesets.Osu/Mods/OsuModTarget.cs index b2b5130be3..613fbc4e32 100644 --- a/osu.Game.Rulesets.Osu/Mods/OsuModTarget.cs +++ b/osu.Game.Rulesets.Osu/Mods/OsuModTarget.cs @@ -11,7 +11,7 @@ namespace osu.Game.Rulesets.Osu.Mods public override string Name => "Target"; public override string ShortenedName => "TP"; public override FontAwesome Icon => FontAwesome.fa_osu_mod_target; - public override string Description => @""; + public override string Description => @"Practice keeping up with the beat of the song."; public override double ScoreMultiplier => 1; } } diff --git a/osu.Game.Rulesets.Taiko/Mods/TaikoModDaycore.cs b/osu.Game.Rulesets.Taiko/Mods/TaikoModDaycore.cs index c50878c6a3..703e6b4f1c 100644 --- a/osu.Game.Rulesets.Taiko/Mods/TaikoModDaycore.cs +++ b/osu.Game.Rulesets.Taiko/Mods/TaikoModDaycore.cs @@ -7,6 +7,6 @@ namespace osu.Game.Rulesets.Taiko.Mods { public class TaikoModDaycore : ModDaycore { - public override double ScoreMultiplier => 0.5; + public override double ScoreMultiplier => 0.3; } } diff --git a/osu.Game.Rulesets.Taiko/Mods/TaikoModEasy.cs b/osu.Game.Rulesets.Taiko/Mods/TaikoModEasy.cs index 1c5e43f411..be6510459e 100644 --- a/osu.Game.Rulesets.Taiko/Mods/TaikoModEasy.cs +++ b/osu.Game.Rulesets.Taiko/Mods/TaikoModEasy.cs @@ -7,5 +7,6 @@ namespace osu.Game.Rulesets.Taiko.Mods { public class TaikoModEasy : ModEasy { + public override string Description => @"Beats move slower, less accuracy required, and three lives!"; } } diff --git a/osu.Game.Rulesets.Taiko/Mods/TaikoModHalfTime.cs b/osu.Game.Rulesets.Taiko/Mods/TaikoModHalfTime.cs index 9813f8b78e..6542b5a844 100644 --- a/osu.Game.Rulesets.Taiko/Mods/TaikoModHalfTime.cs +++ b/osu.Game.Rulesets.Taiko/Mods/TaikoModHalfTime.cs @@ -7,6 +7,6 @@ namespace osu.Game.Rulesets.Taiko.Mods { public class TaikoModHalfTime : ModHalfTime { - public override double ScoreMultiplier => 0.5; + public override double ScoreMultiplier => 0.3; } } diff --git a/osu.Game.Rulesets.Taiko/Mods/TaikoModHardRock.cs b/osu.Game.Rulesets.Taiko/Mods/TaikoModHardRock.cs index ba304c41d8..435a0c1613 100644 --- a/osu.Game.Rulesets.Taiko/Mods/TaikoModHardRock.cs +++ b/osu.Game.Rulesets.Taiko/Mods/TaikoModHardRock.cs @@ -8,6 +8,5 @@ namespace osu.Game.Rulesets.Taiko.Mods public class TaikoModHardRock : ModHardRock { public override double ScoreMultiplier => 1.06; - public override bool Ranked => true; } } diff --git a/osu.Game.Rulesets.Taiko/Mods/TaikoModHidden.cs b/osu.Game.Rulesets.Taiko/Mods/TaikoModHidden.cs index b0ad43b851..be987a1773 100644 --- a/osu.Game.Rulesets.Taiko/Mods/TaikoModHidden.cs +++ b/osu.Game.Rulesets.Taiko/Mods/TaikoModHidden.cs @@ -7,7 +7,7 @@ namespace osu.Game.Rulesets.Taiko.Mods { public class TaikoModHidden : ModHidden { - public override string Description => @"The notes fade out before you hit them!"; + public override string Description => @"Beats fade out before you hit them!"; public override double ScoreMultiplier => 1.06; } } diff --git a/osu.Game.Rulesets.Taiko/Mods/TaikoModRelax.cs b/osu.Game.Rulesets.Taiko/Mods/TaikoModRelax.cs index ec2385bfba..d5ad04f595 100644 --- a/osu.Game.Rulesets.Taiko/Mods/TaikoModRelax.cs +++ b/osu.Game.Rulesets.Taiko/Mods/TaikoModRelax.cs @@ -7,6 +7,6 @@ namespace osu.Game.Rulesets.Taiko.Mods { public class TaikoModRelax : ModRelax { - public override string Description => @"Relax! You will no longer get dizzyfied by ninja-like spinners, demanding drumrolls or unexpected katu's."; + public override string Description => @"No ninja-like spinners, demanding drumrolls or unexpected katu's."; } } diff --git a/osu.Game/Overlays/Mods/AssistedSection.cs b/osu.Game/Overlays/Mods/AssistedSection.cs index 978b12da19..62c5002642 100644 --- a/osu.Game/Overlays/Mods/AssistedSection.cs +++ b/osu.Game/Overlays/Mods/AssistedSection.cs @@ -21,7 +21,7 @@ namespace osu.Game.Overlays.Mods public AssistedSection() { - Header = @"Assisted"; + Header = @"Special"; } } } diff --git a/osu.Game/Overlays/Mods/DifficultyIncreaseSection.cs b/osu.Game/Overlays/Mods/DifficultyIncreaseSection.cs index cbf67893a9..1d9fdab8d5 100644 --- a/osu.Game/Overlays/Mods/DifficultyIncreaseSection.cs +++ b/osu.Game/Overlays/Mods/DifficultyIncreaseSection.cs @@ -21,7 +21,7 @@ namespace osu.Game.Overlays.Mods public DifficultyIncreaseSection() { - Header = @"Gameplay Difficulty Increase"; + Header = @"Difficulty Increase"; } } } diff --git a/osu.Game/Overlays/Mods/DifficultyReductionSection.cs b/osu.Game/Overlays/Mods/DifficultyReductionSection.cs index c44af8fc4d..651fc222b5 100644 --- a/osu.Game/Overlays/Mods/DifficultyReductionSection.cs +++ b/osu.Game/Overlays/Mods/DifficultyReductionSection.cs @@ -21,7 +21,7 @@ namespace osu.Game.Overlays.Mods public DifficultyReductionSection() { - Header = @"Gameplay Difficulty Reduction"; + Header = @"Difficulty Reduction"; } } } diff --git a/osu.Game/Rulesets/Mods/ModAutoplay.cs b/osu.Game/Rulesets/Mods/ModAutoplay.cs index 3356a56c33..9f45cada7e 100644 --- a/osu.Game/Rulesets/Mods/ModAutoplay.cs +++ b/osu.Game/Rulesets/Mods/ModAutoplay.cs @@ -26,7 +26,7 @@ namespace osu.Game.Rulesets.Mods public override string Name => "Autoplay"; public override string ShortenedName => "AT"; public override FontAwesome Icon => FontAwesome.fa_osu_mod_auto; - public override string Description => "Watch a perfect automated play through the song"; + public override string Description => "Watch a perfect automated play through the song."; public override double ScoreMultiplier => 0; public bool AllowFail => false; public override Type[] IncompatibleMods => new[] { typeof(ModRelax), typeof(ModSuddenDeath), typeof(ModNoFail) }; diff --git a/osu.Game/Rulesets/Mods/ModCinema.cs b/osu.Game/Rulesets/Mods/ModCinema.cs index c0480b0647..015f7381fb 100644 --- a/osu.Game/Rulesets/Mods/ModCinema.cs +++ b/osu.Game/Rulesets/Mods/ModCinema.cs @@ -11,5 +11,6 @@ namespace osu.Game.Rulesets.Mods public override string ShortenedName => "CN"; public override bool HasImplementation => false; public override FontAwesome Icon => FontAwesome.fa_osu_mod_cinema; + public override string Description => "Watch the video without visual distractions."; } } diff --git a/osu.Game/Rulesets/Mods/ModDaycore.cs b/osu.Game/Rulesets/Mods/ModDaycore.cs index 180199cd70..07e55e00b8 100644 --- a/osu.Game/Rulesets/Mods/ModDaycore.cs +++ b/osu.Game/Rulesets/Mods/ModDaycore.cs @@ -12,7 +12,7 @@ namespace osu.Game.Rulesets.Mods public override string Name => "Daycore"; public override string ShortenedName => "DC"; public override FontAwesome Icon => FontAwesome.fa_question; - public override string Description => "whoaaaaa"; + public override string Description => "whoaaaaa..."; public override void ApplyToClock(IAdjustableClock clock) { diff --git a/osu.Game/Rulesets/Mods/ModDoubleTime.cs b/osu.Game/Rulesets/Mods/ModDoubleTime.cs index 0b8f4b0b5b..406fa3ccf2 100644 --- a/osu.Game/Rulesets/Mods/ModDoubleTime.cs +++ b/osu.Game/Rulesets/Mods/ModDoubleTime.cs @@ -7,7 +7,7 @@ using osu.Game.Graphics; namespace osu.Game.Rulesets.Mods { - public class ModDoubleTime : Mod, IApplicableToClock + public abstract class ModDoubleTime : Mod, IApplicableToClock { public override string Name => "Double Time"; public override string ShortenedName => "DT"; @@ -17,8 +17,6 @@ namespace osu.Game.Rulesets.Mods public override bool Ranked => true; public override Type[] IncompatibleMods => new[] { typeof(ModHalfTime) }; - public override double ScoreMultiplier => 1.12; - public virtual void ApplyToClock(IAdjustableClock clock) { clock.Rate = 1.5; diff --git a/osu.Game/Rulesets/Mods/ModEasy.cs b/osu.Game/Rulesets/Mods/ModEasy.cs index 5c5b9b1b44..7037edfa31 100644 --- a/osu.Game/Rulesets/Mods/ModEasy.cs +++ b/osu.Game/Rulesets/Mods/ModEasy.cs @@ -13,7 +13,6 @@ namespace osu.Game.Rulesets.Mods public override string ShortenedName => "EZ"; public override FontAwesome Icon => FontAwesome.fa_osu_mod_easy; public override ModType Type => ModType.DifficultyReduction; - public override string Description => "Reduces overall difficulty - larger circles, more forgiving HP drain, less accuracy required."; public override double ScoreMultiplier => 0.5; public override bool Ranked => true; public override Type[] IncompatibleMods => new[] { typeof(ModHardRock) }; diff --git a/osu.Game/Rulesets/Mods/ModHalfTime.cs b/osu.Game/Rulesets/Mods/ModHalfTime.cs index bb9ed0047d..883225a66b 100644 --- a/osu.Game/Rulesets/Mods/ModHalfTime.cs +++ b/osu.Game/Rulesets/Mods/ModHalfTime.cs @@ -13,12 +13,10 @@ namespace osu.Game.Rulesets.Mods public override string ShortenedName => "HT"; public override FontAwesome Icon => FontAwesome.fa_osu_mod_halftime; public override ModType Type => ModType.DifficultyReduction; - public override string Description => "Less zoom"; + public override string Description => "Less zoom..."; public override bool Ranked => true; public override Type[] IncompatibleMods => new[] { typeof(ModDoubleTime) }; - public override double ScoreMultiplier => 1.12; - public virtual void ApplyToClock(IAdjustableClock clock) { clock.Rate = 0.75; diff --git a/osu.Game/Rulesets/Mods/ModHardRock.cs b/osu.Game/Rulesets/Mods/ModHardRock.cs index c4c0f38faf..c998bc123f 100644 --- a/osu.Game/Rulesets/Mods/ModHardRock.cs +++ b/osu.Game/Rulesets/Mods/ModHardRock.cs @@ -14,6 +14,7 @@ namespace osu.Game.Rulesets.Mods public override FontAwesome Icon => FontAwesome.fa_osu_mod_hardrock; public override ModType Type => ModType.DifficultyIncrease; public override string Description => "Everything just got a bit harder..."; + public override bool Ranked => true; public override Type[] IncompatibleMods => new[] { typeof(ModEasy) }; public void ApplyToDifficulty(BeatmapDifficulty difficulty) diff --git a/osu.Game/Rulesets/Mods/ModNoFail.cs b/osu.Game/Rulesets/Mods/ModNoFail.cs index 9686eff99c..8a849825a2 100644 --- a/osu.Game/Rulesets/Mods/ModNoFail.cs +++ b/osu.Game/Rulesets/Mods/ModNoFail.cs @@ -8,7 +8,7 @@ namespace osu.Game.Rulesets.Mods { public abstract class ModNoFail : Mod, IApplicableFailOverride { - public override string Name => "NoFail"; + public override string Name => "No Fail"; public override string ShortenedName => "NF"; public override FontAwesome Icon => FontAwesome.fa_osu_mod_nofail; public override ModType Type => ModType.DifficultyReduction; diff --git a/osu.Game/Rulesets/Mods/ModPerfect.cs b/osu.Game/Rulesets/Mods/ModPerfect.cs index bb12b2e39f..08942fbe12 100644 --- a/osu.Game/Rulesets/Mods/ModPerfect.cs +++ b/osu.Game/Rulesets/Mods/ModPerfect.cs @@ -1,6 +1,7 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using osu.Game.Graphics; using osu.Game.Rulesets.Scoring; namespace osu.Game.Rulesets.Mods @@ -9,6 +10,7 @@ namespace osu.Game.Rulesets.Mods { public override string Name => "Perfect"; public override string ShortenedName => "PF"; + public override FontAwesome Icon => FontAwesome.fa_question; public override string Description => "SS or quit."; protected override bool FailCondition(ScoreProcessor scoreProcessor) => scoreProcessor.Accuracy.Value != 1; diff --git a/osu.Game/Rulesets/Mods/ModSuddenDeath.cs b/osu.Game/Rulesets/Mods/ModSuddenDeath.cs index 490825220c..ef9ff4c69e 100644 --- a/osu.Game/Rulesets/Mods/ModSuddenDeath.cs +++ b/osu.Game/Rulesets/Mods/ModSuddenDeath.cs @@ -13,7 +13,7 @@ namespace osu.Game.Rulesets.Mods public override string ShortenedName => "SD"; public override FontAwesome Icon => FontAwesome.fa_osu_mod_suddendeath; public override ModType Type => ModType.DifficultyIncrease; - public override string Description => "Miss a note and fail."; + public override string Description => "Miss and fail."; public override double ScoreMultiplier => 1; public override bool Ranked => true; public override Type[] IncompatibleMods => new[] { typeof(ModNoFail), typeof(ModRelax), typeof(ModAutoplay) }; diff --git a/osu.Game/Rulesets/Mods/MultiMod.cs b/osu.Game/Rulesets/Mods/MultiMod.cs index 1de5297e22..5548313f8e 100644 --- a/osu.Game/Rulesets/Mods/MultiMod.cs +++ b/osu.Game/Rulesets/Mods/MultiMod.cs @@ -8,7 +8,7 @@ namespace osu.Game.Rulesets.Mods public override string Name => string.Empty; public override string ShortenedName => string.Empty; public override string Description => string.Empty; - public override double ScoreMultiplier => 0.0; + public override double ScoreMultiplier => 0; public Mod[] Mods; } From ea649f96504a72be9ebbcc55c2f70b6dd32e563b Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 14 Mar 2018 12:01:15 +0900 Subject: [PATCH 413/544] Avoid scheduling during non-current screen --- osu.Game/Screens/Play/PlayerLoader.cs | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/osu.Game/Screens/Play/PlayerLoader.cs b/osu.Game/Screens/Play/PlayerLoader.cs index cdb6f36a6f..31e7313c0b 100644 --- a/osu.Game/Screens/Play/PlayerLoader.cs +++ b/osu.Game/Screens/Play/PlayerLoader.cs @@ -131,16 +131,22 @@ namespace osu.Game.Screens.Play private void pushWhenLoaded() { - Schedule(pushWhenLoaded); + if (!IsCurrentScreen) return; - if (!readyForPush) + try { - pushDebounce?.Cancel(); - pushDebounce = null; - return; - } + if (!readyForPush) + { + // as the pushDebounce below has a delay, we need to keep checking and cancel a future debounce + // if we become unready for push during the delay. + pushDebounce?.Cancel(); + pushDebounce = null; + return; + } + + if (pushDebounce != null) + return; - if (pushDebounce == null) pushDebounce = Scheduler.AddDelayed(() => { contentOut(); @@ -159,6 +165,11 @@ namespace osu.Game.Screens.Play } }); }, 500); + } + finally + { + Schedule(pushWhenLoaded); + } } protected override bool OnExiting(Screen next) From 149ee381e9b38916838a49708939840daba8a881 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 14 Mar 2018 13:55:16 +0900 Subject: [PATCH 414/544] Update framework --- osu-framework | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu-framework b/osu-framework index d29c8365ba..727a8fb93b 160000 --- a/osu-framework +++ b/osu-framework @@ -1 +1 @@ -Subproject commit d29c8365ba3cf7924b57cf22341f4af55658764c +Subproject commit 727a8fb93b50aec18f8f83c9046243174e09de93 From 81f82d98a14a3b09f412e49891da0c46e51515ea Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 14 Mar 2018 15:18:21 +0900 Subject: [PATCH 415/544] Rework a lot of naming and structure --- .../Selection/OsuHitObjectOverlayLayer.cs | 26 ---------- .../{HitCircleOverlay.cs => HitCircleMask.cs} | 6 +-- ...erCircleOverlay.cs => SliderCircleMask.cs} | 10 ++-- .../{SliderOverlay.cs => SliderMask.cs} | 10 ++-- .../Edit/OsuHitObjectComposer.cs | 18 +++++-- .../osu.Game.Rulesets.Osu.csproj | 7 ++- .../Visual/TestCaseEditorSelectionLayer.cs | 17 +++--- osu.Game/Rulesets/Edit/HitObjectComposer.cs | 34 +++++++----- .../HitObjectOverlay.cs => HitObjectMask.cs} | 9 ++-- .../Edit/Layers/Selection/SelectionBox.cs | 49 ----------------- .../Screens/Compose}/Layers/BorderLayer.cs | 2 +- .../Compose/Layers/HitObjectMaskLayer.cs} | 37 +++++-------- .../Screens/Compose/Layers/SelectionBox.cs} | 15 +++--- .../Screens/Compose/Layers}/SelectionLayer.cs | 52 ++++++++++++++++--- osu.Game/Screens/Edit/Screens/EditorScreen.cs | 3 ++ osu.Game/osu.Game.csproj | 11 ++-- 16 files changed, 141 insertions(+), 165 deletions(-) delete mode 100644 osu.Game.Rulesets.Osu/Edit/Layers/Selection/OsuHitObjectOverlayLayer.cs rename osu.Game.Rulesets.Osu/Edit/Layers/Selection/Overlays/{HitCircleOverlay.cs => HitCircleMask.cs} (82%) rename osu.Game.Rulesets.Osu/Edit/Layers/Selection/Overlays/{SliderCircleOverlay.cs => SliderCircleMask.cs} (73%) rename osu.Game.Rulesets.Osu/Edit/Layers/Selection/Overlays/{SliderOverlay.cs => SliderMask.cs} (82%) rename osu.Game/Rulesets/Edit/{Layers/Selection/HitObjectOverlay.cs => HitObjectMask.cs} (56%) delete mode 100644 osu.Game/Rulesets/Edit/Layers/Selection/SelectionBox.cs rename osu.Game/{Rulesets/Edit => Screens/Edit/Screens/Compose}/Layers/BorderLayer.cs (92%) rename osu.Game/{Rulesets/Edit/Layers/Selection/HitObjectOverlayLayer.cs => Screens/Edit/Screens/Compose/Layers/HitObjectMaskLayer.cs} (51%) rename osu.Game/{Rulesets/Edit/Layers/Selection/SelectionOverlay.cs => Screens/Edit/Screens/Compose/Layers/SelectionBox.cs} (83%) rename osu.Game/{Rulesets/Edit/Layers/Selection => Screens/Edit/Screens/Compose/Layers}/SelectionLayer.cs (78%) diff --git a/osu.Game.Rulesets.Osu/Edit/Layers/Selection/OsuHitObjectOverlayLayer.cs b/osu.Game.Rulesets.Osu/Edit/Layers/Selection/OsuHitObjectOverlayLayer.cs deleted file mode 100644 index e0d1b34ca5..0000000000 --- a/osu.Game.Rulesets.Osu/Edit/Layers/Selection/OsuHitObjectOverlayLayer.cs +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (c) 2007-2018 ppy Pty Ltd . -// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE - -using osu.Game.Rulesets.Edit.Layers.Selection; -using osu.Game.Rulesets.Objects.Drawables; -using osu.Game.Rulesets.Osu.Edit.Layers.Selection.Overlays; -using osu.Game.Rulesets.Osu.Objects.Drawables; - -namespace osu.Game.Rulesets.Osu.Edit.Layers.Selection -{ - public class OsuHitObjectOverlayLayer : HitObjectOverlayLayer - { - protected override HitObjectOverlay CreateOverlayFor(DrawableHitObject hitObject) - { - switch (hitObject) - { - case DrawableHitCircle circle: - return new HitCircleOverlay(circle); - case DrawableSlider slider: - return new SliderOverlay(slider); - } - - return base.CreateOverlayFor(hitObject); - } - } -} diff --git a/osu.Game.Rulesets.Osu/Edit/Layers/Selection/Overlays/HitCircleOverlay.cs b/osu.Game.Rulesets.Osu/Edit/Layers/Selection/Overlays/HitCircleMask.cs similarity index 82% rename from osu.Game.Rulesets.Osu/Edit/Layers/Selection/Overlays/HitCircleOverlay.cs rename to osu.Game.Rulesets.Osu/Edit/Layers/Selection/Overlays/HitCircleMask.cs index ea5104af18..b48dd73bb5 100644 --- a/osu.Game.Rulesets.Osu/Edit/Layers/Selection/Overlays/HitCircleOverlay.cs +++ b/osu.Game.Rulesets.Osu/Edit/Layers/Selection/Overlays/HitCircleMask.cs @@ -4,15 +4,15 @@ using osu.Framework.Graphics; using osu.Framework.Allocation; using osu.Game.Graphics; -using osu.Game.Rulesets.Edit.Layers.Selection; +using osu.Game.Rulesets.Edit; using osu.Game.Rulesets.Osu.Objects.Drawables; using osu.Game.Rulesets.Osu.Objects.Drawables.Pieces; namespace osu.Game.Rulesets.Osu.Edit.Layers.Selection.Overlays { - public class HitCircleOverlay : HitObjectOverlay + public class HitCircleMask : HitObjectMask { - public HitCircleOverlay(DrawableHitCircle hitCircle) + public HitCircleMask(DrawableHitCircle hitCircle) : base(hitCircle) { Origin = Anchor.Centre; diff --git a/osu.Game.Rulesets.Osu/Edit/Layers/Selection/Overlays/SliderCircleOverlay.cs b/osu.Game.Rulesets.Osu/Edit/Layers/Selection/Overlays/SliderCircleMask.cs similarity index 73% rename from osu.Game.Rulesets.Osu/Edit/Layers/Selection/Overlays/SliderCircleOverlay.cs rename to osu.Game.Rulesets.Osu/Edit/Layers/Selection/Overlays/SliderCircleMask.cs index 3c7f8a067b..2de8c2f64e 100644 --- a/osu.Game.Rulesets.Osu/Edit/Layers/Selection/Overlays/SliderCircleOverlay.cs +++ b/osu.Game.Rulesets.Osu/Edit/Layers/Selection/Overlays/SliderCircleMask.cs @@ -4,28 +4,28 @@ using osu.Framework.Allocation; using osu.Framework.Graphics; using osu.Game.Graphics; -using osu.Game.Rulesets.Edit.Layers.Selection; +using osu.Game.Rulesets.Edit; using osu.Game.Rulesets.Osu.Objects.Drawables; using osu.Game.Rulesets.Osu.Objects.Drawables.Pieces; using OpenTK; namespace osu.Game.Rulesets.Osu.Edit.Layers.Selection.Overlays { - public class SliderCircleOverlay : HitObjectOverlay + public class SliderCircleMask : HitObjectMask { - public SliderCircleOverlay(DrawableHitCircle sliderHead, DrawableSlider slider) + public SliderCircleMask(DrawableHitCircle sliderHead, DrawableSlider slider) : this(sliderHead, sliderHead.Position, slider) { } - public SliderCircleOverlay(DrawableSliderTail sliderTail, DrawableSlider slider) + public SliderCircleMask(DrawableSliderTail sliderTail, DrawableSlider slider) : this(sliderTail, sliderTail.Position, slider) { } private readonly DrawableOsuHitObject hitObject; - private SliderCircleOverlay(DrawableOsuHitObject hitObject, Vector2 position, DrawableSlider slider) + private SliderCircleMask(DrawableOsuHitObject hitObject, Vector2 position, DrawableSlider slider) : base(hitObject) { this.hitObject = hitObject; diff --git a/osu.Game.Rulesets.Osu/Edit/Layers/Selection/Overlays/SliderOverlay.cs b/osu.Game.Rulesets.Osu/Edit/Layers/Selection/Overlays/SliderMask.cs similarity index 82% rename from osu.Game.Rulesets.Osu/Edit/Layers/Selection/Overlays/SliderOverlay.cs rename to osu.Game.Rulesets.Osu/Edit/Layers/Selection/Overlays/SliderMask.cs index d478130868..53f02617cd 100644 --- a/osu.Game.Rulesets.Osu/Edit/Layers/Selection/Overlays/SliderOverlay.cs +++ b/osu.Game.Rulesets.Osu/Edit/Layers/Selection/Overlays/SliderMask.cs @@ -4,7 +4,7 @@ using osu.Framework.Allocation; using osu.Framework.Graphics; using osu.Game.Graphics; -using osu.Game.Rulesets.Edit.Layers.Selection; +using osu.Game.Rulesets.Edit; using osu.Game.Rulesets.Osu.Objects; using osu.Game.Rulesets.Osu.Objects.Drawables; using osu.Game.Rulesets.Osu.Objects.Drawables.Pieces; @@ -13,12 +13,12 @@ using OpenTK.Graphics; namespace osu.Game.Rulesets.Osu.Edit.Layers.Selection.Overlays { - public class SliderOverlay : HitObjectOverlay + public class SliderMask : HitObjectMask { private readonly SliderBody body; private readonly DrawableSlider slider; - public SliderOverlay(DrawableSlider slider) + public SliderMask(DrawableSlider slider) : base(slider) { this.slider = slider; @@ -34,8 +34,8 @@ namespace osu.Game.Rulesets.Osu.Edit.Layers.Selection.Overlays AccentColour = Color4.Transparent, PathWidth = sliderObject.Scale * 64 }, - new SliderCircleOverlay(slider.HeadCircle, slider), - new SliderCircleOverlay(slider.TailCircle, slider), + new SliderCircleMask(slider.HeadCircle, slider), + new SliderCircleMask(slider.TailCircle, slider), }; sliderObject.PositionChanged += _ => Position = slider.Position; diff --git a/osu.Game.Rulesets.Osu/Edit/OsuHitObjectComposer.cs b/osu.Game.Rulesets.Osu/Edit/OsuHitObjectComposer.cs index 70d49a6b4f..026c85d909 100644 --- a/osu.Game.Rulesets.Osu/Edit/OsuHitObjectComposer.cs +++ b/osu.Game.Rulesets.Osu/Edit/OsuHitObjectComposer.cs @@ -5,10 +5,11 @@ using System.Collections.Generic; using osu.Framework.Graphics; using osu.Game.Beatmaps; using osu.Game.Rulesets.Edit; -using osu.Game.Rulesets.Edit.Layers.Selection; using osu.Game.Rulesets.Edit.Tools; -using osu.Game.Rulesets.Osu.Edit.Layers.Selection; +using osu.Game.Rulesets.Objects.Drawables; +using osu.Game.Rulesets.Osu.Edit.Layers.Selection.Overlays; using osu.Game.Rulesets.Osu.Objects; +using osu.Game.Rulesets.Osu.Objects.Drawables; using osu.Game.Rulesets.Osu.UI; using osu.Game.Rulesets.UI; @@ -32,6 +33,17 @@ namespace osu.Game.Rulesets.Osu.Edit protected override ScalableContainer CreateLayerContainer() => new ScalableContainer(OsuPlayfield.BASE_SIZE.X) { RelativeSizeAxes = Axes.Both }; - protected override HitObjectOverlayLayer CreateHitObjectOverlayLayer() => new OsuHitObjectOverlayLayer(); + public override HitObjectMask CreateMaskFor(DrawableHitObject hitObject) + { + switch (hitObject) + { + case DrawableHitCircle circle: + return new HitCircleMask(circle); + case DrawableSlider slider: + return new SliderMask(slider); + } + + return base.CreateMaskFor(hitObject); + } } } diff --git a/osu.Game.Rulesets.Osu/osu.Game.Rulesets.Osu.csproj b/osu.Game.Rulesets.Osu/osu.Game.Rulesets.Osu.csproj index d6fe87660f..b8f56c1f5d 100644 --- a/osu.Game.Rulesets.Osu/osu.Game.Rulesets.Osu.csproj +++ b/osu.Game.Rulesets.Osu/osu.Game.Rulesets.Osu.csproj @@ -64,10 +64,9 @@ - - - - + + + diff --git a/osu.Game.Tests/Visual/TestCaseEditorSelectionLayer.cs b/osu.Game.Tests/Visual/TestCaseEditorSelectionLayer.cs index dc8a13d044..a7e104dd81 100644 --- a/osu.Game.Tests/Visual/TestCaseEditorSelectionLayer.cs +++ b/osu.Game.Tests/Visual/TestCaseEditorSelectionLayer.cs @@ -8,13 +8,12 @@ using osu.Framework.Allocation; using OpenTK; using osu.Game.Beatmaps; using osu.Game.Rulesets.Edit; -using osu.Game.Rulesets.Edit.Layers.Selection; using osu.Game.Rulesets.Objects; using osu.Game.Rulesets.Osu; using osu.Game.Rulesets.Osu.Edit; -using osu.Game.Rulesets.Osu.Edit.Layers.Selection; using osu.Game.Rulesets.Osu.Edit.Layers.Selection.Overlays; using osu.Game.Rulesets.Osu.Objects; +using osu.Game.Screens.Edit.Screens.Compose.Layers; using osu.Game.Tests.Beatmaps; namespace osu.Game.Tests.Visual @@ -24,17 +23,15 @@ namespace osu.Game.Tests.Visual { public override IReadOnlyList RequiredTypes => new[] { - typeof(SelectionBox), typeof(SelectionLayer), - typeof(SelectionOverlay), + typeof(SelectionBox), typeof(HitObjectComposer), typeof(OsuHitObjectComposer), - typeof(HitObjectOverlayLayer), - typeof(OsuHitObjectOverlayLayer), - typeof(HitObjectOverlay), - typeof(HitCircleOverlay), - typeof(SliderOverlay), - typeof(SliderCircleOverlay) + typeof(HitObjectMaskLayer), + typeof(HitObjectMask), + typeof(HitCircleMask), + typeof(SliderMask), + typeof(SliderCircleMask) }; [BackgroundDependencyLoader] diff --git a/osu.Game/Rulesets/Edit/HitObjectComposer.cs b/osu.Game/Rulesets/Edit/HitObjectComposer.cs index 914640622b..3dd8d503ed 100644 --- a/osu.Game/Rulesets/Edit/HitObjectComposer.cs +++ b/osu.Game/Rulesets/Edit/HitObjectComposer.cs @@ -10,10 +10,10 @@ using osu.Framework.Graphics.Containers; using osu.Framework.Logging; using osu.Framework.Timing; using osu.Game.Beatmaps; -using osu.Game.Rulesets.Edit.Layers; -using osu.Game.Rulesets.Edit.Layers.Selection; using osu.Game.Rulesets.Edit.Tools; +using osu.Game.Rulesets.Objects.Drawables; using osu.Game.Rulesets.UI; +using osu.Game.Screens.Edit.Screens.Compose.Layers; using osu.Game.Screens.Edit.Screens.Compose.RadioButtons; namespace osu.Game.Rulesets.Edit @@ -49,7 +49,7 @@ namespace osu.Game.Rulesets.Edit return; } - HitObjectOverlayLayer hitObjectOverlayLayer = CreateHitObjectOverlayLayer(); + HitObjectMaskLayer hitObjectMaskLayer = new HitObjectMaskLayer(this); SelectionLayer selectionLayer = new SelectionLayer(rulesetContainer.Playfield); var layerBelowRuleset = new BorderLayer @@ -62,7 +62,7 @@ namespace osu.Game.Rulesets.Edit layerAboveRuleset.Children = new Drawable[] { selectionLayer, // Below object overlays for input - hitObjectOverlayLayer, + hitObjectMaskLayer, selectionLayer.CreateProxy() // Proxy above object overlays for selections }; @@ -106,10 +106,10 @@ namespace osu.Game.Rulesets.Edit } }; - selectionLayer.ObjectSelected += hitObjectOverlayLayer.AddOverlay; - selectionLayer.ObjectDeselected += hitObjectOverlayLayer.RemoveOverlay; - selectionLayer.SelectionCleared += hitObjectOverlayLayer.RemoveSelectionOverlay; - selectionLayer.SelectionFinished += hitObjectOverlayLayer.AddSelectionOverlay; + selectionLayer.ObjectSelected += hitObjectMaskLayer.AddOverlay; + selectionLayer.ObjectDeselected += hitObjectMaskLayer.RemoveOverlay; + selectionLayer.SelectionCleared += hitObjectMaskLayer.RemoveSelectionOverlay; + selectionLayer.SelectionFinished += hitObjectMaskLayer.AddSelectionOverlay; toolboxCollection.Items = new[] { new RadioButton("Select", () => setCompositionTool(null)) } @@ -140,14 +140,22 @@ namespace osu.Game.Rulesets.Edit protected abstract IReadOnlyList CompositionTools { get; } + /// + /// Creates a for a specific . + /// + /// The to create the overlay for. + public virtual HitObjectMask CreateMaskFor(DrawableHitObject hitObject) => null; + + /// + /// Creates a which outlines s + /// and handles all hitobject movement/pattern adjustments. + /// + /// The overlays. + public virtual SelectionBox CreateSelectionOverlay(IReadOnlyList overlays) => new SelectionBox(overlays); + /// /// Creates a which provides a layer above or below the . /// protected virtual ScalableContainer CreateLayerContainer() => new ScalableContainer { RelativeSizeAxes = Axes.Both }; - - /// - /// Creates the which overlays selected s. - /// - protected virtual HitObjectOverlayLayer CreateHitObjectOverlayLayer() => new HitObjectOverlayLayer(); } } diff --git a/osu.Game/Rulesets/Edit/Layers/Selection/HitObjectOverlay.cs b/osu.Game/Rulesets/Edit/HitObjectMask.cs similarity index 56% rename from osu.Game/Rulesets/Edit/Layers/Selection/HitObjectOverlay.cs rename to osu.Game/Rulesets/Edit/HitObjectMask.cs index 8c58275943..051b42fec6 100644 --- a/osu.Game/Rulesets/Edit/Layers/Selection/HitObjectOverlay.cs +++ b/osu.Game/Rulesets/Edit/HitObjectMask.cs @@ -4,13 +4,16 @@ using osu.Framework.Graphics.Containers; using osu.Game.Rulesets.Objects.Drawables; -namespace osu.Game.Rulesets.Edit.Layers.Selection +namespace osu.Game.Rulesets.Edit { - public class HitObjectOverlay : Container + /// + /// A mask placed above a adding editing functionality. + /// + public class HitObjectMask : Container { public readonly DrawableHitObject HitObject; - public HitObjectOverlay(DrawableHitObject hitObject) + public HitObjectMask(DrawableHitObject hitObject) { HitObject = hitObject; } diff --git a/osu.Game/Rulesets/Edit/Layers/Selection/SelectionBox.cs b/osu.Game/Rulesets/Edit/Layers/Selection/SelectionBox.cs deleted file mode 100644 index 1c25846ee3..0000000000 --- a/osu.Game/Rulesets/Edit/Layers/Selection/SelectionBox.cs +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright (c) 2007-2018 ppy Pty Ltd . -// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE - -using osu.Framework.Graphics; -using osu.Framework.Graphics.Containers; -using osu.Framework.Graphics.Primitives; -using osu.Framework.Graphics.Shapes; -using OpenTK.Graphics; - -namespace osu.Game.Rulesets.Edit.Layers.Selection -{ - /// - /// A box that represents a drag selection. - /// - public class SelectionBox : VisibilityContainer - { - public const float BORDER_RADIUS = 2; - - /// - /// Creates a new . - /// - public SelectionBox() - { - Masking = true; - BorderColour = Color4.White; - BorderThickness = BORDER_RADIUS; - - Child = new Box - { - RelativeSizeAxes = Axes.Both, - Alpha = 0.1f - }; - } - - public void SetDragRectangle(RectangleF rectangle) - { - var topLeft = Parent.ToLocalSpace(rectangle.TopLeft); - var bottomRight = Parent.ToLocalSpace(rectangle.BottomRight); - - Position = topLeft; - Size = bottomRight - topLeft; - } - - public override bool DisposeOnDeathRemoval => true; - - protected override void PopIn() => this.FadeIn(250, Easing.OutQuint); - protected override void PopOut() => this.FadeOut(250, Easing.OutQuint); - } -} diff --git a/osu.Game/Rulesets/Edit/Layers/BorderLayer.cs b/osu.Game/Screens/Edit/Screens/Compose/Layers/BorderLayer.cs similarity index 92% rename from osu.Game/Rulesets/Edit/Layers/BorderLayer.cs rename to osu.Game/Screens/Edit/Screens/Compose/Layers/BorderLayer.cs index 54c30b8d89..49cf078d36 100644 --- a/osu.Game/Rulesets/Edit/Layers/BorderLayer.cs +++ b/osu.Game/Screens/Edit/Screens/Compose/Layers/BorderLayer.cs @@ -6,7 +6,7 @@ using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Shapes; using OpenTK.Graphics; -namespace osu.Game.Rulesets.Edit.Layers +namespace osu.Game.Screens.Edit.Screens.Compose.Layers { public class BorderLayer : Container { diff --git a/osu.Game/Rulesets/Edit/Layers/Selection/HitObjectOverlayLayer.cs b/osu.Game/Screens/Edit/Screens/Compose/Layers/HitObjectMaskLayer.cs similarity index 51% rename from osu.Game/Rulesets/Edit/Layers/Selection/HitObjectOverlayLayer.cs rename to osu.Game/Screens/Edit/Screens/Compose/Layers/HitObjectMaskLayer.cs index 24d594f59a..63b5538ad7 100644 --- a/osu.Game/Rulesets/Edit/Layers/Selection/HitObjectOverlayLayer.cs +++ b/osu.Game/Screens/Edit/Screens/Compose/Layers/HitObjectMaskLayer.cs @@ -1,23 +1,25 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE -using System.Collections.Generic; using System.Linq; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; +using osu.Game.Rulesets.Edit; using osu.Game.Rulesets.Objects.Drawables; -namespace osu.Game.Rulesets.Edit.Layers.Selection +namespace osu.Game.Screens.Edit.Screens.Compose.Layers { - public class HitObjectOverlayLayer : CompositeDrawable + public class HitObjectMaskLayer : CompositeDrawable { - private readonly Container overlayContainer; + private readonly HitObjectComposer composer; + private readonly Container overlayContainer; - public HitObjectOverlayLayer() + public HitObjectMaskLayer(HitObjectComposer composer) { + this.composer = composer; RelativeSizeAxes = Axes.Both; - InternalChild = overlayContainer = new Container { RelativeSizeAxes = Axes.Both }; + InternalChild = overlayContainer = new Container { RelativeSizeAxes = Axes.Both }; } /// @@ -26,7 +28,7 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection /// The to create an overlay for. public void AddOverlay(DrawableHitObject hitObject) { - var overlay = CreateOverlayFor(hitObject); + var overlay = composer.CreateMaskFor(hitObject); if (overlay == null) return; @@ -47,27 +49,14 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection existing.Expire(); } - private SelectionOverlay currentSelectionOverlay; + private SelectionBox currentSelectionBox; - public void AddSelectionOverlay() => AddInternal(currentSelectionOverlay = CreateSelectionOverlay(overlayContainer)); + public void AddSelectionOverlay() => AddInternal(currentSelectionBox = composer.CreateSelectionOverlay(overlayContainer)); public void RemoveSelectionOverlay() { - currentSelectionOverlay?.Hide(); - currentSelectionOverlay?.Expire(); + currentSelectionBox?.Hide(); + currentSelectionBox?.Expire(); } - - /// - /// Creates a for a specific . - /// - /// The to create the overlay for. - protected virtual HitObjectOverlay CreateOverlayFor(DrawableHitObject hitObject) => null; - - /// - /// Creates a which outlines s - /// and handles all hitobject movement/pattern adjustments. - /// - /// The overlays. - protected virtual SelectionOverlay CreateSelectionOverlay(IReadOnlyList overlays) => new SelectionOverlay(overlays); } } diff --git a/osu.Game/Rulesets/Edit/Layers/Selection/SelectionOverlay.cs b/osu.Game/Screens/Edit/Screens/Compose/Layers/SelectionBox.cs similarity index 83% rename from osu.Game/Rulesets/Edit/Layers/Selection/SelectionOverlay.cs rename to osu.Game/Screens/Edit/Screens/Compose/Layers/SelectionBox.cs index c3bb5911f8..0e5d824559 100644 --- a/osu.Game/Rulesets/Edit/Layers/Selection/SelectionOverlay.cs +++ b/osu.Game/Screens/Edit/Screens/Compose/Layers/SelectionBox.cs @@ -9,25 +9,28 @@ using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Shapes; using osu.Framework.Input; using osu.Game.Graphics; +using osu.Game.Rulesets.Edit; using osu.Game.Rulesets.Edit.Types; using osu.Game.Rulesets.Objects.Drawables; using OpenTK; -namespace osu.Game.Rulesets.Edit.Layers.Selection +namespace osu.Game.Screens.Edit.Screens.Compose.Layers { /// - /// A box which encloses s. + /// A box which surrounds s and provides interactive handles, context menus etc. /// - public class SelectionOverlay : VisibilityContainer + public class SelectionBox : VisibilityContainer { - private readonly IReadOnlyList overlays; + private readonly IReadOnlyList overlays; - public SelectionOverlay(IReadOnlyList overlays) + public const float BORDER_RADIUS = 2; + + public SelectionBox(IReadOnlyList overlays) { this.overlays = overlays; Masking = true; - BorderThickness = SelectionBox.BORDER_RADIUS; + BorderThickness = BORDER_RADIUS; InternalChild = new Box { diff --git a/osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs b/osu.Game/Screens/Edit/Screens/Compose/Layers/SelectionLayer.cs similarity index 78% rename from osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs rename to osu.Game/Screens/Edit/Screens/Compose/Layers/SelectionLayer.cs index 2f8b9165c4..8c66007bb7 100644 --- a/osu.Game/Rulesets/Edit/Layers/Selection/SelectionLayer.cs +++ b/osu.Game/Screens/Edit/Screens/Compose/Layers/SelectionLayer.cs @@ -8,12 +8,14 @@ using osu.Framework.Extensions.IEnumerableExtensions; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Primitives; +using osu.Framework.Graphics.Shapes; using osu.Framework.Input; using osu.Game.Rulesets.Objects.Drawables; using osu.Game.Rulesets.UI; using OpenTK; +using OpenTK.Graphics; -namespace osu.Game.Rulesets.Edit.Layers.Selection +namespace osu.Game.Screens.Edit.Screens.Compose.Layers { public class SelectionLayer : CompositeDrawable { @@ -46,7 +48,7 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection RelativeSizeAxes = Axes.Both; } - private SelectionBox selectionBox; + private DragBox dragBox; private readonly HashSet selectedHitObjects = new HashSet(); @@ -58,20 +60,20 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection protected override bool OnDragStart(InputState state) { - AddInternal(selectionBox = new SelectionBox()); + AddInternal(dragBox = new DragBox()); return true; } protected override bool OnDrag(InputState state) { - selectionBox.Show(); + dragBox.Show(); var dragPosition = state.Mouse.NativeState.Position; var dragStartPosition = state.Mouse.NativeState.PositionMouseDown ?? dragPosition; var screenSpaceDragQuad = new Quad(dragStartPosition.X, dragStartPosition.Y, dragPosition.X - dragStartPosition.X, dragPosition.Y - dragStartPosition.Y); - selectionBox.SetDragRectangle(screenSpaceDragQuad.AABBFloat); + dragBox.SetDragRectangle(screenSpaceDragQuad.AABBFloat); selectQuad(screenSpaceDragQuad); return true; @@ -79,8 +81,8 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection protected override bool OnDragEnd(InputState state) { - selectionBox.Hide(); - selectionBox.Expire(); + dragBox.Hide(); + dragBox.Expire(); finishSelection(); @@ -197,5 +199,41 @@ namespace osu.Game.Rulesets.Edit.Layers.Selection return; SelectionFinished?.Invoke(); } + + /// + /// A box that represents a drag selection. + /// + private class DragBox : VisibilityContainer + { + /// + /// Creates a new . + /// + public DragBox() + { + Masking = true; + BorderColour = Color4.White; + BorderThickness = SelectionBox.BORDER_RADIUS; + + Child = new Box + { + RelativeSizeAxes = Axes.Both, + Alpha = 0.1f + }; + } + + public void SetDragRectangle(RectangleF rectangle) + { + var topLeft = Parent.ToLocalSpace(rectangle.TopLeft); + var bottomRight = Parent.ToLocalSpace(rectangle.BottomRight); + + Position = topLeft; + Size = bottomRight - topLeft; + } + + public override bool DisposeOnDeathRemoval => true; + + protected override void PopIn() => this.FadeIn(250, Easing.OutQuint); + protected override void PopOut() => this.FadeOut(250, Easing.OutQuint); + } } } diff --git a/osu.Game/Screens/Edit/Screens/EditorScreen.cs b/osu.Game/Screens/Edit/Screens/EditorScreen.cs index 2e654b4373..009830502e 100644 --- a/osu.Game/Screens/Edit/Screens/EditorScreen.cs +++ b/osu.Game/Screens/Edit/Screens/EditorScreen.cs @@ -8,6 +8,9 @@ using osu.Game.Beatmaps; namespace osu.Game.Screens.Edit.Screens { + /// + /// TODO: eventually make this inherit Screen and add a local scren stack inside the Editor. + /// public class EditorScreen : Container { public readonly Bindable Beatmap = new Bindable(); diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index fa99ae616a..14d2381640 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -361,10 +361,7 @@ - - - - + @@ -379,6 +376,10 @@ + + + + @@ -393,8 +394,6 @@ - - From 1eeacb7bf7bed936dfc579a7d1e22f1d0a1793ff Mon Sep 17 00:00:00 2001 From: Joseph Madamba <35318437+Joehuu@users.noreply.github.com> Date: Wed, 14 Mar 2018 01:05:19 -0700 Subject: [PATCH 416/544] Change descriptions and special section --- osu.Game.Rulesets.Mania/Mods/ManiaModKey1.cs | 3 --- osu.Game.Rulesets.Mania/Mods/ManiaModKey2.cs | 3 --- osu.Game.Rulesets.Mania/Mods/ManiaModKey3.cs | 3 --- osu.Game.Rulesets.Mania/Mods/ManiaModKey4.cs | 3 --- osu.Game.Rulesets.Mania/Mods/ManiaModKey5.cs | 3 --- osu.Game.Rulesets.Mania/Mods/ManiaModKey6.cs | 3 --- osu.Game.Rulesets.Mania/Mods/ManiaModKey7.cs | 3 --- osu.Game.Rulesets.Mania/Mods/ManiaModKey8.cs | 3 --- osu.Game.Rulesets.Mania/Mods/ManiaModKey9.cs | 3 --- osu.Game.Rulesets.Mania/Mods/ManiaModMirror.cs | 2 -- osu.Game/Overlays/Mods/ModSelectOverlay.cs | 2 +- .../Overlays/Mods/{AssistedSection.cs => SpecialSection.cs} | 4 ++-- osu.Game/Rulesets/Mods/ModDaycore.cs | 2 +- osu.Game/Rulesets/Mods/ModDoubleTime.cs | 2 +- osu.Game/Rulesets/Mods/ModNightcore.cs | 2 +- osu.Game/osu.Game.csproj | 2 +- 16 files changed, 7 insertions(+), 36 deletions(-) rename osu.Game/Overlays/Mods/{AssistedSection.cs => SpecialSection.cs} (86%) diff --git a/osu.Game.Rulesets.Mania/Mods/ManiaModKey1.cs b/osu.Game.Rulesets.Mania/Mods/ManiaModKey1.cs index e1c565ff9d..c0107e3758 100644 --- a/osu.Game.Rulesets.Mania/Mods/ManiaModKey1.cs +++ b/osu.Game.Rulesets.Mania/Mods/ManiaModKey1.cs @@ -1,8 +1,6 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE -using osu.Game.Graphics; - namespace osu.Game.Rulesets.Mania.Mods { public class ManiaModKey1 : ManiaKeyMod @@ -10,7 +8,6 @@ namespace osu.Game.Rulesets.Mania.Mods public override int KeyCount => 1; public override string Name => "One Key"; public override string ShortenedName => "1K"; - public override FontAwesome Icon => FontAwesome.fa_question; public override string Description => @"Play with one key."; } } diff --git a/osu.Game.Rulesets.Mania/Mods/ManiaModKey2.cs b/osu.Game.Rulesets.Mania/Mods/ManiaModKey2.cs index ebedd2dfdb..11dbe0ba76 100644 --- a/osu.Game.Rulesets.Mania/Mods/ManiaModKey2.cs +++ b/osu.Game.Rulesets.Mania/Mods/ManiaModKey2.cs @@ -1,8 +1,6 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE -using osu.Game.Graphics; - namespace osu.Game.Rulesets.Mania.Mods { public class ManiaModKey2 : ManiaKeyMod @@ -10,7 +8,6 @@ namespace osu.Game.Rulesets.Mania.Mods public override int KeyCount => 2; public override string Name => "Two Keys"; public override string ShortenedName => "2K"; - public override FontAwesome Icon => FontAwesome.fa_question; public override string Description => @"Play with two keys."; } } diff --git a/osu.Game.Rulesets.Mania/Mods/ManiaModKey3.cs b/osu.Game.Rulesets.Mania/Mods/ManiaModKey3.cs index f2e05d2607..94ad53d8ea 100644 --- a/osu.Game.Rulesets.Mania/Mods/ManiaModKey3.cs +++ b/osu.Game.Rulesets.Mania/Mods/ManiaModKey3.cs @@ -1,8 +1,6 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE -using osu.Game.Graphics; - namespace osu.Game.Rulesets.Mania.Mods { public class ManiaModKey3 : ManiaKeyMod @@ -10,7 +8,6 @@ namespace osu.Game.Rulesets.Mania.Mods public override int KeyCount => 3; public override string Name => "Three Keys"; public override string ShortenedName => "3K"; - public override FontAwesome Icon => FontAwesome.fa_question; public override string Description => @"Play with three keys."; } } diff --git a/osu.Game.Rulesets.Mania/Mods/ManiaModKey4.cs b/osu.Game.Rulesets.Mania/Mods/ManiaModKey4.cs index cd77943f51..d9c27c5ef1 100644 --- a/osu.Game.Rulesets.Mania/Mods/ManiaModKey4.cs +++ b/osu.Game.Rulesets.Mania/Mods/ManiaModKey4.cs @@ -1,8 +1,6 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE -using osu.Game.Graphics; - namespace osu.Game.Rulesets.Mania.Mods { public class ManiaModKey4 : ManiaKeyMod @@ -10,7 +8,6 @@ namespace osu.Game.Rulesets.Mania.Mods public override int KeyCount => 4; public override string Name => "Four Keys"; public override string ShortenedName => "4K"; - public override FontAwesome Icon => FontAwesome.fa_question; public override string Description => @"Play with four keys."; } } diff --git a/osu.Game.Rulesets.Mania/Mods/ManiaModKey5.cs b/osu.Game.Rulesets.Mania/Mods/ManiaModKey5.cs index 4a0a8a472f..e54bae93a7 100644 --- a/osu.Game.Rulesets.Mania/Mods/ManiaModKey5.cs +++ b/osu.Game.Rulesets.Mania/Mods/ManiaModKey5.cs @@ -1,8 +1,6 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE -using osu.Game.Graphics; - namespace osu.Game.Rulesets.Mania.Mods { public class ManiaModKey5 : ManiaKeyMod @@ -10,7 +8,6 @@ namespace osu.Game.Rulesets.Mania.Mods public override int KeyCount => 5; public override string Name => "Five Keys"; public override string ShortenedName => "5K"; - public override FontAwesome Icon => FontAwesome.fa_question; public override string Description => @"Play with five keys."; } } diff --git a/osu.Game.Rulesets.Mania/Mods/ManiaModKey6.cs b/osu.Game.Rulesets.Mania/Mods/ManiaModKey6.cs index 602f07a268..9c3bdf46b9 100644 --- a/osu.Game.Rulesets.Mania/Mods/ManiaModKey6.cs +++ b/osu.Game.Rulesets.Mania/Mods/ManiaModKey6.cs @@ -1,8 +1,6 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE -using osu.Game.Graphics; - namespace osu.Game.Rulesets.Mania.Mods { public class ManiaModKey6 : ManiaKeyMod @@ -10,7 +8,6 @@ namespace osu.Game.Rulesets.Mania.Mods public override int KeyCount => 6; public override string Name => "Six Keys"; public override string ShortenedName => "6K"; - public override FontAwesome Icon => FontAwesome.fa_question; public override string Description => @"Play with six keys."; } } diff --git a/osu.Game.Rulesets.Mania/Mods/ManiaModKey7.cs b/osu.Game.Rulesets.Mania/Mods/ManiaModKey7.cs index 4535bafca3..f17ac80be5 100644 --- a/osu.Game.Rulesets.Mania/Mods/ManiaModKey7.cs +++ b/osu.Game.Rulesets.Mania/Mods/ManiaModKey7.cs @@ -1,8 +1,6 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE -using osu.Game.Graphics; - namespace osu.Game.Rulesets.Mania.Mods { public class ManiaModKey7 : ManiaKeyMod @@ -10,7 +8,6 @@ namespace osu.Game.Rulesets.Mania.Mods public override int KeyCount => 7; public override string Name => "Seven Keys"; public override string ShortenedName => "7K"; - public override FontAwesome Icon => FontAwesome.fa_question; public override string Description => @"Play with seven keys."; } } diff --git a/osu.Game.Rulesets.Mania/Mods/ManiaModKey8.cs b/osu.Game.Rulesets.Mania/Mods/ManiaModKey8.cs index d99d3b1fd9..36a6fc838f 100644 --- a/osu.Game.Rulesets.Mania/Mods/ManiaModKey8.cs +++ b/osu.Game.Rulesets.Mania/Mods/ManiaModKey8.cs @@ -1,8 +1,6 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE -using osu.Game.Graphics; - namespace osu.Game.Rulesets.Mania.Mods { public class ManiaModKey8 : ManiaKeyMod @@ -10,7 +8,6 @@ namespace osu.Game.Rulesets.Mania.Mods public override int KeyCount => 8; public override string Name => "Eight Keys"; public override string ShortenedName => "8K"; - public override FontAwesome Icon => FontAwesome.fa_question; public override string Description => @"Play with eight keys."; } } diff --git a/osu.Game.Rulesets.Mania/Mods/ManiaModKey9.cs b/osu.Game.Rulesets.Mania/Mods/ManiaModKey9.cs index 16d70d7c86..10f03e2480 100644 --- a/osu.Game.Rulesets.Mania/Mods/ManiaModKey9.cs +++ b/osu.Game.Rulesets.Mania/Mods/ManiaModKey9.cs @@ -1,8 +1,6 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE -using osu.Game.Graphics; - namespace osu.Game.Rulesets.Mania.Mods { public class ManiaModKey9 : ManiaKeyMod @@ -10,7 +8,6 @@ namespace osu.Game.Rulesets.Mania.Mods public override int KeyCount => 9; public override string Name => "Nine Keys"; public override string ShortenedName => "9K"; - public override FontAwesome Icon => FontAwesome.fa_question; public override string Description => @"Play with nine keys."; } } diff --git a/osu.Game.Rulesets.Mania/Mods/ManiaModMirror.cs b/osu.Game.Rulesets.Mania/Mods/ManiaModMirror.cs index 49a47464c8..cfa5ef88b8 100644 --- a/osu.Game.Rulesets.Mania/Mods/ManiaModMirror.cs +++ b/osu.Game.Rulesets.Mania/Mods/ManiaModMirror.cs @@ -2,7 +2,6 @@ // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using osu.Framework.Extensions.IEnumerableExtensions; -using osu.Game.Graphics; using osu.Game.Rulesets.Mania.Objects; using osu.Game.Rulesets.Mania.UI; using osu.Game.Rulesets.Mods; @@ -15,7 +14,6 @@ namespace osu.Game.Rulesets.Mania.Mods { public override string Name => "Mirror"; public override string ShortenedName => "MR"; - public override FontAwesome Icon => FontAwesome.fa_question; public override ModType Type => ModType.Special; public override double ScoreMultiplier => 1; public override bool Ranked => true; diff --git a/osu.Game/Overlays/Mods/ModSelectOverlay.cs b/osu.Game/Overlays/Mods/ModSelectOverlay.cs index d0a507be98..1ad1adadcf 100644 --- a/osu.Game/Overlays/Mods/ModSelectOverlay.cs +++ b/osu.Game/Overlays/Mods/ModSelectOverlay.cs @@ -287,7 +287,7 @@ namespace osu.Game.Overlays.Mods Anchor = Anchor.TopCentre, Action = modButtonPressed, }, - new AssistedSection + new SpecialSection { RelativeSizeAxes = Axes.X, Origin = Anchor.TopCentre, diff --git a/osu.Game/Overlays/Mods/AssistedSection.cs b/osu.Game/Overlays/Mods/SpecialSection.cs similarity index 86% rename from osu.Game/Overlays/Mods/AssistedSection.cs rename to osu.Game/Overlays/Mods/SpecialSection.cs index 62c5002642..75b2462ff5 100644 --- a/osu.Game/Overlays/Mods/AssistedSection.cs +++ b/osu.Game/Overlays/Mods/SpecialSection.cs @@ -8,7 +8,7 @@ using osu.Game.Rulesets.Mods; namespace osu.Game.Overlays.Mods { - public class AssistedSection : ModSection + public class SpecialSection : ModSection { protected override Key[] ToggleKeys => new[] { Key.Z, Key.X, Key.C, Key.V, Key.B, Key.N, Key.M }; public override ModType ModType => ModType.Special; @@ -19,7 +19,7 @@ namespace osu.Game.Overlays.Mods SelectedColour = colours.BlueLight; } - public AssistedSection() + public SpecialSection() { Header = @"Special"; } diff --git a/osu.Game/Rulesets/Mods/ModDaycore.cs b/osu.Game/Rulesets/Mods/ModDaycore.cs index 07e55e00b8..da4263875b 100644 --- a/osu.Game/Rulesets/Mods/ModDaycore.cs +++ b/osu.Game/Rulesets/Mods/ModDaycore.cs @@ -12,7 +12,7 @@ namespace osu.Game.Rulesets.Mods public override string Name => "Daycore"; public override string ShortenedName => "DC"; public override FontAwesome Icon => FontAwesome.fa_question; - public override string Description => "whoaaaaa..."; + public override string Description => "Whoaaaaa..."; public override void ApplyToClock(IAdjustableClock clock) { diff --git a/osu.Game/Rulesets/Mods/ModDoubleTime.cs b/osu.Game/Rulesets/Mods/ModDoubleTime.cs index 406fa3ccf2..6225a6feee 100644 --- a/osu.Game/Rulesets/Mods/ModDoubleTime.cs +++ b/osu.Game/Rulesets/Mods/ModDoubleTime.cs @@ -13,7 +13,7 @@ namespace osu.Game.Rulesets.Mods public override string ShortenedName => "DT"; public override FontAwesome Icon => FontAwesome.fa_osu_mod_doubletime; public override ModType Type => ModType.DifficultyIncrease; - public override string Description => "Zoooooooooom"; + public override string Description => "Zoooooooooom..."; public override bool Ranked => true; public override Type[] IncompatibleMods => new[] { typeof(ModHalfTime) }; diff --git a/osu.Game/Rulesets/Mods/ModNightcore.cs b/osu.Game/Rulesets/Mods/ModNightcore.cs index ad4df55b91..c2925f440f 100644 --- a/osu.Game/Rulesets/Mods/ModNightcore.cs +++ b/osu.Game/Rulesets/Mods/ModNightcore.cs @@ -12,7 +12,7 @@ namespace osu.Game.Rulesets.Mods public override string Name => "Nightcore"; public override string ShortenedName => "NC"; public override FontAwesome Icon => FontAwesome.fa_osu_mod_nightcore; - public override string Description => "uguuuuuuuu"; + public override string Description => "Uguuuuuuuu..."; public override void ApplyToClock(IAdjustableClock clock) { diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index 7214a31639..21a7ba76f6 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -553,7 +553,7 @@ - + From 25f738c4aeeb154c62d20202850bedeba14e33e0 Mon Sep 17 00:00:00 2001 From: TocoToucan Date: Wed, 14 Mar 2018 12:57:55 +0300 Subject: [PATCH 417/544] Do not support bmp screenshots --- osu.Game/Configuration/OsuConfigManager.cs | 2 +- osu.Game/Configuration/ScreenshotFormat.cs | 1 - osu.Game/Graphics/ScreenshotManager.cs | 3 --- 3 files changed, 1 insertion(+), 5 deletions(-) diff --git a/osu.Game/Configuration/OsuConfigManager.cs b/osu.Game/Configuration/OsuConfigManager.cs index dd17f2c4aa..70260b349e 100644 --- a/osu.Game/Configuration/OsuConfigManager.cs +++ b/osu.Game/Configuration/OsuConfigManager.cs @@ -83,7 +83,7 @@ namespace osu.Game.Configuration Set(OsuSetting.Version, string.Empty); - Set(OsuSetting.ScreenshotFormat, ScreenshotFormat.Png); + Set(OsuSetting.ScreenshotFormat, ScreenshotFormat.Jpg); } public OsuConfigManager(Storage storage) : base(storage) diff --git a/osu.Game/Configuration/ScreenshotFormat.cs b/osu.Game/Configuration/ScreenshotFormat.cs index 1bc3013af9..b9309fae3a 100644 --- a/osu.Game/Configuration/ScreenshotFormat.cs +++ b/osu.Game/Configuration/ScreenshotFormat.cs @@ -7,7 +7,6 @@ namespace osu.Game.Configuration { public enum ScreenshotFormat { - Bmp = 0, // TODO: Figure out the best way to hide this from the dropdown [Description("JPG (web-friendly)")] Jpg = 1, [Description("PNG (lossless)")] diff --git a/osu.Game/Graphics/ScreenshotManager.cs b/osu.Game/Graphics/ScreenshotManager.cs index 7304d653cd..e7f21d11fa 100644 --- a/osu.Game/Graphics/ScreenshotManager.cs +++ b/osu.Game/Graphics/ScreenshotManager.cs @@ -32,9 +32,6 @@ namespace osu.Game.Graphics switch (screenshotFormat.Value) { - case ScreenshotFormat.Bmp: - screenshotBitmap.Save(stream, ImageFormat.Bmp); - break; case ScreenshotFormat.Png: screenshotBitmap.Save(stream, ImageFormat.Png); break; From a438e45434502d7c239176b558d2baec228b4414 Mon Sep 17 00:00:00 2001 From: FreezyLemon Date: Wed, 14 Mar 2018 12:33:08 +0100 Subject: [PATCH 418/544] make SelectTypes set mods instead of only adding new ones also made the method actually take types as parameter to make it consistent --- osu.Game/Overlays/Mods/ModSection.cs | 18 +++++++++--------- osu.Game/Overlays/Mods/ModSelectOverlay.cs | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/osu.Game/Overlays/Mods/ModSection.cs b/osu.Game/Overlays/Mods/ModSection.cs index 03c1f0468c..0986931d00 100644 --- a/osu.Game/Overlays/Mods/ModSection.cs +++ b/osu.Game/Overlays/Mods/ModSection.cs @@ -114,19 +114,19 @@ namespace osu.Game.Overlays.Mods } /// - /// Select one or more mods in this section. + /// Select one or more mods in this section and deselects all other ones. /// - /// The types of s which should be deselected. - public void SelectTypes(IEnumerable mods) + /// The types of s which should be selected. + public void SelectTypes(IEnumerable modTypes) { foreach (var button in buttons) { - for (int i = 0; i < button.Mods.Length; i++) - { - foreach (var mod in mods) - if (mod.GetType().IsInstanceOfType(button.Mods[i])) - button.SelectAt(i); - } + int i = Array.FindIndex(button.Mods, m => modTypes.Any(t => t.IsInstanceOfType(m))); + + if (i >= 0) + button.SelectAt(i); + else + button.Deselect(); } } diff --git a/osu.Game/Overlays/Mods/ModSelectOverlay.cs b/osu.Game/Overlays/Mods/ModSelectOverlay.cs index d0a507be98..cc4b354fa2 100644 --- a/osu.Game/Overlays/Mods/ModSelectOverlay.cs +++ b/osu.Game/Overlays/Mods/ModSelectOverlay.cs @@ -76,7 +76,7 @@ namespace osu.Game.Overlays.Mods private void selectedModsChanged(IEnumerable obj) { foreach (ModSection section in ModSectionsContainer.Children) - section.SelectTypes(obj); + section.SelectTypes(obj.Select(m => m.GetType()).ToList()); updateMods(); } From 070decf8902eb83025ba7ed2009fe3587649be5f Mon Sep 17 00:00:00 2001 From: FreezyLemon Date: Wed, 14 Mar 2018 12:38:22 +0100 Subject: [PATCH 419/544] small code cleanups --- osu.Game/Overlays/Mods/ModSection.cs | 31 ++++++++++------------------ 1 file changed, 11 insertions(+), 20 deletions(-) diff --git a/osu.Game/Overlays/Mods/ModSection.cs b/osu.Game/Overlays/Mods/ModSection.cs index 0986931d00..4765787caf 100644 --- a/osu.Game/Overlays/Mods/ModSection.cs +++ b/osu.Game/Overlays/Mods/ModSection.cs @@ -27,14 +27,8 @@ namespace osu.Game.Overlays.Mods public string Header { - get - { - return headerLabel.Text; - } - set - { - headerLabel.Text = value; - } + get => headerLabel.Text; + set => headerLabel.Text = value; } public IEnumerable SelectedMods => buttons.Select(b => b.SelectedMod).Where(m => m != null); @@ -47,12 +41,12 @@ namespace osu.Game.Overlays.Mods { if (m == null) return new ModButtonEmpty(); - else - return new ModButton(m) - { - SelectedColour = selectedColour, - SelectionChanged = Action, - }; + + return new ModButton(m) + { + SelectedColour = selectedColour, + SelectionChanged = Action, + }; }).ToArray(); ButtonsContainer.Children = modContainers; @@ -65,10 +59,7 @@ namespace osu.Game.Overlays.Mods private Color4 selectedColour = Color4.White; public Color4 SelectedColour { - get - { - return selectedColour; - } + get => selectedColour; set { if (value == selectedColour) return; @@ -102,13 +93,13 @@ namespace osu.Game.Overlays.Mods { Mod selected = button.SelectedMod; if (selected == null) continue; - foreach (Type type in modTypes) + foreach (var type in modTypes) if (type.IsInstanceOfType(selected)) { if (immediate) button.Deselect(); else - Scheduler.AddDelayed(() => button.Deselect(), delay += 50); + Scheduler.AddDelayed(button.Deselect, delay += 50); } } } From 0da3ae0944a8fe4d247c3bd39d997036679c23cd Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Wed, 14 Mar 2018 20:52:48 +0900 Subject: [PATCH 420/544] Add some basic tests + fixes to seek/seekforward functionality --- .../Visual/TestCaseEditorSeekSnapping.cs | 325 ++++++++++++++++++ osu.Game.Tests/osu.Game.Tests.csproj | 1 + osu.Game/Rulesets/Edit/HitObjectComposer.cs | 50 ++- 3 files changed, 364 insertions(+), 12 deletions(-) create mode 100644 osu.Game.Tests/Visual/TestCaseEditorSeekSnapping.cs diff --git a/osu.Game.Tests/Visual/TestCaseEditorSeekSnapping.cs b/osu.Game.Tests/Visual/TestCaseEditorSeekSnapping.cs new file mode 100644 index 0000000000..36319c0f71 --- /dev/null +++ b/osu.Game.Tests/Visual/TestCaseEditorSeekSnapping.cs @@ -0,0 +1,325 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using System; +using System.Collections.Generic; +using System.Linq; +using osu.Framework.Allocation; +using osu.Framework.Audio.Track; +using osu.Framework.Extensions.Color4Extensions; +using osu.Framework.Graphics; +using osu.Framework.Graphics.Containers; +using osu.Framework.Graphics.Shapes; +using osu.Game.Beatmaps; +using osu.Game.Beatmaps.ControlPoints; +using osu.Game.Rulesets; +using osu.Game.Rulesets.Edit; +using osu.Game.Rulesets.Edit.Tools; +using osu.Game.Rulesets.Osu; +using osu.Game.Rulesets.Osu.Objects; +using osu.Game.Tests.Beatmaps; +using OpenTK; +using OpenTK.Graphics; + +namespace osu.Game.Tests.Visual +{ + public class TestCaseEditorSeekSnapping : OsuTestCase + { + public override IReadOnlyList RequiredTypes => new[] { typeof(HitObjectComposer) }; + + private Track track; + private HitObjectComposer composer; + + [BackgroundDependencyLoader] + private void load(OsuGameBase osuGame) + { + var testBeatmap = new Beatmap + { + ControlPointInfo = new ControlPointInfo + { + TimingPoints = + { + new TimingControlPoint { Time = 0, BeatLength = 200}, + new TimingControlPoint { Time = 100, BeatLength = 400 }, + new TimingControlPoint { Time = 175, BeatLength = 800 }, + new TimingControlPoint { Time = 350, BeatLength = 200 }, + new TimingControlPoint { Time = 450, BeatLength = 100 } + } + }, + HitObjects = + { + new HitCircle { StartTime = 0 }, + new HitCircle { StartTime = 5000 } + } + }; + + osuGame.Beatmap.Value = new TestWorkingBeatmap(testBeatmap); + track = osuGame.Beatmap.Value.Track; + + Child = new GridContainer + { + RelativeSizeAxes = Axes.Both, + Content = new[] + { + new Drawable[] { composer = new TestHitObjectComposer(new OsuRuleset()) }, + new Drawable[] { new TimingPointVisualiser(testBeatmap, track) }, + }, + RowDimensions = new[] + { + new Dimension(GridSizeMode.Distributed), + new Dimension(GridSizeMode.AutoSize), + } + }; + +// testSeekNoSnapping(); +// testSeekSnappingOnBeat(); +// testSeekSnappingInBetweenBeat(); +// testSeekForwardNoSnapping(); + testSeekForwardSnappingOnBeat(); + } + + /// + /// Tests whether time is correctly seeked without snapping. + /// + private void testSeekNoSnapping() + { + reset(); + + // Forwards + AddStep("Seek(0)", () => composer.SeekTo(0)); + AddAssert("Time = 0", () => track.CurrentTime == 0); + AddStep("Seek(33)", () => composer.SeekTo(33)); + AddAssert("Time = 33", () => track.CurrentTime == 33); + AddStep("Seek(89)", () => composer.SeekTo(89)); + AddAssert("Time = 89", () => track.CurrentTime == 89); + + // Backwards + AddStep("Seek(25)", () => composer.SeekTo(25)); + AddAssert("Time = 25", () => track.CurrentTime == 25); + AddStep("Seek(0)", () => composer.SeekTo(0)); + AddAssert("Time = 0", () => track.CurrentTime == 0); + } + + /// + /// Tests whether seeking to exact beat times puts us on the beat time. + /// These are the white/yellow ticks on the graph. + /// + private void testSeekSnappingOnBeat() + { + reset(); + + AddStep("Seek(0), Snap", () => composer.SeekTo(0, true)); + AddAssert("Time = 0", () => track.CurrentTime == 0); + AddStep("Seek(50), Snap", () => composer.SeekTo(50, true)); + AddAssert("Time = 50", () => track.CurrentTime == 50); + AddStep("Seek(100), Snap", () => composer.SeekTo(100, true)); + AddAssert("Time = 100", () => track.CurrentTime == 100); + AddStep("Seek(175), Snap", () => composer.SeekTo(175, true)); + AddAssert("Time = 175", () => track.CurrentTime == 175); + AddStep("Seek(350), Snap", () => composer.SeekTo(350, true)); + AddAssert("Time = 350", () => track.CurrentTime == 350); + AddStep("Seek(400), Snap", () => composer.SeekTo(400, true)); + AddAssert("Time = 400", () => track.CurrentTime == 400); + AddStep("Seek(450), Snap", () => composer.SeekTo(450, true)); + AddAssert("Time = 450", () => track.CurrentTime == 450); + } + + /// + /// Tests whether seeking to somewhere in the middle between beats puts us on the expected beats. + /// For example, snapping between a white/yellow beat should put us on either the yellow or white, depending on which one we're closer too. + /// If + /// + private void testSeekSnappingInBetweenBeat() + { + reset(); + + AddStep("Seek(24), Snap", () => composer.SeekTo(24, true)); + AddAssert("Time = 0", () => track.CurrentTime == 0); + AddStep("Seek(26), Snap", () => composer.SeekTo(26, true)); + AddAssert("Time = 50", () => track.CurrentTime == 50); + AddStep("Seek(150), Snap", () => composer.SeekTo(150, true)); + AddAssert("Time = 100", () => track.CurrentTime == 100); + AddStep("Seek(170), Snap", () => composer.SeekTo(170, true)); + AddAssert("Time = 175", () => track.CurrentTime == 175); + AddStep("Seek(274), Snap", () => composer.SeekTo(274, true)); + AddAssert("Time = 175", () => track.CurrentTime == 175); + AddStep("Seek(276), Snap", () => composer.SeekTo(276, true)); + AddAssert("Time = 350", () => track.CurrentTime == 350); + } + + /// + /// Tests that when seeking forward with no beat snapping, beats are never snapped to, nor the next timing point (if we've skipped it). + /// + private void testSeekForwardNoSnapping() + { + reset(); + + AddStep("SeekForward", () => composer.SeekForward()); + AddAssert("Time = 50", () => track.CurrentTime == 50); + AddStep("SeekForward", () => composer.SeekForward()); + AddAssert("Time = 100", () => track.CurrentTime == 100); + AddStep("SeekForward", () => composer.SeekForward()); + AddAssert("Time = 200", () => track.CurrentTime == 200); + AddStep("SeekForward", () => composer.SeekForward()); + AddAssert("Time = 400", () => track.CurrentTime == 400); + AddStep("SeekForward", () => composer.SeekForward()); + AddAssert("Time = 450", () => track.CurrentTime == 450); + } + + /// + /// Tests that when seeking forward with beat snapping, all beats are snapped to and timing points are never skipped. + /// + private void testSeekForwardSnappingOnBeat() + { + reset(); + + AddStep("SeekForward", () => composer.SeekForward(true)); + AddAssert("Time = 50", () => track.CurrentTime == 50); + AddStep("SeekForward", () => composer.SeekForward(true)); + AddAssert("Time = 100", () => track.CurrentTime == 100); + AddStep("SeekForward", () => composer.SeekForward(true)); + AddAssert("Time = 175", () => track.CurrentTime == 175); + AddStep("SeekForward", () => composer.SeekForward(true)); + AddAssert("Time = 350", () => track.CurrentTime == 350); + AddStep("SeekForward", () => composer.SeekForward(true)); + AddAssert("Time = 400", () => track.CurrentTime == 400); + AddStep("SeekForward", () => composer.SeekForward(true)); + AddAssert("Time = 450", () => track.CurrentTime == 450); + } + + /// + /// Tests that when seeking forward from in-between two beats, the next beat or timing point is snapped to, and no beats are skipped. + /// + private void testSeekForwardSnappingFromInBetweenBeat() + { + reset(); + + AddStep("Seek(25)", () => composer.SeekTo(25)); + AddStep("SeekForward", () => composer.SeekForward(true)); + AddAssert("Time = 50", () => track.CurrentTime == 50); + } + + private void reset() + { + AddStep("Reset", () => composer.SeekTo(0)); + } + + private class TestHitObjectComposer : HitObjectComposer + { + public TestHitObjectComposer(Ruleset ruleset) + : base(ruleset) + { + } + + protected override IReadOnlyList CompositionTools => new ICompositionTool[0]; + } + + private class TimingPointVisualiser : CompositeDrawable + { + private readonly Track track; + + private readonly Drawable tracker; + + public TimingPointVisualiser(Beatmap beatmap, Track track) + { + this.track = track; + + Anchor = Anchor.Centre; + Origin = Anchor.Centre; + + RelativeSizeAxes = Axes.X; + AutoSizeAxes = Axes.Y; + + Width = 0.75f; + + FillFlowContainer timelineContainer; + + InternalChildren = new Drawable[] + { + new Box + { + Name = "Background", + RelativeSizeAxes = Axes.Both, + Colour = Color4.Black.Opacity(85f) + }, + new Container + { + Name = "Tracks", + RelativeSizeAxes = Axes.X, + AutoSizeAxes = Axes.Y, + Padding = new MarginPadding(15), + Children = new[] + { + tracker = new Box + { + Anchor = Anchor.CentreLeft, + Origin = Anchor.Centre, + RelativeSizeAxes = Axes.Y, + RelativePositionAxes = Axes.X, + Width = 2, + Colour = Color4.Red, + }, + timelineContainer = new FillFlowContainer + { + RelativeSizeAxes = Axes.X, + AutoSizeAxes = Axes.Y, + Spacing = new Vector2(0, 5) + }, + } + } + }; + + var timingPoints = beatmap.ControlPointInfo.TimingPoints; + + for (int i = 0; i < timingPoints.Count; i++) + { + TimingControlPoint next = i == timingPoints.Count - 1 ? null : timingPoints[i + 1]; + timelineContainer.Add(new TimingPointTimeline(timingPoints[i], next?.Time ?? beatmap.HitObjects.Last().StartTime, track.Length)); + } + } + + protected override void Update() + { + base.Update(); + + tracker.X = (float)(track.CurrentTime / track.Length); + } + + private class TimingPointTimeline : CompositeDrawable + { + public TimingPointTimeline(TimingControlPoint timingPoint, double endTime, double fullDuration) + { + RelativeSizeAxes = Axes.X; + AutoSizeAxes = Axes.Y; + + Box createMainTick(double time) => new Box + { + Anchor = Anchor.BottomLeft, + Origin = Anchor.BottomCentre, + RelativePositionAxes = Axes.X, + X = (float)(time / fullDuration), + Height = 10, + Width = 2 + }; + + Box createBeatTick(double time) => new Box + { + Anchor = Anchor.BottomLeft, + Origin = Anchor.BottomCentre, + RelativePositionAxes = Axes.X, + X = (float)(time / fullDuration), + Height = 5, + Width = 2, + Colour = time > endTime ? Color4.Gray : Color4.Yellow + }; + + AddInternal(createMainTick(timingPoint.Time)); + AddInternal(createMainTick(endTime)); + + for (double t = timingPoint.Time + timingPoint.BeatLength / 4; t < fullDuration; t += timingPoint.BeatLength / 4) + AddInternal(createBeatTick(t)); + } + } + } + } +} diff --git a/osu.Game.Tests/osu.Game.Tests.csproj b/osu.Game.Tests/osu.Game.Tests.csproj index ed9580211b..80efb0672e 100644 --- a/osu.Game.Tests/osu.Game.Tests.csproj +++ b/osu.Game.Tests/osu.Game.Tests.csproj @@ -130,6 +130,7 @@ + diff --git a/osu.Game/Rulesets/Edit/HitObjectComposer.cs b/osu.Game/Rulesets/Edit/HitObjectComposer.cs index be4fb2f1a1..952b553835 100644 --- a/osu.Game/Rulesets/Edit/HitObjectComposer.cs +++ b/osu.Game/Rulesets/Edit/HitObjectComposer.cs @@ -153,13 +153,43 @@ namespace osu.Game.Rulesets.Edit /// Seeks the current time one beat-snapped beat-length backwards. /// /// Whether to snap to the closest beat. - public void SeekBackward(bool snapped) => seek(-1, snapped); + public void SeekBackward(bool snapped = false) => seek(-1, snapped); /// /// Seeks the current time one beat-snapped beat-length forwards. /// /// Whether to snap to the closest beat. - public void SeekForward(bool snapped) => seek(1, snapped); + public void SeekForward(bool snapped = false) => seek(1, snapped); + + public void SeekTo(double seekTime, bool snapped = false) + { + // Todo: This should not be a constant, but feels good for now + const int beat_snap_divisor = 4; + + if (!snapped) + { + adjustableClock.Seek(seekTime); + return; + } + + var timingPoint = beatmap.Value.Beatmap.ControlPointInfo.TimingPointAt(seekTime); + double beatSnapLength = timingPoint.BeatLength / beat_snap_divisor; + + // We will be snapping to beats within the timing point + seekTime -= timingPoint.Time; + + // Determine the index from the current timing point of the closest beat to seekTime + int closestBeat = (int)Math.Round(seekTime / beatSnapLength); + seekTime = timingPoint.Time + closestBeat * beatSnapLength; + + // Depending on beatSnapLength, we may snap to a beat that is beyond timingPoint's end time, but we want to instead snap to + // the next timing point's start time + var nextTimingPoint = beatmap.Value.Beatmap.ControlPointInfo.TimingPoints.FirstOrDefault(t => t.Time > timingPoint.Time); + if (seekTime > nextTimingPoint?.Time) + seekTime = nextTimingPoint.Time; + + adjustableClock.Seek(seekTime); + } private void seek(int direction, bool snapped) { @@ -181,18 +211,14 @@ namespace osu.Game.Rulesets.Edit var firstTimingPoint = beatmap.Value.Beatmap.ControlPointInfo.TimingPoints.First(); if (currentTimingPoint != firstTimingPoint && seekTime < currentTimingPoint.Time) - seekTime = currentTimingPoint.Time - 1; // -1 to be in the prior timing point's boundary - else if (nextTimingPoint != null && seekTime >= nextTimingPoint.Time) - seekTime = nextTimingPoint.Time + 1; // +1 to be in the next timing point's boundary + adjustableClock.Seek(currentTimingPoint.Time - 1); // -1 to be in the prior timing point's boundary + else if (seekTime >= nextTimingPoint?.Time) + adjustableClock.Seek(nextTimingPoint.Time); // +1 to be in the next timing point's boundary else { - // We will be snapping to beats within the current timing point + // We will be snapping to beats within the timing point seekTime -= currentTimingPoint.Time; - // When rounding below, we need to ensure that abs(seekTime - currentTime) > seekAmount - // This is done by adding direction - a small offset, to seekTime - seekTime += direction; - // Determine the index from the current timing point of the closest beat to seekTime, accounting for scrolling direction int closestBeat; if (direction > 0) @@ -201,9 +227,9 @@ namespace osu.Game.Rulesets.Edit closestBeat = (int)Math.Ceiling(seekTime / seekAmount); seekTime = currentTimingPoint.Time + closestBeat * seekAmount; - } - adjustableClock.Seek(seekTime); + adjustableClock.Seek(seekTime); + } } private void setCompositionTool(ICompositionTool tool) => CurrentTool = tool; From f693fbf92d4bddc425c085ae8deb194664691f26 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Wed, 14 Mar 2018 23:08:43 +0900 Subject: [PATCH 421/544] Add forward snapping from inbetween beat test --- .../Visual/TestCaseEditorSeekSnapping.cs | 27 +++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/osu.Game.Tests/Visual/TestCaseEditorSeekSnapping.cs b/osu.Game.Tests/Visual/TestCaseEditorSeekSnapping.cs index 36319c0f71..4757e6c857 100644 --- a/osu.Game.Tests/Visual/TestCaseEditorSeekSnapping.cs +++ b/osu.Game.Tests/Visual/TestCaseEditorSeekSnapping.cs @@ -75,7 +75,8 @@ namespace osu.Game.Tests.Visual // testSeekSnappingOnBeat(); // testSeekSnappingInBetweenBeat(); // testSeekForwardNoSnapping(); - testSeekForwardSnappingOnBeat(); +// testSeekForwardSnappingOnBeat(); + testSeekForwardSnappingFromInBetweenBeat(); } /// @@ -189,14 +190,36 @@ namespace osu.Game.Tests.Visual /// /// Tests that when seeking forward from in-between two beats, the next beat or timing point is snapped to, and no beats are skipped. + /// This will also test being extremely close to the next beat/timing point, to ensure rounding is not an issue. /// private void testSeekForwardSnappingFromInBetweenBeat() { reset(); - AddStep("Seek(25)", () => composer.SeekTo(25)); + AddStep("Seek(49)", () => composer.SeekTo(49)); AddStep("SeekForward", () => composer.SeekForward(true)); AddAssert("Time = 50", () => track.CurrentTime == 50); + AddStep("Seek(49.999)", () => composer.SeekTo(49.999)); + AddStep("SeekForward", () => composer.SeekForward(true)); + AddAssert("Time = 50", () => track.CurrentTime == 50); + AddStep("Seek(99)", () => composer.SeekTo(99)); + AddStep("SeekForward", () => composer.SeekForward(true)); + AddAssert("Time = 100", () => track.CurrentTime == 100); + AddStep("Seek(99.999)", () => composer.SeekTo(99.999)); + AddStep("SeekForward", () => composer.SeekForward(true)); + AddAssert("Time = 100", () => track.CurrentTime == 100); + AddStep("Seek(174)", () => composer.SeekTo(174)); + AddStep("SeekForward", () => composer.SeekForward(true)); + AddAssert("Time = 175", () => track.CurrentTime == 175); + AddStep("Seek(349)", () => composer.SeekTo(349)); + AddStep("SeekForward", () => composer.SeekForward(true)); + AddAssert("Time = 350", () => track.CurrentTime == 350); + AddStep("Seek(399)", () => composer.SeekTo(399)); + AddStep("SeekForward", () => composer.SeekForward(true)); + AddAssert("Time = 400", () => track.CurrentTime == 400); + AddStep("Seek(449)", () => composer.SeekTo(449)); + AddStep("SeekForward", () => composer.SeekForward(true)); + AddAssert("Time = 450", () => track.CurrentTime == 450); } private void reset() From 5a1af062d31c01dd9ac1830fa75c584e8f7f4b6e Mon Sep 17 00:00:00 2001 From: TocoToucan Date: Wed, 14 Mar 2018 22:55:24 +0300 Subject: [PATCH 422/544] Handle GlobalAction.TakeScreenshot in ScreenshotManager --- osu.Game/Graphics/ScreenshotManager.cs | 21 +++++++++++++++++++-- osu.Game/OsuGame.cs | 7 +------ 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/osu.Game/Graphics/ScreenshotManager.cs b/osu.Game/Graphics/ScreenshotManager.cs index e7f21d11fa..8e0c2cce50 100644 --- a/osu.Game/Graphics/ScreenshotManager.cs +++ b/osu.Game/Graphics/ScreenshotManager.cs @@ -3,13 +3,16 @@ using System.Drawing.Imaging; using System.IO; using osu.Framework.Allocation; using osu.Framework.Configuration; -using osu.Framework.Graphics; +using osu.Framework.Graphics.Containers; +using osu.Framework.Input; +using osu.Framework.Input.Bindings; using osu.Framework.Platform; using osu.Game.Configuration; +using osu.Game.Input.Bindings; namespace osu.Game.Graphics { - public class ScreenshotManager : Drawable + public class ScreenshotManager : Container, IKeyBindingHandler, IHandleGlobalInput { private Bindable screenshotFormat; private GameHost host; @@ -24,6 +27,20 @@ namespace osu.Game.Graphics screenshotFormat = config.GetBindable(OsuSetting.ScreenshotFormat); } + public bool OnPressed(GlobalAction action) + { + switch (action) + { + case GlobalAction.TakeScreenshot: + TakeScreenshot(); + return true; + } + + return false; + } + + public bool OnReleased(GlobalAction action) => false; + public void TakeScreenshot() { host.TakeScreenshot(screenshotBitmap => diff --git a/osu.Game/OsuGame.cs b/osu.Game/OsuGame.cs index 18ea093e97..44946dd23d 100644 --- a/osu.Game/OsuGame.cs +++ b/osu.Game/OsuGame.cs @@ -211,9 +211,6 @@ namespace osu.Game BeatmapManager.GetStableStorage = GetStorageForStableInstall; - screenshotManager = new ScreenshotManager(); - Add(screenshotManager); - AddRange(new Drawable[] { new VolumeControlReceptor @@ -223,6 +220,7 @@ namespace osu.Game }, mainContent = new Container { RelativeSizeAxes = Axes.Both }, overlayContent = new Container { RelativeSizeAxes = Axes.Both, Depth = float.MinValue }, + screenshotManager = new ScreenshotManager() }); loadComponentSingleFile(screenStack = new Loader(), d => @@ -436,9 +434,6 @@ namespace osu.Game case GlobalAction.ToggleDirect: direct.ToggleVisibility(); return true; - case GlobalAction.TakeScreenshot: - screenshotManager.TakeScreenshot(); - return true; } return false; From a42035f49456fe118201a4b92249f0958d9fed2b Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 15 Mar 2018 13:41:06 +0900 Subject: [PATCH 423/544] Make DrawableHitObject a CompositeDrawable No reason for it to be a container. --- .../Objects/Drawable/DrawableBananaShower.cs | 2 +- osu.Game.Rulesets.Catch/Objects/Drawable/DrawableDroplet.cs | 2 +- osu.Game.Rulesets.Catch/Objects/Drawable/DrawableFruit.cs | 4 ++-- .../Objects/Drawable/DrawableJuiceStream.cs | 2 +- .../Objects/Drawables/DrawableBarLine.cs | 6 +++--- .../Objects/Drawables/DrawableHoldNote.cs | 4 ++-- .../Objects/Drawables/DrawableHoldNoteTick.cs | 2 +- osu.Game.Rulesets.Mania/Objects/Drawables/DrawableNote.cs | 2 +- .../Objects/Drawables/DrawableHitCircle.cs | 2 +- .../Objects/Drawables/DrawableRepeatPoint.cs | 2 +- osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs | 2 +- .../Objects/Drawables/DrawableSliderTick.cs | 2 +- osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSpinner.cs | 2 +- .../Objects/Drawables/DrawableBarLine.cs | 2 +- .../Objects/Drawables/DrawableBarLineMajor.cs | 4 ++-- .../Objects/Drawables/DrawableDrumRollTick.cs | 2 +- osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableHit.cs | 2 +- osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableSwell.cs | 4 ++-- .../Objects/Drawables/DrawableTaikoHitObject.cs | 2 +- osu.Game.Tests/Visual/TestCaseScrollingHitObjects.cs | 6 +++--- osu.Game/Rulesets/Objects/Drawables/DrawableHitObject.cs | 2 +- 21 files changed, 29 insertions(+), 29 deletions(-) diff --git a/osu.Game.Rulesets.Catch/Objects/Drawable/DrawableBananaShower.cs b/osu.Game.Rulesets.Catch/Objects/Drawable/DrawableBananaShower.cs index 7b0370ef88..3c6ec0703d 100644 --- a/osu.Game.Rulesets.Catch/Objects/Drawable/DrawableBananaShower.cs +++ b/osu.Game.Rulesets.Catch/Objects/Drawable/DrawableBananaShower.cs @@ -22,7 +22,7 @@ namespace osu.Game.Rulesets.Catch.Objects.Drawable Origin = Anchor.BottomLeft; X = 0; - Child = bananaContainer = new Container { RelativeSizeAxes = Axes.Both }; + InternalChild = bananaContainer = new Container { RelativeSizeAxes = Axes.Both }; foreach (var b in s.NestedHitObjects.Cast()) AddNested(getVisualRepresentation?.Invoke(b)); diff --git a/osu.Game.Rulesets.Catch/Objects/Drawable/DrawableDroplet.cs b/osu.Game.Rulesets.Catch/Objects/Drawable/DrawableDroplet.cs index c2b0552ab3..f05f51052d 100644 --- a/osu.Game.Rulesets.Catch/Objects/Drawable/DrawableDroplet.cs +++ b/osu.Game.Rulesets.Catch/Objects/Drawable/DrawableDroplet.cs @@ -22,7 +22,7 @@ namespace osu.Game.Rulesets.Catch.Objects.Drawable [BackgroundDependencyLoader] private void load() { - Child = new Pulp + InternalChild = new Pulp { AccentColour = AccentColour, Size = Size diff --git a/osu.Game.Rulesets.Catch/Objects/Drawable/DrawableFruit.cs b/osu.Game.Rulesets.Catch/Objects/Drawable/DrawableFruit.cs index 93a1483f6f..dcad82130e 100644 --- a/osu.Game.Rulesets.Catch/Objects/Drawable/DrawableFruit.cs +++ b/osu.Game.Rulesets.Catch/Objects/Drawable/DrawableFruit.cs @@ -33,7 +33,7 @@ namespace osu.Game.Rulesets.Catch.Objects.Drawable [BackgroundDependencyLoader] private void load() { - Children = new[] + InternalChildren = new[] { createPulp(HitObject.VisualRepresentation), border = new Circle @@ -65,7 +65,7 @@ namespace osu.Game.Rulesets.Catch.Objects.Drawable if (HitObject.HyperDash) { - Add(new Pulp + AddInternal(new Pulp { RelativePositionAxes = Axes.Both, Anchor = Anchor.Centre, diff --git a/osu.Game.Rulesets.Catch/Objects/Drawable/DrawableJuiceStream.cs b/osu.Game.Rulesets.Catch/Objects/Drawable/DrawableJuiceStream.cs index 965ca62674..0a2763cbea 100644 --- a/osu.Game.Rulesets.Catch/Objects/Drawable/DrawableJuiceStream.cs +++ b/osu.Game.Rulesets.Catch/Objects/Drawable/DrawableJuiceStream.cs @@ -20,7 +20,7 @@ namespace osu.Game.Rulesets.Catch.Objects.Drawable Origin = Anchor.BottomLeft; X = 0; - Child = dropletContainer = new Container { RelativeSizeAxes = Axes.Both, }; + InternalChild = dropletContainer = new Container { RelativeSizeAxes = Axes.Both, }; foreach (var o in s.NestedHitObjects.Cast()) AddNested(getVisualRepresentation?.Invoke(o)); diff --git a/osu.Game.Rulesets.Mania/Objects/Drawables/DrawableBarLine.cs b/osu.Game.Rulesets.Mania/Objects/Drawables/DrawableBarLine.cs index 91c83a62f0..83d67c855e 100644 --- a/osu.Game.Rulesets.Mania/Objects/Drawables/DrawableBarLine.cs +++ b/osu.Game.Rulesets.Mania/Objects/Drawables/DrawableBarLine.cs @@ -30,7 +30,7 @@ namespace osu.Game.Rulesets.Mania.Objects.Drawables RelativeSizeAxes = Axes.X; Height = 1; - Add(new Box + AddInternal(new Box { Name = "Bar line", Anchor = Anchor.BottomCentre, @@ -42,7 +42,7 @@ namespace osu.Game.Rulesets.Mania.Objects.Drawables if (isMajor) { - Add(new EquilateralTriangle + AddInternal(new EquilateralTriangle { Name = "Left triangle", Anchor = Anchor.BottomLeft, @@ -52,7 +52,7 @@ namespace osu.Game.Rulesets.Mania.Objects.Drawables Rotation = 90 }); - Add(new EquilateralTriangle + AddInternal(new EquilateralTriangle { Name = "Right triangle", Anchor = Anchor.BottomRight, diff --git a/osu.Game.Rulesets.Mania/Objects/Drawables/DrawableHoldNote.cs b/osu.Game.Rulesets.Mania/Objects/Drawables/DrawableHoldNote.cs index 5a9ff592bc..6eb34c7005 100644 --- a/osu.Game.Rulesets.Mania/Objects/Drawables/DrawableHoldNote.cs +++ b/osu.Game.Rulesets.Mania/Objects/Drawables/DrawableHoldNote.cs @@ -42,7 +42,7 @@ namespace osu.Game.Rulesets.Mania.Objects.Drawables { RelativeSizeAxes = Axes.X; - AddRange(new Drawable[] + InternalChildren = new Drawable[] { // The hit object itself cannot be used for various elements because the tail overshoots it // So a specialized container that is updated to contain the tail height is used @@ -68,7 +68,7 @@ namespace osu.Game.Rulesets.Mania.Objects.Drawables Anchor = Anchor.TopCentre, Origin = Anchor.TopCentre } - }); + }; foreach (var tick in HitObject.NestedHitObjects.OfType()) { diff --git a/osu.Game.Rulesets.Mania/Objects/Drawables/DrawableHoldNoteTick.cs b/osu.Game.Rulesets.Mania/Objects/Drawables/DrawableHoldNoteTick.cs index f9c0b96d37..b50a5e897e 100644 --- a/osu.Game.Rulesets.Mania/Objects/Drawables/DrawableHoldNoteTick.cs +++ b/osu.Game.Rulesets.Mania/Objects/Drawables/DrawableHoldNoteTick.cs @@ -35,7 +35,7 @@ namespace osu.Game.Rulesets.Mania.Objects.Drawables RelativeSizeAxes = Axes.X; Size = new Vector2(1); - Children = new[] + InternalChildren = new[] { glowContainer = new CircularContainer { diff --git a/osu.Game.Rulesets.Mania/Objects/Drawables/DrawableNote.cs b/osu.Game.Rulesets.Mania/Objects/Drawables/DrawableNote.cs index 8944978bdd..c8aa4588a8 100644 --- a/osu.Game.Rulesets.Mania/Objects/Drawables/DrawableNote.cs +++ b/osu.Game.Rulesets.Mania/Objects/Drawables/DrawableNote.cs @@ -27,7 +27,7 @@ namespace osu.Game.Rulesets.Mania.Objects.Drawables RelativeSizeAxes = Axes.X; AutoSizeAxes = Axes.Y; - Children = new Drawable[] + InternalChildren = new Drawable[] { laneGlowPiece = new LaneGlowPiece { diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableHitCircle.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableHitCircle.cs index d70b26e181..1f94f49598 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableHitCircle.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableHitCircle.cs @@ -28,7 +28,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables Position = HitObject.StackedPosition; Scale = new Vector2(h.Scale); - Children = new Drawable[] + InternalChildren = new Drawable[] { glow = new GlowPiece { diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableRepeatPoint.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableRepeatPoint.cs index 79a4714e33..94179f30d3 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableRepeatPoint.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableRepeatPoint.cs @@ -30,7 +30,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables Blending = BlendingMode.Additive; Origin = Anchor.Centre; - Children = new Drawable[] + InternalChildren = new Drawable[] { new SpriteIcon { diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs index fb3294d319..9c2d3f5e07 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs @@ -37,7 +37,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables Container ticks; Container repeatPoints; - Children = new Drawable[] + InternalChildren = new Drawable[] { Body = new SliderBody(s) { diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSliderTick.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSliderTick.cs index 058e3606f4..22bf63814c 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSliderTick.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSliderTick.cs @@ -31,7 +31,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables BorderThickness = 2; BorderColour = Color4.White; - Children = new Drawable[] + InternalChildren = new Drawable[] { new Box { diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSpinner.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSpinner.cs index 722ab4c6d5..2705c213d9 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSpinner.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSpinner.cs @@ -52,7 +52,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables Spinner = s; - Children = new Drawable[] + InternalChildren = new Drawable[] { circleContainer = new Container { diff --git a/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableBarLine.cs b/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableBarLine.cs index cf6aa7d895..d3a38289a8 100644 --- a/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableBarLine.cs +++ b/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableBarLine.cs @@ -44,7 +44,7 @@ namespace osu.Game.Rulesets.Taiko.Objects.Drawables RelativeSizeAxes = Axes.Y; Width = tracker_width; - Children = new[] + InternalChildren = new[] { Tracker = new Box { diff --git a/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableBarLineMajor.cs b/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableBarLineMajor.cs index 23c34e9863..656d9bddd4 100644 --- a/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableBarLineMajor.cs +++ b/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableBarLineMajor.cs @@ -25,7 +25,7 @@ namespace osu.Game.Rulesets.Taiko.Objects.Drawables public DrawableBarLineMajor(BarLine barLine) : base(barLine) { - Add(triangleContainer = new Container + InternalChild = triangleContainer = new Container { Anchor = Anchor.Centre, Origin = Anchor.Centre, @@ -51,7 +51,7 @@ namespace osu.Game.Rulesets.Taiko.Objects.Drawables EdgeSmoothness = new Vector2(1), } } - }); + }; Tracker.Alpha = 1f; } diff --git a/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableDrumRollTick.cs b/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableDrumRollTick.cs index bc5abce245..65a4e7bd95 100644 --- a/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableDrumRollTick.cs +++ b/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableDrumRollTick.cs @@ -43,7 +43,7 @@ namespace osu.Game.Rulesets.Taiko.Objects.Drawables switch (state) { case ArmedState.Hit: - Content.ScaleTo(0, 100, Easing.OutQuint).Expire(); + this.ScaleTo(0, 100, Easing.OutQuint).Expire(); break; } } diff --git a/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableHit.cs b/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableHit.cs index 63e6cfb297..75e1e2a247 100644 --- a/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableHit.cs +++ b/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableHit.cs @@ -103,7 +103,7 @@ namespace osu.Game.Rulesets.Taiko.Objects.Drawables const float gravity_time = 300; const float gravity_travel_height = 200; - Content.ScaleTo(0.8f, gravity_time * 2, Easing.OutQuad); + this.ScaleTo(0.8f, gravity_time * 2, Easing.OutQuad); this.MoveToY(-gravity_travel_height, gravity_time, Easing.Out) .Then() diff --git a/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableSwell.cs b/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableSwell.cs index c9e488764c..4097b65375 100644 --- a/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableSwell.cs +++ b/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableSwell.cs @@ -48,7 +48,7 @@ namespace osu.Game.Rulesets.Taiko.Objects.Drawables { FillMode = FillMode.Fit; - Add(bodyContainer = new Container + InternalChild = bodyContainer = new Container { RelativeSizeAxes = Axes.Both, Depth = 1, @@ -111,7 +111,7 @@ namespace osu.Game.Rulesets.Taiko.Objects.Drawables } } } - }); + }; MainPiece.Add(symbol = new SwellSymbolPiece()); } diff --git a/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableTaikoHitObject.cs b/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableTaikoHitObject.cs index e57c2f9944..f20ad5b4aa 100644 --- a/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableTaikoHitObject.cs +++ b/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableTaikoHitObject.cs @@ -34,7 +34,7 @@ namespace osu.Game.Rulesets.Taiko.Objects.Drawables RelativeSizeAxes = Axes.Both; Size = BaseSize = new Vector2(HitObject.IsStrong ? TaikoHitObject.DEFAULT_STRONG_SIZE : TaikoHitObject.DEFAULT_SIZE); - Add(MainPiece = CreateMainPiece()); + InternalChild = MainPiece = CreateMainPiece(); MainPiece.KiaiMode = HitObject.Kiai; } diff --git a/osu.Game.Tests/Visual/TestCaseScrollingHitObjects.cs b/osu.Game.Tests/Visual/TestCaseScrollingHitObjects.cs index cfa4846939..745ae9ad9d 100644 --- a/osu.Game.Tests/Visual/TestCaseScrollingHitObjects.cs +++ b/osu.Game.Tests/Visual/TestCaseScrollingHitObjects.cs @@ -140,12 +140,12 @@ namespace osu.Game.Tests.Visual { Origin = Anchor.Centre; - Add(new Box + InternalChild = new Box { Anchor = Anchor.Centre, Origin = Anchor.Centre, RelativeSizeAxes = Axes.Both - }); + }; switch (direction) { @@ -175,7 +175,7 @@ namespace osu.Game.Tests.Visual Origin = Anchor.Centre; AutoSizeAxes = Axes.Both; - Add(new Box { Size = new Vector2(75) }); + InternalChild = new Box { Size = new Vector2(75) }; } protected override void UpdateState(ArmedState state) diff --git a/osu.Game/Rulesets/Objects/Drawables/DrawableHitObject.cs b/osu.Game/Rulesets/Objects/Drawables/DrawableHitObject.cs index 394b6fa9fd..02f88d9ee0 100644 --- a/osu.Game/Rulesets/Objects/Drawables/DrawableHitObject.cs +++ b/osu.Game/Rulesets/Objects/Drawables/DrawableHitObject.cs @@ -19,7 +19,7 @@ using OpenTK.Graphics; namespace osu.Game.Rulesets.Objects.Drawables { - public abstract class DrawableHitObject : Container, IHasAccentColour + public abstract class DrawableHitObject : CompositeDrawable, IHasAccentColour { public readonly HitObject HitObject; From 50f9d810dd49ed45dfdfea70db321430f981d3d2 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Thu, 15 Mar 2018 15:40:52 +0900 Subject: [PATCH 424/544] Add more testcases + fix up seeking a bit more --- .../Visual/TestCaseEditorSeekSnapping.cs | 146 +++++++++++++++--- osu.Game/Rulesets/Edit/HitObjectComposer.cs | 58 ++++--- 2 files changed, 163 insertions(+), 41 deletions(-) diff --git a/osu.Game.Tests/Visual/TestCaseEditorSeekSnapping.cs b/osu.Game.Tests/Visual/TestCaseEditorSeekSnapping.cs index 4757e6c857..2d60c6848d 100644 --- a/osu.Game.Tests/Visual/TestCaseEditorSeekSnapping.cs +++ b/osu.Game.Tests/Visual/TestCaseEditorSeekSnapping.cs @@ -43,7 +43,8 @@ namespace osu.Game.Tests.Visual new TimingControlPoint { Time = 100, BeatLength = 400 }, new TimingControlPoint { Time = 175, BeatLength = 800 }, new TimingControlPoint { Time = 350, BeatLength = 200 }, - new TimingControlPoint { Time = 450, BeatLength = 100 } + new TimingControlPoint { Time = 450, BeatLength = 100 }, + new TimingControlPoint { Time = 500, BeatLength = 307.69230769230802 } } }, HitObjects = @@ -71,12 +72,15 @@ namespace osu.Game.Tests.Visual } }; -// testSeekNoSnapping(); -// testSeekSnappingOnBeat(); -// testSeekSnappingInBetweenBeat(); -// testSeekForwardNoSnapping(); -// testSeekForwardSnappingOnBeat(); + testSeekNoSnapping(); + testSeekSnappingOnBeat(); + testSeekSnappingInBetweenBeat(); + testSeekForwardNoSnapping(); + testSeekForwardSnappingOnBeat(); testSeekForwardSnappingFromInBetweenBeat(); + testSeekBackwardSnappingOnBeat(); + testSeekBackwardSnappingFromInBetweenBeat(); + testSeekingWithFloatingPointBeatLength(); } /// @@ -149,7 +153,7 @@ namespace osu.Game.Tests.Visual } /// - /// Tests that when seeking forward with no beat snapping, beats are never snapped to, nor the next timing point (if we've skipped it). + /// Tests that when seeking forward with no beat snapping, beats are never explicitly snapped to, nor the next timing point (if we've skipped it). /// private void testSeekForwardNoSnapping() { @@ -174,17 +178,17 @@ namespace osu.Game.Tests.Visual { reset(); - AddStep("SeekForward", () => composer.SeekForward(true)); + AddStep("SeekForward, Snap", () => composer.SeekForward(true)); AddAssert("Time = 50", () => track.CurrentTime == 50); - AddStep("SeekForward", () => composer.SeekForward(true)); + AddStep("SeekForward, Snap", () => composer.SeekForward(true)); AddAssert("Time = 100", () => track.CurrentTime == 100); - AddStep("SeekForward", () => composer.SeekForward(true)); + AddStep("SeekForward, Snap", () => composer.SeekForward(true)); AddAssert("Time = 175", () => track.CurrentTime == 175); - AddStep("SeekForward", () => composer.SeekForward(true)); + AddStep("SeekForward, Snap", () => composer.SeekForward(true)); AddAssert("Time = 350", () => track.CurrentTime == 350); - AddStep("SeekForward", () => composer.SeekForward(true)); + AddStep("SeekForward, Snap", () => composer.SeekForward(true)); AddAssert("Time = 400", () => track.CurrentTime == 400); - AddStep("SeekForward", () => composer.SeekForward(true)); + AddStep("SeekForward, Snap", () => composer.SeekForward(true)); AddAssert("Time = 450", () => track.CurrentTime == 450); } @@ -197,31 +201,131 @@ namespace osu.Game.Tests.Visual reset(); AddStep("Seek(49)", () => composer.SeekTo(49)); - AddStep("SeekForward", () => composer.SeekForward(true)); + AddStep("SeekForward, Snap", () => composer.SeekForward(true)); AddAssert("Time = 50", () => track.CurrentTime == 50); AddStep("Seek(49.999)", () => composer.SeekTo(49.999)); - AddStep("SeekForward", () => composer.SeekForward(true)); + AddStep("SeekForward, Snap", () => composer.SeekForward(true)); AddAssert("Time = 50", () => track.CurrentTime == 50); AddStep("Seek(99)", () => composer.SeekTo(99)); - AddStep("SeekForward", () => composer.SeekForward(true)); + AddStep("SeekForward, Snap", () => composer.SeekForward(true)); AddAssert("Time = 100", () => track.CurrentTime == 100); AddStep("Seek(99.999)", () => composer.SeekTo(99.999)); - AddStep("SeekForward", () => composer.SeekForward(true)); + AddStep("SeekForward, Snap", () => composer.SeekForward(true)); AddAssert("Time = 100", () => track.CurrentTime == 100); AddStep("Seek(174)", () => composer.SeekTo(174)); - AddStep("SeekForward", () => composer.SeekForward(true)); + AddStep("SeekForward, Snap", () => composer.SeekForward(true)); AddAssert("Time = 175", () => track.CurrentTime == 175); AddStep("Seek(349)", () => composer.SeekTo(349)); - AddStep("SeekForward", () => composer.SeekForward(true)); + AddStep("SeekForward, Snap", () => composer.SeekForward(true)); AddAssert("Time = 350", () => track.CurrentTime == 350); AddStep("Seek(399)", () => composer.SeekTo(399)); - AddStep("SeekForward", () => composer.SeekForward(true)); + AddStep("SeekForward, Snap", () => composer.SeekForward(true)); AddAssert("Time = 400", () => track.CurrentTime == 400); AddStep("Seek(449)", () => composer.SeekTo(449)); - AddStep("SeekForward", () => composer.SeekForward(true)); + AddStep("SeekForward, Snap", () => composer.SeekForward(true)); AddAssert("Time = 450", () => track.CurrentTime == 450); } + /// + /// Tests that when seeking backward with no beat snapping, beats are never explicitly snapped to, nor the next timing point (if we've skipped it). + /// + private void testSeekBackwardNoSnapping() + { + reset(); + + AddStep("Seek(450)", () => composer.SeekTo(450)); + AddStep("SeekBackward", () => composer.SeekBackward()); + AddAssert("Time = 425", () => track.CurrentTime == 425); + AddStep("SeekBackward", () => composer.SeekBackward()); + AddAssert("Time = 375", () => track.CurrentTime == 375); + AddStep("SeekBackward", () => composer.SeekBackward()); + AddAssert("Time = 325", () => track.CurrentTime == 325); + AddStep("SeekBackward", () => composer.SeekBackward()); + AddAssert("Time = 125", () => track.CurrentTime == 125); + AddStep("SeekBackward", () => composer.SeekBackward()); + AddAssert("Time = 25", () => track.CurrentTime == 25); + AddStep("SeekBackward", () => composer.SeekBackward()); + AddAssert("Time = 0", () => track.CurrentTime == 0); + } + + /// + /// Tests that when seeking backward with beat snapping, all beats are snapped to and timing points are never skipped. + /// + private void testSeekBackwardSnappingOnBeat() + { + reset(); + + AddStep("Seek(450)", () => composer.SeekTo(450)); + AddStep("SeekBackward, Snap", () => composer.SeekBackward(true)); + AddAssert("Time = 400", () => track.CurrentTime == 400); + AddStep("SeekBackward, Snap", () => composer.SeekBackward(true)); + AddAssert("Time = 350", () => track.CurrentTime == 350); + AddStep("SeekBackward, Snap", () => composer.SeekBackward(true)); + AddAssert("Time = 175", () => track.CurrentTime == 175); + AddStep("SeekBackward, Snap", () => composer.SeekBackward(true)); + AddAssert("Time = 100", () => track.CurrentTime == 100); + AddStep("SeekBackward, Snap", () => composer.SeekBackward(true)); + AddAssert("Time = 50", () => track.CurrentTime == 50); + AddStep("SeekBackward, Snap", () => composer.SeekBackward(true)); + AddAssert("Time = 0", () => track.CurrentTime == 0); + } + + /// + /// Tests that when seeking backward from in-between two beats, the previous beat or timing point is snapped to, and no beats are skipped. + /// This will also test being extremely close to the previous beat/timing point, to ensure rounding is not an issue. + /// + private void testSeekBackwardSnappingFromInBetweenBeat() + { + reset(); + + AddStep("Seek(451)", () => composer.SeekTo(451)); + AddStep("SeekBackward, Snap", () => composer.SeekBackward(true)); + AddAssert("Time = 450", () => track.CurrentTime == 450); + AddStep("Seek(450.999)", () => composer.SeekTo(450.999)); + AddStep("SeekBackward, Snap", () => composer.SeekBackward(true)); + AddAssert("Time = 450", () => track.CurrentTime == 450); + AddStep("Seek(401)", () => composer.SeekTo(401)); + AddStep("SeekBackward, Snap", () => composer.SeekBackward(true)); + AddAssert("Time = 400", () => track.CurrentTime == 400); + AddStep("Seek(401.999)", () => composer.SeekTo(401.999)); + AddStep("SeekBackward, Snap", () => composer.SeekBackward(true)); + AddAssert("Time = 400", () => track.CurrentTime == 400); + } + + /// + /// Tests that there are no rounding issues when snapping to beats within a timing point with a floating-point beatlength. + /// + private void testSeekingWithFloatingPointBeatLength() + { + reset(); + + double lastTime = 0; + + AddStep("Seek(0)", () => composer.SeekTo(0)); + + for (int i = 0; i < 20; i++) + { + AddStep("SeekForward, Snap", () => + { + lastTime = track.CurrentTime; + composer.SeekForward(true); + }); + AddAssert("Time > lastTime", () => track.CurrentTime > lastTime); + } + + for (int i = 0; i < 20; i++) + { + AddStep("SeekBackward, Snap", () => + { + lastTime = track.CurrentTime; + composer.SeekBackward(true); + }); + AddAssert("Time < lastTime", () => track.CurrentTime < lastTime); + } + + AddAssert("Time = 0", () => track.CurrentTime == 0); + } + private void reset() { AddStep("Reset", () => composer.SeekTo(0)); diff --git a/osu.Game/Rulesets/Edit/HitObjectComposer.cs b/osu.Game/Rulesets/Edit/HitObjectComposer.cs index 952b553835..94851e8ef5 100644 --- a/osu.Game/Rulesets/Edit/HitObjectComposer.cs +++ b/osu.Game/Rulesets/Edit/HitObjectComposer.cs @@ -10,6 +10,7 @@ using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Framework.Input; using osu.Framework.Logging; +using osu.Framework.MathUtils; using osu.Framework.Timing; using osu.Game.Beatmaps; using osu.Game.Rulesets.Edit.Layers; @@ -196,40 +197,57 @@ namespace osu.Game.Rulesets.Edit // Todo: This should not be a constant, but feels good for now const int beat_snap_divisor = 4; - var currentTimingPoint = beatmap.Value.Beatmap.ControlPointInfo.TimingPointAt(adjustableClock.CurrentTime); - double seekAmount = currentTimingPoint.BeatLength / beat_snap_divisor; + var cpi = beatmap.Value.Beatmap.ControlPointInfo; + var timingPoint = cpi.TimingPointAt(adjustableClock.CurrentTime); + if (direction < 0 && timingPoint.Time == adjustableClock.CurrentTime) + { + // When going backwards, we care about the timing point that was _previously_ active at the current time + int activeIndex = cpi.TimingPoints.IndexOf(timingPoint); + while (activeIndex > 0 && adjustableClock.CurrentTime == timingPoint.Time) + timingPoint = cpi.TimingPoints[--activeIndex]; + } + + double seekAmount = timingPoint.BeatLength / beat_snap_divisor; double seekTime = adjustableClock.CurrentTime + seekAmount * direction; - if (!snapped) + if (!snapped || cpi.TimingPoints.Count == 0) { adjustableClock.Seek(seekTime); return; } - var nextTimingPoint = beatmap.Value.Beatmap.ControlPointInfo.TimingPoints.FirstOrDefault(t => t.Time > currentTimingPoint.Time); - var firstTimingPoint = beatmap.Value.Beatmap.ControlPointInfo.TimingPoints.First(); + // We will be snapping to beats within timingPoint + seekTime -= timingPoint.Time; - if (currentTimingPoint != firstTimingPoint && seekTime < currentTimingPoint.Time) - adjustableClock.Seek(currentTimingPoint.Time - 1); // -1 to be in the prior timing point's boundary - else if (seekTime >= nextTimingPoint?.Time) - adjustableClock.Seek(nextTimingPoint.Time); // +1 to be in the next timing point's boundary + // Determine the index from timingPoint of the closest beat to seekTime, accounting for scrolling direction + int closestBeat; + if (direction > 0) + closestBeat = (int)Math.Floor(seekTime / seekAmount); else + closestBeat = (int)Math.Ceiling(seekTime / seekAmount); + + seekTime = timingPoint.Time + closestBeat * seekAmount; + + // Due to the rounding above, we may end up on the same beat. This will effectively cause 0 seeking to happen + // so we can just seek to the next beat in the direction if this is the case + if (Math.Abs(adjustableClock.CurrentTime - seekTime) == 0) { - // We will be snapping to beats within the timing point - seekTime -= currentTimingPoint.Time; - - // Determine the index from the current timing point of the closest beat to seekTime, accounting for scrolling direction - int closestBeat; if (direction > 0) - closestBeat = (int)Math.Floor(seekTime / seekAmount); + closestBeat++; else - closestBeat = (int)Math.Ceiling(seekTime / seekAmount); - - seekTime = currentTimingPoint.Time + closestBeat * seekAmount; - - adjustableClock.Seek(seekTime); + closestBeat--; + seekTime = timingPoint.Time + closestBeat * seekAmount; } + + if (seekTime < timingPoint.Time) + seekTime = timingPoint.Time; + + var nextTimingPoint = cpi.TimingPoints.FirstOrDefault(t => t.Time > timingPoint.Time); + if (seekTime >= nextTimingPoint?.Time) + seekTime = nextTimingPoint.Time; + + adjustableClock.Seek(seekTime); } private void setCompositionTool(ICompositionTool tool) => CurrentTool = tool; From 9e0aeec574ddb234f87a0427d5ece7d11a051d6c Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Thu, 15 Mar 2018 15:53:39 +0900 Subject: [PATCH 425/544] Use a decoupled clock for accurate clock times --- osu.Game/Rulesets/Edit/HitObjectComposer.cs | 25 ++++++++++++--------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/osu.Game/Rulesets/Edit/HitObjectComposer.cs b/osu.Game/Rulesets/Edit/HitObjectComposer.cs index 94851e8ef5..8934448301 100644 --- a/osu.Game/Rulesets/Edit/HitObjectComposer.cs +++ b/osu.Game/Rulesets/Edit/HitObjectComposer.cs @@ -31,7 +31,9 @@ namespace osu.Game.Rulesets.Edit private readonly List layerContainers = new List(); private readonly Bindable beatmap = new Bindable(); - private IAdjustableClock adjustableClock; + + private IAdjustableClock sourceClock; + private DecoupleableInterpolatingFramedClock adjustableClock; protected HitObjectComposer(Ruleset ruleset) { @@ -49,8 +51,12 @@ namespace osu.Game.Rulesets.Edit rulesetContainer = CreateRulesetContainer(ruleset, beatmap.Value); // TODO: should probably be done at a RulesetContainer level to share logic with Player. - adjustableClock = (IAdjustableClock)beatmap.Value.Track ?? new StopwatchClock(); - rulesetContainer.Clock = new InterpolatingFramedClock(adjustableClock); + sourceClock = (IAdjustableClock)beatmap.Value.Track ?? new StopwatchClock(); + adjustableClock = new DecoupleableInterpolatingFramedClock { IsCoupled = false }; + adjustableClock.ChangeSource(sourceClock); + + rulesetContainer.Clock = adjustableClock; + } catch (Exception e) { @@ -229,14 +235,11 @@ namespace osu.Game.Rulesets.Edit seekTime = timingPoint.Time + closestBeat * seekAmount; - // Due to the rounding above, we may end up on the same beat. This will effectively cause 0 seeking to happen - // so we can just seek to the next beat in the direction if this is the case - if (Math.Abs(adjustableClock.CurrentTime - seekTime) == 0) + // Due to the rounding above, we may end up on the current beat. This will effectively cause 0 seeking to happen, but we don't want this. + // Instead, we'll go to the next beat in the direction when this is the case + if (Precision.AlmostEquals(adjustableClock.CurrentTime, seekTime)) { - if (direction > 0) - closestBeat++; - else - closestBeat--; + closestBeat += direction > 0 ? 1 : -1; seekTime = timingPoint.Time + closestBeat * seekAmount; } @@ -244,7 +247,7 @@ namespace osu.Game.Rulesets.Edit seekTime = timingPoint.Time; var nextTimingPoint = cpi.TimingPoints.FirstOrDefault(t => t.Time > timingPoint.Time); - if (seekTime >= nextTimingPoint?.Time) + if (seekTime > nextTimingPoint?.Time) seekTime = nextTimingPoint.Time; adjustableClock.Seek(seekTime); From 5e742eb4663a38db9389e34d341fd0a596082e25 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Thu, 15 Mar 2018 17:10:08 +0900 Subject: [PATCH 426/544] Move editor constructions to BDL load --- osu.Game/Screens/Edit/Editor.cs | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/osu.Game/Screens/Edit/Editor.cs b/osu.Game/Screens/Edit/Editor.cs index bb43099352..f1b6419741 100644 --- a/osu.Game/Screens/Edit/Editor.cs +++ b/osu.Game/Screens/Edit/Editor.cs @@ -26,12 +26,13 @@ namespace osu.Game.Screens.Edit public override bool ShowOverlaysOnEnter => false; - private readonly Box bottomBackground; - private readonly Container screenContainer; + private Box bottomBackground; + private Container screenContainer; private EditorScreen currentScreen; - public Editor() + [BackgroundDependencyLoader] + private void load(OsuColour colours) { EditorMenuBar menuBar; TimeInfoContainer timeInfo; @@ -130,12 +131,9 @@ namespace osu.Game.Screens.Edit timeline.Beatmap.BindTo(Beatmap); playback.Beatmap.BindTo(Beatmap); menuBar.Mode.ValueChanged += onModeChanged; - } - [BackgroundDependencyLoader] - private void load(OsuColour colours) - { bottomBackground.Colour = colours.Gray2; + } private void exportBeatmap() From c8f6a6980be01eb88b56757318ca324479f77a65 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Thu, 15 Mar 2018 17:19:47 +0900 Subject: [PATCH 427/544] Move clock construction to Editor --- .../Edit/OsuHitObjectComposer.cs | 5 +++-- osu.Game.Rulesets.Osu/OsuRuleset.cs | 3 ++- osu.Game/Rulesets/Edit/HitObjectComposer.cs | 18 +++++++----------- osu.Game/Rulesets/Ruleset.cs | 3 ++- osu.Game/Screens/Edit/Editor.cs | 10 +++++++++- .../Screens/Edit/Screens/Compose/Compose.cs | 18 +++++++++++++++--- 6 files changed, 38 insertions(+), 19 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Edit/OsuHitObjectComposer.cs b/osu.Game.Rulesets.Osu/Edit/OsuHitObjectComposer.cs index 70d49a6b4f..f8991e050b 100644 --- a/osu.Game.Rulesets.Osu/Edit/OsuHitObjectComposer.cs +++ b/osu.Game.Rulesets.Osu/Edit/OsuHitObjectComposer.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using osu.Framework.Graphics; +using osu.Framework.Timing; using osu.Game.Beatmaps; using osu.Game.Rulesets.Edit; using osu.Game.Rulesets.Edit.Layers.Selection; @@ -16,8 +17,8 @@ namespace osu.Game.Rulesets.Osu.Edit { public class OsuHitObjectComposer : HitObjectComposer { - public OsuHitObjectComposer(Ruleset ruleset) - : base(ruleset) + public OsuHitObjectComposer(Ruleset ruleset, IAdjustableClock adjustableClock, IFrameBasedClock framedClock) + : base(ruleset, adjustableClock, framedClock) { } diff --git a/osu.Game.Rulesets.Osu/OsuRuleset.cs b/osu.Game.Rulesets.Osu/OsuRuleset.cs index d407835a96..5dcc8e8a6e 100644 --- a/osu.Game.Rulesets.Osu/OsuRuleset.cs +++ b/osu.Game.Rulesets.Osu/OsuRuleset.cs @@ -13,6 +13,7 @@ using System.Linq; using osu.Framework.Graphics; using osu.Game.Overlays.Settings; using osu.Framework.Input.Bindings; +using osu.Framework.Timing; using osu.Game.Rulesets.Scoring; using osu.Game.Rulesets.Osu.Scoring; using osu.Game.Rulesets.Osu.Edit; @@ -137,7 +138,7 @@ namespace osu.Game.Rulesets.Osu public override PerformanceCalculator CreatePerformanceCalculator(Beatmap beatmap, Score score) => new OsuPerformanceCalculator(this, beatmap, score); - public override HitObjectComposer CreateHitObjectComposer() => new OsuHitObjectComposer(this); + public override HitObjectComposer CreateHitObjectComposer(IAdjustableClock adjustableClock, IFrameBasedClock framedClock) => new OsuHitObjectComposer(this, adjustableClock, framedClock); public override string Description => "osu!"; diff --git a/osu.Game/Rulesets/Edit/HitObjectComposer.cs b/osu.Game/Rulesets/Edit/HitObjectComposer.cs index 8934448301..9499e15e92 100644 --- a/osu.Game/Rulesets/Edit/HitObjectComposer.cs +++ b/osu.Game/Rulesets/Edit/HitObjectComposer.cs @@ -32,12 +32,15 @@ namespace osu.Game.Rulesets.Edit private readonly Bindable beatmap = new Bindable(); - private IAdjustableClock sourceClock; - private DecoupleableInterpolatingFramedClock adjustableClock; + private readonly IAdjustableClock adjustableClock; + private readonly IFrameBasedClock framedClock; - protected HitObjectComposer(Ruleset ruleset) + protected HitObjectComposer(Ruleset ruleset, IAdjustableClock adjustableClock, IFrameBasedClock framedClock) { this.ruleset = ruleset; + this.adjustableClock = adjustableClock; + this.framedClock = framedClock; + RelativeSizeAxes = Axes.Both; } @@ -49,14 +52,7 @@ namespace osu.Game.Rulesets.Edit try { rulesetContainer = CreateRulesetContainer(ruleset, beatmap.Value); - - // TODO: should probably be done at a RulesetContainer level to share logic with Player. - sourceClock = (IAdjustableClock)beatmap.Value.Track ?? new StopwatchClock(); - adjustableClock = new DecoupleableInterpolatingFramedClock { IsCoupled = false }; - adjustableClock.ChangeSource(sourceClock); - - rulesetContainer.Clock = adjustableClock; - + rulesetContainer.Clock = framedClock; } catch (Exception e) { diff --git a/osu.Game/Rulesets/Ruleset.cs b/osu.Game/Rulesets/Ruleset.cs index cba849a491..fc0c7966c6 100644 --- a/osu.Game/Rulesets/Ruleset.cs +++ b/osu.Game/Rulesets/Ruleset.cs @@ -6,6 +6,7 @@ using System.Collections.Generic; using System.Linq; using osu.Framework.Graphics; using osu.Framework.Input.Bindings; +using osu.Framework.Timing; using osu.Game.Beatmaps; using osu.Game.Graphics; using osu.Game.Overlays.Settings; @@ -53,7 +54,7 @@ namespace osu.Game.Rulesets public virtual PerformanceCalculator CreatePerformanceCalculator(Beatmap beatmap, Score score) => null; - public virtual HitObjectComposer CreateHitObjectComposer() => null; + public virtual HitObjectComposer CreateHitObjectComposer(IAdjustableClock adjustableClock, IFrameBasedClock framedClock) => null; public virtual Drawable CreateIcon() => new SpriteIcon { Icon = FontAwesome.fa_question_circle }; diff --git a/osu.Game/Screens/Edit/Editor.cs b/osu.Game/Screens/Edit/Editor.cs index f1b6419741..1a145478eb 100644 --- a/osu.Game/Screens/Edit/Editor.cs +++ b/osu.Game/Screens/Edit/Editor.cs @@ -12,6 +12,7 @@ using osu.Game.Screens.Edit.Menus; using osu.Game.Screens.Edit.Components.Timelines.Summary; using osu.Framework.Allocation; using osu.Framework.Graphics.UserInterface; +using osu.Framework.Timing; using osu.Game.Graphics.UserInterface; using osu.Game.Screens.Edit.Screens; using osu.Game.Screens.Edit.Screens.Compose; @@ -31,9 +32,16 @@ namespace osu.Game.Screens.Edit private EditorScreen currentScreen; + private DecoupleableInterpolatingFramedClock adjustableClock; + [BackgroundDependencyLoader] private void load(OsuColour colours) { + // TODO: should probably be done at a RulesetContainer level to share logic with Player. + var sourceClock = (IAdjustableClock)Beatmap.Value.Track ?? new StopwatchClock(); + adjustableClock = new DecoupleableInterpolatingFramedClock { IsCoupled = false }; + adjustableClock.ChangeSource(sourceClock); + EditorMenuBar menuBar; TimeInfoContainer timeInfo; SummaryTimeline timeline; @@ -148,7 +156,7 @@ namespace osu.Game.Screens.Edit switch (mode) { case EditorScreenMode.Compose: - currentScreen = new Compose(); + currentScreen = new Compose(adjustableClock, adjustableClock); break; case EditorScreenMode.Design: currentScreen = new Design(); diff --git a/osu.Game/Screens/Edit/Screens/Compose/Compose.cs b/osu.Game/Screens/Edit/Screens/Compose/Compose.cs index d42c0bfdac..b0fad58084 100644 --- a/osu.Game/Screens/Edit/Screens/Compose/Compose.cs +++ b/osu.Game/Screens/Edit/Screens/Compose/Compose.cs @@ -1,12 +1,14 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using osu.Framework.Allocation; using OpenTK.Graphics; using osu.Framework.Extensions.Color4Extensions; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Shapes; using osu.Framework.Logging; +using osu.Framework.Timing; using osu.Game.Beatmaps; using osu.Game.Screens.Edit.Screens.Compose.Timeline; @@ -17,9 +19,19 @@ namespace osu.Game.Screens.Edit.Screens.Compose private const float vertical_margins = 10; private const float horizontal_margins = 20; - private readonly Container composerContainer; + private Container composerContainer; - public Compose() + private readonly IAdjustableClock adjustableClock; + private readonly IFrameBasedClock framedClock; + + public Compose(IAdjustableClock adjustableClock, IFrameBasedClock framedClock) + { + this.adjustableClock = adjustableClock; + this.framedClock = framedClock; + } + + [BackgroundDependencyLoader] + private void load() { ScrollableTimeline timeline; Children = new Drawable[] @@ -90,7 +102,7 @@ namespace osu.Game.Screens.Edit.Screens.Compose return; } - var composer = ruleset.CreateHitObjectComposer(); + var composer = ruleset.CreateHitObjectComposer(adjustableClock, framedClock); if (composer == null) { Logger.Log($"Ruleset {ruleset.Description} doesn't support hitobject composition."); From d05947ef481f09749af41d59cb27136a7404a80a Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Thu, 15 Mar 2018 18:08:37 +0900 Subject: [PATCH 428/544] Pass adjustable clocks to components, rather than relying on the track --- .../Screens/Edit/Components/PlaybackControl.cs | 17 +++++++++++------ .../Edit/Components/TimeInfoContainer.cs | 9 +++++++-- .../Timelines/Summary/Parts/MarkerPart.cs | 11 ++++++++--- .../Timelines/Summary/SummaryTimeline.cs | 5 +++-- osu.Game/Screens/Edit/Editor.cs | 6 +++--- .../Screens/Edit/Screens/Compose/Compose.cs | 9 +-------- 6 files changed, 33 insertions(+), 24 deletions(-) diff --git a/osu.Game/Screens/Edit/Components/PlaybackControl.cs b/osu.Game/Screens/Edit/Components/PlaybackControl.cs index 05e47ef5b1..71154006ce 100644 --- a/osu.Game/Screens/Edit/Components/PlaybackControl.cs +++ b/osu.Game/Screens/Edit/Components/PlaybackControl.cs @@ -9,6 +9,7 @@ using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.UserInterface; using osu.Framework.Input; +using osu.Framework.Timing; using osu.Game.Graphics; using osu.Game.Graphics.Sprites; using osu.Game.Graphics.UserInterface; @@ -19,8 +20,12 @@ namespace osu.Game.Screens.Edit.Components { private readonly IconButton playButton; - public PlaybackControl() + private readonly IAdjustableClock adjustableClock; + + public PlaybackControl(IAdjustableClock adjustableClock) { + this.adjustableClock = adjustableClock; + PlaybackTabControl tabs; Children = new Drawable[] @@ -54,22 +59,22 @@ namespace osu.Game.Screens.Edit.Components } }; - tabs.Current.ValueChanged += newValue => Track.Tempo.Value = newValue; + tabs.Current.ValueChanged += newValue => Beatmap.Value.Track.Tempo.Value = newValue; } private void togglePause() { - if (Track.IsRunning) - Track.Stop(); + if (adjustableClock.IsRunning) + adjustableClock.Stop(); else - Track.Start(); + adjustableClock.Start(); } protected override void Update() { base.Update(); - playButton.Icon = Track.IsRunning ? FontAwesome.fa_pause_circle_o : FontAwesome.fa_play_circle_o; + playButton.Icon = adjustableClock.IsRunning ? FontAwesome.fa_pause_circle_o : FontAwesome.fa_play_circle_o; } private class PlaybackTabControl : OsuTabControl diff --git a/osu.Game/Screens/Edit/Components/TimeInfoContainer.cs b/osu.Game/Screens/Edit/Components/TimeInfoContainer.cs index 9a78e6e189..6bbaad432b 100644 --- a/osu.Game/Screens/Edit/Components/TimeInfoContainer.cs +++ b/osu.Game/Screens/Edit/Components/TimeInfoContainer.cs @@ -4,6 +4,7 @@ using osu.Framework.Graphics; using osu.Game.Graphics.Sprites; using System; +using osu.Framework.Timing; namespace osu.Game.Screens.Edit.Components { @@ -13,8 +14,12 @@ namespace osu.Game.Screens.Edit.Components private readonly OsuSpriteText trackTimer; - public TimeInfoContainer() + private readonly IAdjustableClock adjustableClock; + + public TimeInfoContainer(IAdjustableClock adjustableClock) { + this.adjustableClock = adjustableClock; + Children = new Drawable[] { trackTimer = new OsuSpriteText @@ -32,7 +37,7 @@ namespace osu.Game.Screens.Edit.Components { base.Update(); - trackTimer.Text = TimeSpan.FromMilliseconds(Track.CurrentTime).ToString(@"mm\:ss\:fff"); + trackTimer.Text = TimeSpan.FromMilliseconds(adjustableClock.CurrentTime).ToString(@"mm\:ss\:fff"); } } } diff --git a/osu.Game/Screens/Edit/Components/Timelines/Summary/Parts/MarkerPart.cs b/osu.Game/Screens/Edit/Components/Timelines/Summary/Parts/MarkerPart.cs index c7f40327a9..b249713581 100644 --- a/osu.Game/Screens/Edit/Components/Timelines/Summary/Parts/MarkerPart.cs +++ b/osu.Game/Screens/Edit/Components/Timelines/Summary/Parts/MarkerPart.cs @@ -7,6 +7,7 @@ using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Shapes; using osu.Framework.Input; +using osu.Framework.Timing; using osu.Game.Beatmaps; using osu.Game.Graphics; @@ -19,8 +20,12 @@ namespace osu.Game.Screens.Edit.Components.Timelines.Summary.Parts { private readonly Drawable marker; - public MarkerPart() + private readonly IAdjustableClock adjustableClock; + + public MarkerPart(IAdjustableClock adjustableClock) { + this.adjustableClock = adjustableClock; + Add(marker = new MarkerVisualisation()); } @@ -53,12 +58,12 @@ namespace osu.Game.Screens.Edit.Components.Timelines.Summary.Parts seekTo(markerPos / DrawWidth * Beatmap.Value.Track.Length); } - private void seekTo(double time) => Beatmap.Value?.Track.Seek(time); + private void seekTo(double time) => adjustableClock.Seek(time); protected override void Update() { base.Update(); - marker.X = (float)(Beatmap.Value?.Track.CurrentTime ?? 0); + marker.X = (float)adjustableClock.CurrentTime; } protected override void LoadBeatmap(WorkingBeatmap beatmap) diff --git a/osu.Game/Screens/Edit/Components/Timelines/Summary/SummaryTimeline.cs b/osu.Game/Screens/Edit/Components/Timelines/Summary/SummaryTimeline.cs index 8a472dc357..9921c24083 100644 --- a/osu.Game/Screens/Edit/Components/Timelines/Summary/SummaryTimeline.cs +++ b/osu.Game/Screens/Edit/Components/Timelines/Summary/SummaryTimeline.cs @@ -6,6 +6,7 @@ using osu.Framework.Allocation; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Shapes; +using osu.Framework.Timing; using osu.Game.Graphics; using osu.Game.Screens.Edit.Components.Timelines.Summary.Parts; @@ -18,13 +19,13 @@ namespace osu.Game.Screens.Edit.Components.Timelines.Summary { private readonly Drawable timelineBar; - public SummaryTimeline() + public SummaryTimeline(IAdjustableClock adjustableClock) { TimelinePart markerPart, controlPointPart, bookmarkPart, breakPart; Children = new[] { - markerPart = new MarkerPart { RelativeSizeAxes = Axes.Both }, + markerPart = new MarkerPart(adjustableClock) { RelativeSizeAxes = Axes.Both }, controlPointPart = new ControlPointPart { Anchor = Anchor.Centre, diff --git a/osu.Game/Screens/Edit/Editor.cs b/osu.Game/Screens/Edit/Editor.cs index 1a145478eb..cc7f77e770 100644 --- a/osu.Game/Screens/Edit/Editor.cs +++ b/osu.Game/Screens/Edit/Editor.cs @@ -115,9 +115,9 @@ namespace osu.Game.Screens.Edit { RelativeSizeAxes = Axes.Both, Padding = new MarginPadding { Right = 10 }, - Child = timeInfo = new TimeInfoContainer { RelativeSizeAxes = Axes.Both }, + Child = timeInfo = new TimeInfoContainer(adjustableClock) { RelativeSizeAxes = Axes.Both }, }, - timeline = new SummaryTimeline + timeline = new SummaryTimeline(adjustableClock) { RelativeSizeAxes = Axes.Both, }, @@ -125,7 +125,7 @@ namespace osu.Game.Screens.Edit { RelativeSizeAxes = Axes.Both, Padding = new MarginPadding { Left = 10 }, - Child = playback = new PlaybackControl { RelativeSizeAxes = Axes.Both }, + Child = playback = new PlaybackControl(adjustableClock) { RelativeSizeAxes = Axes.Both }, } }, } diff --git a/osu.Game/Screens/Edit/Screens/Compose/Compose.cs b/osu.Game/Screens/Edit/Screens/Compose/Compose.cs index b0fad58084..9a720e1608 100644 --- a/osu.Game/Screens/Edit/Screens/Compose/Compose.cs +++ b/osu.Game/Screens/Edit/Screens/Compose/Compose.cs @@ -9,7 +9,6 @@ using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Shapes; using osu.Framework.Logging; using osu.Framework.Timing; -using osu.Game.Beatmaps; using osu.Game.Screens.Edit.Screens.Compose.Timeline; namespace osu.Game.Screens.Edit.Screens.Compose @@ -87,14 +86,8 @@ namespace osu.Game.Screens.Edit.Screens.Compose }; timeline.Beatmap.BindTo(Beatmap); - Beatmap.ValueChanged += beatmapChanged; - } - private void beatmapChanged(WorkingBeatmap newBeatmap) - { - composerContainer.Clear(); - - var ruleset = newBeatmap.BeatmapInfo.Ruleset?.CreateInstance(); + var ruleset = Beatmap.Value.BeatmapInfo.Ruleset?.CreateInstance(); if (ruleset == null) { Logger.Log("Beatmap doesn't have a ruleset assigned."); From 8fbaa86e640de70eb86cd043ebe4e53225e88c63 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Thu, 15 Mar 2018 18:24:57 +0900 Subject: [PATCH 429/544] Fix testcases --- .../Visual/TestCaseEditorCompose.cs | 5 +- .../Visual/TestCaseEditorSeekSnapping.cs | 131 +++++++++--------- .../Visual/TestCaseEditorSelectionLayer.cs | 5 +- .../Visual/TestCaseEditorSummaryTimeline.cs | 5 +- .../Visual/TestCasePlaybackControl.cs | 5 +- 5 files changed, 84 insertions(+), 67 deletions(-) diff --git a/osu.Game.Tests/Visual/TestCaseEditorCompose.cs b/osu.Game.Tests/Visual/TestCaseEditorCompose.cs index 15bccac172..edc790e809 100644 --- a/osu.Game.Tests/Visual/TestCaseEditorCompose.cs +++ b/osu.Game.Tests/Visual/TestCaseEditorCompose.cs @@ -4,6 +4,7 @@ using System; using NUnit.Framework; using osu.Framework.Allocation; +using osu.Framework.Timing; using osu.Game.Beatmaps; using osu.Game.Screens.Edit.Screens.Compose; @@ -19,7 +20,9 @@ namespace osu.Game.Tests.Visual { random = new Random(1337); - Add(compose = new Compose()); + var clock = new DecoupleableInterpolatingFramedClock { IsCoupled = false }; + + Add(compose = new Compose(clock, clock)); AddStep("Next beatmap", nextBeatmap); } diff --git a/osu.Game.Tests/Visual/TestCaseEditorSeekSnapping.cs b/osu.Game.Tests/Visual/TestCaseEditorSeekSnapping.cs index 2d60c6848d..3b4b31c92a 100644 --- a/osu.Game.Tests/Visual/TestCaseEditorSeekSnapping.cs +++ b/osu.Game.Tests/Visual/TestCaseEditorSeekSnapping.cs @@ -10,6 +10,7 @@ using osu.Framework.Extensions.Color4Extensions; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Shapes; +using osu.Framework.Timing; using osu.Game.Beatmaps; using osu.Game.Beatmaps.ControlPoints; using osu.Game.Rulesets; @@ -30,9 +31,13 @@ namespace osu.Game.Tests.Visual private Track track; private HitObjectComposer composer; + private DecoupleableInterpolatingFramedClock clock; + [BackgroundDependencyLoader] private void load(OsuGameBase osuGame) { + clock = new DecoupleableInterpolatingFramedClock { IsCoupled = false }; + var testBeatmap = new Beatmap { ControlPointInfo = new ControlPointInfo @@ -62,8 +67,8 @@ namespace osu.Game.Tests.Visual RelativeSizeAxes = Axes.Both, Content = new[] { - new Drawable[] { composer = new TestHitObjectComposer(new OsuRuleset()) }, - new Drawable[] { new TimingPointVisualiser(testBeatmap, track) }, + new Drawable[] { composer = new TestHitObjectComposer(new OsuRuleset(), clock, clock) }, + new Drawable[] { new TimingPointVisualiser(testBeatmap, track) { Clock = clock } }, }, RowDimensions = new[] { @@ -92,17 +97,17 @@ namespace osu.Game.Tests.Visual // Forwards AddStep("Seek(0)", () => composer.SeekTo(0)); - AddAssert("Time = 0", () => track.CurrentTime == 0); + AddAssert("Time = 0", () => clock.CurrentTime == 0); AddStep("Seek(33)", () => composer.SeekTo(33)); - AddAssert("Time = 33", () => track.CurrentTime == 33); + AddAssert("Time = 33", () => clock.CurrentTime == 33); AddStep("Seek(89)", () => composer.SeekTo(89)); - AddAssert("Time = 89", () => track.CurrentTime == 89); + AddAssert("Time = 89", () => clock.CurrentTime == 89); // Backwards AddStep("Seek(25)", () => composer.SeekTo(25)); - AddAssert("Time = 25", () => track.CurrentTime == 25); + AddAssert("Time = 25", () => clock.CurrentTime == 25); AddStep("Seek(0)", () => composer.SeekTo(0)); - AddAssert("Time = 0", () => track.CurrentTime == 0); + AddAssert("Time = 0", () => clock.CurrentTime == 0); } /// @@ -114,19 +119,19 @@ namespace osu.Game.Tests.Visual reset(); AddStep("Seek(0), Snap", () => composer.SeekTo(0, true)); - AddAssert("Time = 0", () => track.CurrentTime == 0); + AddAssert("Time = 0", () => clock.CurrentTime == 0); AddStep("Seek(50), Snap", () => composer.SeekTo(50, true)); - AddAssert("Time = 50", () => track.CurrentTime == 50); + AddAssert("Time = 50", () => clock.CurrentTime == 50); AddStep("Seek(100), Snap", () => composer.SeekTo(100, true)); - AddAssert("Time = 100", () => track.CurrentTime == 100); + AddAssert("Time = 100", () => clock.CurrentTime == 100); AddStep("Seek(175), Snap", () => composer.SeekTo(175, true)); - AddAssert("Time = 175", () => track.CurrentTime == 175); + AddAssert("Time = 175", () => clock.CurrentTime == 175); AddStep("Seek(350), Snap", () => composer.SeekTo(350, true)); - AddAssert("Time = 350", () => track.CurrentTime == 350); + AddAssert("Time = 350", () => clock.CurrentTime == 350); AddStep("Seek(400), Snap", () => composer.SeekTo(400, true)); - AddAssert("Time = 400", () => track.CurrentTime == 400); + AddAssert("Time = 400", () => clock.CurrentTime == 400); AddStep("Seek(450), Snap", () => composer.SeekTo(450, true)); - AddAssert("Time = 450", () => track.CurrentTime == 450); + AddAssert("Time = 450", () => clock.CurrentTime == 450); } /// @@ -139,17 +144,17 @@ namespace osu.Game.Tests.Visual reset(); AddStep("Seek(24), Snap", () => composer.SeekTo(24, true)); - AddAssert("Time = 0", () => track.CurrentTime == 0); + AddAssert("Time = 0", () => clock.CurrentTime == 0); AddStep("Seek(26), Snap", () => composer.SeekTo(26, true)); - AddAssert("Time = 50", () => track.CurrentTime == 50); + AddAssert("Time = 50", () => clock.CurrentTime == 50); AddStep("Seek(150), Snap", () => composer.SeekTo(150, true)); - AddAssert("Time = 100", () => track.CurrentTime == 100); + AddAssert("Time = 100", () => clock.CurrentTime == 100); AddStep("Seek(170), Snap", () => composer.SeekTo(170, true)); - AddAssert("Time = 175", () => track.CurrentTime == 175); + AddAssert("Time = 175", () => clock.CurrentTime == 175); AddStep("Seek(274), Snap", () => composer.SeekTo(274, true)); - AddAssert("Time = 175", () => track.CurrentTime == 175); + AddAssert("Time = 175", () => clock.CurrentTime == 175); AddStep("Seek(276), Snap", () => composer.SeekTo(276, true)); - AddAssert("Time = 350", () => track.CurrentTime == 350); + AddAssert("Time = 350", () => clock.CurrentTime == 350); } /// @@ -160,15 +165,15 @@ namespace osu.Game.Tests.Visual reset(); AddStep("SeekForward", () => composer.SeekForward()); - AddAssert("Time = 50", () => track.CurrentTime == 50); + AddAssert("Time = 50", () => clock.CurrentTime == 50); AddStep("SeekForward", () => composer.SeekForward()); - AddAssert("Time = 100", () => track.CurrentTime == 100); + AddAssert("Time = 100", () => clock.CurrentTime == 100); AddStep("SeekForward", () => composer.SeekForward()); - AddAssert("Time = 200", () => track.CurrentTime == 200); + AddAssert("Time = 200", () => clock.CurrentTime == 200); AddStep("SeekForward", () => composer.SeekForward()); - AddAssert("Time = 400", () => track.CurrentTime == 400); + AddAssert("Time = 400", () => clock.CurrentTime == 400); AddStep("SeekForward", () => composer.SeekForward()); - AddAssert("Time = 450", () => track.CurrentTime == 450); + AddAssert("Time = 450", () => clock.CurrentTime == 450); } /// @@ -179,17 +184,17 @@ namespace osu.Game.Tests.Visual reset(); AddStep("SeekForward, Snap", () => composer.SeekForward(true)); - AddAssert("Time = 50", () => track.CurrentTime == 50); + AddAssert("Time = 50", () => clock.CurrentTime == 50); AddStep("SeekForward, Snap", () => composer.SeekForward(true)); - AddAssert("Time = 100", () => track.CurrentTime == 100); + AddAssert("Time = 100", () => clock.CurrentTime == 100); AddStep("SeekForward, Snap", () => composer.SeekForward(true)); - AddAssert("Time = 175", () => track.CurrentTime == 175); + AddAssert("Time = 175", () => clock.CurrentTime == 175); AddStep("SeekForward, Snap", () => composer.SeekForward(true)); - AddAssert("Time = 350", () => track.CurrentTime == 350); + AddAssert("Time = 350", () => clock.CurrentTime == 350); AddStep("SeekForward, Snap", () => composer.SeekForward(true)); - AddAssert("Time = 400", () => track.CurrentTime == 400); + AddAssert("Time = 400", () => clock.CurrentTime == 400); AddStep("SeekForward, Snap", () => composer.SeekForward(true)); - AddAssert("Time = 450", () => track.CurrentTime == 450); + AddAssert("Time = 450", () => clock.CurrentTime == 450); } /// @@ -202,28 +207,28 @@ namespace osu.Game.Tests.Visual AddStep("Seek(49)", () => composer.SeekTo(49)); AddStep("SeekForward, Snap", () => composer.SeekForward(true)); - AddAssert("Time = 50", () => track.CurrentTime == 50); + AddAssert("Time = 50", () => clock.CurrentTime == 50); AddStep("Seek(49.999)", () => composer.SeekTo(49.999)); AddStep("SeekForward, Snap", () => composer.SeekForward(true)); - AddAssert("Time = 50", () => track.CurrentTime == 50); + AddAssert("Time = 50", () => clock.CurrentTime == 50); AddStep("Seek(99)", () => composer.SeekTo(99)); AddStep("SeekForward, Snap", () => composer.SeekForward(true)); - AddAssert("Time = 100", () => track.CurrentTime == 100); + AddAssert("Time = 100", () => clock.CurrentTime == 100); AddStep("Seek(99.999)", () => composer.SeekTo(99.999)); AddStep("SeekForward, Snap", () => composer.SeekForward(true)); - AddAssert("Time = 100", () => track.CurrentTime == 100); + AddAssert("Time = 100", () => clock.CurrentTime == 100); AddStep("Seek(174)", () => composer.SeekTo(174)); AddStep("SeekForward, Snap", () => composer.SeekForward(true)); - AddAssert("Time = 175", () => track.CurrentTime == 175); + AddAssert("Time = 175", () => clock.CurrentTime == 175); AddStep("Seek(349)", () => composer.SeekTo(349)); AddStep("SeekForward, Snap", () => composer.SeekForward(true)); - AddAssert("Time = 350", () => track.CurrentTime == 350); + AddAssert("Time = 350", () => clock.CurrentTime == 350); AddStep("Seek(399)", () => composer.SeekTo(399)); AddStep("SeekForward, Snap", () => composer.SeekForward(true)); - AddAssert("Time = 400", () => track.CurrentTime == 400); + AddAssert("Time = 400", () => clock.CurrentTime == 400); AddStep("Seek(449)", () => composer.SeekTo(449)); AddStep("SeekForward, Snap", () => composer.SeekForward(true)); - AddAssert("Time = 450", () => track.CurrentTime == 450); + AddAssert("Time = 450", () => clock.CurrentTime == 450); } /// @@ -235,17 +240,17 @@ namespace osu.Game.Tests.Visual AddStep("Seek(450)", () => composer.SeekTo(450)); AddStep("SeekBackward", () => composer.SeekBackward()); - AddAssert("Time = 425", () => track.CurrentTime == 425); + AddAssert("Time = 425", () => clock.CurrentTime == 425); AddStep("SeekBackward", () => composer.SeekBackward()); - AddAssert("Time = 375", () => track.CurrentTime == 375); + AddAssert("Time = 375", () => clock.CurrentTime == 375); AddStep("SeekBackward", () => composer.SeekBackward()); - AddAssert("Time = 325", () => track.CurrentTime == 325); + AddAssert("Time = 325", () => clock.CurrentTime == 325); AddStep("SeekBackward", () => composer.SeekBackward()); - AddAssert("Time = 125", () => track.CurrentTime == 125); + AddAssert("Time = 125", () => clock.CurrentTime == 125); AddStep("SeekBackward", () => composer.SeekBackward()); - AddAssert("Time = 25", () => track.CurrentTime == 25); + AddAssert("Time = 25", () => clock.CurrentTime == 25); AddStep("SeekBackward", () => composer.SeekBackward()); - AddAssert("Time = 0", () => track.CurrentTime == 0); + AddAssert("Time = 0", () => clock.CurrentTime == 0); } /// @@ -257,17 +262,17 @@ namespace osu.Game.Tests.Visual AddStep("Seek(450)", () => composer.SeekTo(450)); AddStep("SeekBackward, Snap", () => composer.SeekBackward(true)); - AddAssert("Time = 400", () => track.CurrentTime == 400); + AddAssert("Time = 400", () => clock.CurrentTime == 400); AddStep("SeekBackward, Snap", () => composer.SeekBackward(true)); - AddAssert("Time = 350", () => track.CurrentTime == 350); + AddAssert("Time = 350", () => clock.CurrentTime == 350); AddStep("SeekBackward, Snap", () => composer.SeekBackward(true)); - AddAssert("Time = 175", () => track.CurrentTime == 175); + AddAssert("Time = 175", () => clock.CurrentTime == 175); AddStep("SeekBackward, Snap", () => composer.SeekBackward(true)); - AddAssert("Time = 100", () => track.CurrentTime == 100); + AddAssert("Time = 100", () => clock.CurrentTime == 100); AddStep("SeekBackward, Snap", () => composer.SeekBackward(true)); - AddAssert("Time = 50", () => track.CurrentTime == 50); + AddAssert("Time = 50", () => clock.CurrentTime == 50); AddStep("SeekBackward, Snap", () => composer.SeekBackward(true)); - AddAssert("Time = 0", () => track.CurrentTime == 0); + AddAssert("Time = 0", () => clock.CurrentTime == 0); } /// @@ -280,16 +285,16 @@ namespace osu.Game.Tests.Visual AddStep("Seek(451)", () => composer.SeekTo(451)); AddStep("SeekBackward, Snap", () => composer.SeekBackward(true)); - AddAssert("Time = 450", () => track.CurrentTime == 450); + AddAssert("Time = 450", () => clock.CurrentTime == 450); AddStep("Seek(450.999)", () => composer.SeekTo(450.999)); AddStep("SeekBackward, Snap", () => composer.SeekBackward(true)); - AddAssert("Time = 450", () => track.CurrentTime == 450); + AddAssert("Time = 450", () => clock.CurrentTime == 450); AddStep("Seek(401)", () => composer.SeekTo(401)); AddStep("SeekBackward, Snap", () => composer.SeekBackward(true)); - AddAssert("Time = 400", () => track.CurrentTime == 400); + AddAssert("Time = 400", () => clock.CurrentTime == 400); AddStep("Seek(401.999)", () => composer.SeekTo(401.999)); AddStep("SeekBackward, Snap", () => composer.SeekBackward(true)); - AddAssert("Time = 400", () => track.CurrentTime == 400); + AddAssert("Time = 400", () => clock.CurrentTime == 400); } /// @@ -307,23 +312,23 @@ namespace osu.Game.Tests.Visual { AddStep("SeekForward, Snap", () => { - lastTime = track.CurrentTime; + lastTime = clock.CurrentTime; composer.SeekForward(true); }); - AddAssert("Time > lastTime", () => track.CurrentTime > lastTime); + AddAssert("Time > lastTime", () => clock.CurrentTime > lastTime); } for (int i = 0; i < 20; i++) { AddStep("SeekBackward, Snap", () => { - lastTime = track.CurrentTime; + lastTime = clock.CurrentTime; composer.SeekBackward(true); }); - AddAssert("Time < lastTime", () => track.CurrentTime < lastTime); + AddAssert("Time < lastTime", () => clock.CurrentTime < lastTime); } - AddAssert("Time = 0", () => track.CurrentTime == 0); + AddAssert("Time = 0", () => clock.CurrentTime == 0); } private void reset() @@ -333,8 +338,8 @@ namespace osu.Game.Tests.Visual private class TestHitObjectComposer : HitObjectComposer { - public TestHitObjectComposer(Ruleset ruleset) - : base(ruleset) + public TestHitObjectComposer(Ruleset ruleset, IAdjustableClock adjustableClock, IFrameBasedClock framedClock) + : base(ruleset, adjustableClock, framedClock) { } @@ -409,7 +414,7 @@ namespace osu.Game.Tests.Visual { base.Update(); - tracker.X = (float)(track.CurrentTime / track.Length); + tracker.X = (float)(Time.Current / track.Length); } private class TimingPointTimeline : CompositeDrawable diff --git a/osu.Game.Tests/Visual/TestCaseEditorSelectionLayer.cs b/osu.Game.Tests/Visual/TestCaseEditorSelectionLayer.cs index 8d12dfc517..87ad909354 100644 --- a/osu.Game.Tests/Visual/TestCaseEditorSelectionLayer.cs +++ b/osu.Game.Tests/Visual/TestCaseEditorSelectionLayer.cs @@ -5,6 +5,7 @@ using System; using System.Collections.Generic; using NUnit.Framework; using osu.Framework.Allocation; +using osu.Framework.Timing; using OpenTK; using osu.Game.Beatmaps; using osu.Game.Rulesets.Edit; @@ -62,7 +63,9 @@ namespace osu.Game.Tests.Visual }, }); - Child = new OsuHitObjectComposer(new OsuRuleset()); + var clock = new DecoupleableInterpolatingFramedClock { IsCoupled = false }; + + Child = new OsuHitObjectComposer(new OsuRuleset(), clock, clock); } } } diff --git a/osu.Game.Tests/Visual/TestCaseEditorSummaryTimeline.cs b/osu.Game.Tests/Visual/TestCaseEditorSummaryTimeline.cs index 26c8814bc4..6e4b0c2a72 100644 --- a/osu.Game.Tests/Visual/TestCaseEditorSummaryTimeline.cs +++ b/osu.Game.Tests/Visual/TestCaseEditorSummaryTimeline.cs @@ -12,6 +12,7 @@ using osu.Game.Beatmaps.ControlPoints; using OpenTK; using osu.Game.Screens.Edit.Components.Timelines.Summary; using osu.Framework.Configuration; +using osu.Framework.Timing; namespace osu.Game.Tests.Visual { @@ -29,8 +30,10 @@ namespace osu.Game.Tests.Visual { random = new Random(1337); + var clock = new DecoupleableInterpolatingFramedClock { IsCoupled = false }; + SummaryTimeline summaryTimeline; - Add(summaryTimeline = new SummaryTimeline + Add(summaryTimeline = new SummaryTimeline(clock) { Anchor = Anchor.Centre, Origin = Anchor.Centre, diff --git a/osu.Game.Tests/Visual/TestCasePlaybackControl.cs b/osu.Game.Tests/Visual/TestCasePlaybackControl.cs index 43e977ba23..37bf38bbc6 100644 --- a/osu.Game.Tests/Visual/TestCasePlaybackControl.cs +++ b/osu.Game.Tests/Visual/TestCasePlaybackControl.cs @@ -3,6 +3,7 @@ using NUnit.Framework; using osu.Framework.Graphics; +using osu.Framework.Timing; using osu.Game.Beatmaps; using osu.Game.Screens.Edit.Components; using osu.Game.Tests.Beatmaps; @@ -15,7 +16,9 @@ namespace osu.Game.Tests.Visual { public TestCasePlaybackControl() { - var playback = new PlaybackControl + var clock = new DecoupleableInterpolatingFramedClock { IsCoupled = false }; + + var playback = new PlaybackControl(clock) { Anchor = Anchor.Centre, Origin = Anchor.Centre, From c937ef5d247706948fab0a3c6ff9b3a9b594dd87 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Thu, 15 Mar 2018 18:26:53 +0900 Subject: [PATCH 430/544] Fix not being able to scroll before the first timing point --- osu.Game/Rulesets/Edit/HitObjectComposer.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game/Rulesets/Edit/HitObjectComposer.cs b/osu.Game/Rulesets/Edit/HitObjectComposer.cs index 8934448301..12529c9eac 100644 --- a/osu.Game/Rulesets/Edit/HitObjectComposer.cs +++ b/osu.Game/Rulesets/Edit/HitObjectComposer.cs @@ -243,7 +243,7 @@ namespace osu.Game.Rulesets.Edit seekTime = timingPoint.Time + closestBeat * seekAmount; } - if (seekTime < timingPoint.Time) + if (seekTime < timingPoint.Time && timingPoint != cpi.TimingPoints.First()) seekTime = timingPoint.Time; var nextTimingPoint = cpi.TimingPoints.FirstOrDefault(t => t.Time > timingPoint.Time); From fc15c63a886d5ab9f2c7c14784df04ea1121be7d Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Thu, 15 Mar 2018 18:28:08 +0900 Subject: [PATCH 431/544] Re-order methods --- osu.Game/Rulesets/Edit/HitObjectComposer.cs | 60 ++++++++++----------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/osu.Game/Rulesets/Edit/HitObjectComposer.cs b/osu.Game/Rulesets/Edit/HitObjectComposer.cs index 12529c9eac..8cb6caaa12 100644 --- a/osu.Game/Rulesets/Edit/HitObjectComposer.cs +++ b/osu.Game/Rulesets/Edit/HitObjectComposer.cs @@ -168,36 +168,6 @@ namespace osu.Game.Rulesets.Edit /// Whether to snap to the closest beat. public void SeekForward(bool snapped = false) => seek(1, snapped); - public void SeekTo(double seekTime, bool snapped = false) - { - // Todo: This should not be a constant, but feels good for now - const int beat_snap_divisor = 4; - - if (!snapped) - { - adjustableClock.Seek(seekTime); - return; - } - - var timingPoint = beatmap.Value.Beatmap.ControlPointInfo.TimingPointAt(seekTime); - double beatSnapLength = timingPoint.BeatLength / beat_snap_divisor; - - // We will be snapping to beats within the timing point - seekTime -= timingPoint.Time; - - // Determine the index from the current timing point of the closest beat to seekTime - int closestBeat = (int)Math.Round(seekTime / beatSnapLength); - seekTime = timingPoint.Time + closestBeat * beatSnapLength; - - // Depending on beatSnapLength, we may snap to a beat that is beyond timingPoint's end time, but we want to instead snap to - // the next timing point's start time - var nextTimingPoint = beatmap.Value.Beatmap.ControlPointInfo.TimingPoints.FirstOrDefault(t => t.Time > timingPoint.Time); - if (seekTime > nextTimingPoint?.Time) - seekTime = nextTimingPoint.Time; - - adjustableClock.Seek(seekTime); - } - private void seek(int direction, bool snapped) { // Todo: This should not be a constant, but feels good for now @@ -253,6 +223,36 @@ namespace osu.Game.Rulesets.Edit adjustableClock.Seek(seekTime); } + public void SeekTo(double seekTime, bool snapped = false) + { + // Todo: This should not be a constant, but feels good for now + const int beat_snap_divisor = 4; + + if (!snapped) + { + adjustableClock.Seek(seekTime); + return; + } + + var timingPoint = beatmap.Value.Beatmap.ControlPointInfo.TimingPointAt(seekTime); + double beatSnapLength = timingPoint.BeatLength / beat_snap_divisor; + + // We will be snapping to beats within the timing point + seekTime -= timingPoint.Time; + + // Determine the index from the current timing point of the closest beat to seekTime + int closestBeat = (int)Math.Round(seekTime / beatSnapLength); + seekTime = timingPoint.Time + closestBeat * beatSnapLength; + + // Depending on beatSnapLength, we may snap to a beat that is beyond timingPoint's end time, but we want to instead snap to + // the next timing point's start time + var nextTimingPoint = beatmap.Value.Beatmap.ControlPointInfo.TimingPoints.FirstOrDefault(t => t.Time > timingPoint.Time); + if (seekTime > nextTimingPoint?.Time) + seekTime = nextTimingPoint.Time; + + adjustableClock.Seek(seekTime); + } + private void setCompositionTool(ICompositionTool tool) => CurrentTool = tool; protected virtual RulesetContainer CreateRulesetContainer(Ruleset ruleset, WorkingBeatmap beatmap) => ruleset.CreateRulesetContainerWith(beatmap, true); From 7ded1635fa3ca0dab91fa67b0fece002e13c1103 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Fri, 16 Mar 2018 14:43:14 +0900 Subject: [PATCH 432/544] Update submodules --- osu-framework | 2 +- osu-resources | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/osu-framework b/osu-framework index d29c8365ba..cd6f6e93c9 160000 --- a/osu-framework +++ b/osu-framework @@ -1 +1 @@ -Subproject commit d29c8365ba3cf7924b57cf22341f4af55658764c +Subproject commit cd6f6e93c958e3e4e98db08dd7a443cabcf4742f diff --git a/osu-resources b/osu-resources index 92ec3d10b1..7bb0782200 160000 --- a/osu-resources +++ b/osu-resources @@ -1 +1 @@ -Subproject commit 92ec3d10b12c5e9bfc1d3b05d3db174a506efd6d +Subproject commit 7bb0782200abadf73b79ed1a3bc1d5b926c6a81e From 2ba2556d2af131d2d29e4f9ff5c6cdd7e5b65573 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Fri, 16 Mar 2018 15:24:47 +0900 Subject: [PATCH 433/544] Update submodules --- osu-framework | 2 +- osu-resources | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/osu-framework b/osu-framework index 727a8fb93b..41e2a0a430 160000 --- a/osu-framework +++ b/osu-framework @@ -1 +1 @@ -Subproject commit 727a8fb93b50aec18f8f83c9046243174e09de93 +Subproject commit 41e2a0a4304544fb67779c21cad1435c105982d5 diff --git a/osu-resources b/osu-resources index 92ec3d10b1..7bb0782200 160000 --- a/osu-resources +++ b/osu-resources @@ -1 +1 @@ -Subproject commit 92ec3d10b12c5e9bfc1d3b05d3db174a506efd6d +Subproject commit 7bb0782200abadf73b79ed1a3bc1d5b926c6a81e From 20acc601bb09cccd318d7c90cb7b6e271d0e609b Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Fri, 16 Mar 2018 16:09:51 +0900 Subject: [PATCH 434/544] Fix up breaking taiko changes --- .../Objects/Drawables/DrawableBarLineMajor.cs | 4 ++-- osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableSwell.cs | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableBarLineMajor.cs b/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableBarLineMajor.cs index 656d9bddd4..19a6e4eac2 100644 --- a/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableBarLineMajor.cs +++ b/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableBarLineMajor.cs @@ -25,7 +25,7 @@ namespace osu.Game.Rulesets.Taiko.Objects.Drawables public DrawableBarLineMajor(BarLine barLine) : base(barLine) { - InternalChild = triangleContainer = new Container + AddInternal(triangleContainer = new Container { Anchor = Anchor.Centre, Origin = Anchor.Centre, @@ -51,7 +51,7 @@ namespace osu.Game.Rulesets.Taiko.Objects.Drawables EdgeSmoothness = new Vector2(1), } } - }; + }); Tracker.Alpha = 1f; } diff --git a/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableSwell.cs b/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableSwell.cs index 4097b65375..37f1300d47 100644 --- a/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableSwell.cs +++ b/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableSwell.cs @@ -48,7 +48,7 @@ namespace osu.Game.Rulesets.Taiko.Objects.Drawables { FillMode = FillMode.Fit; - InternalChild = bodyContainer = new Container + AddInternal(bodyContainer = new Container { RelativeSizeAxes = Axes.Both, Depth = 1, @@ -111,7 +111,7 @@ namespace osu.Game.Rulesets.Taiko.Objects.Drawables } } } - }; + }); MainPiece.Add(symbol = new SwellSymbolPiece()); } From 8d790e180d8a2e221e1a691df839d48af22a017d Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Fri, 16 Mar 2018 17:02:41 +0900 Subject: [PATCH 435/544] Fix juice stream droplets spawning in incorrect locations Closes #2149. --- .../Objects/JuiceStream.cs | 75 ++++++++++--------- .../Tests/CatchBeatmapConversionTest.cs | 2 +- 2 files changed, 41 insertions(+), 36 deletions(-) diff --git a/osu.Game.Rulesets.Catch/Objects/JuiceStream.cs b/osu.Game.Rulesets.Catch/Objects/JuiceStream.cs index a3e5aba2db..e4d5ae698f 100644 --- a/osu.Game.Rulesets.Catch/Objects/JuiceStream.cs +++ b/osu.Game.Rulesets.Catch/Objects/JuiceStream.cs @@ -65,54 +65,59 @@ namespace osu.Game.Rulesets.Catch.Objects X = X }); - for (var span = 0; span < this.SpanCount(); span++) + double lastDropletTime = StartTime; + + for (int span = 0; span < this.SpanCount(); span++) { var spanStartTime = StartTime + span * spanDuration; var reversed = span % 2 == 1; - for (var d = tickDistance; d <= length; d += tickDistance) + for (double d = 0; d <= length; d += tickDistance) { - if (d > length - minDistanceFromEnd) - break; - var timeProgress = d / length; var distanceProgress = reversed ? 1 - timeProgress : timeProgress; - var lastTickTime = spanStartTime + timeProgress * spanDuration; - AddNested(new Droplet + double time = spanStartTime + timeProgress * spanDuration; + + double tinyTickInterval = time - lastDropletTime; + while (tinyTickInterval > 100) + tinyTickInterval /= 2; + + for (double t = lastDropletTime + tinyTickInterval; t < time; t += tinyTickInterval) { - StartTime = lastTickTime, - ComboColour = ComboColour, - X = X + Curve.PositionAt(distanceProgress).X / CatchPlayfield.BASE_WIDTH, - Samples = new List(Samples.Select(s => new SampleInfo + double progress = reversed ? 1 - (t - spanStartTime) / spanDuration : (t - spanStartTime) / spanDuration; + + AddNested(new TinyDroplet { - Bank = s.Bank, - Name = @"slidertick", - Volume = s.Volume - })) - }); - } + StartTime = t, + ComboColour = ComboColour, + X = X + Curve.PositionAt(progress).X / CatchPlayfield.BASE_WIDTH, + Samples = new List(Samples.Select(s => new SampleInfo + { + Bank = s.Bank, + Name = @"slidertick", + Volume = s.Volume + })) + }); + } - double tinyTickInterval = tickDistance / length * spanDuration; - while (tinyTickInterval > 100) - tinyTickInterval /= 2; - - for (double t = 0; t < spanDuration; t += tinyTickInterval) - { - double progress = reversed ? 1 - t / spanDuration : t / spanDuration; - - AddNested(new TinyDroplet + if (d > minDistanceFromEnd && Math.Abs(d - length) > minDistanceFromEnd) { - StartTime = spanStartTime + t, - ComboColour = ComboColour, - X = X + Curve.PositionAt(progress).X / CatchPlayfield.BASE_WIDTH, - Samples = new List(Samples.Select(s => new SampleInfo + AddNested(new Droplet { - Bank = s.Bank, - Name = @"slidertick", - Volume = s.Volume - })) - }); + StartTime = time, + ComboColour = ComboColour, + X = X + Curve.PositionAt(distanceProgress).X / CatchPlayfield.BASE_WIDTH, + Samples = new List(Samples.Select(s => new SampleInfo + { + Bank = s.Bank, + Name = @"slidertick", + Volume = s.Volume + })) + }); + } + + lastDropletTime = time; } AddNested(new Fruit diff --git a/osu.Game.Rulesets.Catch/Tests/CatchBeatmapConversionTest.cs b/osu.Game.Rulesets.Catch/Tests/CatchBeatmapConversionTest.cs index 826c900140..e40510b71b 100644 --- a/osu.Game.Rulesets.Catch/Tests/CatchBeatmapConversionTest.cs +++ b/osu.Game.Rulesets.Catch/Tests/CatchBeatmapConversionTest.cs @@ -18,7 +18,7 @@ namespace osu.Game.Rulesets.Catch.Tests { protected override string ResourceAssembly => "osu.Game.Rulesets.Catch"; - [TestCase("basic"), Ignore("See: https://github.com/ppy/osu/issues/2149")] + [TestCase("basic"), Ignore("See: https://github.com/ppy/osu/issues/2232")] public new void Test(string name) { base.Test(name); From 6f7163769d273897f018fbeda9782f6eb1cf7439 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Fri, 16 Mar 2018 19:57:14 +0900 Subject: [PATCH 436/544] Adjust comment for readability --- osu.Game/Rulesets/Edit/HitObjectComposer.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game/Rulesets/Edit/HitObjectComposer.cs b/osu.Game/Rulesets/Edit/HitObjectComposer.cs index 087e733d77..36419ebd1f 100644 --- a/osu.Game/Rulesets/Edit/HitObjectComposer.cs +++ b/osu.Game/Rulesets/Edit/HitObjectComposer.cs @@ -180,7 +180,7 @@ namespace osu.Game.Rulesets.Edit var timingPoint = cpi.TimingPointAt(adjustableClock.CurrentTime); if (direction < 0 && timingPoint.Time == adjustableClock.CurrentTime) { - // When going backwards, we care about the timing point that was _previously_ active at the current time + // When going backwards and we're at the boundary of two timing points, we compute the seek distance with the timing point which we are seeking into int activeIndex = cpi.TimingPoints.IndexOf(timingPoint); while (activeIndex > 0 && adjustableClock.CurrentTime == timingPoint.Time) timingPoint = cpi.TimingPoints[--activeIndex]; From abb5dcf678607c7e7347f07ea37fbc4850bbdddb Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Fri, 16 Mar 2018 23:53:46 +0900 Subject: [PATCH 437/544] Fix null-refing testcase This would also be fixed with BDL loading children after we're fully loaded ;). --- .../Visual/TestCaseEditorCompose.cs | 37 ++++--------------- 1 file changed, 7 insertions(+), 30 deletions(-) diff --git a/osu.Game.Tests/Visual/TestCaseEditorCompose.cs b/osu.Game.Tests/Visual/TestCaseEditorCompose.cs index edc790e809..945c3c3901 100644 --- a/osu.Game.Tests/Visual/TestCaseEditorCompose.cs +++ b/osu.Game.Tests/Visual/TestCaseEditorCompose.cs @@ -1,51 +1,28 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE -using System; using NUnit.Framework; using osu.Framework.Allocation; using osu.Framework.Timing; -using osu.Game.Beatmaps; +using osu.Game.Rulesets.Osu; using osu.Game.Screens.Edit.Screens.Compose; +using osu.Game.Tests.Beatmaps; namespace osu.Game.Tests.Visual { [TestFixture] public class TestCaseEditorCompose : OsuTestCase { - private readonly Random random; - private readonly Compose compose; - - public TestCaseEditorCompose() + [BackgroundDependencyLoader] + private void load(OsuGameBase osuGame) { - random = new Random(1337); + osuGame.Beatmap.Value = new TestWorkingBeatmap(new OsuRuleset().RulesetInfo); var clock = new DecoupleableInterpolatingFramedClock { IsCoupled = false }; - - Add(compose = new Compose(clock, clock)); - AddStep("Next beatmap", nextBeatmap); - } - - private OsuGameBase osuGame; - private BeatmapManager beatmaps; - - [BackgroundDependencyLoader] - private void load(OsuGameBase osuGame, BeatmapManager beatmaps) - { - this.osuGame = osuGame; - this.beatmaps = beatmaps; - + var compose = new Compose(clock, clock); compose.Beatmap.BindTo(osuGame.Beatmap); - } - private void nextBeatmap() - { - var sets = beatmaps.GetAllUsableBeatmapSets(); - if (sets.Count == 0) - return; - - var b = sets[random.Next(0, sets.Count)].Beatmaps[0]; - osuGame.Beatmap.Value = beatmaps.GetWorkingBeatmap(b); + Child = compose; } } } From 604e725f3fba86cc5d65d3a37ebc9fa61c5f8d4b Mon Sep 17 00:00:00 2001 From: TocoToucan Date: Fri, 16 Mar 2018 20:42:05 +0300 Subject: [PATCH 438/544] Remove redundant code --- osu.Game/Input/Bindings/GlobalActionContainer.cs | 5 +++-- osu.Game/OsuGame.cs | 4 +--- .../Overlays/Settings/Sections/Graphics/DetailSettings.cs | 3 ++- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/osu.Game/Input/Bindings/GlobalActionContainer.cs b/osu.Game/Input/Bindings/GlobalActionContainer.cs index f6263a05c2..97e473a797 100644 --- a/osu.Game/Input/Bindings/GlobalActionContainer.cs +++ b/osu.Game/Input/Bindings/GlobalActionContainer.cs @@ -68,13 +68,14 @@ namespace osu.Game.Input.Bindings DecreaseVolume, [Description("Toggle mute")] ToggleMute, - [Description("Take screenshot")] - TakeScreenshot, // In-Game Keybindings [Description("Skip Cutscene")] SkipCutscene, [Description("Quick Retry (Hold)")] QuickRetry, + + [Description("Take screenshot")] + TakeScreenshot } } diff --git a/osu.Game/OsuGame.cs b/osu.Game/OsuGame.cs index 44946dd23d..ba21dc3349 100644 --- a/osu.Game/OsuGame.cs +++ b/osu.Game/OsuGame.cs @@ -81,8 +81,6 @@ namespace osu.Game private Bindable configRuleset; public Bindable Ruleset = new Bindable(); - private ScreenshotManager screenshotManager; - private Bindable configSkin; private readonly string[] args; @@ -220,7 +218,7 @@ namespace osu.Game }, mainContent = new Container { RelativeSizeAxes = Axes.Both }, overlayContent = new Container { RelativeSizeAxes = Axes.Both, Depth = float.MinValue }, - screenshotManager = new ScreenshotManager() + new ScreenshotManager() }); loadComponentSingleFile(screenStack = new Loader(), d => diff --git a/osu.Game/Overlays/Settings/Sections/Graphics/DetailSettings.cs b/osu.Game/Overlays/Settings/Sections/Graphics/DetailSettings.cs index 3f4fc96d31..fa57a85454 100644 --- a/osu.Game/Overlays/Settings/Sections/Graphics/DetailSettings.cs +++ b/osu.Game/Overlays/Settings/Sections/Graphics/DetailSettings.cs @@ -1,5 +1,6 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + using osu.Framework.Allocation; using osu.Framework.Graphics; using osu.Game.Configuration; @@ -25,7 +26,7 @@ namespace osu.Game.Overlays.Settings.Sections.Graphics LabelText = "Rotate cursor when dragging", Bindable = config.GetBindable(OsuSetting.CursorRotation) }, - new SettingsEnumDropdown() + new SettingsEnumDropdown { LabelText = "Screenshot format", Bindable = config.GetBindable(OsuSetting.ScreenshotFormat) From 8429408974a8d89e07279b22cb8c5007b91eb81c Mon Sep 17 00:00:00 2001 From: TocoToucan Date: Fri, 16 Mar 2018 21:05:25 +0300 Subject: [PATCH 439/544] Change screenshot file name --- osu.Game/Graphics/ScreenshotManager.cs | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/osu.Game/Graphics/ScreenshotManager.cs b/osu.Game/Graphics/ScreenshotManager.cs index 8e0c2cce50..f1477f6b6c 100644 --- a/osu.Game/Graphics/ScreenshotManager.cs +++ b/osu.Game/Graphics/ScreenshotManager.cs @@ -45,7 +45,7 @@ namespace osu.Game.Graphics { host.TakeScreenshot(screenshotBitmap => { - var stream = storage.GetStream($"{DateTime.Now:yyyyMMddTHHmmss}.{screenshotFormat.ToString().ToLower()}", FileAccess.Write); + var stream = getFileStream(); switch (screenshotFormat.Value) { @@ -60,5 +60,23 @@ namespace osu.Game.Graphics } }); } + + private Stream getFileStream() + { + var fileExt = screenshotFormat.ToString().ToLower(); + + var withoutIndex = $"Screenshot.{fileExt}"; + if (!storage.Exists(withoutIndex)) + return storage.GetStream(withoutIndex, FileAccess.Write); + + for (ulong i = 1; i < ulong.MaxValue; i++) + { + var indexedName = $"Screenshot-{i}.{fileExt}"; + if (!storage.Exists(indexedName)) + return storage.GetStream(indexedName, FileAccess.Write); + } + + throw new Exception($"Failed to get stream for saving {fileExt} file"); + } } } From 245200d3eed14db452976108d28f1068cb66d85d Mon Sep 17 00:00:00 2001 From: TocoToucan Date: Fri, 16 Mar 2018 21:25:00 +0300 Subject: [PATCH 440/544] Add simple screenshot notification --- osu.Game/Graphics/ScreenshotManager.cs | 19 +++++++++++++------ osu.Game/OsuGame.cs | 3 ++- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/osu.Game/Graphics/ScreenshotManager.cs b/osu.Game/Graphics/ScreenshotManager.cs index f1477f6b6c..ae1aebfbc1 100644 --- a/osu.Game/Graphics/ScreenshotManager.cs +++ b/osu.Game/Graphics/ScreenshotManager.cs @@ -9,6 +9,8 @@ using osu.Framework.Input.Bindings; using osu.Framework.Platform; using osu.Game.Configuration; using osu.Game.Input.Bindings; +using osu.Game.Overlays; +using osu.Game.Overlays.Notifications; namespace osu.Game.Graphics { @@ -17,12 +19,14 @@ namespace osu.Game.Graphics private Bindable screenshotFormat; private GameHost host; private Storage storage; + private NotificationOverlay notificationOverlay; [BackgroundDependencyLoader] - private void load(GameHost host, OsuConfigManager config, Storage storage) + private void load(GameHost host, OsuConfigManager config, Storage storage, NotificationOverlay notificationOverlay) { this.host = host; this.storage = storage.GetStorageForDirectory(@"screenshots"); + this.notificationOverlay = notificationOverlay; screenshotFormat = config.GetBindable(OsuSetting.ScreenshotFormat); } @@ -45,7 +49,8 @@ namespace osu.Game.Graphics { host.TakeScreenshot(screenshotBitmap => { - var stream = getFileStream(); + var fileName = getFileName(); + var stream = storage.GetStream(fileName, FileAccess.Write); switch (screenshotFormat.Value) { @@ -58,25 +63,27 @@ namespace osu.Game.Graphics default: throw new ArgumentOutOfRangeException(nameof(screenshotFormat)); } + + notificationOverlay.Post(new SimpleNotification { Text = $"{fileName} saved" }); }); } - private Stream getFileStream() + private string getFileName() { var fileExt = screenshotFormat.ToString().ToLower(); var withoutIndex = $"Screenshot.{fileExt}"; if (!storage.Exists(withoutIndex)) - return storage.GetStream(withoutIndex, FileAccess.Write); + return withoutIndex; for (ulong i = 1; i < ulong.MaxValue; i++) { var indexedName = $"Screenshot-{i}.{fileExt}"; if (!storage.Exists(indexedName)) - return storage.GetStream(indexedName, FileAccess.Write); + return indexedName; } - throw new Exception($"Failed to get stream for saving {fileExt} file"); + throw new Exception($"Failed to find suitable file name for saving {fileExt} image"); } } } diff --git a/osu.Game/OsuGame.cs b/osu.Game/OsuGame.cs index ba21dc3349..0aa915ed3f 100644 --- a/osu.Game/OsuGame.cs +++ b/osu.Game/OsuGame.cs @@ -218,7 +218,6 @@ namespace osu.Game }, mainContent = new Container { RelativeSizeAxes = Axes.Both }, overlayContent = new Container { RelativeSizeAxes = Axes.Both, Depth = float.MinValue }, - new ScreenshotManager() }); loadComponentSingleFile(screenStack = new Loader(), d => @@ -286,6 +285,8 @@ namespace osu.Game dependencies.Cache(notifications); dependencies.Cache(dialogOverlay); + Add(new ScreenshotManager()); + // ensure only one of these overlays are open at once. var singleDisplayOverlays = new OverlayContainer[] { chat, social, direct }; foreach (var overlay in singleDisplayOverlays) From e25d1f69826b62a3765521ab19bf822ad14dd14f Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 19 Mar 2018 16:27:52 +0900 Subject: [PATCH 441/544] Pass down editor clocks through DI --- .../Edit/OsuHitObjectComposer.cs | 5 +- osu.Game.Rulesets.Osu/OsuRuleset.cs | 3 +- .../Visual/TestCaseEditorCompose.cs | 10 ++- .../Visual/TestCaseEditorSeekSnapping.cs | 13 +++- .../Visual/TestCaseEditorSelectionLayer.cs | 9 ++- .../Visual/TestCaseEditorSummaryTimeline.cs | 75 ++++--------------- .../Visual/TestCasePlaybackControl.cs | 11 ++- osu.Game/Rulesets/Edit/HitObjectComposer.cs | 11 ++- osu.Game/Rulesets/Ruleset.cs | 3 +- .../Edit/Components/PlaybackControl.cs | 7 +- .../Edit/Components/TimeInfoContainer.cs | 14 ++-- .../Timelines/Summary/SummaryTimeline.cs | 16 ++-- osu.Game/Screens/Edit/Editor.cs | 18 +++-- .../Screens/Edit/Screens/Compose/Compose.cs | 12 +-- 14 files changed, 91 insertions(+), 116 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Edit/OsuHitObjectComposer.cs b/osu.Game.Rulesets.Osu/Edit/OsuHitObjectComposer.cs index 77f48d704e..026c85d909 100644 --- a/osu.Game.Rulesets.Osu/Edit/OsuHitObjectComposer.cs +++ b/osu.Game.Rulesets.Osu/Edit/OsuHitObjectComposer.cs @@ -3,7 +3,6 @@ using System.Collections.Generic; using osu.Framework.Graphics; -using osu.Framework.Timing; using osu.Game.Beatmaps; using osu.Game.Rulesets.Edit; using osu.Game.Rulesets.Edit.Tools; @@ -18,8 +17,8 @@ namespace osu.Game.Rulesets.Osu.Edit { public class OsuHitObjectComposer : HitObjectComposer { - public OsuHitObjectComposer(Ruleset ruleset, IAdjustableClock adjustableClock, IFrameBasedClock framedClock) - : base(ruleset, adjustableClock, framedClock) + public OsuHitObjectComposer(Ruleset ruleset) + : base(ruleset) { } diff --git a/osu.Game.Rulesets.Osu/OsuRuleset.cs b/osu.Game.Rulesets.Osu/OsuRuleset.cs index 5dcc8e8a6e..d407835a96 100644 --- a/osu.Game.Rulesets.Osu/OsuRuleset.cs +++ b/osu.Game.Rulesets.Osu/OsuRuleset.cs @@ -13,7 +13,6 @@ using System.Linq; using osu.Framework.Graphics; using osu.Game.Overlays.Settings; using osu.Framework.Input.Bindings; -using osu.Framework.Timing; using osu.Game.Rulesets.Scoring; using osu.Game.Rulesets.Osu.Scoring; using osu.Game.Rulesets.Osu.Edit; @@ -138,7 +137,7 @@ namespace osu.Game.Rulesets.Osu public override PerformanceCalculator CreatePerformanceCalculator(Beatmap beatmap, Score score) => new OsuPerformanceCalculator(this, beatmap, score); - public override HitObjectComposer CreateHitObjectComposer(IAdjustableClock adjustableClock, IFrameBasedClock framedClock) => new OsuHitObjectComposer(this, adjustableClock, framedClock); + public override HitObjectComposer CreateHitObjectComposer() => new OsuHitObjectComposer(this); public override string Description => "osu!"; diff --git a/osu.Game.Tests/Visual/TestCaseEditorCompose.cs b/osu.Game.Tests/Visual/TestCaseEditorCompose.cs index 945c3c3901..5fd0f96f4a 100644 --- a/osu.Game.Tests/Visual/TestCaseEditorCompose.cs +++ b/osu.Game.Tests/Visual/TestCaseEditorCompose.cs @@ -13,13 +13,21 @@ namespace osu.Game.Tests.Visual [TestFixture] public class TestCaseEditorCompose : OsuTestCase { + private DependencyContainer dependencies; + + protected override IReadOnlyDependencyContainer CreateLocalDependencies(IReadOnlyDependencyContainer parent) + => dependencies = new DependencyContainer(parent); + [BackgroundDependencyLoader] private void load(OsuGameBase osuGame) { osuGame.Beatmap.Value = new TestWorkingBeatmap(new OsuRuleset().RulesetInfo); var clock = new DecoupleableInterpolatingFramedClock { IsCoupled = false }; - var compose = new Compose(clock, clock); + dependencies.CacheAs(clock); + dependencies.CacheAs(clock); + + var compose = new Compose(); compose.Beatmap.BindTo(osuGame.Beatmap); Child = compose; diff --git a/osu.Game.Tests/Visual/TestCaseEditorSeekSnapping.cs b/osu.Game.Tests/Visual/TestCaseEditorSeekSnapping.cs index 3b4b31c92a..bfdb39dd5e 100644 --- a/osu.Game.Tests/Visual/TestCaseEditorSeekSnapping.cs +++ b/osu.Game.Tests/Visual/TestCaseEditorSeekSnapping.cs @@ -33,10 +33,17 @@ namespace osu.Game.Tests.Visual private DecoupleableInterpolatingFramedClock clock; + private DependencyContainer dependencies; + + protected override IReadOnlyDependencyContainer CreateLocalDependencies(IReadOnlyDependencyContainer parent) + => dependencies = new DependencyContainer(parent); + [BackgroundDependencyLoader] private void load(OsuGameBase osuGame) { clock = new DecoupleableInterpolatingFramedClock { IsCoupled = false }; + dependencies.CacheAs(clock); + dependencies.CacheAs(clock); var testBeatmap = new Beatmap { @@ -67,7 +74,7 @@ namespace osu.Game.Tests.Visual RelativeSizeAxes = Axes.Both, Content = new[] { - new Drawable[] { composer = new TestHitObjectComposer(new OsuRuleset(), clock, clock) }, + new Drawable[] { composer = new TestHitObjectComposer(new OsuRuleset()) }, new Drawable[] { new TimingPointVisualiser(testBeatmap, track) { Clock = clock } }, }, RowDimensions = new[] @@ -338,8 +345,8 @@ namespace osu.Game.Tests.Visual private class TestHitObjectComposer : HitObjectComposer { - public TestHitObjectComposer(Ruleset ruleset, IAdjustableClock adjustableClock, IFrameBasedClock framedClock) - : base(ruleset, adjustableClock, framedClock) + public TestHitObjectComposer(Ruleset ruleset) + : base(ruleset) { } diff --git a/osu.Game.Tests/Visual/TestCaseEditorSelectionLayer.cs b/osu.Game.Tests/Visual/TestCaseEditorSelectionLayer.cs index 79c722be40..bbbfef477a 100644 --- a/osu.Game.Tests/Visual/TestCaseEditorSelectionLayer.cs +++ b/osu.Game.Tests/Visual/TestCaseEditorSelectionLayer.cs @@ -35,6 +35,11 @@ namespace osu.Game.Tests.Visual typeof(SliderCircleMask) }; + private DependencyContainer dependencies; + + protected override IReadOnlyDependencyContainer CreateLocalDependencies(IReadOnlyDependencyContainer parent) + => dependencies = new DependencyContainer(parent); + [BackgroundDependencyLoader] private void load(OsuGameBase osuGame) { @@ -61,8 +66,10 @@ namespace osu.Game.Tests.Visual }); var clock = new DecoupleableInterpolatingFramedClock { IsCoupled = false }; + dependencies.CacheAs(clock); + dependencies.CacheAs(clock); - Child = new OsuHitObjectComposer(new OsuRuleset(), clock, clock); + Child = new OsuHitObjectComposer(new OsuRuleset()); } } } diff --git a/osu.Game.Tests/Visual/TestCaseEditorSummaryTimeline.cs b/osu.Game.Tests/Visual/TestCaseEditorSummaryTimeline.cs index 6e4b0c2a72..bbe2956c5d 100644 --- a/osu.Game.Tests/Visual/TestCaseEditorSummaryTimeline.cs +++ b/osu.Game.Tests/Visual/TestCaseEditorSummaryTimeline.cs @@ -4,36 +4,41 @@ using System; using System.Collections.Generic; using NUnit.Framework; -using osu.Framework.Audio.Track; -using osu.Framework.Graphics.Textures; +using osu.Framework.Allocation; using osu.Framework.Graphics; using osu.Game.Beatmaps; -using osu.Game.Beatmaps.ControlPoints; using OpenTK; using osu.Game.Screens.Edit.Components.Timelines.Summary; using osu.Framework.Configuration; using osu.Framework.Timing; +using osu.Game.Rulesets.Osu; +using osu.Game.Tests.Beatmaps; namespace osu.Game.Tests.Visual { [TestFixture] public class TestCaseEditorSummaryTimeline : OsuTestCase { - private const int length = 60000; - private readonly Random random; - public override IReadOnlyList RequiredTypes => new[] { typeof(SummaryTimeline) }; private readonly Bindable beatmap = new Bindable(); - public TestCaseEditorSummaryTimeline() + private DependencyContainer dependencies; + + protected override IReadOnlyDependencyContainer CreateLocalDependencies(IReadOnlyDependencyContainer parent) + => dependencies = new DependencyContainer(parent); + + [BackgroundDependencyLoader] + private void load() { - random = new Random(1337); + beatmap.Value = new TestWorkingBeatmap(new OsuRuleset().RulesetInfo); var clock = new DecoupleableInterpolatingFramedClock { IsCoupled = false }; + dependencies.CacheAs(clock); + dependencies.CacheAs(clock); SummaryTimeline summaryTimeline; - Add(summaryTimeline = new SummaryTimeline(clock) + Add(summaryTimeline = new SummaryTimeline { Anchor = Anchor.Centre, Origin = Anchor.Centre, @@ -41,58 +46,6 @@ namespace osu.Game.Tests.Visual }); summaryTimeline.Beatmap.BindTo(beatmap); - - AddStep("New beatmap", newBeatmap); - - newBeatmap(); - } - - private void newBeatmap() - { - var b = new Beatmap(); - - for (int i = 0; i < random.Next(1, 10); i++) - b.ControlPointInfo.TimingPoints.Add(new TimingControlPoint { Time = random.Next(0, length) }); - - for (int i = 0; i < random.Next(1, 5); i++) - b.ControlPointInfo.DifficultyPoints.Add(new DifficultyControlPoint { Time = random.Next(0, length) }); - - for (int i = 0; i < random.Next(1, 5); i++) - b.ControlPointInfo.EffectPoints.Add(new EffectControlPoint { Time = random.Next(0, length) }); - - for (int i = 0; i < random.Next(1, 5); i++) - b.ControlPointInfo.SamplePoints.Add(new SampleControlPoint { Time = random.Next(0, length) }); - - b.BeatmapInfo.Bookmarks = new int[random.Next(10, 30)]; - for (int i = 0; i < b.BeatmapInfo.Bookmarks.Length; i++) - b.BeatmapInfo.Bookmarks[i] = random.Next(0, length); - - beatmap.Value = new TestWorkingBeatmap(b); - } - - private class TestWorkingBeatmap : WorkingBeatmap - { - private readonly Beatmap beatmap; - - public TestWorkingBeatmap(Beatmap beatmap) - : base(beatmap.BeatmapInfo) - { - this.beatmap = beatmap; - } - - protected override Texture GetBackground() => null; - - protected override Beatmap GetBeatmap() => beatmap; - - protected override Track GetTrack() => new TestTrack(); - - private class TestTrack : TrackVirtual - { - public TestTrack() - { - Length = length; - } - } } } } diff --git a/osu.Game.Tests/Visual/TestCasePlaybackControl.cs b/osu.Game.Tests/Visual/TestCasePlaybackControl.cs index 37bf38bbc6..33a801e98f 100644 --- a/osu.Game.Tests/Visual/TestCasePlaybackControl.cs +++ b/osu.Game.Tests/Visual/TestCasePlaybackControl.cs @@ -2,6 +2,7 @@ // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using NUnit.Framework; +using osu.Framework.Allocation; using osu.Framework.Graphics; using osu.Framework.Timing; using osu.Game.Beatmaps; @@ -14,16 +15,24 @@ namespace osu.Game.Tests.Visual [TestFixture] public class TestCasePlaybackControl : OsuTestCase { + private DependencyContainer dependencies; + + protected override IReadOnlyDependencyContainer CreateLocalDependencies(IReadOnlyDependencyContainer parent) + => dependencies = new DependencyContainer(parent); + public TestCasePlaybackControl() { var clock = new DecoupleableInterpolatingFramedClock { IsCoupled = false }; + dependencies.CacheAs(clock); + dependencies.CacheAs(clock); - var playback = new PlaybackControl(clock) + var playback = new PlaybackControl { Anchor = Anchor.Centre, Origin = Anchor.Centre, Size = new Vector2(200,100) }; + playback.Beatmap.Value = new TestWorkingBeatmap(new Beatmap()); Add(playback); diff --git a/osu.Game/Rulesets/Edit/HitObjectComposer.cs b/osu.Game/Rulesets/Edit/HitObjectComposer.cs index c2a286c6dd..ae1c8af1a4 100644 --- a/osu.Game/Rulesets/Edit/HitObjectComposer.cs +++ b/osu.Game/Rulesets/Edit/HitObjectComposer.cs @@ -32,21 +32,20 @@ namespace osu.Game.Rulesets.Edit private readonly Bindable beatmap = new Bindable(); - private readonly IAdjustableClock adjustableClock; - private readonly IFrameBasedClock framedClock; + private IAdjustableClock adjustableClock; - protected HitObjectComposer(Ruleset ruleset, IAdjustableClock adjustableClock, IFrameBasedClock framedClock) + protected HitObjectComposer(Ruleset ruleset) { this.ruleset = ruleset; - this.adjustableClock = adjustableClock; - this.framedClock = framedClock; RelativeSizeAxes = Axes.Both; } [BackgroundDependencyLoader] - private void load(OsuGameBase osuGame) + private void load(OsuGameBase osuGame, IAdjustableClock adjustableClock, IFrameBasedClock framedClock) { + this.adjustableClock = adjustableClock; + beatmap.BindTo(osuGame.Beatmap); try diff --git a/osu.Game/Rulesets/Ruleset.cs b/osu.Game/Rulesets/Ruleset.cs index fc0c7966c6..cba849a491 100644 --- a/osu.Game/Rulesets/Ruleset.cs +++ b/osu.Game/Rulesets/Ruleset.cs @@ -6,7 +6,6 @@ using System.Collections.Generic; using System.Linq; using osu.Framework.Graphics; using osu.Framework.Input.Bindings; -using osu.Framework.Timing; using osu.Game.Beatmaps; using osu.Game.Graphics; using osu.Game.Overlays.Settings; @@ -54,7 +53,7 @@ namespace osu.Game.Rulesets public virtual PerformanceCalculator CreatePerformanceCalculator(Beatmap beatmap, Score score) => null; - public virtual HitObjectComposer CreateHitObjectComposer(IAdjustableClock adjustableClock, IFrameBasedClock framedClock) => null; + public virtual HitObjectComposer CreateHitObjectComposer() => null; public virtual Drawable CreateIcon() => new SpriteIcon { Icon = FontAwesome.fa_question_circle }; diff --git a/osu.Game/Screens/Edit/Components/PlaybackControl.cs b/osu.Game/Screens/Edit/Components/PlaybackControl.cs index 71154006ce..fe2549d300 100644 --- a/osu.Game/Screens/Edit/Components/PlaybackControl.cs +++ b/osu.Game/Screens/Edit/Components/PlaybackControl.cs @@ -18,11 +18,12 @@ namespace osu.Game.Screens.Edit.Components { public class PlaybackControl : BottomBarContainer { - private readonly IconButton playButton; + private IconButton playButton; - private readonly IAdjustableClock adjustableClock; + private IAdjustableClock adjustableClock; - public PlaybackControl(IAdjustableClock adjustableClock) + [BackgroundDependencyLoader] + private void load(IAdjustableClock adjustableClock) { this.adjustableClock = adjustableClock; diff --git a/osu.Game/Screens/Edit/Components/TimeInfoContainer.cs b/osu.Game/Screens/Edit/Components/TimeInfoContainer.cs index 6bbaad432b..5a3b6c652b 100644 --- a/osu.Game/Screens/Edit/Components/TimeInfoContainer.cs +++ b/osu.Game/Screens/Edit/Components/TimeInfoContainer.cs @@ -4,21 +4,19 @@ using osu.Framework.Graphics; using osu.Game.Graphics.Sprites; using System; +using osu.Framework.Allocation; using osu.Framework.Timing; namespace osu.Game.Screens.Edit.Components { public class TimeInfoContainer : BottomBarContainer { - private const int count_duration = 150; - private readonly OsuSpriteText trackTimer; - private readonly IAdjustableClock adjustableClock; + private IAdjustableClock adjustableClock; - public TimeInfoContainer(IAdjustableClock adjustableClock) + public TimeInfoContainer() { - this.adjustableClock = adjustableClock; Children = new Drawable[] { @@ -33,6 +31,12 @@ namespace osu.Game.Screens.Edit.Components }; } + [BackgroundDependencyLoader] + private void load(IAdjustableClock adjustableClock) + { + this.adjustableClock = adjustableClock; + } + protected override void Update() { base.Update(); diff --git a/osu.Game/Screens/Edit/Components/Timelines/Summary/SummaryTimeline.cs b/osu.Game/Screens/Edit/Components/Timelines/Summary/SummaryTimeline.cs index 9921c24083..0e80c13257 100644 --- a/osu.Game/Screens/Edit/Components/Timelines/Summary/SummaryTimeline.cs +++ b/osu.Game/Screens/Edit/Components/Timelines/Summary/SummaryTimeline.cs @@ -17,13 +17,12 @@ namespace osu.Game.Screens.Edit.Components.Timelines.Summary /// public class SummaryTimeline : BottomBarContainer { - private readonly Drawable timelineBar; - - public SummaryTimeline(IAdjustableClock adjustableClock) + [BackgroundDependencyLoader] + private void load(OsuColour colours, IAdjustableClock adjustableClock) { TimelinePart markerPart, controlPointPart, bookmarkPart, breakPart; - Children = new[] + Children = new Drawable[] { markerPart = new MarkerPart(adjustableClock) { RelativeSizeAxes = Axes.Both }, controlPointPart = new ControlPointPart @@ -40,9 +39,10 @@ namespace osu.Game.Screens.Edit.Components.Timelines.Summary RelativeSizeAxes = Axes.Both, Height = 0.35f }, - timelineBar = new Container + new Container { RelativeSizeAxes = Axes.Both, + Colour = colours.Gray5, Children = new Drawable[] { new Circle @@ -81,11 +81,5 @@ namespace osu.Game.Screens.Edit.Components.Timelines.Summary bookmarkPart.Beatmap.BindTo(Beatmap); breakPart.Beatmap.BindTo(Beatmap); } - - [BackgroundDependencyLoader] - private void load(OsuColour colours) - { - timelineBar.Colour = colours.Gray5; - } } } diff --git a/osu.Game/Screens/Edit/Editor.cs b/osu.Game/Screens/Edit/Editor.cs index cc7f77e770..8b651000fd 100644 --- a/osu.Game/Screens/Edit/Editor.cs +++ b/osu.Game/Screens/Edit/Editor.cs @@ -32,16 +32,22 @@ namespace osu.Game.Screens.Edit private EditorScreen currentScreen; - private DecoupleableInterpolatingFramedClock adjustableClock; + private DependencyContainer dependencies; + + protected override IReadOnlyDependencyContainer CreateLocalDependencies(IReadOnlyDependencyContainer parent) + => dependencies = new DependencyContainer(parent); [BackgroundDependencyLoader] private void load(OsuColour colours) { // TODO: should probably be done at a RulesetContainer level to share logic with Player. var sourceClock = (IAdjustableClock)Beatmap.Value.Track ?? new StopwatchClock(); - adjustableClock = new DecoupleableInterpolatingFramedClock { IsCoupled = false }; + var adjustableClock = new DecoupleableInterpolatingFramedClock { IsCoupled = false }; adjustableClock.ChangeSource(sourceClock); + dependencies.CacheAs(adjustableClock); + dependencies.CacheAs(adjustableClock); + EditorMenuBar menuBar; TimeInfoContainer timeInfo; SummaryTimeline timeline; @@ -115,9 +121,9 @@ namespace osu.Game.Screens.Edit { RelativeSizeAxes = Axes.Both, Padding = new MarginPadding { Right = 10 }, - Child = timeInfo = new TimeInfoContainer(adjustableClock) { RelativeSizeAxes = Axes.Both }, + Child = timeInfo = new TimeInfoContainer { RelativeSizeAxes = Axes.Both }, }, - timeline = new SummaryTimeline(adjustableClock) + timeline = new SummaryTimeline { RelativeSizeAxes = Axes.Both, }, @@ -125,7 +131,7 @@ namespace osu.Game.Screens.Edit { RelativeSizeAxes = Axes.Both, Padding = new MarginPadding { Left = 10 }, - Child = playback = new PlaybackControl(adjustableClock) { RelativeSizeAxes = Axes.Both }, + Child = playback = new PlaybackControl { RelativeSizeAxes = Axes.Both }, } }, } @@ -156,7 +162,7 @@ namespace osu.Game.Screens.Edit switch (mode) { case EditorScreenMode.Compose: - currentScreen = new Compose(adjustableClock, adjustableClock); + currentScreen = new Compose(); break; case EditorScreenMode.Design: currentScreen = new Design(); diff --git a/osu.Game/Screens/Edit/Screens/Compose/Compose.cs b/osu.Game/Screens/Edit/Screens/Compose/Compose.cs index 9a720e1608..861a08fb07 100644 --- a/osu.Game/Screens/Edit/Screens/Compose/Compose.cs +++ b/osu.Game/Screens/Edit/Screens/Compose/Compose.cs @@ -8,7 +8,6 @@ using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Shapes; using osu.Framework.Logging; -using osu.Framework.Timing; using osu.Game.Screens.Edit.Screens.Compose.Timeline; namespace osu.Game.Screens.Edit.Screens.Compose @@ -20,15 +19,6 @@ namespace osu.Game.Screens.Edit.Screens.Compose private Container composerContainer; - private readonly IAdjustableClock adjustableClock; - private readonly IFrameBasedClock framedClock; - - public Compose(IAdjustableClock adjustableClock, IFrameBasedClock framedClock) - { - this.adjustableClock = adjustableClock; - this.framedClock = framedClock; - } - [BackgroundDependencyLoader] private void load() { @@ -95,7 +85,7 @@ namespace osu.Game.Screens.Edit.Screens.Compose return; } - var composer = ruleset.CreateHitObjectComposer(adjustableClock, framedClock); + var composer = ruleset.CreateHitObjectComposer(); if (composer == null) { Logger.Log($"Ruleset {ruleset.Description} doesn't support hitobject composition."); From 193142e90117ebba6668f40c7d69ef8f49a458b3 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 19 Mar 2018 16:44:46 +0900 Subject: [PATCH 442/544] Fix missed BDL case --- osu.Game.Tests/Visual/TestCasePlaybackControl.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/osu.Game.Tests/Visual/TestCasePlaybackControl.cs b/osu.Game.Tests/Visual/TestCasePlaybackControl.cs index 33a801e98f..9cdb3e36e3 100644 --- a/osu.Game.Tests/Visual/TestCasePlaybackControl.cs +++ b/osu.Game.Tests/Visual/TestCasePlaybackControl.cs @@ -20,7 +20,8 @@ namespace osu.Game.Tests.Visual protected override IReadOnlyDependencyContainer CreateLocalDependencies(IReadOnlyDependencyContainer parent) => dependencies = new DependencyContainer(parent); - public TestCasePlaybackControl() + [BackgroundDependencyLoader] + private void load() { var clock = new DecoupleableInterpolatingFramedClock { IsCoupled = false }; dependencies.CacheAs(clock); @@ -35,7 +36,7 @@ namespace osu.Game.Tests.Visual playback.Beatmap.Value = new TestWorkingBeatmap(new Beatmap()); - Add(playback); + Child = playback; } } } From 8d4c9eda489fb5791a2a4b931f7850a57d134108 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 19 Mar 2018 18:00:11 +0900 Subject: [PATCH 443/544] Fix attempting to add selection boxes with no selection E.g. because DrawableSpinner doesn't (currently) create an overlay, SelectionBox was being constructed with 0 hitobjects and then calculating a non-finite size for itself. --- .../Edit/Screens/Compose/Layers/HitObjectMaskLayer.cs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/osu.Game/Screens/Edit/Screens/Compose/Layers/HitObjectMaskLayer.cs b/osu.Game/Screens/Edit/Screens/Compose/Layers/HitObjectMaskLayer.cs index 63b5538ad7..46b09e2c23 100644 --- a/osu.Game/Screens/Edit/Screens/Compose/Layers/HitObjectMaskLayer.cs +++ b/osu.Game/Screens/Edit/Screens/Compose/Layers/HitObjectMaskLayer.cs @@ -51,7 +51,11 @@ namespace osu.Game.Screens.Edit.Screens.Compose.Layers private SelectionBox currentSelectionBox; - public void AddSelectionOverlay() => AddInternal(currentSelectionBox = composer.CreateSelectionOverlay(overlayContainer)); + public void AddSelectionOverlay() + { + if (overlayContainer.Count > 0) + AddInternal(currentSelectionBox = composer.CreateSelectionOverlay(overlayContainer)); + } public void RemoveSelectionOverlay() { From 6b035e8c53d684cb267b20ea726a5f8d3920dbe1 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 19 Mar 2018 19:46:26 +0900 Subject: [PATCH 444/544] Add basic structure/layout for the beat snap visualiser --- .../Visual/TestCaseBeatSnapVisualiser.cs | 31 ++++ osu.Game.Tests/osu.Game.Tests.csproj | 1 + .../Compose/BeatSnap/BeatSnapVisualiser.cs | 136 ++++++++++++++++++ .../Edit/Screens/Compose/BeatSnap/Tick.cs | 33 +++++ .../Screens/Compose/BeatSnap/TickContainer.cs | 69 +++++++++ osu.Game/osu.Game.csproj | 3 + 6 files changed, 273 insertions(+) create mode 100644 osu.Game.Tests/Visual/TestCaseBeatSnapVisualiser.cs create mode 100644 osu.Game/Screens/Edit/Screens/Compose/BeatSnap/BeatSnapVisualiser.cs create mode 100644 osu.Game/Screens/Edit/Screens/Compose/BeatSnap/Tick.cs create mode 100644 osu.Game/Screens/Edit/Screens/Compose/BeatSnap/TickContainer.cs diff --git a/osu.Game.Tests/Visual/TestCaseBeatSnapVisualiser.cs b/osu.Game.Tests/Visual/TestCaseBeatSnapVisualiser.cs new file mode 100644 index 0000000000..687ea51407 --- /dev/null +++ b/osu.Game.Tests/Visual/TestCaseBeatSnapVisualiser.cs @@ -0,0 +1,31 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using System; +using System.Collections.Generic; +using osu.Framework.Allocation; +using osu.Framework.Graphics; +using osu.Game.Screens.Edit.Screens.Compose.BeatSnap; + +namespace osu.Game.Tests.Visual +{ + public class TestCaseBeatSnapVisualiser : OsuTestCase + { + public override IReadOnlyList RequiredTypes => new[] + { + typeof(BeatSnapVisualiser), + typeof(Tick), + typeof(TickContainer) + }; + + [BackgroundDependencyLoader] + private void load() + { + Child = new BeatSnapVisualiser + { + Anchor = Anchor.Centre, + Origin = Anchor.Centre + }; + } + } +} diff --git a/osu.Game.Tests/osu.Game.Tests.csproj b/osu.Game.Tests/osu.Game.Tests.csproj index 80efb0672e..c244ab8050 100644 --- a/osu.Game.Tests/osu.Game.Tests.csproj +++ b/osu.Game.Tests/osu.Game.Tests.csproj @@ -116,6 +116,7 @@ + diff --git a/osu.Game/Screens/Edit/Screens/Compose/BeatSnap/BeatSnapVisualiser.cs b/osu.Game/Screens/Edit/Screens/Compose/BeatSnap/BeatSnapVisualiser.cs new file mode 100644 index 0000000000..75a2391688 --- /dev/null +++ b/osu.Game/Screens/Edit/Screens/Compose/BeatSnap/BeatSnapVisualiser.cs @@ -0,0 +1,136 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using osu.Framework.Allocation; +using osu.Framework.Configuration; +using osu.Framework.Graphics; +using osu.Framework.Graphics.Containers; +using osu.Framework.Graphics.Shapes; +using osu.Game.Graphics; +using osu.Game.Graphics.UserInterface; +using OpenTK; +using OpenTK.Graphics; + +namespace osu.Game.Screens.Edit.Screens.Compose.BeatSnap +{ + public class BeatSnapVisualiser : CompositeDrawable + { + public readonly Bindable Divisor = new Bindable(1); + + private TickContainer tickContainer; + + [BackgroundDependencyLoader] + private void load(OsuColour colours) + { + Size = new Vector2(100, 110); + Masking = true; + CornerRadius = 5; + + InternalChildren = new Drawable[] + { + new Box + { + Name = "Background", + RelativeSizeAxes = Axes.Both, + Colour = Color4.Black + }, + new GridContainer + { + RelativeSizeAxes = Axes.Both, + Content = new[] + { + new Drawable[] + { + tickContainer = new TickContainer(1, 2, 3, 4, 6, 8, 12, 16) + { + RelativeSizeAxes = Axes.Both, + Padding = new MarginPadding { Horizontal = 5 } + } + }, + new Drawable[] + { + new Container + { + RelativeSizeAxes = Axes.Both, + Children = new Drawable[] + { + new Box + { + RelativeSizeAxes = Axes.Both, + Colour = colours.Gray4 + }, + new Container + { + RelativeSizeAxes = Axes.Both, + Padding = new MarginPadding { Horizontal = 5 }, + Child = new GridContainer + { + RelativeSizeAxes = Axes.Both, + Content = new[] + { + new Drawable[] + { + new DivisorButton + { + Icon = FontAwesome.fa_chevron_left, + }, + null, + new DivisorButton + { + Icon = FontAwesome.fa_chevron_right, + } + }, + new Drawable[] + { + null, + new TextFlowContainer(s => s.TextSize = 12) + { + Text = "beat snap divisor", + RelativeSizeAxes = Axes.X, + TextAnchor = Anchor.TopCentre + }, + }, + }, + ColumnDimensions = new[] + { + new Dimension(GridSizeMode.Absolute, 20), + new Dimension(), + new Dimension(GridSizeMode.Absolute, 20) + } + } + } + } + } + }, + }, + RowDimensions = new[] + { + new Dimension(GridSizeMode.Absolute, 35), + } + } + }; + + tickContainer.Divisor.BindTo(Divisor); + } + + private class DivisorButton : IconButton + { + public DivisorButton() + { + Anchor = Anchor.Centre; + Origin = Anchor.Centre; + + ButtonSize = new Vector2(20); + IconScale = new Vector2(0.7f); + } + + [BackgroundDependencyLoader] + private void load(OsuColour colours) + { + IconColour = Color4.Black; + HoverColour = colours.Gray7; + FlashColour = colours.Gray9; + } + } + } +} diff --git a/osu.Game/Screens/Edit/Screens/Compose/BeatSnap/Tick.cs b/osu.Game/Screens/Edit/Screens/Compose/BeatSnap/Tick.cs new file mode 100644 index 0000000000..fc0c36d787 --- /dev/null +++ b/osu.Game/Screens/Edit/Screens/Compose/BeatSnap/Tick.cs @@ -0,0 +1,33 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using osu.Framework.Allocation; +using osu.Framework.Graphics.Shapes; +using osu.Game.Graphics; +using OpenTK; + +namespace osu.Game.Screens.Edit.Screens.Compose.BeatSnap +{ + public class Tick : Box + { + private readonly int divisor; + + public Tick(int divisor) + { + this.divisor = divisor; + + Size = new Vector2(2, 10); + } + + [BackgroundDependencyLoader] + private void load(OsuColour colours) + { + if (divisor >= 16) + Colour = colours.Red; + else if (divisor >= 8) + Colour = colours.Yellow; + else + Colour = colours.Gray4; + } + } +} diff --git a/osu.Game/Screens/Edit/Screens/Compose/BeatSnap/TickContainer.cs b/osu.Game/Screens/Edit/Screens/Compose/BeatSnap/TickContainer.cs new file mode 100644 index 0000000000..477c2c1a3b --- /dev/null +++ b/osu.Game/Screens/Edit/Screens/Compose/BeatSnap/TickContainer.cs @@ -0,0 +1,69 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using System; +using osu.Framework.Allocation; +using osu.Framework.Configuration; +using osu.Framework.Graphics; +using osu.Framework.Graphics.Containers; +using osu.Framework.Graphics.Shapes; +using osu.Game.Graphics; +using OpenTK; + +namespace osu.Game.Screens.Edit.Screens.Compose.BeatSnap +{ + public class TickContainer : CompositeDrawable + { + public readonly BindableInt Divisor = new BindableInt(); + + public new MarginPadding Padding { set => base.Padding = value; } + + private EquilateralTriangle marker; + + private readonly int[] availableDivisors; + private readonly float tickSpacing; + + public TickContainer(params int[] divisors) + { + availableDivisors = divisors; + tickSpacing = 1f / (availableDivisors.Length + 1); + } + + [BackgroundDependencyLoader] + private void load(OsuColour colours) + { + InternalChild = marker = new EquilateralTriangle + { + Anchor = Anchor.BottomLeft, + Origin = Anchor.BottomCentre, + RelativePositionAxes = Axes.X, + Height = 7, + EdgeSmoothness = new Vector2(1), + Colour = colours.Gray4, + }; + + for (int i = 0; i < availableDivisors.Length; i++) + { + AddInternal(new Tick(availableDivisors[i]) + { + Anchor = Anchor.TopLeft, + Origin = Anchor.TopCentre, + RelativePositionAxes = Axes.X, + X = getTickPosition(i) + }); + } + } + + protected override void LoadComplete() + { + base.LoadComplete(); + + Divisor.ValueChanged += v => updatePosition(); + updatePosition(); + } + + private void updatePosition() => marker.X = getTickPosition(Array.IndexOf(availableDivisors, Divisor.Value)); + + private float getTickPosition(int index) => (index + 1) * tickSpacing; + } +} diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index 091ec3f7ac..5c19014593 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -380,6 +380,9 @@ + + + From 66e4e45882029d8304e719f87bf389f3a3bc10db Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 19 Mar 2018 19:49:46 +0900 Subject: [PATCH 445/544] Offset test case a little bit for dynamic compilation message --- osu.Game.Tests/Visual/TestCaseBeatSnapVisualiser.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/osu.Game.Tests/Visual/TestCaseBeatSnapVisualiser.cs b/osu.Game.Tests/Visual/TestCaseBeatSnapVisualiser.cs index 687ea51407..11c279ba8d 100644 --- a/osu.Game.Tests/Visual/TestCaseBeatSnapVisualiser.cs +++ b/osu.Game.Tests/Visual/TestCaseBeatSnapVisualiser.cs @@ -24,7 +24,8 @@ namespace osu.Game.Tests.Visual Child = new BeatSnapVisualiser { Anchor = Anchor.Centre, - Origin = Anchor.Centre + Origin = Anchor.Centre, + Y = -200 }; } } From 7182442b21a226c0cc0f09f4eecdd8f3cd420230 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 19 Mar 2018 19:49:57 +0900 Subject: [PATCH 446/544] Add divisor text --- .../Compose/BeatSnap/BeatSnapVisualiser.cs | 26 ++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/osu.Game/Screens/Edit/Screens/Compose/BeatSnap/BeatSnapVisualiser.cs b/osu.Game/Screens/Edit/Screens/Compose/BeatSnap/BeatSnapVisualiser.cs index 75a2391688..68524944a6 100644 --- a/osu.Game/Screens/Edit/Screens/Compose/BeatSnap/BeatSnapVisualiser.cs +++ b/osu.Game/Screens/Edit/Screens/Compose/BeatSnap/BeatSnapVisualiser.cs @@ -6,6 +6,7 @@ using osu.Framework.Configuration; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Shapes; +using osu.Framework.Graphics.Sprites; using osu.Game.Graphics; using osu.Game.Graphics.UserInterface; using OpenTK; @@ -18,6 +19,7 @@ namespace osu.Game.Screens.Edit.Screens.Compose.BeatSnap public readonly Bindable Divisor = new Bindable(1); private TickContainer tickContainer; + private DivisorText text; [BackgroundDependencyLoader] private void load(OsuColour colours) @@ -74,7 +76,7 @@ namespace osu.Game.Screens.Edit.Screens.Compose.BeatSnap { Icon = FontAwesome.fa_chevron_left, }, - null, + text = new DivisorText(), new DivisorButton { Icon = FontAwesome.fa_chevron_right, @@ -111,6 +113,28 @@ namespace osu.Game.Screens.Edit.Screens.Compose.BeatSnap }; tickContainer.Divisor.BindTo(Divisor); + text.Divisor.BindTo(Divisor); + } + + private class DivisorText : SpriteText + { + public readonly Bindable Divisor = new Bindable(); + + public DivisorText() + { + Anchor = Anchor.Centre; + Origin = Anchor.Centre; + } + + protected override void LoadComplete() + { + base.LoadComplete(); + + Divisor.ValueChanged += v => updateText(); + updateText(); + } + + private void updateText() => Text = $"1/{Divisor.Value}"; } private class DivisorButton : IconButton From 070db6315753a3e01971b6c1f1f08da41173befb Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 19 Mar 2018 19:52:17 +0900 Subject: [PATCH 447/544] Privatise tick to TickContainer --- .../Visual/TestCaseBeatSnapVisualiser.cs | 1 - .../Edit/Screens/Compose/BeatSnap/Tick.cs | 33 ------------------- .../Screens/Compose/BeatSnap/TickContainer.cs | 23 +++++++++++++ osu.Game/osu.Game.csproj | 1 - 4 files changed, 23 insertions(+), 35 deletions(-) delete mode 100644 osu.Game/Screens/Edit/Screens/Compose/BeatSnap/Tick.cs diff --git a/osu.Game.Tests/Visual/TestCaseBeatSnapVisualiser.cs b/osu.Game.Tests/Visual/TestCaseBeatSnapVisualiser.cs index 11c279ba8d..5ccad31f7d 100644 --- a/osu.Game.Tests/Visual/TestCaseBeatSnapVisualiser.cs +++ b/osu.Game.Tests/Visual/TestCaseBeatSnapVisualiser.cs @@ -14,7 +14,6 @@ namespace osu.Game.Tests.Visual public override IReadOnlyList RequiredTypes => new[] { typeof(BeatSnapVisualiser), - typeof(Tick), typeof(TickContainer) }; diff --git a/osu.Game/Screens/Edit/Screens/Compose/BeatSnap/Tick.cs b/osu.Game/Screens/Edit/Screens/Compose/BeatSnap/Tick.cs deleted file mode 100644 index fc0c36d787..0000000000 --- a/osu.Game/Screens/Edit/Screens/Compose/BeatSnap/Tick.cs +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (c) 2007-2018 ppy Pty Ltd . -// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE - -using osu.Framework.Allocation; -using osu.Framework.Graphics.Shapes; -using osu.Game.Graphics; -using OpenTK; - -namespace osu.Game.Screens.Edit.Screens.Compose.BeatSnap -{ - public class Tick : Box - { - private readonly int divisor; - - public Tick(int divisor) - { - this.divisor = divisor; - - Size = new Vector2(2, 10); - } - - [BackgroundDependencyLoader] - private void load(OsuColour colours) - { - if (divisor >= 16) - Colour = colours.Red; - else if (divisor >= 8) - Colour = colours.Yellow; - else - Colour = colours.Gray4; - } - } -} diff --git a/osu.Game/Screens/Edit/Screens/Compose/BeatSnap/TickContainer.cs b/osu.Game/Screens/Edit/Screens/Compose/BeatSnap/TickContainer.cs index 477c2c1a3b..b57fc690a8 100644 --- a/osu.Game/Screens/Edit/Screens/Compose/BeatSnap/TickContainer.cs +++ b/osu.Game/Screens/Edit/Screens/Compose/BeatSnap/TickContainer.cs @@ -65,5 +65,28 @@ namespace osu.Game.Screens.Edit.Screens.Compose.BeatSnap private void updatePosition() => marker.X = getTickPosition(Array.IndexOf(availableDivisors, Divisor.Value)); private float getTickPosition(int index) => (index + 1) * tickSpacing; + + private class Tick : Box + { + private readonly int divisor; + + public Tick(int divisor) + { + this.divisor = divisor; + + Size = new Vector2(2, 10); + } + + [BackgroundDependencyLoader] + private void load(OsuColour colours) + { + if (divisor >= 16) + Colour = colours.Red; + else if (divisor >= 8) + Colour = colours.Yellow; + else + Colour = colours.Gray4; + } + } } } diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index 5c19014593..744ca7bcf2 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -381,7 +381,6 @@ - From fbc92bfa01048be2c04e0feb0d265af0fa43ed0f Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 19 Mar 2018 19:55:49 +0900 Subject: [PATCH 448/544] Add previous/next divisor button actions --- .../Compose/BeatSnap/BeatSnapVisualiser.cs | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/osu.Game/Screens/Edit/Screens/Compose/BeatSnap/BeatSnapVisualiser.cs b/osu.Game/Screens/Edit/Screens/Compose/BeatSnap/BeatSnapVisualiser.cs index 68524944a6..f7bc6da98b 100644 --- a/osu.Game/Screens/Edit/Screens/Compose/BeatSnap/BeatSnapVisualiser.cs +++ b/osu.Game/Screens/Edit/Screens/Compose/BeatSnap/BeatSnapVisualiser.cs @@ -16,7 +16,10 @@ namespace osu.Game.Screens.Edit.Screens.Compose.BeatSnap { public class BeatSnapVisualiser : CompositeDrawable { + private static readonly int[] available_divisors = { 1, 2, 3, 4, 6, 8, 12, 16 }; + public readonly Bindable Divisor = new Bindable(1); + private int currentDivisorIndex = 0; private TickContainer tickContainer; private DivisorText text; @@ -75,11 +78,13 @@ namespace osu.Game.Screens.Edit.Screens.Compose.BeatSnap new DivisorButton { Icon = FontAwesome.fa_chevron_left, + Action = selectPrevious }, text = new DivisorText(), new DivisorButton { Icon = FontAwesome.fa_chevron_right, + Action = selectNext } }, new Drawable[] @@ -116,6 +121,20 @@ namespace osu.Game.Screens.Edit.Screens.Compose.BeatSnap text.Divisor.BindTo(Divisor); } + private void selectPrevious() + { + if (currentDivisorIndex == 0) + return; + Divisor.Value = available_divisors[--currentDivisorIndex]; + } + + private void selectNext() + { + if (currentDivisorIndex == available_divisors.Length - 1) + return; + Divisor.Value = available_divisors[++currentDivisorIndex]; + } + private class DivisorText : SpriteText { public readonly Bindable Divisor = new Bindable(); From c86ddb7ee34168bf9c755cf79ec40b96c5cb0a48 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 19 Mar 2018 19:57:02 +0900 Subject: [PATCH 449/544] Add slight easing to marker movements --- osu.Game/Screens/Edit/Screens/Compose/BeatSnap/TickContainer.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game/Screens/Edit/Screens/Compose/BeatSnap/TickContainer.cs b/osu.Game/Screens/Edit/Screens/Compose/BeatSnap/TickContainer.cs index b57fc690a8..deb22742bc 100644 --- a/osu.Game/Screens/Edit/Screens/Compose/BeatSnap/TickContainer.cs +++ b/osu.Game/Screens/Edit/Screens/Compose/BeatSnap/TickContainer.cs @@ -62,7 +62,7 @@ namespace osu.Game.Screens.Edit.Screens.Compose.BeatSnap updatePosition(); } - private void updatePosition() => marker.X = getTickPosition(Array.IndexOf(availableDivisors, Divisor.Value)); + private void updatePosition() => marker.MoveToX(getTickPosition(Array.IndexOf(availableDivisors, Divisor.Value)), 100, Easing.OutQuint); private float getTickPosition(int index) => (index + 1) * tickSpacing; From c4f5b46d72cf523a03be2996e74b46a664267d08 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Mon, 19 Mar 2018 19:50:37 +0900 Subject: [PATCH 450/544] Add basic structure for skin configurations --- osu.Game/Skinning/LegacySkinDecoder.cs | 15 +++++++++++++++ osu.Game/Skinning/SkinConfiguration.cs | 18 ++++++++++++++++++ osu.Game/osu.Game.csproj | 2 ++ 3 files changed, 35 insertions(+) create mode 100644 osu.Game/Skinning/LegacySkinDecoder.cs create mode 100644 osu.Game/Skinning/SkinConfiguration.cs diff --git a/osu.Game/Skinning/LegacySkinDecoder.cs b/osu.Game/Skinning/LegacySkinDecoder.cs new file mode 100644 index 0000000000..a867e08495 --- /dev/null +++ b/osu.Game/Skinning/LegacySkinDecoder.cs @@ -0,0 +1,15 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using osu.Game.Beatmaps.Formats; + +namespace osu.Game.Skinning +{ + public class LegacySkinDecoder : LegacyDecoder + { + public LegacySkinDecoder(int version) + : base(version) + { + } + } +} diff --git a/osu.Game/Skinning/SkinConfiguration.cs b/osu.Game/Skinning/SkinConfiguration.cs new file mode 100644 index 0000000000..eac77ae753 --- /dev/null +++ b/osu.Game/Skinning/SkinConfiguration.cs @@ -0,0 +1,18 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using System.Collections.Generic; +using osu.Game.Beatmaps.Formats; +using OpenTK.Graphics; + +namespace osu.Game.Skinning +{ + public class SkinConfiguration : IHasComboColours, IHasCustomColours + { + public readonly SkinInfo SkinInfo = new SkinInfo(); + + public List ComboColours { get; set; } = new List(); + + public Dictionary CustomColours { get; set; } = new Dictionary(); + } +} diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index 091ec3f7ac..b325e52ed1 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -873,7 +873,9 @@ + + From 62e908e22c45939f79901014e15c88b9cfff3be7 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 14 Mar 2018 18:41:48 +0900 Subject: [PATCH 451/544] Add default separator character --- osu.Game/Beatmaps/Formats/LegacyBeatmapDecoder.cs | 8 ++++---- osu.Game/Beatmaps/Formats/LegacyDecoder.cs | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/osu.Game/Beatmaps/Formats/LegacyBeatmapDecoder.cs b/osu.Game/Beatmaps/Formats/LegacyBeatmapDecoder.cs index 1bb67f9e75..74b7d0272e 100644 --- a/osu.Game/Beatmaps/Formats/LegacyBeatmapDecoder.cs +++ b/osu.Game/Beatmaps/Formats/LegacyBeatmapDecoder.cs @@ -96,7 +96,7 @@ namespace osu.Game.Beatmaps.Formats private void handleGeneral(string line) { - var pair = SplitKeyVal(line, ':'); + var pair = SplitKeyVal(line); var metadata = beatmap.BeatmapInfo.Metadata; switch (pair.Key) @@ -155,7 +155,7 @@ namespace osu.Game.Beatmaps.Formats private void handleEditor(string line) { - var pair = SplitKeyVal(line, ':'); + var pair = SplitKeyVal(line); switch (pair.Key) { @@ -179,7 +179,7 @@ namespace osu.Game.Beatmaps.Formats private void handleMetadata(string line) { - var pair = SplitKeyVal(line, ':'); + var pair = SplitKeyVal(line); var metadata = beatmap.BeatmapInfo.Metadata; switch (pair.Key) @@ -220,7 +220,7 @@ namespace osu.Game.Beatmaps.Formats private void handleDifficulty(string line) { - var pair = SplitKeyVal(line, ':'); + var pair = SplitKeyVal(line); var difficulty = beatmap.BeatmapInfo.BaseDifficulty; switch (pair.Key) diff --git a/osu.Game/Beatmaps/Formats/LegacyDecoder.cs b/osu.Game/Beatmaps/Formats/LegacyDecoder.cs index e4aa9f5091..67d497ba83 100644 --- a/osu.Game/Beatmaps/Formats/LegacyDecoder.cs +++ b/osu.Game/Beatmaps/Formats/LegacyDecoder.cs @@ -55,7 +55,7 @@ namespace osu.Game.Beatmaps.Formats private void handleColours(T output, string line) { - var pair = SplitKeyVal(line, ':'); + var pair = SplitKeyVal(line); bool isCombo = pair.Key.StartsWith(@"Combo"); @@ -89,7 +89,7 @@ namespace osu.Game.Beatmaps.Formats } } - protected KeyValuePair SplitKeyVal(string line, char separator) + protected KeyValuePair SplitKeyVal(string line, char separator = ':') { var split = line.Trim().Split(new[] { separator }, 2); From 8e52d91180b66c13833247504363169de96b8d1b Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 14 Mar 2018 18:42:13 +0900 Subject: [PATCH 452/544] Handle missing files without hard failure Also adds support for lookups with file extensions --- osu.Game/Skinning/LegacySkin.cs | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/osu.Game/Skinning/LegacySkin.cs b/osu.Game/Skinning/LegacySkin.cs index 5525cc483e..0e508e4527 100644 --- a/osu.Game/Skinning/LegacySkin.cs +++ b/osu.Game/Skinning/LegacySkin.cs @@ -60,10 +60,12 @@ namespace osu.Game.Skinning private string getPathForFile(string filename) { + bool hasExtension = filename.Contains('.'); + string lastPiece = filename.Split('/').Last(); var file = skin.Files.FirstOrDefault(f => - string.Equals(Path.GetFileNameWithoutExtension(f.Filename), lastPiece, StringComparison.InvariantCultureIgnoreCase)); + string.Equals(hasExtension ? f.Filename : Path.GetFileNameWithoutExtension(f.Filename), lastPiece, StringComparison.InvariantCultureIgnoreCase)); return file?.FileInfo.StoragePath; } @@ -73,9 +75,17 @@ namespace osu.Game.Skinning this.underlyingStore = underlyingStore; } - public Stream GetStream(string name) => underlyingStore.GetStream(getPathForFile(name)); + public Stream GetStream(string name) + { + string path = getPathForFile(name); + return path == null ? null : underlyingStore.GetStream(path); + } - byte[] IResourceStore.Get(string name) => underlyingStore.Get(getPathForFile(name)); + byte[] IResourceStore.Get(string name) + { + string path = getPathForFile(name); + return path == null ? null : underlyingStore.Get(path); + } } } } From 397b06283ac1deac1d212f61a97024c42881227e Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Mon, 19 Mar 2018 20:05:31 +0900 Subject: [PATCH 453/544] Add basic skin configuration decoding support --- osu.Game/Skinning/LegacySkin.cs | 5 +++++ osu.Game/Skinning/LegacySkinDecoder.cs | 27 ++++++++++++++++++++++++-- osu.Game/Skinning/Skin.cs | 2 ++ 3 files changed, 32 insertions(+), 2 deletions(-) diff --git a/osu.Game/Skinning/LegacySkin.cs b/osu.Game/Skinning/LegacySkin.cs index 0e508e4527..27f15474ba 100644 --- a/osu.Game/Skinning/LegacySkin.cs +++ b/osu.Game/Skinning/LegacySkin.cs @@ -25,6 +25,11 @@ namespace osu.Game.Skinning storage = new LegacySkinResourceStore(skin, storage); samples = audioManager.GetSampleManager(storage); textures = new TextureStore(new RawTextureLoaderStore(storage)); + + var decoder = new LegacySkinDecoder(); + + using (StreamReader reader = new StreamReader(storage.GetStream("skin.ini"))) + Configuration = decoder.Decode(reader); } public override Drawable GetDrawableComponent(string componentName) diff --git a/osu.Game/Skinning/LegacySkinDecoder.cs b/osu.Game/Skinning/LegacySkinDecoder.cs index a867e08495..9a881f9241 100644 --- a/osu.Game/Skinning/LegacySkinDecoder.cs +++ b/osu.Game/Skinning/LegacySkinDecoder.cs @@ -7,9 +7,32 @@ namespace osu.Game.Skinning { public class LegacySkinDecoder : LegacyDecoder { - public LegacySkinDecoder(int version) - : base(version) + public LegacySkinDecoder() + : base(1) { } + + protected override void ParseLine(SkinConfiguration output, Section section, string line) + { + switch (section) + { + case Section.General: + var pair = SplitKeyVal(line); + + switch (pair.Key) + { + case @"Name": + output.SkinInfo.Name = pair.Value; + break; + case @"Author": + output.SkinInfo.Creator = pair.Value; + break; + } + + return; + } + + base.ParseLine(output, section, line); + } } } diff --git a/osu.Game/Skinning/Skin.cs b/osu.Game/Skinning/Skin.cs index fafbdec8f0..7b4e894dfd 100644 --- a/osu.Game/Skinning/Skin.cs +++ b/osu.Game/Skinning/Skin.cs @@ -10,6 +10,8 @@ namespace osu.Game.Skinning { public readonly SkinInfo SkinInfo; + public virtual SkinConfiguration Configuration { get; protected set; } + public abstract Drawable GetDrawableComponent(string componentName); public abstract SampleChannel GetSample(string sampleName); From ec851648da6df51ce9d31622d00d9c0bbc9ceb57 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 14 Mar 2018 19:09:30 +0900 Subject: [PATCH 454/544] Add better ToString output from SkinInfo --- osu.Game/Overlays/Settings/Sections/SkinSection.cs | 2 +- osu.Game/Skinning/SkinInfo.cs | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/osu.Game/Overlays/Settings/Sections/SkinSection.cs b/osu.Game/Overlays/Settings/Sections/SkinSection.cs index bc0b8b4aaa..5df5304751 100644 --- a/osu.Game/Overlays/Settings/Sections/SkinSection.cs +++ b/osu.Game/Overlays/Settings/Sections/SkinSection.cs @@ -47,7 +47,7 @@ namespace osu.Game.Overlays.Settings.Sections }, }; - void reloadSkins() => skinDropdown.Items = skins.GetAllUsableSkins().Select(s => new KeyValuePair(s.Name, s.ID)); + void reloadSkins() => skinDropdown.Items = skins.GetAllUsableSkins().Select(s => new KeyValuePair(s.ToString(), s.ID)); skins.ItemAdded += _ => reloadSkins(); skins.ItemRemoved += _ => reloadSkins(); diff --git a/osu.Game/Skinning/SkinInfo.cs b/osu.Game/Skinning/SkinInfo.cs index 45c8b97f63..5080b65a37 100644 --- a/osu.Game/Skinning/SkinInfo.cs +++ b/osu.Game/Skinning/SkinInfo.cs @@ -24,5 +24,7 @@ namespace osu.Game.Skinning public static SkinInfo Default { get; } = new SkinInfo { Name = "osu!lazer", Creator = "team osu!" }; public bool Equals(SkinInfo other) => other != null && ID == other.ID; + + public override string ToString() => $"\"{Name}\" by {Creator}"; } } From 7272ba2f1b5429a9fffdb0999d9c4324922b47ff Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 14 Mar 2018 19:35:43 +0900 Subject: [PATCH 455/544] Add migration for skins which didn't get a proper name assigned Also correctly imports new skins --- osu.Game/Skinning/SkinManager.cs | 35 ++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/osu.Game/Skinning/SkinManager.cs b/osu.Game/Skinning/SkinManager.cs index 88d51eca10..fa65b923fb 100644 --- a/osu.Game/Skinning/SkinManager.cs +++ b/osu.Game/Skinning/SkinManager.cs @@ -39,6 +39,31 @@ namespace osu.Game.Skinning Name = archive.Name }; + protected override void Populate(SkinInfo model, ArchiveReader archive) + { + base.Populate(model, archive); + populate(model); + } + + /// + /// Populate a from its (if possible). + /// + /// + private void populate(SkinInfo model) + { + Skin reference = GetSkin(model); + if (!string.IsNullOrEmpty(reference.Configuration.SkinInfo.Name)) + { + model.Name = reference.Configuration.SkinInfo.Name; + model.Creator = reference.Configuration.SkinInfo.Creator; + } + else + { + model.Name = model.Name.Replace(".osk", ""); + model.Creator = "Unknown"; + } + } + /// /// Retrieve a instance for the provided /// @@ -65,6 +90,16 @@ namespace osu.Game.Skinning if (skin.SkinInfo != CurrentSkinInfo.Value) throw new InvalidOperationException($"Setting {nameof(CurrentSkin)}'s value directly is not supported. Use {nameof(CurrentSkinInfo)} instead."); }; + + // migrate older imports which didn't have access to skin.ini + using (ContextFactory.GetForWrite()) + { + foreach (var skinInfo in ModelStore.ConsumableItems.Where(s => s.Name.EndsWith(".osk"))) + { + populate(skinInfo); + Update(skinInfo); + } + } } /// From e96dad441d79b18fb2ce69f32b58aa263e2e703c Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 19 Mar 2018 20:14:13 +0900 Subject: [PATCH 456/544] Offset the icon buttons a little bit to look a bit more centered Maybe it's just me, but this is really triggering me. --- .../Edit/Screens/Compose/BeatSnap/BeatSnapVisualiser.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/osu.Game/Screens/Edit/Screens/Compose/BeatSnap/BeatSnapVisualiser.cs b/osu.Game/Screens/Edit/Screens/Compose/BeatSnap/BeatSnapVisualiser.cs index f7bc6da98b..72bd1d3620 100644 --- a/osu.Game/Screens/Edit/Screens/Compose/BeatSnap/BeatSnapVisualiser.cs +++ b/osu.Game/Screens/Edit/Screens/Compose/BeatSnap/BeatSnapVisualiser.cs @@ -163,6 +163,9 @@ namespace osu.Game.Screens.Edit.Screens.Compose.BeatSnap Anchor = Anchor.Centre; Origin = Anchor.Centre; + // Small offset to look a bit better centered along with the divisor text + Y = 1; + ButtonSize = new Vector2(20); IconScale = new Vector2(0.7f); } From 32fecc6ff4930b4f1f8cd6dfa9cd725aa80f0032 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 19 Mar 2018 20:14:34 +0900 Subject: [PATCH 457/544] Adjust icon scale + text --- .../Screens/Compose/BeatSnap/BeatSnapVisualiser.cs | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/osu.Game/Screens/Edit/Screens/Compose/BeatSnap/BeatSnapVisualiser.cs b/osu.Game/Screens/Edit/Screens/Compose/BeatSnap/BeatSnapVisualiser.cs index 72bd1d3620..076fa926eb 100644 --- a/osu.Game/Screens/Edit/Screens/Compose/BeatSnap/BeatSnapVisualiser.cs +++ b/osu.Game/Screens/Edit/Screens/Compose/BeatSnap/BeatSnapVisualiser.cs @@ -19,7 +19,7 @@ namespace osu.Game.Screens.Edit.Screens.Compose.BeatSnap private static readonly int[] available_divisors = { 1, 2, 3, 4, 6, 8, 12, 16 }; public readonly Bindable Divisor = new Bindable(1); - private int currentDivisorIndex = 0; + private int currentDivisorIndex; private TickContainer tickContainer; private DivisorText text; @@ -90,7 +90,7 @@ namespace osu.Game.Screens.Edit.Screens.Compose.BeatSnap new Drawable[] { null, - new TextFlowContainer(s => s.TextSize = 12) + new TextFlowContainer(s => s.TextSize = 10) { Text = "beat snap divisor", RelativeSizeAxes = Axes.X, @@ -145,6 +145,12 @@ namespace osu.Game.Screens.Edit.Screens.Compose.BeatSnap Origin = Anchor.Centre; } + [BackgroundDependencyLoader] + private void load(OsuColour colours) + { + Colour = colours.BlueLighter; + } + protected override void LoadComplete() { base.LoadComplete(); @@ -167,7 +173,7 @@ namespace osu.Game.Screens.Edit.Screens.Compose.BeatSnap Y = 1; ButtonSize = new Vector2(20); - IconScale = new Vector2(0.7f); + IconScale = new Vector2(0.6f); } [BackgroundDependencyLoader] From b25c564ecb5134b633d36143f8100ff6496227a9 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 19 Mar 2018 20:14:46 +0900 Subject: [PATCH 458/544] Integrate into editor's compose screen --- .../Visual/TestCaseBeatSnapVisualiser.cs | 4 ++- .../Visual/TestCaseEditorCompose.cs | 3 +++ .../Compose/BeatSnap/BeatSnapVisualiser.cs | 1 - .../Screens/Edit/Screens/Compose/Compose.cs | 26 ++++++++++++++----- 4 files changed, 26 insertions(+), 8 deletions(-) diff --git a/osu.Game.Tests/Visual/TestCaseBeatSnapVisualiser.cs b/osu.Game.Tests/Visual/TestCaseBeatSnapVisualiser.cs index 5ccad31f7d..632c54ecfd 100644 --- a/osu.Game.Tests/Visual/TestCaseBeatSnapVisualiser.cs +++ b/osu.Game.Tests/Visual/TestCaseBeatSnapVisualiser.cs @@ -6,6 +6,7 @@ using System.Collections.Generic; using osu.Framework.Allocation; using osu.Framework.Graphics; using osu.Game.Screens.Edit.Screens.Compose.BeatSnap; +using OpenTK; namespace osu.Game.Tests.Visual { @@ -24,7 +25,8 @@ namespace osu.Game.Tests.Visual { Anchor = Anchor.Centre, Origin = Anchor.Centre, - Y = -200 + Y = -200, + Size = new Vector2(100, 110) }; } } diff --git a/osu.Game.Tests/Visual/TestCaseEditorCompose.cs b/osu.Game.Tests/Visual/TestCaseEditorCompose.cs index 15bccac172..221b40e2ba 100644 --- a/osu.Game.Tests/Visual/TestCaseEditorCompose.cs +++ b/osu.Game.Tests/Visual/TestCaseEditorCompose.cs @@ -2,6 +2,7 @@ // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using System; +using System.Collections.Generic; using NUnit.Framework; using osu.Framework.Allocation; using osu.Game.Beatmaps; @@ -12,6 +13,8 @@ namespace osu.Game.Tests.Visual [TestFixture] public class TestCaseEditorCompose : OsuTestCase { + public override IReadOnlyList RequiredTypes => new[] { typeof(Compose) }; + private readonly Random random; private readonly Compose compose; diff --git a/osu.Game/Screens/Edit/Screens/Compose/BeatSnap/BeatSnapVisualiser.cs b/osu.Game/Screens/Edit/Screens/Compose/BeatSnap/BeatSnapVisualiser.cs index 076fa926eb..696d491c21 100644 --- a/osu.Game/Screens/Edit/Screens/Compose/BeatSnap/BeatSnapVisualiser.cs +++ b/osu.Game/Screens/Edit/Screens/Compose/BeatSnap/BeatSnapVisualiser.cs @@ -27,7 +27,6 @@ namespace osu.Game.Screens.Edit.Screens.Compose.BeatSnap [BackgroundDependencyLoader] private void load(OsuColour colours) { - Size = new Vector2(100, 110); Masking = true; CornerRadius = 5; diff --git a/osu.Game/Screens/Edit/Screens/Compose/Compose.cs b/osu.Game/Screens/Edit/Screens/Compose/Compose.cs index d42c0bfdac..a3098b7712 100644 --- a/osu.Game/Screens/Edit/Screens/Compose/Compose.cs +++ b/osu.Game/Screens/Edit/Screens/Compose/Compose.cs @@ -8,6 +8,7 @@ using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Shapes; using osu.Framework.Logging; using osu.Game.Beatmaps; +using osu.Game.Screens.Edit.Screens.Compose.BeatSnap; using osu.Game.Screens.Edit.Screens.Compose.Timeline; namespace osu.Game.Screens.Edit.Screens.Compose @@ -47,15 +48,28 @@ namespace osu.Game.Screens.Edit.Screens.Compose Name = "Timeline content", RelativeSizeAxes = Axes.Both, Padding = new MarginPadding { Horizontal = horizontal_margins, Vertical = vertical_margins }, - Children = new Drawable[] + Child = new GridContainer { - new Container + RelativeSizeAxes = Axes.Both, + Content = new[] { - RelativeSizeAxes = Axes.Both, - Padding = new MarginPadding { Right = 115 }, - Child = timeline = new ScrollableTimeline { RelativeSizeAxes = Axes.Both } + new Drawable[] + { + new Container + { + RelativeSizeAxes = Axes.Both, + Padding = new MarginPadding { Right = 5 }, + Child = timeline = new ScrollableTimeline { RelativeSizeAxes = Axes.Both } + }, + new BeatSnapVisualiser { RelativeSizeAxes = Axes.Both } + }, + }, + ColumnDimensions = new[] + { + new Dimension(), + new Dimension(GridSizeMode.Absolute, 90), } - } + }, } } } From 18368d2446ff66e6647cebf368efa3a68057e8fc Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Mon, 19 Mar 2018 20:15:17 +0900 Subject: [PATCH 459/544] Make import notifications fail when any imports fail --- osu.Game/Database/ArchiveModelManager.cs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/osu.Game/Database/ArchiveModelManager.cs b/osu.Game/Database/ArchiveModelManager.cs index a65593ff82..dac38b2405 100644 --- a/osu.Game/Database/ArchiveModelManager.cs +++ b/osu.Game/Database/ArchiveModelManager.cs @@ -88,7 +88,8 @@ namespace osu.Game.Database List imported = new List(); - int i = 0; + int success = 0; + int errors = 0; foreach (string path in paths) { if (notification.State == ProgressNotificationState.Cancelled) @@ -97,11 +98,11 @@ namespace osu.Game.Database try { - notification.Text = $"Importing ({i} of {paths.Length})\n{Path.GetFileName(path)}"; + notification.Text = $"Importing ({success} of {paths.Length})\n{Path.GetFileName(path)}"; using (ArchiveReader reader = getReaderFrom(path)) imported.Add(Import(reader)); - notification.Progress = (float)++i / paths.Length; + notification.Progress = (float)++success / paths.Length; // We may or may not want to delete the file depending on where it is stored. // e.g. reconstructing/repairing database with items from default storage. @@ -121,10 +122,11 @@ namespace osu.Game.Database { e = e.InnerException ?? e; Logger.Error(e, $@"Could not import ({Path.GetFileName(path)})"); + errors++; } } - notification.State = ProgressNotificationState.Completed; + notification.State = errors == 0 ? ProgressNotificationState.Completed : ProgressNotificationState.Cancelled; } /// From 879dbc75b5e6fb8907e2ffefc53fe769adee048a Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 19 Mar 2018 20:20:29 +0900 Subject: [PATCH 460/544] Nest TickContainer in BeatSnapVisualiser --- .../Compose/BeatSnap/BeatSnapVisualiser.cs | 82 +++++++++++++++++ .../Screens/Compose/BeatSnap/TickContainer.cs | 92 ------------------- osu.Game/osu.Game.csproj | 1 - 3 files changed, 82 insertions(+), 93 deletions(-) delete mode 100644 osu.Game/Screens/Edit/Screens/Compose/BeatSnap/TickContainer.cs diff --git a/osu.Game/Screens/Edit/Screens/Compose/BeatSnap/BeatSnapVisualiser.cs b/osu.Game/Screens/Edit/Screens/Compose/BeatSnap/BeatSnapVisualiser.cs index 696d491c21..8262c06ba8 100644 --- a/osu.Game/Screens/Edit/Screens/Compose/BeatSnap/BeatSnapVisualiser.cs +++ b/osu.Game/Screens/Edit/Screens/Compose/BeatSnap/BeatSnapVisualiser.cs @@ -1,6 +1,7 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using System; using osu.Framework.Allocation; using osu.Framework.Configuration; using osu.Framework.Graphics; @@ -183,5 +184,86 @@ namespace osu.Game.Screens.Edit.Screens.Compose.BeatSnap FlashColour = colours.Gray9; } } + + private class TickContainer : CompositeDrawable + { + public readonly BindableInt Divisor = new BindableInt(); + + public new MarginPadding Padding + { + set => base.Padding = value; + } + + private EquilateralTriangle marker; + + private readonly int[] availableDivisors; + private readonly float tickSpacing; + + public TickContainer(params int[] divisors) + { + availableDivisors = divisors; + tickSpacing = 1f / (availableDivisors.Length + 1); + } + + [BackgroundDependencyLoader] + private void load(OsuColour colours) + { + InternalChild = marker = new EquilateralTriangle + { + Anchor = Anchor.BottomLeft, + Origin = Anchor.BottomCentre, + RelativePositionAxes = Axes.X, + Height = 7, + EdgeSmoothness = new Vector2(1), + Colour = colours.Gray4, + }; + + for (int i = 0; i < availableDivisors.Length; i++) + { + AddInternal(new Tick(availableDivisors[i]) + { + Anchor = Anchor.TopLeft, + Origin = Anchor.TopCentre, + RelativePositionAxes = Axes.X, + X = getTickPosition(i) + }); + } + } + + protected override void LoadComplete() + { + base.LoadComplete(); + + Divisor.ValueChanged += v => updatePosition(); + updatePosition(); + } + + private void updatePosition() => marker.MoveToX(getTickPosition(Array.IndexOf(availableDivisors, Divisor.Value)), 100, Easing.OutQuint); + + private float getTickPosition(int index) => (index + 1) * tickSpacing; + + private class Tick : Box + { + private readonly int divisor; + + public Tick(int divisor) + { + this.divisor = divisor; + + Size = new Vector2(2, 10); + } + + [BackgroundDependencyLoader] + private void load(OsuColour colours) + { + if (divisor >= 16) + Colour = colours.Red; + else if (divisor >= 8) + Colour = colours.Yellow; + else + Colour = colours.Gray4; + } + } + } } } diff --git a/osu.Game/Screens/Edit/Screens/Compose/BeatSnap/TickContainer.cs b/osu.Game/Screens/Edit/Screens/Compose/BeatSnap/TickContainer.cs deleted file mode 100644 index deb22742bc..0000000000 --- a/osu.Game/Screens/Edit/Screens/Compose/BeatSnap/TickContainer.cs +++ /dev/null @@ -1,92 +0,0 @@ -// Copyright (c) 2007-2018 ppy Pty Ltd . -// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE - -using System; -using osu.Framework.Allocation; -using osu.Framework.Configuration; -using osu.Framework.Graphics; -using osu.Framework.Graphics.Containers; -using osu.Framework.Graphics.Shapes; -using osu.Game.Graphics; -using OpenTK; - -namespace osu.Game.Screens.Edit.Screens.Compose.BeatSnap -{ - public class TickContainer : CompositeDrawable - { - public readonly BindableInt Divisor = new BindableInt(); - - public new MarginPadding Padding { set => base.Padding = value; } - - private EquilateralTriangle marker; - - private readonly int[] availableDivisors; - private readonly float tickSpacing; - - public TickContainer(params int[] divisors) - { - availableDivisors = divisors; - tickSpacing = 1f / (availableDivisors.Length + 1); - } - - [BackgroundDependencyLoader] - private void load(OsuColour colours) - { - InternalChild = marker = new EquilateralTriangle - { - Anchor = Anchor.BottomLeft, - Origin = Anchor.BottomCentre, - RelativePositionAxes = Axes.X, - Height = 7, - EdgeSmoothness = new Vector2(1), - Colour = colours.Gray4, - }; - - for (int i = 0; i < availableDivisors.Length; i++) - { - AddInternal(new Tick(availableDivisors[i]) - { - Anchor = Anchor.TopLeft, - Origin = Anchor.TopCentre, - RelativePositionAxes = Axes.X, - X = getTickPosition(i) - }); - } - } - - protected override void LoadComplete() - { - base.LoadComplete(); - - Divisor.ValueChanged += v => updatePosition(); - updatePosition(); - } - - private void updatePosition() => marker.MoveToX(getTickPosition(Array.IndexOf(availableDivisors, Divisor.Value)), 100, Easing.OutQuint); - - private float getTickPosition(int index) => (index + 1) * tickSpacing; - - private class Tick : Box - { - private readonly int divisor; - - public Tick(int divisor) - { - this.divisor = divisor; - - Size = new Vector2(2, 10); - } - - [BackgroundDependencyLoader] - private void load(OsuColour colours) - { - if (divisor >= 16) - Colour = colours.Red; - else if (divisor >= 8) - Colour = colours.Yellow; - else - Colour = colours.Gray4; - } - } - } -} diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index 744ca7bcf2..75b69fad76 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -381,7 +381,6 @@ - From df0b8a24c523ef03b0a62db852c14333fadf5152 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 19 Mar 2018 20:21:03 +0900 Subject: [PATCH 461/544] Rename + renamespace --- osu.Game.Tests/Visual/TestCaseBeatSnapVisualiser.cs | 5 ++--- osu.Game/Screens/Edit/Screens/Compose/Compose.cs | 1 - .../BeatSnapVisualiser.cs => DrawableBeatDivisor.cs} | 2 +- osu.Game/osu.Game.csproj | 2 +- 4 files changed, 4 insertions(+), 6 deletions(-) rename osu.Game/Screens/Edit/Screens/Compose/{BeatSnap/BeatSnapVisualiser.cs => DrawableBeatDivisor.cs} (96%) diff --git a/osu.Game.Tests/Visual/TestCaseBeatSnapVisualiser.cs b/osu.Game.Tests/Visual/TestCaseBeatSnapVisualiser.cs index 632c54ecfd..a17b2328ba 100644 --- a/osu.Game.Tests/Visual/TestCaseBeatSnapVisualiser.cs +++ b/osu.Game.Tests/Visual/TestCaseBeatSnapVisualiser.cs @@ -5,7 +5,7 @@ using System; using System.Collections.Generic; using osu.Framework.Allocation; using osu.Framework.Graphics; -using osu.Game.Screens.Edit.Screens.Compose.BeatSnap; +using osu.Game.Screens.Edit.Screens.Compose; using OpenTK; namespace osu.Game.Tests.Visual @@ -14,8 +14,7 @@ namespace osu.Game.Tests.Visual { public override IReadOnlyList RequiredTypes => new[] { - typeof(BeatSnapVisualiser), - typeof(TickContainer) + typeof(BeatSnapVisualiser) }; [BackgroundDependencyLoader] diff --git a/osu.Game/Screens/Edit/Screens/Compose/Compose.cs b/osu.Game/Screens/Edit/Screens/Compose/Compose.cs index a3098b7712..cd4e0b9c4f 100644 --- a/osu.Game/Screens/Edit/Screens/Compose/Compose.cs +++ b/osu.Game/Screens/Edit/Screens/Compose/Compose.cs @@ -8,7 +8,6 @@ using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Shapes; using osu.Framework.Logging; using osu.Game.Beatmaps; -using osu.Game.Screens.Edit.Screens.Compose.BeatSnap; using osu.Game.Screens.Edit.Screens.Compose.Timeline; namespace osu.Game.Screens.Edit.Screens.Compose diff --git a/osu.Game/Screens/Edit/Screens/Compose/BeatSnap/BeatSnapVisualiser.cs b/osu.Game/Screens/Edit/Screens/Compose/DrawableBeatDivisor.cs similarity index 96% rename from osu.Game/Screens/Edit/Screens/Compose/BeatSnap/BeatSnapVisualiser.cs rename to osu.Game/Screens/Edit/Screens/Compose/DrawableBeatDivisor.cs index 8262c06ba8..5e2601ca50 100644 --- a/osu.Game/Screens/Edit/Screens/Compose/BeatSnap/BeatSnapVisualiser.cs +++ b/osu.Game/Screens/Edit/Screens/Compose/DrawableBeatDivisor.cs @@ -13,7 +13,7 @@ using osu.Game.Graphics.UserInterface; using OpenTK; using OpenTK.Graphics; -namespace osu.Game.Screens.Edit.Screens.Compose.BeatSnap +namespace osu.Game.Screens.Edit.Screens.Compose { public class BeatSnapVisualiser : CompositeDrawable { diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index 75b69fad76..8bdefbfeb5 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -380,7 +380,7 @@ - + From 46f10b392dfbb0f0adc1fca88222d43ce09b758e Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 19 Mar 2018 20:23:31 +0900 Subject: [PATCH 462/544] Fix merge errors --- osu.Game.Tests/Visual/TestCaseEditorCompose.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/osu.Game.Tests/Visual/TestCaseEditorCompose.cs b/osu.Game.Tests/Visual/TestCaseEditorCompose.cs index 5cfd82e1e8..cd25bc1683 100644 --- a/osu.Game.Tests/Visual/TestCaseEditorCompose.cs +++ b/osu.Game.Tests/Visual/TestCaseEditorCompose.cs @@ -16,6 +16,7 @@ namespace osu.Game.Tests.Visual public class TestCaseEditorCompose : OsuTestCase { public override IReadOnlyList RequiredTypes => new[] { typeof(Compose) }; + private DependencyContainer dependencies; protected override IReadOnlyDependencyContainer CreateLocalDependencies(IReadOnlyDependencyContainer parent) From b71c123214fc56035eaeda692144427876fe64c6 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Mon, 19 Mar 2018 20:26:16 +0900 Subject: [PATCH 463/544] Allow import of skins which don't have ini files --- osu.Game/Skinning/LegacySkin.cs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/osu.Game/Skinning/LegacySkin.cs b/osu.Game/Skinning/LegacySkin.cs index 27f15474ba..b531d791b0 100644 --- a/osu.Game/Skinning/LegacySkin.cs +++ b/osu.Game/Skinning/LegacySkin.cs @@ -26,10 +26,13 @@ namespace osu.Game.Skinning samples = audioManager.GetSampleManager(storage); textures = new TextureStore(new RawTextureLoaderStore(storage)); - var decoder = new LegacySkinDecoder(); + Stream stream = storage.GetStream("skin.ini"); - using (StreamReader reader = new StreamReader(storage.GetStream("skin.ini"))) - Configuration = decoder.Decode(reader); + if (stream != null) + using (StreamReader reader = new StreamReader(stream)) + Configuration = new LegacySkinDecoder().Decode(reader); + else + Configuration = new SkinConfiguration(); } public override Drawable GetDrawableComponent(string componentName) From 5ecbc5612c8a75b8a7a14b4ac807ef726cf64afe Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 19 Mar 2018 20:30:07 +0900 Subject: [PATCH 464/544] Integrate with dependency injection --- .../Visual/TestCaseBeatSnapVisualiser.cs | 7 ++++ .../Screens/Compose/BindableBeatDivisor.cs | 15 +++++++ .../Screens/Edit/Screens/Compose/Compose.cs | 9 +++++ .../Screens/Compose/DrawableBeatDivisor.cs | 40 +++++++++---------- osu.Game/osu.Game.csproj | 1 + 5 files changed, 52 insertions(+), 20 deletions(-) create mode 100644 osu.Game/Screens/Edit/Screens/Compose/BindableBeatDivisor.cs diff --git a/osu.Game.Tests/Visual/TestCaseBeatSnapVisualiser.cs b/osu.Game.Tests/Visual/TestCaseBeatSnapVisualiser.cs index a17b2328ba..d72b59f5c5 100644 --- a/osu.Game.Tests/Visual/TestCaseBeatSnapVisualiser.cs +++ b/osu.Game.Tests/Visual/TestCaseBeatSnapVisualiser.cs @@ -17,9 +17,16 @@ namespace osu.Game.Tests.Visual typeof(BeatSnapVisualiser) }; + private DependencyContainer dependencies; + + protected override IReadOnlyDependencyContainer CreateLocalDependencies(IReadOnlyDependencyContainer parent) + => dependencies = new DependencyContainer(parent); + [BackgroundDependencyLoader] private void load() { + dependencies.Cache(new BindableBeatDivisor()); + Child = new BeatSnapVisualiser { Anchor = Anchor.Centre, diff --git a/osu.Game/Screens/Edit/Screens/Compose/BindableBeatDivisor.cs b/osu.Game/Screens/Edit/Screens/Compose/BindableBeatDivisor.cs new file mode 100644 index 0000000000..eb68bce71b --- /dev/null +++ b/osu.Game/Screens/Edit/Screens/Compose/BindableBeatDivisor.cs @@ -0,0 +1,15 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using osu.Framework.Configuration; + +namespace osu.Game.Screens.Edit.Screens.Compose +{ + public class BindableBeatDivisor : Bindable + { + public BindableBeatDivisor() + : base(1) + { + } + } +} diff --git a/osu.Game/Screens/Edit/Screens/Compose/Compose.cs b/osu.Game/Screens/Edit/Screens/Compose/Compose.cs index d32dc92ce5..c044c949e8 100644 --- a/osu.Game/Screens/Edit/Screens/Compose/Compose.cs +++ b/osu.Game/Screens/Edit/Screens/Compose/Compose.cs @@ -17,11 +17,20 @@ namespace osu.Game.Screens.Edit.Screens.Compose private const float vertical_margins = 10; private const float horizontal_margins = 20; + private readonly BindableBeatDivisor beatDivisor = new BindableBeatDivisor(); + private Container composerContainer; + private DependencyContainer dependencies; + + protected override IReadOnlyDependencyContainer CreateLocalDependencies(IReadOnlyDependencyContainer parent) + => dependencies = new DependencyContainer(parent); + [BackgroundDependencyLoader] private void load() { + dependencies.Cache(beatDivisor); + ScrollableTimeline timeline; Children = new Drawable[] { diff --git a/osu.Game/Screens/Edit/Screens/Compose/DrawableBeatDivisor.cs b/osu.Game/Screens/Edit/Screens/Compose/DrawableBeatDivisor.cs index 5e2601ca50..af028763a0 100644 --- a/osu.Game/Screens/Edit/Screens/Compose/DrawableBeatDivisor.cs +++ b/osu.Game/Screens/Edit/Screens/Compose/DrawableBeatDivisor.cs @@ -19,15 +19,14 @@ namespace osu.Game.Screens.Edit.Screens.Compose { private static readonly int[] available_divisors = { 1, 2, 3, 4, 6, 8, 12, 16 }; - public readonly Bindable Divisor = new Bindable(1); + private readonly Bindable beatDivisor = new Bindable(1); private int currentDivisorIndex; - private TickContainer tickContainer; - private DivisorText text; - [BackgroundDependencyLoader] - private void load(OsuColour colours) + private void load(OsuColour colours, BindableBeatDivisor beatDivisor) { + this.beatDivisor.BindTo(beatDivisor); + Masking = true; CornerRadius = 5; @@ -46,7 +45,7 @@ namespace osu.Game.Screens.Edit.Screens.Compose { new Drawable[] { - tickContainer = new TickContainer(1, 2, 3, 4, 6, 8, 12, 16) + new TickContainer(1, 2, 3, 4, 6, 8, 12, 16) { RelativeSizeAxes = Axes.Both, Padding = new MarginPadding { Horizontal = 5 } @@ -80,7 +79,7 @@ namespace osu.Game.Screens.Edit.Screens.Compose Icon = FontAwesome.fa_chevron_left, Action = selectPrevious }, - text = new DivisorText(), + new DivisorText(), new DivisorButton { Icon = FontAwesome.fa_chevron_right, @@ -116,28 +115,25 @@ namespace osu.Game.Screens.Edit.Screens.Compose } } }; - - tickContainer.Divisor.BindTo(Divisor); - text.Divisor.BindTo(Divisor); } private void selectPrevious() { if (currentDivisorIndex == 0) return; - Divisor.Value = available_divisors[--currentDivisorIndex]; + beatDivisor.Value = available_divisors[--currentDivisorIndex]; } private void selectNext() { if (currentDivisorIndex == available_divisors.Length - 1) return; - Divisor.Value = available_divisors[++currentDivisorIndex]; + beatDivisor.Value = available_divisors[++currentDivisorIndex]; } private class DivisorText : SpriteText { - public readonly Bindable Divisor = new Bindable(); + private readonly Bindable beatDivisor = new Bindable(); public DivisorText() { @@ -146,8 +142,10 @@ namespace osu.Game.Screens.Edit.Screens.Compose } [BackgroundDependencyLoader] - private void load(OsuColour colours) + private void load(OsuColour colours, BindableBeatDivisor beatDivisor) { + this.beatDivisor.BindTo(beatDivisor); + Colour = colours.BlueLighter; } @@ -155,11 +153,11 @@ namespace osu.Game.Screens.Edit.Screens.Compose { base.LoadComplete(); - Divisor.ValueChanged += v => updateText(); + beatDivisor.ValueChanged += v => updateText(); updateText(); } - private void updateText() => Text = $"1/{Divisor.Value}"; + private void updateText() => Text = $"1/{beatDivisor.Value}"; } private class DivisorButton : IconButton @@ -187,7 +185,7 @@ namespace osu.Game.Screens.Edit.Screens.Compose private class TickContainer : CompositeDrawable { - public readonly BindableInt Divisor = new BindableInt(); + private readonly Bindable beatDivisor = new Bindable(); public new MarginPadding Padding { @@ -206,8 +204,10 @@ namespace osu.Game.Screens.Edit.Screens.Compose } [BackgroundDependencyLoader] - private void load(OsuColour colours) + private void load(OsuColour colours, BindableBeatDivisor beatDivisor) { + this.beatDivisor.BindTo(beatDivisor); + InternalChild = marker = new EquilateralTriangle { Anchor = Anchor.BottomLeft, @@ -234,11 +234,11 @@ namespace osu.Game.Screens.Edit.Screens.Compose { base.LoadComplete(); - Divisor.ValueChanged += v => updatePosition(); + beatDivisor.ValueChanged += v => updatePosition(); updatePosition(); } - private void updatePosition() => marker.MoveToX(getTickPosition(Array.IndexOf(availableDivisors, Divisor.Value)), 100, Easing.OutQuint); + private void updatePosition() => marker.MoveToX(getTickPosition(Array.IndexOf(availableDivisors, beatDivisor.Value)), 100, Easing.OutQuint); private float getTickPosition(int index) => (index + 1) * tickSpacing; diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index 8bdefbfeb5..42f58e9eee 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -380,6 +380,7 @@ + From c5eab7a2279caef7a695ae10ade1dba4b1303af3 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 19 Mar 2018 20:34:24 +0900 Subject: [PATCH 465/544] Actually rename to DrawableBeatDivisor... --- osu.Game.Tests/Visual/TestCaseBeatSnapVisualiser.cs | 4 ++-- osu.Game/Screens/Edit/Screens/Compose/Compose.cs | 2 +- osu.Game/Screens/Edit/Screens/Compose/DrawableBeatDivisor.cs | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/osu.Game.Tests/Visual/TestCaseBeatSnapVisualiser.cs b/osu.Game.Tests/Visual/TestCaseBeatSnapVisualiser.cs index d72b59f5c5..23e343c36e 100644 --- a/osu.Game.Tests/Visual/TestCaseBeatSnapVisualiser.cs +++ b/osu.Game.Tests/Visual/TestCaseBeatSnapVisualiser.cs @@ -14,7 +14,7 @@ namespace osu.Game.Tests.Visual { public override IReadOnlyList RequiredTypes => new[] { - typeof(BeatSnapVisualiser) + typeof(DrawableBeatDivisor) }; private DependencyContainer dependencies; @@ -27,7 +27,7 @@ namespace osu.Game.Tests.Visual { dependencies.Cache(new BindableBeatDivisor()); - Child = new BeatSnapVisualiser + Child = new DrawableBeatDivisor { Anchor = Anchor.Centre, Origin = Anchor.Centre, diff --git a/osu.Game/Screens/Edit/Screens/Compose/Compose.cs b/osu.Game/Screens/Edit/Screens/Compose/Compose.cs index c044c949e8..41bdc25bcf 100644 --- a/osu.Game/Screens/Edit/Screens/Compose/Compose.cs +++ b/osu.Game/Screens/Edit/Screens/Compose/Compose.cs @@ -70,7 +70,7 @@ namespace osu.Game.Screens.Edit.Screens.Compose Padding = new MarginPadding { Right = 5 }, Child = timeline = new ScrollableTimeline { RelativeSizeAxes = Axes.Both } }, - new BeatSnapVisualiser { RelativeSizeAxes = Axes.Both } + new DrawableBeatDivisor { RelativeSizeAxes = Axes.Both } }, }, ColumnDimensions = new[] diff --git a/osu.Game/Screens/Edit/Screens/Compose/DrawableBeatDivisor.cs b/osu.Game/Screens/Edit/Screens/Compose/DrawableBeatDivisor.cs index af028763a0..1a4ab05254 100644 --- a/osu.Game/Screens/Edit/Screens/Compose/DrawableBeatDivisor.cs +++ b/osu.Game/Screens/Edit/Screens/Compose/DrawableBeatDivisor.cs @@ -15,7 +15,7 @@ using OpenTK.Graphics; namespace osu.Game.Screens.Edit.Screens.Compose { - public class BeatSnapVisualiser : CompositeDrawable + public class DrawableBeatDivisor : CompositeDrawable { private static readonly int[] available_divisors = { 1, 2, 3, 4, 6, 8, 12, 16 }; From 994c7bfabdaed12ceebc16959a3c7157c43a99a9 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Mon, 19 Mar 2018 20:30:45 +0900 Subject: [PATCH 466/544] Further improvements to messaging --- osu.Game/Database/ArchiveModelManager.cs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/osu.Game/Database/ArchiveModelManager.cs b/osu.Game/Database/ArchiveModelManager.cs index dac38b2405..bdc7c58238 100644 --- a/osu.Game/Database/ArchiveModelManager.cs +++ b/osu.Game/Database/ArchiveModelManager.cs @@ -79,7 +79,6 @@ namespace osu.Game.Database var notification = new ProgressNotification { Text = "Import is initialising...", - CompletionText = "Import successful!", Progress = 0, State = ProgressNotificationState.Active, }; @@ -88,7 +87,7 @@ namespace osu.Game.Database List imported = new List(); - int success = 0; + int current = 0; int errors = 0; foreach (string path in paths) { @@ -98,11 +97,11 @@ namespace osu.Game.Database try { - notification.Text = $"Importing ({success} of {paths.Length})\n{Path.GetFileName(path)}"; + notification.Text = $"Importing ({++current} of {paths.Length})\n{Path.GetFileName(path)}"; using (ArchiveReader reader = getReaderFrom(path)) imported.Add(Import(reader)); - notification.Progress = (float)++success / paths.Length; + notification.Progress = (float)(current - 1) / paths.Length; // We may or may not want to delete the file depending on where it is stored. // e.g. reconstructing/repairing database with items from default storage. @@ -126,7 +125,8 @@ namespace osu.Game.Database } } - notification.State = errors == 0 ? ProgressNotificationState.Completed : ProgressNotificationState.Cancelled; + notification.Text = errors > 0 ? $"Import complete with {errors} errors" : "Import successful!"; + notification.State = ProgressNotificationState.Completed; } /// @@ -333,7 +333,7 @@ namespace osu.Game.Database { if (ZipFile.IsZipFile(path)) return new ZipArchiveReader(Files.Storage.GetStream(path), Path.GetFileName(path)); - return new LegacyFilesystemReader(path); + return new LegacyFilesystemReader(path); } } } From f565cc861d9b176d29312016ed820ce6f1b3e297 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Mon, 19 Mar 2018 20:41:12 +0900 Subject: [PATCH 467/544] Hard bail on attempting to import an invalid archive format --- osu.Game/Database/ArchiveModelManager.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/osu.Game/Database/ArchiveModelManager.cs b/osu.Game/Database/ArchiveModelManager.cs index a65593ff82..4c60db3a23 100644 --- a/osu.Game/Database/ArchiveModelManager.cs +++ b/osu.Game/Database/ArchiveModelManager.cs @@ -13,6 +13,7 @@ using osu.Game.IO; using osu.Game.IO.Archives; using osu.Game.IPC; using osu.Game.Overlays.Notifications; +using SharpCompress.Common; using FileInfo = osu.Game.IO.FileInfo; namespace osu.Game.Database @@ -331,7 +332,9 @@ namespace osu.Game.Database { if (ZipFile.IsZipFile(path)) return new ZipArchiveReader(Files.Storage.GetStream(path), Path.GetFileName(path)); - return new LegacyFilesystemReader(path); + if (Directory.Exists(path)) + return new LegacyFilesystemReader(path); + throw new InvalidFormatException($"{path} is not a valid archive"); } } } From b1d09500f22a00a548c0ceecce45d8027ac67b4a Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 19 Mar 2018 20:42:06 +0900 Subject: [PATCH 468/544] Integrate beat snap divisor into editor seeking --- .../Visual/TestCaseEditorSeekSnapping.cs | 4 ++++ .../Visual/TestCaseEditorSelectionLayer.cs | 2 ++ osu.Game/Rulesets/Edit/HitObjectComposer.cs | 15 ++++++--------- .../Edit/Screens/Compose/BindableBeatDivisor.cs | 4 ++-- 4 files changed, 14 insertions(+), 11 deletions(-) diff --git a/osu.Game.Tests/Visual/TestCaseEditorSeekSnapping.cs b/osu.Game.Tests/Visual/TestCaseEditorSeekSnapping.cs index bfdb39dd5e..e9e966a826 100644 --- a/osu.Game.Tests/Visual/TestCaseEditorSeekSnapping.cs +++ b/osu.Game.Tests/Visual/TestCaseEditorSeekSnapping.cs @@ -18,6 +18,7 @@ using osu.Game.Rulesets.Edit; using osu.Game.Rulesets.Edit.Tools; using osu.Game.Rulesets.Osu; using osu.Game.Rulesets.Osu.Objects; +using osu.Game.Screens.Edit.Screens.Compose; using osu.Game.Tests.Beatmaps; using OpenTK; using OpenTK.Graphics; @@ -31,6 +32,8 @@ namespace osu.Game.Tests.Visual private Track track; private HitObjectComposer composer; + private readonly BindableBeatDivisor beatDivisor = new BindableBeatDivisor(4); + private DecoupleableInterpolatingFramedClock clock; private DependencyContainer dependencies; @@ -44,6 +47,7 @@ namespace osu.Game.Tests.Visual clock = new DecoupleableInterpolatingFramedClock { IsCoupled = false }; dependencies.CacheAs(clock); dependencies.CacheAs(clock); + dependencies.Cache(beatDivisor); var testBeatmap = new Beatmap { diff --git a/osu.Game.Tests/Visual/TestCaseEditorSelectionLayer.cs b/osu.Game.Tests/Visual/TestCaseEditorSelectionLayer.cs index bbbfef477a..62289ea7cd 100644 --- a/osu.Game.Tests/Visual/TestCaseEditorSelectionLayer.cs +++ b/osu.Game.Tests/Visual/TestCaseEditorSelectionLayer.cs @@ -14,6 +14,7 @@ using osu.Game.Rulesets.Osu; using osu.Game.Rulesets.Osu.Edit; using osu.Game.Rulesets.Osu.Edit.Layers.Selection.Overlays; using osu.Game.Rulesets.Osu.Objects; +using osu.Game.Screens.Edit.Screens.Compose; using osu.Game.Screens.Edit.Screens.Compose.Layers; using osu.Game.Tests.Beatmaps; @@ -68,6 +69,7 @@ namespace osu.Game.Tests.Visual var clock = new DecoupleableInterpolatingFramedClock { IsCoupled = false }; dependencies.CacheAs(clock); dependencies.CacheAs(clock); + dependencies.Cache(new BindableBeatDivisor()); Child = new OsuHitObjectComposer(new OsuRuleset()); } diff --git a/osu.Game/Rulesets/Edit/HitObjectComposer.cs b/osu.Game/Rulesets/Edit/HitObjectComposer.cs index ae1c8af1a4..7ab9ff9164 100644 --- a/osu.Game/Rulesets/Edit/HitObjectComposer.cs +++ b/osu.Game/Rulesets/Edit/HitObjectComposer.cs @@ -16,6 +16,7 @@ using osu.Game.Beatmaps; using osu.Game.Rulesets.Edit.Tools; using osu.Game.Rulesets.Objects.Drawables; using osu.Game.Rulesets.UI; +using osu.Game.Screens.Edit.Screens.Compose; using osu.Game.Screens.Edit.Screens.Compose.Layers; using osu.Game.Screens.Edit.Screens.Compose.RadioButtons; @@ -31,6 +32,7 @@ namespace osu.Game.Rulesets.Edit private readonly List layerContainers = new List(); private readonly Bindable beatmap = new Bindable(); + private readonly Bindable beatDivisor = new Bindable(); private IAdjustableClock adjustableClock; @@ -42,9 +44,10 @@ namespace osu.Game.Rulesets.Edit } [BackgroundDependencyLoader] - private void load(OsuGameBase osuGame, IAdjustableClock adjustableClock, IFrameBasedClock framedClock) + private void load(OsuGameBase osuGame, IAdjustableClock adjustableClock, IFrameBasedClock framedClock, BindableBeatDivisor beatDivisor) { this.adjustableClock = adjustableClock; + this.beatDivisor.BindTo(beatDivisor); beatmap.BindTo(osuGame.Beatmap); @@ -167,9 +170,6 @@ namespace osu.Game.Rulesets.Edit private void seek(int direction, bool snapped) { - // Todo: This should not be a constant, but feels good for now - const int beat_snap_divisor = 4; - var cpi = beatmap.Value.Beatmap.ControlPointInfo; var timingPoint = cpi.TimingPointAt(adjustableClock.CurrentTime); @@ -181,7 +181,7 @@ namespace osu.Game.Rulesets.Edit timingPoint = cpi.TimingPoints[--activeIndex]; } - double seekAmount = timingPoint.BeatLength / beat_snap_divisor; + double seekAmount = timingPoint.BeatLength / beatDivisor; double seekTime = adjustableClock.CurrentTime + seekAmount * direction; if (!snapped || cpi.TimingPoints.Count == 0) @@ -222,9 +222,6 @@ namespace osu.Game.Rulesets.Edit public void SeekTo(double seekTime, bool snapped = false) { - // Todo: This should not be a constant, but feels good for now - const int beat_snap_divisor = 4; - if (!snapped) { adjustableClock.Seek(seekTime); @@ -232,7 +229,7 @@ namespace osu.Game.Rulesets.Edit } var timingPoint = beatmap.Value.Beatmap.ControlPointInfo.TimingPointAt(seekTime); - double beatSnapLength = timingPoint.BeatLength / beat_snap_divisor; + double beatSnapLength = timingPoint.BeatLength / beatDivisor; // We will be snapping to beats within the timing point seekTime -= timingPoint.Time; diff --git a/osu.Game/Screens/Edit/Screens/Compose/BindableBeatDivisor.cs b/osu.Game/Screens/Edit/Screens/Compose/BindableBeatDivisor.cs index eb68bce71b..df2521dc10 100644 --- a/osu.Game/Screens/Edit/Screens/Compose/BindableBeatDivisor.cs +++ b/osu.Game/Screens/Edit/Screens/Compose/BindableBeatDivisor.cs @@ -7,8 +7,8 @@ namespace osu.Game.Screens.Edit.Screens.Compose { public class BindableBeatDivisor : Bindable { - public BindableBeatDivisor() - : base(1) + public BindableBeatDivisor(int value = 1) + : base(value) { } } From fa5fd46f8545f53baf476e9572a51e426e3a194c Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Mon, 19 Mar 2018 20:42:42 +0900 Subject: [PATCH 469/544] Clean up + rename testcase --- ...tSnapVisualiser.cs => TestCaseDrawableBeatDivisor.cs} | 9 +-------- osu.Game.Tests/osu.Game.Tests.csproj | 2 +- 2 files changed, 2 insertions(+), 9 deletions(-) rename osu.Game.Tests/Visual/{TestCaseBeatSnapVisualiser.cs => TestCaseDrawableBeatDivisor.cs} (77%) diff --git a/osu.Game.Tests/Visual/TestCaseBeatSnapVisualiser.cs b/osu.Game.Tests/Visual/TestCaseDrawableBeatDivisor.cs similarity index 77% rename from osu.Game.Tests/Visual/TestCaseBeatSnapVisualiser.cs rename to osu.Game.Tests/Visual/TestCaseDrawableBeatDivisor.cs index 23e343c36e..104ce1557c 100644 --- a/osu.Game.Tests/Visual/TestCaseBeatSnapVisualiser.cs +++ b/osu.Game.Tests/Visual/TestCaseDrawableBeatDivisor.cs @@ -1,8 +1,6 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE -using System; -using System.Collections.Generic; using osu.Framework.Allocation; using osu.Framework.Graphics; using osu.Game.Screens.Edit.Screens.Compose; @@ -10,13 +8,8 @@ using OpenTK; namespace osu.Game.Tests.Visual { - public class TestCaseBeatSnapVisualiser : OsuTestCase + public class TestCaseDrawableBeatDivisor : OsuTestCase { - public override IReadOnlyList RequiredTypes => new[] - { - typeof(DrawableBeatDivisor) - }; - private DependencyContainer dependencies; protected override IReadOnlyDependencyContainer CreateLocalDependencies(IReadOnlyDependencyContainer parent) diff --git a/osu.Game.Tests/osu.Game.Tests.csproj b/osu.Game.Tests/osu.Game.Tests.csproj index c244ab8050..b5ab229f8a 100644 --- a/osu.Game.Tests/osu.Game.Tests.csproj +++ b/osu.Game.Tests/osu.Game.Tests.csproj @@ -116,7 +116,7 @@ - + From 553fd3b7897f9edce3b78604f0e33d72b08f18e6 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Mon, 19 Mar 2018 21:00:27 +0900 Subject: [PATCH 470/544] Give DefaultSkin an empty Configuration --- osu.Game/Skinning/DefaultSkin.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/osu.Game/Skinning/DefaultSkin.cs b/osu.Game/Skinning/DefaultSkin.cs index e40a43d400..c469e91250 100644 --- a/osu.Game/Skinning/DefaultSkin.cs +++ b/osu.Game/Skinning/DefaultSkin.cs @@ -11,6 +11,7 @@ namespace osu.Game.Skinning public DefaultSkin() : base(SkinInfo.Default) { + Configuration = new SkinConfiguration(); } public override Drawable GetDrawableComponent(string componentName) From ee73bd4568494c26df000b80a0f94ccf91e62383 Mon Sep 17 00:00:00 2001 From: TocoToucan Date: Mon, 19 Mar 2018 22:39:00 +0300 Subject: [PATCH 471/544] Update ScreenshotManager inline with framework changes --- osu.Game/Graphics/ScreenshotManager.cs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/osu.Game/Graphics/ScreenshotManager.cs b/osu.Game/Graphics/ScreenshotManager.cs index ae1aebfbc1..8028b744c9 100644 --- a/osu.Game/Graphics/ScreenshotManager.cs +++ b/osu.Game/Graphics/ScreenshotManager.cs @@ -36,7 +36,7 @@ namespace osu.Game.Graphics switch (action) { case GlobalAction.TakeScreenshot: - TakeScreenshot(); + TakeScreenshotAsync(); return true; } @@ -45,9 +45,9 @@ namespace osu.Game.Graphics public bool OnReleased(GlobalAction action) => false; - public void TakeScreenshot() + public async void TakeScreenshotAsync() { - host.TakeScreenshot(screenshotBitmap => + using (var bitmap = await host.TakeScreenshotAsync()) { var fileName = getFileName(); var stream = storage.GetStream(fileName, FileAccess.Write); @@ -55,17 +55,17 @@ namespace osu.Game.Graphics switch (screenshotFormat.Value) { case ScreenshotFormat.Png: - screenshotBitmap.Save(stream, ImageFormat.Png); + bitmap.Save(stream, ImageFormat.Png); break; case ScreenshotFormat.Jpg: - screenshotBitmap.Save(stream, ImageFormat.Jpeg); + bitmap.Save(stream, ImageFormat.Jpeg); break; default: throw new ArgumentOutOfRangeException(nameof(screenshotFormat)); } notificationOverlay.Post(new SimpleNotification { Text = $"{fileName} saved" }); - }); + } } private string getFileName() From 50192b21e3a1cdd9d6f31e794075f5f389cd4b12 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Tue, 20 Mar 2018 13:57:25 +0900 Subject: [PATCH 472/544] Give DrawableBeatDivisor a ctor --- .../Visual/TestCaseDrawableBeatDivisor.cs | 9 +---- .../Screens/Edit/Screens/Compose/Compose.cs | 2 +- .../Screens/Compose/DrawableBeatDivisor.cs | 34 +++++++++---------- 3 files changed, 19 insertions(+), 26 deletions(-) diff --git a/osu.Game.Tests/Visual/TestCaseDrawableBeatDivisor.cs b/osu.Game.Tests/Visual/TestCaseDrawableBeatDivisor.cs index 104ce1557c..238fd09fd8 100644 --- a/osu.Game.Tests/Visual/TestCaseDrawableBeatDivisor.cs +++ b/osu.Game.Tests/Visual/TestCaseDrawableBeatDivisor.cs @@ -10,17 +10,10 @@ namespace osu.Game.Tests.Visual { public class TestCaseDrawableBeatDivisor : OsuTestCase { - private DependencyContainer dependencies; - - protected override IReadOnlyDependencyContainer CreateLocalDependencies(IReadOnlyDependencyContainer parent) - => dependencies = new DependencyContainer(parent); - [BackgroundDependencyLoader] private void load() { - dependencies.Cache(new BindableBeatDivisor()); - - Child = new DrawableBeatDivisor + Child = new DrawableBeatDivisor(new BindableBeatDivisor()) { Anchor = Anchor.Centre, Origin = Anchor.Centre, diff --git a/osu.Game/Screens/Edit/Screens/Compose/Compose.cs b/osu.Game/Screens/Edit/Screens/Compose/Compose.cs index 41bdc25bcf..2603832437 100644 --- a/osu.Game/Screens/Edit/Screens/Compose/Compose.cs +++ b/osu.Game/Screens/Edit/Screens/Compose/Compose.cs @@ -70,7 +70,7 @@ namespace osu.Game.Screens.Edit.Screens.Compose Padding = new MarginPadding { Right = 5 }, Child = timeline = new ScrollableTimeline { RelativeSizeAxes = Axes.Both } }, - new DrawableBeatDivisor { RelativeSizeAxes = Axes.Both } + new DrawableBeatDivisor(beatDivisor) { RelativeSizeAxes = Axes.Both } }, }, ColumnDimensions = new[] diff --git a/osu.Game/Screens/Edit/Screens/Compose/DrawableBeatDivisor.cs b/osu.Game/Screens/Edit/Screens/Compose/DrawableBeatDivisor.cs index 1a4ab05254..08221009cc 100644 --- a/osu.Game/Screens/Edit/Screens/Compose/DrawableBeatDivisor.cs +++ b/osu.Game/Screens/Edit/Screens/Compose/DrawableBeatDivisor.cs @@ -19,14 +19,17 @@ namespace osu.Game.Screens.Edit.Screens.Compose { private static readonly int[] available_divisors = { 1, 2, 3, 4, 6, 8, 12, 16 }; - private readonly Bindable beatDivisor = new Bindable(1); + private readonly BindableBeatDivisor beatDivisor = new BindableBeatDivisor(); private int currentDivisorIndex; - [BackgroundDependencyLoader] - private void load(OsuColour colours, BindableBeatDivisor beatDivisor) + public DrawableBeatDivisor(BindableBeatDivisor beatDivisor) { this.beatDivisor.BindTo(beatDivisor); + } + [BackgroundDependencyLoader] + private void load(OsuColour colours) + { Masking = true; CornerRadius = 5; @@ -45,7 +48,7 @@ namespace osu.Game.Screens.Edit.Screens.Compose { new Drawable[] { - new TickContainer(1, 2, 3, 4, 6, 8, 12, 16) + new TickContainer(beatDivisor, 1, 2, 3, 4, 6, 8, 12, 16) { RelativeSizeAxes = Axes.Both, Padding = new MarginPadding { Horizontal = 5 } @@ -79,7 +82,7 @@ namespace osu.Game.Screens.Edit.Screens.Compose Icon = FontAwesome.fa_chevron_left, Action = selectPrevious }, - new DivisorText(), + new DivisorText(beatDivisor), new DivisorButton { Icon = FontAwesome.fa_chevron_right, @@ -135,17 +138,17 @@ namespace osu.Game.Screens.Edit.Screens.Compose { private readonly Bindable beatDivisor = new Bindable(); - public DivisorText() + public DivisorText(BindableBeatDivisor beatDivisor) { + this.beatDivisor.BindTo(beatDivisor); + Anchor = Anchor.Centre; Origin = Anchor.Centre; } [BackgroundDependencyLoader] - private void load(OsuColour colours, BindableBeatDivisor beatDivisor) + private void load(OsuColour colours) { - this.beatDivisor.BindTo(beatDivisor); - Colour = colours.BlueLighter; } @@ -187,27 +190,24 @@ namespace osu.Game.Screens.Edit.Screens.Compose { private readonly Bindable beatDivisor = new Bindable(); - public new MarginPadding Padding - { - set => base.Padding = value; - } + public new MarginPadding Padding { set => base.Padding = value; } private EquilateralTriangle marker; private readonly int[] availableDivisors; private readonly float tickSpacing; - public TickContainer(params int[] divisors) + public TickContainer(BindableBeatDivisor beatDivisor, params int[] divisors) { + this.beatDivisor.BindTo(beatDivisor); + availableDivisors = divisors; tickSpacing = 1f / (availableDivisors.Length + 1); } [BackgroundDependencyLoader] - private void load(OsuColour colours, BindableBeatDivisor beatDivisor) + private void load(OsuColour colours) { - this.beatDivisor.BindTo(beatDivisor); - InternalChild = marker = new EquilateralTriangle { Anchor = Anchor.BottomLeft, From 786e6242e166d5a9651edb51e541ccdc79157506 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Tue, 20 Mar 2018 14:01:06 +0900 Subject: [PATCH 473/544] Make bdl beat divisor nullable --- osu.Game.Tests/Visual/TestCaseEditorSelectionLayer.cs | 2 -- osu.Game/Rulesets/Edit/HitObjectComposer.cs | 11 +++++++---- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/osu.Game.Tests/Visual/TestCaseEditorSelectionLayer.cs b/osu.Game.Tests/Visual/TestCaseEditorSelectionLayer.cs index 62289ea7cd..bbbfef477a 100644 --- a/osu.Game.Tests/Visual/TestCaseEditorSelectionLayer.cs +++ b/osu.Game.Tests/Visual/TestCaseEditorSelectionLayer.cs @@ -14,7 +14,6 @@ using osu.Game.Rulesets.Osu; using osu.Game.Rulesets.Osu.Edit; using osu.Game.Rulesets.Osu.Edit.Layers.Selection.Overlays; using osu.Game.Rulesets.Osu.Objects; -using osu.Game.Screens.Edit.Screens.Compose; using osu.Game.Screens.Edit.Screens.Compose.Layers; using osu.Game.Tests.Beatmaps; @@ -69,7 +68,6 @@ namespace osu.Game.Tests.Visual var clock = new DecoupleableInterpolatingFramedClock { IsCoupled = false }; dependencies.CacheAs(clock); dependencies.CacheAs(clock); - dependencies.Cache(new BindableBeatDivisor()); Child = new OsuHitObjectComposer(new OsuRuleset()); } diff --git a/osu.Game/Rulesets/Edit/HitObjectComposer.cs b/osu.Game/Rulesets/Edit/HitObjectComposer.cs index 7ab9ff9164..c076b53f51 100644 --- a/osu.Game/Rulesets/Edit/HitObjectComposer.cs +++ b/osu.Game/Rulesets/Edit/HitObjectComposer.cs @@ -4,6 +4,7 @@ using System; using System.Collections.Generic; using System.Linq; +using JetBrains.Annotations; using osu.Framework.Allocation; using osu.Framework.Configuration; using osu.Framework.Graphics; @@ -32,7 +33,7 @@ namespace osu.Game.Rulesets.Edit private readonly List layerContainers = new List(); private readonly Bindable beatmap = new Bindable(); - private readonly Bindable beatDivisor = new Bindable(); + private readonly BindableBeatDivisor beatDivisor = new BindableBeatDivisor(); private IAdjustableClock adjustableClock; @@ -43,11 +44,13 @@ namespace osu.Game.Rulesets.Edit RelativeSizeAxes = Axes.Both; } - [BackgroundDependencyLoader] - private void load(OsuGameBase osuGame, IAdjustableClock adjustableClock, IFrameBasedClock framedClock, BindableBeatDivisor beatDivisor) + [BackgroundDependencyLoader(true)] + private void load([NotNull] OsuGameBase osuGame, [NotNull] IAdjustableClock adjustableClock, [NotNull] IFrameBasedClock framedClock, [CanBeNull] BindableBeatDivisor beatDivisor) { this.adjustableClock = adjustableClock; - this.beatDivisor.BindTo(beatDivisor); + + if (beatDivisor != null) + this.beatDivisor.BindTo(beatDivisor); beatmap.BindTo(osuGame.Beatmap); From cb3d0db555d73fe665421ab21f36dc7ae0011da8 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 15 Mar 2018 15:58:04 +0900 Subject: [PATCH 474/544] Move combo colours completely out of HitObjects --- .../Beatmaps/CatchBeatmapProcessor.cs | 2 +- .../Objects/BananaShower.cs | 15 ---------- .../Objects/CatchHitObject.cs | 9 +++--- .../Objects/Drawable/DrawableDroplet.cs | 17 +++++++++-- .../Objects/Drawable/DrawableFruit.cs | 30 ++++++++++++++++++- .../Objects/Drawable/DrawableJuiceStream.cs | 1 - .../Objects/JuiceStream.cs | 4 --- .../Tests/TestCaseFruitObjects.cs | 30 ------------------- osu.Game.Rulesets.Catch/UI/CatcherArea.cs | 1 - .../Objects/Drawables/DrawableHoldNote.cs | 28 +++++++---------- .../Drawables/DrawableManiaHitObject.cs | 12 -------- .../Objects/Drawables/DrawableNote.cs | 9 ++---- .../Objects/Drawables/DrawableHitCircle.cs | 29 +++++++++++------- .../Objects/Drawables/DrawableOsuHitObject.cs | 1 - .../Objects/Drawables/DrawableSlider.cs | 14 +++++++-- .../Objects/Drawables/Pieces/SliderBody.cs | 2 ++ osu.Game.Rulesets.Osu/Objects/OsuHitObject.cs | 10 ++++--- osu.Game.Rulesets.Osu/Objects/Slider.cs | 10 +++---- .../Tests/TestCaseHitCircle.cs | 2 -- osu.Game.Rulesets.Osu/Tests/TestCaseSlider.cs | 6 ---- .../Objects/Drawables/DrawableDrumRoll.cs | 19 ++++++------ 21 files changed, 115 insertions(+), 136 deletions(-) diff --git a/osu.Game.Rulesets.Catch/Beatmaps/CatchBeatmapProcessor.cs b/osu.Game.Rulesets.Catch/Beatmaps/CatchBeatmapProcessor.cs index 0cdc1694f4..924a52a858 100644 --- a/osu.Game.Rulesets.Catch/Beatmaps/CatchBeatmapProcessor.cs +++ b/osu.Game.Rulesets.Catch/Beatmaps/CatchBeatmapProcessor.cs @@ -35,7 +35,7 @@ namespace osu.Game.Rulesets.Catch.Beatmaps } obj.IndexInBeatmap = index++; - obj.ComboColour = beatmap.ComboColours[colourIndex]; + obj.AccentColour = beatmap.ComboColours[colourIndex]; lastObj = obj; } diff --git a/osu.Game.Rulesets.Catch/Objects/BananaShower.cs b/osu.Game.Rulesets.Catch/Objects/BananaShower.cs index 89bd73f8fb..487345019b 100644 --- a/osu.Game.Rulesets.Catch/Objects/BananaShower.cs +++ b/osu.Game.Rulesets.Catch/Objects/BananaShower.cs @@ -3,7 +3,6 @@ using osu.Framework.MathUtils; using osu.Game.Rulesets.Objects.Types; -using OpenTK.Graphics; namespace osu.Game.Rulesets.Catch.Objects { @@ -32,25 +31,11 @@ namespace osu.Game.Rulesets.Catch.Objects AddNested(new Banana { Samples = Samples, - ComboColour = getNextComboColour(), StartTime = i, X = RNG.NextSingle() }); } - private Color4 getNextComboColour() - { - switch (RNG.Next(0, 3)) - { - default: - return new Color4(255, 240, 0, 255); - case 1: - return new Color4(255, 192, 0, 255); - case 2: - return new Color4(214, 221, 28, 255); - } - } - public double EndTime => StartTime + Duration; public double Duration { get; set; } diff --git a/osu.Game.Rulesets.Catch/Objects/CatchHitObject.cs b/osu.Game.Rulesets.Catch/Objects/CatchHitObject.cs index 559bf47842..a6ab18bbf7 100644 --- a/osu.Game.Rulesets.Catch/Objects/CatchHitObject.cs +++ b/osu.Game.Rulesets.Catch/Objects/CatchHitObject.cs @@ -5,24 +5,25 @@ using osu.Game.Beatmaps; using osu.Game.Beatmaps.ControlPoints; using osu.Game.Rulesets.Objects; using osu.Game.Rulesets.Objects.Types; -using OpenTK.Graphics; namespace osu.Game.Rulesets.Catch.Objects { - public abstract class CatchHitObject : HitObject, IHasXPosition, IHasCombo + public abstract class CatchHitObject : HitObject, IHasXPosition, IHasComboIndex { public const double OBJECT_RADIUS = 44; public float X { get; set; } - public Color4 ComboColour { get; set; } - public int IndexInBeatmap { get; set; } public virtual FruitVisualRepresentation VisualRepresentation => (FruitVisualRepresentation)(IndexInBeatmap % 4); public virtual bool NewCombo { get; set; } + public int IndexInCurrentCombo { get; set; } + + public int ComboIndex { get; set; } + /// /// The next fruit starts a new combo. Used for explodey. /// diff --git a/osu.Game.Rulesets.Catch/Objects/Drawable/DrawableDroplet.cs b/osu.Game.Rulesets.Catch/Objects/Drawable/DrawableDroplet.cs index f05f51052d..719cf0a110 100644 --- a/osu.Game.Rulesets.Catch/Objects/Drawable/DrawableDroplet.cs +++ b/osu.Game.Rulesets.Catch/Objects/Drawable/DrawableDroplet.cs @@ -5,28 +5,39 @@ using osu.Framework.Allocation; using osu.Framework.Graphics; using osu.Game.Rulesets.Catch.Objects.Drawable.Pieces; using OpenTK; +using OpenTK.Graphics; namespace osu.Game.Rulesets.Catch.Objects.Drawable { public class DrawableDroplet : PalpableCatchHitObject { + private Pulp pulp; + public DrawableDroplet(Droplet h) : base(h) { Origin = Anchor.Centre; Size = new Vector2((float)CatchHitObject.OBJECT_RADIUS) / 4; - AccentColour = h.ComboColour; Masking = false; } [BackgroundDependencyLoader] private void load() { - InternalChild = new Pulp + InternalChild = pulp = new Pulp { - AccentColour = AccentColour, Size = Size }; } + + public override Color4 AccentColour + { + get { return base.AccentColour; } + set + { + base.AccentColour = value; + pulp.AccentColour = AccentColour; + } + } } } diff --git a/osu.Game.Rulesets.Catch/Objects/Drawable/DrawableFruit.cs b/osu.Game.Rulesets.Catch/Objects/Drawable/DrawableFruit.cs index dcad82130e..03c2444d8c 100644 --- a/osu.Game.Rulesets.Catch/Objects/Drawable/DrawableFruit.cs +++ b/osu.Game.Rulesets.Catch/Objects/Drawable/DrawableFruit.cs @@ -24,7 +24,6 @@ namespace osu.Game.Rulesets.Catch.Objects.Drawable Origin = Anchor.Centre; Size = new Vector2((float)CatchHitObject.OBJECT_RADIUS); - AccentColour = HitObject.ComboColour; Masking = false; Rotation = (float)(RNG.NextDouble() - 0.5f) * 40; @@ -33,6 +32,9 @@ namespace osu.Game.Rulesets.Catch.Objects.Drawable [BackgroundDependencyLoader] private void load() { + // todo: this should come from the skin. + AccentColour = colourForRrepesentation(HitObject.VisualRepresentation); + InternalChildren = new[] { createPulp(HitObject.VisualRepresentation), @@ -273,5 +275,31 @@ namespace osu.Game.Rulesets.Catch.Objects.Drawable border.Alpha = (float)MathHelper.Clamp((HitObject.StartTime - Time.Current) / 500, 0, 1); } + + private Color4 colourForRrepesentation(FruitVisualRepresentation representation) + { + switch (representation) + { + default: + case FruitVisualRepresentation.Pear: + return new Color4(17, 136, 170, 255); + case FruitVisualRepresentation.Grape: + return new Color4(204, 102, 0, 255); + case FruitVisualRepresentation.Raspberry: + return new Color4(121, 9, 13, 255); + case FruitVisualRepresentation.Pineapple: + return new Color4(102, 136, 0, 255); + case FruitVisualRepresentation.Banana: + switch (RNG.Next(0, 3)) + { + default: + return new Color4(255, 240, 0, 255); + case 1: + return new Color4(255, 192, 0, 255); + case 2: + return new Color4(214, 221, 28, 255); + } + } + } } } diff --git a/osu.Game.Rulesets.Catch/Objects/Drawable/DrawableJuiceStream.cs b/osu.Game.Rulesets.Catch/Objects/Drawable/DrawableJuiceStream.cs index 0a2763cbea..b3532e2473 100644 --- a/osu.Game.Rulesets.Catch/Objects/Drawable/DrawableJuiceStream.cs +++ b/osu.Game.Rulesets.Catch/Objects/Drawable/DrawableJuiceStream.cs @@ -33,7 +33,6 @@ namespace osu.Game.Rulesets.Catch.Objects.Drawable var catchObject = (DrawableCatchHitObject)h; catchObject.CheckPosition = o => CheckPosition?.Invoke(o) ?? false; - catchObject.AccentColour = HitObject.ComboColour; dropletContainer.Add(h); base.AddNested(h); diff --git a/osu.Game.Rulesets.Catch/Objects/JuiceStream.cs b/osu.Game.Rulesets.Catch/Objects/JuiceStream.cs index a3e5aba2db..1e4051c5aa 100644 --- a/osu.Game.Rulesets.Catch/Objects/JuiceStream.cs +++ b/osu.Game.Rulesets.Catch/Objects/JuiceStream.cs @@ -60,7 +60,6 @@ namespace osu.Game.Rulesets.Catch.Objects AddNested(new Fruit { Samples = Samples, - ComboColour = ComboColour, StartTime = StartTime, X = X }); @@ -82,7 +81,6 @@ namespace osu.Game.Rulesets.Catch.Objects AddNested(new Droplet { StartTime = lastTickTime, - ComboColour = ComboColour, X = X + Curve.PositionAt(distanceProgress).X / CatchPlayfield.BASE_WIDTH, Samples = new List(Samples.Select(s => new SampleInfo { @@ -104,7 +102,6 @@ namespace osu.Game.Rulesets.Catch.Objects AddNested(new TinyDroplet { StartTime = spanStartTime + t, - ComboColour = ComboColour, X = X + Curve.PositionAt(progress).X / CatchPlayfield.BASE_WIDTH, Samples = new List(Samples.Select(s => new SampleInfo { @@ -118,7 +115,6 @@ namespace osu.Game.Rulesets.Catch.Objects AddNested(new Fruit { Samples = Samples, - ComboColour = ComboColour, StartTime = spanStartTime + spanDuration, X = X + Curve.PositionAt(reversed ? 0 : 1).X / CatchPlayfield.BASE_WIDTH }); diff --git a/osu.Game.Rulesets.Catch/Tests/TestCaseFruitObjects.cs b/osu.Game.Rulesets.Catch/Tests/TestCaseFruitObjects.cs index 16266196e7..595ca6cb24 100644 --- a/osu.Game.Rulesets.Catch/Tests/TestCaseFruitObjects.cs +++ b/osu.Game.Rulesets.Catch/Tests/TestCaseFruitObjects.cs @@ -6,13 +6,11 @@ using System.Collections.Generic; using NUnit.Framework; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; -using osu.Framework.MathUtils; using osu.Game.Rulesets.Catch.Objects; using osu.Game.Rulesets.Catch.Objects.Drawable; using osu.Game.Rulesets.Catch.Objects.Drawable.Pieces; using osu.Game.Tests.Visual; using OpenTK; -using OpenTK.Graphics; namespace osu.Game.Rulesets.Catch.Tests { @@ -62,8 +60,6 @@ namespace osu.Game.Rulesets.Catch.Tests Scale = 1.5f, }; - fruit.ComboColour = colourForRrepesentation(fruit.VisualRepresentation); - return new DrawableFruit(fruit) { Anchor = Anchor.Centre, @@ -74,31 +70,5 @@ namespace osu.Game.Rulesets.Catch.Tests LifetimeEnd = double.PositiveInfinity, }; } - - private Color4 colourForRrepesentation(FruitVisualRepresentation representation) - { - switch (representation) - { - default: - case FruitVisualRepresentation.Pear: - return new Color4(17, 136, 170, 255); - case FruitVisualRepresentation.Grape: - return new Color4(204, 102, 0, 255); - case FruitVisualRepresentation.Raspberry: - return new Color4(121, 9, 13, 255); - case FruitVisualRepresentation.Pineapple: - return new Color4(102, 136, 0, 255); - case FruitVisualRepresentation.Banana: - switch (RNG.Next(0, 3)) - { - default: - return new Color4(255, 240, 0, 255); - case 1: - return new Color4(255, 192, 0, 255); - case 2: - return new Color4(214, 221, 28, 255); - } - } - } } } diff --git a/osu.Game.Rulesets.Catch/UI/CatcherArea.cs b/osu.Game.Rulesets.Catch/UI/CatcherArea.cs index 7c548f70d4..bf2f9db4a8 100644 --- a/osu.Game.Rulesets.Catch/UI/CatcherArea.cs +++ b/osu.Game.Rulesets.Catch/UI/CatcherArea.cs @@ -54,7 +54,6 @@ namespace osu.Game.Rulesets.Catch.UI if (caughtFruit == null) return; - caughtFruit.AccentColour = fruit.AccentColour; caughtFruit.RelativePositionAxes = Axes.None; caughtFruit.Position = new Vector2(MovableCatcher.ToLocalSpace(fruit.ScreenSpaceDrawQuad.Centre).X - MovableCatcher.DrawSize.X / 2, 0); diff --git a/osu.Game.Rulesets.Mania/Objects/Drawables/DrawableHoldNote.cs b/osu.Game.Rulesets.Mania/Objects/Drawables/DrawableHoldNote.cs index 6eb34c7005..c3d6a69a72 100644 --- a/osu.Game.Rulesets.Mania/Objects/Drawables/DrawableHoldNote.cs +++ b/osu.Game.Rulesets.Mania/Objects/Drawables/DrawableHoldNote.cs @@ -8,7 +8,6 @@ using osu.Game.Rulesets.Mania.Objects.Drawables.Pieces; using OpenTK.Graphics; using osu.Framework.Graphics.Containers; using osu.Game.Rulesets.Mania.Judgements; -using osu.Framework.Extensions.IEnumerableExtensions; using osu.Framework.Input.Bindings; using osu.Game.Rulesets.Scoring; @@ -24,7 +23,6 @@ namespace osu.Game.Rulesets.Mania.Objects.Drawables private readonly GlowPiece glowPiece; private readonly BodyPiece bodyPiece; - private readonly Container tickContainer; private readonly Container fullHeightContainer; /// @@ -40,6 +38,7 @@ namespace osu.Game.Rulesets.Mania.Objects.Drawables public DrawableHoldNote(HoldNote hitObject, ManiaAction action) : base(hitObject, action) { + Container tickContainer; RelativeSizeAxes = Axes.X; InternalChildren = new Drawable[] @@ -57,7 +56,14 @@ namespace osu.Game.Rulesets.Mania.Objects.Drawables Origin = Anchor.TopCentre, RelativeSizeAxes = Axes.X, }, - tickContainer = new Container { RelativeSizeAxes = Axes.Both }, + tickContainer = new Container + { + RelativeSizeAxes = Axes.Both, + ChildrenEnumerable = HitObject.NestedHitObjects.OfType().Select(tick => new DrawableHoldNoteTick(tick) + { + HoldStartTime = () => holdStartTime + }) + }, head = new DrawableHeadNote(this, action) { Anchor = Anchor.TopCentre, @@ -70,16 +76,8 @@ namespace osu.Game.Rulesets.Mania.Objects.Drawables } }; - foreach (var tick in HitObject.NestedHitObjects.OfType()) - { - var drawableTick = new DrawableHoldNoteTick(tick) - { - HoldStartTime = () => holdStartTime - }; - - tickContainer.Add(drawableTick); - AddNested(drawableTick); - } + foreach (var tick in tickContainer) + AddNested(tick); AddNested(head); AddNested(tail); @@ -90,12 +88,8 @@ namespace osu.Game.Rulesets.Mania.Objects.Drawables get { return base.AccentColour; } set { - if (base.AccentColour == value) - return; base.AccentColour = value; - tickContainer.Children.ForEach(t => t.AccentColour = value); - glowPiece.AccentColour = value; bodyPiece.AccentColour = value; head.AccentColour = value; diff --git a/osu.Game.Rulesets.Mania/Objects/Drawables/DrawableManiaHitObject.cs b/osu.Game.Rulesets.Mania/Objects/Drawables/DrawableManiaHitObject.cs index 0a1624b464..3aec8d25f9 100644 --- a/osu.Game.Rulesets.Mania/Objects/Drawables/DrawableManiaHitObject.cs +++ b/osu.Game.Rulesets.Mania/Objects/Drawables/DrawableManiaHitObject.cs @@ -2,7 +2,6 @@ // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using osu.Framework.Graphics; -using OpenTK.Graphics; using osu.Game.Rulesets.Objects.Drawables; namespace osu.Game.Rulesets.Mania.Objects.Drawables @@ -28,16 +27,5 @@ namespace osu.Game.Rulesets.Mania.Objects.Drawables if (action != null) Action = action.Value; } - - public override Color4 AccentColour - { - get { return base.AccentColour; } - set - { - if (base.AccentColour == value) - return; - base.AccentColour = value; - } - } } } diff --git a/osu.Game.Rulesets.Mania/Objects/Drawables/DrawableNote.cs b/osu.Game.Rulesets.Mania/Objects/Drawables/DrawableNote.cs index c8aa4588a8..c171325fb2 100644 --- a/osu.Game.Rulesets.Mania/Objects/Drawables/DrawableNote.cs +++ b/osu.Game.Rulesets.Mania/Objects/Drawables/DrawableNote.cs @@ -48,13 +48,10 @@ namespace osu.Game.Rulesets.Mania.Objects.Drawables get { return base.AccentColour; } set { - if (base.AccentColour == value) - return; base.AccentColour = value; - - laneGlowPiece.AccentColour = value; - GlowPiece.AccentColour = value; - headPiece.AccentColour = value; + laneGlowPiece.AccentColour = AccentColour; + GlowPiece.AccentColour = AccentColour; + headPiece.AccentColour = AccentColour; } } diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableHitCircle.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableHitCircle.cs index 1f94f49598..9066a9ef92 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableHitCircle.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableHitCircle.cs @@ -8,6 +8,7 @@ using osu.Game.Rulesets.Osu.Objects.Drawables.Pieces; using OpenTK; using osu.Game.Rulesets.Osu.Judgements; using osu.Game.Rulesets.Scoring; +using OpenTK.Graphics; namespace osu.Game.Rulesets.Osu.Objects.Drawables { @@ -21,7 +22,8 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables private readonly NumberPiece number; private readonly GlowPiece glow; - public DrawableHitCircle(HitCircle h) : base(h) + public DrawableHitCircle(HitCircle h) + : base(h) { Origin = Anchor.Centre; @@ -30,13 +32,9 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables InternalChildren = new Drawable[] { - glow = new GlowPiece - { - Colour = AccentColour - }, + glow = new GlowPiece(), circle = new CirclePiece { - Colour = AccentColour, Hit = () => { if (AllJudged) @@ -52,15 +50,11 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables }, ring = new RingPiece(), flash = new FlashPiece(), - explode = new ExplodePiece - { - Colour = AccentColour, - }, + explode = new ExplodePiece(), ApproachCircle = new ApproachCircle { Alpha = 0, Scale = new Vector2(4), - Colour = AccentColour, } }; @@ -70,6 +64,19 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables HitObject.PositionChanged += _ => Position = HitObject.StackedPosition; } + public override Color4 AccentColour + { + get { return base.AccentColour; } + set + { + base.AccentColour = value; + explode.Colour = AccentColour; + glow.Colour = AccentColour; + circle.Colour = AccentColour; + ApproachCircle.Colour = AccentColour; + } + } + protected override void CheckForJudgements(bool userTriggered, double timeOffset) { if (!userTriggered) diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableOsuHitObject.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableOsuHitObject.cs index c8e42fa44f..2e59e2dc60 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableOsuHitObject.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableOsuHitObject.cs @@ -15,7 +15,6 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables protected DrawableOsuHitObject(OsuHitObject hitObject) : base(hitObject) { - AccentColour = HitObject.ComboColour; Alpha = 0; } diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs index 9c2d3f5e07..3872821b96 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableSlider.cs @@ -13,6 +13,7 @@ using osu.Game.Rulesets.Osu.Judgements; using osu.Framework.Graphics.Primitives; using osu.Game.Configuration; using osu.Game.Rulesets.Scoring; +using OpenTK.Graphics; namespace osu.Game.Rulesets.Osu.Objects.Drawables { @@ -41,7 +42,6 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables { Body = new SliderBody(s) { - AccentColour = AccentColour, PathWidth = s.Scale * 64, }, ticks = new Container { RelativeSizeAxes = Axes.Both }, @@ -50,7 +50,6 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables { BypassAutoSizeAxes = Axes.Both, Scale = new Vector2(s.Scale), - AccentColour = AccentColour, AlwaysPresent = true, Alpha = 0 }, @@ -87,6 +86,17 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables HitObject.PositionChanged += _ => Position = HitObject.StackedPosition; } + public override Color4 AccentColour + { + get { return base.AccentColour; } + set + { + base.AccentColour = value; + Body.AccentColour = AccentColour; + Ball.AccentColour = AccentColour; + } + } + [BackgroundDependencyLoader] private void load(OsuConfigManager config) { diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/SliderBody.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/SliderBody.cs index 8c0eb7ff7d..26186a0049 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/SliderBody.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/SliderBody.cs @@ -173,6 +173,8 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces texture.SetData(upload); path.Texture = texture; + + container.ForceRedraw(); } private void computeSize() diff --git a/osu.Game.Rulesets.Osu/Objects/OsuHitObject.cs b/osu.Game.Rulesets.Osu/Objects/OsuHitObject.cs index d9aed23414..5d1908fa6e 100644 --- a/osu.Game.Rulesets.Osu/Objects/OsuHitObject.cs +++ b/osu.Game.Rulesets.Osu/Objects/OsuHitObject.cs @@ -6,13 +6,11 @@ using osu.Game.Beatmaps; using osu.Game.Rulesets.Objects; using OpenTK; using osu.Game.Rulesets.Objects.Types; -using OpenTK.Graphics; using osu.Game.Beatmaps.ControlPoints; -using osu.Game.Rulesets.Edit.Types; namespace osu.Game.Rulesets.Osu.Objects { - public abstract class OsuHitObject : HitObject, IHasCombo, IHasEditablePosition + public abstract class OsuHitObject : HitObject, IHasComboIndex, IHasPosition { public const double OBJECT_RADIUS = 64; @@ -53,10 +51,14 @@ namespace osu.Game.Rulesets.Osu.Objects public float Scale { get; set; } = 1; - public Color4 ComboColour { get; set; } = Color4.Gray; public virtual bool NewCombo { get; set; } + public int IndexInCurrentCombo { get; set; } + public int ComboIndex { get; set; } + + public bool LastInCombo { get; set; } + protected override void ApplyDefaultsToSelf(ControlPointInfo controlPointInfo, BeatmapDifficulty difficulty) { base.ApplyDefaultsToSelf(controlPointInfo, difficulty); diff --git a/osu.Game.Rulesets.Osu/Objects/Slider.cs b/osu.Game.Rulesets.Osu/Objects/Slider.cs index a633e3957e..469c4ddcb4 100644 --- a/osu.Game.Rulesets.Osu/Objects/Slider.cs +++ b/osu.Game.Rulesets.Osu/Objects/Slider.cs @@ -99,10 +99,10 @@ namespace osu.Game.Rulesets.Osu.Objects { StartTime = StartTime, Position = Position, - IndexInCurrentCombo = IndexInCurrentCombo, - ComboColour = ComboColour, Samples = Samples, - SampleControlPoint = SampleControlPoint + SampleControlPoint = SampleControlPoint, + IndexInCurrentCombo = IndexInCurrentCombo, + ComboIndex = ComboIndex, }; TailCircle = new SliderCircle(this) @@ -110,7 +110,7 @@ namespace osu.Game.Rulesets.Osu.Objects StartTime = EndTime, Position = EndPosition, IndexInCurrentCombo = IndexInCurrentCombo, - ComboColour = ComboColour + ComboIndex = ComboIndex, }; AddNested(HeadCircle); @@ -160,7 +160,6 @@ namespace osu.Game.Rulesets.Osu.Objects Position = Position + Curve.PositionAt(distanceProgress), StackHeight = StackHeight, Scale = Scale, - ComboColour = ComboColour, Samples = sampleList }); } @@ -179,7 +178,6 @@ namespace osu.Game.Rulesets.Osu.Objects Position = Position + Curve.PositionAt(repeat % 2), StackHeight = StackHeight, Scale = Scale, - ComboColour = ComboColour, Samples = new List(RepeatSamples[repeatIndex]) }); } diff --git a/osu.Game.Rulesets.Osu/Tests/TestCaseHitCircle.cs b/osu.Game.Rulesets.Osu/Tests/TestCaseHitCircle.cs index f40d9c05d1..b0cfa43f15 100644 --- a/osu.Game.Rulesets.Osu/Tests/TestCaseHitCircle.cs +++ b/osu.Game.Rulesets.Osu/Tests/TestCaseHitCircle.cs @@ -10,7 +10,6 @@ using osu.Game.Rulesets.Osu.Objects; using osu.Game.Rulesets.Osu.Objects.Drawables; using osu.Game.Tests.Visual; using OpenTK; -using OpenTK.Graphics; using osu.Game.Rulesets.Osu.Judgements; using System.Collections.Generic; using System; @@ -61,7 +60,6 @@ namespace osu.Game.Rulesets.Osu.Tests { StartTime = Time.Current + 1000 + timeOffset, Position = positionOffset.Value, - ComboColour = Color4.LightSeaGreen }; circle.ApplyDefaults(new ControlPointInfo(), new BeatmapDifficulty { CircleSize = circleSize }); diff --git a/osu.Game.Rulesets.Osu/Tests/TestCaseSlider.cs b/osu.Game.Rulesets.Osu/Tests/TestCaseSlider.cs index b68f59877b..e819d8fff5 100644 --- a/osu.Game.Rulesets.Osu/Tests/TestCaseSlider.cs +++ b/osu.Game.Rulesets.Osu/Tests/TestCaseSlider.cs @@ -117,7 +117,6 @@ namespace osu.Game.Rulesets.Osu.Tests { StartTime = Time.Current + 1000, Position = new Vector2(-(distance / 2), 0), - ComboColour = Color4.LightSeaGreen, ControlPoints = new List { Vector2.Zero, @@ -138,7 +137,6 @@ namespace osu.Game.Rulesets.Osu.Tests { StartTime = Time.Current + 1000, Position = new Vector2(-200, 0), - ComboColour = Color4.LightSeaGreen, ControlPoints = new List { Vector2.Zero, @@ -162,7 +160,6 @@ namespace osu.Game.Rulesets.Osu.Tests CurveType = CurveType.Linear, StartTime = Time.Current + 1000, Position = new Vector2(-200, 0), - ComboColour = Color4.LightSeaGreen, ControlPoints = new List { Vector2.Zero, @@ -189,7 +186,6 @@ namespace osu.Game.Rulesets.Osu.Tests CurveType = CurveType.Bezier, StartTime = Time.Current + 1000, Position = new Vector2(-200, 0), - ComboColour = Color4.LightSeaGreen, ControlPoints = new List { Vector2.Zero, @@ -215,7 +211,6 @@ namespace osu.Game.Rulesets.Osu.Tests CurveType = CurveType.Linear, StartTime = Time.Current + 1000, Position = new Vector2(0, 0), - ComboColour = Color4.LightSeaGreen, ControlPoints = new List { Vector2.Zero, @@ -245,7 +240,6 @@ namespace osu.Game.Rulesets.Osu.Tests { StartTime = Time.Current + 1000, Position = new Vector2(-100, 0), - ComboColour = Color4.LightSeaGreen, CurveType = CurveType.Catmull, ControlPoints = new List { diff --git a/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableDrumRoll.cs b/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableDrumRoll.cs index f98e6b936e..2bb2d478c3 100644 --- a/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableDrumRoll.cs +++ b/osu.Game.Rulesets.Taiko/Objects/Drawables/DrawableDrumRoll.cs @@ -20,11 +20,9 @@ namespace osu.Game.Rulesets.Taiko.Objects.Drawables public class DrawableDrumRoll : DrawableTaikoHitObject { /// - /// Number of rolling hits required to reach the dark/final accent colour. + /// Number of rolling hits required to reach the dark/final colour. /// - private const int rolling_hits_for_dark_accent = 5; - - private Color4 accentDarkColour; + private const int rolling_hits_for_engaged_colour = 5; /// /// Rolling number of tick hits. This increases for hits and decreases for misses. @@ -53,11 +51,14 @@ namespace osu.Game.Rulesets.Taiko.Objects.Drawables public override bool OnPressed(TaikoAction action) => false; + private Color4 colourIdle; + private Color4 colourEngaged; + [BackgroundDependencyLoader] private void load(OsuColour colours) { - MainPiece.AccentColour = AccentColour = colours.YellowDark; - accentDarkColour = colours.YellowDarker; + MainPiece.AccentColour = colourIdle = colours.YellowDark; + colourEngaged = colours.YellowDarker; } private void onTickJudgement(DrawableHitObject obj, Judgement judgement) @@ -67,10 +68,10 @@ namespace osu.Game.Rulesets.Taiko.Objects.Drawables else rollingHits--; - rollingHits = MathHelper.Clamp(rollingHits, 0, rolling_hits_for_dark_accent); + rollingHits = MathHelper.Clamp(rollingHits, 0, rolling_hits_for_engaged_colour); - Color4 newAccent = Interpolation.ValueAt((float)rollingHits / rolling_hits_for_dark_accent, AccentColour, accentDarkColour, 0, 1); - MainPiece.FadeAccent(newAccent, 100); + Color4 newColour = Interpolation.ValueAt((float)rollingHits / rolling_hits_for_engaged_colour, colourIdle, colourEngaged, 0, 1); + MainPiece.FadeAccent(newColour, 100); } protected override void CheckForJudgements(bool userTriggered, double timeOffset) From c38c26eacbac8b3c39fe68b8beb51fd60662d73c Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 20 Mar 2018 15:45:40 +0900 Subject: [PATCH 475/544] Move combo index processing to BeatmapProcessor --- .../Beatmaps/CatchBeatmapProcessor.cs | 22 +++------------ .../Beatmaps/OsuBeatmapProcessor.cs | 19 +------------ osu.Game/Beatmaps/BeatmapProcessor.cs | 27 ++++++++++++++++++- .../Rulesets/Objects/Types/IHasComboIndex.cs | 26 ++++++++++++++++++ osu.Game/osu.Game.csproj | 1 + 5 files changed, 57 insertions(+), 38 deletions(-) create mode 100644 osu.Game/Rulesets/Objects/Types/IHasComboIndex.cs diff --git a/osu.Game.Rulesets.Catch/Beatmaps/CatchBeatmapProcessor.cs b/osu.Game.Rulesets.Catch/Beatmaps/CatchBeatmapProcessor.cs index 924a52a858..1bebe9dae0 100644 --- a/osu.Game.Rulesets.Catch/Beatmaps/CatchBeatmapProcessor.cs +++ b/osu.Game.Rulesets.Catch/Beatmaps/CatchBeatmapProcessor.cs @@ -16,29 +16,13 @@ namespace osu.Game.Rulesets.Catch.Beatmaps { public override void PostProcess(Beatmap beatmap) { - if (beatmap.ComboColours.Count == 0) - return; - - int index = 0; - int colourIndex = 0; - - CatchHitObject lastObj = null; - initialiseHyperDash(beatmap.HitObjects); + base.PostProcess(beatmap); + + int index = 0; foreach (var obj in beatmap.HitObjects) - { - if (obj.NewCombo) - { - if (lastObj != null) lastObj.LastInCombo = true; - colourIndex = (colourIndex + 1) % beatmap.ComboColours.Count; - } - obj.IndexInBeatmap = index++; - obj.AccentColour = beatmap.ComboColours[colourIndex]; - - lastObj = obj; - } } private void initialiseHyperDash(List objects) diff --git a/osu.Game.Rulesets.Osu/Beatmaps/OsuBeatmapProcessor.cs b/osu.Game.Rulesets.Osu/Beatmaps/OsuBeatmapProcessor.cs index bfcdec9321..42b22a71ec 100644 --- a/osu.Game.Rulesets.Osu/Beatmaps/OsuBeatmapProcessor.cs +++ b/osu.Game.Rulesets.Osu/Beatmaps/OsuBeatmapProcessor.cs @@ -13,24 +13,7 @@ namespace osu.Game.Rulesets.Osu.Beatmaps public override void PostProcess(Beatmap beatmap) { applyStacking(beatmap); - - if (beatmap.ComboColours.Count == 0) - return; - - int comboIndex = 0; - int colourIndex = 0; - - foreach (var obj in beatmap.HitObjects) - { - if (obj.NewCombo) - { - comboIndex = 0; - colourIndex = (colourIndex + 1) % beatmap.ComboColours.Count; - } - - obj.IndexInCurrentCombo = comboIndex++; - obj.ComboColour = beatmap.ComboColours[colourIndex]; - } + base.PostProcess(beatmap); } private void applyStacking(Beatmap beatmap) diff --git a/osu.Game/Beatmaps/BeatmapProcessor.cs b/osu.Game/Beatmaps/BeatmapProcessor.cs index 9b528699ef..83b2867df7 100644 --- a/osu.Game/Beatmaps/BeatmapProcessor.cs +++ b/osu.Game/Beatmaps/BeatmapProcessor.cs @@ -1,7 +1,9 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using System.Linq; using osu.Game.Rulesets.Objects; +using osu.Game.Rulesets.Objects.Types; namespace osu.Game.Beatmaps { @@ -19,6 +21,29 @@ namespace osu.Game.Beatmaps /// /// /// The Beatmap to process. - public virtual void PostProcess(Beatmap beatmap) { } + public virtual void PostProcess(Beatmap beatmap) + { + IHasComboIndex lastObj = null; + + foreach (var obj in beatmap.HitObjects.OfType()) + { + if (obj.NewCombo) + { + obj.IndexInCurrentCombo = 0; + if (lastObj != null) + { + lastObj.LastInCombo = true; + obj.ComboIndex = lastObj.ComboIndex + 1; + } + } + else if (lastObj != null) + { + obj.IndexInCurrentCombo = lastObj.IndexInCurrentCombo + 1; + obj.ComboIndex = lastObj.ComboIndex; + } + + lastObj = obj; + } + } } } diff --git a/osu.Game/Rulesets/Objects/Types/IHasComboIndex.cs b/osu.Game/Rulesets/Objects/Types/IHasComboIndex.cs new file mode 100644 index 0000000000..68474a6e2c --- /dev/null +++ b/osu.Game/Rulesets/Objects/Types/IHasComboIndex.cs @@ -0,0 +1,26 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +namespace osu.Game.Rulesets.Objects.Types +{ + /// + /// A HitObject that is part of a combo and has extended information about its position relative to other combo objects. + /// + public interface IHasComboIndex : IHasCombo + { + /// + /// The offset of this hitobject in the current combo. + /// + int IndexInCurrentCombo { get; set; } + + /// + /// The offset of this hitobject in the current combo. + /// + int ComboIndex { get; set; } + + /// + /// Whether this is the last object in the current combo. + /// + bool LastInCombo { get; set; } + } +} diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index 091ec3f7ac..5ece1a18ac 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -374,6 +374,7 @@ + From dbcf755618fc2cd425b66f7ae784b652749f1bae Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 14 Mar 2018 20:45:04 +0900 Subject: [PATCH 476/544] Make Beatmaps parsable as skins --- .../Beatmaps/BeatmapManager_WorkingBeatmap.cs | 18 +++++++++++ osu.Game/Beatmaps/WorkingBeatmap.cs | 11 +++++++ osu.Game/Database/IHasFiles.cs | 2 ++ osu.Game/Skinning/BeatmapSkin.cs | 31 +++++++++++++++++++ osu.Game/Skinning/LegacySkin.cs | 27 +++++++++------- osu.Game/Skinning/Skin.cs | 27 +++++++++++++++- osu.Game/osu.Game.csproj | 1 + 7 files changed, 105 insertions(+), 12 deletions(-) create mode 100644 osu.Game/Skinning/BeatmapSkin.cs diff --git a/osu.Game/Beatmaps/BeatmapManager_WorkingBeatmap.cs b/osu.Game/Beatmaps/BeatmapManager_WorkingBeatmap.cs index fb11684309..d7d17c980c 100644 --- a/osu.Game/Beatmaps/BeatmapManager_WorkingBeatmap.cs +++ b/osu.Game/Beatmaps/BeatmapManager_WorkingBeatmap.cs @@ -10,6 +10,7 @@ using osu.Framework.IO.Stores; using osu.Framework.Logging; using osu.Game.Beatmaps.Formats; using osu.Game.Graphics.Textures; +using osu.Game.Skinning; using osu.Game.Storyboards; namespace osu.Game.Beatmaps @@ -100,6 +101,23 @@ namespace osu.Game.Beatmaps return storyboard; } + + protected override Skin GetSkin() + { + Skin skin; + try + { + // todo: this needs an AudioManager + skin = new BeatmapSkin(BeatmapInfo, store); + } + catch (Exception e) + { + Logger.Error(e, "Skin failed to load"); + skin = new DefaultSkin(); + } + + return skin; + } } } } diff --git a/osu.Game/Beatmaps/WorkingBeatmap.cs b/osu.Game/Beatmaps/WorkingBeatmap.cs index 8a2a7b01a1..5c0ad7685b 100644 --- a/osu.Game/Beatmaps/WorkingBeatmap.cs +++ b/osu.Game/Beatmaps/WorkingBeatmap.cs @@ -14,6 +14,7 @@ using osu.Framework.IO.File; using System.IO; using osu.Game.IO.Serialization; using System.Diagnostics; +using osu.Game.Skinning; namespace osu.Game.Beatmaps { @@ -40,6 +41,7 @@ namespace osu.Game.Beatmaps track = new AsyncLazy(populateTrack); waveform = new AsyncLazy(populateWaveform); storyboard = new AsyncLazy(populateStoryboard); + skin = new AsyncLazy(populateSkin); } /// @@ -56,6 +58,7 @@ namespace osu.Game.Beatmaps protected abstract Beatmap GetBeatmap(); protected abstract Texture GetBackground(); protected abstract Track GetTrack(); + protected virtual Skin GetSkin() => new DefaultSkin(); protected virtual Waveform GetWaveform() => new Waveform(); protected virtual Storyboard GetStoryboard() => new Storyboard { BeatmapInfo = BeatmapInfo }; @@ -109,6 +112,13 @@ namespace osu.Game.Beatmaps private Storyboard populateStoryboard() => GetStoryboard(); + public bool SkinLoaded => skin.IsResultAvailable; + public Skin Skin => skin.Value.Result; + public async Task GetSkinAsync() => await skin.Value; + private readonly AsyncLazy skin; + + private Skin populateSkin() => GetSkin(); + public void TransferTo(WorkingBeatmap other) { if (track.IsResultAvailable && Track != null && BeatmapInfo.AudioEquals(other.BeatmapInfo)) @@ -123,6 +133,7 @@ namespace osu.Game.Beatmaps if (BackgroundLoaded) Background?.Dispose(); if (WaveformLoaded) Waveform?.Dispose(); if (StoryboardLoaded) Storyboard?.Dispose(); + if (SkinLoaded) Skin?.Dispose(); } /// diff --git a/osu.Game/Database/IHasFiles.cs b/osu.Game/Database/IHasFiles.cs index deaf75360c..faf3f16dfe 100644 --- a/osu.Game/Database/IHasFiles.cs +++ b/osu.Game/Database/IHasFiles.cs @@ -10,6 +10,8 @@ namespace osu.Game.Database /// /// The model representing a file. public interface IHasFiles + where TFile : INamedFileInfo + { List Files { get; set; } } diff --git a/osu.Game/Skinning/BeatmapSkin.cs b/osu.Game/Skinning/BeatmapSkin.cs new file mode 100644 index 0000000000..beab2a42d7 --- /dev/null +++ b/osu.Game/Skinning/BeatmapSkin.cs @@ -0,0 +1,31 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using System.IO; +using osu.Framework.Graphics.Textures; +using osu.Framework.IO.Stores; +using osu.Game.Beatmaps; + +namespace osu.Game.Skinning +{ + public class BeatmapSkin : LegacySkin + { + public BeatmapSkin(BeatmapInfo beatmap, IResourceStore storage) + : base(new SkinInfo { Name = beatmap.ToString(), Creator = beatmap.Metadata.Author.ToString() }) + { + storage = new LegacySkinResourceStore(beatmap.BeatmapSet, storage); + + // todo: sample support + // samples = audioManager.GetSampleManager(storage); + + Textures = new TextureStore(new RawTextureLoaderStore(storage)); + + var decoder = new LegacySkinDecoder(); + + using (StreamReader reader = new StreamReader(storage.GetStream(beatmap.Path))) + { + Configuration = decoder.Decode(reader); + } + } + } +} diff --git a/osu.Game/Skinning/LegacySkin.cs b/osu.Game/Skinning/LegacySkin.cs index b531d791b0..bae0d5c997 100644 --- a/osu.Game/Skinning/LegacySkin.cs +++ b/osu.Game/Skinning/LegacySkin.cs @@ -10,24 +10,24 @@ using osu.Framework.Graphics; using osu.Framework.Graphics.Sprites; using osu.Framework.Graphics.Textures; using osu.Framework.IO.Stores; +using osu.Game.Database; namespace osu.Game.Skinning { public class LegacySkin : Skin { - private readonly TextureStore textures; + protected TextureStore Textures; private readonly SampleManager samples; public LegacySkin(SkinInfo skin, IResourceStore storage, AudioManager audioManager) - : base(skin) + : this(skin) { - storage = new LegacySkinResourceStore(skin, storage); + storage = new LegacySkinResourceStore(skin, storage); samples = audioManager.GetSampleManager(storage); - textures = new TextureStore(new RawTextureLoaderStore(storage)); + Textures = new TextureStore(new RawTextureLoaderStore(storage)); Stream stream = storage.GetStream("skin.ini"); - if (stream != null) using (StreamReader reader = new StreamReader(stream)) Configuration = new LegacySkinDecoder().Decode(reader); @@ -35,6 +35,10 @@ namespace osu.Game.Skinning Configuration = new SkinConfiguration(); } + protected LegacySkin(SkinInfo skin) : base(skin) + { + } + public override Drawable GetDrawableComponent(string componentName) { switch (componentName) @@ -53,7 +57,7 @@ namespace osu.Game.Skinning break; } - var texture = textures.Get(componentName); + var texture = Textures.Get(componentName); if (texture == null) return null; return new Sprite { Texture = texture }; @@ -61,9 +65,10 @@ namespace osu.Game.Skinning public override SampleChannel GetSample(string sampleName) => samples.Get(sampleName); - private class LegacySkinResourceStore : IResourceStore + protected class LegacySkinResourceStore : IResourceStore + where T : INamedFileInfo { - private readonly SkinInfo skin; + private readonly IHasFiles source; private readonly IResourceStore underlyingStore; private string getPathForFile(string filename) @@ -72,14 +77,14 @@ namespace osu.Game.Skinning string lastPiece = filename.Split('/').Last(); - var file = skin.Files.FirstOrDefault(f => + var file = source.Files.FirstOrDefault(f => string.Equals(hasExtension ? f.Filename : Path.GetFileNameWithoutExtension(f.Filename), lastPiece, StringComparison.InvariantCultureIgnoreCase)); return file?.FileInfo.StoragePath; } - public LegacySkinResourceStore(SkinInfo skin, IResourceStore underlyingStore) + public LegacySkinResourceStore(IHasFiles source, IResourceStore underlyingStore) { - this.skin = skin; + this.source = source; this.underlyingStore = underlyingStore; } diff --git a/osu.Game/Skinning/Skin.cs b/osu.Game/Skinning/Skin.cs index 7b4e894dfd..53bcf30b0e 100644 --- a/osu.Game/Skinning/Skin.cs +++ b/osu.Game/Skinning/Skin.cs @@ -1,12 +1,13 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using System; using osu.Framework.Audio.Sample; using osu.Framework.Graphics; namespace osu.Game.Skinning { - public abstract class Skin + public abstract class Skin : IDisposable { public readonly SkinInfo SkinInfo; @@ -20,5 +21,29 @@ namespace osu.Game.Skinning { SkinInfo = skin; } + + #region Disposal + + ~Skin() + { + Dispose(false); + } + + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + private bool isDisposed; + + protected virtual void Dispose(bool isDisposing) + { + if (isDisposed) + return; + isDisposed = true; + } + + #endregion } } diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index b325e52ed1..50c272e827 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -871,6 +871,7 @@ + From 9a0fc9e29aa14c86cb8c038e576b4e1e50e70cc2 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 15 Mar 2018 15:13:09 +0900 Subject: [PATCH 477/544] Move combo colours completely out of beatmap --- .../Beatmaps/CatchBeatmapProcessor.cs | 6 ------ .../Beatmaps/OsuBeatmapProcessor.cs | 6 ------ .../Formats/LegacyBeatmapDecoderTest.cs | 3 ++- .../Beatmaps/Formats/OsuJsonDecoderTest.cs | 19 ------------------- osu.Game/Beatmaps/Beatmap.cs | 13 +------------ osu.Game/Beatmaps/BeatmapConverter.cs | 1 - 6 files changed, 3 insertions(+), 45 deletions(-) diff --git a/osu.Game.Rulesets.Catch/Beatmaps/CatchBeatmapProcessor.cs b/osu.Game.Rulesets.Catch/Beatmaps/CatchBeatmapProcessor.cs index 0cdc1694f4..47acc1c926 100644 --- a/osu.Game.Rulesets.Catch/Beatmaps/CatchBeatmapProcessor.cs +++ b/osu.Game.Rulesets.Catch/Beatmaps/CatchBeatmapProcessor.cs @@ -16,11 +16,7 @@ namespace osu.Game.Rulesets.Catch.Beatmaps { public override void PostProcess(Beatmap beatmap) { - if (beatmap.ComboColours.Count == 0) - return; - int index = 0; - int colourIndex = 0; CatchHitObject lastObj = null; @@ -31,11 +27,9 @@ namespace osu.Game.Rulesets.Catch.Beatmaps if (obj.NewCombo) { if (lastObj != null) lastObj.LastInCombo = true; - colourIndex = (colourIndex + 1) % beatmap.ComboColours.Count; } obj.IndexInBeatmap = index++; - obj.ComboColour = beatmap.ComboColours[colourIndex]; lastObj = obj; } diff --git a/osu.Game.Rulesets.Osu/Beatmaps/OsuBeatmapProcessor.cs b/osu.Game.Rulesets.Osu/Beatmaps/OsuBeatmapProcessor.cs index bfcdec9321..5b72d1ac6e 100644 --- a/osu.Game.Rulesets.Osu/Beatmaps/OsuBeatmapProcessor.cs +++ b/osu.Game.Rulesets.Osu/Beatmaps/OsuBeatmapProcessor.cs @@ -14,22 +14,16 @@ namespace osu.Game.Rulesets.Osu.Beatmaps { applyStacking(beatmap); - if (beatmap.ComboColours.Count == 0) - return; - int comboIndex = 0; - int colourIndex = 0; foreach (var obj in beatmap.HitObjects) { if (obj.NewCombo) { comboIndex = 0; - colourIndex = (colourIndex + 1) % beatmap.ComboColours.Count; } obj.IndexInCurrentCombo = comboIndex++; - obj.ComboColour = beatmap.ComboColours[colourIndex]; } } diff --git a/osu.Game.Tests/Beatmaps/Formats/LegacyBeatmapDecoderTest.cs b/osu.Game.Tests/Beatmaps/Formats/LegacyBeatmapDecoderTest.cs index 2c46a124d8..bc878b599b 100644 --- a/osu.Game.Tests/Beatmaps/Formats/LegacyBeatmapDecoderTest.cs +++ b/osu.Game.Tests/Beatmaps/Formats/LegacyBeatmapDecoderTest.cs @@ -11,6 +11,7 @@ using osu.Game.Audio; using osu.Game.Rulesets.Objects.Types; using osu.Game.Beatmaps.Formats; using osu.Game.Beatmaps.Timing; +using osu.Game.Skinning; namespace osu.Game.Tests.Beatmaps.Formats { @@ -163,7 +164,7 @@ namespace osu.Game.Tests.Beatmaps.Formats [Test] public void TestDecodeBeatmapColors() { - var decoder = new LegacyBeatmapDecoder(); + var decoder = new LegacySkinDecoder(); using (var resStream = Resource.OpenResource("Soleily - Renatus (Gamu) [Insane].osu")) using (var stream = new StreamReader(resStream)) { diff --git a/osu.Game.Tests/Beatmaps/Formats/OsuJsonDecoderTest.cs b/osu.Game.Tests/Beatmaps/Formats/OsuJsonDecoderTest.cs index c36e825252..f37672b5cc 100644 --- a/osu.Game.Tests/Beatmaps/Formats/OsuJsonDecoderTest.cs +++ b/osu.Game.Tests/Beatmaps/Formats/OsuJsonDecoderTest.cs @@ -12,7 +12,6 @@ using osu.Game.IO.Serialization; using osu.Game.Rulesets.Objects.Types; using osu.Game.Tests.Resources; using OpenTK; -using OpenTK.Graphics; namespace osu.Game.Tests.Beatmaps.Formats { @@ -89,24 +88,6 @@ namespace osu.Game.Tests.Beatmaps.Formats Assert.AreEqual(2, difficulty.SliderTickRate); } - [Test] - public void TestDecodeColors() - { - var beatmap = decodeAsJson(normal); - Color4[] expected = - { - new Color4(142, 199, 255, 255), - new Color4(255, 128, 128, 255), - new Color4(128, 255, 255, 255), - new Color4(128, 255, 128, 255), - new Color4(255, 187, 255, 255), - new Color4(255, 177, 140, 255), - }; - Assert.AreEqual(expected.Length, beatmap.ComboColours.Count); - for (int i = 0; i < expected.Length; i++) - Assert.AreEqual(expected[i], beatmap.ComboColours[i]); - } - [Test] public void TestDecodeHitObjects() { diff --git a/osu.Game/Beatmaps/Beatmap.cs b/osu.Game/Beatmaps/Beatmap.cs index 93817b9b8f..60cf93fd91 100644 --- a/osu.Game/Beatmaps/Beatmap.cs +++ b/osu.Game/Beatmaps/Beatmap.cs @@ -1,7 +1,6 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE -using OpenTK.Graphics; using osu.Game.Beatmaps.Timing; using osu.Game.Rulesets.Objects; using System.Collections.Generic; @@ -9,7 +8,6 @@ using System.Linq; using osu.Game.Beatmaps.ControlPoints; using osu.Game.IO.Serialization; using Newtonsoft.Json; -using osu.Game.Beatmaps.Formats; using osu.Game.IO.Serialization.Converters; namespace osu.Game.Beatmaps @@ -17,21 +15,13 @@ namespace osu.Game.Beatmaps /// /// A Beatmap containing converted HitObjects. /// - public class Beatmap : IJsonSerializable, IHasComboColours + public class Beatmap : IJsonSerializable where T : HitObject { public BeatmapInfo BeatmapInfo = new BeatmapInfo(); public ControlPointInfo ControlPointInfo = new ControlPointInfo(); public List Breaks = new List(); - public List ComboColours { get; set; } = new List - { - new Color4(17, 136, 170, 255), - new Color4(102, 136, 0, 255), - new Color4(204, 102, 0, 255), - new Color4(121, 9, 13, 255) - }; - [JsonIgnore] public BeatmapMetadata Metadata => BeatmapInfo?.Metadata ?? BeatmapInfo?.BeatmapSet?.Metadata; @@ -56,7 +46,6 @@ namespace osu.Game.Beatmaps BeatmapInfo = original?.BeatmapInfo.DeepClone() ?? BeatmapInfo; ControlPointInfo = original?.ControlPointInfo ?? ControlPointInfo; Breaks = original?.Breaks ?? Breaks; - ComboColours = original?.ComboColours ?? ComboColours; HitObjects = original?.HitObjects ?? HitObjects; if (original == null && Metadata == null) diff --git a/osu.Game/Beatmaps/BeatmapConverter.cs b/osu.Game/Beatmaps/BeatmapConverter.cs index c35c5df89b..2003b845d9 100644 --- a/osu.Game/Beatmaps/BeatmapConverter.cs +++ b/osu.Game/Beatmaps/BeatmapConverter.cs @@ -57,7 +57,6 @@ namespace osu.Game.Beatmaps beatmap.ControlPointInfo = original.ControlPointInfo; beatmap.HitObjects = original.HitObjects.SelectMany(h => convert(h, original)).ToList(); beatmap.Breaks = original.Breaks; - beatmap.ComboColours = original.ComboColours; return beatmap; } From d1c2aa71d07f620221624c81ae84d932dc9edb34 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Fri, 16 Mar 2018 00:14:29 +0900 Subject: [PATCH 478/544] Add beatmap sample override support --- osu.Game.Tests/Visual/TestCasePlaySongSelect.cs | 2 +- osu.Game/Beatmaps/BeatmapManager.cs | 8 ++++++-- osu.Game/Beatmaps/BeatmapManager_WorkingBeatmap.cs | 8 +++++--- osu.Game/OsuGameBase.cs | 2 +- osu.Game/Skinning/BeatmapSkin.cs | 6 +++--- osu.Game/Skinning/LegacySkin.cs | 6 +++--- 6 files changed, 19 insertions(+), 13 deletions(-) diff --git a/osu.Game.Tests/Visual/TestCasePlaySongSelect.cs b/osu.Game.Tests/Visual/TestCasePlaySongSelect.cs index cede0160bc..5fd8fcc9c3 100644 --- a/osu.Game.Tests/Visual/TestCasePlaySongSelect.cs +++ b/osu.Game.Tests/Visual/TestCasePlaySongSelect.cs @@ -68,7 +68,7 @@ namespace osu.Game.Tests.Visual IDatabaseContextFactory factory = new SingletonContextFactory(new OsuDbContext()); dependencies.Cache(rulesets = new RulesetStore(factory)); - dependencies.Cache(manager = new BeatmapManager(storage, factory, rulesets, null) + dependencies.Cache(manager = new BeatmapManager(storage, factory, rulesets, null, null) { DefaultBeatmap = defaultBeatmap = game.Beatmap.Default }); diff --git a/osu.Game/Beatmaps/BeatmapManager.cs b/osu.Game/Beatmaps/BeatmapManager.cs index 817a3388e2..1113e38d7a 100644 --- a/osu.Game/Beatmaps/BeatmapManager.cs +++ b/osu.Game/Beatmaps/BeatmapManager.cs @@ -8,6 +8,7 @@ using System.Linq; using System.Linq.Expressions; using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; +using osu.Framework.Audio; using osu.Framework.Extensions; using osu.Framework.Logging; using osu.Framework.Platform; @@ -55,6 +56,8 @@ namespace osu.Game.Beatmaps private readonly APIAccess api; + private readonly AudioManager audioManager; + private readonly List currentDownloads = new List(); /// @@ -62,7 +65,7 @@ namespace osu.Game.Beatmaps /// public Func GetStableStorage { private get; set; } - public BeatmapManager(Storage storage, IDatabaseContextFactory contextFactory, RulesetStore rulesets, APIAccess api, IIpcHost importHost = null) + public BeatmapManager(Storage storage, IDatabaseContextFactory contextFactory, RulesetStore rulesets, APIAccess api, AudioManager audioManager, IIpcHost importHost = null) : base(storage, contextFactory, new BeatmapStore(contextFactory), importHost) { beatmaps = (BeatmapStore)ModelStore; @@ -71,6 +74,7 @@ namespace osu.Game.Beatmaps this.rulesets = rulesets; this.api = api; + this.audioManager = audioManager; } protected override void Populate(BeatmapSetInfo model, ArchiveReader archive) @@ -217,7 +221,7 @@ namespace osu.Game.Beatmaps if (beatmapInfo.Metadata == null) beatmapInfo.Metadata = beatmapInfo.BeatmapSet.Metadata; - WorkingBeatmap working = new BeatmapManagerWorkingBeatmap(Files.Store, beatmapInfo); + WorkingBeatmap working = new BeatmapManagerWorkingBeatmap(Files.Store, beatmapInfo, audioManager); previous?.TransferTo(working); diff --git a/osu.Game/Beatmaps/BeatmapManager_WorkingBeatmap.cs b/osu.Game/Beatmaps/BeatmapManager_WorkingBeatmap.cs index d7d17c980c..58b51085a4 100644 --- a/osu.Game/Beatmaps/BeatmapManager_WorkingBeatmap.cs +++ b/osu.Game/Beatmaps/BeatmapManager_WorkingBeatmap.cs @@ -4,6 +4,7 @@ using System; using System.IO; using System.Linq; +using osu.Framework.Audio; using osu.Framework.Audio.Track; using osu.Framework.Graphics.Textures; using osu.Framework.IO.Stores; @@ -20,11 +21,13 @@ namespace osu.Game.Beatmaps protected class BeatmapManagerWorkingBeatmap : WorkingBeatmap { private readonly IResourceStore store; + private readonly AudioManager audioManager; - public BeatmapManagerWorkingBeatmap(IResourceStore store, BeatmapInfo beatmapInfo) + public BeatmapManagerWorkingBeatmap(IResourceStore store, BeatmapInfo beatmapInfo, AudioManager audioManager) : base(beatmapInfo) { this.store = store; + this.audioManager = audioManager; } protected override Beatmap GetBeatmap() @@ -107,8 +110,7 @@ namespace osu.Game.Beatmaps Skin skin; try { - // todo: this needs an AudioManager - skin = new BeatmapSkin(BeatmapInfo, store); + skin = new BeatmapSkin(BeatmapInfo, store, audioManager); } catch (Exception e) { diff --git a/osu.Game/OsuGameBase.cs b/osu.Game/OsuGameBase.cs index 45fd45b4b5..f5d7d15a47 100644 --- a/osu.Game/OsuGameBase.cs +++ b/osu.Game/OsuGameBase.cs @@ -113,7 +113,7 @@ namespace osu.Game dependencies.Cache(RulesetStore = new RulesetStore(contextFactory)); dependencies.Cache(FileStore = new FileStore(contextFactory, Host.Storage)); - dependencies.Cache(BeatmapManager = new BeatmapManager(Host.Storage, contextFactory, RulesetStore, api, Host)); + dependencies.Cache(BeatmapManager = new BeatmapManager(Host.Storage, contextFactory, RulesetStore, api, Audio, Host)); dependencies.Cache(ScoreStore = new ScoreStore(Host.Storage, contextFactory, Host, BeatmapManager, RulesetStore)); dependencies.Cache(KeyBindingStore = new KeyBindingStore(contextFactory, RulesetStore)); dependencies.Cache(SettingsStore = new SettingsStore(contextFactory)); diff --git a/osu.Game/Skinning/BeatmapSkin.cs b/osu.Game/Skinning/BeatmapSkin.cs index beab2a42d7..815aac2f64 100644 --- a/osu.Game/Skinning/BeatmapSkin.cs +++ b/osu.Game/Skinning/BeatmapSkin.cs @@ -2,6 +2,7 @@ // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using System.IO; +using osu.Framework.Audio; using osu.Framework.Graphics.Textures; using osu.Framework.IO.Stores; using osu.Game.Beatmaps; @@ -10,13 +11,12 @@ namespace osu.Game.Skinning { public class BeatmapSkin : LegacySkin { - public BeatmapSkin(BeatmapInfo beatmap, IResourceStore storage) + public BeatmapSkin(BeatmapInfo beatmap, IResourceStore storage, AudioManager audioManager) : base(new SkinInfo { Name = beatmap.ToString(), Creator = beatmap.Metadata.Author.ToString() }) { storage = new LegacySkinResourceStore(beatmap.BeatmapSet, storage); - // todo: sample support - // samples = audioManager.GetSampleManager(storage); + Samples = audioManager.GetSampleManager(storage); Textures = new TextureStore(new RawTextureLoaderStore(storage)); diff --git a/osu.Game/Skinning/LegacySkin.cs b/osu.Game/Skinning/LegacySkin.cs index bae0d5c997..cfee2cfab2 100644 --- a/osu.Game/Skinning/LegacySkin.cs +++ b/osu.Game/Skinning/LegacySkin.cs @@ -18,13 +18,13 @@ namespace osu.Game.Skinning { protected TextureStore Textures; - private readonly SampleManager samples; + protected SampleManager Samples; public LegacySkin(SkinInfo skin, IResourceStore storage, AudioManager audioManager) : this(skin) { storage = new LegacySkinResourceStore(skin, storage); - samples = audioManager.GetSampleManager(storage); + Samples = audioManager.GetSampleManager(storage); Textures = new TextureStore(new RawTextureLoaderStore(storage)); Stream stream = storage.GetStream("skin.ini"); @@ -63,7 +63,7 @@ namespace osu.Game.Skinning return new Sprite { Texture = texture }; } - public override SampleChannel GetSample(string sampleName) => samples.Get(sampleName); + public override SampleChannel GetSample(string sampleName) => Samples.Get(sampleName); protected class LegacySkinResourceStore : IResourceStore where T : INamedFileInfo From 9ad4e9284a18ba4b30ab8355cb6b64e078156296 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 20 Mar 2018 16:26:36 +0900 Subject: [PATCH 479/544] Add skin source fallback chain --- osu.Game/OsuGameBase.cs | 1 + .../Objects/Drawables/DrawableHitObject.cs | 11 +++- osu.Game/Screens/Play/Player.cs | 7 ++- osu.Game/Skinning/DefaultSkin.cs | 22 ++++---- osu.Game/Skinning/ISkinSource.cs | 25 +++++++++ .../Skinning/LocalSkinOverrideContainer.cs | 53 +++++++++++++++++++ osu.Game/Skinning/Skin.cs | 9 +++- osu.Game/Skinning/SkinManager.cs | 16 +++++- osu.Game/Skinning/SkinReloadableDrawable.cs | 15 +++--- osu.Game/Skinning/SkinnableDrawable.cs | 2 +- osu.Game/Skinning/SkinnableSound.cs | 2 +- osu.Game/osu.Game.csproj | 2 + 12 files changed, 142 insertions(+), 23 deletions(-) create mode 100644 osu.Game/Skinning/ISkinSource.cs create mode 100644 osu.Game/Skinning/LocalSkinOverrideContainer.cs diff --git a/osu.Game/OsuGameBase.cs b/osu.Game/OsuGameBase.cs index f5d7d15a47..54a279e977 100644 --- a/osu.Game/OsuGameBase.cs +++ b/osu.Game/OsuGameBase.cs @@ -105,6 +105,7 @@ namespace osu.Game runMigrations(); dependencies.Cache(SkinManager = new SkinManager(Host.Storage, contextFactory, Host, Audio)); + dependencies.CacheAs(SkinManager); var api = new APIAccess(LocalConfig); diff --git a/osu.Game/Rulesets/Objects/Drawables/DrawableHitObject.cs b/osu.Game/Rulesets/Objects/Drawables/DrawableHitObject.cs index 02f88d9ee0..945cd928d4 100644 --- a/osu.Game/Rulesets/Objects/Drawables/DrawableHitObject.cs +++ b/osu.Game/Rulesets/Objects/Drawables/DrawableHitObject.cs @@ -6,7 +6,6 @@ using System.Collections.Generic; using System.Linq; using osu.Framework.Allocation; using osu.Framework.Configuration; -using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Primitives; using osu.Game.Audio; using osu.Game.Graphics; @@ -19,7 +18,7 @@ using OpenTK.Graphics; namespace osu.Game.Rulesets.Objects.Drawables { - public abstract class DrawableHitObject : CompositeDrawable, IHasAccentColour + public abstract class DrawableHitObject : SkinReloadableDrawable, IHasAccentColour { public readonly HitObject HitObject; @@ -103,6 +102,14 @@ namespace osu.Game.Rulesets.Objects.Drawables } } + protected override void SkinChanged(ISkinSource skin, bool allowFallback) + { + base.SkinChanged(skin, allowFallback); + + if (HitObject is IHasComboIndex combo) + AccentColour = skin.GetComboColour(combo) ?? Color4.White; + } + protected override void LoadComplete() { base.LoadComplete(); diff --git a/osu.Game/Screens/Play/Player.cs b/osu.Game/Screens/Play/Player.cs index 8502812f26..b0472f0e0d 100644 --- a/osu.Game/Screens/Play/Player.cs +++ b/osu.Game/Screens/Play/Player.cs @@ -26,6 +26,7 @@ using osu.Game.Rulesets.Mods; using osu.Game.Rulesets.Scoring; using osu.Game.Rulesets.UI; using osu.Game.Screens.Ranking; +using osu.Game.Skinning; using osu.Game.Storyboards.Drawables; namespace osu.Game.Screens.Play @@ -163,7 +164,11 @@ namespace osu.Game.Screens.Play RelativeSizeAxes = Axes.Both, Alpha = 0, }, - RulesetContainer, + new LocalSkinOverrideContainer(working.Skin) + { + RelativeSizeAxes = Axes.Both, + Child = RulesetContainer + }, new SkipOverlay(firstObjectTime) { Clock = Clock, // skip button doesn't want to use the audio clock directly diff --git a/osu.Game/Skinning/DefaultSkin.cs b/osu.Game/Skinning/DefaultSkin.cs index c469e91250..aa891646c8 100644 --- a/osu.Game/Skinning/DefaultSkin.cs +++ b/osu.Game/Skinning/DefaultSkin.cs @@ -3,6 +3,7 @@ using osu.Framework.Audio.Sample; using osu.Framework.Graphics; +using OpenTK.Graphics; namespace osu.Game.Skinning { @@ -11,17 +12,20 @@ namespace osu.Game.Skinning public DefaultSkin() : base(SkinInfo.Default) { - Configuration = new SkinConfiguration(); + Configuration = new SkinConfiguration + { + ComboColours = + { + new Color4(17, 136, 170, 255), + new Color4(102, 136, 0, 255), + new Color4(204, 102, 0, 255), + new Color4(121, 9, 13, 255) + } + }; } - public override Drawable GetDrawableComponent(string componentName) - { - return null; - } + public override Drawable GetDrawableComponent(string componentName) => null; - public override SampleChannel GetSample(string sampleName) - { - return null; - } + public override SampleChannel GetSample(string sampleName) => null; } } diff --git a/osu.Game/Skinning/ISkinSource.cs b/osu.Game/Skinning/ISkinSource.cs new file mode 100644 index 0000000000..ffa520ae6a --- /dev/null +++ b/osu.Game/Skinning/ISkinSource.cs @@ -0,0 +1,25 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using System; +using osu.Framework.Audio.Sample; +using osu.Framework.Graphics; +using osu.Game.Rulesets.Objects.Types; +using OpenTK.Graphics; + +namespace osu.Game.Skinning +{ + /// + /// Provides access to skinnable elements. + /// + public interface ISkinSource + { + event Action SourceChanged; + + Drawable GetDrawableComponent(string componentName); + + SampleChannel GetSample(string sampleName); + + Color4? GetComboColour(IHasComboIndex comboObject); + } +} diff --git a/osu.Game/Skinning/LocalSkinOverrideContainer.cs b/osu.Game/Skinning/LocalSkinOverrideContainer.cs new file mode 100644 index 0000000000..66080bac17 --- /dev/null +++ b/osu.Game/Skinning/LocalSkinOverrideContainer.cs @@ -0,0 +1,53 @@ +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using System; +using osu.Framework.Allocation; +using osu.Framework.Audio.Sample; +using osu.Framework.Graphics; +using osu.Framework.Graphics.Containers; +using osu.Game.Rulesets.Objects.Types; +using OpenTK.Graphics; + +namespace osu.Game.Skinning +{ + public class LocalSkinOverrideContainer : Container, ISkinSource + { + public event Action SourceChanged; + + public Drawable GetDrawableComponent(string componentName) => source.GetDrawableComponent(componentName) ?? fallbackSource?.GetDrawableComponent(componentName); + + public SampleChannel GetSample(string sampleName) => source.GetSample(sampleName) ?? fallbackSource?.GetSample(sampleName); + + public Color4? GetComboColour(IHasComboIndex comboObject) => source.GetComboColour(comboObject) ?? fallbackSource?.GetComboColour(comboObject); + + private readonly ISkinSource source; + private ISkinSource fallbackSource; + + public LocalSkinOverrideContainer(ISkinSource source) + { + this.source = source; + } + + protected override IReadOnlyDependencyContainer CreateLocalDependencies(IReadOnlyDependencyContainer parent) + { + var dependencies = new DependencyContainer(base.CreateLocalDependencies(parent)); + + fallbackSource = dependencies.Get(); + if (fallbackSource != null) + fallbackSource.SourceChanged += () => SourceChanged?.Invoke(); + + dependencies.CacheAs(this); + + return dependencies; + } + + protected override void Dispose(bool isDisposing) + { + base.Dispose(isDisposing); + + if (fallbackSource != null) + fallbackSource.SourceChanged -= SourceChanged; + } + } +} diff --git a/osu.Game/Skinning/Skin.cs b/osu.Game/Skinning/Skin.cs index 53bcf30b0e..8f8fe94337 100644 --- a/osu.Game/Skinning/Skin.cs +++ b/osu.Game/Skinning/Skin.cs @@ -4,19 +4,26 @@ using System; using osu.Framework.Audio.Sample; using osu.Framework.Graphics; +using osu.Game.Rulesets.Objects.Types; +using OpenTK.Graphics; namespace osu.Game.Skinning { - public abstract class Skin : IDisposable + public abstract class Skin : IDisposable, ISkinSource { public readonly SkinInfo SkinInfo; public virtual SkinConfiguration Configuration { get; protected set; } + public event Action SourceChanged; + public abstract Drawable GetDrawableComponent(string componentName); public abstract SampleChannel GetSample(string sampleName); + public virtual Color4? GetComboColour(IHasComboIndex comboObject) => + Configuration.ComboColours.Count == 0 ? (Color4?)null : Configuration.ComboColours[comboObject.ComboIndex % Configuration.ComboColours.Count]; + protected Skin(SkinInfo skin) { SkinInfo = skin; diff --git a/osu.Game/Skinning/SkinManager.cs b/osu.Game/Skinning/SkinManager.cs index fa65b923fb..e4149404cd 100644 --- a/osu.Game/Skinning/SkinManager.cs +++ b/osu.Game/Skinning/SkinManager.cs @@ -7,14 +7,18 @@ using System.Linq; using System.Linq.Expressions; using Microsoft.EntityFrameworkCore; using osu.Framework.Audio; +using osu.Framework.Audio.Sample; using osu.Framework.Configuration; +using osu.Framework.Graphics; using osu.Framework.Platform; using osu.Game.Database; using osu.Game.IO.Archives; +using osu.Game.Rulesets.Objects.Types; +using OpenTK.Graphics; namespace osu.Game.Skinning { - public class SkinManager : ArchiveModelManager + public class SkinManager : ArchiveModelManager, ISkinSource { private readonly AudioManager audio; @@ -89,6 +93,8 @@ namespace osu.Game.Skinning { if (skin.SkinInfo != CurrentSkinInfo.Value) throw new InvalidOperationException($"Setting {nameof(CurrentSkin)}'s value directly is not supported. Use {nameof(CurrentSkinInfo)} instead."); + + SourceChanged?.Invoke(); }; // migrate older imports which didn't have access to skin.ini @@ -108,5 +114,13 @@ namespace osu.Game.Skinning /// The query. /// The first result for the provided query, or null if no results were found. public SkinInfo Query(Expression> query) => ModelStore.ConsumableItems.AsNoTracking().FirstOrDefault(query); + + public event Action SourceChanged; + + public Drawable GetDrawableComponent(string componentName) => CurrentSkin.Value.GetDrawableComponent(componentName); + + public SampleChannel GetSample(string sampleName) => CurrentSkin.Value.GetSample(sampleName); + + public Color4? GetComboColour(IHasComboIndex comboObject) => CurrentSkin.Value.GetComboColour(comboObject); } } diff --git a/osu.Game/Skinning/SkinReloadableDrawable.cs b/osu.Game/Skinning/SkinReloadableDrawable.cs index 3e33f952cd..04ba8427b2 100644 --- a/osu.Game/Skinning/SkinReloadableDrawable.cs +++ b/osu.Game/Skinning/SkinReloadableDrawable.cs @@ -2,7 +2,6 @@ // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using osu.Framework.Allocation; -using osu.Framework.Configuration; using osu.Framework.Graphics.Containers; namespace osu.Game.Skinning @@ -12,7 +11,7 @@ namespace osu.Game.Skinning /// public abstract class SkinReloadableDrawable : CompositeDrawable { - private Bindable skin; + private ISkinSource skin; /// /// Whether fallback to default skin should be allowed if the custom skin is missing this resource. @@ -29,16 +28,18 @@ namespace osu.Game.Skinning } [BackgroundDependencyLoader] - private void load(SkinManager skinManager) + private void load(ISkinSource source) { - skin = skinManager.CurrentSkin.GetBoundCopy(); - skin.ValueChanged += skin => SkinChanged(skin, allowDefaultFallback || skin.SkinInfo == SkinInfo.Default); + skin = source; + skin.SourceChanged += onChange; } + private void onChange() => SkinChanged(skin, allowDefaultFallback); + protected override void LoadAsyncComplete() { base.LoadAsyncComplete(); - skin.TriggerChange(); + onChange(); } /// @@ -46,7 +47,7 @@ namespace osu.Game.Skinning /// /// The new skin. /// Whether fallback to default skin should be allowed if the custom skin is missing this resource. - protected virtual void SkinChanged(Skin skin, bool allowFallback) + protected virtual void SkinChanged(ISkinSource skin, bool allowFallback) { } } diff --git a/osu.Game/Skinning/SkinnableDrawable.cs b/osu.Game/Skinning/SkinnableDrawable.cs index 81abc9e80c..77af44d5d6 100644 --- a/osu.Game/Skinning/SkinnableDrawable.cs +++ b/osu.Game/Skinning/SkinnableDrawable.cs @@ -40,7 +40,7 @@ namespace osu.Game.Skinning RelativeSizeAxes = Axes.Both; } - protected override void SkinChanged(Skin skin, bool allowFallback) + protected override void SkinChanged(ISkinSource skin, bool allowFallback) { var drawable = skin.GetDrawableComponent(componentName); if (drawable != null) diff --git a/osu.Game/Skinning/SkinnableSound.cs b/osu.Game/Skinning/SkinnableSound.cs index fd52d62d59..07c8fd3735 100644 --- a/osu.Game/Skinning/SkinnableSound.cs +++ b/osu.Game/Skinning/SkinnableSound.cs @@ -31,7 +31,7 @@ namespace osu.Game.Skinning public void Play() => channels?.ForEach(c => c.Play()); - protected override void SkinChanged(Skin skin, bool allowFallback) + protected override void SkinChanged(ISkinSource skin, bool allowFallback) { channels = samples.Select(s => { diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index 9a240b6899..1c902a158f 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -874,8 +874,10 @@ + + From f03abb3145b53b8e0dd21c4d80fbd063a6a59b28 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 20 Mar 2018 16:28:39 +0900 Subject: [PATCH 480/544] Add GetTexture method to ISkinSource Used to shortcut lookup checks without potentially expensive drawable creation overhead. --- osu.Game/Skinning/DefaultSkin.cs | 3 +++ osu.Game/Skinning/ISkinSource.cs | 3 +++ osu.Game/Skinning/LegacySkin.cs | 4 +++- osu.Game/Skinning/LocalSkinOverrideContainer.cs | 3 +++ osu.Game/Skinning/Skin.cs | 3 +++ osu.Game/Skinning/SkinManager.cs | 3 +++ 6 files changed, 18 insertions(+), 1 deletion(-) diff --git a/osu.Game/Skinning/DefaultSkin.cs b/osu.Game/Skinning/DefaultSkin.cs index aa891646c8..7422ae2e47 100644 --- a/osu.Game/Skinning/DefaultSkin.cs +++ b/osu.Game/Skinning/DefaultSkin.cs @@ -3,6 +3,7 @@ using osu.Framework.Audio.Sample; using osu.Framework.Graphics; +using osu.Framework.Graphics.Textures; using OpenTK.Graphics; namespace osu.Game.Skinning @@ -26,6 +27,8 @@ namespace osu.Game.Skinning public override Drawable GetDrawableComponent(string componentName) => null; + public override Texture GetTexture(string componentName) => null; + public override SampleChannel GetSample(string sampleName) => null; } } diff --git a/osu.Game/Skinning/ISkinSource.cs b/osu.Game/Skinning/ISkinSource.cs index ffa520ae6a..924fdbd8c1 100644 --- a/osu.Game/Skinning/ISkinSource.cs +++ b/osu.Game/Skinning/ISkinSource.cs @@ -4,6 +4,7 @@ using System; using osu.Framework.Audio.Sample; using osu.Framework.Graphics; +using osu.Framework.Graphics.Textures; using osu.Game.Rulesets.Objects.Types; using OpenTK.Graphics; @@ -18,6 +19,8 @@ namespace osu.Game.Skinning Drawable GetDrawableComponent(string componentName); + Texture GetTexture(string componentName); + SampleChannel GetSample(string sampleName); Color4? GetComboColour(IHasComboIndex comboObject); diff --git a/osu.Game/Skinning/LegacySkin.cs b/osu.Game/Skinning/LegacySkin.cs index cfee2cfab2..c543537f32 100644 --- a/osu.Game/Skinning/LegacySkin.cs +++ b/osu.Game/Skinning/LegacySkin.cs @@ -57,12 +57,14 @@ namespace osu.Game.Skinning break; } - var texture = Textures.Get(componentName); + var texture = GetTexture(componentName); if (texture == null) return null; return new Sprite { Texture = texture }; } + public override Texture GetTexture(string componentName) => Textures.Get(componentName); + public override SampleChannel GetSample(string sampleName) => Samples.Get(sampleName); protected class LegacySkinResourceStore : IResourceStore diff --git a/osu.Game/Skinning/LocalSkinOverrideContainer.cs b/osu.Game/Skinning/LocalSkinOverrideContainer.cs index 66080bac17..a0cc11a324 100644 --- a/osu.Game/Skinning/LocalSkinOverrideContainer.cs +++ b/osu.Game/Skinning/LocalSkinOverrideContainer.cs @@ -6,6 +6,7 @@ using osu.Framework.Allocation; using osu.Framework.Audio.Sample; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; +using osu.Framework.Graphics.Textures; using osu.Game.Rulesets.Objects.Types; using OpenTK.Graphics; @@ -17,6 +18,8 @@ namespace osu.Game.Skinning public Drawable GetDrawableComponent(string componentName) => source.GetDrawableComponent(componentName) ?? fallbackSource?.GetDrawableComponent(componentName); + public Texture GetTexture(string componentName) => source.GetTexture(componentName) ?? fallbackSource.GetTexture(componentName); + public SampleChannel GetSample(string sampleName) => source.GetSample(sampleName) ?? fallbackSource?.GetSample(sampleName); public Color4? GetComboColour(IHasComboIndex comboObject) => source.GetComboColour(comboObject) ?? fallbackSource?.GetComboColour(comboObject); diff --git a/osu.Game/Skinning/Skin.cs b/osu.Game/Skinning/Skin.cs index 8f8fe94337..5d2c640244 100644 --- a/osu.Game/Skinning/Skin.cs +++ b/osu.Game/Skinning/Skin.cs @@ -4,6 +4,7 @@ using System; using osu.Framework.Audio.Sample; using osu.Framework.Graphics; +using osu.Framework.Graphics.Textures; using osu.Game.Rulesets.Objects.Types; using OpenTK.Graphics; @@ -21,6 +22,8 @@ namespace osu.Game.Skinning public abstract SampleChannel GetSample(string sampleName); + public abstract Texture GetTexture(string componentName); + public virtual Color4? GetComboColour(IHasComboIndex comboObject) => Configuration.ComboColours.Count == 0 ? (Color4?)null : Configuration.ComboColours[comboObject.ComboIndex % Configuration.ComboColours.Count]; diff --git a/osu.Game/Skinning/SkinManager.cs b/osu.Game/Skinning/SkinManager.cs index e4149404cd..9ae6eef49f 100644 --- a/osu.Game/Skinning/SkinManager.cs +++ b/osu.Game/Skinning/SkinManager.cs @@ -10,6 +10,7 @@ using osu.Framework.Audio; using osu.Framework.Audio.Sample; using osu.Framework.Configuration; using osu.Framework.Graphics; +using osu.Framework.Graphics.Textures; using osu.Framework.Platform; using osu.Game.Database; using osu.Game.IO.Archives; @@ -119,6 +120,8 @@ namespace osu.Game.Skinning public Drawable GetDrawableComponent(string componentName) => CurrentSkin.Value.GetDrawableComponent(componentName); + public Texture GetTexture(string componentName)=> CurrentSkin.Value.GetTexture(componentName); + public SampleChannel GetSample(string sampleName) => CurrentSkin.Value.GetSample(sampleName); public Color4? GetComboColour(IHasComboIndex comboObject) => CurrentSkin.Value.GetComboColour(comboObject); From fb3d319d0e56d015b6c3f5ec8cc37486a684c81d Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Fri, 16 Mar 2018 10:36:26 +0900 Subject: [PATCH 481/544] Make fallback bool into a function Allows correct handling now that beatmap skins are also a thing. --- .../Objects/Drawables/Pieces/ExplodePiece.cs | 2 +- .../Objects/Drawables/Pieces/FlashPiece.cs | 2 +- .../Objects/Drawables/Pieces/GlowPiece.cs | 2 +- .../Objects/Drawables/Pieces/NumberPiece.cs | 2 +- osu.Game/Skinning/SkinReloadableDrawable.cs | 8 +++++--- osu.Game/Skinning/SkinnableDrawable.cs | 6 +++--- 6 files changed, 12 insertions(+), 10 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/ExplodePiece.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/ExplodePiece.cs index 76ed89be67..28552e6c36 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/ExplodePiece.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/ExplodePiece.cs @@ -25,7 +25,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces Blending = BlendingMode.Additive, RelativeSizeAxes = Axes.Both, Alpha = 0.2f, - }, false); + }, s => s.GetTexture("Play/osu/hitcircle") == null); } } } diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/FlashPiece.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/FlashPiece.cs index 921d24f69d..50dc473750 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/FlashPiece.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/FlashPiece.cs @@ -29,7 +29,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces { RelativeSizeAxes = Axes.Both } - }, false); + }, s => s.GetTexture("Play/osu/hitcircle") == null); } } } diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/GlowPiece.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/GlowPiece.cs index a4e1916659..211e138b65 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/GlowPiece.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/GlowPiece.cs @@ -29,7 +29,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces Texture = textures.Get(name), Blending = BlendingMode.Additive, Alpha = 0.5f - }, false); + }, s => s.GetTexture("Play/osu/hitcircle") == null); } } } diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/NumberPiece.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/NumberPiece.cs index 4220299c66..0c1fd4c364 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/NumberPiece.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/NumberPiece.cs @@ -40,7 +40,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces Colour = Color4.White.Opacity(0.5f), }, Child = new Box() - }, false), + }, s => s.GetTexture("Play/osu/hitcircle") == null), number = new OsuSpriteText { Text = @"1", diff --git a/osu.Game/Skinning/SkinReloadableDrawable.cs b/osu.Game/Skinning/SkinReloadableDrawable.cs index 04ba8427b2..36f33e746a 100644 --- a/osu.Game/Skinning/SkinReloadableDrawable.cs +++ b/osu.Game/Skinning/SkinReloadableDrawable.cs @@ -1,6 +1,7 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using System; using osu.Framework.Allocation; using osu.Framework.Graphics.Containers; @@ -11,20 +12,21 @@ namespace osu.Game.Skinning /// public abstract class SkinReloadableDrawable : CompositeDrawable { + private readonly Func allowFallback; private ISkinSource skin; /// /// Whether fallback to default skin should be allowed if the custom skin is missing this resource. /// - private readonly bool allowDefaultFallback; + private bool allowDefaultFallback => allowFallback == null || allowFallback.Invoke(skin); /// /// Create a new /// /// Whether fallback to default skin should be allowed if the custom skin is missing this resource. - protected SkinReloadableDrawable(bool fallback = true) + protected SkinReloadableDrawable(Func allowFallback = null) { - allowDefaultFallback = fallback; + this.allowFallback = allowFallback; } [BackgroundDependencyLoader] diff --git a/osu.Game/Skinning/SkinnableDrawable.cs b/osu.Game/Skinning/SkinnableDrawable.cs index 77af44d5d6..9314d16c39 100644 --- a/osu.Game/Skinning/SkinnableDrawable.cs +++ b/osu.Game/Skinning/SkinnableDrawable.cs @@ -9,8 +9,8 @@ namespace osu.Game.Skinning { public class SkinnableDrawable : SkinnableDrawable { - public SkinnableDrawable(string name, Func defaultImplementation, bool fallback = true, bool restrictSize = true) - : base(name, defaultImplementation, fallback, restrictSize) + public SkinnableDrawable(string name, Func defaultImplementation, Func allowFallback = null, bool restrictSize = true) + : base(name, defaultImplementation, allowFallback, restrictSize) { } } @@ -31,7 +31,7 @@ namespace osu.Game.Skinning /// A function to create the default skin implementation of this element. /// Whther to fallback to the default implementation when a custom skin is specified but not implementation is present. /// Whether a user-skin drawable should be limited to the size of our parent. - public SkinnableDrawable(string name, Func defaultImplementation, bool fallback = true, bool restrictSize = true) : base(fallback) + public SkinnableDrawable(string name, Func defaultImplementation, Func allowFallback = null, bool restrictSize = true) : base(allowFallback) { componentName = name; createDefault = defaultImplementation; From 625e561fc8a5b0a35c92908b74eb290fee348efc Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 20 Mar 2018 18:01:09 +0900 Subject: [PATCH 482/544] Fix whitespace --- osu.Game/Database/ArchiveModelManager.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game/Database/ArchiveModelManager.cs b/osu.Game/Database/ArchiveModelManager.cs index bdc7c58238..78bf46eb69 100644 --- a/osu.Game/Database/ArchiveModelManager.cs +++ b/osu.Game/Database/ArchiveModelManager.cs @@ -333,7 +333,7 @@ namespace osu.Game.Database { if (ZipFile.IsZipFile(path)) return new ZipArchiveReader(Files.Storage.GetStream(path), Path.GetFileName(path)); - return new LegacyFilesystemReader(path); + return new LegacyFilesystemReader(path); } } } From 6fd650777ce2709ef4ab0f4ac076c83258ac235d Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 20 Mar 2018 20:09:55 +0900 Subject: [PATCH 483/544] Move value change logic to bindable Also add drag support --- .../Visual/TestCaseDrawableBeatDivisor.cs | 4 + .../Screens/Compose/BindableBeatDivisor.cs | 42 ++++++- .../Screens/Compose/DrawableBeatDivisor.cs | 112 ++++++++++-------- 3 files changed, 106 insertions(+), 52 deletions(-) diff --git a/osu.Game.Tests/Visual/TestCaseDrawableBeatDivisor.cs b/osu.Game.Tests/Visual/TestCaseDrawableBeatDivisor.cs index 238fd09fd8..fa565eaf5d 100644 --- a/osu.Game.Tests/Visual/TestCaseDrawableBeatDivisor.cs +++ b/osu.Game.Tests/Visual/TestCaseDrawableBeatDivisor.cs @@ -1,6 +1,8 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using System; +using System.Collections.Generic; using osu.Framework.Allocation; using osu.Framework.Graphics; using osu.Game.Screens.Edit.Screens.Compose; @@ -10,6 +12,8 @@ namespace osu.Game.Tests.Visual { public class TestCaseDrawableBeatDivisor : OsuTestCase { + public override IReadOnlyList RequiredTypes => new[] { typeof(BindableBeatDivisor) }; + [BackgroundDependencyLoader] private void load() { diff --git a/osu.Game/Screens/Edit/Screens/Compose/BindableBeatDivisor.cs b/osu.Game/Screens/Edit/Screens/Compose/BindableBeatDivisor.cs index df2521dc10..090f278f39 100644 --- a/osu.Game/Screens/Edit/Screens/Compose/BindableBeatDivisor.cs +++ b/osu.Game/Screens/Edit/Screens/Compose/BindableBeatDivisor.cs @@ -1,15 +1,55 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using System; +using System.Linq; using osu.Framework.Configuration; namespace osu.Game.Screens.Edit.Screens.Compose { - public class BindableBeatDivisor : Bindable + public class BindableBeatDivisor : BindableNumber { + public static readonly int[] VALID_DIVISORS = { 1, 2, 3, 4, 6, 8, 12, 16 }; + public BindableBeatDivisor(int value = 1) : base(value) { } + + public void Next() => Value = VALID_DIVISORS[Math.Min(VALID_DIVISORS.Length - 1, Array.IndexOf(VALID_DIVISORS, Value) + 1)]; + + public void Previous() => Value = VALID_DIVISORS[Math.Max(0, Array.IndexOf(VALID_DIVISORS, Value) - 1)]; + + public override int Value + { + get { return base.Value; } + set + { + int snapped = 1; + + for (int i = 1; i < VALID_DIVISORS.Length; i++) + { + var curr = VALID_DIVISORS[i]; + var prev = VALID_DIVISORS[i - 1]; + if (value < prev + (curr - prev) / 2f) + { + snapped = prev; + break; + } + + snapped = curr; + } + + if (snapped == Value) + // it may be that we are already at the snapped value, but we want bound components to still be made aware that we possibly modified an incoming ValueChanged. + TriggerValueChange(); + else + base.Value = snapped; + } + } + + protected override int DefaultMinValue => VALID_DIVISORS.First(); + protected override int DefaultMaxValue => VALID_DIVISORS.Last(); + protected override int DefaultPrecision => 1; } } diff --git a/osu.Game/Screens/Edit/Screens/Compose/DrawableBeatDivisor.cs b/osu.Game/Screens/Edit/Screens/Compose/DrawableBeatDivisor.cs index 08221009cc..35bb93cd4b 100644 --- a/osu.Game/Screens/Edit/Screens/Compose/DrawableBeatDivisor.cs +++ b/osu.Game/Screens/Edit/Screens/Compose/DrawableBeatDivisor.cs @@ -1,13 +1,14 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE -using System; +using System.Linq; using osu.Framework.Allocation; using osu.Framework.Configuration; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Shapes; using osu.Framework.Graphics.Sprites; +using osu.Framework.Graphics.UserInterface; using osu.Game.Graphics; using osu.Game.Graphics.UserInterface; using OpenTK; @@ -17,10 +18,9 @@ namespace osu.Game.Screens.Edit.Screens.Compose { public class DrawableBeatDivisor : CompositeDrawable { - private static readonly int[] available_divisors = { 1, 2, 3, 4, 6, 8, 12, 16 }; - private readonly BindableBeatDivisor beatDivisor = new BindableBeatDivisor(); private int currentDivisorIndex; + private TickSliderBar slider; public DrawableBeatDivisor(BindableBeatDivisor beatDivisor) { @@ -48,7 +48,7 @@ namespace osu.Game.Screens.Edit.Screens.Compose { new Drawable[] { - new TickContainer(beatDivisor, 1, 2, 3, 4, 6, 8, 12, 16) + slider = new TickSliderBar(beatDivisor, 1, 2, 3, 4, 6, 8, 12, 16) { RelativeSizeAxes = Axes.Both, Padding = new MarginPadding { Horizontal = 5 } @@ -80,13 +80,13 @@ namespace osu.Game.Screens.Edit.Screens.Compose new DivisorButton { Icon = FontAwesome.fa_chevron_left, - Action = selectPrevious + Action = beatDivisor.Previous }, new DivisorText(beatDivisor), new DivisorButton { Icon = FontAwesome.fa_chevron_right, - Action = selectNext + Action = beatDivisor.Next } }, new Drawable[] @@ -118,20 +118,8 @@ namespace osu.Game.Screens.Edit.Screens.Compose } } }; - } - private void selectPrevious() - { - if (currentDivisorIndex == 0) - return; - beatDivisor.Value = available_divisors[--currentDivisorIndex]; - } - - private void selectNext() - { - if (currentDivisorIndex == available_divisors.Length - 1) - return; - beatDivisor.Value = available_divisors[++currentDivisorIndex]; + slider.Current.BindTo(beatDivisor); } private class DivisorText : SpriteText @@ -186,61 +174,46 @@ namespace osu.Game.Screens.Edit.Screens.Compose } } - private class TickContainer : CompositeDrawable + private class TickSliderBar : SliderBar { - private readonly Bindable beatDivisor = new Bindable(); + public new MarginPadding Padding + { + set => base.Padding = value; + } - public new MarginPadding Padding { set => base.Padding = value; } - - private EquilateralTriangle marker; + private Drawable marker; private readonly int[] availableDivisors; - private readonly float tickSpacing; - public TickContainer(BindableBeatDivisor beatDivisor, params int[] divisors) + public TickSliderBar(params int[] divisors) { - this.beatDivisor.BindTo(beatDivisor); - availableDivisors = divisors; - tickSpacing = 1f / (availableDivisors.Length + 1); } [BackgroundDependencyLoader] - private void load(OsuColour colours) + private void load() { - InternalChild = marker = new EquilateralTriangle - { - Anchor = Anchor.BottomLeft, - Origin = Anchor.BottomCentre, - RelativePositionAxes = Axes.X, - Height = 7, - EdgeSmoothness = new Vector2(1), - Colour = colours.Gray4, - }; + InternalChild = marker = new Marker(); - for (int i = 0; i < availableDivisors.Length; i++) + foreach (var t in availableDivisors) { - AddInternal(new Tick(availableDivisors[i]) + AddInternal(new Tick(t) { Anchor = Anchor.TopLeft, Origin = Anchor.TopCentre, RelativePositionAxes = Axes.X, - X = getTickPosition(i) + X = getTickPosition(t) }); } + + CurrentNumber.ValueChanged += v => marker.MoveToX(getTickPosition(v), 100, Easing.OutQuint); } - protected override void LoadComplete() + protected override void UpdateValue(float value) { - base.LoadComplete(); - - beatDivisor.ValueChanged += v => updatePosition(); - updatePosition(); } - private void updatePosition() => marker.MoveToX(getTickPosition(Array.IndexOf(availableDivisors, beatDivisor.Value)), 100, Easing.OutQuint); - - private float getTickPosition(int index) => (index + 1) * tickSpacing; + private float getTickPosition(float divisor) => (divisor - 1) / availableDivisors.Last(); private class Tick : Box { @@ -249,7 +222,6 @@ namespace osu.Game.Screens.Edit.Screens.Compose public Tick(int divisor) { this.divisor = divisor; - Size = new Vector2(2, 10); } @@ -264,6 +236,44 @@ namespace osu.Game.Screens.Edit.Screens.Compose Colour = colours.Gray4; } } + + private class Marker : CompositeDrawable + { + private const float size = 7; + + [BackgroundDependencyLoader] + private void load(OsuColour colours) + { + Colour = colours.Gray4; + Anchor = Anchor.TopLeft; + Origin = Anchor.TopCentre; + + Width = size; + RelativeSizeAxes = Axes.Y; + RelativePositionAxes = Axes.X; + + + InternalChildren = new Drawable[] + { + new Box + { + Width = 1, + RelativeSizeAxes = Axes.Y, + Origin = Anchor.BottomCentre, + Anchor = Anchor.BottomCentre, + Colour = Color4.White, + }, + new EquilateralTriangle + { + Origin = Anchor.BottomCentre, + Anchor = Anchor.BottomCentre, + Height = size, + EdgeSmoothness = new Vector2(1), + Colour = Color4.White, + } + }; + } + } } } } From c2eb32c0e9337149858613d40b9668fc83163641 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 20 Mar 2018 20:10:27 +0900 Subject: [PATCH 484/544] DrawableBeatDivisor -> BeatDivisorControl --- ...seDrawableBeatDivisor.cs => TestCaseBeatDivisorControl.cs} | 4 ++-- osu.Game.Tests/osu.Game.Tests.csproj | 2 +- .../Compose/{DrawableBeatDivisor.cs => BeatDivisorControl.cs} | 4 ++-- osu.Game/Screens/Edit/Screens/Compose/Compose.cs | 2 +- osu.Game/osu.Game.csproj | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) rename osu.Game.Tests/Visual/{TestCaseDrawableBeatDivisor.cs => TestCaseBeatDivisorControl.cs} (82%) rename osu.Game/Screens/Edit/Screens/Compose/{DrawableBeatDivisor.cs => BeatDivisorControl.cs} (96%) diff --git a/osu.Game.Tests/Visual/TestCaseDrawableBeatDivisor.cs b/osu.Game.Tests/Visual/TestCaseBeatDivisorControl.cs similarity index 82% rename from osu.Game.Tests/Visual/TestCaseDrawableBeatDivisor.cs rename to osu.Game.Tests/Visual/TestCaseBeatDivisorControl.cs index fa565eaf5d..598c504ca1 100644 --- a/osu.Game.Tests/Visual/TestCaseDrawableBeatDivisor.cs +++ b/osu.Game.Tests/Visual/TestCaseBeatDivisorControl.cs @@ -10,14 +10,14 @@ using OpenTK; namespace osu.Game.Tests.Visual { - public class TestCaseDrawableBeatDivisor : OsuTestCase + public class TestCaseBeatDivisorControl : OsuTestCase { public override IReadOnlyList RequiredTypes => new[] { typeof(BindableBeatDivisor) }; [BackgroundDependencyLoader] private void load() { - Child = new DrawableBeatDivisor(new BindableBeatDivisor()) + Child = new BeatDivisorControl(new BindableBeatDivisor()) { Anchor = Anchor.Centre, Origin = Anchor.Centre, diff --git a/osu.Game.Tests/osu.Game.Tests.csproj b/osu.Game.Tests/osu.Game.Tests.csproj index b5ab229f8a..e85bbd6f10 100644 --- a/osu.Game.Tests/osu.Game.Tests.csproj +++ b/osu.Game.Tests/osu.Game.Tests.csproj @@ -116,7 +116,7 @@ - + diff --git a/osu.Game/Screens/Edit/Screens/Compose/DrawableBeatDivisor.cs b/osu.Game/Screens/Edit/Screens/Compose/BeatDivisorControl.cs similarity index 96% rename from osu.Game/Screens/Edit/Screens/Compose/DrawableBeatDivisor.cs rename to osu.Game/Screens/Edit/Screens/Compose/BeatDivisorControl.cs index 35bb93cd4b..98b6a14219 100644 --- a/osu.Game/Screens/Edit/Screens/Compose/DrawableBeatDivisor.cs +++ b/osu.Game/Screens/Edit/Screens/Compose/BeatDivisorControl.cs @@ -16,13 +16,13 @@ using OpenTK.Graphics; namespace osu.Game.Screens.Edit.Screens.Compose { - public class DrawableBeatDivisor : CompositeDrawable + public class BeatDivisorControl : CompositeDrawable { private readonly BindableBeatDivisor beatDivisor = new BindableBeatDivisor(); private int currentDivisorIndex; private TickSliderBar slider; - public DrawableBeatDivisor(BindableBeatDivisor beatDivisor) + public BeatDivisorControl(BindableBeatDivisor beatDivisor) { this.beatDivisor.BindTo(beatDivisor); } diff --git a/osu.Game/Screens/Edit/Screens/Compose/Compose.cs b/osu.Game/Screens/Edit/Screens/Compose/Compose.cs index 2603832437..91adc8324a 100644 --- a/osu.Game/Screens/Edit/Screens/Compose/Compose.cs +++ b/osu.Game/Screens/Edit/Screens/Compose/Compose.cs @@ -70,7 +70,7 @@ namespace osu.Game.Screens.Edit.Screens.Compose Padding = new MarginPadding { Right = 5 }, Child = timeline = new ScrollableTimeline { RelativeSizeAxes = Axes.Both } }, - new DrawableBeatDivisor(beatDivisor) { RelativeSizeAxes = Axes.Both } + new BeatDivisorControl(beatDivisor) { RelativeSizeAxes = Axes.Both } }, }, ColumnDimensions = new[] diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index 42f58e9eee..62a26334cc 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -381,7 +381,7 @@ - + From 5a10270a2a6257e9d074b0bff91502d112254954 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 20 Mar 2018 20:32:32 +0900 Subject: [PATCH 485/544] return -> break no real reason but whatever works --- osu.Game/Skinning/LegacySkinDecoder.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game/Skinning/LegacySkinDecoder.cs b/osu.Game/Skinning/LegacySkinDecoder.cs index 9a881f9241..853abceddf 100644 --- a/osu.Game/Skinning/LegacySkinDecoder.cs +++ b/osu.Game/Skinning/LegacySkinDecoder.cs @@ -29,7 +29,7 @@ namespace osu.Game.Skinning break; } - return; + break; } base.ParseLine(output, section, line); From 045610dbfeed0f85928b300506c6285df0558d63 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 20 Mar 2018 21:31:17 +0900 Subject: [PATCH 486/544] Adjust styling and colours --- .../Screens/Compose/BeatDivisorControl.cs | 94 ++++++++++++++++--- 1 file changed, 83 insertions(+), 11 deletions(-) diff --git a/osu.Game/Screens/Edit/Screens/Compose/BeatDivisorControl.cs b/osu.Game/Screens/Edit/Screens/Compose/BeatDivisorControl.cs index 98b6a14219..61bcc2fb82 100644 --- a/osu.Game/Screens/Edit/Screens/Compose/BeatDivisorControl.cs +++ b/osu.Game/Screens/Edit/Screens/Compose/BeatDivisorControl.cs @@ -5,10 +5,12 @@ using System.Linq; using osu.Framework.Allocation; using osu.Framework.Configuration; using osu.Framework.Graphics; +using osu.Framework.Graphics.Colour; using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Shapes; using osu.Framework.Graphics.Sprites; using osu.Framework.Graphics.UserInterface; +using osu.Framework.Input; using osu.Game.Graphics; using osu.Game.Graphics.UserInterface; using OpenTK; @@ -181,7 +183,7 @@ namespace osu.Game.Screens.Edit.Screens.Compose set => base.Padding = value; } - private Drawable marker; + private Marker marker; private readonly int[] availableDivisors; @@ -193,8 +195,6 @@ namespace osu.Game.Screens.Edit.Screens.Compose [BackgroundDependencyLoader] private void load() { - InternalChild = marker = new Marker(); - foreach (var t in availableDivisors) { AddInternal(new Tick(t) @@ -206,23 +206,69 @@ namespace osu.Game.Screens.Edit.Screens.Compose }); } - CurrentNumber.ValueChanged += v => marker.MoveToX(getTickPosition(v), 100, Easing.OutQuint); + AddInternal(marker = new Marker()); + + CurrentNumber.ValueChanged += v => + { + marker.MoveToX(getTickPosition(v), 100, Easing.OutQuint); + marker.Flash(); + }; } protected override void UpdateValue(float value) { } + protected override bool OnMouseDown(InputState state, MouseDownEventArgs args) + { + marker.Active = true; + return base.OnMouseDown(state, args); + } + + protected override bool OnMouseUp(InputState state, MouseUpEventArgs args) + { + marker.Active = false; + return base.OnMouseUp(state, args); + } + + protected override bool OnClick(InputState state) + { + handleMouseInput(state); + return true; + } + + protected override bool OnDrag(InputState state) + { + handleMouseInput(state); + return true; + } + + private void handleMouseInput(InputState state) + { + // copied from SliderBar so we can do custom spacing logic. + var xPosition = ToLocalSpace(state?.Mouse.NativeState.Position ?? Vector2.Zero).X - RangePadding; + + if (!CurrentNumber.Disabled) + CurrentNumber.SetProportional(xPosition / UsableWidth, state != null && state.Keyboard.ShiftPressed ? KeyboardStep : 0); + + OnUserChange(); + } + private float getTickPosition(float divisor) => (divisor - 1) / availableDivisors.Last(); - private class Tick : Box + private class Tick : CompositeDrawable { private readonly int divisor; public Tick(int divisor) { this.divisor = divisor; - Size = new Vector2(2, 10); + Size = new Vector2(2.5f, 10); + + InternalChild = new Box { RelativeSizeAxes = Axes.Both }; + + CornerRadius = 0.5f; + Masking = true; } [BackgroundDependencyLoader] @@ -233,18 +279,20 @@ namespace osu.Game.Screens.Edit.Screens.Compose else if (divisor >= 8) Colour = colours.Yellow; else - Colour = colours.Gray4; + Colour = OsuColour.Gray(2f / divisor); } } private class Marker : CompositeDrawable { + private Color4 defaultColour; + private const float size = 7; [BackgroundDependencyLoader] private void load(OsuColour colours) { - Colour = colours.Gray4; + Colour = defaultColour = colours.Gray4; Anchor = Anchor.TopLeft; Origin = Anchor.TopCentre; @@ -252,16 +300,16 @@ namespace osu.Game.Screens.Edit.Screens.Compose RelativeSizeAxes = Axes.Y; RelativePositionAxes = Axes.X; - InternalChildren = new Drawable[] { new Box { - Width = 1, + Width = 2, RelativeSizeAxes = Axes.Y, Origin = Anchor.BottomCentre, Anchor = Anchor.BottomCentre, - Colour = Color4.White, + Colour = ColourInfo.GradientVertical(Color4.Transparent, Color4.White), + Blending = BlendingMode.Additive, }, new EquilateralTriangle { @@ -273,6 +321,30 @@ namespace osu.Game.Screens.Edit.Screens.Compose } }; } + + private bool active; + + public bool Active + { + get => active; + set + { + this.FadeColour(value ? Color4.White : defaultColour, 500, Easing.OutQuint); + active = value; + } + } + + public void Flash() + { + bool wasActive = active; + + Active = true; + + if (wasActive) return; + + using (BeginDelayedSequence(50)) + Active = false; + } } } } From dac1ba21db339adfa3a363fefc25c69f9fe2d6bf Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 20 Mar 2018 21:38:22 +0900 Subject: [PATCH 487/544] Make keyboard control work --- osu.Game/Screens/Edit/Screens/Compose/BeatDivisorControl.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/osu.Game/Screens/Edit/Screens/Compose/BeatDivisorControl.cs b/osu.Game/Screens/Edit/Screens/Compose/BeatDivisorControl.cs index 61bcc2fb82..00054c0039 100644 --- a/osu.Game/Screens/Edit/Screens/Compose/BeatDivisorControl.cs +++ b/osu.Game/Screens/Edit/Screens/Compose/BeatDivisorControl.cs @@ -212,6 +212,8 @@ namespace osu.Game.Screens.Edit.Screens.Compose { marker.MoveToX(getTickPosition(v), 100, Easing.OutQuint); marker.Flash(); + + KeyboardStep = v / 3f; }; } From aa8b0d017cfd02826974227defafcb85a34ab07a Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 20 Mar 2018 21:59:32 +0900 Subject: [PATCH 488/544] Adjust colours and spacing --- .../Screens/Compose/BeatDivisorControl.cs | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/osu.Game/Screens/Edit/Screens/Compose/BeatDivisorControl.cs b/osu.Game/Screens/Edit/Screens/Compose/BeatDivisorControl.cs index 00054c0039..64f77a2dea 100644 --- a/osu.Game/Screens/Edit/Screens/Compose/BeatDivisorControl.cs +++ b/osu.Game/Screens/Edit/Screens/Compose/BeatDivisorControl.cs @@ -1,9 +1,11 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using System; using System.Linq; using osu.Framework.Allocation; using osu.Framework.Configuration; +using osu.Framework.Extensions.Color4Extensions; using osu.Framework.Graphics; using osu.Framework.Graphics.Colour; using osu.Framework.Graphics.Containers; @@ -219,6 +221,7 @@ namespace osu.Game.Screens.Edit.Screens.Compose protected override void UpdateValue(float value) { + } protected override bool OnMouseDown(InputState state, MouseDownEventArgs args) @@ -256,7 +259,8 @@ namespace osu.Game.Screens.Edit.Screens.Compose OnUserChange(); } - private float getTickPosition(float divisor) => (divisor - 1) / availableDivisors.Last(); + private float getTickPosition(float divisor) => (float)Math.Pow((divisor - 1) / availableDivisors.Last(), 0.90f); + private class Tick : CompositeDrawable { @@ -276,12 +280,18 @@ namespace osu.Game.Screens.Edit.Screens.Compose [BackgroundDependencyLoader] private void load(OsuColour colours) { + Color4 colour; + if (divisor >= 16) - Colour = colours.Red; - else if (divisor >= 8) - Colour = colours.Yellow; + colour = colours.Red; + else if (divisor >= 12) + colour = colours.YellowDarker; + else if (divisor % 3 == 0) + colour = colours.Yellow; else - Colour = OsuColour.Gray(2f / divisor); + colour = Color4.White; + +s Colour = colour.Opacity((float)Math.Pow(0.98f, divisor * 1.2f)); } } From 8ac660b0c6ef4c6c1fb0906f9a7ed5d731adc2b5 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Tue, 20 Mar 2018 22:25:15 +0900 Subject: [PATCH 489/544] Fixes for keyboard handling and general code quality --- .../Screens/Compose/BeatDivisorControl.cs | 55 +++++++++++-------- .../Screens/Compose/BindableBeatDivisor.cs | 22 +------- 2 files changed, 35 insertions(+), 42 deletions(-) diff --git a/osu.Game/Screens/Edit/Screens/Compose/BeatDivisorControl.cs b/osu.Game/Screens/Edit/Screens/Compose/BeatDivisorControl.cs index 64f77a2dea..5d2991ca7d 100644 --- a/osu.Game/Screens/Edit/Screens/Compose/BeatDivisorControl.cs +++ b/osu.Game/Screens/Edit/Screens/Compose/BeatDivisorControl.cs @@ -17,6 +17,7 @@ using osu.Game.Graphics; using osu.Game.Graphics.UserInterface; using OpenTK; using OpenTK.Graphics; +using OpenTK.Input; namespace osu.Game.Screens.Edit.Screens.Compose { @@ -24,8 +25,6 @@ namespace osu.Game.Screens.Edit.Screens.Compose { private readonly BindableBeatDivisor beatDivisor = new BindableBeatDivisor(); private int currentDivisorIndex; - private TickSliderBar slider; - public BeatDivisorControl(BindableBeatDivisor beatDivisor) { this.beatDivisor.BindTo(beatDivisor); @@ -52,10 +51,9 @@ namespace osu.Game.Screens.Edit.Screens.Compose { new Drawable[] { - slider = new TickSliderBar(beatDivisor, 1, 2, 3, 4, 6, 8, 12, 16) + new TickSliderBar(beatDivisor, 1, 2, 3, 4, 6, 8, 12, 16) { RelativeSizeAxes = Axes.Both, - Padding = new MarginPadding { Horizontal = 5 } } }, new Drawable[] @@ -122,8 +120,6 @@ namespace osu.Game.Screens.Edit.Screens.Compose } } }; - - slider.Current.BindTo(beatDivisor); } private class DivisorText : SpriteText @@ -180,18 +176,17 @@ namespace osu.Game.Screens.Edit.Screens.Compose private class TickSliderBar : SliderBar { - public new MarginPadding Padding - { - set => base.Padding = value; - } - private Marker marker; + private readonly BindableBeatDivisor beatDivisor; private readonly int[] availableDivisors; - public TickSliderBar(params int[] divisors) + public TickSliderBar(BindableBeatDivisor beatDivisor, params int[] divisors) { + CurrentNumber.BindTo(this.beatDivisor = beatDivisor); availableDivisors = divisors; + + Padding = new MarginPadding { Horizontal = 5 }; } [BackgroundDependencyLoader] @@ -204,7 +199,7 @@ namespace osu.Game.Screens.Edit.Screens.Compose Anchor = Anchor.TopLeft, Origin = Anchor.TopCentre, RelativePositionAxes = Axes.X, - X = getTickPosition(t) + X = getMappedPosition(t) }); } @@ -212,16 +207,33 @@ namespace osu.Game.Screens.Edit.Screens.Compose CurrentNumber.ValueChanged += v => { - marker.MoveToX(getTickPosition(v), 100, Easing.OutQuint); + marker.MoveToX(getMappedPosition(v), 100, Easing.OutQuint); marker.Flash(); - - KeyboardStep = v / 3f; }; } protected override void UpdateValue(float value) { + } + protected override bool OnKeyDown(InputState state, KeyDownEventArgs args) + { + if (!IsHovered || CurrentNumber.Disabled) + return false; + + switch (args.Key) + { + case Key.Right: + beatDivisor.Next(); + OnUserChange(); + return true; + case Key.Left: + beatDivisor.Previous(); + OnUserChange(); + return true; + default: + return false; + } } protected override bool OnMouseDown(InputState state, MouseDownEventArgs args) @@ -251,16 +263,13 @@ namespace osu.Game.Screens.Edit.Screens.Compose private void handleMouseInput(InputState state) { // copied from SliderBar so we can do custom spacing logic. - var xPosition = ToLocalSpace(state?.Mouse.NativeState.Position ?? Vector2.Zero).X - RangePadding; - - if (!CurrentNumber.Disabled) - CurrentNumber.SetProportional(xPosition / UsableWidth, state != null && state.Keyboard.ShiftPressed ? KeyboardStep : 0); + var xPosition = (ToLocalSpace(state?.Mouse.NativeState.Position ?? Vector2.Zero).X - RangePadding) / UsableWidth; + CurrentNumber.Value = availableDivisors.OrderBy(d => Math.Abs(getMappedPosition(d) - xPosition)).First(); OnUserChange(); } - private float getTickPosition(float divisor) => (float)Math.Pow((divisor - 1) / availableDivisors.Last(), 0.90f); - + private float getMappedPosition(float divisor) => (float)Math.Pow((divisor - 1) / (availableDivisors.Last() - 1), 0.90f); private class Tick : CompositeDrawable { @@ -291,7 +300,7 @@ namespace osu.Game.Screens.Edit.Screens.Compose else colour = Color4.White; -s Colour = colour.Opacity((float)Math.Pow(0.98f, divisor * 1.2f)); + Colour = colour.Opacity((float)Math.Pow(0.98f, divisor * 1.2f)); } } diff --git a/osu.Game/Screens/Edit/Screens/Compose/BindableBeatDivisor.cs b/osu.Game/Screens/Edit/Screens/Compose/BindableBeatDivisor.cs index 090f278f39..8eb3f1347e 100644 --- a/osu.Game/Screens/Edit/Screens/Compose/BindableBeatDivisor.cs +++ b/osu.Game/Screens/Edit/Screens/Compose/BindableBeatDivisor.cs @@ -25,26 +25,10 @@ namespace osu.Game.Screens.Edit.Screens.Compose get { return base.Value; } set { - int snapped = 1; + if (!VALID_DIVISORS.Contains(value)) + throw new ArgumentOutOfRangeException($"Provided divisor is not in {nameof(VALID_DIVISORS)}"); - for (int i = 1; i < VALID_DIVISORS.Length; i++) - { - var curr = VALID_DIVISORS[i]; - var prev = VALID_DIVISORS[i - 1]; - if (value < prev + (curr - prev) / 2f) - { - snapped = prev; - break; - } - - snapped = curr; - } - - if (snapped == Value) - // it may be that we are already at the snapped value, but we want bound components to still be made aware that we possibly modified an incoming ValueChanged. - TriggerValueChange(); - else - base.Value = snapped; + base.Value = value; } } From ccdd11d7b22be419ab34230150c342e4e1550c08 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 21 Mar 2018 12:29:44 +0900 Subject: [PATCH 490/544] Add missing licence header --- osu.Game/Graphics/ScreenshotManager.cs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/osu.Game/Graphics/ScreenshotManager.cs b/osu.Game/Graphics/ScreenshotManager.cs index 8028b744c9..3dc4fec63a 100644 --- a/osu.Game/Graphics/ScreenshotManager.cs +++ b/osu.Game/Graphics/ScreenshotManager.cs @@ -1,4 +1,7 @@ -using System; +// Copyright (c) 2007-2018 ppy Pty Ltd . +// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE + +using System; using System.Drawing.Imaging; using System.IO; using osu.Framework.Allocation; @@ -43,7 +46,10 @@ namespace osu.Game.Graphics return false; } - public bool OnReleased(GlobalAction action) => false; + public bool OnReleased(GlobalAction action) + { + return false; + } public async void TakeScreenshotAsync() { From 357a3c535e95c37387d08e6936451c0e3c683a9d Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 21 Mar 2018 12:29:49 +0900 Subject: [PATCH 491/544] Update framework --- osu-framework | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu-framework b/osu-framework index d29c8365ba..140f9c4ccf 160000 --- a/osu-framework +++ b/osu-framework @@ -1 +1 @@ -Subproject commit d29c8365ba3cf7924b57cf22341f4af55658764c +Subproject commit 140f9c4ccfc8a6ea464ee29ebfb4f6fdc66b0db7 From 63f0419d6a897e51fd5513d8df145a4044cc03f1 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 21 Mar 2018 15:40:43 +0900 Subject: [PATCH 492/544] Apply minor fixes --- .../Screens/Edit/Screens/Compose/BeatDivisorControl.cs | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/osu.Game/Screens/Edit/Screens/Compose/BeatDivisorControl.cs b/osu.Game/Screens/Edit/Screens/Compose/BeatDivisorControl.cs index 5d2991ca7d..9fc5896ccd 100644 --- a/osu.Game/Screens/Edit/Screens/Compose/BeatDivisorControl.cs +++ b/osu.Game/Screens/Edit/Screens/Compose/BeatDivisorControl.cs @@ -51,7 +51,7 @@ namespace osu.Game.Screens.Edit.Screens.Compose { new Drawable[] { - new TickSliderBar(beatDivisor, 1, 2, 3, 4, 6, 8, 12, 16) + new TickSliderBar(beatDivisor, BindableBeatDivisor.VALID_DIVISORS) { RelativeSizeAxes = Axes.Both, } @@ -216,11 +216,10 @@ namespace osu.Game.Screens.Edit.Screens.Compose { } + public override bool HandleKeyboardInput => IsHovered && !CurrentNumber.Disabled; + protected override bool OnKeyDown(InputState state, KeyDownEventArgs args) { - if (!IsHovered || CurrentNumber.Disabled) - return false; - switch (args.Key) { case Key.Right: From 48142602eae923225e8402c1b3cb6e91347b6edc Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 21 Mar 2018 16:04:43 +0900 Subject: [PATCH 493/544] Adjust text size to match design --- .../Screens/Compose/BeatDivisorControl.cs | 40 +++++++++++++------ 1 file changed, 27 insertions(+), 13 deletions(-) diff --git a/osu.Game/Screens/Edit/Screens/Compose/BeatDivisorControl.cs b/osu.Game/Screens/Edit/Screens/Compose/BeatDivisorControl.cs index 9fc5896ccd..adeb6c7789 100644 --- a/osu.Game/Screens/Edit/Screens/Compose/BeatDivisorControl.cs +++ b/osu.Game/Screens/Edit/Screens/Compose/BeatDivisorControl.cs @@ -25,6 +25,7 @@ namespace osu.Game.Screens.Edit.Screens.Compose { private readonly BindableBeatDivisor beatDivisor = new BindableBeatDivisor(); private int currentDivisorIndex; + public BeatDivisorControl(BindableBeatDivisor beatDivisor) { this.beatDivisor.BindTo(beatDivisor); @@ -40,9 +41,9 @@ namespace osu.Game.Screens.Edit.Screens.Compose { new Box { - Name = "Background", + Name = "Gray Background", RelativeSizeAxes = Axes.Both, - Colour = Color4.Black + Colour = colours.Gray4 }, new GridContainer { @@ -51,9 +52,22 @@ namespace osu.Game.Screens.Edit.Screens.Compose { new Drawable[] { - new TickSliderBar(beatDivisor, BindableBeatDivisor.VALID_DIVISORS) + new Container { RelativeSizeAxes = Axes.Both, + Children = new Drawable[] + { + new Box + { + Name = "Black Background", + RelativeSizeAxes = Axes.Both, + Colour = Color4.Black + }, + new TickSliderBar(beatDivisor, BindableBeatDivisor.VALID_DIVISORS) + { + RelativeSizeAxes = Axes.Both, + } + } } }, new Drawable[] @@ -91,16 +105,6 @@ namespace osu.Game.Screens.Edit.Screens.Compose Action = beatDivisor.Next } }, - new Drawable[] - { - null, - new TextFlowContainer(s => s.TextSize = 10) - { - Text = "beat snap divisor", - RelativeSizeAxes = Axes.X, - TextAnchor = Anchor.TopCentre - }, - }, }, ColumnDimensions = new[] { @@ -113,6 +117,16 @@ namespace osu.Game.Screens.Edit.Screens.Compose } } }, + new Drawable[] + { + new TextFlowContainer(s => s.TextSize = 14) + { + Padding = new MarginPadding { Horizontal = 15 }, + Text = "beat snap divisor", + RelativeSizeAxes = Axes.X, + TextAnchor = Anchor.TopCentre + }, + } }, RowDimensions = new[] { From 271c0826062349ae550a6ea3447472484541ae5b Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 21 Mar 2018 16:17:09 +0900 Subject: [PATCH 494/544] Adjust colour assignment --- .../Screens/Compose/BeatDivisorControl.cs | 36 ++++++++++++------- 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/osu.Game/Screens/Edit/Screens/Compose/BeatDivisorControl.cs b/osu.Game/Screens/Edit/Screens/Compose/BeatDivisorControl.cs index adeb6c7789..796bfd96c4 100644 --- a/osu.Game/Screens/Edit/Screens/Compose/BeatDivisorControl.cs +++ b/osu.Game/Screens/Edit/Screens/Compose/BeatDivisorControl.cs @@ -302,18 +302,30 @@ namespace osu.Game.Screens.Edit.Screens.Compose [BackgroundDependencyLoader] private void load(OsuColour colours) { - Color4 colour; + Colour = getColourForDivisor(divisor, colours); + } - if (divisor >= 16) - colour = colours.Red; - else if (divisor >= 12) - colour = colours.YellowDarker; - else if (divisor % 3 == 0) - colour = colours.Yellow; - else - colour = Color4.White; - - Colour = colour.Opacity((float)Math.Pow(0.98f, divisor * 1.2f)); + private ColourInfo getColourForDivisor(int divisor, OsuColour colours) + { + switch (divisor) + { + case 2: + return colours.BlueLight; + case 4: + return colours.Blue; + case 8: + return colours.BlueDarker; + case 16: + return colours.PurpleDark; + case 3: + return colours.YellowLight; + case 6: + return colours.Yellow; + case 12: + return colours.YellowDarker; + default: + return Color4.White; + } } } @@ -342,7 +354,7 @@ namespace osu.Game.Screens.Edit.Screens.Compose RelativeSizeAxes = Axes.Y, Origin = Anchor.BottomCentre, Anchor = Anchor.BottomCentre, - Colour = ColourInfo.GradientVertical(Color4.Transparent, Color4.White), + Colour = ColourInfo.GradientVertical(Color4.White.Opacity(0.2f), Color4.White), Blending = BlendingMode.Additive, }, new EquilateralTriangle From 65b6a2faad7437e4d14a9084b91e90e3611c4b5e Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 21 Mar 2018 18:40:45 +0900 Subject: [PATCH 495/544] Fix mod button sounds playing when mod overlay is not visible Resolves #2240. --- osu.Game/Overlays/Mods/ModButton.cs | 12 ------------ osu.Game/Overlays/Mods/ModSelectOverlay.cs | 18 +++++++++++++++++- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/osu.Game/Overlays/Mods/ModButton.cs b/osu.Game/Overlays/Mods/ModButton.cs index 91063bfa38..a4cc79bca6 100644 --- a/osu.Game/Overlays/Mods/ModButton.cs +++ b/osu.Game/Overlays/Mods/ModButton.cs @@ -4,9 +4,6 @@ using OpenTK; using OpenTK.Graphics; using OpenTK.Input; -using osu.Framework.Allocation; -using osu.Framework.Audio; -using osu.Framework.Audio.Sample; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Sprites; @@ -30,7 +27,6 @@ namespace osu.Game.Overlays.Mods private ModIcon backgroundIcon; private readonly SpriteText text; private readonly Container iconsContainer; - private SampleChannel sampleOn, sampleOff; /// /// Fired when the selection changes. @@ -100,7 +96,6 @@ namespace osu.Game.Overlays.Mods foregroundIcon.Highlighted = Selected; - (selectedIndex == -1 ? sampleOff : sampleOn).Play(); SelectionChanged?.Invoke(SelectedMod); return true; } @@ -152,13 +147,6 @@ namespace osu.Game.Overlays.Mods public virtual Mod SelectedMod => Mods.ElementAtOrDefault(selectedIndex); - [BackgroundDependencyLoader] - private void load(AudioManager audio) - { - sampleOn = audio.Sample.Get(@"UI/check-on"); - sampleOff = audio.Sample.Get(@"UI/check-off"); - } - protected override bool OnMouseDown(InputState state, MouseDownEventArgs args) { switch (args.Button) diff --git a/osu.Game/Overlays/Mods/ModSelectOverlay.cs b/osu.Game/Overlays/Mods/ModSelectOverlay.cs index fe7b7bae99..d8c95da94f 100644 --- a/osu.Game/Overlays/Mods/ModSelectOverlay.cs +++ b/osu.Game/Overlays/Mods/ModSelectOverlay.cs @@ -15,6 +15,8 @@ using osu.Game.Rulesets.Mods; using System; using System.Collections.Generic; using System.Linq; +using osu.Framework.Audio; +using osu.Framework.Audio.Sample; using osu.Framework.Graphics.Shapes; using osu.Game.Rulesets; using osu.Game.Graphics.UserInterface; @@ -49,7 +51,7 @@ namespace osu.Game.Overlays.Mods } [BackgroundDependencyLoader(permitNulls: true)] - private void load(OsuColour colours, OsuGame osu, RulesetStore rulesets) + private void load(OsuColour colours, OsuGame osu, RulesetStore rulesets, AudioManager audio) { SelectedMods.ValueChanged += selectedModsChanged; @@ -63,6 +65,9 @@ namespace osu.Game.Overlays.Mods Ruleset.ValueChanged += rulesetChanged; Ruleset.TriggerChange(); + + sampleOn = audio.Sample.Get(@"UI/check-on"); + sampleOff = audio.Sample.Get(@"UI/check-off"); } protected override void Dispose(bool isDisposing) @@ -154,10 +159,21 @@ namespace osu.Game.Overlays.Mods section.DeselectTypes(modTypes, immediate); } + + private SampleChannel sampleOn, sampleOff; + private void modButtonPressed(Mod selectedMod) { if (selectedMod != null) + { + if (State == Visibility.Visible) sampleOn?.Play(); DeselectTypes(selectedMod.IncompatibleMods, true); + } + else + { + if (State == Visibility.Visible) sampleOff?.Play(); + } + refreshSelectedMods(); } From d909cce8d6b1f5e47da00d762d795c701b28e4af Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 21 Mar 2018 20:06:10 +0900 Subject: [PATCH 496/544] Add the ability to skin the gameplay cursor --- .../UI/Cursor/GameplayCursor.cs | 117 +++++++++--------- 1 file changed, 59 insertions(+), 58 deletions(-) diff --git a/osu.Game.Rulesets.Osu/UI/Cursor/GameplayCursor.cs b/osu.Game.Rulesets.Osu/UI/Cursor/GameplayCursor.cs index 34940a084a..ac81d93309 100644 --- a/osu.Game.Rulesets.Osu/UI/Cursor/GameplayCursor.cs +++ b/osu.Game.Rulesets.Osu/UI/Cursor/GameplayCursor.cs @@ -11,6 +11,7 @@ using osu.Framework.Graphics.Shapes; using osu.Framework.Input.Bindings; using osu.Game.Beatmaps; using osu.Game.Configuration; +using osu.Game.Skinning; using OpenTK; using OpenTK.Graphics; @@ -82,7 +83,7 @@ namespace osu.Game.Rulesets.Osu.UI.Cursor public class OsuCursor : Container { - private Container cursorContainer; + private Drawable cursorContainer; private Bindable cursorScale; private Bindable autoCursorScale; @@ -97,66 +98,66 @@ namespace osu.Game.Rulesets.Osu.UI.Cursor [BackgroundDependencyLoader] private void load(OsuConfigManager config, OsuGameBase game) { - Children = new Drawable[] + Child = cursorContainer = new SkinnableDrawable("cursor", _ => new CircularContainer { - cursorContainer = new CircularContainer + RelativeSizeAxes = Axes.Both, + Masking = true, + BorderThickness = Size.X / 6, + BorderColour = Color4.White, + EdgeEffect = new EdgeEffectParameters { - Origin = Anchor.Centre, - Anchor = Anchor.Centre, - RelativeSizeAxes = Axes.Both, - Masking = true, - BorderThickness = Size.X / 6, - BorderColour = Color4.White, - EdgeEffect = new EdgeEffectParameters - { - Type = EdgeEffectType.Shadow, - Colour = Color4.Pink.Opacity(0.5f), - Radius = 5, - }, - Children = new Drawable[] - { - new Box - { - RelativeSizeAxes = Axes.Both, - Alpha = 0, - AlwaysPresent = true, - }, - new CircularContainer - { - Origin = Anchor.Centre, - Anchor = Anchor.Centre, - RelativeSizeAxes = Axes.Both, - Masking = true, - BorderThickness = Size.X / 3, - BorderColour = Color4.White.Opacity(0.5f), - Children = new Drawable[] - { - new Box - { - RelativeSizeAxes = Axes.Both, - Alpha = 0, - AlwaysPresent = true, - }, - }, - }, - new CircularContainer - { - Origin = Anchor.Centre, - Anchor = Anchor.Centre, - RelativeSizeAxes = Axes.Both, - Scale = new Vector2(0.1f), - Masking = true, - Children = new Drawable[] - { - new Box - { - RelativeSizeAxes = Axes.Both, - Colour = Color4.White, - }, - }, - }, - } + Type = EdgeEffectType.Shadow, + Colour = Color4.Pink.Opacity(0.5f), + Radius = 5, }, + Children = new Drawable[] + { + new Box + { + RelativeSizeAxes = Axes.Both, + Alpha = 0, + AlwaysPresent = true, + }, + new CircularContainer + { + Origin = Anchor.Centre, + Anchor = Anchor.Centre, + RelativeSizeAxes = Axes.Both, + Masking = true, + BorderThickness = Size.X / 3, + BorderColour = Color4.White.Opacity(0.5f), + Children = new Drawable[] + { + new Box + { + RelativeSizeAxes = Axes.Both, + Alpha = 0, + AlwaysPresent = true, + }, + }, + }, + new CircularContainer + { + Origin = Anchor.Centre, + Anchor = Anchor.Centre, + RelativeSizeAxes = Axes.Both, + Scale = new Vector2(0.1f), + Masking = true, + Children = new Drawable[] + { + new Box + { + RelativeSizeAxes = Axes.Both, + Colour = Color4.White, + }, + }, + }, + } + }, restrictSize: false) + { + Origin = Anchor.Centre, + Anchor = Anchor.Centre, + RelativeSizeAxes = Axes.Both, }; beatmap = game.Beatmap.GetBoundCopy(); From 4a93abcc36c9ec8e108892c0f3f257a66e6ffce0 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 21 Mar 2018 20:06:36 +0900 Subject: [PATCH 497/544] Add scale adjusts to bring legacy skins in-line with lazer sizing --- osu.Game/Skinning/LegacySkin.cs | 20 +++++++++++++++++--- osu.Game/Skinning/SkinnableDrawable.cs | 1 + 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/osu.Game/Skinning/LegacySkin.cs b/osu.Game/Skinning/LegacySkin.cs index c543537f32..a361fa2b8a 100644 --- a/osu.Game/Skinning/LegacySkin.cs +++ b/osu.Game/Skinning/LegacySkin.cs @@ -11,6 +11,7 @@ using osu.Framework.Graphics.Sprites; using osu.Framework.Graphics.Textures; using osu.Framework.IO.Stores; using osu.Game.Database; +using OpenTK; namespace osu.Game.Skinning { @@ -35,7 +36,8 @@ namespace osu.Game.Skinning Configuration = new SkinConfiguration(); } - protected LegacySkin(SkinInfo skin) : base(skin) + protected LegacySkin(SkinInfo skin) + : base(skin) { } @@ -57,10 +59,22 @@ namespace osu.Game.Skinning break; } - var texture = GetTexture(componentName); + float ratio = 0.72f; // brings sizing roughly in-line with stable + + var texture = GetTexture($"{componentName}@2x"); + if (texture == null) + { + ratio *= 2; + GetTexture(componentName); + } + if (texture == null) return null; - return new Sprite { Texture = texture }; + return new Sprite + { + Texture = texture, + Scale = new Vector2(ratio), + }; } public override Texture GetTexture(string componentName) => Textures.Get(componentName); diff --git a/osu.Game/Skinning/SkinnableDrawable.cs b/osu.Game/Skinning/SkinnableDrawable.cs index 9314d16c39..09d2e6a3ed 100644 --- a/osu.Game/Skinning/SkinnableDrawable.cs +++ b/osu.Game/Skinning/SkinnableDrawable.cs @@ -49,6 +49,7 @@ namespace osu.Game.Skinning { drawable.RelativeSizeAxes = Axes.Both; drawable.Size = Vector2.One; + drawable.Scale = Vector2.One; drawable.FillMode = FillMode.Fit; } } From e67d8e13541c388310389a3057cf0bb134e09994 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Wed, 21 Mar 2018 22:31:52 +0900 Subject: [PATCH 498/544] Update nuspec to include humanizer localisations --- osu.Desktop/osu.nuspec | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/osu.Desktop/osu.nuspec b/osu.Desktop/osu.nuspec index bb7d382cee..316a5443ef 100644 --- a/osu.Desktop/osu.nuspec +++ b/osu.Desktop/osu.nuspec @@ -16,11 +16,9 @@ en-AU - - - - - + + + From 62229300c4b398967ea6df6953bddfe9d9102f46 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 22 Mar 2018 00:10:49 +0900 Subject: [PATCH 499/544] Fix DummyRuleset getting selected Resolves #2261. --- osu.Game/Screens/Select/SongSelect.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/osu.Game/Screens/Select/SongSelect.cs b/osu.Game/Screens/Select/SongSelect.cs index ca8a1cae41..f01616ade2 100644 --- a/osu.Game/Screens/Select/SongSelect.cs +++ b/osu.Game/Screens/Select/SongSelect.cs @@ -259,6 +259,8 @@ namespace osu.Game.Screens.Select private void workingBeatmapChanged(WorkingBeatmap beatmap) { + if (beatmap is DummyWorkingBeatmap) return; + if (IsCurrentScreen && !Carousel.SelectBeatmap(beatmap?.BeatmapInfo, false)) // If selecting new beatmap without bypassing filters failed, there's possibly a ruleset mismatch if (beatmap?.BeatmapInfo?.Ruleset != null && beatmap.BeatmapInfo.Ruleset != Ruleset.Value) From 4991f2ad2e28ea4bcb295b8da4518a1ffd6e8355 Mon Sep 17 00:00:00 2001 From: TocoToucan Date: Wed, 21 Mar 2018 18:27:08 +0300 Subject: [PATCH 500/544] Change filename format --- osu.Game/Graphics/ScreenshotManager.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/osu.Game/Graphics/ScreenshotManager.cs b/osu.Game/Graphics/ScreenshotManager.cs index 3dc4fec63a..4c9e9756df 100644 --- a/osu.Game/Graphics/ScreenshotManager.cs +++ b/osu.Game/Graphics/ScreenshotManager.cs @@ -76,15 +76,16 @@ namespace osu.Game.Graphics private string getFileName() { + var dt = DateTime.Now; var fileExt = screenshotFormat.ToString().ToLower(); - var withoutIndex = $"Screenshot.{fileExt}"; + var withoutIndex = $"osu_{dt:yyyy-MM-dd_HH-mm-ss}.{fileExt}"; if (!storage.Exists(withoutIndex)) return withoutIndex; for (ulong i = 1; i < ulong.MaxValue; i++) { - var indexedName = $"Screenshot-{i}.{fileExt}"; + var indexedName = $"osu_{dt:yyyy-MM-dd_HH-mm-ss}-{i}.{fileExt}"; if (!storage.Exists(indexedName)) return indexedName; } From 8f71d53c17c696a160a482d64a4f61e59635fda5 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 22 Mar 2018 02:10:31 +0900 Subject: [PATCH 501/544] Fix retry not allowing continuing beyond PlayerLoader Resolves #2265. --- osu.Game/Screens/Play/PlayerLoader.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/osu.Game/Screens/Play/PlayerLoader.cs b/osu.Game/Screens/Play/PlayerLoader.cs index 31e7313c0b..ca36689b76 100644 --- a/osu.Game/Screens/Play/PlayerLoader.cs +++ b/osu.Game/Screens/Play/PlayerLoader.cs @@ -149,6 +149,7 @@ namespace osu.Game.Screens.Play pushDebounce = Scheduler.AddDelayed(() => { + pushDebounce = null; contentOut(); this.Delay(250).Schedule(() => From e0b74a357ab0fcc2c24647338014db2915de4e6a Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 22 Mar 2018 03:30:14 +0900 Subject: [PATCH 502/544] Fix osu! logo making hover beat sounds when not visible --- osu.Game/Screens/Menu/OsuLogo.cs | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/osu.Game/Screens/Menu/OsuLogo.cs b/osu.Game/Screens/Menu/OsuLogo.cs index 3fcb885655..b7d2ed2e1f 100644 --- a/osu.Game/Screens/Menu/OsuLogo.cs +++ b/osu.Game/Screens/Menu/OsuLogo.cs @@ -337,12 +337,10 @@ namespace osu.Game.Screens.Menu } } - private bool interactive => Action != null && Alpha > 0.2f; + public override bool HandleMouseInput => base.HandleMouseInput && Action != null && Alpha > 0.2f; protected override bool OnMouseDown(InputState state, MouseDownEventArgs args) { - if (!interactive) return false; - logoBounceContainer.ScaleTo(0.9f, 1000, Easing.Out); return true; } @@ -355,8 +353,6 @@ namespace osu.Game.Screens.Menu protected override bool OnClick(InputState state) { - if (!interactive) return false; - if (Action?.Invoke() ?? true) sampleClick.Play(); @@ -368,8 +364,6 @@ namespace osu.Game.Screens.Menu protected override bool OnHover(InputState state) { - if (!interactive) return false; - logoHoverContainer.ScaleTo(1.1f, 500, Easing.OutElastic); return true; } From 101caf3064de36bf379f59adacdc102e54744935 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 22 Mar 2018 11:28:40 +0900 Subject: [PATCH 503/544] Apply same logic fixes to delete/restore all notifications --- osu.Game/Database/ArchiveModelManager.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/osu.Game/Database/ArchiveModelManager.cs b/osu.Game/Database/ArchiveModelManager.cs index 78bf46eb69..f781beb443 100644 --- a/osu.Game/Database/ArchiveModelManager.cs +++ b/osu.Game/Database/ArchiveModelManager.cs @@ -220,8 +220,8 @@ namespace osu.Game.Database // user requested abort return; - notification.Text = $"Deleting ({i} of {items.Count})"; - notification.Progress = (float)++i / items.Count; + notification.Progress = (float)i / items.Count; + notification.Text = $"Deleting ({++i} of {items.Count})"; Delete(b); } } @@ -256,8 +256,8 @@ namespace osu.Game.Database // user requested abort return; - notification.Text = $"Restoring ({i} of {items.Count})"; - notification.Progress = (float)++i / items.Count; + notification.Progress = (float)i / items.Count; + notification.Text = $"Restoring ({++i} of {items.Count})"; Undelete(item); } } From 1a782a840cd15d5be3a1192e479d99be111c7692 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 22 Mar 2018 12:34:29 +0900 Subject: [PATCH 504/544] Fix xmldoc --- osu.Game/Rulesets/Objects/Types/IHasComboIndex.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game/Rulesets/Objects/Types/IHasComboIndex.cs b/osu.Game/Rulesets/Objects/Types/IHasComboIndex.cs index 68474a6e2c..dae10e4552 100644 --- a/osu.Game/Rulesets/Objects/Types/IHasComboIndex.cs +++ b/osu.Game/Rulesets/Objects/Types/IHasComboIndex.cs @@ -14,7 +14,7 @@ namespace osu.Game.Rulesets.Objects.Types int IndexInCurrentCombo { get; set; } /// - /// The offset of this hitobject in the current combo. + /// The offset of this combo in relation to the beatmap. /// int ComboIndex { get; set; } From 78a8f60b39114518f65483e47557da6625e0f22a Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 22 Mar 2018 12:35:17 +0900 Subject: [PATCH 505/544] IHasComboIndex -> IHasComboInformation --- osu.Game.Rulesets.Catch/Objects/CatchHitObject.cs | 2 +- osu.Game.Rulesets.Osu/Objects/OsuHitObject.cs | 2 +- osu.Game/Beatmaps/BeatmapProcessor.cs | 4 ++-- .../Types/{IHasComboIndex.cs => IHasComboInformation.cs} | 2 +- osu.Game/osu.Game.csproj | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) rename osu.Game/Rulesets/Objects/Types/{IHasComboIndex.cs => IHasComboInformation.cs} (91%) diff --git a/osu.Game.Rulesets.Catch/Objects/CatchHitObject.cs b/osu.Game.Rulesets.Catch/Objects/CatchHitObject.cs index a6ab18bbf7..1a0ccc9b1e 100644 --- a/osu.Game.Rulesets.Catch/Objects/CatchHitObject.cs +++ b/osu.Game.Rulesets.Catch/Objects/CatchHitObject.cs @@ -8,7 +8,7 @@ using osu.Game.Rulesets.Objects.Types; namespace osu.Game.Rulesets.Catch.Objects { - public abstract class CatchHitObject : HitObject, IHasXPosition, IHasComboIndex + public abstract class CatchHitObject : HitObject, IHasXPosition, IHasComboInformation { public const double OBJECT_RADIUS = 44; diff --git a/osu.Game.Rulesets.Osu/Objects/OsuHitObject.cs b/osu.Game.Rulesets.Osu/Objects/OsuHitObject.cs index 5d1908fa6e..c00c30ced9 100644 --- a/osu.Game.Rulesets.Osu/Objects/OsuHitObject.cs +++ b/osu.Game.Rulesets.Osu/Objects/OsuHitObject.cs @@ -10,7 +10,7 @@ using osu.Game.Beatmaps.ControlPoints; namespace osu.Game.Rulesets.Osu.Objects { - public abstract class OsuHitObject : HitObject, IHasComboIndex, IHasPosition + public abstract class OsuHitObject : HitObject, IHasComboInformation, IHasPosition { public const double OBJECT_RADIUS = 64; diff --git a/osu.Game/Beatmaps/BeatmapProcessor.cs b/osu.Game/Beatmaps/BeatmapProcessor.cs index 83b2867df7..f2cc419043 100644 --- a/osu.Game/Beatmaps/BeatmapProcessor.cs +++ b/osu.Game/Beatmaps/BeatmapProcessor.cs @@ -23,9 +23,9 @@ namespace osu.Game.Beatmaps /// The Beatmap to process. public virtual void PostProcess(Beatmap beatmap) { - IHasComboIndex lastObj = null; + IHasComboInformation lastObj = null; - foreach (var obj in beatmap.HitObjects.OfType()) + foreach (var obj in beatmap.HitObjects.OfType()) { if (obj.NewCombo) { diff --git a/osu.Game/Rulesets/Objects/Types/IHasComboIndex.cs b/osu.Game/Rulesets/Objects/Types/IHasComboInformation.cs similarity index 91% rename from osu.Game/Rulesets/Objects/Types/IHasComboIndex.cs rename to osu.Game/Rulesets/Objects/Types/IHasComboInformation.cs index dae10e4552..1d4f4e0f90 100644 --- a/osu.Game/Rulesets/Objects/Types/IHasComboIndex.cs +++ b/osu.Game/Rulesets/Objects/Types/IHasComboInformation.cs @@ -6,7 +6,7 @@ namespace osu.Game.Rulesets.Objects.Types /// /// A HitObject that is part of a combo and has extended information about its position relative to other combo objects. /// - public interface IHasComboIndex : IHasCombo + public interface IHasComboInformation : IHasCombo { /// /// The offset of this hitobject in the current combo. diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index 5ece1a18ac..19914bb5cb 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -374,7 +374,7 @@ - + From c5eecae32fb7da44ccac7a921bb07398bad4f80b Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 22 Mar 2018 12:50:23 +0900 Subject: [PATCH 506/544] Improve shared code paths in legacy skins --- osu.Game/Skinning/BeatmapSkin.cs | 19 ++++--------------- osu.Game/Skinning/LegacySkin.cs | 15 +++++++-------- 2 files changed, 11 insertions(+), 23 deletions(-) diff --git a/osu.Game/Skinning/BeatmapSkin.cs b/osu.Game/Skinning/BeatmapSkin.cs index 815aac2f64..02278aa31e 100644 --- a/osu.Game/Skinning/BeatmapSkin.cs +++ b/osu.Game/Skinning/BeatmapSkin.cs @@ -1,9 +1,7 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE -using System.IO; using osu.Framework.Audio; -using osu.Framework.Graphics.Textures; using osu.Framework.IO.Stores; using osu.Game.Beatmaps; @@ -12,20 +10,11 @@ namespace osu.Game.Skinning public class BeatmapSkin : LegacySkin { public BeatmapSkin(BeatmapInfo beatmap, IResourceStore storage, AudioManager audioManager) - : base(new SkinInfo { Name = beatmap.ToString(), Creator = beatmap.Metadata.Author.ToString() }) + : base(createSkinInfo(beatmap), new LegacySkinResourceStore(beatmap.BeatmapSet, storage), audioManager, beatmap.Path) { - storage = new LegacySkinResourceStore(beatmap.BeatmapSet, storage); - - Samples = audioManager.GetSampleManager(storage); - - Textures = new TextureStore(new RawTextureLoaderStore(storage)); - - var decoder = new LegacySkinDecoder(); - - using (StreamReader reader = new StreamReader(storage.GetStream(beatmap.Path))) - { - Configuration = decoder.Decode(reader); - } } + + private static SkinInfo createSkinInfo(BeatmapInfo beatmap) => + new SkinInfo { Name = beatmap.ToString(), Creator = beatmap.Metadata.Author.ToString() }; } } diff --git a/osu.Game/Skinning/LegacySkin.cs b/osu.Game/Skinning/LegacySkin.cs index cfee2cfab2..64f65cd08c 100644 --- a/osu.Game/Skinning/LegacySkin.cs +++ b/osu.Game/Skinning/LegacySkin.cs @@ -21,22 +21,21 @@ namespace osu.Game.Skinning protected SampleManager Samples; public LegacySkin(SkinInfo skin, IResourceStore storage, AudioManager audioManager) - : this(skin) + : this(skin, new LegacySkinResourceStore(skin, storage), audioManager, "skin.ini") { - storage = new LegacySkinResourceStore(skin, storage); - Samples = audioManager.GetSampleManager(storage); - Textures = new TextureStore(new RawTextureLoaderStore(storage)); + } - Stream stream = storage.GetStream("skin.ini"); + protected LegacySkin(SkinInfo skin, IResourceStore storage, AudioManager audioManager, string filename) : base(skin) + { + Stream stream = storage.GetStream(filename); if (stream != null) using (StreamReader reader = new StreamReader(stream)) Configuration = new LegacySkinDecoder().Decode(reader); else Configuration = new SkinConfiguration(); - } - protected LegacySkin(SkinInfo skin) : base(skin) - { + Samples = audioManager.GetSampleManager(storage); + Textures = new TextureStore(new RawTextureLoaderStore(storage)); } public override Drawable GetDrawableComponent(string componentName) From 504c3ff0baa1f71456cdc626289a2510a114ca51 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 22 Mar 2018 12:50:48 +0900 Subject: [PATCH 507/544] BeatmapSkin -> LegacyBeatmapSkin --- osu.Game/Beatmaps/BeatmapManager_WorkingBeatmap.cs | 2 +- osu.Game/Skinning/{BeatmapSkin.cs => LegacyBeatmapSkin.cs} | 4 ++-- osu.Game/osu.Game.csproj | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) rename osu.Game/Skinning/{BeatmapSkin.cs => LegacyBeatmapSkin.cs} (77%) diff --git a/osu.Game/Beatmaps/BeatmapManager_WorkingBeatmap.cs b/osu.Game/Beatmaps/BeatmapManager_WorkingBeatmap.cs index 58b51085a4..5874314f75 100644 --- a/osu.Game/Beatmaps/BeatmapManager_WorkingBeatmap.cs +++ b/osu.Game/Beatmaps/BeatmapManager_WorkingBeatmap.cs @@ -110,7 +110,7 @@ namespace osu.Game.Beatmaps Skin skin; try { - skin = new BeatmapSkin(BeatmapInfo, store, audioManager); + skin = new LegacyBeatmapSkin(BeatmapInfo, store, audioManager); } catch (Exception e) { diff --git a/osu.Game/Skinning/BeatmapSkin.cs b/osu.Game/Skinning/LegacyBeatmapSkin.cs similarity index 77% rename from osu.Game/Skinning/BeatmapSkin.cs rename to osu.Game/Skinning/LegacyBeatmapSkin.cs index 02278aa31e..01beb8db32 100644 --- a/osu.Game/Skinning/BeatmapSkin.cs +++ b/osu.Game/Skinning/LegacyBeatmapSkin.cs @@ -7,9 +7,9 @@ using osu.Game.Beatmaps; namespace osu.Game.Skinning { - public class BeatmapSkin : LegacySkin + public class LegacyBeatmapSkin : LegacySkin { - public BeatmapSkin(BeatmapInfo beatmap, IResourceStore storage, AudioManager audioManager) + public LegacyBeatmapSkin(BeatmapInfo beatmap, IResourceStore storage, AudioManager audioManager) : base(createSkinInfo(beatmap), new LegacySkinResourceStore(beatmap.BeatmapSet, storage), audioManager, beatmap.Path) { } diff --git a/osu.Game/osu.Game.csproj b/osu.Game/osu.Game.csproj index 50c272e827..3b4f46a918 100644 --- a/osu.Game/osu.Game.csproj +++ b/osu.Game/osu.Game.csproj @@ -871,7 +871,7 @@ - + From e39b7b8d354463d849de7b9d30feda00eb1a1fd4 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 22 Mar 2018 12:58:02 +0900 Subject: [PATCH 508/544] Don't hard-crash when an unknown section is encountered in a legacy file --- osu.Game/Beatmaps/Formats/LegacyDecoder.cs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/osu.Game/Beatmaps/Formats/LegacyDecoder.cs b/osu.Game/Beatmaps/Formats/LegacyDecoder.cs index 67d497ba83..131c010c5c 100644 --- a/osu.Game/Beatmaps/Formats/LegacyDecoder.cs +++ b/osu.Game/Beatmaps/Formats/LegacyDecoder.cs @@ -4,6 +4,7 @@ using System; using System.Collections.Generic; using System.IO; +using osu.Framework.Logging; using OpenTK.Graphics; namespace osu.Game.Beatmaps.Formats @@ -31,7 +32,11 @@ namespace osu.Game.Beatmaps.Formats if (line.StartsWith(@"[") && line.EndsWith(@"]")) { if (!Enum.TryParse(line.Substring(1, line.Length - 2), out section)) - throw new InvalidDataException($@"Unknown osu section {line}"); + { + Logger.Log($"Unknown section \"{line}\" in {beatmap}"); + section = Section.None; + } + continue; } From 917334a39ab3a0eda594e5178470112450e403e2 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 22 Mar 2018 13:01:40 +0900 Subject: [PATCH 509/544] Move cancel code to exit paths for screen --- osu.Game/Screens/Play/PlayerLoader.cs | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/osu.Game/Screens/Play/PlayerLoader.cs b/osu.Game/Screens/Play/PlayerLoader.cs index ca36689b76..89082cfbd5 100644 --- a/osu.Game/Screens/Play/PlayerLoader.cs +++ b/osu.Game/Screens/Play/PlayerLoader.cs @@ -139,8 +139,7 @@ namespace osu.Game.Screens.Play { // as the pushDebounce below has a delay, we need to keep checking and cancel a future debounce // if we become unready for push during the delay. - pushDebounce?.Cancel(); - pushDebounce = null; + cancelLoad(); return; } @@ -149,7 +148,6 @@ namespace osu.Game.Screens.Play pushDebounce = Scheduler.AddDelayed(() => { - pushDebounce = null; contentOut(); this.Delay(250).Schedule(() => @@ -173,10 +171,23 @@ namespace osu.Game.Screens.Play } } + private void cancelLoad() + { + pushDebounce?.Cancel(); + pushDebounce = null; + } + + protected override void OnSuspending(Screen next) + { + base.OnSuspending(next); + cancelLoad(); + } + protected override bool OnExiting(Screen next) { Content.ScaleTo(0.7f, 150, Easing.InQuint); this.FadeOut(150); + cancelLoad(); return base.OnExiting(next); } From dc9fb84e254550c0069d61a7137f80ba96bb10d8 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Thu, 22 Mar 2018 14:46:25 +0900 Subject: [PATCH 510/544] Update progress with the current item, not the next item In the case where there is no next item, the progress will not get updated, so we'll essentially skip one element from filling the progress bar further. In the future we may/will want to not hide the notification upon completion, so this will look better in such scenarios. --- osu.Game/Database/ArchiveModelManager.cs | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/osu.Game/Database/ArchiveModelManager.cs b/osu.Game/Database/ArchiveModelManager.cs index f781beb443..ef85f691d6 100644 --- a/osu.Game/Database/ArchiveModelManager.cs +++ b/osu.Game/Database/ArchiveModelManager.cs @@ -101,7 +101,7 @@ namespace osu.Game.Database using (ArchiveReader reader = getReaderFrom(path)) imported.Add(Import(reader)); - notification.Progress = (float)(current - 1) / paths.Length; + notification.Progress = (float)current / paths.Length; // We may or may not want to delete the file depending on where it is stored. // e.g. reconstructing/repairing database with items from default storage. @@ -220,9 +220,11 @@ namespace osu.Game.Database // user requested abort return; - notification.Progress = (float)i / items.Count; notification.Text = $"Deleting ({++i} of {items.Count})"; + Delete(b); + + notification.Progress = (float)i / items.Count; } } @@ -256,9 +258,11 @@ namespace osu.Game.Database // user requested abort return; - notification.Progress = (float)i / items.Count; notification.Text = $"Restoring ({++i} of {items.Count})"; + Undelete(item); + + notification.Progress = (float)i / items.Count; } } From 3f3f57e51ef6f4506666aaf9b2ca5f839b0c7acc Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Thu, 22 Mar 2018 15:13:38 +0900 Subject: [PATCH 511/544] Use cached vertexbatch add delegate --- osu.Game/Graphics/Backgrounds/Triangles.cs | 2 +- osu.Game/Screens/Menu/LogoVisualisation.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/osu.Game/Graphics/Backgrounds/Triangles.cs b/osu.Game/Graphics/Backgrounds/Triangles.cs index 6f9d83473f..89ed8044e6 100644 --- a/osu.Game/Graphics/Backgrounds/Triangles.cs +++ b/osu.Game/Graphics/Backgrounds/Triangles.cs @@ -242,7 +242,7 @@ namespace osu.Game.Graphics.Backgrounds triangle, colourInfo, null, - Shared.VertexBatch.Add, + Shared.VertexBatch.AddAction, Vector2.Divide(localInflationAmount, size)); } diff --git a/osu.Game/Screens/Menu/LogoVisualisation.cs b/osu.Game/Screens/Menu/LogoVisualisation.cs index 3a3f3d4650..fc747acbb4 100644 --- a/osu.Game/Screens/Menu/LogoVisualisation.cs +++ b/osu.Game/Screens/Menu/LogoVisualisation.cs @@ -211,7 +211,7 @@ namespace osu.Game.Screens.Menu rectangle, colourInfo, null, - Shared.VertexBatch.Add, + Shared.VertexBatch.AddAction, //barSize by itself will make it smooth more in the X axis than in the Y axis, this reverts that. Vector2.Divide(inflation, barSize.Yx)); } From 799b7caf7e969243b493d1192c2180bcea04eb93 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 22 Mar 2018 15:20:58 +0900 Subject: [PATCH 512/544] Update framework --- osu-framework | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu-framework b/osu-framework index 41e2a0a430..cc39713fbf 160000 --- a/osu-framework +++ b/osu-framework @@ -1 +1 @@ -Subproject commit 41e2a0a4304544fb67779c21cad1435c105982d5 +Subproject commit cc39713fbf9427aa53df91e27ecd09d15661089f From 4ccaf143b5408d4c2cf1d01b8c0133e27e368033 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Thu, 22 Mar 2018 15:50:19 +0900 Subject: [PATCH 513/544] Give sliders a default accent colour --- osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/SliderBody.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/SliderBody.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/SliderBody.cs index 26186a0049..c59c22c771 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/SliderBody.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/Pieces/SliderBody.cs @@ -42,7 +42,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces public double? SnakedStart { get; private set; } public double? SnakedEnd { get; private set; } - private Color4 accentColour; + private Color4 accentColour = Color4.White; /// /// Used to colour the path. /// From 6e379f0646cb531798fa24243dc3a5e273cfd72c Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 22 Mar 2018 15:54:16 +0900 Subject: [PATCH 514/544] Fix FocusedTextBox in line with framework changes --- osu.Game/Graphics/UserInterface/FocusedTextBox.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/osu.Game/Graphics/UserInterface/FocusedTextBox.cs b/osu.Game/Graphics/UserInterface/FocusedTextBox.cs index 6d9bf231c3..9ff64e5d5f 100644 --- a/osu.Game/Graphics/UserInterface/FocusedTextBox.cs +++ b/osu.Game/Graphics/UserInterface/FocusedTextBox.cs @@ -30,6 +30,8 @@ namespace osu.Game.Graphics.UserInterface } } + public override bool HandleKeyboardInput => HoldFocus || base.HandleKeyboardInput; + protected override void OnFocus(InputState state) { base.OnFocus(state); From 1b116dd04e6393b523ba4e20896ed2c44d7fd948 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 22 Mar 2018 16:11:56 +0900 Subject: [PATCH 515/544] Adjust testcase sizing to match editor --- osu.Game.Tests/Visual/TestCaseBeatDivisorControl.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/osu.Game.Tests/Visual/TestCaseBeatDivisorControl.cs b/osu.Game.Tests/Visual/TestCaseBeatDivisorControl.cs index 598c504ca1..04a662426f 100644 --- a/osu.Game.Tests/Visual/TestCaseBeatDivisorControl.cs +++ b/osu.Game.Tests/Visual/TestCaseBeatDivisorControl.cs @@ -21,8 +21,7 @@ namespace osu.Game.Tests.Visual { Anchor = Anchor.Centre, Origin = Anchor.Centre, - Y = -200, - Size = new Vector2(100, 110) + Size = new Vector2(90, 90) }; } } From dade52d15d7a1776b196d9b9e9ee7a68c70d2ce1 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 22 Mar 2018 16:15:14 +0900 Subject: [PATCH 516/544] Fix vertical padding --- osu.Game/Screens/Edit/Screens/Compose/BeatDivisorControl.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/osu.Game/Screens/Edit/Screens/Compose/BeatDivisorControl.cs b/osu.Game/Screens/Edit/Screens/Compose/BeatDivisorControl.cs index 796bfd96c4..8ba3500eea 100644 --- a/osu.Game/Screens/Edit/Screens/Compose/BeatDivisorControl.cs +++ b/osu.Game/Screens/Edit/Screens/Compose/BeatDivisorControl.cs @@ -131,6 +131,7 @@ namespace osu.Game.Screens.Edit.Screens.Compose RowDimensions = new[] { new Dimension(GridSizeMode.Absolute, 35), + new Dimension(GridSizeMode.Absolute, 25), } } }; From c4fe6a04c555574f7f844a37432aeabf32e6dd68 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 22 Mar 2018 17:32:05 +0900 Subject: [PATCH 517/544] Use string lookups for combo colours --- .../Objects/Drawables/DrawableHitObject.cs | 2 +- osu.Game/Skinning/ISkinSource.cs | 3 +-- .../Skinning/LocalSkinOverrideContainer.cs | 3 +-- osu.Game/Skinning/Skin.cs | 22 ++++++++++++++++--- osu.Game/Skinning/SkinManager.cs | 3 +-- 5 files changed, 23 insertions(+), 10 deletions(-) diff --git a/osu.Game/Rulesets/Objects/Drawables/DrawableHitObject.cs b/osu.Game/Rulesets/Objects/Drawables/DrawableHitObject.cs index 6aa7ddf787..b8852bb141 100644 --- a/osu.Game/Rulesets/Objects/Drawables/DrawableHitObject.cs +++ b/osu.Game/Rulesets/Objects/Drawables/DrawableHitObject.cs @@ -107,7 +107,7 @@ namespace osu.Game.Rulesets.Objects.Drawables base.SkinChanged(skin, allowFallback); if (HitObject is IHasComboInformation combo) - AccentColour = skin.GetComboColour(combo) ?? Color4.White; + AccentColour = skin.GetColour($"Play/Combo/{combo.ComboIndex}") ?? Color4.White; } protected override void LoadComplete() diff --git a/osu.Game/Skinning/ISkinSource.cs b/osu.Game/Skinning/ISkinSource.cs index 9911ee3a95..5292ff3cb5 100644 --- a/osu.Game/Skinning/ISkinSource.cs +++ b/osu.Game/Skinning/ISkinSource.cs @@ -5,7 +5,6 @@ using System; using osu.Framework.Audio.Sample; using osu.Framework.Graphics; using osu.Framework.Graphics.Textures; -using osu.Game.Rulesets.Objects.Types; using OpenTK.Graphics; namespace osu.Game.Skinning @@ -23,6 +22,6 @@ namespace osu.Game.Skinning SampleChannel GetSample(string sampleName); - Color4? GetComboColour(IHasComboInformation comboObject); + Color4? GetColour(string colourName); } } diff --git a/osu.Game/Skinning/LocalSkinOverrideContainer.cs b/osu.Game/Skinning/LocalSkinOverrideContainer.cs index f13e5ed353..cebdc85955 100644 --- a/osu.Game/Skinning/LocalSkinOverrideContainer.cs +++ b/osu.Game/Skinning/LocalSkinOverrideContainer.cs @@ -7,7 +7,6 @@ using osu.Framework.Audio.Sample; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Textures; -using osu.Game.Rulesets.Objects.Types; using OpenTK.Graphics; namespace osu.Game.Skinning @@ -22,7 +21,7 @@ namespace osu.Game.Skinning public SampleChannel GetSample(string sampleName) => source.GetSample(sampleName) ?? fallbackSource?.GetSample(sampleName); - public Color4? GetComboColour(IHasComboInformation comboObject) => source.GetComboColour(comboObject) ?? fallbackSource?.GetComboColour(comboObject); + public Color4? GetColour(string colourName) => source.GetColour(colourName) ?? fallbackSource?.GetColour(colourName); private readonly ISkinSource source; private ISkinSource fallbackSource; diff --git a/osu.Game/Skinning/Skin.cs b/osu.Game/Skinning/Skin.cs index 641d1d6f8b..6d5196e1e7 100644 --- a/osu.Game/Skinning/Skin.cs +++ b/osu.Game/Skinning/Skin.cs @@ -5,7 +5,6 @@ using System; using osu.Framework.Audio.Sample; using osu.Framework.Graphics; using osu.Framework.Graphics.Textures; -using osu.Game.Rulesets.Objects.Types; using OpenTK.Graphics; namespace osu.Game.Skinning @@ -24,8 +23,25 @@ namespace osu.Game.Skinning public abstract Texture GetTexture(string componentName); - public virtual Color4? GetComboColour(IHasComboInformation comboObject) => - Configuration.ComboColours.Count == 0 ? (Color4?)null : Configuration.ComboColours[comboObject.ComboIndex % Configuration.ComboColours.Count]; + public virtual Color4? GetColour(string colourName) + { + var namespaces = colourName.Split('/'); + + switch (namespaces[0]) + { + case "Play": + switch (namespaces[1]) + { + case "Combo": + int index = int.Parse(namespaces[2]); + return Configuration.ComboColours.Count == 0 ? (Color4?)null : Configuration.ComboColours[index % Configuration.ComboColours.Count]; + } + + break; + } + + return null; + } protected Skin(SkinInfo skin) { diff --git a/osu.Game/Skinning/SkinManager.cs b/osu.Game/Skinning/SkinManager.cs index ee11c15dbf..654260daca 100644 --- a/osu.Game/Skinning/SkinManager.cs +++ b/osu.Game/Skinning/SkinManager.cs @@ -14,7 +14,6 @@ using osu.Framework.Graphics.Textures; using osu.Framework.Platform; using osu.Game.Database; using osu.Game.IO.Archives; -using osu.Game.Rulesets.Objects.Types; using OpenTK.Graphics; namespace osu.Game.Skinning @@ -124,6 +123,6 @@ namespace osu.Game.Skinning public SampleChannel GetSample(string sampleName) => CurrentSkin.Value.GetSample(sampleName); - public Color4? GetComboColour(IHasComboInformation comboObject) => CurrentSkin.Value.GetComboColour(comboObject); + public Color4? GetColour(string colourName) => CurrentSkin.Value.GetColour(colourName); } } From 425d4aa7661ec131640fca29545de791ea496b81 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 22 Mar 2018 18:10:28 +0900 Subject: [PATCH 518/544] Add ability to lookup arbitrary SkinConfiguration values --- osu.Game/Skinning/ISkinSource.cs | 4 ++++ .../Skinning/LocalSkinOverrideContainer.cs | 20 +++++++++++++++++++ osu.Game/Skinning/Skin.cs | 8 +++++++- osu.Game/Skinning/SkinManager.cs | 6 +++++- 4 files changed, 36 insertions(+), 2 deletions(-) diff --git a/osu.Game/Skinning/ISkinSource.cs b/osu.Game/Skinning/ISkinSource.cs index 5292ff3cb5..ae2909327e 100644 --- a/osu.Game/Skinning/ISkinSource.cs +++ b/osu.Game/Skinning/ISkinSource.cs @@ -23,5 +23,9 @@ namespace osu.Game.Skinning SampleChannel GetSample(string sampleName); Color4? GetColour(string colourName); + + TValue GetConfiguration(Func query) where TConfiguration : SkinConfiguration where TValue : class; + + TValue? GetConfiguration(Func query) where TConfiguration : SkinConfiguration where TValue : struct; } } diff --git a/osu.Game/Skinning/LocalSkinOverrideContainer.cs b/osu.Game/Skinning/LocalSkinOverrideContainer.cs index cebdc85955..8181ec0ea1 100644 --- a/osu.Game/Skinning/LocalSkinOverrideContainer.cs +++ b/osu.Game/Skinning/LocalSkinOverrideContainer.cs @@ -23,6 +23,26 @@ namespace osu.Game.Skinning public Color4? GetColour(string colourName) => source.GetColour(colourName) ?? fallbackSource?.GetColour(colourName); + public TValue? GetConfiguration(Func query) where TConfiguration : SkinConfiguration where TValue : struct + { + TValue? val = null; + var conf = (source as Skin)?.Configuration as TConfiguration; + if (conf != null) + val = query?.Invoke(conf); + + return val ?? fallbackSource?.GetConfiguration(query); + } + + public TValue GetConfiguration(Func query) where TConfiguration : SkinConfiguration where TValue : class + { + TValue val = null; + var conf = (source as Skin)?.Configuration as TConfiguration; + if (conf != null) + val = query?.Invoke(conf); + + return val ?? fallbackSource?.GetConfiguration(query); + } + private readonly ISkinSource source; private ISkinSource fallbackSource; diff --git a/osu.Game/Skinning/Skin.cs b/osu.Game/Skinning/Skin.cs index 6d5196e1e7..1c175ea4e9 100644 --- a/osu.Game/Skinning/Skin.cs +++ b/osu.Game/Skinning/Skin.cs @@ -34,7 +34,7 @@ namespace osu.Game.Skinning { case "Combo": int index = int.Parse(namespaces[2]); - return Configuration.ComboColours.Count == 0 ? (Color4?)null : Configuration.ComboColours[index % Configuration.ComboColours.Count]; + return GetConfiguration(s => s.ComboColours.Count == 0 ? (Color4?)null : Configuration.ComboColours[index % Configuration.ComboColours.Count]); } break; @@ -43,6 +43,12 @@ namespace osu.Game.Skinning return null; } + public TValue GetConfiguration(Func query) where TConfiguration : SkinConfiguration where TValue : class + => Configuration is TConfiguration conf ? query?.Invoke(conf) : null; + + public TValue? GetConfiguration(Func query) where TConfiguration : SkinConfiguration where TValue : struct + => Configuration is TConfiguration conf ? query?.Invoke(conf) : null; + protected Skin(SkinInfo skin) { SkinInfo = skin; diff --git a/osu.Game/Skinning/SkinManager.cs b/osu.Game/Skinning/SkinManager.cs index 654260daca..ba6f5b4774 100644 --- a/osu.Game/Skinning/SkinManager.cs +++ b/osu.Game/Skinning/SkinManager.cs @@ -119,10 +119,14 @@ namespace osu.Game.Skinning public Drawable GetDrawableComponent(string componentName) => CurrentSkin.Value.GetDrawableComponent(componentName); - public Texture GetTexture(string componentName)=> CurrentSkin.Value.GetTexture(componentName); + public Texture GetTexture(string componentName) => CurrentSkin.Value.GetTexture(componentName); public SampleChannel GetSample(string sampleName) => CurrentSkin.Value.GetSample(sampleName); public Color4? GetColour(string colourName) => CurrentSkin.Value.GetColour(colourName); + + public TValue GetConfiguration(Func query) where TConfiguration : SkinConfiguration where TValue : class => CurrentSkin.Value.GetConfiguration(query); + + public TValue? GetConfiguration(Func query) where TConfiguration : SkinConfiguration where TValue : struct => CurrentSkin.Value.GetConfiguration(query); } } From 366b7fca657904d6a14f6f3b6927ed614361ecf9 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 22 Mar 2018 18:50:19 +0900 Subject: [PATCH 519/544] Remove GetColour method --- .../Objects/Drawables/DrawableHitObject.cs | 2 +- osu.Game/Skinning/ISkinSource.cs | 7 ++---- .../Skinning/LocalSkinOverrideContainer.cs | 11 +++----- osu.Game/Skinning/Skin.cs | 25 ++----------------- osu.Game/Skinning/SkinManager.cs | 7 ++---- 5 files changed, 11 insertions(+), 41 deletions(-) diff --git a/osu.Game/Rulesets/Objects/Drawables/DrawableHitObject.cs b/osu.Game/Rulesets/Objects/Drawables/DrawableHitObject.cs index b8852bb141..bbd6c15d0b 100644 --- a/osu.Game/Rulesets/Objects/Drawables/DrawableHitObject.cs +++ b/osu.Game/Rulesets/Objects/Drawables/DrawableHitObject.cs @@ -107,7 +107,7 @@ namespace osu.Game.Rulesets.Objects.Drawables base.SkinChanged(skin, allowFallback); if (HitObject is IHasComboInformation combo) - AccentColour = skin.GetColour($"Play/Combo/{combo.ComboIndex}") ?? Color4.White; + AccentColour = skin.GetValue(s => s.ComboColours?.Count > 0 ? s.ComboColours[combo.ComboIndex % s.ComboColours.Count] : (Color4?)null) ?? Color4.White; } protected override void LoadComplete() diff --git a/osu.Game/Skinning/ISkinSource.cs b/osu.Game/Skinning/ISkinSource.cs index ae2909327e..d8f259b4ea 100644 --- a/osu.Game/Skinning/ISkinSource.cs +++ b/osu.Game/Skinning/ISkinSource.cs @@ -5,7 +5,6 @@ using System; using osu.Framework.Audio.Sample; using osu.Framework.Graphics; using osu.Framework.Graphics.Textures; -using OpenTK.Graphics; namespace osu.Game.Skinning { @@ -22,10 +21,8 @@ namespace osu.Game.Skinning SampleChannel GetSample(string sampleName); - Color4? GetColour(string colourName); + TValue GetValue(Func query) where TConfiguration : SkinConfiguration where TValue : class; - TValue GetConfiguration(Func query) where TConfiguration : SkinConfiguration where TValue : class; - - TValue? GetConfiguration(Func query) where TConfiguration : SkinConfiguration where TValue : struct; + TValue? GetValue(Func query) where TConfiguration : SkinConfiguration where TValue : struct; } } diff --git a/osu.Game/Skinning/LocalSkinOverrideContainer.cs b/osu.Game/Skinning/LocalSkinOverrideContainer.cs index 8181ec0ea1..b7e2bd0daf 100644 --- a/osu.Game/Skinning/LocalSkinOverrideContainer.cs +++ b/osu.Game/Skinning/LocalSkinOverrideContainer.cs @@ -7,7 +7,6 @@ using osu.Framework.Audio.Sample; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Textures; -using OpenTK.Graphics; namespace osu.Game.Skinning { @@ -21,26 +20,24 @@ namespace osu.Game.Skinning public SampleChannel GetSample(string sampleName) => source.GetSample(sampleName) ?? fallbackSource?.GetSample(sampleName); - public Color4? GetColour(string colourName) => source.GetColour(colourName) ?? fallbackSource?.GetColour(colourName); - - public TValue? GetConfiguration(Func query) where TConfiguration : SkinConfiguration where TValue : struct + public TValue? GetValue(Func query) where TConfiguration : SkinConfiguration where TValue : struct { TValue? val = null; var conf = (source as Skin)?.Configuration as TConfiguration; if (conf != null) val = query?.Invoke(conf); - return val ?? fallbackSource?.GetConfiguration(query); + return val ?? fallbackSource?.GetValue(query); } - public TValue GetConfiguration(Func query) where TConfiguration : SkinConfiguration where TValue : class + public TValue GetValue(Func query) where TConfiguration : SkinConfiguration where TValue : class { TValue val = null; var conf = (source as Skin)?.Configuration as TConfiguration; if (conf != null) val = query?.Invoke(conf); - return val ?? fallbackSource?.GetConfiguration(query); + return val ?? fallbackSource?.GetValue(query); } private readonly ISkinSource source; diff --git a/osu.Game/Skinning/Skin.cs b/osu.Game/Skinning/Skin.cs index 1c175ea4e9..02fb84a4a2 100644 --- a/osu.Game/Skinning/Skin.cs +++ b/osu.Game/Skinning/Skin.cs @@ -5,7 +5,6 @@ using System; using osu.Framework.Audio.Sample; using osu.Framework.Graphics; using osu.Framework.Graphics.Textures; -using OpenTK.Graphics; namespace osu.Game.Skinning { @@ -23,30 +22,10 @@ namespace osu.Game.Skinning public abstract Texture GetTexture(string componentName); - public virtual Color4? GetColour(string colourName) - { - var namespaces = colourName.Split('/'); - - switch (namespaces[0]) - { - case "Play": - switch (namespaces[1]) - { - case "Combo": - int index = int.Parse(namespaces[2]); - return GetConfiguration(s => s.ComboColours.Count == 0 ? (Color4?)null : Configuration.ComboColours[index % Configuration.ComboColours.Count]); - } - - break; - } - - return null; - } - - public TValue GetConfiguration(Func query) where TConfiguration : SkinConfiguration where TValue : class + public TValue GetValue(Func query) where TConfiguration : SkinConfiguration where TValue : class => Configuration is TConfiguration conf ? query?.Invoke(conf) : null; - public TValue? GetConfiguration(Func query) where TConfiguration : SkinConfiguration where TValue : struct + public TValue? GetValue(Func query) where TConfiguration : SkinConfiguration where TValue : struct => Configuration is TConfiguration conf ? query?.Invoke(conf) : null; protected Skin(SkinInfo skin) diff --git a/osu.Game/Skinning/SkinManager.cs b/osu.Game/Skinning/SkinManager.cs index ba6f5b4774..f965a77cce 100644 --- a/osu.Game/Skinning/SkinManager.cs +++ b/osu.Game/Skinning/SkinManager.cs @@ -14,7 +14,6 @@ using osu.Framework.Graphics.Textures; using osu.Framework.Platform; using osu.Game.Database; using osu.Game.IO.Archives; -using OpenTK.Graphics; namespace osu.Game.Skinning { @@ -123,10 +122,8 @@ namespace osu.Game.Skinning public SampleChannel GetSample(string sampleName) => CurrentSkin.Value.GetSample(sampleName); - public Color4? GetColour(string colourName) => CurrentSkin.Value.GetColour(colourName); + public TValue GetValue(Func query) where TConfiguration : SkinConfiguration where TValue : class => CurrentSkin.Value.GetValue(query); - public TValue GetConfiguration(Func query) where TConfiguration : SkinConfiguration where TValue : class => CurrentSkin.Value.GetConfiguration(query); - - public TValue? GetConfiguration(Func query) where TConfiguration : SkinConfiguration where TValue : struct => CurrentSkin.Value.GetConfiguration(query); + public TValue? GetValue(Func query) where TConfiguration : SkinConfiguration where TValue : struct => CurrentSkin.Value.GetValue(query); } } From 9f220b3b9b2ef28e9cb805cdd87716b962b47862 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Thu, 22 Mar 2018 18:51:03 +0900 Subject: [PATCH 520/544] Add explanatory comment --- osu.Game/Graphics/UserInterface/FocusedTextBox.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/osu.Game/Graphics/UserInterface/FocusedTextBox.cs b/osu.Game/Graphics/UserInterface/FocusedTextBox.cs index 9ff64e5d5f..33786252ab 100644 --- a/osu.Game/Graphics/UserInterface/FocusedTextBox.cs +++ b/osu.Game/Graphics/UserInterface/FocusedTextBox.cs @@ -30,6 +30,7 @@ namespace osu.Game.Graphics.UserInterface } } + // We may not be focused yet, but we need to handle keyboard input to be able to request focus public override bool HandleKeyboardInput => HoldFocus || base.HandleKeyboardInput; protected override void OnFocus(InputState state) From f87c3765474310dea7ac0addf4f757da0c336bb8 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Thu, 22 Mar 2018 18:52:32 +0900 Subject: [PATCH 521/544] Update framework --- osu-framework | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu-framework b/osu-framework index cc39713fbf..241133f0a6 160000 --- a/osu-framework +++ b/osu-framework @@ -1 +1 @@ -Subproject commit cc39713fbf9427aa53df91e27ecd09d15661089f +Subproject commit 241133f0a65326a563ba23b7166167a882d1d5cb From af65f2dd48273ac95035223d5482ee67878ecafd Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 22 Mar 2018 18:53:16 +0900 Subject: [PATCH 522/544] Move AccentColour changes local to rulesets which rely on it --- .../Objects/Drawable/DrawableCatchHitObject.cs | 10 ++++++++++ .../Objects/Drawables/DrawableOsuHitObject.cs | 11 +++++++++++ .../Rulesets/Objects/Drawables/DrawableHitObject.cs | 8 -------- 3 files changed, 21 insertions(+), 8 deletions(-) diff --git a/osu.Game.Rulesets.Catch/Objects/Drawable/DrawableCatchHitObject.cs b/osu.Game.Rulesets.Catch/Objects/Drawable/DrawableCatchHitObject.cs index 8d56fc1081..582946ff00 100644 --- a/osu.Game.Rulesets.Catch/Objects/Drawable/DrawableCatchHitObject.cs +++ b/osu.Game.Rulesets.Catch/Objects/Drawable/DrawableCatchHitObject.cs @@ -8,6 +8,8 @@ using osu.Game.Rulesets.Objects.Drawables; using osu.Game.Rulesets.Objects.Types; using OpenTK; using osu.Game.Rulesets.Scoring; +using osu.Game.Skinning; +using OpenTK.Graphics; namespace osu.Game.Rulesets.Catch.Objects.Drawable { @@ -57,6 +59,14 @@ namespace osu.Game.Rulesets.Catch.Objects.Drawable AddJudgement(new Judgement { Result = CheckPosition.Invoke(HitObject) ? HitResult.Perfect : HitResult.Miss }); } + protected override void SkinChanged(ISkinSource skin, bool allowFallback) + { + base.SkinChanged(skin, allowFallback); + + if (HitObject is IHasComboInformation combo) + AccentColour = skin.GetValue(s => s.ComboColours.Count > 0 ? s.ComboColours[combo.ComboIndex % s.ComboColours.Count] : (Color4?)null) ?? Color4.White; + } + private const float preempt = 1000; protected override void UpdateState(ArmedState state) diff --git a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableOsuHitObject.cs b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableOsuHitObject.cs index 2e59e2dc60..d4d89c2aa3 100644 --- a/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableOsuHitObject.cs +++ b/osu.Game.Rulesets.Osu/Objects/Drawables/DrawableOsuHitObject.cs @@ -5,6 +5,9 @@ using System.ComponentModel; using osu.Game.Rulesets.Objects.Drawables; using osu.Framework.Graphics; using System.Linq; +using osu.Game.Rulesets.Objects.Types; +using osu.Game.Skinning; +using OpenTK.Graphics; namespace osu.Game.Rulesets.Osu.Objects.Drawables { @@ -34,6 +37,14 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables } } + protected override void SkinChanged(ISkinSource skin, bool allowFallback) + { + base.SkinChanged(skin, allowFallback); + + if (HitObject is IHasComboInformation combo) + AccentColour = skin.GetValue(s => s.ComboColours.Count > 0 ? s.ComboColours[combo.ComboIndex % s.ComboColours.Count] : (Color4?)null) ?? Color4.White; + } + protected virtual void UpdatePreemptState() => this.FadeIn(HitObject.TimeFadein); protected virtual void UpdateCurrentState(ArmedState state) diff --git a/osu.Game/Rulesets/Objects/Drawables/DrawableHitObject.cs b/osu.Game/Rulesets/Objects/Drawables/DrawableHitObject.cs index bbd6c15d0b..348364a2bf 100644 --- a/osu.Game/Rulesets/Objects/Drawables/DrawableHitObject.cs +++ b/osu.Game/Rulesets/Objects/Drawables/DrawableHitObject.cs @@ -102,14 +102,6 @@ namespace osu.Game.Rulesets.Objects.Drawables } } - protected override void SkinChanged(ISkinSource skin, bool allowFallback) - { - base.SkinChanged(skin, allowFallback); - - if (HitObject is IHasComboInformation combo) - AccentColour = skin.GetValue(s => s.ComboColours?.Count > 0 ? s.ComboColours[combo.ComboIndex % s.ComboColours.Count] : (Color4?)null) ?? Color4.White; - } - protected override void LoadComplete() { base.LoadComplete(); From e5f83530b8dab9e1c8b4caf67abdc88e9944df14 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 22 Mar 2018 19:49:31 +0900 Subject: [PATCH 523/544] Only allow settings or notifications to be visible at once Resolves #2273. --- osu.Game/OsuGame.cs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/osu.Game/OsuGame.cs b/osu.Game/OsuGame.cs index e656c7256e..4a40a6b5df 100644 --- a/osu.Game/OsuGame.cs +++ b/osu.Game/OsuGame.cs @@ -302,6 +302,21 @@ namespace osu.Game }; } + var singleDisplaySideOverlays = new OverlayContainer[] { settings, notifications }; + foreach (var overlay in singleDisplaySideOverlays) + { + overlay.StateChanged += state => + { + if (state == Visibility.Hidden) return; + + foreach (var c in singleDisplaySideOverlays) + { + if (c == overlay) continue; + c.State = Visibility.Hidden; + } + }; + } + // eventually informational overlays should be displayed in a stack, but for now let's only allow one to stay open at a time. var informationalOverlays = new OverlayContainer[] { beatmapSetOverlay, userProfile }; foreach (var overlay in informationalOverlays) From 88ad3db0220de81229e95b23214a94b4ad138aa5 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Thu, 22 Mar 2018 20:00:57 +0900 Subject: [PATCH 524/544] Update framework --- osu-framework | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu-framework b/osu-framework index 241133f0a6..d8d4f55e10 160000 --- a/osu-framework +++ b/osu-framework @@ -1 +1 @@ -Subproject commit 241133f0a65326a563ba23b7166167a882d1d5cb +Subproject commit d8d4f55e10ac553223db75874bae6ae4894b739a From 2b7d22c4eadde80cc90bef1f3e82b148095399a6 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Thu, 22 Mar 2018 20:11:55 +0900 Subject: [PATCH 525/544] Very slightly reduce size of slider bar to increase bottom padding --- osu.Game/Screens/Edit/Screens/Compose/BeatDivisorControl.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game/Screens/Edit/Screens/Compose/BeatDivisorControl.cs b/osu.Game/Screens/Edit/Screens/Compose/BeatDivisorControl.cs index 8ba3500eea..a7be3c1eb5 100644 --- a/osu.Game/Screens/Edit/Screens/Compose/BeatDivisorControl.cs +++ b/osu.Game/Screens/Edit/Screens/Compose/BeatDivisorControl.cs @@ -130,7 +130,7 @@ namespace osu.Game.Screens.Edit.Screens.Compose }, RowDimensions = new[] { - new Dimension(GridSizeMode.Absolute, 35), + new Dimension(GridSizeMode.Absolute, 30), new Dimension(GridSizeMode.Absolute, 25), } } From 9e080028ff2d6953fddbeb2a98f52c677b03a8ad Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 22 Mar 2018 20:35:07 +0900 Subject: [PATCH 526/544] Add shutter sound --- osu-resources | 2 +- osu.Game/Graphics/ScreenshotManager.cs | 9 ++++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/osu-resources b/osu-resources index 7bb0782200..6e145ed502 160000 --- a/osu-resources +++ b/osu-resources @@ -1 +1 @@ -Subproject commit 7bb0782200abadf73b79ed1a3bc1d5b926c6a81e +Subproject commit 6e145ed50274539ee827fdc3d1fda1e130b070fd diff --git a/osu.Game/Graphics/ScreenshotManager.cs b/osu.Game/Graphics/ScreenshotManager.cs index 4c9e9756df..412ec18412 100644 --- a/osu.Game/Graphics/ScreenshotManager.cs +++ b/osu.Game/Graphics/ScreenshotManager.cs @@ -5,6 +5,8 @@ using System; using System.Drawing.Imaging; using System.IO; using osu.Framework.Allocation; +using osu.Framework.Audio; +using osu.Framework.Audio.Sample; using osu.Framework.Configuration; using osu.Framework.Graphics.Containers; using osu.Framework.Input; @@ -24,14 +26,18 @@ namespace osu.Game.Graphics private Storage storage; private NotificationOverlay notificationOverlay; + private SampleChannel shutter; + [BackgroundDependencyLoader] - private void load(GameHost host, OsuConfigManager config, Storage storage, NotificationOverlay notificationOverlay) + private void load(GameHost host, OsuConfigManager config, Storage storage, NotificationOverlay notificationOverlay, AudioManager audio) { this.host = host; this.storage = storage.GetStorageForDirectory(@"screenshots"); this.notificationOverlay = notificationOverlay; screenshotFormat = config.GetBindable(OsuSetting.ScreenshotFormat); + + shutter = audio.Sample.Get("UI/shutter"); } public bool OnPressed(GlobalAction action) @@ -39,6 +45,7 @@ namespace osu.Game.Graphics switch (action) { case GlobalAction.TakeScreenshot: + shutter.Play(); TakeScreenshotAsync(); return true; } From 94847e4a233eee9ddef6cfb97ac4ff1ccc897509 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 22 Mar 2018 20:44:00 +0900 Subject: [PATCH 527/544] Allow clicking notification to open screenshot folder --- osu.Game/Graphics/ScreenshotManager.cs | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/osu.Game/Graphics/ScreenshotManager.cs b/osu.Game/Graphics/ScreenshotManager.cs index 412ec18412..c1df7999ad 100644 --- a/osu.Game/Graphics/ScreenshotManager.cs +++ b/osu.Game/Graphics/ScreenshotManager.cs @@ -53,10 +53,7 @@ namespace osu.Game.Graphics return false; } - public bool OnReleased(GlobalAction action) - { - return false; - } + public bool OnReleased(GlobalAction action) => false; public async void TakeScreenshotAsync() { @@ -77,7 +74,15 @@ namespace osu.Game.Graphics throw new ArgumentOutOfRangeException(nameof(screenshotFormat)); } - notificationOverlay.Post(new SimpleNotification { Text = $"{fileName} saved" }); + notificationOverlay.Post(new SimpleNotification + { + Text = $"{fileName} saved!", + Activated = () => + { + storage.OpenInNativeExplorer(); + return true; + } + }); } } From e41993ac44fb88f5174c7a1c5bf323b8cc98fbc4 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 22 Mar 2018 20:45:26 +0900 Subject: [PATCH 528/544] Don't bother with an exception that will never happen Wasn't being caught anyways --- osu.Game/Graphics/ScreenshotManager.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/osu.Game/Graphics/ScreenshotManager.cs b/osu.Game/Graphics/ScreenshotManager.cs index c1df7999ad..b0cd997837 100644 --- a/osu.Game/Graphics/ScreenshotManager.cs +++ b/osu.Game/Graphics/ScreenshotManager.cs @@ -60,6 +60,8 @@ namespace osu.Game.Graphics using (var bitmap = await host.TakeScreenshotAsync()) { var fileName = getFileName(); + if (fileName == null) return; + var stream = storage.GetStream(fileName, FileAccess.Write); switch (screenshotFormat.Value) @@ -102,7 +104,7 @@ namespace osu.Game.Graphics return indexedName; } - throw new Exception($"Failed to find suitable file name for saving {fileExt} image"); + return null; } } } From 14a653aa28d14b4d42a5602ef8654524ba596b0b Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 22 Mar 2018 20:55:00 +0900 Subject: [PATCH 529/544] Restore old auto-popout notification overlay behaviour --- osu.Game/Overlays/NotificationOverlay.cs | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/osu.Game/Overlays/NotificationOverlay.cs b/osu.Game/Overlays/NotificationOverlay.cs index 48ad507d88..f5b281efc1 100644 --- a/osu.Game/Overlays/NotificationOverlay.cs +++ b/osu.Game/Overlays/NotificationOverlay.cs @@ -110,17 +110,7 @@ namespace osu.Game.Overlays private int runningDepth; - private void notificationClosed() - { - Schedule(() => - { - // hide ourselves if all notifications have been dismissed. - if (totalCount == 0) - State = Visibility.Hidden; - }); - - updateCounts(); - } + private void notificationClosed() => updateCounts(); private readonly Scheduler postScheduler = new Scheduler(); @@ -141,6 +131,8 @@ namespace osu.Game.Overlays var section = sections.Children.FirstOrDefault(s => s.AcceptTypes.Any(accept => accept.IsAssignableFrom(ourType))); section?.Add(notification, notification.DisplayOnTop ? -runningDepth : runningDepth); + State = Visibility.Visible; + updateCounts(); }); From 1d3c9098b8884b889089ebf4337d0008e189c190 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Thu, 22 Mar 2018 21:42:57 +0900 Subject: [PATCH 530/544] Load component asynchronously --- osu.Game/OsuGame.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/osu.Game/OsuGame.cs b/osu.Game/OsuGame.cs index 268cca5957..89447b8ed6 100644 --- a/osu.Game/OsuGame.cs +++ b/osu.Game/OsuGame.cs @@ -239,6 +239,7 @@ namespace osu.Game loadComponentSingleFile(volume = new VolumeOverlay(), overlayContent.Add); loadComponentSingleFile(onscreenDisplay = new OnScreenDisplay(), Add); + loadComponentSingleFile(new ScreenshotManager(), Add); //overlay elements loadComponentSingleFile(direct = new DirectOverlay { Depth = -1 }, mainContent.Add); @@ -285,8 +286,6 @@ namespace osu.Game dependencies.Cache(notifications); dependencies.Cache(dialogOverlay); - Add(new ScreenshotManager()); - // ensure only one of these overlays are open at once. var singleDisplayOverlays = new OverlayContainer[] { chat, social, direct }; foreach (var overlay in singleDisplayOverlays) From d4aeb3d00bb021dde49b742ed1aad3a0c69ed6f9 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Fri, 23 Mar 2018 01:06:05 +0900 Subject: [PATCH 531/544] Fix BeatmapCarousel's flush not correctly applying selection changes They may have been delayed until the next Update, which is too late in this case. --- osu.Game/Screens/Select/BeatmapCarousel.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/osu.Game/Screens/Select/BeatmapCarousel.cs b/osu.Game/Screens/Select/BeatmapCarousel.cs index c2bb155753..aed8fb110f 100644 --- a/osu.Game/Screens/Select/BeatmapCarousel.cs +++ b/osu.Game/Screens/Select/BeatmapCarousel.cs @@ -328,7 +328,10 @@ namespace osu.Game.Screens.Select public void FlushPendingFilterOperations() { if (FilterTask?.Completed == false) + { applyActiveCriteria(false, false); + Update(); + } } public void Filter(FilterCriteria newCriteria, bool debounce = true) From f77dad280972b7286e58ad45feb4c2a2ed287265 Mon Sep 17 00:00:00 2001 From: Joseph Madamba <35318437+Joehuu@users.noreply.github.com> Date: Thu, 22 Mar 2018 22:49:14 -0700 Subject: [PATCH 532/544] Add perfect mod icon --- osu.Game/Graphics/SpriteIcon.cs | 2 +- osu.Game/Rulesets/Mods/ModPerfect.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/osu.Game/Graphics/SpriteIcon.cs b/osu.Game/Graphics/SpriteIcon.cs index a93cb4c6cd..4324119481 100644 --- a/osu.Game/Graphics/SpriteIcon.cs +++ b/osu.Game/Graphics/SpriteIcon.cs @@ -988,7 +988,7 @@ namespace osu.Game.Graphics fa_osu_expert_mania = 0xe028, // mod icons - fa_osu_mod_perfect = 0xe02d, + fa_osu_mod_perfect = 0xe049, fa_osu_mod_autopilot = 0xe03a, fa_osu_mod_auto = 0xe03b, fa_osu_mod_cinema = 0xe03c, diff --git a/osu.Game/Rulesets/Mods/ModPerfect.cs b/osu.Game/Rulesets/Mods/ModPerfect.cs index 08942fbe12..116d13bf0a 100644 --- a/osu.Game/Rulesets/Mods/ModPerfect.cs +++ b/osu.Game/Rulesets/Mods/ModPerfect.cs @@ -10,7 +10,7 @@ namespace osu.Game.Rulesets.Mods { public override string Name => "Perfect"; public override string ShortenedName => "PF"; - public override FontAwesome Icon => FontAwesome.fa_question; + public override FontAwesome Icon => FontAwesome.fa_osu_mod_perfect; public override string Description => "SS or quit."; protected override bool FailCondition(ScoreProcessor scoreProcessor) => scoreProcessor.Accuracy.Value != 1; From b56eee1927f6c80bf777f2529687537fc9699e36 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Fri, 23 Mar 2018 15:04:40 +0900 Subject: [PATCH 533/544] Fix background loaded player never being disposed if early exit occurs --- osu.Game/Screens/Play/PlayerLoader.cs | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/osu.Game/Screens/Play/PlayerLoader.cs b/osu.Game/Screens/Play/PlayerLoader.cs index 89082cfbd5..6d55cdb9ca 100644 --- a/osu.Game/Screens/Play/PlayerLoader.cs +++ b/osu.Game/Screens/Play/PlayerLoader.cs @@ -1,6 +1,7 @@ // Copyright (c) 2007-2018 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE +using System.Threading.Tasks; using osu.Framework.Allocation; using osu.Framework.Graphics; using osu.Framework.Graphics.Containers; @@ -27,6 +28,8 @@ namespace osu.Game.Screens.Play private bool showOverlays = true; public override bool ShowOverlaysOnEnter => showOverlays; + private Task loadTask; + public PlayerLoader(Player player) { this.player = player; @@ -55,7 +58,7 @@ namespace osu.Game.Screens.Play Margin = new MarginPadding(25) }); - LoadComponentAsync(player); + loadTask = LoadComponentAsync(player); } protected override void OnResuming(Screen last) @@ -65,7 +68,7 @@ namespace osu.Game.Screens.Play contentIn(); //we will only be resumed if the player has requested a re-run (see ValidForResume setting above) - LoadComponentAsync(player = new Player + loadTask = LoadComponentAsync(player = new Player { RestartCount = player.RestartCount + 1, RestartRequested = player.RestartRequested, @@ -154,6 +157,8 @@ namespace osu.Game.Screens.Play { if (!IsCurrentScreen) return; + loadTask = null; + if (!Push(player)) Exit(); else @@ -192,6 +197,14 @@ namespace osu.Game.Screens.Play return base.OnExiting(next); } + protected override void Dispose(bool isDisposing) + { + base.Dispose(isDisposing); + + // if the player never got pushed, we should explicitly dispose it. + loadTask?.ContinueWith(_ => player.Dispose()); + } + private class BeatmapMetadataDisplay : Container { private class MetadataLine : Container From eb751fa607d25c187947cb53bd4d7988f8824114 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Fri, 23 Mar 2018 15:05:28 +0900 Subject: [PATCH 534/544] Fix event unbind not being unbound correctly --- osu.Game/Skinning/LocalSkinOverrideContainer.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/osu.Game/Skinning/LocalSkinOverrideContainer.cs b/osu.Game/Skinning/LocalSkinOverrideContainer.cs index b7e2bd0daf..d000127859 100644 --- a/osu.Game/Skinning/LocalSkinOverrideContainer.cs +++ b/osu.Game/Skinning/LocalSkinOverrideContainer.cs @@ -48,13 +48,15 @@ namespace osu.Game.Skinning this.source = source; } + private void onSourceChanged() => SourceChanged?.Invoke(); + protected override IReadOnlyDependencyContainer CreateLocalDependencies(IReadOnlyDependencyContainer parent) { var dependencies = new DependencyContainer(base.CreateLocalDependencies(parent)); fallbackSource = dependencies.Get(); if (fallbackSource != null) - fallbackSource.SourceChanged += () => SourceChanged?.Invoke(); + fallbackSource.SourceChanged += onSourceChanged; dependencies.CacheAs(this); @@ -66,7 +68,7 @@ namespace osu.Game.Skinning base.Dispose(isDisposing); if (fallbackSource != null) - fallbackSource.SourceChanged -= SourceChanged; + fallbackSource.SourceChanged -= onSourceChanged; } } } From 6c4e719e0f675af3724a45862a9338c4038681e0 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Fri, 23 Mar 2018 15:20:19 +0900 Subject: [PATCH 535/544] Fix API never stopping its thread --- osu.Game/Online/API/APIAccess.cs | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/osu.Game/Online/API/APIAccess.cs b/osu.Game/Online/API/APIAccess.cs index 2cb8424bcc..39ecde55bc 100644 --- a/osu.Game/Online/API/APIAccess.cs +++ b/osu.Game/Online/API/APIAccess.cs @@ -44,7 +44,6 @@ namespace osu.Game.Online.API protected bool HasLogin => Token != null || !string.IsNullOrEmpty(ProvidedUsername) && !string.IsNullOrEmpty(password); - // ReSharper disable once PrivateFieldCanBeConvertedToLocalVariable (should dispose of this or at very least keep a reference). private readonly Thread thread; private readonly Logger log; @@ -267,10 +266,7 @@ namespace osu.Game.Online.API public bool IsLoggedIn => LocalUser.Value.Id > 1; - public void Queue(APIRequest request) - { - queue.Enqueue(request); - } + public void Queue(APIRequest request) => queue.Enqueue(request); public event StateChangeDelegate OnStateChange; @@ -312,6 +308,9 @@ namespace osu.Game.Online.API config.Set(OsuSetting.Token, config.Get(OsuSetting.SavePassword) ? Token : string.Empty); config.Save(); + + flushQueue(); + thread?.Abort(); } } From 52fa837447ba745843331a11e36d3a908115fd03 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Fri, 23 Mar 2018 18:17:14 +0900 Subject: [PATCH 536/544] Fix volume glow being cut off Fixes #2285. --- osu.Game/Overlays/Volume/VolumeMeter.cs | 27 ++++++++++++++++--------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/osu.Game/Overlays/Volume/VolumeMeter.cs b/osu.Game/Overlays/Volume/VolumeMeter.cs index 64b9e513c4..b1951f4d72 100644 --- a/osu.Game/Overlays/Volume/VolumeMeter.cs +++ b/osu.Game/Overlays/Volume/VolumeMeter.cs @@ -12,6 +12,7 @@ using osu.Framework.Graphics.Effects; using osu.Framework.Graphics.Shapes; using osu.Framework.Graphics.UserInterface; using osu.Framework.Input.Bindings; +using osu.Framework.MathUtils; using osu.Game.Graphics; using osu.Game.Graphics.Sprites; using osu.Game.Input.Bindings; @@ -93,19 +94,25 @@ namespace osu.Game.Overlays.Volume Colour = colours.Gray2, Size = new Vector2(0.8f) }, - (volumeCircle = new CircularProgress + new Container { - RelativeSizeAxes = Axes.Both, - InnerRadius = 0.05f, - Rotation = 180, Anchor = Anchor.Centre, Origin = Anchor.Centre, - Size = new Vector2(0.8f) - }).WithEffect(new GlowEffect - { - Colour = meterColour, - Strength = 2 - }), + RelativeSizeAxes = Axes.Both, + Size = new Vector2(0.8f), + Padding = new MarginPadding(-Blur.KernelSize(5)), + Rotation = 180, + Child = (volumeCircle = new CircularProgress + { + RelativeSizeAxes = Axes.Both, + InnerRadius = 0.05f, + }).WithEffect(new GlowEffect + { + Colour = meterColour, + Strength = 2, + PadExtent = true + }), + }, maxGlow = (text = new OsuSpriteText { Anchor = Anchor.Centre, From afdab7895aa3fa3cff46529ef7b164342fda7202 Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Fri, 23 Mar 2018 20:41:38 +0900 Subject: [PATCH 537/544] Fix beatmap background fade not being updated on retry Fixes #2287 --- osu.Game/Screens/Play/ScreenWithBeatmapBackground.cs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/osu.Game/Screens/Play/ScreenWithBeatmapBackground.cs b/osu.Game/Screens/Play/ScreenWithBeatmapBackground.cs index 8e963a94a8..964267cc17 100644 --- a/osu.Game/Screens/Play/ScreenWithBeatmapBackground.cs +++ b/osu.Game/Screens/Play/ScreenWithBeatmapBackground.cs @@ -46,6 +46,12 @@ namespace osu.Game.Screens.Play UpdateBackgroundElements(); } + protected override void OnResuming(Screen last) + { + base.OnResuming(last); + UpdateBackgroundElements(); + } + protected virtual void UpdateBackgroundElements() { if (!IsCurrentScreen) return; From f0c0a5110819716e9bfffcaf7f22a681f5e4e88d Mon Sep 17 00:00:00 2001 From: smoogipoo Date: Fri, 23 Mar 2018 20:57:04 +0900 Subject: [PATCH 538/544] Convert APIAccess to use cancellation tokens --- osu.Game/Online/API/APIAccess.cs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/osu.Game/Online/API/APIAccess.cs b/osu.Game/Online/API/APIAccess.cs index 39ecde55bc..957aeac3cd 100644 --- a/osu.Game/Online/API/APIAccess.cs +++ b/osu.Game/Online/API/APIAccess.cs @@ -7,6 +7,7 @@ using System.Collections.Generic; using System.Diagnostics; using System.Net; using System.Threading; +using System.Threading.Tasks; using osu.Framework.Configuration; using osu.Framework.Graphics; using osu.Framework.Logging; @@ -44,7 +45,7 @@ namespace osu.Game.Online.API protected bool HasLogin => Token != null || !string.IsNullOrEmpty(ProvidedUsername) && !string.IsNullOrEmpty(password); - private readonly Thread thread; + private readonly CancellationTokenSource cancellationToken = new CancellationTokenSource(); private readonly Logger log; @@ -58,8 +59,7 @@ namespace osu.Game.Online.API ProvidedUsername = config.Get(OsuSetting.Username); Token = config.Get(OsuSetting.Token); - thread = new Thread(run) { IsBackground = true }; - thread.Start(); + Task.Factory.StartNew(run, cancellationToken.Token, TaskCreationOptions.LongRunning, TaskScheduler.Default); } private readonly List components = new List(); @@ -92,7 +92,7 @@ namespace osu.Game.Online.API private void run() { - while (thread.IsAlive) + while (!cancellationToken.IsCancellationRequested) { switch (State) { @@ -310,7 +310,7 @@ namespace osu.Game.Online.API config.Save(); flushQueue(); - thread?.Abort(); + cancellationToken.Cancel(); } } From b593c478096b8919aa7078d5e9607e039c7f72ae Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Sat, 24 Mar 2018 05:07:48 +0900 Subject: [PATCH 539/544] Add setting to toggle performance logging --- .../Settings/Sections/Debug/GeneralSettings.cs | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/osu.Game/Overlays/Settings/Sections/Debug/GeneralSettings.cs b/osu.Game/Overlays/Settings/Sections/Debug/GeneralSettings.cs index 867410b178..ba591b9456 100644 --- a/osu.Game/Overlays/Settings/Sections/Debug/GeneralSettings.cs +++ b/osu.Game/Overlays/Settings/Sections/Debug/GeneralSettings.cs @@ -18,14 +18,19 @@ namespace osu.Game.Overlays.Settings.Sections.Debug { new SettingsCheckbox { - LabelText = "Bypass caching", - Bindable = config.GetBindable(DebugSetting.BypassCaching) + LabelText = "Show log overlay", + Bindable = frameworkConfig.GetBindable(FrameworkSetting.ShowLogOverlay) }, new SettingsCheckbox { - LabelText = "Debug logs", - Bindable = frameworkConfig.GetBindable(FrameworkSetting.ShowLogOverlay) - } + LabelText = "Performance logging", + Bindable = frameworkConfig.GetBindable(FrameworkSetting.PerformanceLogging) + }, + new SettingsCheckbox + { + LabelText = "Bypass caching (slow)", + Bindable = config.GetBindable(DebugSetting.BypassCaching) + }, }; } } From 256baf6d60f10fe2187ba45bfc24d634e9fb2b52 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Sat, 24 Mar 2018 05:40:26 +0900 Subject: [PATCH 540/544] Move binding to LoadComplete Previously there was a chance that it would still never get disposed, as the event was bound in async load, before it was in a state it can be recursively disposed via the PlayerLoader call. --- osu.Game/Skinning/LocalSkinOverrideContainer.cs | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/osu.Game/Skinning/LocalSkinOverrideContainer.cs b/osu.Game/Skinning/LocalSkinOverrideContainer.cs index d000127859..95cdde2f48 100644 --- a/osu.Game/Skinning/LocalSkinOverrideContainer.cs +++ b/osu.Game/Skinning/LocalSkinOverrideContainer.cs @@ -55,14 +55,19 @@ namespace osu.Game.Skinning var dependencies = new DependencyContainer(base.CreateLocalDependencies(parent)); fallbackSource = dependencies.Get(); - if (fallbackSource != null) - fallbackSource.SourceChanged += onSourceChanged; - dependencies.CacheAs(this); return dependencies; } + protected override void LoadComplete() + { + base.LoadComplete(); + + if (fallbackSource != null) + fallbackSource.SourceChanged += onSourceChanged; + } + protected override void Dispose(bool isDisposing) { base.Dispose(isDisposing); From 3844e95656a756286f8c31106bea35026b3af904 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Sat, 24 Mar 2018 05:55:56 +0900 Subject: [PATCH 541/544] Fix one more instance of the same thing happening --- osu.Game/Input/Bindings/DatabasedKeyBindingContainer.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/osu.Game/Input/Bindings/DatabasedKeyBindingContainer.cs b/osu.Game/Input/Bindings/DatabasedKeyBindingContainer.cs index b6bc348a52..2b53f77d62 100644 --- a/osu.Game/Input/Bindings/DatabasedKeyBindingContainer.cs +++ b/osu.Game/Input/Bindings/DatabasedKeyBindingContainer.cs @@ -45,6 +45,11 @@ namespace osu.Game.Input.Bindings private void load(KeyBindingStore keyBindings) { store = keyBindings; + } + + protected override void LoadComplete() + { + base.LoadComplete(); store.KeyBindingChanged += ReloadMappings; } From ade97f8c0c2ca3a93b2e3ebec01b6e1847416148 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Sat, 24 Mar 2018 05:58:59 +0900 Subject: [PATCH 542/544] Increase deploy delta keep --- osu.Desktop.Deploy/Program.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Desktop.Deploy/Program.cs b/osu.Desktop.Deploy/Program.cs index d8ff2bfd82..3a716468c9 100644 --- a/osu.Desktop.Deploy/Program.cs +++ b/osu.Desktop.Deploy/Program.cs @@ -39,7 +39,7 @@ namespace osu.Desktop.Deploy /// /// How many previous build deltas we want to keep when publishing. /// - private const int keep_delta_count = 3; + private const int keep_delta_count = 4; private static string codeSigningCmd => string.IsNullOrEmpty(codeSigningPassword) ? "" : $"-n \"/a /f {codeSigningCertPath} /p {codeSigningPassword} /t http://timestamp.comodoca.com/authenticode\""; From 7115e4390eabb3f408cc7d623c2b85798a0deaae Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Sat, 24 Mar 2018 11:18:24 +0900 Subject: [PATCH 543/544] Update framework --- osu-framework | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu-framework b/osu-framework index d8d4f55e10..99140d9d79 160000 --- a/osu-framework +++ b/osu-framework @@ -1 +1 @@ -Subproject commit d8d4f55e10ac553223db75874bae6ae4894b739a +Subproject commit 99140d9d79909d1a5474e01c60e54cbdc27f6b19 From 19966988170f93c3469341cc7ff664994e0a8941 Mon Sep 17 00:00:00 2001 From: Dean Herbert Date: Sat, 24 Mar 2018 11:40:45 +0900 Subject: [PATCH 544/544] Fix @1x skin elements not being used --- osu.Game/Skinning/LegacySkin.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game/Skinning/LegacySkin.cs b/osu.Game/Skinning/LegacySkin.cs index 66e8cb8f9f..1b52507688 100644 --- a/osu.Game/Skinning/LegacySkin.cs +++ b/osu.Game/Skinning/LegacySkin.cs @@ -63,7 +63,7 @@ namespace osu.Game.Skinning if (texture == null) { ratio *= 2; - GetTexture(componentName); + texture = GetTexture(componentName); } if (texture == null) return null;