SurfaceShiftFunctionFactory { public static Surface<Double, Double, Double> getShiftedSurface(final Surface<Double, Double, Double> surface, final double shift, final boolean useAdditive) { if (surface instanceof ConstantDoublesSurface) { return useAdditive ? CONSTANT_ADDITIVE.evaluate((ConstantDoublesSurface) surface, shift) : CONSTANT_MULTIPLICATIVE .evaluate((ConstantDoublesSurface) surface, shift); } if (surface instanceof FunctionalDoublesSurface) { return useAdditive ? FUNCTIONAL_ADDITIVE.evaluate((FunctionalDoublesSurface) surface, shift) : FUNCTIONAL_MULTIPLICATIVE.evaluate( (FunctionalDoublesSurface) surface, shift); } if (surface instanceof InterpolatedDoublesSurface) { return useAdditive ? INTERPOLATED_ADDITIVE.evaluate((InterpolatedDoublesSurface) surface, shift) : INTERPOLATED_MULTIPLICATIVE.evaluate( (InterpolatedDoublesSurface) surface, shift); } if (surface instanceof InterpolatedFromCurvesDoublesSurface && useAdditive) { return INTERPOLATED_FROM_CURVES_ADDITIVE.evaluate((InterpolatedFromCurvesDoublesSurface) surface, shift); } if (surface instanceof NodalDoublesSurface) { return useAdditive ? NODAL_ADDITIVE.evaluate((NodalDoublesSurface) surface, shift) : NODAL_MULTIPLICATIVE.evaluate((NodalDoublesSurface) surface, shift); } throw new IllegalArgumentException("Do not have a surface shift function for surface " + surface.getClass()); }  static SurfaceShiftFunction<?> getFunction(final Class<?> clazz); static Surface<Double, Double, Double> getShiftedSurface(final Surface<Double, Double, Double> surface, final double shift, final boolean useAdditive); static Surface<Double, Double, Double> getShiftedSurface(final Surface<Double, Double, Double> surface, final double x, final double y, final double shift,
      final boolean useAdditive); static Surface<Double, Double, Double> getShiftedSurface(final Surface<Double, Double, Double> surface, final double[] x, final double[] y,
      final double[] shift, final boolean useAdditive); static Surface<Double, Double, Double> getShiftedSurface(final Surface<Double, Double, Double> surface, final double shift, final String newName,
      final boolean useAdditive); static Surface<Double, Double, Double> getShiftedSurface(final Surface<Double, Double, Double> surface, final double x, final double y, final double shift,
      final String newName, final boolean useAdditive); static Surface<Double, Double, Double> getShiftedSurface(final Surface<Double, Double, Double> surface, final double[] x, final double[] y,
      final double[] shift, final String newName, final boolean useAdditive); static final ConstantSurfaceAdditiveShiftFunction CONSTANT_ADDITIVE; static final ConstantSurfaceMultiplicativeShiftFunction CONSTANT_MULTIPLICATIVE; static final FunctionalSurfaceAdditiveShiftFunction FUNCTIONAL_ADDITIVE; static final FunctionalSurfaceMultiplicativeShiftFunction FUNCTIONAL_MULTIPLICATIVE; static final InterpolatedSurfaceAdditiveShiftFunction INTERPOLATED_ADDITIVE; static final InterpolatedSurfaceMultiplicativeShiftFunction INTERPOLATED_MULTIPLICATIVE; static final InterpolatedFromCurvesSurfaceAdditiveShiftFunction INTERPOLATED_FROM_CURVES_ADDITIVE; static final NodalSurfaceAdditiveShiftFunction NODAL_ADDITIVE; static final NodalSurfaceMultiplicativeShiftFunction NODAL_MULTIPLICATIVE; }
