// Path: src/main/java/com/oxande/wavecleaner/util/logging/LogFactory.java
// public class LogFactory {
// 	public static final Logger getLog(final Class<?> clazz) {
// 		Logger log = LogManager.getLogger(clazz);
// 		return log;
// 	}
// }


import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.ArrayList;
import java.util.List;
import org.apache.logging.log4j.Logger;
import com.oxande.wavecleaner.util.logging.LogFactory;
			// Update the tangents to preserve monotonicity.
			for (int i = 0; i < n - 1; i++) {
				if (d[i] == 0f) { // successive Y values are equal
					m[i] = 0f;
					m[i + 1] = 0f;
				} else {
					float a = m[i] / d[i];
					float b = m[i + 1] / d[i];
					float h = (float) Math.hypot(a, b);
					if (h > 9f) {
						float t = 3f / h;
						m[i] = t * a * d[i];
						m[i + 1] = t * b * d[i];
					}
				}
			}
			return new SplineInterpolator(x, y, m);
		}

		/**
		 * Interpolates the value of Y = f(X) for given X. Clamps X to the domain of the spline.
		 * 
		 * @param x
		 *            The X value.
		 * @return The interpolated Y = f(X) value.
		 */
		public float interpolate(float x) {
			// Handle the boundary cases.
			final int n = mX.size();
			if (Float.isNaN(x)) {
// Path: src/main/java/com/oxande/wavecleaner/util/logging/LogFactory.java
// public class LogFactory {
// 	public static final Logger getLog(final Class<?> clazz) {
// 		Logger log = LogManager.getLogger(clazz);
// 		return log;
// 	}
// }


// Path: src/main/java/com/oxande/wavecleaner/filters/ClickRemovalFilter.java
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.ArrayList;
import java.util.List;
import org.apache.logging.log4j.Logger;
import com.oxande.wavecleaner.util.logging.LogFactory;

			// Update the tangents to preserve monotonicity.
			for (int i = 0; i < n - 1; i++) {
				if (d[i] == 0f) { // successive Y values are equal
					m[i] = 0f;
					m[i + 1] = 0f;
				} else {
					float a = m[i] / d[i];
					float b = m[i + 1] / d[i];
					float h = (float) Math.hypot(a, b);
					if (h > 9f) {
						float t = 3f / h;
						m[i] = t * a * d[i];
						m[i + 1] = t * b * d[i];
					}
				}
			}
			return new SplineInterpolator(x, y, m);
		}

		/**
		 * Interpolates the value of Y = f(X) for given X. Clamps X to the domain of the spline.
		 * 
		 * @param x
		 *            The X value.
		 * @return The interpolated Y = f(X) value.
		 */
		public float interpolate(float x) {
			// Handle the boundary cases.
			final int n = mX.size();
			if (Float.isNaN(x)) {
				return x;