Index: Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Data/Input/Structures/StructuresClosureCalculationInput.cs =================================================================== diff -u -r63ac397116210e4f1c7ac94c45459fffd1f3ec0a -r9806465f26a0c0e98420161d43c2e1b64ac6b0b4 --- Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Data/Input/Structures/StructuresClosureCalculationInput.cs (.../StructuresClosureCalculationInput.cs) (revision 63ac397116210e4f1c7ac94c45459fffd1f3ec0a) +++ Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Data/Input/Structures/StructuresClosureCalculationInput.cs (.../StructuresClosureCalculationInput.cs) (revision 9806465f26a0c0e98420161d43c2e1b64ac6b0b4) @@ -29,6 +29,7 @@ public abstract class StructuresClosureCalculationInput : ExceedanceProbabilityCalculationInput { private readonly HydraRingSection hydraRingSection; + private readonly IEnumerable forelandPoints; private readonly double gravitationalAcceleration; private readonly double factorStormDurationOpenStructure; private readonly double failureProbabilityOpenStructure; @@ -55,6 +56,7 @@ /// /// The id of the hydraulic station to use during the calculation. /// The section to use during the calculation. + /// The foreland points to use during the calculation. /// The gravitational acceleration to use during the calculation. /// The factor of the storm duration for an open structure to use during the calculation. /// The failure probability for an open structure to use during the calculation. @@ -76,6 +78,7 @@ /// The variation of the storm duration to use during the calculation. /// The propability of an open structure before flooding to use during the calculation. protected StructuresClosureCalculationInput(long hydraulicBoundaryLocationId, HydraRingSection hydraRingSection, + IEnumerable forelandPoints, double hydraRingGravitationalAcceleration, double hydraRingFactorStormDurationOpenStructure, double hydraRingFailureProbabilityOpenStructure, double hydraRingFailureProbabilityReparation, double hydraRingIdenticalAperture, double hydraRingAllowableIncreaseOfLevelForStorageMean, @@ -89,6 +92,7 @@ : base(hydraulicBoundaryLocationId) { this.hydraRingSection = hydraRingSection; + this.forelandPoints = forelandPoints; gravitationalAcceleration = hydraRingGravitationalAcceleration; factorStormDurationOpenStructure = hydraRingFactorStormDurationOpenStructure; failureProbabilityOpenStructure = hydraRingFailureProbabilityOpenStructure; @@ -135,6 +139,14 @@ } } + public override IEnumerable ForelandsPoints + { + get + { + return forelandPoints; + } + } + public override IEnumerable Variables { get Index: Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Data/Input/Structures/StructuresClosureFloodedCulvertCalculationInput.cs =================================================================== diff -u -r005a3c4605da079014376d3ba779cb1478dcdaec -r9806465f26a0c0e98420161d43c2e1b64ac6b0b4 --- Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Data/Input/Structures/StructuresClosureFloodedCulvertCalculationInput.cs (.../StructuresClosureFloodedCulvertCalculationInput.cs) (revision 005a3c4605da079014376d3ba779cb1478dcdaec) +++ Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Data/Input/Structures/StructuresClosureFloodedCulvertCalculationInput.cs (.../StructuresClosureFloodedCulvertCalculationInput.cs) (revision 9806465f26a0c0e98420161d43c2e1b64ac6b0b4) @@ -41,6 +41,7 @@ /// /// The id of the hydraulic station to use during the calculation. /// The section to use during the calculation. + /// The foreland points to use during the calculation. /// The gravitational acceleration to use during the calculation. /// The factor of the storm duration for an open structure to use during the calculation. /// The failure probability for an open structure to use during the calculation. @@ -68,6 +69,7 @@ /// The mean of the waterlevel inside to use during the calculation. /// The standard deviation of the waterlevel inside to use during the calculation. public StructuresClosureFloodedCulvertCalculationInput(long hydraulicBoundaryLocationId, HydraRingSection hydraRingSection, + IEnumerable forelandPoints, double hydraRingGravitationalAcceleration, double hydraRingFactorStormDurationOpenStructure, double hydraRingFailureProbabilityOpenStructure, double hydraRingFailureProbabilityReparation, double hydraRingIdenticalAperture, double hydraRingAllowableIncreaseOfLevelForStorageMean, @@ -81,7 +83,7 @@ double hydraRingDrainCoefficientMean, double hydraRingDrainCoefficientStandardDeviation, double hydraRingAreaFlowAperturesMean, double hydraRingAreaFlowAperturesStandardDeviation, double hydraRingWaterLevelInsideMean, double hydraRingWaterLevelInsideStandardDeviation) - : base(hydraulicBoundaryLocationId, hydraRingSection, + : base(hydraulicBoundaryLocationId, hydraRingSection, forelandPoints, hydraRingGravitationalAcceleration, hydraRingFactorStormDurationOpenStructure, hydraRingFailureProbabilityOpenStructure, hydraRingFailureProbabilityReparation, hydraRingIdenticalAperture, hydraRingAllowableIncreaseOfLevelForStorageMean, Index: Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Data/Input/Structures/StructuresClosureLowSillCalculationInput.cs =================================================================== diff -u -r8efa69259273360cbc69986142938d7e1e826b2a -r9806465f26a0c0e98420161d43c2e1b64ac6b0b4 --- Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Data/Input/Structures/StructuresClosureLowSillCalculationInput.cs (.../StructuresClosureLowSillCalculationInput.cs) (revision 8efa69259273360cbc69986142938d7e1e826b2a) +++ Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Data/Input/Structures/StructuresClosureLowSillCalculationInput.cs (.../StructuresClosureLowSillCalculationInput.cs) (revision 9806465f26a0c0e98420161d43c2e1b64ac6b0b4) @@ -45,6 +45,7 @@ /// /// The id of the hydraulic station to use during the calculation. /// The section to use during the calculation. + /// The foreland points to use during the calculation. /// The gravitational acceleration to use during the calculation. /// The factor of the storm duration for an open structure to use during the calculation. /// The failure probability for an open structure to use during the calculation. @@ -76,23 +77,24 @@ /// The mean of the width of flow apertures to use during the calculation. /// The variation of the width of flow apertures to use during the calculation. public StructuresClosureLowSillCalculationInput(long hydraulicBoundaryLocationId, HydraRingSection hydraRingSection, - double hydraRingGravitationalAcceleration, double hydraRingFactorStormDurationOpenStructure, - double hydraRingFailureProbabilityOpenStructure, double hydraRingFailureProbabilityReparation, - double hydraRingIdenticalAperture, double hydraRingAllowableIncreaseOfLevelForStorageMean, - double hydraRingAllowableIncreaseOfLevelForStorageStandardDeviation, double hydraRingModelFactorForStorageVolumeMean, - double hydraRingModelFactorForStorageVolumeStandardDeviation, double hydraRingStorageStructureAreaMean, - double hydraRingStorageStructureAreaVariation, double hydraRingModelFactorForIncomingFlowVolume, - double hydraRingFlowWidthAtBottomProtectionMean, double hydraRingFlowWidthAtBottomProtectionStandardDeviation, - double hydraRingCriticalOvertoppingDischargeMean, double hydraRingCriticalOvertoppingDischargeVariation, - double hydraRingFailureProbabilityOfStructureGivenErosion, double hydraRingStormDurationMean, - double hydraRingStormDurationVariation, double hydraRingProbabilityOpenStructureBeforeFlooding, - double hydraRingModelFactorSubcriticalFlowMean, double hydraRingModelFactorSubcriticalFlowVariation, - double hydraRingThresholdLowWeirHeightMean, double hydraRingThresholdLowWeirHeightStandardDeviation, - double hydraRingWaterLevelInsideMean, double hydraRingWaterLevelInsideStandardDeviation, - double hydraRingModelFactorOvertoppingSupercriticalFlowMean, - double hydraRingModelFactorOvertoppingSupercriticalFlowStandardDeviation, - double hydraRingWidthOfFlowAperturesMean, double hydraRingWidthOfFlowAperturesVariation) - : base(hydraulicBoundaryLocationId, hydraRingSection, + IEnumerable forelandPoints, + double hydraRingGravitationalAcceleration, double hydraRingFactorStormDurationOpenStructure, + double hydraRingFailureProbabilityOpenStructure, double hydraRingFailureProbabilityReparation, + double hydraRingIdenticalAperture, double hydraRingAllowableIncreaseOfLevelForStorageMean, + double hydraRingAllowableIncreaseOfLevelForStorageStandardDeviation, double hydraRingModelFactorForStorageVolumeMean, + double hydraRingModelFactorForStorageVolumeStandardDeviation, double hydraRingStorageStructureAreaMean, + double hydraRingStorageStructureAreaVariation, double hydraRingModelFactorForIncomingFlowVolume, + double hydraRingFlowWidthAtBottomProtectionMean, double hydraRingFlowWidthAtBottomProtectionStandardDeviation, + double hydraRingCriticalOvertoppingDischargeMean, double hydraRingCriticalOvertoppingDischargeVariation, + double hydraRingFailureProbabilityOfStructureGivenErosion, double hydraRingStormDurationMean, + double hydraRingStormDurationVariation, double hydraRingProbabilityOpenStructureBeforeFlooding, + double hydraRingModelFactorSubcriticalFlowMean, double hydraRingModelFactorSubcriticalFlowVariation, + double hydraRingThresholdLowWeirHeightMean, double hydraRingThresholdLowWeirHeightStandardDeviation, + double hydraRingWaterLevelInsideMean, double hydraRingWaterLevelInsideStandardDeviation, + double hydraRingModelFactorOvertoppingSupercriticalFlowMean, + double hydraRingModelFactorOvertoppingSupercriticalFlowStandardDeviation, + double hydraRingWidthOfFlowAperturesMean, double hydraRingWidthOfFlowAperturesVariation) + : base(hydraulicBoundaryLocationId, hydraRingSection, forelandPoints, hydraRingGravitationalAcceleration, hydraRingFactorStormDurationOpenStructure, hydraRingFailureProbabilityOpenStructure, hydraRingFailureProbabilityReparation, hydraRingIdenticalAperture, hydraRingAllowableIncreaseOfLevelForStorageMean, Index: Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Data/Input/Structures/StructuresClosureVerticalWallCalculationInput.cs =================================================================== diff -u -r86d6815d711c4fe513664b80b959068c62ae9a2d -r9806465f26a0c0e98420161d43c2e1b64ac6b0b4 --- Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Data/Input/Structures/StructuresClosureVerticalWallCalculationInput.cs (.../StructuresClosureVerticalWallCalculationInput.cs) (revision 86d6815d711c4fe513664b80b959068c62ae9a2d) +++ Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Data/Input/Structures/StructuresClosureVerticalWallCalculationInput.cs (.../StructuresClosureVerticalWallCalculationInput.cs) (revision 9806465f26a0c0e98420161d43c2e1b64ac6b0b4) @@ -44,6 +44,7 @@ /// /// The id of the hydraulic station to use during the calculation. /// The section to use during the calculation. + /// The foreland points to use during the calculation. /// The gravitational acceleration to use during the calculation. /// The factor of the storm duration for an open structure to use during the calculation. /// The failure probability for an open structure to use during the calculation. @@ -74,6 +75,7 @@ /// The mean of the width of flow apertures to use during the calculation. /// The variation of the width of flow apertures to use during the calculation. public StructuresClosureVerticalWallCalculationInput(long hydraulicBoundaryLocationId, HydraRingSection hydraRingSection, + IEnumerable forelandPoints, double hydraRingGravitationalAcceleration, double hydraRingFactorStormDurationOpenStructure, double hydraRingFailureProbabilityOpenStructure, double hydraRingFailureProbabilityReparation, double hydraRingIdenticalAperture, double hydraRingAllowableIncreaseOfLevelForStorageMean, @@ -89,7 +91,7 @@ double hydraRingModelFactorOvertoppingSupercriticalFlowStandardDeviation, double hydraRingLevelCrestOfStructuresNotClosingMean, double hydraRingLevelCrestOfStructuresNotClosingStandardDeviation, double hydraRingWidthOfFlowAperturesMean, double hydraRingWidthOfFlowAperturesVariation) - : base(hydraulicBoundaryLocationId, hydraRingSection, + : base(hydraulicBoundaryLocationId, hydraRingSection, forelandPoints, hydraRingGravitationalAcceleration, hydraRingFactorStormDurationOpenStructure, hydraRingFailureProbabilityOpenStructure, hydraRingFailureProbabilityReparation, hydraRingIdenticalAperture, hydraRingAllowableIncreaseOfLevelForStorageMean, Index: Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Data/Input/Structures/StructuresClosureCalculationInputTest.cs =================================================================== diff -u -r63ac397116210e4f1c7ac94c45459fffd1f3ec0a -r9806465f26a0c0e98420161d43c2e1b64ac6b0b4 --- Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Data/Input/Structures/StructuresClosureCalculationInputTest.cs (.../StructuresClosureCalculationInputTest.cs) (revision 63ac397116210e4f1c7ac94c45459fffd1f3ec0a) +++ Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Data/Input/Structures/StructuresClosureCalculationInputTest.cs (.../StructuresClosureCalculationInputTest.cs) (revision 9806465f26a0c0e98420161d43c2e1b64ac6b0b4) @@ -39,6 +39,7 @@ // Setup const int hydraulicBoundaryLocationId = 1000; var hydraRingSection = new HydraRingSection(1, double.NaN, double.NaN); + var forelandPoints = Enumerable.Empty(); const double gravitationalAcceleration = 9.81; const double factorStormDurationOpenStructure = 0.1; @@ -62,7 +63,7 @@ const double probabilityOpenStructureBeforeFlooding = 0.04; // Call - var input = new TestStructuresClosureCalculationInput(hydraulicBoundaryLocationId, hydraRingSection, + var input = new TestStructuresClosureCalculationInput(hydraulicBoundaryLocationId, hydraRingSection, forelandPoints, gravitationalAcceleration, factorStormDurationOpenStructure, failureProbabilityOpenStructure, failureProbabilityReparation, identicalAperture, allowableIncreaseOfLevelForStorageMean, @@ -81,6 +82,7 @@ Assert.AreEqual(65, input.VariableId); Assert.AreEqual(HydraRingFailureMechanismType.StructuresClosure, input.FailureMechanismType); Assert.AreSame(hydraRingSection, input.Section); + Assert.AreSame(forelandPoints, input.ForelandsPoints); HydraRingVariableAssert.AreEqual(GetDefaultOvertoppingVariables().ToArray(), input.Variables.ToArray()); } @@ -105,6 +107,7 @@ private class TestStructuresClosureCalculationInput : StructuresClosureCalculationInput { public TestStructuresClosureCalculationInput(long hydraulicBoundaryLocationId, HydraRingSection hydraRingSection, + IEnumerable forelandPoints, double hydraRingGravitationalAcceleration, double hydraRingFactorStormDurationOpenStructure, double hydraRingFailureProbabilityOpenStructure, double hydraRingFailureProbabilityReparation, double hydraRingIdenticalAperture, double hydraRingAllowableIncreaseOfLevelForStorageMean, @@ -115,7 +118,7 @@ double hydraRingCriticalOvertoppingDischargeMean, double hydraRingCriticalOvertoppingDischargeVariation, double hydraRingFailureProbabilityOfStructureGivenErosion, double hydraRingStormDurationMean, double hydraRingStormDurationVariation, double hydraRingProbabilityOpenStructureBeforeFlooding) - : base(hydraulicBoundaryLocationId, hydraRingSection, + : base(hydraulicBoundaryLocationId, hydraRingSection, forelandPoints, hydraRingGravitationalAcceleration, hydraRingFactorStormDurationOpenStructure, hydraRingFailureProbabilityOpenStructure, hydraRingFailureProbabilityReparation, hydraRingIdenticalAperture, hydraRingAllowableIncreaseOfLevelForStorageMean, Index: Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Data/Input/Structures/StructuresClosureFloodedCulvertCalculationInputTest.cs =================================================================== diff -u -r005a3c4605da079014376d3ba779cb1478dcdaec -r9806465f26a0c0e98420161d43c2e1b64ac6b0b4 --- Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Data/Input/Structures/StructuresClosureFloodedCulvertCalculationInputTest.cs (.../StructuresClosureFloodedCulvertCalculationInputTest.cs) (revision 005a3c4605da079014376d3ba779cb1478dcdaec) +++ Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Data/Input/Structures/StructuresClosureFloodedCulvertCalculationInputTest.cs (.../StructuresClosureFloodedCulvertCalculationInputTest.cs) (revision 9806465f26a0c0e98420161d43c2e1b64ac6b0b4) @@ -37,6 +37,7 @@ // Setup const int hydraulicBoundaryLocationId = 1000; var hydraRingSection = new HydraRingSection(1, double.NaN, double.NaN); + var forelandPoints = Enumerable.Empty(); const double gravitationalAcceleration = 9.81; const double factorStormDurationOpenStructure = 0.1; @@ -66,7 +67,7 @@ const double waterLevelInsideStandardDeviation = 0.1; // Call - var input = new StructuresClosureFloodedCulvertCalculationInput(hydraulicBoundaryLocationId, hydraRingSection, + var input = new StructuresClosureFloodedCulvertCalculationInput(hydraulicBoundaryLocationId, hydraRingSection, forelandPoints, gravitationalAcceleration, factorStormDurationOpenStructure, failureProbabilityOpenStructure, failureProbabilityReparation, identicalAperture, allowableIncreaseOfLevelForStorageMean, @@ -88,6 +89,7 @@ Assert.AreEqual(65, input.VariableId); Assert.AreEqual(HydraRingFailureMechanismType.StructuresClosure, input.FailureMechanismType); Assert.AreSame(hydraRingSection, input.Section); + Assert.AreSame(forelandPoints, input.ForelandsPoints); HydraRingVariableAssert.AreEqual(GetDefaultOvertoppingVariables().ToArray(), input.Variables.ToArray()); } @@ -100,6 +102,7 @@ { // Setup var input = new StructuresClosureFloodedCulvertCalculationInput(111, new HydraRingSection(1, double.NaN, double.NaN), + Enumerable.Empty(), 1.1, 222, 333, 5.5, 6.6, 7.7, 8.8, 11, 22, 33, 44, 55, 66, 77, 88, 99, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21); Index: Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Data/Input/Structures/StructuresClosureLowSillCalculationInputTest.cs =================================================================== diff -u -r8efa69259273360cbc69986142938d7e1e826b2a -r9806465f26a0c0e98420161d43c2e1b64ac6b0b4 --- Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Data/Input/Structures/StructuresClosureLowSillCalculationInputTest.cs (.../StructuresClosureLowSillCalculationInputTest.cs) (revision 8efa69259273360cbc69986142938d7e1e826b2a) +++ Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Data/Input/Structures/StructuresClosureLowSillCalculationInputTest.cs (.../StructuresClosureLowSillCalculationInputTest.cs) (revision 9806465f26a0c0e98420161d43c2e1b64ac6b0b4) @@ -37,6 +37,7 @@ // Setup const int hydraulicBoundaryLocationId = 1000; var hydraRingSection = new HydraRingSection(1, double.NaN, double.NaN); + var forelandPoints = Enumerable.Empty(); const double gravitationalAcceleration = 9.81; const double factorStormDurationOpenStructure = 0.1; @@ -70,7 +71,7 @@ const double waterLevelInsideStandardDeviation = 0.1; // Call - var input = new StructuresClosureLowSillCalculationInput(hydraulicBoundaryLocationId, hydraRingSection, + var input = new StructuresClosureLowSillCalculationInput(hydraulicBoundaryLocationId, hydraRingSection, forelandPoints, gravitationalAcceleration, factorStormDurationOpenStructure, failureProbabilityOpenStructure, failureProbabilityReparation, identicalAperture, allowableIncreaseOfLevelForStorageMean, @@ -94,6 +95,7 @@ Assert.AreEqual(65, input.VariableId); Assert.AreEqual(HydraRingFailureMechanismType.StructuresClosure, input.FailureMechanismType); Assert.AreSame(hydraRingSection, input.Section); + Assert.AreSame(forelandPoints, input.ForelandsPoints); HydraRingVariableAssert.AreEqual(GetDefaultOvertoppingVariables().ToArray(), input.Variables.ToArray()); } @@ -106,6 +108,7 @@ { // Setup var input = new StructuresClosureLowSillCalculationInput(111, new HydraRingSection(1, double.NaN, double.NaN), + Enumerable.Empty(), 1.1, 222, 333, 5.5, 6.6, 7.7, 8.8, 11, 22, 33, 44, 55, 66, 77, 88, 99, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25); Index: Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Data/Input/Structures/StructuresClosureVerticalWallCalculationInputTest.cs =================================================================== diff -u -r63ac397116210e4f1c7ac94c45459fffd1f3ec0a -r9806465f26a0c0e98420161d43c2e1b64ac6b0b4 --- Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Data/Input/Structures/StructuresClosureVerticalWallCalculationInputTest.cs (.../StructuresClosureVerticalWallCalculationInputTest.cs) (revision 63ac397116210e4f1c7ac94c45459fffd1f3ec0a) +++ Ringtoets/HydraRing/test/Ringtoets.HydraRing.Calculation.Test/Data/Input/Structures/StructuresClosureVerticalWallCalculationInputTest.cs (.../StructuresClosureVerticalWallCalculationInputTest.cs) (revision 9806465f26a0c0e98420161d43c2e1b64ac6b0b4) @@ -37,6 +37,7 @@ // Setup const int hydraulicBoundaryLocationId = 1000; var hydraRingSection = new HydraRingSection(1, double.NaN, double.NaN); + var forelandPoints = Enumerable.Empty(); const double gravitationalAcceleration = 9.81; const double factorStormDurationOpenStructure = 0.1; @@ -69,7 +70,7 @@ const double widthOfFlowAperturesVariation = 0.05; // Call - var input = new StructuresClosureVerticalWallCalculationInput(hydraulicBoundaryLocationId, hydraRingSection, + var input = new StructuresClosureVerticalWallCalculationInput(hydraulicBoundaryLocationId, hydraRingSection, forelandPoints, gravitationalAcceleration, factorStormDurationOpenStructure, failureProbabilityOpenStructure, failureProbabilityReparation, identicalAperture, allowableIncreaseOfLevelForStorageMean, @@ -93,6 +94,7 @@ Assert.AreEqual(65, input.VariableId); Assert.AreEqual(HydraRingFailureMechanismType.StructuresClosure, input.FailureMechanismType); Assert.AreSame(hydraRingSection, input.Section); + Assert.AreSame(forelandPoints, input.ForelandsPoints); HydraRingVariableAssert.AreEqual(GetDefaultOvertoppingVariables().ToArray(), input.Variables.ToArray()); } @@ -105,6 +107,7 @@ { // Setup var input = new StructuresClosureVerticalWallCalculationInput(111, new HydraRingSection(1, double.NaN, double.NaN), + Enumerable.Empty(), 1.1, 222, 333, 5.5, 6.6, 7.7, 8.8, 11, 22, 33, 44, 55, 66, 77, 88, 99, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24);