@Test(expectedExceptions = IllegalArgumentException.class) public void testWrongCurveType1() { SurfaceShiftFunctionFactory.getShiftedSurface(DUMMY, .2, false); }
@Test(expectedExceptions = IllegalArgumentException.class) public void testWrongCurveType2() { SurfaceShiftFunctionFactory.getShiftedSurface(DUMMY, 1, 2, 3, false); }
@Test(expectedExceptions = IllegalArgumentException.class) public void testWrongCurveType3() { SurfaceShiftFunctionFactory.getShiftedSurface(DUMMY, new double[] {1}, new double[] {2}, new double[] {3}, false); }
@Test(expectedExceptions = IllegalArgumentException.class) public void testWrongCurveType4() { SurfaceShiftFunctionFactory.getShiftedSurface(DUMMY, .2, "N", false); }
@Test(expectedExceptions = IllegalArgumentException.class) public void testWrongCurveType5() { SurfaceShiftFunctionFactory.getShiftedSurface(DUMMY, 1, 2, 3, "N", false); }
@Test(expectedExceptions = IllegalArgumentException.class) public void testWrongCurveType6() { SurfaceShiftFunctionFactory.getShiftedSurface(DUMMY, new double[] {1}, new double[] {2}, new double[] {3}, "N", false); }
@Test(expectedExceptions = IllegalArgumentException.class) public void testGetMultiplicativeInterpolatedDoublesFromCurveSurface() { SurfaceShiftFunctionFactory.getShiftedSurface(INTERPOLATED_FROM_CURVES, 1, 1, 2, "M", false); }
@Test public void testGetAdditiveShiftedSurface1() { final double shift = 2; Surface<Double, Double, Double> shifted = SurfaceShiftFunctionFactory.getShiftedSurface(CONSTANT, shift, true); Surface<Double, Double, Double> expected = new ConstantSurfaceAdditiveShiftFunction().evaluate(CONSTANT, shift); assertEquals(shifted.getClass(), expected.getClass()); assertEquals(shifted.getZValue(1., 2.), expected.getZValue(1., 2.), 0); shifted = SurfaceShiftFunctionFactory.getShiftedSurface(INTERPOLATED, shift, true); expected = new InterpolatedSurfaceAdditiveShiftFunction().evaluate(INTERPOLATED, shift); assertEquals(shifted.getClass(), expected.getClass()); assertArrayEquals(shifted.getXData(), expected.getXData()); assertArrayEquals(shifted.getYData(), expected.getYData()); assertEquals(((InterpolatedDoublesSurface) shifted).getInterpolator(), ((InterpolatedDoublesSurface) expected).getInterpolator()); shifted = SurfaceShiftFunctionFactory.getShiftedSurface(INTERPOLATED_FROM_CURVES, shift, true); expected = new InterpolatedFromCurvesSurfaceAdditiveShiftFunction().evaluate(INTERPOLATED_FROM_CURVES, shift); assertEquals(shifted.getClass(), expected.getClass()); assertArrayEquals(((InterpolatedFromCurvesDoublesSurface) shifted).getCurves(), ((InterpolatedFromCurvesDoublesSurface) expected).getCurves()); assertEquals(((InterpolatedFromCurvesDoublesSurface) shifted).getInterpolator(), ((InterpolatedFromCurvesDoublesSurface) expected).getInterpolator()); shifted = SurfaceShiftFunctionFactory.getShiftedSurface(NODAL, shift, true); expected = new NodalSurfaceAdditiveShiftFunction().evaluate(NODAL, shift); assertEquals(shifted.getClass(), expected.getClass()); assertArrayEquals(shifted.getXData(), expected.getXData()); assertArrayEquals(shifted.getYData(), expected.getYData()); shifted = SurfaceShiftFunctionFactory.getShiftedSurface(FUNCTIONAL, shift, true); expected = new FunctionalSurfaceAdditiveShiftFunction().evaluate(FUNCTIONAL, shift); assertEquals(shifted.getClass(), expected.getClass()); assertEquals(shifted.getZValue(1., 2.), expected.getZValue(1., 2.)); final String newName = "F"; shifted = SurfaceShiftFunctionFactory.getShiftedSurface(CONSTANT, shift, newName, true); expected = new ConstantSurfaceAdditiveShiftFunction().evaluate(CONSTANT, shift, newName); assertEquals(expected, shifted); shifted = SurfaceShiftFunctionFactory.getShiftedSurface(INTERPOLATED, shift, newName, true); expected = new InterpolatedSurfaceAdditiveShiftFunction().evaluate(INTERPOLATED, shift, newName); assertEquals(expected, shifted); shifted = SurfaceShiftFunctionFactory.getShiftedSurface(INTERPOLATED_FROM_CURVES, shift, newName, true); expected = new InterpolatedFromCurvesSurfaceAdditiveShiftFunction().evaluate(INTERPOLATED_FROM_CURVES, shift, newName); assertEquals(expected, shifted); shifted = SurfaceShiftFunctionFactory.getShiftedSurface(NODAL, shift, newName, true); expected = new NodalSurfaceAdditiveShiftFunction().evaluate(NODAL, shift, newName); assertEquals(expected, shifted); shifted = SurfaceShiftFunctionFactory.getShiftedSurface(FUNCTIONAL, shift, newName, true); expected = new FunctionalSurfaceAdditiveShiftFunction().evaluate(FUNCTIONAL, shift, newName); assertEquals(shifted.getClass(), expected.getClass()); assertEquals(shifted.getZValue(1., 2.), expected.getZValue(1., 2.)); assertEquals(shifted.getName(), expected.getName()); }
@Test public void testGetMultiplicativeShiftedSurface1() { final double shift = 2; Surface<Double, Double, Double> shifted = SurfaceShiftFunctionFactory.getShiftedSurface(CONSTANT, shift, false); Surface<Double, Double, Double> expected = new ConstantSurfaceMultiplicativeShiftFunction().evaluate(CONSTANT, shift); assertEquals(shifted.getClass(), expected.getClass()); assertEquals(shifted.getZValue(1., 2.), expected.getZValue(1., 2.), 0); shifted = SurfaceShiftFunctionFactory.getShiftedSurface(INTERPOLATED, shift, false); expected = new InterpolatedSurfaceMultiplicativeShiftFunction().evaluate(INTERPOLATED, shift); assertEquals(shifted.getClass(), expected.getClass()); assertArrayEquals(shifted.getXData(), expected.getXData()); assertArrayEquals(shifted.getYData(), expected.getYData()); assertEquals(((InterpolatedDoublesSurface) shifted).getInterpolator(), ((InterpolatedDoublesSurface) expected).getInterpolator()); shifted = SurfaceShiftFunctionFactory.getShiftedSurface(NODAL, shift, false); expected = new NodalSurfaceMultiplicativeShiftFunction().evaluate(NODAL, shift); assertEquals(shifted.getClass(), expected.getClass()); assertArrayEquals(shifted.getXData(), expected.getXData()); assertArrayEquals(shifted.getYData(), expected.getYData()); shifted = SurfaceShiftFunctionFactory.getShiftedSurface(FUNCTIONAL, shift, false); expected = new FunctionalSurfaceMultiplicativeShiftFunction().evaluate(FUNCTIONAL, shift); assertEquals(shifted.getClass(), expected.getClass()); assertEquals(shifted.getZValue(1., 2.), expected.getZValue(1., 2.)); final String newName = "F"; shifted = SurfaceShiftFunctionFactory.getShiftedSurface(CONSTANT, shift, newName, false); expected = new ConstantSurfaceMultiplicativeShiftFunction().evaluate(CONSTANT, shift, newName); assertEquals(expected, shifted); shifted = SurfaceShiftFunctionFactory.getShiftedSurface(INTERPOLATED, shift, newName, false); expected = new InterpolatedSurfaceMultiplicativeShiftFunction().evaluate(INTERPOLATED, shift, newName); assertEquals(expected, shifted); shifted = SurfaceShiftFunctionFactory.getShiftedSurface(NODAL, shift, newName, false); expected = new NodalSurfaceMultiplicativeShiftFunction().evaluate(NODAL, shift, newName); assertEquals(expected, shifted); shifted = SurfaceShiftFunctionFactory.getShiftedSurface(FUNCTIONAL, shift, newName, false); expected = new FunctionalSurfaceMultiplicativeShiftFunction().evaluate(FUNCTIONAL, shift, newName); assertEquals(shifted.getClass(), expected.getClass()); assertEquals(shifted.getZValue(1., 2.), expected.getZValue(1., 2.)); assertEquals(shifted.getName(), expected.getName()); }
@Test(expectedExceptions = UnsupportedOperationException.class) public void testGetShiftedSurfaceUnsupported1() { SurfaceShiftFunctionFactory.getShiftedSurface(CONSTANT, 1, 1, 2, true); }
@Test(expectedExceptions = UnsupportedOperationException.class) public void testGetShiftedSurfaceUnsupported2() { SurfaceShiftFunctionFactory.getShiftedSurface(CONSTANT, 1, 1, 2, "M", true); }
@Test(expectedExceptions = UnsupportedOperationException.class) public void testGetShiftedSurfaceUnsupported3() { SurfaceShiftFunctionFactory.getShiftedSurface(FUNCTIONAL, 1, 1, 2, true); }
@Test(expectedExceptions = UnsupportedOperationException.class) public void testGetShiftedSurfaceUnsupported4() { SurfaceShiftFunctionFactory.getShiftedSurface(FUNCTIONAL, 1, 1, 2, "M", true); }
@Test(expectedExceptions = UnsupportedOperationException.class) public void testGetShiftedSurfaceUnsupported5() { SurfaceShiftFunctionFactory.getShiftedSurface(CONSTANT, 1, 1, 2, false); }
@Test(expectedExceptions = UnsupportedOperationException.class) public void testGetShiftedSurfaceUnsupported6() { SurfaceShiftFunctionFactory.getShiftedSurface(CONSTANT, 1, 1, 2, "M", false); }
@Test(expectedExceptions = UnsupportedOperationException.class) public void testGetShiftedSurfaceUnsupported7() { SurfaceShiftFunctionFactory.getShiftedSurface(FUNCTIONAL, 1, 1, 2, false); }
@Test(expectedExceptions = UnsupportedOperationException.class) public void testGetShiftedSurfaceUnsupported8() { SurfaceShiftFunctionFactory.getShiftedSurface(FUNCTIONAL, 1, 1, 2, "M", false); }
@Test public void testGetAdditiveShiftedSurface2() { final double x = 1; final double y = 1; final double shift = 2; Surface<Double, Double, Double> shifted = SurfaceShiftFunctionFactory.getShiftedSurface(INTERPOLATED, x, y, shift, true); Surface<Double, Double, Double> expected = new InterpolatedSurfaceAdditiveShiftFunction().evaluate(INTERPOLATED, x, y, shift); assertEquals(shifted.getClass(), expected.getClass()); assertArrayEquals(shifted.getXData(), expected.getXData()); assertArrayEquals(shifted.getYData(), expected.getYData()); assertEquals(((InterpolatedDoublesSurface) shifted).getInterpolator(), ((InterpolatedDoublesSurface) expected).getInterpolator()); shifted = SurfaceShiftFunctionFactory.getShiftedSurface(INTERPOLATED_FROM_CURVES, x, y, shift, true); expected = new InterpolatedFromCurvesSurfaceAdditiveShiftFunction().evaluate(INTERPOLATED_FROM_CURVES, x, y, shift); assertEquals(shifted.getClass(), expected.getClass()); assertArrayEquals(((InterpolatedFromCurvesDoublesSurface) shifted).getCurves(), ((InterpolatedFromCurvesDoublesSurface) expected).getCurves()); assertEquals(((InterpolatedFromCurvesDoublesSurface) shifted).getInterpolator(), ((InterpolatedFromCurvesDoublesSurface) expected).getInterpolator()); shifted = SurfaceShiftFunctionFactory.getShiftedSurface(NODAL, x, y, shift, true); expected = new NodalSurfaceAdditiveShiftFunction().evaluate(NODAL, x, y, shift); assertEquals(shifted.getClass(), expected.getClass()); assertArrayEquals(shifted.getXData(), expected.getXData()); assertArrayEquals(shifted.getYData(), expected.getYData()); final String newName = "H"; shifted = SurfaceShiftFunctionFactory.getShiftedSurface(INTERPOLATED, x, y, shift, newName, true); expected = new InterpolatedSurfaceAdditiveShiftFunction().evaluate(INTERPOLATED, x, y, shift, newName); assertEquals(shifted, expected); shifted = SurfaceShiftFunctionFactory.getShiftedSurface(INTERPOLATED_FROM_CURVES, x, y, shift, newName, true); expected = new InterpolatedFromCurvesSurfaceAdditiveShiftFunction().evaluate(INTERPOLATED_FROM_CURVES, x, y, shift, newName); assertEquals(shifted, expected); shifted = SurfaceShiftFunctionFactory.getShiftedSurface(NODAL, x, y, shift, newName, true); expected = new NodalSurfaceAdditiveShiftFunction().evaluate(NODAL, x, y, shift, newName); assertEquals(shifted, expected); }
@Test public void testGetMultiplicativeShiftedSurface2() { final double x = 1; final double y = 1; final double shift = 2; Surface<Double, Double, Double> shifted = SurfaceShiftFunctionFactory.getShiftedSurface(INTERPOLATED, x, y, shift, false); Surface<Double, Double, Double> expected = new InterpolatedSurfaceMultiplicativeShiftFunction().evaluate(INTERPOLATED, x, y, shift); assertEquals(shifted.getClass(), expected.getClass()); assertArrayEquals(shifted.getXData(), expected.getXData()); assertArrayEquals(shifted.getYData(), expected.getYData()); assertEquals(((InterpolatedDoublesSurface) shifted).getInterpolator(), ((InterpolatedDoublesSurface) expected).getInterpolator()); shifted = SurfaceShiftFunctionFactory.getShiftedSurface(NODAL, x, y, shift, false); expected = new NodalSurfaceMultiplicativeShiftFunction().evaluate(NODAL, x, y, shift); assertEquals(shifted.getClass(), expected.getClass()); assertArrayEquals(shifted.getXData(), expected.getXData()); assertArrayEquals(shifted.getYData(), expected.getYData()); final String newName = "H"; shifted = SurfaceShiftFunctionFactory.getShiftedSurface(INTERPOLATED, x, y, shift, newName, false); expected = new InterpolatedSurfaceMultiplicativeShiftFunction().evaluate(INTERPOLATED, x, y, shift, newName); assertEquals(shifted, expected); shifted = SurfaceShiftFunctionFactory.getShiftedSurface(NODAL, x, y, shift, newName, false); expected = new NodalSurfaceMultiplicativeShiftFunction().evaluate(NODAL, x, y, shift, newName); assertEquals(shifted, expected); }
@Test(expectedExceptions = UnsupportedOperationException.class) public void testGetShiftedSurfaceUnsupported9() { SurfaceShiftFunctionFactory.getShiftedSurface(CONSTANT, new double[] {1}, new double[] {1}, new double[] {2}, true); }
@Test(expectedExceptions = UnsupportedOperationException.class) public void testGetShiftedSurfaceUnsupported10() { SurfaceShiftFunctionFactory.getShiftedSurface(CONSTANT, new double[] {1}, new double[] {1}, new double[] {2}, "M", true); }
@Test(expectedExceptions = UnsupportedOperationException.class) public void testGetShiftedSurfaceUnsupported11() { SurfaceShiftFunctionFactory.getShiftedSurface(FUNCTIONAL, new double[] {1}, new double[] {1}, new double[] {2}, true); }
@Test(expectedExceptions = UnsupportedOperationException.class) public void testGetShiftedSurfaceUnsupported12() { SurfaceShiftFunctionFactory.getShiftedSurface(FUNCTIONAL, new double[] {1}, new double[] {1}, new double[] {2}, "M", true); }
@Test(expectedExceptions = UnsupportedOperationException.class) public void testGetShiftedSurfaceUnsupported13() { SurfaceShiftFunctionFactory.getShiftedSurface(CONSTANT, new double[] {1}, new double[] {1}, new double[] {2}, false); }
@Test(expectedExceptions = UnsupportedOperationException.class) public void testGetShiftedSurfaceUnsupported14() { SurfaceShiftFunctionFactory.getShiftedSurface(CONSTANT, new double[] {1}, new double[] {1}, new double[] {2}, "M", false); }
@Test(expectedExceptions = UnsupportedOperationException.class) public void testGetShiftedSurfaceUnsupported15() { SurfaceShiftFunctionFactory.getShiftedSurface(FUNCTIONAL, new double[] {1}, new double[] {1}, new double[] {2}, false); }
@Test(expectedExceptions = UnsupportedOperationException.class) public void testGetShiftedSurfaceUnsupported16() { SurfaceShiftFunctionFactory.getShiftedSurface(FUNCTIONAL, new double[] {1}, new double[] {1}, new double[] {2}, "M", false); }
@Test public void testGetAdditiveShiftedSurface3() { final double[] x = new double[] {1}; final double[] y = new double[] {1}; final double[] shift = new double[] {2}; Surface<Double, Double, Double> shifted = SurfaceShiftFunctionFactory.getShiftedSurface(INTERPOLATED, x, y, shift, true); Surface<Double, Double, Double> expected = new InterpolatedSurfaceAdditiveShiftFunction().evaluate(INTERPOLATED, x, y, shift); assertEquals(shifted.getClass(), expected.getClass()); assertArrayEquals(shifted.getXData(), expected.getXData()); assertArrayEquals(shifted.getYData(), expected.getYData()); assertEquals(((InterpolatedDoublesSurface) shifted).getInterpolator(), ((InterpolatedDoublesSurface) expected).getInterpolator()); shifted = SurfaceShiftFunctionFactory.getShiftedSurface(INTERPOLATED_FROM_CURVES, x, y, shift, true); expected = new InterpolatedFromCurvesSurfaceAdditiveShiftFunction().evaluate(INTERPOLATED_FROM_CURVES, x, y, shift); assertEquals(shifted.getClass(), expected.getClass()); assertArrayEquals(((InterpolatedFromCurvesDoublesSurface) shifted).getCurves(), ((InterpolatedFromCurvesDoublesSurface) expected).getCurves()); assertEquals(((InterpolatedFromCurvesDoublesSurface) shifted).getInterpolator(), ((InterpolatedFromCurvesDoublesSurface) expected).getInterpolator()); shifted = SurfaceShiftFunctionFactory.getShiftedSurface(NODAL, x, y, shift, true); expected = new NodalSurfaceAdditiveShiftFunction().evaluate(NODAL, x, y, shift); assertEquals(shifted.getClass(), expected.getClass()); assertArrayEquals(shifted.getXData(), expected.getXData()); assertArrayEquals(shifted.getYData(), expected.getYData()); final String newName = "H"; shifted = SurfaceShiftFunctionFactory.getShiftedSurface(INTERPOLATED, x, y, shift, newName, true); expected = new InterpolatedSurfaceAdditiveShiftFunction().evaluate(INTERPOLATED, x, y, shift, newName); assertEquals(shifted, expected); shifted = SurfaceShiftFunctionFactory.getShiftedSurface(INTERPOLATED_FROM_CURVES, x, y, shift, newName, true); expected = new InterpolatedFromCurvesSurfaceAdditiveShiftFunction().evaluate(INTERPOLATED_FROM_CURVES, x, y, shift, newName); assertEquals(shifted, expected); shifted = SurfaceShiftFunctionFactory.getShiftedSurface(NODAL, x, y, shift, newName, true); expected = new NodalSurfaceAdditiveShiftFunction().evaluate(NODAL, x, y, shift, newName); assertEquals(shifted, expected); }
@Test public void testGetMultiplicativeShiftedSurface3() { final double[] x = new double[] {1}; final double[] y = new double[] {1}; final double[] shift = new double[] {2}; Surface<Double, Double, Double> shifted = SurfaceShiftFunctionFactory.getShiftedSurface(INTERPOLATED, x, y, shift, false); Surface<Double, Double, Double> expected = new InterpolatedSurfaceMultiplicativeShiftFunction().evaluate(INTERPOLATED, x, y, shift); assertEquals(shifted.getClass(), expected.getClass()); assertArrayEquals(shifted.getXData(), expected.getXData()); assertArrayEquals(shifted.getYData(), expected.getYData()); assertEquals(((InterpolatedDoublesSurface) shifted).getInterpolator(), ((InterpolatedDoublesSurface) expected).getInterpolator()); shifted = SurfaceShiftFunctionFactory.getShiftedSurface(NODAL, x, y, shift, false); expected = new NodalSurfaceMultiplicativeShiftFunction().evaluate(NODAL, x, y, shift); assertEquals(shifted.getClass(), expected.getClass()); assertArrayEquals(shifted.getXData(), expected.getXData()); assertArrayEquals(shifted.getYData(), expected.getYData()); final String newName = "H"; shifted = SurfaceShiftFunctionFactory.getShiftedSurface(INTERPOLATED, x, y, shift, newName, false); expected = new InterpolatedSurfaceMultiplicativeShiftFunction().evaluate(INTERPOLATED, x, y, shift, newName); assertEquals(shifted, expected); shifted = SurfaceShiftFunctionFactory.getShiftedSurface(NODAL, x, y, shift, newName, false); expected = new NodalSurfaceMultiplicativeShiftFunction().evaluate(NODAL, x, y, shift, newName); assertEquals(shifted, expected); }