Index: DamEngine/trunk/src/Deltares.DamEngine.IntegrationTests/Deltares.DamEngine.IntegrationTests.csproj =================================================================== diff -u -r5597 -r5599 --- DamEngine/trunk/src/Deltares.DamEngine.IntegrationTests/Deltares.DamEngine.IntegrationTests.csproj (.../Deltares.DamEngine.IntegrationTests.csproj) (revision 5597) +++ DamEngine/trunk/src/Deltares.DamEngine.IntegrationTests/Deltares.DamEngine.IntegrationTests.csproj (.../Deltares.DamEngine.IntegrationTests.csproj) (revision 5599) @@ -233,6 +233,12 @@ PreserveNewest + + PreserveNewest + + + PreserveNewest + Index: DamEngine/trunk/src/Deltares.DamEngine.IntegrationTests/IntegrationTests/OperationalStabilityProfile1DTests.cs =================================================================== diff -u -r5597 -r5599 --- DamEngine/trunk/src/Deltares.DamEngine.IntegrationTests/IntegrationTests/OperationalStabilityProfile1DTests.cs (.../OperationalStabilityProfile1DTests.cs) (revision 5597) +++ DamEngine/trunk/src/Deltares.DamEngine.IntegrationTests/IntegrationTests/OperationalStabilityProfile1DTests.cs (.../OperationalStabilityProfile1DTests.cs) (revision 5599) @@ -32,17 +32,21 @@ public class OperationalStabilityProfile1DTests { [Test, Category(Categories.Slow)] - public void GivenStabilityInsideProfile1DProject_WhenCalculatingWithBishopGrid_ThenExpectedResultIsGenerated() + // Following testcase based on the DamLive test Deltares.DamLive.Tests.StabilityInsideBishopGridTest + // "Deltares.DamLive.Tests\TestData\IntegrationTests\StabilityInsideBishopGrid\DAMLive.damx" + // with DamLive rev.4860 + [TestCase("CalculateStabilityInsideBishopGrid1")] + // Following testcase based on the DamLive test Deltares.DamLive.Tests.StabilityInsideUpliftVanBeeSwarmTest + // "Deltares.DamLive.Tests\TestData\IntegrationTests\StabilityInsideUpliftVanBeeSwarm\DAMLive.damx" + // with DamLive rev.4860 + [TestCase("CalculateStabilityInsideUpliftVanBeeSwarm1")] + public void GivenStabilityInsideProfile1DProject_WhenCalculatingWithSpecifiedModel_ThenExpectedResultIsGenerated(string baseName) { - // Based on the DamLive test Deltares.DamLive.Tests.StabilityInsideBishopGridTest - // "Deltares.DamLive.Tests\TestData\IntegrationTests\StabilityInsideBishopGrid\DAMLive.damx" - // with DamLive rev.4860 - const string baseName = "CalculateStabilityInsideBishopGrid1"; - const string projectPath = baseName; const string calcDir = "DAMLive.Calc"; const string testFilesLocation = @".\TestFiles\Operational\Profile1DTests\"; - const string inputFilename = baseName + "InputFile.xml"; - const string outputFilename = baseName + "OutputFile.xml"; + string projectPath = baseName; + string inputFilename = baseName + "InputFile.xml"; + string outputFilename = baseName + "OutputFile.xml"; if (Directory.Exists(calcDir)) { Directory.Delete(calcDir, true); // delete previous results Index: DamEngine/trunk/src/Deltares.DamEngine.IntegrationTests/TestFiles/Operational/Profile1DTests/CalculateStabilityInsideUpliftVanBeeSwarm1OutputFile.xml =================================================================== diff -u --- DamEngine/trunk/src/Deltares.DamEngine.IntegrationTests/TestFiles/Operational/Profile1DTests/CalculateStabilityInsideUpliftVanBeeSwarm1OutputFile.xml (revision 0) +++ DamEngine/trunk/src/Deltares.DamEngine.IntegrationTests/TestFiles/Operational/Profile1DTests/CalculateStabilityInsideUpliftVanBeeSwarm1OutputFile.xml (revision 5599) @@ -0,0 +1,213 @@ +��<?xml version="1.0" encoding="utf-16"?> + +<Output xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + + <Results> + + <OperationalOutputTimeSeries> + + <TimeSerie ForecastDateTime="0001-01-01T00:00:00" Type="instantaneous" LocationId="Purmer_PU0042+00_K" ParameterId="StabilityInsideFactor" StartDateTime="2016-03-02T03:10:00" EndDateTime="2018-07-05T10:00:00" MissVal="NaN" StationName="MPN-AS-1743" Units="mNAP"> + + <TimeStep Divider="1" Multiplier="600" DividerSpecified="true" MultiplierSpecified="true" TimeStepUnit="0" /> + + <Entries> + + <TimeSerieEntry DateTime="2016-03-02T03:10:00" Value="1.4472423094317246" Flag-nietechtgebruikt="0" /> + + <TimeSerieEntry DateTime="2016-03-02T03:20:00" Value="1.5711897852892798" Flag-nietechtgebruikt="0" /> + + </Entries> + + </TimeSerie> + + <TimeSerie ForecastDateTime="0001-01-01T00:00:00" Type="instantaneous" LocationId="Purmer_PU0042+00_K_V" ParameterId="StabilityInsideFactor" StartDateTime="2016-03-02T03:10:00" EndDateTime="2018-07-05T10:00:00" MissVal="NaN" StationName="MPN-AS-1743" Units="mNAP"> + + <TimeStep Divider="1" Multiplier="600" DividerSpecified="true" MultiplierSpecified="true" TimeStepUnit="0" /> + + <Entries> + + <TimeSerieEntry DateTime="2016-03-02T03:10:00" Value="1.3468407701267828" Flag-nietechtgebruikt="0" /> + + <TimeSerieEntry DateTime="2016-03-02T03:20:00" Value="1.4668447207194364" Flag-nietechtgebruikt="0" /> + + </Entries> + + </TimeSerie> + + <TimeSerie ForecastDateTime="0001-01-01T00:00:00" Type="instantaneous" LocationId="Purmer_PU0042+00_R" ParameterId="StabilityInsideFactor" StartDateTime="2016-03-02T03:10:00" EndDateTime="2018-07-05T10:00:00" MissVal="NaN" StationName="MPN-AS-1743" Units="mNAP"> + + <TimeStep Divider="1" Multiplier="600" DividerSpecified="true" MultiplierSpecified="true" TimeStepUnit="0" /> + + <Entries> + + <TimeSerieEntry DateTime="2016-03-02T03:10:00" Value="1.2398360563934039" Flag-nietechtgebruikt="0" /> + + <TimeSerieEntry DateTime="2016-03-02T03:20:00" Value="1.3482625155172154" Flag-nietechtgebruikt="0" /> + + </Entries> + + </TimeSerie> + + <TimeSerie ForecastDateTime="0001-01-01T00:00:00" Type="instantaneous" LocationId="Purmer_PU0042+00_R_V" ParameterId="StabilityInsideFactor" StartDateTime="2016-03-02T03:10:00" EndDateTime="2018-07-05T10:00:00" MissVal="NaN" StationName="MPN-AS-1743" Units="mNAP"> + + <TimeStep Divider="1" Multiplier="600" DividerSpecified="true" MultiplierSpecified="true" TimeStepUnit="0" /> + + <Entries> + + <TimeSerieEntry DateTime="2016-03-02T03:10:00" Value="1.1548447129889727" Flag-nietechtgebruikt="0" /> + + <TimeSerieEntry DateTime="2016-03-02T03:20:00" Value="1.2597265657736518" Flag-nietechtgebruikt="0" /> + + </Entries> + + </TimeSerie> + + <TimeSerie ForecastDateTime="0001-01-01T00:00:00" Type="instantaneous" LocationId="Purmer_PU0110+20_K" ParameterId="StabilityInsideFactor" StartDateTime="2016-03-02T03:10:00" EndDateTime="2018-07-05T10:00:00" MissVal="NaN" StationName="MPN-AS-1743" Units="mNAP"> + + <TimeStep Divider="1" Multiplier="600" DividerSpecified="true" MultiplierSpecified="true" TimeStepUnit="0" /> + + <Entries> + + <TimeSerieEntry DateTime="2016-03-02T03:10:00" Value="NaN" Flag-nietechtgebruikt="0" /> + + <TimeSerieEntry DateTime="2016-03-02T03:20:00" Value="NaN" Flag-nietechtgebruikt="0" /> + + </Entries> + + </TimeSerie> + + <TimeSerie ForecastDateTime="0001-01-01T00:00:00" Type="instantaneous" LocationId="Purmer_PU0110+20_K_V" ParameterId="StabilityInsideFactor" StartDateTime="2016-03-02T03:10:00" EndDateTime="2018-07-05T10:00:00" MissVal="NaN" StationName="MPN-AS-1743" Units="mNAP"> + + <TimeStep Divider="1" Multiplier="600" DividerSpecified="true" MultiplierSpecified="true" TimeStepUnit="0" /> + + <Entries> + + <TimeSerieEntry DateTime="2016-03-02T03:10:00" Value="NaN" Flag-nietechtgebruikt="0" /> + + <TimeSerieEntry DateTime="2016-03-02T03:20:00" Value="NaN" Flag-nietechtgebruikt="0" /> + + </Entries> + + </TimeSerie> + + <TimeSerie ForecastDateTime="0001-01-01T00:00:00" Type="instantaneous" LocationId="Purmer_PU0110+20_R" ParameterId="StabilityInsideFactor" StartDateTime="2016-03-02T03:10:00" EndDateTime="2018-07-05T10:00:00" MissVal="NaN" StationName="MPN-AS-1743" Units="mNAP"> + + <TimeStep Divider="1" Multiplier="600" DividerSpecified="true" MultiplierSpecified="true" TimeStepUnit="0" /> + + <Entries> + + <TimeSerieEntry DateTime="2016-03-02T03:10:00" Value="NaN" Flag-nietechtgebruikt="0" /> + + <TimeSerieEntry DateTime="2016-03-02T03:20:00" Value="NaN" Flag-nietechtgebruikt="0" /> + + </Entries> + + </TimeSerie> + + <TimeSerie ForecastDateTime="0001-01-01T00:00:00" Type="instantaneous" LocationId="Purmer_PU0110+20_R_V" ParameterId="StabilityInsideFactor" StartDateTime="2016-03-02T03:10:00" EndDateTime="2018-07-05T10:00:00" MissVal="NaN" StationName="MPN-AS-1743" Units="mNAP"> + + <TimeStep Divider="1" Multiplier="600" DividerSpecified="true" MultiplierSpecified="true" TimeStepUnit="0" /> + + <Entries> + + <TimeSerieEntry DateTime="2016-03-02T03:10:00" Value="NaN" Flag-nietechtgebruikt="0" /> + + <TimeSerieEntry DateTime="2016-03-02T03:20:00" Value="NaN" Flag-nietechtgebruikt="0" /> + + </Entries> + + </TimeSerie> + + </OperationalOutputTimeSeries> + + <CalculationMessages> + + <Message MessageType="Info" Message="There are 8 locations with sensor data" /> + + <Message MessageType="Warning" Message="Dik(dike)_Loc(Purmer_PU0042+00_K)_Stp(0)_Mdl(UpliftVan)_2016-03-02T03_10_00_Pro(Purmer_PU0042+00K): A slice is beyond the geometry at x = 38,776346898726885 z = -3,2196553880145196, so a valid soil could not be determined." /> + + <Message MessageType="Warning" Message="Dik(dike)_Loc(Purmer_PU0042+00_K)_Stp(0)_Mdl(UpliftVan)_2016-03-02T03_10_00_Pro(Purmer_PU0042+00K): A slice is beyond the geometry at x = 38,51912669914921 z = -3,1591293541227685, so a valid soil could not be determined." /> + + <Message MessageType="Info" Message="Dik(dike)_Loc(Purmer_PU0042+00_K)_Stp(0)_Mdl(UpliftVan)_2016-03-02T03_10_00_Pro(Purmer_PU0042+00K): 531 sliding curves were not calculated, because they do not intersect with the subsoil" /> + + <Message MessageType="Info" Message="Dik(dike)_Loc(Purmer_PU0042+00_K)_Stp(0)_Mdl(UpliftVan)_2016-03-02T03_10_00_Pro(Purmer_PU0042+00K): 11 sliding curves were not calculated, because their entry or exit point is higher than the circle center" /> + + <Message MessageType="Info" Message="Dik(dike)_Loc(Purmer_PU0042+00_K)_Stp(0)_Mdl(UpliftVan)_2016-03-02T03_10_00_Pro(Purmer_PU0042+00K): 23 sliding curves were not calculated, because they circle center is below the surface line" /> + + <Message MessageType="Warning" Message="Dik(dike)_Loc(Purmer_PU0042+00_K)_Stp(1)_Mdl(UpliftVan)_2016-03-02T03_20_00_Pro(Purmer_PU0042+00K): A slice is beyond the geometry at x = 38,776346898726885 z = -3,2196553880145196, so a valid soil could not be determined." /> + + <Message MessageType="Warning" Message="Dik(dike)_Loc(Purmer_PU0042+00_K)_Stp(1)_Mdl(UpliftVan)_2016-03-02T03_20_00_Pro(Purmer_PU0042+00K): A slice is beyond the geometry at x = 38,51912669914921 z = -3,1591293541227685, so a valid soil could not be determined." /> + + <Message MessageType="Info" Message="Dik(dike)_Loc(Purmer_PU0042+00_K)_Stp(1)_Mdl(UpliftVan)_2016-03-02T03_20_00_Pro(Purmer_PU0042+00K): 610 sliding curves were not calculated, because they do not intersect with the subsoil" /> + + <Message MessageType="Info" Message="Dik(dike)_Loc(Purmer_PU0042+00_K)_Stp(1)_Mdl(UpliftVan)_2016-03-02T03_20_00_Pro(Purmer_PU0042+00K): 6 sliding curves were not calculated, because their entry or exit point is higher than the circle center" /> + + <Message MessageType="Info" Message="Dik(dike)_Loc(Purmer_PU0042+00_K)_Stp(1)_Mdl(UpliftVan)_2016-03-02T03_20_00_Pro(Purmer_PU0042+00K): 30 sliding curves were not calculated, because they circle center is below the surface line" /> + + <Message MessageType="Warning" Message="Dik(dike)_Loc(Purmer_PU0042+00_K_V)_Stp(0)_Mdl(UpliftVan)_2016-03-02T03_10_00_Pro(Purmer_PU0042+00K): A slice is beyond the geometry at x = 38,776346898726885 z = -3,2196553880145196, so a valid soil could not be determined." /> + + <Message MessageType="Warning" Message="Dik(dike)_Loc(Purmer_PU0042+00_K_V)_Stp(0)_Mdl(UpliftVan)_2016-03-02T03_10_00_Pro(Purmer_PU0042+00K): A slice is beyond the geometry at x = 38,51912669914921 z = -3,1591293541227685, so a valid soil could not be determined." /> + + <Message MessageType="Info" Message="Dik(dike)_Loc(Purmer_PU0042+00_K_V)_Stp(0)_Mdl(UpliftVan)_2016-03-02T03_10_00_Pro(Purmer_PU0042+00K): 699 sliding curves were not calculated, because they do not intersect with the subsoil" /> + + <Message MessageType="Info" Message="Dik(dike)_Loc(Purmer_PU0042+00_K_V)_Stp(0)_Mdl(UpliftVan)_2016-03-02T03_10_00_Pro(Purmer_PU0042+00K): 106 sliding curves were not calculated, because their entry or exit point is higher than the circle center" /> + + <Message MessageType="Info" Message="Dik(dike)_Loc(Purmer_PU0042+00_K_V)_Stp(0)_Mdl(UpliftVan)_2016-03-02T03_10_00_Pro(Purmer_PU0042+00K): 181 sliding curves were not calculated, because they circle center is below the surface line" /> + + <Message MessageType="Warning" Message="Dik(dike)_Loc(Purmer_PU0042+00_K_V)_Stp(1)_Mdl(UpliftVan)_2016-03-02T03_20_00_Pro(Purmer_PU0042+00K): A slice is beyond the geometry at x = 38,776346898726885 z = -3,2196553880145196, so a valid soil could not be determined." /> + + <Message MessageType="Warning" Message="Dik(dike)_Loc(Purmer_PU0042+00_K_V)_Stp(1)_Mdl(UpliftVan)_2016-03-02T03_20_00_Pro(Purmer_PU0042+00K): A slice is beyond the geometry at x = 38,51912669914921 z = -3,1591293541227685, so a valid soil could not be determined." /> + + <Message MessageType="Info" Message="Dik(dike)_Loc(Purmer_PU0042+00_K_V)_Stp(1)_Mdl(UpliftVan)_2016-03-02T03_20_00_Pro(Purmer_PU0042+00K): 705 sliding curves were not calculated, because they do not intersect with the subsoil" /> + + <Message MessageType="Info" Message="Dik(dike)_Loc(Purmer_PU0042+00_K_V)_Stp(1)_Mdl(UpliftVan)_2016-03-02T03_20_00_Pro(Purmer_PU0042+00K): 101 sliding curves were not calculated, because their entry or exit point is higher than the circle center" /> + + <Message MessageType="Info" Message="Dik(dike)_Loc(Purmer_PU0042+00_K_V)_Stp(1)_Mdl(UpliftVan)_2016-03-02T03_20_00_Pro(Purmer_PU0042+00K): 174 sliding curves were not calculated, because they circle center is below the surface line" /> + + <Message MessageType="Warning" Message="Dik(dike)_Loc(Purmer_PU0042+00_R)_Stp(0)_Mdl(UpliftVan)_2016-03-02T03_10_00_Pro(Purmer_PU0042+00): A slice is beyond the geometry at x = 38,776346898726885 z = -3,2196553880145196, so a valid soil could not be determined." /> + + <Message MessageType="Warning" Message="Dik(dike)_Loc(Purmer_PU0042+00_R)_Stp(0)_Mdl(UpliftVan)_2016-03-02T03_10_00_Pro(Purmer_PU0042+00): A slice is beyond the geometry at x = 38,51912669914921 z = -3,1591293541227685, so a valid soil could not be determined." /> + + <Message MessageType="Info" Message="Dik(dike)_Loc(Purmer_PU0042+00_R)_Stp(0)_Mdl(UpliftVan)_2016-03-02T03_10_00_Pro(Purmer_PU0042+00): 531 sliding curves were not calculated, because they do not intersect with the subsoil" /> + + <Message MessageType="Info" Message="Dik(dike)_Loc(Purmer_PU0042+00_R)_Stp(0)_Mdl(UpliftVan)_2016-03-02T03_10_00_Pro(Purmer_PU0042+00): 11 sliding curves were not calculated, because their entry or exit point is higher than the circle center" /> + + <Message MessageType="Info" Message="Dik(dike)_Loc(Purmer_PU0042+00_R)_Stp(0)_Mdl(UpliftVan)_2016-03-02T03_10_00_Pro(Purmer_PU0042+00): 23 sliding curves were not calculated, because they circle center is below the surface line" /> + + <Message MessageType="Warning" Message="Dik(dike)_Loc(Purmer_PU0042+00_R)_Stp(1)_Mdl(UpliftVan)_2016-03-02T03_20_00_Pro(Purmer_PU0042+00): A slice is beyond the geometry at x = 38,776346898726885 z = -3,2196553880145196, so a valid soil could not be determined." /> + + <Message MessageType="Warning" Message="Dik(dike)_Loc(Purmer_PU0042+00_R)_Stp(1)_Mdl(UpliftVan)_2016-03-02T03_20_00_Pro(Purmer_PU0042+00): A slice is beyond the geometry at x = 38,51912669914921 z = -3,1591293541227685, so a valid soil could not be determined." /> + + <Message MessageType="Info" Message="Dik(dike)_Loc(Purmer_PU0042+00_R)_Stp(1)_Mdl(UpliftVan)_2016-03-02T03_20_00_Pro(Purmer_PU0042+00): 610 sliding curves were not calculated, because they do not intersect with the subsoil" /> + + <Message MessageType="Info" Message="Dik(dike)_Loc(Purmer_PU0042+00_R)_Stp(1)_Mdl(UpliftVan)_2016-03-02T03_20_00_Pro(Purmer_PU0042+00): 6 sliding curves were not calculated, because their entry or exit point is higher than the circle center" /> + + <Message MessageType="Info" Message="Dik(dike)_Loc(Purmer_PU0042+00_R)_Stp(1)_Mdl(UpliftVan)_2016-03-02T03_20_00_Pro(Purmer_PU0042+00): 30 sliding curves were not calculated, because they circle center is below the surface line" /> + + <Message MessageType="Warning" Message="Dik(dike)_Loc(Purmer_PU0042+00_R_V)_Stp(0)_Mdl(UpliftVan)_2016-03-02T03_10_00_Pro(Purmer_PU0042+00): A slice is beyond the geometry at x = 38,776346898726885 z = -3,2196553880145196, so a valid soil could not be determined." /> + + <Message MessageType="Warning" Message="Dik(dike)_Loc(Purmer_PU0042+00_R_V)_Stp(0)_Mdl(UpliftVan)_2016-03-02T03_10_00_Pro(Purmer_PU0042+00): A slice is beyond the geometry at x = 38,51912669914921 z = -3,1591293541227685, so a valid soil could not be determined." /> + + <Message MessageType="Info" Message="Dik(dike)_Loc(Purmer_PU0042+00_R_V)_Stp(0)_Mdl(UpliftVan)_2016-03-02T03_10_00_Pro(Purmer_PU0042+00): 699 sliding curves were not calculated, because they do not intersect with the subsoil" /> + + <Message MessageType="Info" Message="Dik(dike)_Loc(Purmer_PU0042+00_R_V)_Stp(0)_Mdl(UpliftVan)_2016-03-02T03_10_00_Pro(Purmer_PU0042+00): 106 sliding curves were not calculated, because their entry or exit point is higher than the circle center" /> + + <Message MessageType="Info" Message="Dik(dike)_Loc(Purmer_PU0042+00_R_V)_Stp(0)_Mdl(UpliftVan)_2016-03-02T03_10_00_Pro(Purmer_PU0042+00): 181 sliding curves were not calculated, because they circle center is below the surface line" /> + + <Message MessageType="Warning" Message="Dik(dike)_Loc(Purmer_PU0042+00_R_V)_Stp(1)_Mdl(UpliftVan)_2016-03-02T03_20_00_Pro(Purmer_PU0042+00): A slice is beyond the geometry at x = 38,776346898726885 z = -3,2196553880145196, so a valid soil could not be determined." /> + + <Message MessageType="Warning" Message="Dik(dike)_Loc(Purmer_PU0042+00_R_V)_Stp(1)_Mdl(UpliftVan)_2016-03-02T03_20_00_Pro(Purmer_PU0042+00): A slice is beyond the geometry at x = 38,51912669914921 z = -3,1591293541227685, so a valid soil could not be determined." /> + + <Message MessageType="Info" Message="Dik(dike)_Loc(Purmer_PU0042+00_R_V)_Stp(1)_Mdl(UpliftVan)_2016-03-02T03_20_00_Pro(Purmer_PU0042+00): 705 sliding curves were not calculated, because they do not intersect with the subsoil" /> + + <Message MessageType="Info" Message="Dik(dike)_Loc(Purmer_PU0042+00_R_V)_Stp(1)_Mdl(UpliftVan)_2016-03-02T03_20_00_Pro(Purmer_PU0042+00): 101 sliding curves were not calculated, because their entry or exit point is higher than the circle center" /> + + <Message MessageType="Info" Message="Dik(dike)_Loc(Purmer_PU0042+00_R_V)_Stp(1)_Mdl(UpliftVan)_2016-03-02T03_20_00_Pro(Purmer_PU0042+00): 174 sliding curves were not calculated, because they circle center is below the surface line" /> + + </CalculationMessages> + + </Results> + + <ValidationResults /> + +</Output> \ No newline at end of file Index: DamEngine/trunk/src/Deltares.DamEngine.IntegrationTests/TestFiles/Operational/Profile1DTests/CalculateStabilityInsideUpliftVanBeeSwarm1InputFile.xml =================================================================== diff -u --- DamEngine/trunk/src/Deltares.DamEngine.IntegrationTests/TestFiles/Operational/Profile1DTests/CalculateStabilityInsideUpliftVanBeeSwarm1InputFile.xml (revision 0) +++ DamEngine/trunk/src/Deltares.DamEngine.IntegrationTests/TestFiles/Operational/Profile1DTests/CalculateStabilityInsideUpliftVanBeeSwarm1InputFile.xml (revision 5599) @@ -0,0 +1,586 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file